diff --git a/user/src/com/google/gwt/event/logical/shared/BeforeSelectionEvent.java b/user/src/com/google/gwt/event/logical/shared/BeforeSelectionEvent.java
index 3fe1144..4d0c6d4 100644
--- a/user/src/com/google/gwt/event/logical/shared/BeforeSelectionEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/BeforeSelectionEvent.java
@@ -20,10 +20,10 @@
 /**
  * Represents a before selection event.
  * 
- * @param <I> the type about to be selected
+ * @param <T> the type about to be selected
  */
-public class BeforeSelectionEvent<I> extends
-    GwtEvent<BeforeSelectionHandler<I>> {
+public class BeforeSelectionEvent<T> extends
+    GwtEvent<BeforeSelectionHandler<T>> {
 
   /**
    * Handler type.
@@ -34,17 +34,17 @@
    * Fires a before selection event on all registered handlers in the handler
    * manager. If no such handlers exist, this method will do nothing.
    * 
-   * @param <I> the item type
+   * @param <T> the item type
    * @param source the source of the handlers
    * @param item the item
    * @return the event so that the caller can check if it was canceled, or null
    *         if no handlers of this event type have been registered
    */
-  public static <I> BeforeSelectionEvent<I> fire(
-      HasBeforeSelectionHandlers<I> source, I item) {
+  public static <T> BeforeSelectionEvent<T> fire(
+      HasBeforeSelectionHandlers<T> source, T item) {
     // If no handlers exist, then type can be null.
     if (TYPE != null) {
-      BeforeSelectionEvent<I> event = new BeforeSelectionEvent<I>();
+      BeforeSelectionEvent<T> event = new BeforeSelectionEvent<T>();
       event.setItem(item);
       source.fireEvent(event);
       return event;
@@ -64,7 +64,7 @@
     return TYPE;
   }
 
-  private I item;
+  private T item;
 
   private boolean canceled;
 
@@ -87,7 +87,7 @@
   // field itself does not, so we have to do an unsafe cast here.
   @SuppressWarnings("unchecked")
   @Override
-  public final Type<BeforeSelectionHandler<I>> getAssociatedType() {
+  public final Type<BeforeSelectionHandler<T>> getAssociatedType() {
     return (Type) TYPE;
   }
 
@@ -96,7 +96,7 @@
    * 
    * @return the item
    */
-  public I getItem() {
+  public T getItem() {
     return item;
   }
 
@@ -110,7 +110,7 @@
   }
 
   @Override
-  protected void dispatch(BeforeSelectionHandler<I> handler) {
+  protected void dispatch(BeforeSelectionHandler<T> handler) {
     handler.onBeforeSelection(this);
   }
 
@@ -119,7 +119,7 @@
    * 
    * @param item the item
    */
-  protected final void setItem(I item) {
+  protected final void setItem(T item) {
     this.item = item;
   }
 }
diff --git a/user/src/com/google/gwt/event/logical/shared/BeforeSelectionHandler.java b/user/src/com/google/gwt/event/logical/shared/BeforeSelectionHandler.java
index 8671139..9ccb0a3 100644
--- a/user/src/com/google/gwt/event/logical/shared/BeforeSelectionHandler.java
+++ b/user/src/com/google/gwt/event/logical/shared/BeforeSelectionHandler.java
@@ -20,14 +20,14 @@
 /**
  * Handler interface for {@link BeforeSelectionEvent} events.
  * 
- * @param <I> the type about to be selected
+ * @param <T> the type about to be selected
  */
-public interface BeforeSelectionHandler<I> extends EventHandler {
+public interface BeforeSelectionHandler<T> extends EventHandler {
 
   /**
    * Called when {@link BeforeSelectionEvent} is fired.
    * 
    * @param event the {@link BeforeSelectionEvent} that was fired
    */
-  void onBeforeSelection(BeforeSelectionEvent<I> event);
+  void onBeforeSelection(BeforeSelectionEvent<T> event);
 }
diff --git a/user/src/com/google/gwt/event/logical/shared/HasBeforeSelectionHandlers.java b/user/src/com/google/gwt/event/logical/shared/HasBeforeSelectionHandlers.java
index f88119d..41d6d88 100644
--- a/user/src/com/google/gwt/event/logical/shared/HasBeforeSelectionHandlers.java
+++ b/user/src/com/google/gwt/event/logical/shared/HasBeforeSelectionHandlers.java
@@ -22,9 +22,9 @@
  * A widget that implements this interface is a public source of
  * {@link BeforeSelectionEvent} events.
  * 
- * @param <I> the type about to be selected
+ * @param <T> the type about to be selected
  */
-public interface HasBeforeSelectionHandlers<I> extends HasHandlers {
+public interface HasBeforeSelectionHandlers<T> extends HasHandlers {
   /**
    * Adds a {@link BeforeSelectionEvent} handler.
    * 
@@ -32,5 +32,5 @@
    * @return the registration for the event
    */
   HandlerRegistration addBeforeSelectionHandler(
-      BeforeSelectionHandler<I> handler);
+      BeforeSelectionHandler<T> handler);
 }
diff --git a/user/src/com/google/gwt/event/logical/shared/HasSelectionHandlers.java b/user/src/com/google/gwt/event/logical/shared/HasSelectionHandlers.java
index e3404da..cd3fa56 100644
--- a/user/src/com/google/gwt/event/logical/shared/HasSelectionHandlers.java
+++ b/user/src/com/google/gwt/event/logical/shared/HasSelectionHandlers.java
@@ -22,14 +22,14 @@
  * A widget that implements this interface is a public source of
  * {@link SelectionEvent} events.
  * 
- * @param <I> the type being selected
+ * @param <T> the type being selected
  */
-public interface HasSelectionHandlers<I> extends HasHandlers {
+public interface HasSelectionHandlers<T> extends HasHandlers {
   /**
    * Adds a {@link SelectionEvent} handler.
    * 
    * @param handler the handler
    * @return the registration for the event
    */
-  HandlerRegistration addSelectionHandler(SelectionHandler<I> handler);
+  HandlerRegistration addSelectionHandler(SelectionHandler<T> handler);
 }
diff --git a/user/src/com/google/gwt/event/logical/shared/HasValueChangeHandlers.java b/user/src/com/google/gwt/event/logical/shared/HasValueChangeHandlers.java
index 187a1d2..5742d65 100644
--- a/user/src/com/google/gwt/event/logical/shared/HasValueChangeHandlers.java
+++ b/user/src/com/google/gwt/event/logical/shared/HasValueChangeHandlers.java
@@ -22,14 +22,14 @@
  * A widget that implements this interface is a public source of
  * {@link ValueChangeEvent} events.
  * 
- * @param <I> the value about to be changed
+ * @param <T> the value about to be changed
  */
-public interface HasValueChangeHandlers<I> extends HasHandlers {
+public interface HasValueChangeHandlers<T> extends HasHandlers {
   /**
    * Adds a {@link ValueChangeEvent} handler.
    * 
    * @param handler the handler
    * @return the registration for the event
    */
-  HandlerRegistration addValueChangeHandler(ValueChangeHandler<I> handler);
+  HandlerRegistration addValueChangeHandler(ValueChangeHandler<T> handler);
 }
diff --git a/user/src/com/google/gwt/event/logical/shared/SelectionEvent.java b/user/src/com/google/gwt/event/logical/shared/SelectionEvent.java
index abe083d..d10b29d 100644
--- a/user/src/com/google/gwt/event/logical/shared/SelectionEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/SelectionEvent.java
@@ -20,9 +20,9 @@
 /**
  * Represents a selection event.
  * 
- * @param <I> the type being selected
+ * @param <T> the type being selected
  */
-public class SelectionEvent<I> extends GwtEvent<SelectionHandler<I>> {
+public class SelectionEvent<T> extends GwtEvent<SelectionHandler<T>> {
 
   /**
    * Handler type.
@@ -33,13 +33,13 @@
    * Fires a selection event on all registered handlers in the handler
    * manager.If no such handlers exist, this method will do nothing.
    * 
-   * @param <I> the selected item type
+   * @param <T> the selected item type
    * @param source the source of the handlers
    * @param selectedItem the selected item
    */
-  public static <I> void fire(HasSelectionHandlers<I> source, I selectedItem) {
+  public static <T> void fire(HasSelectionHandlers<T> source, T selectedItem) {
     if (TYPE != null) {
-      SelectionEvent<I> event = new SelectionEvent<I>(selectedItem);
+      SelectionEvent<T> event = new SelectionEvent<T>(selectedItem);
       source.fireEvent(event);
     }
   }
@@ -56,14 +56,14 @@
     return TYPE;
   }
 
-  private final I selectedItem;
+  private final T selectedItem;
 
   /**
    * Creates a new selection event.
    * 
    * @param selectedItem selected item
    */
-  protected SelectionEvent(I selectedItem) {
+  protected SelectionEvent(T selectedItem) {
     this.selectedItem = selectedItem;
   }
 
@@ -71,7 +71,7 @@
   // field itself does not, so we have to do an unsafe cast here.
   @SuppressWarnings("unchecked")
   @Override
-  public final Type<SelectionHandler<I>> getAssociatedType() {
+  public final Type<SelectionHandler<T>> getAssociatedType() {
     return (Type) TYPE;
   }
 
@@ -80,12 +80,12 @@
    * 
    * @return the selected item
    */
-  public I getSelectedItem() {
+  public T getSelectedItem() {
     return selectedItem;
   }
 
   @Override
-  protected void dispatch(SelectionHandler<I> handler) {
+  protected void dispatch(SelectionHandler<T> handler) {
     handler.onSelection(this);
   }
 }
diff --git a/user/src/com/google/gwt/event/logical/shared/SelectionHandler.java b/user/src/com/google/gwt/event/logical/shared/SelectionHandler.java
index f9f2e07..1370092 100644
--- a/user/src/com/google/gwt/event/logical/shared/SelectionHandler.java
+++ b/user/src/com/google/gwt/event/logical/shared/SelectionHandler.java
@@ -20,14 +20,14 @@
 /**
  * Handler interface for {@link SelectionEvent} events.
  * 
- * @param <I> the type being selected
+ * @param <T> the type being selected
  */
-public interface SelectionHandler<I> extends EventHandler {
+public interface SelectionHandler<T> extends EventHandler {
 
   /**
    * Called when {@link SelectionEvent} is fired.
    * 
    * @param event the {@link SelectionEvent} that was fired
    */
-  void onSelection(SelectionEvent<I> event);
+  void onSelection(SelectionEvent<T> event);
 }
diff --git a/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java b/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java
index bf71cf2..551063d 100644
--- a/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/ValueChangeEvent.java
@@ -20,9 +20,9 @@
 /**
  * Represents a value change event.
  * 
- * @param <I> the value about to be changed
+ * @param <T> the value about to be changed
  */
-public class ValueChangeEvent<I> extends GwtEvent<ValueChangeHandler<I>> {
+public class ValueChangeEvent<T> extends GwtEvent<ValueChangeHandler<T>> {
 
   /**
    * Handler type.
@@ -37,9 +37,9 @@
    * @param source the source of the handlers
    * @param value the value
    */
-  public static <I> void fire(HasValueChangeHandlers<I> source, I value) {
+  public static <T> void fire(HasValueChangeHandlers<T> source, T value) {
     if (TYPE != null) {
-      ValueChangeEvent<I> event = new ValueChangeEvent<I>(value);
+      ValueChangeEvent<T> event = new ValueChangeEvent<T>(value);
       source.fireEvent(event);
     }
   }
@@ -49,15 +49,15 @@
    * Use this call rather than making the decision to short circuit yourself for
    * safe handling of null.
    * 
-   * @param <I> the old value type
+   * @param <T> the old value type
    * @param source the source of the handlers
    * @param oldValue the oldValue, may be null
    * @param newValue the newValue, may be null
    */
-  public static <I> void fireIfNotEqual(HasValueChangeHandlers<I> source,
-      I oldValue, I newValue) {
+  public static <T> void fireIfNotEqual(HasValueChangeHandlers<T> source,
+      T oldValue, T newValue) {
     if (shouldFire(source, oldValue, newValue)) {
-      ValueChangeEvent<I> event = new ValueChangeEvent<I>(newValue);
+      ValueChangeEvent<T> event = new ValueChangeEvent<T>(newValue);
       source.fireEvent(event);
     }
   }
@@ -78,26 +78,26 @@
    * Convenience method to allow subtypes to know when they should fire a value
    * change event in a null-safe manner.
    * 
-   * @param <I> value type
+   * @param <T> value type
    * @param source the source
    * @param oldValue the old value
    * @param newValue the new value
    * @return whether the event should be fired
    */
-  protected static <I> boolean shouldFire(HasValueChangeHandlers<I> source,
-      I oldValue, I newValue) {
+  protected static <T> boolean shouldFire(HasValueChangeHandlers<T> source,
+      T oldValue, T newValue) {
     return TYPE != null && oldValue != newValue
         && (oldValue == null || !oldValue.equals(newValue));
   }
 
-  private final I value;
+  private final T value;
 
   /**
    * Creates a value change event.
    * 
    * @param value the value
    */
-  protected ValueChangeEvent(I value) {
+  protected ValueChangeEvent(T value) {
     this.value = value;
   }
 
@@ -105,7 +105,7 @@
   // field itself does not, so we have to do an unsafe cast here.
   @SuppressWarnings({"unchecked", "rawtypes"})
   @Override
-  public final Type<ValueChangeHandler<I>> getAssociatedType() {
+  public final Type<ValueChangeHandler<T>> getAssociatedType() {
     return (Type) TYPE;
   }
 
@@ -114,7 +114,7 @@
    * 
    * @return the value
    */
-  public I getValue() {
+  public T getValue() {
     return value;
   }
  
@@ -124,7 +124,7 @@
   }
 
   @Override
-  protected void dispatch(ValueChangeHandler<I> handler) {
+  protected void dispatch(ValueChangeHandler<T> handler) {
     handler.onValueChange(this);
   }
 }
diff --git a/user/src/com/google/gwt/event/logical/shared/ValueChangeHandler.java b/user/src/com/google/gwt/event/logical/shared/ValueChangeHandler.java
index 9fb4772..0d38342 100644
--- a/user/src/com/google/gwt/event/logical/shared/ValueChangeHandler.java
+++ b/user/src/com/google/gwt/event/logical/shared/ValueChangeHandler.java
@@ -20,14 +20,14 @@
 /**
  * Handler interface for {@link ValueChangeEvent} events.
  * 
- * @param <I> the value about to be changed
+ * @param <T> the value about to be changed
  */
-public interface ValueChangeHandler<I> extends EventHandler {
+public interface ValueChangeHandler<T> extends EventHandler {
 
   /**
    * Called when {@link ValueChangeEvent} is fired.
    * 
    * @param event the {@link ValueChangeEvent} that was fired
    */
-  void onValueChange(ValueChangeEvent<I> event);
+  void onValueChange(ValueChangeEvent<T> event);
 }
diff --git a/user/src/com/google/gwt/user/client/ui/TabBar.java b/user/src/com/google/gwt/user/client/ui/TabBar.java
index e05079d..19367ea 100644
--- a/user/src/com/google/gwt/user/client/ui/TabBar.java
+++ b/user/src/com/google/gwt/user/client/ui/TabBar.java
@@ -259,8 +259,8 @@
   }
 
   /**
-   * @deprecated Use {@link #addBeforeSelectionHandler} and {#link
-   *             #addSelectionHandler} instead
+   * @deprecated Use {@link #addBeforeSelectionHandler(BeforeSelectionHandler)} 
+   * and {@link #addSelectionHandler(SelectionHandler)} instead
    */
   @Deprecated
   public void addTabListener(TabListener listener) {
diff --git a/user/src/com/google/gwt/user/datepicker/client/DateChangeEvent.java b/user/src/com/google/gwt/user/datepicker/client/DateChangeEvent.java
index c08c8cc..3734073 100644
--- a/user/src/com/google/gwt/user/datepicker/client/DateChangeEvent.java
+++ b/user/src/com/google/gwt/user/datepicker/client/DateChangeEvent.java
@@ -32,7 +32,6 @@
    * Use this call rather than making the decision to short circuit yourself for
    * safe handling of null.
    * 
-   * @param <I> the old value type
    * @param <S> The event source
    * @param source the source of the handlers
    * @param oldValue the oldValue, may be null
diff --git a/user/src/com/google/gwt/view/client/RangeChangeEvent.java b/user/src/com/google/gwt/view/client/RangeChangeEvent.java
index eaf0219..4a58b66 100644
--- a/user/src/com/google/gwt/view/client/RangeChangeEvent.java
+++ b/user/src/com/google/gwt/view/client/RangeChangeEvent.java
@@ -48,7 +48,7 @@
    * @param source the source of the handlers
    * @param range the new range
    */
-  public static <I> void fire(HasRows source, Range range) {
+  public static void fire(HasRows source, Range range) {
     if (TYPE != null) {
       RangeChangeEvent event = new RangeChangeEvent(range);
       source.fireEvent(event);
diff --git a/user/src/com/google/gwt/view/client/RowCountChangeEvent.java b/user/src/com/google/gwt/view/client/RowCountChangeEvent.java
index 19f71e9..c166d3e 100644
--- a/user/src/com/google/gwt/view/client/RowCountChangeEvent.java
+++ b/user/src/com/google/gwt/view/client/RowCountChangeEvent.java
@@ -48,7 +48,7 @@
    * @param source the source of the handlers
    * @param rowCount the new rowCount
    */
-  public static <I> void fire(HasRows source, int rowCount, boolean isExact) {
+  public static void fire(HasRows source, int rowCount, boolean isExact) {
     if (TYPE != null) {
       RowCountChangeEvent event = new RowCountChangeEvent(rowCount, isExact);
       source.fireEvent(event);
