Cherry picking bug fixes from trunk into release branch: 975801, 996801, 997801, 998801, 967801, 986801


git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/2.1@9070 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/DynaTableRf.gwt.xml b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/DynaTableRf.gwt.xml
index 4dd6e1d..63af732 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/DynaTableRf.gwt.xml
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/DynaTableRf.gwt.xml
@@ -22,7 +22,7 @@
   
   <inherits name='com.google.gwt.logging.Logging'/>
   <set-property name="gwt.logging.enabled" value="TRUE"/> 
-  <set-property name="gwt.logging.logLevel" value="INFO"/>
+  <set-property name="gwt.logging.logLevel" value="SEVERE"/>
   <set-property name="gwt.logging.consoleHandler" value="ENABLED" />
   <set-property name="gwt.logging.developmentModeHandler" value="ENABLED" />
   <set-property name="gwt.logging.firebugHandler" value="ENABLED" />
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/DynaTableRf.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/DynaTableRf.java
index 4f78598..377e8b2 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/DynaTableRf.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/DynaTableRf.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2007 Google Inc.
+ * Copyright 2010 Google Inc.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
@@ -28,7 +28,6 @@
 import com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
-import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.RootLayoutPanel;
 import com.google.gwt.user.client.ui.Widget;
 
@@ -57,10 +56,12 @@
   @UiField(provided = true)
   DayFilterWidget filter;
 
+  /**
+   * This method sets up the top-level services used by the application.
+   */
   public void onModuleLoad() {
     GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
       public void onUncaughtException(Throwable e) {
-        Window.alert("Error: " + e.getMessage());
         log.log(Level.SEVERE, e.getMessage(), e);
       }
     });
@@ -74,6 +75,7 @@
         return requests.loggingRequest();
       }
     };
+    Logger.getLogger("").addHandler(new ErrorDialog().getHandler());
     Logger.getLogger("").addHandler(
         new RequestFactoryLogHandler(provider, Level.WARNING,
             new ArrayList<String>()));
@@ -86,5 +88,13 @@
 
     RootLayoutPanel.get().add(
         GWT.<Binder> create(Binder.class).createAndBindUi(this));
+
+    // Fast test to see if the sample is not being run from devmode
+    if (GWT.getHostPageBaseURL().startsWith("file:")) {
+      log.log(Level.SEVERE, "The DynaTableRf sample cannot be run without its"
+          + " server component.  If you are running the sample from a"
+          + " GWT distribution, use the 'ant devmode' target to launch"
+          + " the DTRF server.");
+    }
   }
 }
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/ErrorDialog.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/ErrorDialog.java
new file mode 100644
index 0000000..63f0f8c
--- /dev/null
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/ErrorDialog.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2010 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.sample.dynatablerf.client;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.uibinder.client.UiHandler;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.ui.DialogBox;
+import com.google.gwt.user.client.ui.TextArea;
+
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+/**
+ * A simple glasspanel popup that terminates interaction with the application.
+ */
+class ErrorDialog {
+  interface Binder extends UiBinder<DialogBox, ErrorDialog> {
+  }
+
+  @UiField
+  DialogBox errorDialog;
+
+  @UiField
+  TextArea errorMessage;
+
+  public ErrorDialog() {
+    GWT.<Binder> create(Binder.class).createAndBindUi(this);
+  }
+
+  /**
+   * @return
+   */
+  public Handler getHandler() {
+    return new Handler() {
+      {
+        setLevel(Level.SEVERE);
+      }
+
+      @Override
+      public void close() {
+      }
+
+      @Override
+      public void flush() {
+      }
+
+      @Override
+      public void publish(LogRecord record) {
+        if (isLoggable(record)) {
+          errorMessage.setText(record.getMessage());
+          errorDialog.center();
+        }
+      }
+    };
+  }
+
+  @UiHandler("dismiss")
+  void onDismiss(ClickEvent event) {
+    errorDialog.hide();
+  }
+
+  @UiHandler("reload")
+  void onReload(ClickEvent event) {
+    Window.Location.reload();
+  }
+}
\ No newline at end of file
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/ErrorDialog.ui.xml b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/ErrorDialog.ui.xml
new file mode 100644
index 0000000..5ca904c
--- /dev/null
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/ErrorDialog.ui.xml
@@ -0,0 +1,39 @@
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'>
+  <ui:style>
+    .dialog {
+    	background: white;
+    	border: thin solid black;
+    	margin: 2px;
+    	overflow: hidden;
+    	padding: 5px;
+    	-moz-border-radius: 5px;
+    	-webkit-border-radius: 5px;
+    }
+    
+    .glass {
+    	filter: literal('alpha(opacity = 75)');
+    	opacity: 0.75;
+    	background-color: #000000;
+    }
+    
+    .message {
+    	height: 400px;
+    	width: 400px;
+    }
+  </ui:style>
+  <g:DialogBox ui:field="errorDialog" glassEnabled="true"
+    stylePrimaryName="{style.dialog}" glassStyleName="{style.glass}">
+    <g:caption>
+      <b>An unexpected application error has occurred</b>
+      <br />
+      You may wish to reload the application
+    </g:caption>
+    <g:HTMLPanel>
+      <g:TextArea ui:field="errorMessage" readOnly="true"
+        stylePrimaryName="{style.message}"></g:TextArea>
+      <br />
+      <g:Button ui:field="dismiss">Continue</g:Button>
+      <g:Button ui:field="reload">Reload</g:Button>
+    </g:HTMLPanel>
+  </g:DialogBox>
+</ui:UiBinder>
\ No newline at end of file
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/FavoritesManager.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/FavoritesManager.java
index b291835..a2696aa 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/FavoritesManager.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/FavoritesManager.java
@@ -82,14 +82,13 @@
     return favoriteIds.contains(person.stableId());
   }
 
-  public void setFavorite(PersonProxy person, boolean isFavorite) {
+  public void setFavorite(EntityProxyId<PersonProxy> id, boolean isFavorite) {
     if (isFavorite) {
-      favoriteIds.add(person.stableId());
+      favoriteIds.add(id);
     } else {
-      favoriteIds.remove(person.stableId());
+      favoriteIds.remove(id);
     }
 
-    eventBus.fireEventFromSource(new MarkFavoriteEvent(person, isFavorite),
-        this);
+    eventBus.fireEventFromSource(new MarkFavoriteEvent(id, isFavorite), this);
   }
 }
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/PersonEditorWorkflow.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/PersonEditorWorkflow.java
index 6e36f94..81dae75 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/PersonEditorWorkflow.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/PersonEditorWorkflow.java
@@ -30,8 +30,8 @@
 import com.google.gwt.sample.dynatablerf.client.events.EditPersonEvent;
 import com.google.gwt.sample.dynatablerf.client.widgets.PersonEditor;
 import com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory;
-import com.google.gwt.sample.dynatablerf.shared.PersonProxy;
 import com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory.PersonRequest;
+import com.google.gwt.sample.dynatablerf.shared.PersonProxy;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
@@ -99,38 +99,60 @@
     }, KeyUpEvent.getType());
   }
 
+  /**
+   * Called by the cancel button when it is clicked. This method will just tear
+   * down the UI and clear the state of the workflow.
+   */
   @UiHandler("cancel")
-  void onCancel(@SuppressWarnings("unused") ClickEvent event) {
+  void onCancel(ClickEvent event) {
     dialog.hide();
   }
 
+  /**
+   * Called by the edit dialog's save button. This method will flush the
+   * contents of the UI into the PersonProxy that is being edited, check for
+   * errors, and send the request to the server.
+   */
   @UiHandler("save")
-  void onSave(@SuppressWarnings("unused") ClickEvent event) {
-    // MOVE TO ACTIVITY END
+  void onSave(ClickEvent event) {
+    // Flush the contents of the UI
     RequestContext context = editorDriver.flush();
+
+    // Check for errors
     if (editorDriver.hasErrors()) {
       dialog.setText("Errors detected locally");
       return;
     }
+
+    // Send the request
     context.fire(new Receiver<Void>() {
       @Override
       public void onSuccess(Void response) {
+        // If everything went as planned, just dismiss the dialog box
         dialog.hide();
       }
 
       @Override
       public void onViolation(Set<Violation> errors) {
+        // Otherwise, show ConstraintViolations in the UI
         dialog.setText("Errors detected on the server");
         editorDriver.setViolations(errors);
       }
     });
   }
 
+  /**
+   * Called by the favorite checkbox when its value has been toggled.
+   */
   @UiHandler("favorite")
-  void onValueChanged(@SuppressWarnings("unused") ValueChangeEvent<Boolean> event) {
-    manager.setFavorite(person, favorite.getValue());
+  void onValueChanged(ValueChangeEvent<Boolean> event) {
+    manager.setFavorite(person.stableId(), favorite.getValue());
   }
 
+  /**
+   * Construct and display the UI that will be used to edit the current
+   * PersonProxy, using the given RequestContext to accumulate the edits.
+   */
   private void edit(RequestContext requestContext) {
     editorDriver = GWT.create(Driver.class);
     editorDriver.initialize(requestFactory, personEditor);
@@ -149,19 +171,23 @@
   private void fetchAndEdit() {
     // The request is configured arbitrarily
     Request<PersonProxy> fetchRequest = requestFactory.find(person.stableId());
-    // Add the paths that the EditorDelegate computes are necessary
+
+    // Add the paths that the EditorDrives computes
     fetchRequest.with(editorDriver.getPaths());
 
     // We could do more with the request, but we just fire it
-    fetchRequest.fire(new Receiver<PersonProxy>() {
+    fetchRequest.to(new Receiver<PersonProxy>() {
       @Override
       public void onSuccess(PersonProxy person) {
         PersonEditorWorkflow.this.person = person;
         // Start the edit process
         PersonRequest context = requestFactory.personRequest();
-        context.persist().using(person);
+        // Display the UI
         edit(context);
+        // Configure the method invocation to be sent in the context
+        context.persist().using(person);
+        // The context will be fire()'ed from the onSave() method
       }
-    });
+    }).fire();
   }
 }
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/events/MarkFavoriteEvent.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/events/MarkFavoriteEvent.java
index 0f04762..a63d1f0 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/events/MarkFavoriteEvent.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/events/MarkFavoriteEvent.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.event.shared.EventHandler;
 import com.google.gwt.event.shared.GwtEvent;
+import com.google.gwt.requestfactory.shared.EntityProxyId;
 import com.google.gwt.sample.dynatablerf.shared.PersonProxy;
 
 /**
@@ -32,11 +33,11 @@
 
   public static final Type<Handler> TYPE = new Type<Handler>();
 
-  private final PersonProxy person;
+  private final EntityProxyId<PersonProxy> id;
   private final boolean isFavorite;
 
-  public MarkFavoriteEvent(PersonProxy person, boolean isFavorite) {
-    this.person = person;
+  public MarkFavoriteEvent(EntityProxyId<PersonProxy> id, boolean isFavorite) {
+    this.id = id;
     this.isFavorite = isFavorite;
   }
 
@@ -45,8 +46,8 @@
     return TYPE;
   }
 
-  public PersonProxy getPerson() {
-    return person;
+  public EntityProxyId<PersonProxy> getId() {
+    return id;
   }
 
   public boolean isFavorite() {
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/AddressEditor.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/AddressEditor.java
index 3a210a2..f4578a6 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/AddressEditor.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/AddressEditor.java
@@ -38,7 +38,7 @@
   @UiField
   ValueBoxEditorDecorator<String> state;
   @UiField
-  ValueBoxEditorDecorator<Integer> zip;
+  ValueBoxEditorDecorator<String> zip;
 
   public AddressEditor() {
     initWidget(GWT.<Binder> create(Binder.class).createAndBindUi(this));
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/AddressEditor.ui.xml b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/AddressEditor.ui.xml
index 52c2792..992b10c 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/AddressEditor.ui.xml
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/AddressEditor.ui.xml
@@ -1,4 +1,5 @@
 <ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
+    xmlns:dt='urn:import:com.google.gwt.sample.dynatablerf.client.widgets'
     xmlns:g='urn:import:com.google.gwt.user.client.ui'
     xmlns:e='urn:import:com.google.gwt.editor.ui.client'>
   <ui:style src="../common.css">
@@ -34,7 +35,7 @@
       <e:ValueBoxEditorDecorator ui:field="zip"
         stylePrimaryName="{style.editField}">
         <e:valuebox>
-          <g:IntegerBox stylePrimaryName="{style.editField}" />
+          <dt:ZipPlusFourBox stylePrimaryName="{style.editField}" />
         </e:valuebox>
       </e:ValueBoxEditorDecorator>
       <br />
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/DayFilterWidget.ui.xml b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/DayFilterWidget.ui.xml
index f6ec9f9..658a9ab 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/DayFilterWidget.ui.xml
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/DayFilterWidget.ui.xml
@@ -1,5 +1,5 @@
-<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'
-  xmlns:dt='urn:import:com.google.gwt.sample.dynatablerf.client.widgets'>
+<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
+  xmlns:g='urn:import:com.google.gwt.user.client.ui' xmlns:dt='urn:import:com.google.gwt.sample.dynatablerf.client.widgets'>
   <ui:style>
     .all {
     	float: left;
@@ -14,23 +14,22 @@
     }
   </ui:style>
   <g:FlowPanel>
-    <dt:DayCheckBox ui:field="sunday" caption="Sunday" day="0"
-      styleName="{style.cb}" />
-    <dt:DayCheckBox ui:field="monday" caption="Monday" day="0"
-      styleName="{style.cb}" />
-    <dt:DayCheckBox ui:field="tuesday" caption="Tuesday" day="0"
-      styleName="{style.cb}" />
-    <dt:DayCheckBox ui:field="wednesday" caption="Wednesday" day="0"
-      styleName="{style.cb}" />
-    <dt:DayCheckBox ui:field="thursday" caption="Thursday" day="0"
-      styleName="{style.cb}" />
-    <dt:DayCheckBox ui:field="friday" caption="Friday" day="0"
-      styleName="{style.cb}" />
-    <dt:DayCheckBox ui:field="saturday" caption="Saturday" day="0"
-      styleName="{style.cb}" />
+    <dt:DayCheckBox ui:field="sunday" caption="Sunday"
+      day="0" styleName="{style.cb}" />
+    <dt:DayCheckBox ui:field="monday" caption="Monday"
+      day="1" styleName="{style.cb}" />
+    <dt:DayCheckBox ui:field="tuesday" caption="Tuesday"
+      day="2" styleName="{style.cb}" />
+    <dt:DayCheckBox ui:field="wednesday" caption="Wednesday"
+      day="3" styleName="{style.cb}" />
+    <dt:DayCheckBox ui:field="thursday" caption="Thursday"
+      day="4" styleName="{style.cb}" />
+    <dt:DayCheckBox ui:field="friday" caption="Friday"
+      day="5" styleName="{style.cb}" />
+    <dt:DayCheckBox ui:field="saturday" caption="Saturday"
+      day="6" styleName="{style.cb}" />
 
-    <g:Button ui:field="all" enabled="false" styleName="{style.all}">All</g:Button>
-    <g:Button ui:field="none" enabled="false" styleName="{style.none}">None</g:Button>
-    <g:Label>Not implemented yet</g:Label>
+    <g:Button ui:field="all" styleName="{style.all}">All</g:Button>
+    <g:Button ui:field="none" styleName="{style.none}">None</g:Button>
   </g:FlowPanel>
 </ui:UiBinder>
\ No newline at end of file
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/FavoritesWidget.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/FavoritesWidget.java
index 62e87d6..cc4b598 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/FavoritesWidget.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/FavoritesWidget.java
@@ -48,6 +48,10 @@
   interface Binder extends UiBinder<Widget, FavoritesWidget> {
   }
 
+  /**
+   * A driver that accepts a List of PersonProxy objects, controlled by a
+   * ListEditor of PersonProxy instances, displayed using NameLabels.
+   */
   interface Driver extends RequestFactoryEditorDriver<List<PersonProxy>, //
       ListEditor<PersonProxy, NameLabel>> {
   }
@@ -57,7 +61,7 @@
   }
 
   /**
-   * This is used by a ListEditor.
+   * This is used by the ListEditor to control the state of the UI.
    */
   private class NameLabelSource extends EditorSource<NameLabel> {
     @Override
@@ -86,10 +90,14 @@
   @UiField
   Style style;
 
+  /**
+   * This list is a facade provided by the ListEditor. Structural modifications
+   * to this list (e.g. add(), set(), remove()) will trigger UI update events.
+   */
   private final List<PersonProxy> displayedList;
   private final EventBus eventBus;
   private final RequestFactory factory;
-  private FavoritesManager manager;
+  private final FavoritesManager manager;
   private HandlerRegistration subscription;
 
   public FavoritesWidget(EventBus eventBus, RequestFactory factory,
@@ -111,9 +119,7 @@
     ListEditor<PersonProxy, NameLabel> listEditor = editor;
     driver.initialize(eventBus, factory, listEditor);
 
-    /*
-     * Notice the backing list is essentially anonymous.
-     */
+    // Notice the backing list is essentially anonymous.
     driver.display(new ArrayList<PersonProxy>());
 
     // Modifying this list triggers widget creation and destruction
@@ -122,19 +128,16 @@
 
   @Override
   protected void onLoad() {
+    // Subscribe to notifications from the FavoritesManager
     subscription = manager.addMarkFavoriteHandler(new MarkFavoriteEvent.Handler() {
       public void onMarkFavorite(MarkFavoriteEvent event) {
         FavoritesWidget.this.onMarkFavorite(event);
       }
     });
 
+    // Initialize the UI with the existing list of favorites
     for (EntityProxyId<PersonProxy> id : manager.getFavoriteIds()) {
-      factory.find(id).fire(new Receiver<PersonProxy>() {
-        @Override
-        public void onSuccess(PersonProxy person) {
-          onMarkFavorite(new MarkFavoriteEvent(person, true));
-        }
-      });
+      onMarkFavorite(new MarkFavoriteEvent(id, true));
     }
   }
 
@@ -143,31 +146,36 @@
     subscription.removeHandler();
   }
 
-  void onMarkFavorite(MarkFavoriteEvent event) {
-    PersonProxy person = event.getPerson();
-    if (person == null) {
+  private void onMarkFavorite(MarkFavoriteEvent event) {
+    EntityProxyId<PersonProxy> id = event.getId();
+    if (id == null) {
       return;
     }
 
     // EntityProxies should be compared by stable id
-    EntityProxyId<PersonProxy> lookFor = person.stableId();
     PersonProxy found = null;
     for (PersonProxy displayed : displayedList) {
-      if (displayed.stableId().equals(lookFor)) {
+      if (displayed.stableId().equals(id)) {
         found = displayed;
         break;
       }
     }
 
     if (event.isFavorite() && found == null) {
-      displayedList.add(person);
+      factory.find(id).to(new Receiver<PersonProxy>() {
+        @Override
+        public void onSuccess(PersonProxy response) {
+          displayedList.add(response);
+          sortDisplayedList();
+        }
+      }).fire();
     } else if (!event.isFavorite() && found != null) {
-      displayedList.remove(person);
-    } else {
-      // No change
-      return;
+      displayedList.remove(found);
+      sortDisplayedList();
     }
+  }
 
+  private void sortDisplayedList() {
     // Sorting the list of PersonProxies will also change the UI display
     Collections.sort(displayedList, new Comparator<PersonProxy>() {
       public int compare(PersonProxy o1, PersonProxy o2) {
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/MentorSelector.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/MentorSelector.java
index 7925ceb..b48101f 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/MentorSelector.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/MentorSelector.java
@@ -74,7 +74,7 @@
   }
 
   @UiHandler("choose")
-  void onChoose(@SuppressWarnings("unused") ClickEvent event) {
+  void onChoose(ClickEvent event) {
     setEnabled(false);
     factory.schoolCalendarRequest().getRandomPerson().to(
         new Receiver<PersonProxy>() {
@@ -87,7 +87,7 @@
   }
 
   @UiHandler("clear")
-  void onClear(@SuppressWarnings("unused") ClickEvent event) {
+  void onClear(ClickEvent event) {
     setValue(null);
   }
 
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/NameLabel.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/NameLabel.java
index d7ebe00..b169461 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/NameLabel.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/NameLabel.java
@@ -31,6 +31,10 @@
  * the displayed object.
  */
 class NameLabel extends Composite implements ValueAwareEditor<PersonProxy> {
+  /**
+   * Many of the GWT UI widgets that implement TakesValue also implement
+   * IsEditor and are directly usable as sub-Editors.
+   */
   final Label nameEditor = new Label();
   private PersonProxy person;
   private HandlerRegistration subscription;
@@ -59,7 +63,9 @@
   }
 
   public void setDelegate(EditorDelegate<PersonProxy> delegate) {
-    assert subscription == null;
+    if (subscription != null) {
+      subscription.removeHandler();
+    }
     subscription = delegate.subscribe();
   }
 
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java
index 348d2f2..213fd21 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/SummaryWidget.java
@@ -15,8 +15,12 @@
  */
 package com.google.gwt.sample.dynatablerf.client.widgets;
 
+import static com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory.SchoolCalendarRequest.ALL_DAYS;
+
 import com.google.gwt.cell.client.TextCell;
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.requestfactory.shared.EntityProxyChange;
@@ -28,15 +32,15 @@
 import com.google.gwt.sample.dynatablerf.client.events.FilterChangeEvent;
 import com.google.gwt.sample.dynatablerf.shared.AddressProxy;
 import com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory;
-import com.google.gwt.sample.dynatablerf.shared.PersonProxy;
 import com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory.PersonRequest;
+import com.google.gwt.sample.dynatablerf.shared.PersonProxy;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.uibinder.client.UiHandler;
 import com.google.gwt.user.cellview.client.CellTable;
 import com.google.gwt.user.cellview.client.Column;
-import com.google.gwt.user.cellview.client.SimplePager;
 import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy;
+import com.google.gwt.user.cellview.client.SimplePager;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.DockLayoutPanel;
 import com.google.gwt.user.client.ui.Widget;
@@ -45,6 +49,7 @@
 import com.google.gwt.view.client.SelectionChangeEvent;
 import com.google.gwt.view.client.SingleSelectionModel;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -111,13 +116,13 @@
   CellTable<PersonProxy> table;
 
   private final EventBus eventBus;
+  private List<Boolean> filter = new ArrayList<Boolean>(ALL_DAYS);
+  private int lastFetch;
   private final int numRows;
+  private boolean pending;
   private final DynaTableRequestFactory requestFactory;
   private final SingleSelectionModel<PersonProxy> selectionModel = new SingleSelectionModel<PersonProxy>();
 
-  private boolean[] filter = new boolean[] {
-      true, true, true, true, true, true, true};
-
   public SummaryWidget(EventBus eventBus,
       DynaTableRequestFactory requestFactory, int numRows) {
     this.eventBus = eventBus;
@@ -148,8 +153,16 @@
 
     FilterChangeEvent.register(eventBus, new FilterChangeEvent.Handler() {
       public void onFilterChanged(FilterChangeEvent e) {
-        filter[e.getDay()] = e.isSelected();
-        fetch(0);
+        filter.set(e.getDay(), e.isSelected());
+        if (!pending) {
+          pending = true;
+          Scheduler.get().scheduleFinally(new ScheduledCommand() {
+            public void execute() {
+              pending = false;
+              fetch(0);
+            }
+          });
+        }
       }
     });
 
@@ -162,8 +175,8 @@
     fetch(0);
   }
 
-  @UiHandler("create") 
-  void onCreate(@SuppressWarnings("unused") ClickEvent event) {
+  @UiHandler("create")
+  void onCreate(ClickEvent event) {
     PersonRequest context = requestFactory.personRequest();
     AddressProxy address = context.create(AddressProxy.class);
     PersonProxy person = context.edit(context.create(PersonProxy.class));
@@ -173,6 +186,12 @@
   }
 
   void onPersonChanged(EntityProxyChange<PersonProxy> event) {
+    if (WriteOperation.PERSIST.equals(event.getWriteOperation())) {
+      // Re-fetch if we're already displaying the last page
+      if (table.isRowCountExact()) {
+        fetch(lastFetch + 1);
+      }
+    }
     if (WriteOperation.UPDATE.equals(event.getWriteOperation())) {
       EntityProxyId<PersonProxy> personId = event.getProxyId();
 
@@ -213,14 +232,15 @@
   }
 
   private void fetch(final int start) {
-    // XXX add back filter
-    requestFactory.schoolCalendarRequest().getPeople(start, numRows).fire(
+    lastFetch = start;
+    requestFactory.schoolCalendarRequest().getPeople(start, numRows, filter).fire(
         new Receiver<List<PersonProxy>>() {
           @Override
           public void onSuccess(List<PersonProxy> response) {
             int responses = response.size();
             table.setRowData(start, response);
-            if (!table.isRowCountExact()) {
+            pager.setPageStart(start);
+            if (start == 0 || !table.isRowCountExact()) {
               table.setRowCount(start + responses, responses < numRows);
             }
           }
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/ZipPlusFourBox.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/ZipPlusFourBox.java
new file mode 100644
index 0000000..f035f77
--- /dev/null
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/widgets/ZipPlusFourBox.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2010 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.sample.dynatablerf.client.widgets;
+
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.regexp.shared.RegExp;
+import com.google.gwt.text.shared.Parser;
+import com.google.gwt.text.shared.Renderer;
+import com.google.gwt.user.client.ui.ValueBox;
+
+import java.io.IOException;
+import java.text.ParseException;
+
+/**
+ * A simple implementation of a US zip code input field.
+ * <p>
+ * Accepted formats are <code>ddddd</code> or <code>ddddd-dddd</code>.
+ */
+public class ZipPlusFourBox extends ValueBox<String> {
+  private static final RegExp PATTERN = RegExp.compile("^\\d{5}(-\\d{4})?$");
+  private static final Renderer<String> RENDERER = new Renderer<String>() {
+    public String render(String object) {
+      if (object == null) {
+        return null;
+      }
+      StringBuilder sb = new StringBuilder(String.valueOf(object));
+      if (sb.length() == 9) {
+        sb.insert(5, '-');
+      }
+      return sb.toString();
+    }
+
+    public void render(String object, Appendable appendable) throws IOException {
+      appendable.append(render(object));
+    }
+  };
+  private static final Parser<String> PARSER = new Parser<String>() {
+    public String parse(CharSequence text) throws ParseException {
+      switch (text.length()) {
+        case 9:
+          text = text.subSequence(0, 5) + "-" + text.subSequence(5, 9);
+          // Fall-though intentional
+          // CHECKSTYLE_OFF
+        case 5:
+          // Fall-through intentional
+        case 10:
+          // CHECKSTYLE_ON
+          if (PATTERN.test(text.toString())) {
+            return text.toString();
+          } else {
+            throw new ParseException("Illegal value", 0);
+          }
+      }
+      throw new ParseException("Illegal length", 0);
+    }
+  };
+
+  public ZipPlusFourBox() {
+    super(Document.get().createTextInputElement(), RENDERER, PARSER);
+  }
+}
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Address.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Address.java
index b87ee48..c7059bd 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Address.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Address.java
@@ -19,6 +19,7 @@
 
 import javax.validation.constraints.DecimalMin;
 import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
 import javax.validation.constraints.Size;
 
 /**
@@ -53,8 +54,8 @@
   private Integer version = 0;
 
   @NotNull
-  @DecimalMin("10000")
-  private Integer zip;
+  @Pattern(regexp = "\\d{5}(-\\d{4})?")
+  private String zip;
 
   public Address() {
   }
@@ -92,7 +93,7 @@
     return version;
   }
 
-  public Integer getZip() {
+  public String getZip() {
     return zip;
   }
 
@@ -129,7 +130,7 @@
     this.version = version;
   }
 
-  public void setZip(Integer zip) {
+  public void setZip(String zip) {
     this.zip = zip;
   }
 }
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Person.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Person.java
index d7eec2d..3c10fd8 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Person.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Person.java
@@ -15,8 +15,12 @@
  */
 package com.google.gwt.sample.dynatablerf.domain;
 
+import static com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory.SchoolCalendarRequest.ALL_DAYS;
+
 import com.google.gwt.sample.dynatablerf.server.SchoolCalendarService;
 
+import java.util.List;
+
 import javax.validation.constraints.DecimalMin;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
@@ -69,8 +73,7 @@
 
   private String note;
 
-  private final boolean[] daysFilters = new boolean[] {
-      true, true, true, true, true, true, true};
+  private List<Boolean> daysFilters = ALL_DAYS;
 
   public Person() {
   }
@@ -129,7 +132,7 @@
     return getScheduleWithFilter(daysFilters);
   }
 
-  public String getScheduleWithFilter(boolean[] daysFilter) {
+  public String getScheduleWithFilter(List<Boolean> daysFilter) {
     return classSchedule.getDescription(daysFilter);
   }
 
@@ -158,10 +161,9 @@
     this.address.copyFrom(address);
   }
 
-  public void setDaysFilter(boolean[] daysFilter) {
-    assert daysFilter.length == this.daysFilters.length;
-    System.arraycopy(daysFilter, 0, this.daysFilters, 0,
-        this.daysFilters.length);
+  public void setDaysFilter(List<Boolean> daysFilter) {
+    assert daysFilter.size() == this.daysFilters.size();
+    this.daysFilters = daysFilter;
   }
 
   public void setDescription(String description) {
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Schedule.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Schedule.java
index 6a7cfad..14b6ddb 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Schedule.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/domain/Schedule.java
@@ -32,10 +32,10 @@
     timeSlots.add(timeSlot);
   }
 
-  public String getDescription(boolean[] daysFilter) {
+  public String getDescription(List<Boolean> daysFilter) {
     String s = null;
     for (TimeSlot timeSlot : timeSlots) {
-      if (daysFilter[timeSlot.getDayOfWeek()]) {
+      if (daysFilter.get(timeSlot.getDayOfWeek())) {
         if (s == null) {
           s = timeSlot.getDescription();
         } else {
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/AddressFuzzer.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/AddressFuzzer.java
index 16bcc4d..25bdb93 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/AddressFuzzer.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/AddressFuzzer.java
@@ -49,6 +49,11 @@
     a.setStreet(r.nextInt(4096) + " "
         + STREET_NAMES[r.nextInt(STREET_NAMES.length)]);
     a.setState(STATE_NAMES[r.nextInt(STATE_NAMES.length)]);
-    a.setZip(10000 + r.nextInt(89999));
+    StringBuilder zip = new StringBuilder();
+    zip.append(String.format("%05d", r.nextInt(99999)));
+    if (r.nextBoolean()) {
+      zip.append(String.format("-%04d", r.nextInt(9999)));
+    }
+    a.setZip(zip.toString());
   }
 }
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/PersonSource.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/PersonSource.java
index 08ec81c..19b06e5 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/PersonSource.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/PersonSource.java
@@ -15,17 +15,24 @@
  */
 package com.google.gwt.sample.dynatablerf.server;
 
+import static com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory.SchoolCalendarRequest.ALL_DAYS;
+import static com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory.SchoolCalendarRequest.NO_DAYS;
+
 import com.google.gwt.sample.dynatablerf.domain.Address;
 import com.google.gwt.sample.dynatablerf.domain.Person;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
 /**
- * 
+ * Provides a number of Person objects as a demonstration datasource. Many of
+ * the operations in this implementation would be much more efficient in a real
+ * database, but are implemented is a straightforward fashion because they're
+ * not really important for understanding the RequestFactory framework.
  */
 public abstract class PersonSource {
   static class Backing extends PersonSource {
@@ -43,7 +50,7 @@
 
     @Override
     public List<Person> getPeople(int startIndex, int maxCount,
-        boolean[] daysFilter) {
+        List<Boolean> daysFilter) {
       int peopleCount = countPeople();
 
       int start = startIndex;
@@ -55,8 +62,31 @@
       if (start == end) {
         return Collections.emptyList();
       }
-      // This is ugly, but a real backend would have a skip mechanism
-      return new ArrayList<Person>(people.values()).subList(start, end);
+
+      // If there's a simple filter, use a fast path
+      if (ALL_DAYS.equals(daysFilter)) {
+        return new ArrayList<Person>(people.values()).subList(start, end);
+      } else if (NO_DAYS.equals(daysFilter)) {
+        return new ArrayList<Person>();
+      }
+
+      /*
+       * Otherwise, iterate from the start position until we collect enough
+       * People or hit the end of the list.
+       */
+      Iterator<Person> it = people.values().iterator();
+      int skipped = 0;
+      List<Person> toReturn = new ArrayList<Person>(maxCount);
+      while (toReturn.size() < maxCount && it.hasNext()) {
+        Person person = it.next();
+        if (person.getScheduleWithFilter(daysFilter).length() > 0) {
+          if (skipped++ < startIndex) {
+            continue;
+          }
+          toReturn.add(person);
+        }
+      }
+      return toReturn;
     }
 
     @Override
@@ -107,13 +137,13 @@
 
     @Override
     public List<Person> getPeople(int startIndex, int maxCount,
-        boolean[] daysFilter) {
+        List<Boolean> daysFilter) {
       List<Person> toReturn = new ArrayList<Person>(maxCount);
       for (Person person : backingStore.getPeople(startIndex, maxCount,
           daysFilter)) {
         Person copy = findPerson(person.getId());
-        toReturn.add(copy);
         copy.setDaysFilter(daysFilter);
+        toReturn.add(copy);
       }
       return toReturn;
     }
@@ -155,7 +185,7 @@
   public abstract Person findPerson(String id);
 
   public abstract List<Person> getPeople(int startIndex, int maxCount,
-      boolean[] daysFilter);
+      List<Boolean> daysFilter);
 
   public abstract void persist(Address address);
 
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/SchoolCalendarService.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/SchoolCalendarService.java
index 7bcdcd3..5493cd7 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/SchoolCalendarService.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/server/SchoolCalendarService.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.sample.dynatablerf.server;
 
+import static com.google.gwt.sample.dynatablerf.shared.DynaTableRequestFactory.SchoolCalendarRequest.ALL_DAYS;
+
 import com.google.gwt.sample.dynatablerf.domain.Address;
 import com.google.gwt.sample.dynatablerf.domain.Person;
 
@@ -33,8 +35,6 @@
  * The server side service class.
  */
 public class SchoolCalendarService implements Filter {
-  private static final boolean[] ALL_DAYS = new boolean[] {
-      true, true, true, true, true, true, true};
 
   private static final ThreadLocal<PersonSource> PERSON_SOURCE = new ThreadLocal<PersonSource>();
 
@@ -50,8 +50,10 @@
     return PERSON_SOURCE.get().findPerson(id);
   }
 
-  public static List<Person> getPeople(int startIndex, int maxCount) {
-    return getPeople(startIndex, maxCount, ALL_DAYS);
+  public static List<Person> getPeople(int startIndex, int maxCount,
+      List<Boolean> filter) {
+    checkPersonSource();
+    return PERSON_SOURCE.get().getPeople(startIndex, maxCount, filter);
   }
 
   public static Person getRandomPerson() {
@@ -77,15 +79,6 @@
     }
   }
 
-  /**
-   * XXX private due to inability to add method overloads.
-   */
-  private static List<Person> getPeople(int startIndex, int maxCount,
-      boolean[] filter) {
-    checkPersonSource();
-    return PERSON_SOURCE.get().getPeople(startIndex, maxCount, filter);
-  }
-
   private PersonSource backingStore;
 
   public void destroy() {
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/AddressProxy.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/AddressProxy.java
index 3f59f78..f96e5c8 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/AddressProxy.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/AddressProxy.java
@@ -31,7 +31,7 @@
 
   String getStreet();
 
-  Integer getZip();
+  String getZip();
 
   void setCity(String city);
 
@@ -39,7 +39,7 @@
 
   void setStreet(String street);
 
-  void setZip(Integer zip);
+  void setZip(String zip);
 
   EntityProxyId<AddressProxy> stableId();
 }
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java
index f7aa832..0a0e38a 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java
@@ -25,6 +25,8 @@
 import com.google.gwt.sample.dynatablerf.domain.Person;
 import com.google.gwt.sample.dynatablerf.server.SchoolCalendarService;
 
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -54,7 +56,14 @@
    */
   @Service(SchoolCalendarService.class)
   interface SchoolCalendarRequest extends RequestContext {
-    Request<List<PersonProxy>> getPeople(int startIndex, int maxCount);
+    List<Boolean> ALL_DAYS = Collections.unmodifiableList(Arrays.asList(true,
+        true, true, true, true, true, true));
+    List<Boolean> NO_DAYS = Collections.unmodifiableList(Arrays.asList(false,
+        false, false, false, false, false, false));
+
+    Request<List<PersonProxy>> getPeople(int startIndex, int maxCount,
+        List<Boolean> dayFilter);
+
     Request<PersonProxy> getRandomPerson();
   }
 
diff --git a/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstants.java b/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstants.java
index 8f10a94..7dec58d 100644
--- a/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstants.java
+++ b/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstants.java
@@ -5,12 +5,12 @@
 
 public interface NumberFormatConstants extends Constants {
   /**
-   * @return the localized decimal separator
+   * Returns the localized decimal separator.
    */
   String decimalSeparator();
 
   /**
-   * @return the localized thousands separator
+   * Returns the localized thousands separator.
    */
   String thousandsSeparator();
 }
diff --git a/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsAnnot.java b/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsAnnot.java
index 074705b..34384a5 100644
--- a/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsAnnot.java
+++ b/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsAnnot.java
@@ -5,13 +5,13 @@
 
 public interface NumberFormatConstantsAnnot extends Constants {
   /**
-   * @return the localized decimal separator
+   * Returns the localized decimal separator.
    */
   @DefaultStringValue(".")
   String decimalSeparator();
 
   /**
-   * @return the localized thousands separator
+   * Returns the localized thousands separator.
    */
   @DefaultStringValue(",")
   String thousandsSeparator();
diff --git a/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsWithAltKey.java b/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsWithAltKey.java
index 770b894..735c20a 100644
--- a/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsWithAltKey.java
+++ b/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsWithAltKey.java
@@ -5,13 +5,13 @@
 
 public interface NumberFormatConstantsWithAltKey extends Constants {
   /**
-   * @return the localized decimal separator
+   * Returns the localized decimal separator.
    */
   @Key("fmt.sep.decimal")
   String decimalSeparator();
 
   /**
-   * @return the localized thousands separator
+   * Returns the localized thousands separator.
    */
   @Key("fmt.sep.thousands")
   String thousandsSeparator();
diff --git a/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsWithLookup.java b/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsWithLookup.java
index 5d40fbe..a47d16b 100644
--- a/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsWithLookup.java
+++ b/user/javadoc/com/google/gwt/examples/i18n/NumberFormatConstantsWithLookup.java
@@ -4,12 +4,12 @@
 
 public interface NumberFormatConstantsWithLookup extends ConstantsWithLookup {
   /**
-   * @return the localized decimal separator
+   * Returns the localized decimal separator.
    */
   String decimalSeparator();
 
   /**
-   * @return the localized thousands separator
+   * Returns the localized thousands separator.
    */
   String thousandsSeparator();
 }
diff --git a/user/src/com/google/gwt/activity/shared/AbstractActivity.java b/user/src/com/google/gwt/activity/shared/AbstractActivity.java
index a4cfd70..59e596c 100644
--- a/user/src/com/google/gwt/activity/shared/AbstractActivity.java
+++ b/user/src/com/google/gwt/activity/shared/AbstractActivity.java
@@ -16,11 +16,6 @@
 package com.google.gwt.activity.shared;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Simple Activity implementation that is always willing to stop,
  * and does nothing onStop and onCancel.
  */
diff --git a/user/src/com/google/gwt/activity/shared/Activity.java b/user/src/com/google/gwt/activity/shared/Activity.java
index a197523..f141171 100644
--- a/user/src/com/google/gwt/activity/shared/Activity.java
+++ b/user/src/com/google/gwt/activity/shared/Activity.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -19,11 +19,6 @@
 import com.google.gwt.user.client.ui.AcceptsOneWidget;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Implemented by objects that control a piece of user interface, with a life
  * cycle managed by an {@link ActivityManager}, in response to
  * {@link com.google.gwt.place.shared.PlaceChangeEvent} events as the user
@@ -32,7 +27,7 @@
 public interface Activity {
   /**
    * Called when the user is trying to navigate away from this activity.
-   * 
+   *
    * @return A message to display to the user, e.g. to warn of unsaved work, or
    *         null to say nothing
    */
@@ -53,14 +48,14 @@
   /**
    * Called when the Activity should ready its widget for the user. When the
    * widget is ready (typically after an RPC response has been received),
-   * receiver should present it by calling {@link AcceptsOneWidget#setWidget}
-   * on the given panel.
+   * receiver should present it by calling
+   * {@link AcceptsOneWidget#setWidget(IsWidget)} on the given panel.
    * <p>
    * Any handlers attached to the provided event bus will be de-registered when
    * the activity is stopped, so activities will rarely need to hold on to the
    * {@link com.google.gwt.event.shared.HandlerRegistration HandlerRegistration}
    * instances returned by {@link EventBus#addHandler}.
-   * 
+   *
    * @param panel the panel to display this activity's widget when it is ready
    * @param eventBus the event bus
    */
diff --git a/user/src/com/google/gwt/activity/shared/ActivityManager.java b/user/src/com/google/gwt/activity/shared/ActivityManager.java
index 6be2d6d..7043665 100644
--- a/user/src/com/google/gwt/activity/shared/ActivityManager.java
+++ b/user/src/com/google/gwt/activity/shared/ActivityManager.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -28,11 +28,6 @@
 import java.util.Set;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Manages {@link Activity} objects that should be kicked off in response to
  * {@link PlaceChangeEvent} events. Each activity can start itself
  * asynchronously, and provides a widget to be shown when it's ready to run.
@@ -79,7 +74,7 @@
 
   /**
    * Create an ActivityManager. Next call {@link #setDisplay}.
-   * 
+   *
    * @param mapper finds the {@link Activity} for a given
    *          {@link com.google.gwt.place.shared.Place}
    * @param eventBus source of {@link PlaceChangeEvent} and
@@ -92,7 +87,7 @@
   }
 
   /**
-   * Deactive the current activity, find the next one from our ActivityMapper,
+   * Deactivate the current activity, find the next one from our ActivityMapper,
    * and start it.
    * <p>
    * The current activity's widget will be hidden immediately, which can cause
@@ -101,7 +96,7 @@
    * this by providing a widget immediately, with some kind of "loading"
    * treatment.
    * 
-   * @see PlaceChangeEvent.Handler#onPlaceChange(PlaceChangeEvent)
+   * @see com.google.gwt.place.shared.PlaceChangeEvent.Handler#onPlaceChange(PlaceChangeEvent)
    */
   public void onPlaceChange(PlaceChangeEvent event) {
     Activity nextActivity = getNextActivity(event);
@@ -182,7 +177,7 @@
   /**
    * Reject the place change if the current activity is not willing to stop.
    * 
-   * @see PlaceChangeRequestEvent.Handler#onPlaceChangeRequest(PlaceChangeRequestEvent)
+   * @see com.google.gwt.place.shared.PlaceChangeRequestEvent.Handler#onPlaceChangeRequest(PlaceChangeRequestEvent)
    */
   public void onPlaceChangeRequest(PlaceChangeRequestEvent event) {
     if (!currentActivity.equals(NULL_ACTIVITY)) {
diff --git a/user/src/com/google/gwt/activity/shared/ActivityMapper.java b/user/src/com/google/gwt/activity/shared/ActivityMapper.java
index f9c95a9..aa404fb 100644
--- a/user/src/com/google/gwt/activity/shared/ActivityMapper.java
+++ b/user/src/com/google/gwt/activity/shared/ActivityMapper.java
@@ -18,11 +18,6 @@
 import com.google.gwt.place.shared.Place;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Finds the activity to run for a given {@link Place}, used to configure
  * an {@link ActivityManager}.
  */
diff --git a/user/src/com/google/gwt/cell/client/DatePickerCell.java b/user/src/com/google/gwt/cell/client/DatePickerCell.java
index 65ca6ef..236fb03 100644
--- a/user/src/com/google/gwt/cell/client/DatePickerCell.java
+++ b/user/src/com/google/gwt/cell/client/DatePickerCell.java
@@ -137,10 +137,16 @@
     // Hide the panel and call valueUpdater.update when a date is selected
     datePicker.addValueChangeHandler(new ValueChangeHandler<Date>() {
       public void onValueChange(ValueChangeEvent<Date> event) {
+        // Remember the values before hiding the popup.
+        Element cellParent = lastParent;
+        Date oldValue = lastValue;
+        Object key = lastKey;
         panel.hide();
+
+        // Update the cell and value updater.
         Date date = event.getValue();
-        setViewData(lastKey, date);
-        setValue(lastParent, lastValue, lastKey);
+        setViewData(key, date);
+        setValue(cellParent, oldValue, key);
         if (valueUpdater != null) {
           valueUpdater.update(date);
         }
diff --git a/user/src/com/google/gwt/dom/client/TagName.java b/user/src/com/google/gwt/dom/client/TagName.java
index 98c1681..3c81549 100644
--- a/user/src/com/google/gwt/dom/client/TagName.java
+++ b/user/src/com/google/gwt/dom/client/TagName.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -20,15 +20,15 @@
 import java.lang.annotation.Target;
 
 /**
- * Indicates the tag name of an {@link Element} subclass.  
+ * Indicates the tag name of an {@link Element} subclass.
  */
 @Documented
 @Target(ElementType.TYPE)
 public @interface TagName {
 
   /**
-   * @return The tag names that this {@link com.google.gwt.dom.client.Element} 
-   * subclass can represent
+   * Returns the tag names that this {@link com.google.gwt.dom.client.Element}
+   * subclass can represent.
    */
   String[] value();
 }
diff --git a/user/src/com/google/gwt/editor/client/EditorDelegate.java b/user/src/com/google/gwt/editor/client/EditorDelegate.java
index d51c32b..b77dbde 100644
--- a/user/src/com/google/gwt/editor/client/EditorDelegate.java
+++ b/user/src/com/google/gwt/editor/client/EditorDelegate.java
@@ -18,11 +18,6 @@
 import com.google.gwt.event.shared.HandlerRegistration;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be changed. Use it at your own risk.
- * </span>
- * </p>
  * Binds an individual Editor to the backing service. Every Editor has a peer
  * EditorDelegate. If an Editor implements the {@link ValueAwareEditor}
  * interface, the EditorDriver will make the delegate available through the
diff --git a/user/src/com/google/gwt/editor/client/IsEditor.java b/user/src/com/google/gwt/editor/client/IsEditor.java
index 265f936..f787df2 100644
--- a/user/src/com/google/gwt/editor/client/IsEditor.java
+++ b/user/src/com/google/gwt/editor/client/IsEditor.java
@@ -17,7 +17,28 @@
 
 /**
  * Extended by view objects that wish to participate in an Editor hierarchy, but
- * that do not implement the {@link Editor} contract directly.
+ * that do not implement the {@link Editor} contract directly. The primary
+ * advantage of the IsEditor interface is that is allows composition of behavior
+ * without the need to implement delegate methods for every interface
+ * implemented by the common editor logic.
+ * <p>
+ * For example, an editor Widget that supports adding and removing elements from
+ * a list might wish to re-use the provided
+ * {@link com.google.gwt.editor.client.adapters.ListEditor ListEditor}
+ * controller. It might be roughly built as:
+ * 
+ * <pre>
+ * class MyListEditor extends Composite implements IsEditor&lt;ListEditor&lt;Foo, FooEditor>> {
+ *   private ListEditor&lt;Foo, FooEditor> controller = ListEditor.of(new FooEditorSource());
+ *   public ListEditor&lt;Foo, FooEditor> asEditor() {return controller;}
+ *   void onAddButtonClicked() { controller.getList().add(new Foo()); }
+ *   void onClearButtonClicked() { controller.getList().clear(); }
+ * }
+ * </pre>
+ * By implementing only the one <code>asEditor()</code> method, the
+ * <code>MyListEditor</code> type is able to incorporate the
+ * <code>ListEditor</code> behavior without needing to write delegate methods
+ * for every method in <code>ListEditor</code>.
  * <p>
  * It is legal for a type to implement both Editor and IsEditor. In this case,
  * the Editor returned from {@link #asEditor()} will be a co-Editor of the
diff --git a/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java b/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java
index 0e05174..6d08afd 100644
--- a/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java
+++ b/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java
@@ -18,11 +18,6 @@
 import java.util.List;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be changed. Use it at your own risk.
- * </span>
- * </p>
  * Automates editing of simple bean-like objects. The {@link EditorDelegate}
  * provided from this driver has a no-op implementation of
  * {@link EditorDelegate#subscribe()}.
diff --git a/user/src/com/google/gwt/event/dom/client/HasErrorHandlers.java b/user/src/com/google/gwt/event/dom/client/HasErrorHandlers.java
index 758b78d..9aaa6a2 100644
--- a/user/src/com/google/gwt/event/dom/client/HasErrorHandlers.java
+++ b/user/src/com/google/gwt/event/dom/client/HasErrorHandlers.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -24,8 +24,8 @@
  */
 public interface HasErrorHandlers extends HasHandlers {
   /**
-   * Adds a {@link ErrorEvent} handler.
-   * 
+   * Adds an {@link ErrorEvent} handler.
+   *
    * @param handler the error handler
    * @return {@link HandlerRegistration} used to remove this handler
    */
diff --git a/user/src/com/google/gwt/event/logical/shared/AttachEvent.java b/user/src/com/google/gwt/event/logical/shared/AttachEvent.java
index 2c1ef1b..9f97ce2 100644
--- a/user/src/com/google/gwt/event/logical/shared/AttachEvent.java
+++ b/user/src/com/google/gwt/event/logical/shared/AttachEvent.java
@@ -38,7 +38,8 @@
   static Type<AttachEvent.Handler> TYPE;
 
   /**
-   * Fires a {@link AttachEvent} on all registered handlers in the handler source.
+   * Fires an {@link AttachEvent} on all registered handlers in the handler
+   * source.
    *
    * @param <S> The handler source type
    * @param source the source of the handlers
@@ -69,7 +70,7 @@
   /**
    * Construct a new {@link AttachEvent}.
    *
-   * @param attached true if the source has been attached 
+   * @param attached true if the source has been attached
    */
   protected AttachEvent(boolean attached) {
     this.attached = attached;
@@ -81,8 +82,8 @@
   }
 
   /**
-   * @return true if this event announces that the source has been attached,
-   * false if it has been detached
+   * Returns true if this event announces that the source has been attached,
+   * false if it has been detached.
    */
   public boolean isAttached() {
     return attached;
diff --git a/user/src/com/google/gwt/event/logical/shared/HasAttachHandlers.java b/user/src/com/google/gwt/event/logical/shared/HasAttachHandlers.java
index c01efe3..442f094 100644
--- a/user/src/com/google/gwt/event/logical/shared/HasAttachHandlers.java
+++ b/user/src/com/google/gwt/event/logical/shared/HasAttachHandlers.java
@@ -24,7 +24,7 @@
  */
 public interface HasAttachHandlers extends HasHandlers {
   /**
-   * Adds a {@link AttachEvent} handler.
+   * Adds an {@link AttachEvent} handler.
    *
    * @param handler the handler
    * @return the handler registration
diff --git a/user/src/com/google/gwt/event/logical/shared/HasInitializeHandlers.java b/user/src/com/google/gwt/event/logical/shared/HasInitializeHandlers.java
index 1eba044..04fba91 100644
--- a/user/src/com/google/gwt/event/logical/shared/HasInitializeHandlers.java
+++ b/user/src/com/google/gwt/event/logical/shared/HasInitializeHandlers.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,14 +21,14 @@
 /**
  * A widget that implements this interface is a public source of
  * {@link InitializeEvent} events.
- * 
+ *
  */
 public interface HasInitializeHandlers extends HasHandlers {
   /**
-   * Adds a {@link InitializeEvent} handler.
-   * 
+   * Adds an {@link InitializeEvent} handler.
+   *
    * @param handler the handler
    * @return the registration for the event
    */
   HandlerRegistration addInitializeHandler(InitializeHandler handler);
-}
\ No newline at end of file
+}
diff --git a/user/src/com/google/gwt/event/logical/shared/HasOpenHandlers.java b/user/src/com/google/gwt/event/logical/shared/HasOpenHandlers.java
index d3130d4..d2b7b03 100644
--- a/user/src/com/google/gwt/event/logical/shared/HasOpenHandlers.java
+++ b/user/src/com/google/gwt/event/logical/shared/HasOpenHandlers.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,13 +21,13 @@
 /**
  * A widget that implements this interface is a public source of
  * {@link OpenEvent} events.
- * 
+ *
  * @param <T> the type being opened
  */
 public interface HasOpenHandlers<T> extends HasHandlers {
   /**
-   * Adds a {@link OpenEvent} handler.
-   * 
+   * Adds an {@link OpenEvent} handler.
+   *
    * @param handler the handler
    * @return the registration for the event
    */
diff --git a/user/src/com/google/gwt/i18n/client/BidiPolicy.java b/user/src/com/google/gwt/i18n/client/BidiPolicy.java
index cd08e1f..fe8e411 100644
--- a/user/src/com/google/gwt/i18n/client/BidiPolicy.java
+++ b/user/src/com/google/gwt/i18n/client/BidiPolicy.java
@@ -43,7 +43,7 @@
   private static BidiPolicyImpl impl = GWT.create(BidiPolicyImpl.class);
 
   /**
-   * @return true if bidi is enabled, false if disabled.
+   * Returns true if bidi is enabled, false if disabled.
    */
   public static boolean isBidiEnabled() {
     return impl.isBidiEnabled();
diff --git a/user/src/com/google/gwt/i18n/client/CurrencyData.java b/user/src/com/google/gwt/i18n/client/CurrencyData.java
index e4eda01..0e286f5 100644
--- a/user/src/com/google/gwt/i18n/client/CurrencyData.java
+++ b/user/src/com/google/gwt/i18n/client/CurrencyData.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,56 +21,56 @@
 public interface CurrencyData {
 
   /**
-   * @return the ISO4217 code for this currency
+   * Returns the ISO4217 code for this currency.
    */
   String getCurrencyCode();
 
   /**
-   * @return the default symbol to use for this currency
+   * Returns the default symbol to use for this currency.
    */
   String getCurrencySymbol();
 
   /**
-   * @return the default number of decimal positions for this currency
+   * Returns the default number of decimal positions for this currency.
    */
   int getDefaultFractionDigits();
 
   /**
-   * @return the default symbol to use for this currency, intended to be
+   * Returns the default symbol to use for this currency, intended to be
    * recognizable in most locales.  If such a symbol is not available, it is
    * acceptable to return the same value as {@link #getCurrencySymbol()}.
    */
   String getPortableCurrencySymbol();
 
   /**
-   * @return true if this currency is deprecated and should not be returned by
+   * Returns true if this currency is deprecated and should not be returned by
    * default in currency lists.
    */
   boolean isDeprecated();
 
   /**
-   * @return true if there should always be a space between the currency symbol
+   * Returns true if there should always be a space between the currency symbol
    * and the number, false if there should be no space.  Ignored unless
    * {@link #isSpacingFixed()} returns true.
    */
   boolean isSpaceForced();
 
   /**
-   * @return true if the spacing between the currency symbol and the number is
+   * Returns true if the spacing between the currency symbol and the number is
    * fixed regardless of locale defaults.  In this case, spacing will be
    * determined by {@link #isSpaceForced()}.
    */
   boolean isSpacingFixed();
 
   /**
-   * @return true if the position of the currency symbol relative to the number
+   * Returns true if the position of the currency symbol relative to the number
    * is fixed regardless of locale defaults.  In this case, the position will be
    * determined by {@link #isSymbolPrefix()}.
    */
   boolean isSymbolPositionFixed();
 
   /**
-   * @return true if the currency symbol should go before the number, false if
+   * Returns true if the currency symbol should go before the number, false if
    * it should go after the number.  This is ignored unless
    * {@link #isSymbolPositionFixed()} is true.
    */
diff --git a/user/src/com/google/gwt/i18n/client/DateTimeFormatInfo.java b/user/src/com/google/gwt/i18n/client/DateTimeFormatInfo.java
index 0386b57..a4d3fb2 100644
--- a/user/src/com/google/gwt/i18n/client/DateTimeFormatInfo.java
+++ b/user/src/com/google/gwt/i18n/client/DateTimeFormatInfo.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -17,7 +17,7 @@
 
 /**
  * Information required for formatting and parsing localized date/time values.
- * 
+ *
  * <p>Implementors should subclass {@link DefaultDateTimeFormatInfo} so when
  * methods are added they will get reasonable defaults and not break.  See the
  * same class for example values returned by these methods.
@@ -25,328 +25,323 @@
 public interface DateTimeFormatInfo {
 
   /**
-   * @return array of strings containing abbreviations for Ante Meridiem and
+   * Returns array of strings containing abbreviations for Ante Meridiem and
    * Post Meridiem.
    */
   String[] ampms();
 
   /**
-   * @return a safe default date format.
+   * Returns a safe default date format.
    */
   String dateFormat();
 
   /**
-   * @return a "full" date format.
+   * Returns a "full" date format.
    */
   String dateFormatFull();
 
   /**
-   * @return a "long" date format.
+   * Returns a "long" date format.
    */
   String dateFormatLong();
 
   /**
-   * @return a "medium" date format.
+   * Returns a "medium" date format.
    */
   String dateFormatMedium();
 
   /**
-   * @return a "short" date format.
+   * Returns a "short" date format.
    */
   String dateFormatShort();
 
   /**
-   * Construct a date/time format from a date format pattern and a time format
+   * Returns a date/time format from a date format pattern and a time format
    * pattern, using the locale default joining.
-   * @param timePattern
-   * @param datePattern
-   * 
-   * @return a date/time format
+   *
+   * @param timePattern the time pattern String
+   * @param datePattern the data pattern String
    */
   String dateTime(String timePattern, String datePattern);
 
   /**
-   * Construct a date/time format from a date format pattern and a time format
+   * Returns a date/time format from a date format pattern and a time format
    * pattern, using "full" joining.
-   * @param timePattern
-   * @param datePattern
-   * 
-   * @return a date/time format
+   *
+   * @param timePattern the time pattern String
+   * @param datePattern the data pattern String
    */
   String dateTimeFull(String timePattern, String datePattern);
 
   /**
-   * Construct a date/time format from a date format pattern and a time format
+   * Returns a date/time format from a date format pattern and a time format
    * pattern, using "full" joining.
-   * @param timePattern
-   * @param datePattern
-   * 
-   * @return a date/time format
+   *
+   * @param timePattern the time pattern String
+   * @param datePattern the data pattern String
    */
   String dateTimeLong(String timePattern, String datePattern);
 
   /**
-   * Construct a date/time format from a date format pattern and a time format
+   * Returns a date/time format from a date format pattern and a time format
    * pattern, using "full" joining.
-   * @param timePattern
-   * @param datePattern
-   * 
-   * @return a date/time format
+   *
+   * @param timePattern the time pattern String
+   * @param datePattern the data pattern String
    */
   String dateTimeMedium(String timePattern, String datePattern);
 
   /**
-   * Construct a date/time format from a date format pattern and a time format
+   * Returns a date/time format from a date format pattern and a time format
    * pattern, using "full" joining.
-   * 
-   * @param datePattern
-   * @param timePattern
-   * @return a date/time format
+   *
+   * @param timePattern the time pattern String
+   * @param datePattern the data pattern String
    */
   String dateTimeShort(String datePattern, String timePattern);
 
   /**
-   * @return an array of the full era names.
+   * Returns an array of the full era names.
    */
   String[] erasFull();
 
   /**
-   * @return abbreviations of the era names.
+   * Returns abbreviations of the era names.
    */
   String[] erasShort();
 
   /**
-   * @return the day which generally comes first in a weekly calendar view, as
+   * Returns the day which generally comes first in a weekly calendar view, as
    *     an index into the return value of {@link #weekdaysFull()}.
    */
   int firstDayOfTheWeek();
 
   /**
-   * @return localized format equivalent to the "d" skeleton pattern.
+   * Returns localized format equivalent to the "d" skeleton pattern.
    */
   String formatDay();
 
   /**
-   * @return localized format equivalent to the "hm" skeleton pattern.
+   * Returns localized format equivalent to the "hm" skeleton pattern.
    */
   String formatHour12Minute();
 
   /**
-   * @return localized format equivalent to the "hms" skeleton pattern.
+   * Returns localized format equivalent to the "hms" skeleton pattern.
    */
   String formatHour12MinuteSecond();
 
   /**
-   * @return localized format equivalent to the "Hm" skeleton pattern.
+   * Returns localized format equivalent to the "Hm" skeleton pattern.
    */
   String formatHour24Minute();
 
   /**
-   * @return localized format equivalent to the "Hms" skeleton pattern.
+   * Returns localized format equivalent to the "Hms" skeleton pattern.
    */
   String formatHour24MinuteSecond();
 
   /**
-   * @return localized format equivalent to the "ms" skeleton pattern.
+   * Returns localized format equivalent to the "ms" skeleton pattern.
    */
   String formatMinuteSecond();
 
   /**
-   * @return localized format equivalent to the "MMM" skeleton pattern.
+   * Returns localized format equivalent to the "MMM" skeleton pattern.
    */
   String formatMonthAbbrev();
 
   /**
-   * @return localized format equivalent to the "MMMd" skeleton pattern.
+   * Returns localized format equivalent to the "MMMd" skeleton pattern.
    */
   String formatMonthAbbrevDay();
 
   /**
-   * @return localized format equivalent to the "MMMM" skeleton pattern.
+   * Returns localized format equivalent to the "MMMM" skeleton pattern.
    */
   String formatMonthFull();
 
   /**
-   * @return localized format equivalent to the "MMMMd" skeleton pattern.
+   * Returns localized format equivalent to the "MMMMd" skeleton pattern.
    */
   String formatMonthFullDay();
 
   /**
-   * @return localized format equivalent to the "MMMMEEEEd" skeleton pattern.
+   * Returns localized format equivalent to the "MMMMEEEEd" skeleton pattern.
    */
   String formatMonthFullWeekdayDay();
 
   /**
-   * @return localized format equivalent to the "Md" skeleton pattern.
+   * Returns localized format equivalent to the "Md" skeleton pattern.
    */
   String formatMonthNumDay();
 
   /**
-   * @return localized format equivalent to the "y" skeleton pattern.
+   * Returns localized format equivalent to the "y" skeleton pattern.
    */
   String formatYear();
 
   /**
-   * @return localized format equivalent to the "yMMM" skeleton pattern.
+   * Returns localized format equivalent to the "yMMM" skeleton pattern.
    */
   String formatYearMonthAbbrev();
 
   /**
-   * @return localized format equivalent to the "yMMMd" skeleton pattern.
+   * Returns localized format equivalent to the "yMMMd" skeleton pattern.
    */
   String formatYearMonthAbbrevDay();
 
   /**
-   * @return localized format equivalent to the "yMMMM" skeleton pattern.
+   * Returns localized format equivalent to the "yMMMM" skeleton pattern.
    */
   String formatYearMonthFull();
 
   /**
-   * @return localized format equivalent to the "yMMMMd" skeleton pattern.
+   * Returns localized format equivalent to the "yMMMMd" skeleton pattern.
    */
   String formatYearMonthFullDay();
 
   /**
-   * @return localized format equivalent to the "yM" skeleton pattern.
+   * Returns localized format equivalent to the "yM" skeleton pattern.
    */
   String formatYearMonthNum();
 
   /**
-   * @return localized format equivalent to the "yMd" skeleton pattern.
+   * Returns localized format equivalent to the "yMd" skeleton pattern.
    */
   String formatYearMonthNumDay();
 
   /**
-   * @return localized format equivalent to the "yMMMEEEd" skeleton pattern.
+   * Returns localized format equivalent to the "yMMMEEEd" skeleton pattern.
    */
   String formatYearMonthWeekdayDay();
 
   /**
-   * @return localized format equivalent to the "yQQQQ" skeleton pattern.
+   * Returns localized format equivalent to the "yQQQQ" skeleton pattern.
    */
   String formatYearQuarterFull();
 
   /**
-   * @return localized format equivalent to the "yQ" skeleton pattern.
+   * Returns localized format equivalent to the "yQ" skeleton pattern.
    */
   String formatYearQuarterShort();
 
   /**
-   * @return an array of full month names.
+   * Returns an array of full month names.
    */
   String[] monthsFull();
 
   /**
-   * @return an array of month names for use in a stand-alone context.
+   * Returns an array of month names for use in a stand-alone context.
    */
   String[] monthsFullStandalone();
 
   /**
-   * @return an array of the shortest abbreviations for months, typically a
+   * Returns an array of the shortest abbreviations for months, typically a
    *     single character and not guaranteed to be unique.
    */
   String[] monthsNarrow();
 
   /**
-   * @return an array of the shortest abbreviations for months suitable for use
+   * Returns an array of the shortest abbreviations for months suitable for use
    *     in a stand-alone context, typically a single character and not
    *     guaranteed to be unique.
    */
   String[] monthsNarrowStandalone();
 
   /**
-   * @return an array of month abbreviations.
+   * Returns an array of month abbreviations.
    */
   String[] monthsShort();
 
   /**
-   * @return an array of month abbreviations, suitable for use in a stand-alone
+   * Returns an array of month abbreviations, suitable for use in a stand-alone
    *     context.
    */
   String[] monthsShortStandalone();
 
   /**
-   * @return an array of full quarter names.
+   * Returns an array of full quarter names.
    */
   String[] quartersFull();
 
   /**
-   * @return an array of abbreviations for quarters.
+   * Returns an array of abbreviations for quarters.
    */
   String[] quartersShort();
 
   /**
-   * @return a safe default time format.
+   * Returns a safe default time format.
    */
   String timeFormat();
 
   /**
-   * @return a "full" time format.
+   * Returns a "full" time format.
    */
   String timeFormatFull();
 
   /**
-   * @return a "long" time format.
+   * Returns a "long" time format.
    */
   String timeFormatLong();
 
   /**
-   * @return a "medium" time format.
+   * Returns a "medium" time format.
    */
   String timeFormatMedium();
 
   /**
-   * @return a "short" time format.
+   * Returns a "short" time format.
    */
   String timeFormatShort();
 
   /**
-   * @return an array of the full names of weekdays.
+   * Returns an array of the full names of weekdays.
    */
   String[] weekdaysFull();
 
   /**
-   * @return an array of the full names of weekdays, suitable for use in a
+   * Returns an array of the full names of weekdays, suitable for use in a
    *     stand-alone context.
    */
   String[] weekdaysFullStandalone();
 
   /**
-   * @return an array of the shortest abbreviations for weekdays, typically a
+   * Returns an array of the shortest abbreviations for weekdays, typically a
    *     single character and not guaranteed to be unique.
    */
   String[] weekdaysNarrow();
 
   /**
-   * @return an array of the shortest abbreviations for weekdays suitable for
+   * Returns an array of the shortest abbreviations for weekdays suitable for
    *     use in a stand-alone context, typically a single character and not
    *     guaranteed to be unique.
    */
   String[] weekdaysNarrowStandalone();
 
   /**
-   * @return an array of abbreviations for weekdays.
+   * Returns an array of abbreviations for weekdays.
    */
   String[] weekdaysShort();
 
   /**
-   * @return an array of abbreviations for weekdays, suitable for use in a
+   * Returns an array of abbreviations for weekdays, suitable for use in a
    *     stand-alone context.
    */
   String[] weekdaysShortStandalone();
 
   /**
-   * @return the day which starts the weekend, as an index into the return value
+   * Returns the day which starts the weekend, as an index into the return value
    *     of {@link #weekdaysFull()}.
    */
   int weekendEnd();
 
   /**
-   * @return the day which ends the weekend, as an index into the return value
+   * Returns the day which ends the weekend, as an index into the return value
    *     of {@link #weekdaysFull()}.  Note that this value may be numerically less
    *     than {@link #weekendEnd()} - for example, {@link #weekendEnd()} of 6
    *     and {@link #weekendStart()} of 0 means Saturday and Sunday are the
    *     weekend.
    */
   int weekendStart();
-}
\ No newline at end of file
+}
diff --git a/user/src/com/google/gwt/i18n/client/LocaleInfo.java b/user/src/com/google/gwt/i18n/client/LocaleInfo.java
index da0025a..f3b9535 100644
--- a/user/src/com/google/gwt/i18n/client/LocaleInfo.java
+++ b/user/src/com/google/gwt/i18n/client/LocaleInfo.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -38,7 +38,7 @@
       (CldrImpl) GWT.create(CldrImpl.class));
 
   /**
-   * @return an array of available locale names
+   * Returns an array of available locale names.
    */
   public static final String[] getAvailableLocaleNames() {
     /*
@@ -46,7 +46,7 @@
      * is static.  Ideally, the set of available locales would be generated
      * by a different GWT.create but that would slow the compilation process
      * unnecessarily.
-     * 
+     *
      * This is static, and accesses infoImpl this way, with an eye towards
      * when we implement static LocaleInfo getLocale(String localeName) as
      * you might want to get the list of available locales in order to create
@@ -54,9 +54,9 @@
      */
     return instance.infoImpl.getAvailableLocaleNames();
   }
-  
+
   /**
-   * @return a LocaleInfo instance for the current locale
+   * Returns a LocaleInfo instance for the current locale.
    */
   public static final LocaleInfo getCurrentLocale() {
     /*
@@ -69,14 +69,14 @@
   }
 
   /**
-   * Return the display name of the requested locale in its native locale, if
+   * Returns the display name of the requested locale in its native locale, if
    * possible. If no native localization is available, the English name will
    * be returned, or as a last resort just the locale name will be returned.  If
    * the locale name is unknown (including an user overrides) or is not a valid
    * locale property value, null is returned.
-   * 
+   *
    * If the I18N module has not been imported, this will always return null.
-   * 
+   *
    * @param localeName the name of the locale to lookup.
    * @return the name of the locale in its native locale
    */
@@ -88,7 +88,7 @@
   }
 
   /**
-   * @return true if any locale supported by this build of the app is RTL.
+   * Returns true if any locale supported by this build of the app is RTL.
    */
   public static boolean hasAnyRTL() {
     return instance.infoImpl.hasAnyRTL();
@@ -101,7 +101,7 @@
   private DateTimeConstants dateTimeConstants;
 
   private DateTimeFormatInfo dateTimeFormatInfo;
-  
+
   private NumberConstants numberConstants;
 
   /**
@@ -115,7 +115,7 @@
 
   /**
    * Create a LocaleInfo instance, passing in the implementation classes.
-   * 
+   *
    * @param impl LocaleInfoImpl instance to use
    * @param cldr CldrImpl instance to use
    */
@@ -125,7 +125,7 @@
   }
 
   /**
-   * @return a DateTimeConstants instance for this locale.
+   * Returns a DateTimeConstants instance for this locale.
    */
   public final DateTimeConstants getDateTimeConstants() {
     ensureDateTimeConstants();
@@ -133,7 +133,7 @@
   }
 
   /**
-   * @return a DateTimeConstants instance for this locale.
+   * Returns a DateTimeConstants instance for this locale.
    */
   public final DateTimeFormatInfo getDateTimeFormatInfo() {
     ensureDateTimeFormatInfo();
@@ -141,14 +141,14 @@
   }
 
   /**
-   * @return the name of this locale, such as "default, "en_US", etc
+   * Returns the name of this locale, such as "default, "en_US", etc.
    */
   public final String getLocaleName() {
     return infoImpl.getLocaleName();
   }
 
   /**
-   * @return a NumberConstants instance for this locale.
+   * Returns a NumberConstants instance for this locale.
    */
   public final NumberConstants getNumberConstants() {
     ensureNumberConstants();
@@ -156,7 +156,7 @@
   }
 
   /**
-   * @return true if this locale is right-to-left instead of left-to-right
+   * Returns true if this locale is right-to-left instead of left-to-right.
    */
   public final boolean isRTL() {
     return cldrImpl.isRTL();
@@ -174,7 +174,7 @@
       dateTimeFormatInfo = infoImpl.getDateTimeFormatInfo();
     }
   }
-  
+
   private void ensureNumberConstants() {
     if (numberConstants == null) {
       numberConstants = infoImpl.getNumberConstants();
diff --git a/user/src/com/google/gwt/i18n/client/NumberFormat.java b/user/src/com/google/gwt/i18n/client/NumberFormat.java
index 6d3a60d..c7c5ff6 100644
--- a/user/src/com/google/gwt/i18n/client/NumberFormat.java
+++ b/user/src/com/google/gwt/i18n/client/NumberFormat.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -22,7 +22,7 @@
 
 /**
  * Formats and parses numbers using locale-sensitive patterns.
- * 
+ *
  * This class provides comprehensive and flexible support for a wide variety of
  * localized formats, including
  * <ul>
@@ -40,7 +40,7 @@
  * possible to parse and format numbers in any locale, including support for
  * Western, Arabic, and Indic digits</li>
  * </ul>
- * 
+ *
  * <h3>Patterns</h3>
  * <p>
  * Formatting and parsing are based on customizable patterns that can include a
@@ -51,7 +51,7 @@
  * hand, stand for other characters, strings, or classes of characters. For
  * example, the '<code>#</code>' character is replaced by a localized digit.
  * </p>
- * 
+ *
  * <p>
  * Often the replacement character is the same as the pattern character. In the
  * U.S. locale, for example, the '<code>,</code>' grouping character is
@@ -62,7 +62,7 @@
  * presence. For example, if the percent character is seen, then the value is
  * multiplied by 100 before being displayed.
  * </p>
- * 
+ *
  * <p>
  * The characters listed below are used in patterns. Localized symbols use the
  * corresponding characters taken from corresponding locale symbol collection,
@@ -72,7 +72,7 @@
  * meaning) the character must be quoted. There are some exceptions to this
  * which are noted below.
  * </p>
- * 
+ *
  * <table>
  * <tr>
  * <th>Symbol</th>
@@ -80,42 +80,42 @@
  * <th>Localized?</th>
  * <th>Meaning</th>
  * </tr>
- * 
+ *
  * <tr>
  * <td><code>0</code></td>
  * <td>Number</td>
  * <td>Yes</td>
  * <td>Digit</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td><code>#</code></td>
  * <td>Number</td>
  * <td>Yes</td>
  * <td>Digit, zero shows as absent</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td><code>.</code></td>
  * <td>Number</td>
  * <td>Yes</td>
  * <td>Decimal separator or monetary decimal separator</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td><code>-</code></td>
  * <td>Number</td>
  * <td>Yes</td>
  * <td>Minus sign</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td><code>,</code></td>
  * <td>Number</td>
  * <td>Yes</td>
  * <td>Grouping separator</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td><code>E</code></td>
  * <td>Number</td>
@@ -123,28 +123,28 @@
  * <td>Separates mantissa and exponent in scientific notation; need not be
  * quoted in prefix or suffix</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td><code>;</code></td>
  * <td>Subpattern boundary</td>
  * <td>Yes</td>
  * <td>Separates positive and negative subpatterns</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td><code>%</code></td>
  * <td>Prefix or suffix</td>
  * <td>Yes</td>
  * <td>Multiply by 100 and show as percentage</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td><nobr><code>\u2030</code> (\u005Cu2030)</nobr></td>
  * <td>Prefix or suffix</td>
  * <td>Yes</td>
  * <td>Multiply by 1000 and show as per mille</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td><nobr><code>\u00A4</code> (\u005Cu00A4)</nobr></td>
  * <td>Prefix or suffix</td>
@@ -153,7 +153,7 @@
  * international currency symbol; if present in a pattern, the monetary decimal
  * separator is used instead of the decimal separator</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td><code>'</code></td>
  * <td>Prefix or suffix</td>
@@ -163,9 +163,9 @@
  * to create a single quote itself, use two in succession, such as
  * <code>"# o''clock"</code></td>
  * </tr>
- * 
+ *
  * </table>
- * 
+ *
  * <p>
  * A <code>NumberFormat</code> pattern contains a postive and negative
  * subpattern separated by a semicolon, such as
@@ -179,7 +179,7 @@
  * subpattern. That means that <code>"#,##0.0#;(#)"</code> has precisely the
  * same result as <code>"#,##0.0#;(#,##0.0#)"</code>.
  * </p>
- * 
+ *
  * <p>
  * The prefixes, suffixes, and various symbols used for infinity, digits,
  * thousands separators, decimal separators, etc. may be set to arbitrary
@@ -188,7 +188,7 @@
  * unreliable. For example, the decimal separator and thousands separator should
  * be distinct characters, or parsing will be impossible.
  * </p>
- * 
+ *
  * <p>
  * The grouping separator is a character that separates clusters of integer
  * digits to make large numbers more legible. It commonly used for thousands,
@@ -196,12 +196,12 @@
  * number of digits between the grouping separators, such as 3 for "100,000,000"
  * or 4 for "1 0000 0000".
  * </p>
- * 
+ *
  * <h3>Pattern Grammar (BNF)</h3>
  * <p>
  * The pattern itself uses the following grammar:
  * </p>
- * 
+ *
  * <table>
  * <tr>
  * <td>pattern</td>
@@ -263,46 +263,46 @@
  * <td>'<code>\u005Cu0000</code>'..'<code>\u005CuFFFD</code>' - quote</td>
  * </tr>
  * </table>
- * 
+ *
  * <p>
  * Notation:
  * </p>
- * 
+ *
  * <table>
  * <tr>
  * <td>X*</td>
  * <td style="white-space: nowrap">0 or more instances of X</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td>X?</td>
  * <td style="white-space: nowrap">0 or 1 instances of X</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td>X|Y</td>
  * <td style="white-space: nowrap">either X or Y</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td>C..D</td>
  * <td style="white-space: nowrap">any character from C up to D, inclusive</td>
  * </tr>
- * 
+ *
  * <tr>
  * <td>S-T</td>
  * <td style="white-space: nowrap">characters in S, except those in T</td>
  * </tr>
  * </table>
- * 
+ *
  * <p>
  * The first subpattern is for positive numbers. The second (optional)
  * subpattern is for negative numbers.
  * </p>
- * 
+ *
  *  <h3>Example</h3> {@example com.google.gwt.examples.NumberFormatExample}
  *
- * 
+ *
  */
 public class NumberFormat {
 
@@ -345,8 +345,8 @@
   private static final char QUOTE = '\'';
 
   /**
-   * @return true if all new NumberFormat instances will use latin digits
-   *     and related characters rather than the localized ones. 
+   * Returns true if all new NumberFormat instances will use latin digits and
+   * related characters rather than the localized ones.
    */
   public static boolean forcedLatinDigits() {
     return defaultNumberConstants != localizedNumberConstants;
@@ -354,7 +354,7 @@
 
   /**
    * Provides the standard currency format for the default locale.
-   * 
+   *
    * @return a <code>NumberFormat</code> capable of producing and consuming
    *         currency format for the default locale
    */
@@ -369,7 +369,7 @@
   /**
    * Provides the standard currency format for the default locale using a
    * specified currency.
-   * 
+   *
    * @param currencyData currency data to use
    * @return a <code>NumberFormat</code> capable of producing and consuming
    *         currency format for the default locale
@@ -382,8 +382,8 @@
   /**
    * Provides the standard currency format for the default locale using a
    * specified currency.
-   * 
-   * @param currencyCode valid currency code, as defined in 
+   *
+   * @param currencyCode valid currency code, as defined in
    *     com.google.gwt.i18n.client.constants.CurrencyCodeMapConstants.properties
    * @return a <code>NumberFormat</code> capable of producing and consuming
    *         currency format for the default locale
@@ -397,7 +397,7 @@
 
   /**
    * Provides the standard decimal format for the default locale.
-   * 
+   *
    * @return a <code>NumberFormat</code> capable of producing and consuming
    *         decimal format for the default locale
    */
@@ -413,7 +413,7 @@
   /**
    * Gets a <code>NumberFormat</code> instance for the default locale using
    * the specified pattern and the default currencyCode.
-   * 
+   *
    * @param pattern pattern for this formatter
    * @return a NumberFormat instance
    * @throws IllegalArgumentException if the specified pattern is invalid
@@ -425,7 +425,7 @@
   /**
    * Gets a custom <code>NumberFormat</code> instance for the default locale
    * using the specified pattern and currency code.
-   * 
+   *
    * @param pattern pattern for this formatter
    * @param currencyData currency data
    * @return a NumberFormat instance
@@ -439,7 +439,7 @@
   /**
    * Gets a custom <code>NumberFormat</code> instance for the default locale
    * using the specified pattern and currency code.
-   * 
+   *
    * @param pattern pattern for this formatter
    * @param currencyCode international currency code
    * @return a NumberFormat instance
@@ -452,7 +452,7 @@
 
   /**
    * Provides the standard percent format for the default locale.
-   * 
+   *
    * @return a <code>NumberFormat</code> capable of producing and consuming
    *         percent format for the default locale
    */
@@ -467,7 +467,7 @@
 
   /**
    * Provides the standard scientific format for the default locale.
-   * 
+   *
    * @return a <code>NumberFormat</code> capable of producing and consuming
    *         scientific format for the default locale
    */
@@ -483,7 +483,7 @@
   /**
    * Specify whether all new NumberFormat instances will use latin digits
    * and related characters rather than the localized ones.
-   *  
+   *
    * @param useLatinDigits true if latin digits/etc should be used, false if
    *    localized digits/etc should be used.
    */
@@ -508,7 +508,7 @@
 
   /**
    * Create a delocalized NumberConstants instance from a localized one.
-   * 
+   *
    * @param orig localized NumberConstants instance
    * @return NumberConstants instance using latin digits/etc
    */
@@ -589,13 +589,13 @@
 
       public String zeroDigit() {
         return "0";
-      }      
+      }
     };
   }
 
   /**
    * Remap a localized separator to an equivalent latin one.
-   * 
+   *
    * @param separator
    * @return delocalized separator character
    */
@@ -615,7 +615,7 @@
    * (which is the number of places to the right of the end of the string the
    * decimal point should be moved -- i.e., 3.5 would be added to the buffer
    * as "35" and a returned scale of -1).
-   * 
+   *
    * @param buf
    * @param val
    * @return scale to apply to the result
@@ -653,7 +653,7 @@
 
   /**
    * Lookup a currency code.
-   * 
+   *
    * @param currencyCode ISO4217 currency code
    * @return a CurrencyData instance
    * @throws IllegalArgumentException if the currency code is unknown
@@ -671,7 +671,7 @@
   /**
    * Convert a double to a string with {@code digits} precision.  The resulting
    * string may still be in exponential notation.
-   * 
+   *
    * @param d double value
    * @param digits number of digits of precision to include
    * @return non-localized string representation of {@code d}
@@ -750,7 +750,7 @@
 
   /**
    * Constructs a format object based on the specified settings.
-   * 
+   *
    * @param numberConstants the locale-specific number constants to use for this
    *          format -- **NOTE** subclasses passing their own instance here
    *          should pay attention to {@link #forcedLatinDigits()} and remap
@@ -781,7 +781,7 @@
   /**
    * Constructs a format object for the default locale based on the specified
    * settings.
-   * 
+   *
    * @param pattern pattern that specify how number should be formatted
    * @param cdata currency data that should be used
    * @param userSuppliedPattern true if the pattern was supplied by the user
@@ -792,7 +792,7 @@
 
   /**
    * This method formats a double to produce a string.
-   * 
+   *
    * @param number The double to format
    * @return the formatted number string
    */
@@ -834,7 +834,7 @@
    * <p>
    * Any {@link Number} which is not a {@link BigDecimal}, {@link BigInteger},
    * or {@link Long} instance is formatted as a {@code double} value.
-   * 
+   *
    * @param number The Number instance to format
    * @return the formatted number string
    */
@@ -879,7 +879,7 @@
    * Parses text to produce a numeric value. A {@link NumberFormatException} is
    * thrown if either the text is empty or if the parse does not consume all
    * characters of the text.
-   * 
+   *
    * @param text the string being parsed
    * @return a double value representing the parsed number
    * @throws NumberFormatException if the entire text could not be converted
@@ -896,7 +896,7 @@
 
   /**
    * Parses text to produce a numeric value.
-   * 
+   *
    * <p>
    * The method attempts to parse text starting at the index given by pos. If
    * parsing succeeds, then the index of <code>pos</code> is updated to the
@@ -906,7 +906,7 @@
    * for the next call to this method. If an error occurs, then the index of
    * <code>pos</code> is not changed.
    * </p>
-   * 
+   *
    * @param text the string to be parsed
    * @param inOutPos position to pass in and get back
    * @return a double value representing the parsed number
@@ -918,8 +918,8 @@
 
     boolean gotPositivePrefix = text.startsWith(positivePrefix, inOutPos[0]);
     boolean gotNegativePrefix = text.startsWith(negativePrefix, inOutPos[0]);
-    boolean gotPositiveSuffix = text.endsWith(positiveSuffix); 
-    boolean gotNegativeSuffix = text.endsWith(negativeSuffix); 
+    boolean gotPositiveSuffix = text.endsWith(positiveSuffix);
+    boolean gotNegativeSuffix = text.endsWith(negativeSuffix);
     boolean gotPositive = gotPositivePrefix && gotPositiveSuffix;
     boolean gotNegative = gotNegativePrefix && gotNegativeSuffix;
 
@@ -998,7 +998,7 @@
    * <li>.0001
    * <br>{@code isNegative=false, digits="1" ("0001" would be ok), scale=-4}
    * </ul>
-   *  
+   *
    * @param isNegative true if the value to be formatted is negative
    * @param digits a StringBuilder containing just the significant digits in
    *     the value to be formatted, the formatted result will be left here
@@ -1056,7 +1056,7 @@
    * Parses text to produce a numeric value. A {@link NumberFormatException} is
    * thrown if either the text is empty or if the parse does not consume all
    * characters of the text.
-   * 
+   *
    * param text the string to be parsed
    * return a parsed number value, which may be a Double, BigInteger, or
    *     BigDecimal
@@ -1070,7 +1070,7 @@
 
   /**
    * Parses text to produce a numeric value.
-   * 
+   *
    * <p>
    * The method attempts to parse text starting at the index given by pos. If
    * parsing succeeds, then the index of <code>pos</code> is updated to the
@@ -1080,7 +1080,7 @@
    * for the next call to this method. If an error occurs, then the index of
    * <code>pos</code> is not changed.
    * </p>
-   * 
+   *
    * param text the string to be parsed
    * pparam inOutPos position to pass in and get back
    * return a parsed number value, which may be a Double, BigInteger, or
@@ -1096,7 +1096,7 @@
 
   /**
    * Format a possibly scaled long value.
-   * 
+   *
    * @param value value to format
    * @param scale the number of places to the right the decimal point should
    *     be moved in the digit string -- negative means the value contains
@@ -1116,50 +1116,50 @@
   }
 
   /**
-   * @return the number of digits between grouping separators in the integer
-   *         portion of a number.
+   * Returns the number of digits between grouping separators in the integer
+   * portion of a number.
    */
   protected int getGroupingSize() {
     return groupingSize;
   }
 
   /**
-   * @return the prefix to use for negative values.
+   * Returns the prefix to use for negative values.
    */
   protected String getNegativePrefix() {
     return negativePrefix;
   }
 
   /**
-   * @return the suffix to use for negative values.
+   * Returns the suffix to use for negative values.
    */
   protected String getNegativeSuffix() {
     return negativeSuffix;
   }
 
   /**
-   * @return the NumberConstants instance for this formatter.
+   * Returns the NumberConstants instance for this formatter.
    */
   protected NumberConstants getNumberConstants() {
     return numberConstants;
   }
 
   /**
-   * @return the prefix to use for positive values.
+   * Returns the prefix to use for positive values.
    */
   protected String getPositivePrefix() {
     return positivePrefix;
   }
 
   /**
-   * @return the suffix to use for positive values.
+   * Returns the suffix to use for positive values.
    */
   protected String getPositiveSuffix() {
     return positiveSuffix;
   }
 
   /**
-   * @return true if the decimal separator should always be shown.
+   * Returns true if the decimal separator should always be shown.
    */
   protected boolean isDecimalSeparatorAlwaysShown() {
     return decimalSeparatorAlwaysShown;
@@ -1167,7 +1167,7 @@
 
   /**
    * Add exponent suffix.
-   * 
+   *
    * @param digits
    */
   private void addExponent(StringBuilder digits) {
@@ -1203,7 +1203,7 @@
   /**
    * Adjust the fraction digits, adding trailing zeroes if necessary or removing
    * excess trailing zeroes.
-   * 
+   *
    * @param digits
    */
   private void adjustFractionDigits(StringBuilder digits) {
@@ -1235,7 +1235,7 @@
   /**
    * Compute the exponent to use and adjust decimal position if we are using
    * exponential notation.
-   * 
+   *
    * @param digits
    */
   private void computeExponent(StringBuilder digits) {
@@ -1277,7 +1277,7 @@
   /**
    * This method return the digit that represented by current character, it
    * could be either '0' to '9', or a locale specific digit.
-   * 
+   *
    * @param ch character that represents a digit
    * @return the digit value
    */
@@ -1292,7 +1292,7 @@
 
   /**
    * Insert grouping separators if needed.
-   * 
+   *
    * @param digits
    * @param groupingSeparator
    * @param g
@@ -1310,7 +1310,7 @@
 
   /**
    * Replace locale-independent digits with locale-specific ones.
-   *  
+   *
    * @param digits StringBuilder containing formatted number
    * @param zero locale-specific zero character -- the rest of the digits must
    *     be consecutive
@@ -1328,12 +1328,12 @@
 
   /**
    * This method parses affix part of pattern.
-   * 
+   *
    * @param pattern pattern string that need to be parsed
    * @param start start position to parse
    * @param affix store the parsed result
    * @param inNegativePattern true if we are parsing the negative pattern and
-   *     therefore only care about the prefix and suffix 
+   *     therefore only care about the prefix and suffix
    * @return how many characters parsed
    */
   private int parseAffix(String pattern, int start, StringBuffer affix,
@@ -1409,7 +1409,7 @@
   /**
    * This function parses a "localized" text into a <code>double</code>. It
    * needs to handle locale specific decimal, grouping, exponent and digit.
-   * 
+   *
    * @param text the text that need to be parsed
    * @param pos in/out parsing position. in case of failure, this shouldn't be
    *          changed
@@ -1489,7 +1489,7 @@
 
   /**
    * Method parses provided pattern, result is stored in member variables.
-   * 
+   *
    * @param pattern
    */
   private void parsePattern(String pattern) {
@@ -1518,7 +1518,7 @@
 
   /**
    * This method parses the trunk part of a pattern.
-   * 
+   *
    * @param pattern pattern string that need to be parsed
    * @param start where parse started
    * @param ignorePattern true if we are only parsing this for length
@@ -1656,7 +1656,7 @@
 
   /**
    * Remove excess leading zeros or add some if we don't have enough.
-   * 
+   *
    * @param digits
    */
   private void processLeadingZeros(StringBuilder digits) {
@@ -1699,7 +1699,7 @@
 
   /**
    * Propagate a carry from incrementing the {@code i+1}'th digit.
-   * 
+   *
    * @param digits
    * @param i digit to start incrementing
    */
@@ -1725,11 +1725,11 @@
 
   /**
    * Round the value at the requested place, propagating any carry backward.
-   * 
+   *
    * @param digits
    */
   private void roundValue(StringBuilder digits) {
-    // TODO(jat): other rounding modes?    
+    // TODO(jat): other rounding modes?
     if (digitsLength > decimalPosition + maximumFractionDigits
         && digits.charAt(decimalPosition + maximumFractionDigits) >= '5') {
       int i = decimalPosition + maximumFractionDigits - 1;
diff --git a/user/src/com/google/gwt/i18n/client/PluralRule.java b/user/src/com/google/gwt/i18n/client/PluralRule.java
index 23c6949..e5c3dee 100644
--- a/user/src/com/google/gwt/i18n/client/PluralRule.java
+++ b/user/src/com/google/gwt/i18n/client/PluralRule.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -35,17 +35,17 @@
 
     /**
      * Create the plural form.
-     * 
+     *
      * @param name
      * @param description
      */
     public PluralForm(String name, String description) {
       this(name, description, false);
     }
-    
+
     /**
      * Create the plural form.
-     * 
+     *
      * @param name
      * @param description
      * @param noWarn if true, do not warn if this form is missing from a
@@ -59,44 +59,44 @@
     }
 
     /**
-     * @return the description.
+     * Returns the description.
      */
     public String getDescription() {
       return description;
     }
-    
+
     /**
-     * @return the name.
+     * Returns the name.
      */
     public String getName() {
       return name;
     }
 
     /**
-     * @return true if the generator should warn if this plural form
-     *     is not present.
+     * Returns true if the generator should warn if this plural form is not
+     * present.
      */
     public boolean getWarnIfMissing() {
       return !noWarn;
     }
   }
-  
+
   /**
    * Returns the list of values which are valid for this rule.  The
    * default or "other" plural form must be first in the list with
    * an index of 0 -- this form will be used if no other form applies
    * and is also mapped to the default text for a given message.
-   * 
+   *
    * This method will be executed at compile time and may not contain
    * any references, even indirectly, to JSNI methods.
    */
   PluralForm[] pluralForms();
-  
+
   /**
    * Returns the plural form appropriate for this count.
-   * 
+   *
    * This method will be executed at runtime, so must be translatable.
-   * 
+   *
    * @param n count of items to choose plural form for
    * @return the plural form to use (must be a valid index
    *     into the array returned by pluralForms).
diff --git a/user/src/com/google/gwt/i18n/client/TimeZone.java b/user/src/com/google/gwt/i18n/client/TimeZone.java
index 4334a81..57ab166 100644
--- a/user/src/com/google/gwt/i18n/client/TimeZone.java
+++ b/user/src/com/google/gwt/i18n/client/TimeZone.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -29,13 +29,13 @@
  * in which case the data could be retrieved from
  * the {@link com.google.gwt.i18n.client.constants.TimeZoneConstants TimeZoneConstants}
  * class. Applications can also choose to instantiate from a string obtained
- * from a server. The time zone string contains locale specific data. If the 
+ * from a server. The time zone string contains locale specific data. If the
  * application only uses a short representation, the English data will usually
- * satisfy the user's need. In the case that only the time zone offset is known, 
+ * satisfy the user's need. In the case that only the time zone offset is known,
  * there is a decent fallback that only uses the time zone offset to create a
  * TimeZone object.
  */
-public class TimeZone {  
+public class TimeZone {
   // constants to reference time zone names in the time zone names array
   private static final int STD_SHORT_NAME = 0;
   private static final int STD_LONG_NAME = 1;
@@ -45,7 +45,7 @@
   /**
    * This factory method provides a decent fallback to create a time zone object
    * just based on a given time zone offset.
-   * 
+   *
    * @param timeZoneOffsetInMinutes time zone offset in minutes
    * @return a new time zone object
    */
@@ -53,7 +53,7 @@
     TimeZone tz = new TimeZone();
     tz.standardOffset = timeZoneOffsetInMinutes;
     tz.timezoneID = composePOSIXTimeZoneID(timeZoneOffsetInMinutes);
-    tz.tzNames = new String[2]; 
+    tz.tzNames = new String[2];
     tz.tzNames[0] = composeUTCString(timeZoneOffsetInMinutes);
     tz.tzNames[1] = composeUTCString(timeZoneOffsetInMinutes);
     tz.transitionPoints = null;
@@ -68,13 +68,13 @@
    * string from the server. Either way, the application obtains the original
    * string from the data provided in the TimeZoneConstant.properties file,
    * which was carefully prepared from CLDR and Olson time zone database.
-   * 
+   *
    * @param tzJSON JSON string that contains time zone data
    * @return a new time zone object
    */
   public static TimeZone createTimeZone(String tzJSON) {
     TimeZoneInfo tzData = TimeZoneInfo.buildTimeZoneData(tzJSON);
-    
+
     return createTimeZone(tzData);
   }
 
@@ -83,16 +83,16 @@
 
     tz.timezoneID = timezoneData.getID();
     tz.standardOffset = -timezoneData.getStandardOffset();
-    
+
     JsArrayString jsTimezoneNames = timezoneData.getNames();
-    
+
     tz.tzNames = new String[jsTimezoneNames.length()];
-    
+
     for (int i = 0; i < jsTimezoneNames.length(); i++) {
       tz.tzNames[i] = jsTimezoneNames.get(i);
     }
 
-    JsArrayInteger transitions = timezoneData.getTransitions();    
+    JsArrayInteger transitions = timezoneData.getTransitions();
 
     if (transitions == null || transitions.length() == 0) {
       tz.transitionPoints = null;
@@ -127,8 +127,8 @@
     return new String(data);
   }
 
-  /** 
-   * POSIX time zone ID as fallback. 
+  /**
+   * POSIX time zone ID as fallback.
    */
   private static String composePOSIXTimeZoneID(int offset) {
     if (offset == 0) {
@@ -157,7 +157,7 @@
     }
     return str + offsetDisplay(offset);
   }
-  
+
   private static String offsetDisplay(int offset) {
     int hour = offset / 60;
     int mins = offset % 60;
@@ -177,10 +177,10 @@
   }
 
   /**
-   * Return the daylight savings time adjustment, in minutes, for the given
+   * Returns the daylight savings time adjustment, in minutes, for the given
    * date. If daylight savings time is in effect on the given date, the number
    * will be positive, otherwise 0.
-   * 
+   *
    * @param date the date to check
    * @return offset amount
    */
@@ -190,7 +190,7 @@
     }
     long timeInHours = date.getTime() / 1000 / 3600;
     int index = 0;
-    while (index < transitionPoints.length && 
+    while (index < transitionPoints.length &&
         timeInHours >= transitionPoints[index]) {
       ++index;
     }
@@ -198,8 +198,8 @@
   }
 
   /**
-   * Return the GMT representation of this time zone object.
-   * 
+   * Returns the GMT representation of this time zone object.
+   *
    * @param date The date from which the time information should be extracted
    * @return A GMT representation of the time given by the date
    */
@@ -208,10 +208,10 @@
   }
 
   /**
-   * Return time zone id for this time zone. For time zone objects that have
+   * Returns time zone id for this time zone. For time zone objects that have
    * been instantiated from a time zone offset, the POSIX time zone id will be
    * returned.
-   * 
+   *
    * @return time zone id
    */
   public String getID() {
@@ -242,19 +242,19 @@
    * Returns the long version of the time zone name for the given date; the
    * result of this method will be different if daylight savings time is in
    * effect.
-   * 
+   *
    * @param date The date for which the long time zone name is returned
    * @return long time zone name
    */
   public String getLongName(Date date) {
-    return tzNames[isDaylightTime(date) ? DLT_LONG_NAME : STD_LONG_NAME]; 
+    return tzNames[isDaylightTime(date) ? DLT_LONG_NAME : STD_LONG_NAME];
   }
 
   /**
    * Returns the RFC representation of the time zone name for the given date.
    * To be consistent with JDK/Javascript API, west of Greenwich will be
    * positive.
-   * 
+   *
    *  @param date The date for which time to retrieve time zone offset
    *  @return time zone offset in minutes
    */
@@ -283,16 +283,16 @@
 
   /**
    * Returns the short time zone name for a given date.
-   * 
+   *
    * @param date The date for which time to retrieve short time zone
    * @return short time zone name
    */
   public String getShortName(Date date) {
-    return tzNames[isDaylightTime(date) ? DLT_SHORT_NAME : STD_SHORT_NAME]; 
+    return tzNames[isDaylightTime(date) ? DLT_SHORT_NAME : STD_SHORT_NAME];
   }
 
   /**
-   * @return the standard time zone offset, in minutes.
+   * Returns the standard time zone offset, in minutes.
    */
   public int getStandardOffset() {
     return standardOffset;
@@ -301,7 +301,7 @@
   /**
    * Check whether the given date and time falls within a daylight savings time
    * period.
-   * 
+   *
    * @param date and time to check
    * @return true if daylight savings time is in effect
    */
diff --git a/user/src/com/google/gwt/i18n/client/impl/CldrImpl.java b/user/src/com/google/gwt/i18n/client/impl/CldrImpl.java
index c30a088..1bb55a1 100644
--- a/user/src/com/google/gwt/i18n/client/impl/CldrImpl.java
+++ b/user/src/com/google/gwt/i18n/client/impl/CldrImpl.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -20,9 +20,9 @@
 /**
  * Implementation detail of LocaleInfo -- not a public API and subject to
  * change.
- * 
+ *
  * Locale data from CLDR.
- * 
+ *
  * Subclasses of this are currently hand-written, but will eventually be
  * generated directly from the CLDR data and make available most of the
  * information present in CLDR.
@@ -34,9 +34,9 @@
    */
 
   /**
-   * @return true if the current locale is right-to-left rather than
-   *         left-to-right.
-   * 
+   * Returns true if the current locale is right-to-left rather than
+   * left-to-right.
+   *
    * Most languages are left-to-right, so the default is false.
    */
   public boolean isRTL() {
diff --git a/user/src/com/google/gwt/i18n/client/impl/LocaleInfoImpl.java b/user/src/com/google/gwt/i18n/client/impl/LocaleInfoImpl.java
index d36b23a..f4dd43a 100644
--- a/user/src/com/google/gwt/i18n/client/impl/LocaleInfoImpl.java
+++ b/user/src/com/google/gwt/i18n/client/impl/LocaleInfoImpl.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -24,35 +24,35 @@
 /**
  * Implementation detail of LocaleInfo -- not a public API and subject to
  * change.
- * 
+ *
  * Generated interface for locale information.  The default implementation
  * returns null, which is used if the i18n module is not imported.
- * 
+ *
  * @see com.google.gwt.i18n.client.LocaleInfo
  */
 public class LocaleInfoImpl {
 
   /**
-   * @return the runtime locale (note that this requires the i18n locale
-   *     property provider's assistance)
+   * Returns the runtime locale (note that this requires the i18n locale property
+   * provider's assistance).
    */
   static native String getRuntimeLocale() /*-{
     return $wnd['__gwt_Locale'];
   }-*/;
 
   /**
-   * @return an array of available locale names
+   * Returns an array of available locale names.
    */
   public String[] getAvailableLocaleNames() {
     return null;
   }
-  
+
   /**
    * Create a {@link DateTimeFormatInfo} instance appropriate for this locale.
-   * 
+   *
    * Note that the caller takes care of any caching so subclasses need not
    * bother.
-   * 
+   *
    * @return a {@link DateTimeFormatInfo} instance
    */
   public DateTimeFormatInfo getDateTimeFormatInfo() {
@@ -60,34 +60,34 @@
   }
 
   /**
-   * @return the current locale name, such as "default, "en_US", etc.
+   * Returns the current locale name, such as "default, "en_US", etc.
    */
   public String getLocaleName() {
     return null;
   }
 
   /**
-   * Return the display name of the requested locale in its native locale, if
+   * Returns the display name of the requested locale in its native locale, if
    * possible. If no native localization is available, the English name will
    * be returned, or as a last resort just the locale name will be returned.  If
    * the locale name is unknown (including user overrides), null is returned.
-   * 
+   *
    * @param localeName the name of the locale to lookup.
    * @return the name of the locale in its native locale
    */
   public String getLocaleNativeDisplayName(String localeName) {
     return null;
   }
-  
+
   /**
-   * @return a NumberConstants instance appropriate for this locale.
+   * Returns a NumberConstants instance appropriate for this locale.
    */
   public NumberConstants getNumberConstants() {
     return GWT.create(NumberConstantsImpl.class);
   }
-  
+
   /**
-   * @return true if any locale supported by this build of the app is RTL.
+   * Returns true if any locale supported by this build of the app is RTL.
    */
   public boolean hasAnyRTL() {
     return false;
diff --git a/user/src/com/google/gwt/i18n/rebind/AbstractResource.java b/user/src/com/google/gwt/i18n/rebind/AbstractResource.java
index 82ad3ef..6a8f5d4 100644
--- a/user/src/com/google/gwt/i18n/rebind/AbstractResource.java
+++ b/user/src/com/google/gwt/i18n/rebind/AbstractResource.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -93,25 +93,25 @@
    * Definition of a single entry for a resource.
    */
   public interface ResourceEntry {
-    
+
     /**
      * Retrieve a particular form for this entry.
-     * 
+     *
      * @param form form to retrieve (null for the default)
      * @return null if the requested form is not present
      */
     String getForm(String form);
-    
+
     /**
-     * @return list of forms associated with this entry.
-     * 
+     * Returns a list of forms associated with this entry.
+     *
      * The default form (also the only form for anything other than messages
      * with plural support) is always available and not present in this list.
      */
     Collection<String> getForms();
-    
+
     /**
-     * @return key for this entry (must not be null).
+     * Returns key for this entry (must not be null).
      */
     String getKey();
   }
@@ -125,7 +125,7 @@
     private List<AbstractResource> list = new ArrayList<AbstractResource>();
 
     private Map<String, PluralForm[]> pluralForms = new HashMap<String, PluralForm[]>();
-    
+
     private Set<AbstractResource> set = new HashSet<AbstractResource>();
 
     @Override
@@ -148,7 +148,7 @@
 
     /**
      * Add all keys known by this ResourceList to the specified set.
-     * 
+     *
      * @param s set to add keys to
      */
     public void addToKeySet(Set<String> s) {
@@ -193,7 +193,7 @@
           best = matchLocale;
         }
       }
-      return best; 
+      return best;
     }
 
     @Override
@@ -202,8 +202,8 @@
     }
 
     /**
-     * Return the first AnnotationsResource containing a specified key.
-     * 
+     * Returns the first AnnotationsResource containing a specified key.
+     *
      * @param logger
      * @param key
      * @return first AnnotationsResource containing key, or null if none
@@ -236,8 +236,8 @@
     }
 
     /**
-     * Return the list of extensions available for a given key.
-     * 
+     * Returns the list of extensions available for a given key.
+     *
      * @param key
      * @return collection of extensions for the given key
      */
@@ -250,7 +250,7 @@
     }
 
     /**
-     * Return the list of plural forms for a given key.
+     * Returns the list of plural forms for a given key.
      *
      * @param key
      * @return array of plural forms.
@@ -260,8 +260,8 @@
     }
 
     /**
-     * Return a translation for a key, or throw an exception.
-     * 
+     * Returns a translation for a key, or throw an exception.
+     *
      * @param key
      * @return translated string for key
      * @throws MissingResourceException
@@ -276,8 +276,8 @@
     }
 
     /**
-     * Return a translation for a key/extension, or throw an exception.
-     * 
+     * Returns a translation for a key/extension, or throw an exception.
+     *
      * @param key
      * @param ext key extension, null if none
      * @return translated string for key
@@ -293,8 +293,8 @@
     }
 
     /**
-     * Return a translation for a key, or null if not found.
-     * 
+     * Returns a translation for a key, or null if not found.
+     *
      * @param key
      * @return translated string for key
      */
@@ -309,8 +309,8 @@
     }
 
     /**
-     * Return a translation for a key/extension, or null if not found.
-     * 
+     * Returns a translation for a key/extension, or null if not found.
+     *
      * @param key
      * @param extension key extension, null if none
      * @return translated string for key
@@ -336,7 +336,7 @@
     }
 
     /**
-     * @return set of keys present across all resources
+     * Returns set of keys present across all resources.
      */
     public Set<String> keySet() {
       Set<String> keySet = new HashSet<String>();
@@ -360,7 +360,7 @@
 
     /**
      * Set the plural forms associated with a given message.
-     * 
+     *
      * @param key
      * @param forms
      */
@@ -384,7 +384,7 @@
     private final String key;
     private final Map<String, String> values = new HashMap<String, String>();
     private final Set<String> forms = new HashSet<String>();
- 
+
     public MultipleFormEntry(String key) {
       this.key = key;
     }
@@ -395,7 +395,7 @@
         forms.add(form);
       }
     }
- 
+
     public String getForm(String form) {
       return values.get(form);
     }
@@ -416,7 +416,7 @@
 
     private final String key;
     private final String value;
-  
+
     public SimpleEntry(String key, String value) {
       this.key = key;
       this.value = value;
@@ -474,9 +474,9 @@
   public AbstractResource(GwtLocale matchLocale) {
     this.matchLocale = matchLocale;
   }
-  
+
   /**
-   * Return an entry in this resource.
+   * Returns an entry in this resource.
    *
    * @param key
    * @return ResourceEntry instance
@@ -495,7 +495,7 @@
 
   /**
    * Get a string and fail if not present.
-   * 
+   *
    * @param key
    * @return the requested string
    */
@@ -505,7 +505,7 @@
 
   /**
    * Get a string (with optional extension) and fail if not present.
-   * 
+   *
    * @param key
    * @param extension
    * @return the requested string
@@ -522,7 +522,7 @@
 
   /**
    * Get a key.
-   * 
+   *
    * @param key key to lookup
    * @return the string for the given key or null if not found
    * @see java.util.ResourceBundle#getString(java.lang.String)
@@ -533,7 +533,7 @@
 
   /**
    * Get a key with an extension. Identical to getString() if extension is null.
-   * 
+   *
    * @param key to lookup
    * @param extension extension of the key, nullable
    * @return string or null
@@ -542,7 +542,7 @@
 
   /**
    * Keys associated with this resource.
-   * 
+   *
    * @return keys
    */
   public Set<String> keySet() {
@@ -554,7 +554,7 @@
   }
 
   /**
-   * @return true if this resource has any keys
+   * Returns true if this resource has any keys.
    */
   public boolean notEmpty() {
     return !keySet.isEmpty();
@@ -567,7 +567,7 @@
 
   /**
    * A multi-line representation of this object.
-   * 
+   *
    * @return verbose string
    */
   public String toVerboseString() {
diff --git a/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java b/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java
index 1bfc834..eee04b0 100644
--- a/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java
+++ b/user/src/com/google/gwt/i18n/rebind/LocaleUtils.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -58,7 +58,7 @@
   /**
    * Create a new LocaleUtils instance for the given PropertyOracle.  Returned
    * instances will be immutable and can be shared across threads.
-   * 
+   *
    * @param logger
    * @param propertyOracle
    * @return LocaleUtils instance
@@ -91,7 +91,7 @@
 
   /**
    * Get a shared GwtLocale factory so instances are cached between all uses.
-   * 
+   *
    * @return singleton GwtLocaleFactory instance.
    */
   public static GwtLocaleFactory getLocaleFactory() {
@@ -174,7 +174,7 @@
 
   /**
    * Returns the set of all compile-time locales.
-   * 
+   *
    * @return unmodifiable set of all compile-time locales
    */
   public Set<GwtLocale> getAllCompileLocales() {
@@ -184,7 +184,7 @@
   /**
    * Returns the set of all available locales, whether compile-time locales or
    * runtime locales.
-   * 
+   *
    * @return unmodifiable set of all locales
    */
   public Set<GwtLocale> getAllLocales() {
@@ -192,7 +192,7 @@
   }
 
   /**
-   * @return the static compile-time locale for this permutation.
+   * Returns the static compile-time locale for this permutation.
    */
   public GwtLocale getCompileLocale() {
     return compileLocale;
@@ -201,7 +201,7 @@
   /**
    * Returns a list of locales which are children of the current compile-time
    * locale.
-   * 
+   *
    * @return unmodifiable list of matching locales
    */
   public Set<GwtLocale> getRuntimeLocales() {
diff --git a/user/src/com/google/gwt/i18n/rebind/LookupMethodCreator.java b/user/src/com/google/gwt/i18n/rebind/LookupMethodCreator.java
index a9a9dd7..fed873c 100644
--- a/user/src/com/google/gwt/i18n/rebind/LookupMethodCreator.java
+++ b/user/src/com/google/gwt/i18n/rebind/LookupMethodCreator.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -35,7 +35,7 @@
 
   /**
    * Constructor for <code>LookupMethodCreator</code>.
-   * 
+   *
    * @param classCreator parent class creator
    * @param returnType associated return type
    */
@@ -52,7 +52,7 @@
   }
 
   /**
-   * @return string containing return type name
+   * Returns a {@code String} containing the return type name.
    */
   protected String getReturnTypeName() {
     String type;
diff --git a/user/src/com/google/gwt/i18n/rebind/MessageFormatParser.java b/user/src/com/google/gwt/i18n/rebind/MessageFormatParser.java
index 7573250..663bba0 100644
--- a/user/src/com/google/gwt/i18n/rebind/MessageFormatParser.java
+++ b/user/src/com/google/gwt/i18n/rebind/MessageFormatParser.java
@@ -266,21 +266,21 @@
         throws UnableToCompleteException;
 
     /**
-     * @return the string as this chunk would be represented in a MessageFormat
-     *         template, with any required quoting such that reparsing this
-     *         value would produce an equivalent (note, not identical) parse.
+     * Returns the string as this chunk would be represented in a MessageFormat
+     * template, with any required quoting such that reparsing this value would
+     * produce an equivalent (note, not identical) parse.
      *
-     *          Note that the default implementation may not be sufficient for
-     *         all subclasses.
+     * Note that the default implementation may not be sufficient for all
+     * subclasses.
      */
     public String getAsMessageFormatString() {
       return getStringValue(true);
     }
 
     /**
-     * @return the string as this chunk would be represented in a MessageFormat
-     *         template, with any quoting removed. Note that this is distinct
-     *         from toString in that the latter is intend for human consumption.
+     * Returns the string as this chunk would be represented in a MessageFormat
+     * template, with any quoting removed. Note that this is distinct from
+     * toString in that the latter is intend for human consumption.
      */
     public String getString() {
       return getStringValue(false);
diff --git a/user/src/com/google/gwt/i18n/rebind/MessagesMethodCreator.java b/user/src/com/google/gwt/i18n/rebind/MessagesMethodCreator.java
index bc551f0..b5e1729 100644
--- a/user/src/com/google/gwt/i18n/rebind/MessagesMethodCreator.java
+++ b/user/src/com/google/gwt/i18n/rebind/MessagesMethodCreator.java
@@ -337,21 +337,21 @@
   private interface Parameters {
 
     /**
-     * @return the count of parameters.
+     * Returns the count of parameters.
      */
     int getCount();
 
     /**
-     * Return the given parameter.
-     * 
+     * Returns the given parameter.
+     *
      * @param i index of the parameter to return, 0 .. getCount() - 1
      * @return parameter or null if i is out of range
      */
     JParameter getParameter(int i);
 
     /**
-     * Return the given parameter.
-     * 
+     * Returns the given parameter.
+     *
      * @param name the name of the parameter to return
      * @return parameter or null if the named parameter doesn't exist
      */
@@ -359,7 +359,7 @@
 
     /**
      * Find the index of a parameter by name.
-     * 
+     *
      * @param name
      * @return index of requested parameter or -1 if not found
      */
@@ -967,7 +967,7 @@
 
   /**
    * Generate code for one list pattern.
-   * 
+   *
    * @param logger logger to use for error/warning messages
    * @param locale locale we are generating code for
    * @param listArg the {n,list,...} argument in the original format pattern
@@ -1026,7 +1026,7 @@
 
   /**
    * Generates code to format a list in a format pattern.
-   * 
+   *
    * @param logger logger to use for error/warning messages
    * @param locale locale we are generating code for
    * @param generated a StringBuffer holding the generated code
diff --git a/user/src/com/google/gwt/i18n/rebind/format/MessageCatalogFormat.java b/user/src/com/google/gwt/i18n/rebind/format/MessageCatalogFormat.java
index 5693c39..60019a4 100644
--- a/user/src/com/google/gwt/i18n/rebind/format/MessageCatalogFormat.java
+++ b/user/src/com/google/gwt/i18n/rebind/format/MessageCatalogFormat.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -24,21 +24,21 @@
 
 /**
  * Interface for writing various message catalog formats.
- * 
+ *
  * <p><hr><b>WARNING:</b> this API is expected to change as we develop additional
  * message catalog formats.  In particular, this interface will be extended
  * to support reading message catalogs and further changes may be required.
  * <hr></p>
- * 
+ *
  * <p>Implementations of this interface are executed at compile time and
  * therefore must not contain any JSNI code.
  * </p>
  */
 public interface MessageCatalogFormat {
-  
+
   /**
    * Write a message catalog file.
-   * 
+   *
    * @param logger TreeLogger for logging errors/etc
    * @param locale locale of this output file
    * @param resourceList the contents to write
@@ -52,9 +52,9 @@
   void write(TreeLogger logger, String locale, ResourceList resourceList,
       PrintWriter out, JClassType messageInterface)
       throws UnableToCompleteException;
-  
+
   /**
-   * @return the extension to use for this file type, including the dot
+   * Returns the extension to use for this file type, including the dot.
    */
   String getExtension();
 }
diff --git a/user/src/com/google/gwt/i18n/shared/BidiFormatter.java b/user/src/com/google/gwt/i18n/shared/BidiFormatter.java
index dec7ced..09170ee 100644
--- a/user/src/com/google/gwt/i18n/shared/BidiFormatter.java
+++ b/user/src/com/google/gwt/i18n/shared/BidiFormatter.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -58,7 +58,7 @@
  * Thus, in a single call, the formatter will escape the input string as
  * specified, determine its direction, and wrap it as necessary. It is then up
  * to the caller to insert the return value in the output.
- * 
+ *
  */
 public class BidiFormatter {
 
@@ -76,22 +76,22 @@
      * Unicode "Left-To-Right Embedding" (LRE) character.
      */
     public static final char LRE = '\u202A';
-    
+
     /**
      * Unicode "Left-To-Right Mark" (LRM) character.
-     */ 
+     */
     public static final char LRM = '\u200E';
-    
+
     /**
      * String representation of LRM.
      */
     public static final String LRM_STRING = Character.toString(LRM);
-    
+
     /**
      * Unicode "Pop Directional Formatting" (PDF) character.
-     */ 
+     */
     public static final char PDF = '\u202C';
-    
+
     /**
      * "right" string constant.
      */
@@ -99,9 +99,9 @@
 
     /**
      * Unicode "Right-To-Left Embedding" (RLE) character.
-     */ 
+     */
     public static final char RLE = '\u202B';
-    
+
     /**
      * Unicode "Right-To-Left Mark" (RLM) character.
      */
@@ -114,7 +114,7 @@
 
     // Not instantiable.
     private Format() {
-    } 
+    }
   }
 
   /**
@@ -135,7 +135,7 @@
   /**
    * Factory for creating an instance of BidiFormatter given the context
    * direction and the desired span wrapping behavior (see below).
-   * 
+   *
    * @param rtlContext Whether the context direction is RTL. See an example of
    *          a simple use case at {@link #getInstance(boolean)}
    * @param alwaysSpan Whether {@link #spanWrap} (and its variations) should
@@ -154,7 +154,7 @@
    * direction. The default behavior of {@link #spanWrap} and its variations is
    * set to avoid span wrapping unless it's necessary ('dir' attribute needs to
    * be set).
-   * 
+   *
    * @param contextDir The context direction. See an example of a simple use
    *          case at {@link #getInstance(boolean)}. Note: Direction.DEFAULT
    *          indicates unknown context direction. Try not to use it, since it
@@ -168,7 +168,7 @@
   /**
    * Factory for creating an instance of BidiFormatter given the context
    * direction and the desired span wrapping behavior (see below).
-   * 
+   *
    * @param contextDir The context direction. See an example of a simple use
    *          case at {@link #getInstance(boolean)}. Note: Direction.DEFAULT
    *          indicates unknown context direction. Try not to use it, since it
@@ -183,7 +183,7 @@
       boolean alwaysSpan) {
     return new BidiFormatter(contextDir, alwaysSpan);
   }
-  
+
   /**
    * Factory for creating an instance of BidiFormatter whose context direction
    * matches the current locale's direction. The default behavior of {@link
@@ -192,7 +192,7 @@
    */
   public static BidiFormatter getInstanceForCurrentLocale() {
     return getInstanceForCurrentLocale(false);
-  }  
+  }
 
   /**
    * Factory for creating an instance of BidiFormatter whose context direction
@@ -206,8 +206,8 @@
    */
   public static BidiFormatter getInstanceForCurrentLocale(boolean alwaysSpan) {
     return getInstance(LocaleInfo.getCurrentLocale().isRTL(), alwaysSpan);
-  }  
-  
+  }
+
   private boolean alwaysSpan;
   private Direction contextDir;
 
@@ -226,7 +226,7 @@
   /**
    * Like {@link #dirAttr(String, boolean)}, but assumes {@code isHtml} is
    * false.
-   * 
+   *
    * @param str String whose direction is to be estimated
    * @return "dir=rtl" for RTL text in non-RTL context; "dir=ltr" for LTR text
    *         in non-LTR context; else, the empty string.
@@ -239,7 +239,7 @@
    * Returns "dir=ltr" or "dir=rtl", depending on {@code str}'s estimated
    * direction, if it is not the same as the context direction. Otherwise,
    * returns the empty string.
-   * 
+   *
    * @param str String whose direction is to be estimated
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
    * @return "dir=rtl" for RTL text in non-RTL context; "dir=ltr" for LTR text
@@ -260,7 +260,7 @@
   /**
    * Like {@link #estimateDirection(String, boolean)}, but assumes {@code
    * isHtml} is false.
-   * 
+   *
    * @param str String whose direction is to be estimated
    * @return {@code str}'s estimated overall direction
    */
@@ -272,7 +272,7 @@
    * Estimates the direction of a string using the best known general-purpose
    * method, i.e. using relative word counts. Direction.DEFAULT return value
    * indicates completely neutral input.
-   * 
+   *
    * @param str String whose direction is to be estimated
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
    * @return {@code str}'s estimated overall direction
@@ -282,23 +282,22 @@
   }
 
   /**
-   * @return Whether the span structure added by the formatter should be stable,
-   *         i.e. spans added even when the direction does not need to be
-   *         declared
+   * Returns whether the span structure added by the formatter should be stable,
+   * i.e., spans added even when the direction does not need to be declared.
    */
   public boolean getAlwaysSpan() {
     return alwaysSpan;
   }
 
   /**
-   * @return The context direction
+   * Returns the context direction.
    */
   public Direction getContextDir() {
     return contextDir;
   }
 
   /**
-   * @return Whether the context direction is RTL
+   * Returns whether the context direction is RTL.
    */
   public boolean isRtlContext() {
     return contextDir == Direction.RTL;
@@ -307,7 +306,7 @@
   /**
    * Returns "dir=ltr" or "dir=rtl", depending on the given direction, if it is
    * not the same as the context direction. Otherwise, returns the empty string.
-   * 
+   *
    * @param dir Given direction
    * @return "dir=rtl" for RTL text in non-RTL context; "dir=ltr" for LTR text
    *         in non-LTR context; else, the empty string.
@@ -333,7 +332,7 @@
   /**
    * Like {@link #markAfter(String, boolean)}, but assumes {@code isHtml} is
    * false.
-   * 
+   *
    * @param str String after which the mark may need to appear
    * @return LRM for RTL text in LTR context; RLM for LTR text in RTL context;
    *         else, the empty string.
@@ -346,7 +345,7 @@
    * Returns a Unicode BiDi mark matching the context direction (LRM or RLM) if
    * either the direction or the exit direction of {@code str} is opposite to
    * the context direction. Otherwise returns the empty string.
-   * 
+   *
    * @param str String after which the mark may need to appear
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
    * @return LRM for RTL text in LTR context; RLM for LTR text in RTL context;
@@ -361,7 +360,7 @@
   /**
    * Like {@link #spanWrap(String, boolean, boolean)}, but assumes {@code
    * isHtml} is false and {@code dirReset} is true.
-   * 
+   *
    * @param str The input string
    * @return Input string after applying the above processing.
    */
@@ -372,7 +371,7 @@
   /**
    * Like {@link #spanWrap(String, boolean, boolean)}, but assumes {@code
    * dirReset} is true.
-   * 
+   *
    * @param str The input string
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
    * @return Input string after applying the above processing.
@@ -398,7 +397,7 @@
    * mark matching the context direction is appended (LRM or RLM).
    * <p>
    * If !{@code isHtml}, HTML-escapes {@code str} regardless of wrapping.
-   * 
+   *
    * @param str The input string
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
    * @param dirReset Whether to append a trailing unicode bidi mark matching the
@@ -414,7 +413,7 @@
   /**
    * Like {@link #spanWrapWithKnownDir(HasDirection.Direction, String, boolean, boolean)},
    * but assumes {@code isHtml} is false and {@code dirReset} is true.
-   * 
+   *
    * @param dir {@code str}'s direction
    * @param str The input string
    * @return Input string after applying the above processing.
@@ -426,7 +425,7 @@
   /**
    * Like {@link #spanWrapWithKnownDir(HasDirection.Direction, String, boolean, boolean)},
    * but assumes {@code dirReset} is true.
-   * 
+   *
    * @param dir {@code str}'s direction
    * @param str The input string
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
@@ -453,7 +452,7 @@
    * mark matching the context direction is appended (LRM or RLM).
    * <p>
    * If !{@code isHtml}, HTML-escapes {@code str} regardless of wrapping.
-   * 
+   *
    * @param dir {@code str}'s direction
    * @param str The input string
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
@@ -497,7 +496,7 @@
   /**
    * Like {@link #unicodeWrap(String, boolean, boolean)}, but assumes {@code
    * isHtml} is false and {@code dirReset} is true.
-   * 
+   *
    * @param str The input string
    * @return Input string after applying the above processing.
    */
@@ -508,7 +507,7 @@
   /**
    * Like {@link #unicodeWrap(String, boolean, boolean)}, but assumes {@code
    * dirReset} is true.
-   * 
+   *
    * @param str The input string
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
    * @return Input string after applying the above processing.
@@ -534,7 +533,7 @@
    * BiDi mark matching the context direction is appended (LRM or RLM).
    * <p>
    * Does *not* do HTML-escaping regardless of the value of {@code isHtml}.
-   * 
+   *
    * @param str The input string
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
    * @param dirReset Whether to append a trailing unicode bidi mark matching the
@@ -550,7 +549,7 @@
   /**
    * Like {@link #unicodeWrapWithKnownDir(HasDirection.Direction, String, boolean, boolean)},
    * but assumes {@code isHtml} is false and {@code dirReset} is true.
-   * 
+   *
    * @param dir {@code str}'s direction
    * @param str The input string
    * @return Input string after applying the above processing.
@@ -562,7 +561,7 @@
   /**
    * Like {@link #unicodeWrapWithKnownDir(HasDirection.Direction, String, boolean, boolean)},
    * but assumes {@code dirReset} is true.
-   * 
+   *
    * @param dir {@code str}'s direction
    * @param str The input string
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
@@ -590,7 +589,7 @@
    * BiDi mark matching the context direction is appended (LRM or RLM).
    * <p>
    * Does *not* do HTML-escaping regardless of the value of {@code isHtml}.
-   * 
+   *
    * @param dir {@code str}'s direction
    * @param str The input string
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
@@ -619,7 +618,7 @@
    * {@code dirReset}, and if the overall direction or the exit direction of
    * {@code str} are opposite to the context direction. Otherwise returns the
    * empty string.
-   * 
+   *
    * @param str The input string
    * @param dir {@code str}'s overall direction
    * @param isHtml Whether {@code str} is HTML / HTML-escaped
@@ -648,4 +647,3 @@
     return str.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace("\n", "<br>");
   }
 }
-
diff --git a/user/src/com/google/gwt/i18n/shared/GwtLocale.java b/user/src/com/google/gwt/i18n/shared/GwtLocale.java
index 8dd7bb4..9a065ab 100644
--- a/user/src/com/google/gwt/i18n/shared/GwtLocale.java
+++ b/user/src/com/google/gwt/i18n/shared/GwtLocale.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -32,19 +32,19 @@
   int compareTo(GwtLocale o);
 
   /**
-   * Return the list of aliases for this locale.  The canonical form of the
+   * Returns the list of aliases for this locale.  The canonical form of the
    * current locale is always first on the list.
-   * 
+   *
    * Language/region codes have changed over time, so some systems continue to
    * use the older codes.  Aliases allow GWT to use the official Unicode CLDR
    * locales while still interoperating with such systems.
-   * 
+   *
    * @return alias list
    */
   List<GwtLocale> getAliases();
-  
+
   /**
-   * Return the locale as a fixed-format string suitable for use in searching
+   * Returns the locale as a fixed-format string suitable for use in searching
    * for localized resources.  The format is language_Script_REGION_VARIANT,
    * where language is a 2-8 letter code (possibly with 3-letter extensions),
    * script is a 4-letter code with an initial capital letter, region is a
@@ -52,7 +52,7 @@
    * character (may be 4 if the first character is numeric) code.  If a
    * component is missing, its preceding _ is also omitted.  If this is the
    * default locale, the empty string will be returned.
-   * 
+   *
    * @return String representing locale
    */
   String getAsString();
@@ -66,92 +66,92 @@
    *  <li>no/nb/nn are normalized
    *  <li>Default region for zh_Hans and zh_Hant if none specified
    * </ul>
-   * 
-   * @return GwtLocale instance 
+   *
+   * @return GwtLocale instance
    */
   GwtLocale getCanonicalForm();
 
   /**
-   * Return the complete list of locales to search for the current locale.
+   * Returns the complete list of locales to search for the current locale.
    * This list will always start with the canonical form of this locale, and
    * end with "default", and include all appropriate aliases along the way.
-   * 
+   *
    * @return search list
    */
   List<GwtLocale> getCompleteSearchList();
-  
+
   /**
-   * Return a list of locales to search for, in order of preference.  The
+   * Returns a list of locales to search for, in order of preference.  The
    * current locale is always first on the list.  Aliases are not included
    * in the list -- use {@link #getAliases} to expand those.
-   * 
+   *
    * @return inheritance list
    */
   List<GwtLocale> getInheritanceChain();
-  
+
   /**
-   * @return the language portion of the locale, or null if none.
+   * Returns the language portion of the locale, or null if none.
    */
   String getLanguage();
 
   /**
-   * @return the language portion of the locale, or the empty string if none.
+   * Returns the language portion of the locale, or the empty string if none.
    */
   String getLanguageNotNull();
 
   /**
-   * @return the region portion of the locale, or null if none.
+   * Returns the region portion of the locale, or null if none.
    */
   String getRegion();
-  
+
   /**
-   * @return the region portion of the locale, or the empty string if none.
+   * Returns the region portion of the locale, or the empty string if none.
    */
   String getRegionNotNull();
 
   /**
-   * @return the script portion of the locale, or null if none.
+   * Returns the script portion of the locale, or null if none.
    */
   String getScript();
-  
+
   /**
-   * @return the script portion of the locale, or the empty string if none.
+   * Returns the script portion of the locale, or the empty string if none.
    */
   String getScriptNotNull();
-  
+
   /**
-   * @return the variant portion of the locale, or null if none.
+   * Returns the variant portion of the locale, or null if none.
    */
   String getVariant();
-  
+
   /**
-   * @return the variant portion of the locale, or the empty string if none.
+   * Returns the variant portion of the locale, or the empty string if none.
    */
   String getVariantNotNull();
 
   /**
-   * Return true if this locale inherits from the specified locale.  Note that
+   * Returns true if this locale inherits from the specified locale.  Note that
    * locale.inheritsFrom(locale) is false -- if you want that to be true, you
    * should just use locale.getInheritanceChain().contains(x).
-   * 
+   *
    * @param parent locale to test against
    * @return true if parent is an ancestor of this locale
    */
   boolean inheritsFrom(GwtLocale parent);
 
   /**
-   * @return true if this is the default or root locale.
+   * Returns true if this is the default or root locale.
    */
   boolean isDefault();
 
   /**
-   * @return a human readable string -- "default" or the same as getAsString().
+   * Returns a human readable string -- "default" or the same as getAsString().
    */
   String toString();
 
   /**
    * Checks if this locale uses the same script as another locale.
-   * 
+   *
    * @param other
    * @return true if the scripts are the same
    */
diff --git a/user/src/com/google/gwt/i18n/shared/GwtLocaleFactory.java b/user/src/com/google/gwt/i18n/shared/GwtLocaleFactory.java
index dc5a47e..1a767a2 100644
--- a/user/src/com/google/gwt/i18n/shared/GwtLocaleFactory.java
+++ b/user/src/com/google/gwt/i18n/shared/GwtLocaleFactory.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -22,9 +22,9 @@
 
   /**
    * Construct a GWT locale from its component parts.
-   * 
+   *
    * Null or empty strings are accepted for parts not present.
-   * 
+   *
    * @param language
    * @param script
    * @param region
@@ -41,16 +41,16 @@
    * also private-use tags are only supported for the entire tag).
    * Only minimal validation of BCP47 tags is performed, and will continue
    * with what it is able to parse if unexpected input is encountered.
-   * 
+   *
    * A null or empty string is treated as the default locale.
-   * 
+   *
    * @param localeName
    * @return a locale instance, always the same one for a given localeName
    */
   GwtLocale fromString(String localeName);
-  
+
   /**
-   * @return an instance of the default locale.
+   * Returns an instance of the default locale.
    */
   GwtLocale getDefault();
 }
diff --git a/user/src/com/google/gwt/i18n/shared/HasDirectionEstimator.java b/user/src/com/google/gwt/i18n/shared/HasDirectionEstimator.java
index 15181b4..661a0b8 100644
--- a/user/src/com/google/gwt/i18n/shared/HasDirectionEstimator.java
+++ b/user/src/com/google/gwt/i18n/shared/HasDirectionEstimator.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,22 +21,22 @@
 public interface HasDirectionEstimator {
 
   /**
-   * @return the {@code DirectionEstimator} object.
+   * Returns the {@code DirectionEstimator} object.
    */
   DirectionEstimator getDirectionEstimator();
 
   /**
    * Toggles on / off direction estimation.
-   * 
+   *
    * @param enabled Whether to enable direction estimation. If {@code true},
    *          sets the {@link DirectionEstimator} object to a default
    *          {@code DirectionEstimator}.
    */
   void setDirectionEstimator(boolean enabled);
-  
+
   /**
    * Sets the {@link DirectionEstimator} object.
-   * 
+   *
    * @param directionEstimator The {code DirectionEstimator} to be set. {@code
    *        null} means turning off direction estimation.
    */
diff --git a/user/src/com/google/gwt/jsonp/client/JsonpRequest.java b/user/src/com/google/gwt/jsonp/client/JsonpRequest.java
index c199339..54ca127 100644
--- a/user/src/com/google/gwt/jsonp/client/JsonpRequest.java
+++ b/user/src/com/google/gwt/jsonp/client/JsonpRequest.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -26,7 +26,7 @@
 
 /**
  * A JSONP request that is waiting for a response. The request can be canceled.
- * 
+ *
  * @param <T> the type of the response object.
  */
 public class JsonpRequest<T> {
@@ -42,22 +42,22 @@
    */
   private static final String CALLBACKS_NAME = "__gwt_jsonp__";
   private static final JavaScriptObject CALLBACKS = getOrCreateCallbacksObject();
-  
+
   /**
-   * @return the next ID to use, incrementing the global counter.
+   * Returns the next ID to use, incrementing the global counter.
    */
   private static native int getAndIncrementCallbackCounter() /*-{
     var name = @com.google.gwt.jsonp.client.JsonpRequest::CALLBACKS_NAME;
     var ctr = @com.google.gwt.jsonp.client.JsonpRequest::CALLBACKS_COUNTER_NAME;
     return $wnd[name][ctr]++;
   }-*/;
-  
+
   private static Node getHeadElement() {
     return Document.get().getElementsByTagName("head").getItem(0);
   }
-  
+
   /**
-   * @return a global object to store callbacks of pending requests, creating
+   * Returns a global object to store callbacks of pending requests, creating
    * it if it doesn't exist.
    */
   private static native JavaScriptObject getOrCreateCallbacksObject() /*-{
@@ -98,7 +98,7 @@
 
   /**
    * Create a new JSONP request.
-   * 
+   *
    * @param callback The callback instance to notify when the response comes
    *          back
    * @param timeout Time in ms after which a {@link TimeoutException} will be
@@ -147,7 +147,7 @@
 
   /**
    * Sends a request using the JSONP mechanism.
-   * 
+   *
    * @param baseUri To be sent to the server.
    */
   void send(final String baseUri) {
@@ -155,7 +155,7 @@
     StringBuffer uri = new StringBuffer(baseUri);
     uri.append(baseUri.contains("?") ? "&" : "?");
     String prefix = CALLBACKS_NAME + "." + callbackId;
-    
+
     uri.append(callbackParam).append("=").append(prefix).append(
         ".onSuccess");
     if (failureCallbackParam != null) {
@@ -209,7 +209,7 @@
    * Registers the callback methods that will be called when the JSONP response
    * comes back. 2 callbacks are created, one to return the value, and one to
    * notify a failure.
-   * 
+   *
    * @param callbacks the global JS object which stores callbacks
    */
   private native void registerCallbacks(JavaScriptObject callbacks) /*-{
diff --git a/user/src/com/google/gwt/jsonp/client/JsonpRequestBuilder.java b/user/src/com/google/gwt/jsonp/client/JsonpRequestBuilder.java
index e5a376d..9fe9b86 100644
--- a/user/src/com/google/gwt/jsonp/client/JsonpRequestBuilder.java
+++ b/user/src/com/google/gwt/jsonp/client/JsonpRequestBuilder.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -106,23 +106,23 @@
   private String failureCallbackParam = null;
 
   /**
-   * @return the name of the callback url parameter to send to the server. The default value is
-   *     "callback".
+   * Returns the name of the callback url parameter to send to the server. The
+   * default value is "callback".
    */
   public String getCallbackParam() {
     return callbackParam;
   }
 
   /**
-   * @return the name of the failure callback url parameter to send to the server. The default is
-   *     null.
+   * Returns the name of the failure callback url parameter to send to the
+   * server. The default is null.
    */
   public String getFailureCallbackParam() {
     return failureCallbackParam;
   }
 
   /**
-   * @return the expected timeout (ms) for this request.
+   * Returns the expected timeout (ms) for this request.
    */
   public int getTimeout() {
     return timeout;
diff --git a/user/src/com/google/gwt/junit/GWTDummyBridge.java b/user/src/com/google/gwt/junit/GWTDummyBridge.java
index f062e22..f3adda7 100644
--- a/user/src/com/google/gwt/junit/GWTDummyBridge.java
+++ b/user/src/com/google/gwt/junit/GWTDummyBridge.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -23,22 +23,22 @@
 
 /**
  * A dummy implementation of {@link GWTBridge}, which instantiates nothing.
- * 
+ *
  * @see GWTMockUtilities
  */
 class GWTDummyBridge extends GWTBridge {
   private static final Logger logger = Logger.getLogger(GWTDummyBridge.class.getName());
 
   /**
-   * @return null
+   * Returns null.
    */
   @Override
   public <T> T create(Class<?> classLiteral) {
     return null;
   }
-      
+
   /**
-   * @return the current version of GWT ({@link About#getGwtVersionNum()})
+   * Returns the current version of GWT ({@link About#getGwtVersionNum()}).
    */
   @Override
   public String getVersion() {
@@ -46,7 +46,7 @@
   }
 
   /**
-   * @return false
+   * Returns false.
    */
   @Override
   public boolean isClient() {
diff --git a/user/src/com/google/gwt/junit/client/GWTTestCase.java b/user/src/com/google/gwt/junit/client/GWTTestCase.java
index b87324c..a2e254b 100644
--- a/user/src/com/google/gwt/junit/client/GWTTestCase.java
+++ b/user/src/com/google/gwt/junit/client/GWTTestCase.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -35,7 +35,7 @@
  * hook the run method and stash the TestResult object for later communication
  * between the test runner and the unit test shell that drives the test case
  * inside a hosted browser.
- * 
+ *
  * <p>
  * There are two versions of this class. This version is the binary version that
  * derives from JUnit's {@link TestCase} and handles all the work of starting up
@@ -72,7 +72,7 @@
     private String moduleName;
     private String syntheticModuleName;
     private Strategy strategy;
-    
+
     /**
      * The ordered tests in this synthetic module.
      */
@@ -80,7 +80,7 @@
 
     /**
      * Construct a new {@link TestModuleInfo}.
-     * 
+     *
      * @param moduleName the module name
      * @param syntheticModuleName the synthetic module name
      * @param strategy the test {@link Strategy}
@@ -105,7 +105,7 @@
     }
 
     /**
-     * @return the tests that are part of this module
+     * Returns the tests that are part of this module.
      */
     public Set<TestInfo> getTests() {
       return tests;
@@ -126,7 +126,7 @@
 
   /**
    * Get the names of all test modules.
-   * 
+   *
    * @return all test module names
    */
   public static String[] getAllTestModuleNames() {
@@ -137,7 +137,7 @@
 
   /**
    * Get the number of modules.
-   * 
+   *
    * @return the module count.
    */
   public static int getModuleCount() {
@@ -145,10 +145,10 @@
       return ALL_GWT_TESTS.size();
     }
   }
-  
+
   /**
    * Get the set of all {@link TestInfo} for the specified module.
-   * 
+   *
    * @param syntheticModuleName the synthetic module name
    * @return all tests for the module
    */
@@ -196,7 +196,7 @@
    * checkpoint messages will be appended to the getException description. This
    * can be useful in web mode for determining how far test execution progressed
    * before a failure occurs.
-   * 
+   *
    * @param msg the checkpoint message to add
    * @deprecated This method will be removed when web mode supports stack
    *             traces. It can be useful for debugging web mode failures, but
@@ -213,7 +213,7 @@
    * escape to the browser. This will break the normal JUnit reporting
    * functionality, but can be useful in web mode with a JavaScript debugger to
    * pin down where exceptions are originating.
-   * 
+   *
    * @return <code>true</code> for normal JUnit behavior, or
    *         <code>false</code> to disable normal JUnit getException reporting
    */
@@ -223,7 +223,7 @@
 
   /**
    * Clears the accumulated list of checkpoint messages.
-   * 
+   *
    * @see #addCheckpoint(String)
    * @deprecated This method will be removed if and when web mode supports stack
    *             traces. It can be useful for debugging web mode failures, but
@@ -236,7 +236,7 @@
 
   /**
    * Returns the current set of checkpoint messages.
-   * 
+   *
    * @return a non-<code>null</code> array of checkpoint messages
    * @see #addCheckpoint(String)
    * @deprecated This method will be removed if and when web mode supports stack
@@ -253,7 +253,7 @@
    * Specifies a module to use when running this test case. Subclasses must
    * return the name of a module that will cause the source for that subclass to
    * be included.
-   * 
+   *
    * @return the fully qualified name of a module, or <code>null</code> to run
    *         as a pure Java (non-GWT) test case (same effect as passing
    *         <code>true</code> to {@link #setForcePureJava})
@@ -264,7 +264,7 @@
 
   /**
    * Get the {@link Strategy} to use when compiling and running this test.
-   *  
+   *
    * @return the test {@link Strategy}
    */
   public Strategy getStrategy() {
@@ -277,7 +277,7 @@
   /**
    * Get the synthetic module name, which includes the synthetic extension
    * defined by the {@link Strategy}.
-   * 
+   *
    * @return the synthetic module name, or <code>null</code> if this test case
    *         is run in pure Java mode (non-GWT)
    *
@@ -360,7 +360,7 @@
    * normally, this test will not immediately succeed. Instead, a <i>delay
    * period</i> begins. During the delay period, the test system will wait for
    * one of three things to happen:
-   * 
+   *
    * <ol>
    * <li> If {@link #finishTest()} is called before the delay period expires,
    * the test will succeed.</li>
@@ -369,20 +369,20 @@
    * <li> If the delay period expires and neither of the above has happened, the
    * test will error with a {@link TimeoutException}. </li>
    * </ol>
-   * 
+   *
    * <p>
    * This method is typically used to test event driven functionality.
    * </p>
-   * 
+   *
    * <p>
    * <b>Example:</b>
    * {@example com.google.gwt.examples.AsyncJUnitExample#testTimer()}
    * </p>
-   * 
+   *
    * @param timeoutMillis how long to wait before the current test will time out
    * @tip Subsequent calls to this method reset the timeout.
    * @see #finishTest()
-   * 
+   *
    * @throws UnsupportedOperationException if {@link #supportsAsync()} is false
    */
   protected final void delayTestFinish(int timeoutMillis) {
@@ -394,21 +394,21 @@
    * {@link #delayTestFinish(int)}, call this method during the delay period to
    * cause this test to succeed. This method is typically called from an event
    * handler some time after the test method returns control to the caller.
-   * 
+   *
    * <p>
    * Calling this method before the test method completes, will undo the effect
    * of having called <code>delayTestFinish()</code>. The test will revert to
    * normal, non-asynchronous mode.
    * </p>
-   * 
+   *
    * <p>
    * <b>Example:</b>
    * {@example com.google.gwt.examples.AsyncJUnitExample#testTimer()}
    * </p>
-   * 
+   *
    * @throws IllegalStateException if this test is not in asynchronous mode
    * @throws UnsupportedOperationException if {@link #supportsAsync()} is false
-   * 
+   *
    * @see #delayTestFinish(int)
    */
   protected final void finishTest() {
diff --git a/user/src/com/google/gwt/place/shared/Place.java b/user/src/com/google/gwt/place/shared/Place.java
index cd1af45..9b2a462 100644
--- a/user/src/com/google/gwt/place/shared/Place.java
+++ b/user/src/com/google/gwt/place/shared/Place.java
@@ -16,11 +16,6 @@
 package com.google.gwt.place.shared;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Represents a bookmarkable location in an app. Implementations are expected to
  * provide correct {@link Object#equals(Object)} and {@link Object#hashCode()}
  * methods.
diff --git a/user/src/com/google/gwt/place/shared/PlaceChangeEvent.java b/user/src/com/google/gwt/place/shared/PlaceChangeEvent.java
index 5a4a081..b3aa594 100644
--- a/user/src/com/google/gwt/place/shared/PlaceChangeEvent.java
+++ b/user/src/com/google/gwt/place/shared/PlaceChangeEvent.java
@@ -19,11 +19,6 @@
 import com.google.gwt.event.shared.GwtEvent;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Event thrown when the user has reached a new location in the app.
  */
 public class PlaceChangeEvent extends GwtEvent<PlaceChangeEvent.Handler> {
diff --git a/user/src/com/google/gwt/place/shared/PlaceChangeRequestEvent.java b/user/src/com/google/gwt/place/shared/PlaceChangeRequestEvent.java
index fff23d1..35d63e4 100644
--- a/user/src/com/google/gwt/place/shared/PlaceChangeRequestEvent.java
+++ b/user/src/com/google/gwt/place/shared/PlaceChangeRequestEvent.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -19,11 +19,6 @@
 import com.google.gwt.event.shared.GwtEvent;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Event thrown when the user may go to a new place in the app, or tries to
  * leave it. Receivers can call {@link #setWarning(String)} request that the
  * user be prompted to confirm the change.
@@ -54,15 +49,15 @@
   }
 
   /**
-   * @return the place we may navigate to, or null on window close
+   * Returns the place we may navigate to, or null on window close.
    */
   public Place getNewPlace() {
     return newPlace;
   }
 
   /**
-   * @return the warning message to show the user before allowing the place
-   *         change, or null if none has been set
+   * Returns the warning message to show the user before allowing the place
+   * change, or null if none has been set.
    */
   public String getWarning() {
     return warning;
diff --git a/user/src/com/google/gwt/place/shared/PlaceController.java b/user/src/com/google/gwt/place/shared/PlaceController.java
index a28a5d0..4a7e497 100644
--- a/user/src/com/google/gwt/place/shared/PlaceController.java
+++ b/user/src/com/google/gwt/place/shared/PlaceController.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -25,11 +25,6 @@
 import java.util.logging.Logger;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * In charge of the user's location in the app.
  */
 public class PlaceController {
@@ -91,7 +86,7 @@
   }
 
   /**
-   * @return the current place
+   * Returns the current place.
    */
   public Place getWhere() {
     return where;
diff --git a/user/src/com/google/gwt/place/shared/PlaceHistoryMapper.java b/user/src/com/google/gwt/place/shared/PlaceHistoryMapper.java
index d170761..145b92e 100644
--- a/user/src/com/google/gwt/place/shared/PlaceHistoryMapper.java
+++ b/user/src/com/google/gwt/place/shared/PlaceHistoryMapper.java
@@ -16,11 +16,6 @@
 package com.google.gwt.place.shared;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Maps {@link Place}s to/from tokens, used to configure a
  * {@link PlaceHistoryHandler}.
  */
diff --git a/user/src/com/google/gwt/regexp/shared/MatchResult.java b/user/src/com/google/gwt/regexp/shared/MatchResult.java
index a74a98ee..4f651aa 100644
--- a/user/src/com/google/gwt/regexp/shared/MatchResult.java
+++ b/user/src/com/google/gwt/regexp/shared/MatchResult.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -35,7 +35,7 @@
 
   /**
    * Retrieves the matched string or the given matched group.
-   * 
+   *
    * @param index the index of the group to return, 0 to return the whole
    *        matched string; must be between 0 and {@code getGroupCount() - 1}
    *        included
@@ -49,22 +49,22 @@
   }
 
   /**
-   * @return The number of groups, including the matched string hence greater or
-   *         equal than 1.
+   * Returns the number of groups, including the matched string hence greater or
+   * equal than 1.
    */
   public int getGroupCount() {
     return groups.size();
   }
 
   /**
-   * @return The zero-based index of the match in the input string.
+   * Returns the zero-based index of the match in the input string.
    */
   public int getIndex() {
     return index;
   }
 
   /**
-   * @return The original input string.
+   * Returns the original input string.
    */
   public String getInput() {
     return input;
diff --git a/user/src/com/google/gwt/regexp/shared/RegExp.java b/user/src/com/google/gwt/regexp/shared/RegExp.java
index 7b29158..82e10fe 100644
--- a/user/src/com/google/gwt/regexp/shared/RegExp.java
+++ b/user/src/com/google/gwt/regexp/shared/RegExp.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -37,7 +37,7 @@
  * implementation, not the pure Java implementation, which rejects them.
  */
 public class RegExp {
-  
+
   // In JS syntax, a \ in the replacement string has no special meaning.
   // In Java syntax, a \ in the replacement string escapes the next character,
   // so we have to translate \ to \\ before passing it to Java.
@@ -78,7 +78,7 @@
 
   /**
    * Creates a regular expression object from a pattern with no flags.
-   * 
+   *
    * @param pattern the Javascript regular expression pattern to compile
    * @return a new regular expression
    * @throws RuntimeException if the pattern is invalid
@@ -86,10 +86,10 @@
   public static RegExp compile(String pattern) {
     return compile(pattern, "");
   }
-  
+
   /**
    * Creates a regular expression object from a pattern using the given flags.
-   * 
+   *
    * @param pattern the Javascript regular expression pattern to compile
    * @param flags the flags string, containing at most one occurrence of {@code
    *        'g'} ({@link #getGlobal()}), {@code 'i'} ({@link #getIgnoreCase()}),
@@ -125,11 +125,11 @@
 
     return new RegExp(pattern, javaPattern, globalFlag);
   }
-  
+
   /**
    * Parses a flags string as a set of characters. Does not reject unknown
    * flags.
-   * 
+   *
    * @param flags the flag string to parse
    * @return a set of flags
    * @throws IllegalArgumentException if a flag is duplicated
@@ -145,7 +145,7 @@
     }
     return flagsSet;
   }
-  
+
   private final boolean globalFlag;
 
   private int lastIndex;
@@ -164,7 +164,7 @@
   /**
    * Applies the regular expression to the given string. This call affects the
    * value returned by {@link #getLastIndex()} if the global flag is set.
-   * 
+   *
    * @param input the string to apply the regular expression to
    * @return a match result if the string matches, else {@code null}
    */
@@ -209,26 +209,26 @@
   }
 
   /**
-   * @return Whether the regular expression captures all occurrences of the
-   *         pattern.
+   * Returns whether the regular expression captures all occurrences of the
+   * pattern.
    */
   public boolean getGlobal() {
     return globalFlag;
   }
 
   /**
-   * @return Whether the regular expression ignores case.
+   * Returns whether the regular expression ignores case.
    */
   public boolean getIgnoreCase() {
     return (pattern.flags() & Pattern.CASE_INSENSITIVE) != 0;
   }
 
   /**
-   * @return The zero-based position at which to start the next match. The
-   *         return value is not defined if the global flag is not set. After a
-   *         call to {@link #exec} or {@link #test}, this method returns the
-   *         next position following the most recent match.
-   * 
+   * Returns the zero-based position at which to start the next match. The
+   * return value is not defined if the global flag is not set. After a call
+   * to {@link #exec(String)} or {@link #test(String)}, this method returns
+   * the next position following the most recent match.
+   *
    * @see #getGlobal()
    */
   public int getLastIndex() {
@@ -236,15 +236,15 @@
   }
 
   /**
-   * @return Whether '$' and '^' match line returns ('\n' and '\r') in addition
-   *         to the beginning or end of the string.
+   * Returns whether '$' and '^' match line returns ('\n' and '\r') in addition
+   * to the beginning or end of the string.
    */
   public boolean getMultiline() {
     return (pattern.flags() & Pattern.MULTILINE) != 0;
   }
 
   /**
-   * @return The pattern string of the regular expression.
+   * Returns the pattern string of the regular expression.
    */
   public String getSource() {
     return source;
@@ -265,7 +265,7 @@
    * </ul>
    * Note: $` and $' are *not* supported in the pure Java implementation, and
    * throw an exception.
-   * 
+   *
    * @param input the string in which the regular expression is to be searched.
    * @param replacement the replacement string.
    * @return the input string with the regular expression replaced by the
@@ -309,7 +309,7 @@
    * regular expression is completely empty, splits the input string into its
    * constituent characters. If the regular expression is not empty but matches
    * an empty string, the results are not well defined.
-   * 
+   *
    * @param input the string to be split.
    * @return the strings split off, any of which may be empty.
    */
@@ -322,11 +322,11 @@
    * regular expression is completely empty, splits the input string into its
    * constituent characters. If the regular expression is not empty but matches
    * an empty string, the results are not well defined.
-   * 
-   * Note: There are some browser inconsistencies with this implementation, as 
+   *
+   * Note: There are some browser inconsistencies with this implementation, as
    * it is delegated to the browser, and no browser follows the spec completely.
    * A major difference is that IE will exclude empty strings in the result.
-   * 
+   *
    * @param input the string to be split.
    * @param limit the the maximum number of strings to split off and return,
    *        ignoring the rest of the input string. If negative, there is no
@@ -365,7 +365,7 @@
    * Determines if the regular expression matches the given string. This call
    * affects the value returned by {@link #getLastIndex()} if the global flag is
    * set. Equivalent to: {@code exec(input) != null}
-   * 
+   *
    * @param input the string to apply the regular expression to
    * @return whether the regular expression matches the given string.
    */
diff --git a/user/src/com/google/gwt/regexp/shared/SplitResult.java b/user/src/com/google/gwt/regexp/shared/SplitResult.java
index 66e3e36..5a8f694 100644
--- a/user/src/com/google/gwt/regexp/shared/SplitResult.java
+++ b/user/src/com/google/gwt/regexp/shared/SplitResult.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -28,7 +28,7 @@
 
   /**
    * Returns one the strings split off.
-   * 
+   *
    * @param index the index of the string to be returned.
    * @return The index'th string resulting from the split.
    */
@@ -37,7 +37,7 @@
   }
 
   /**
-   * @return The number of strings split off.
+   * Returns the number of strings split off.
    */
   public int length() {
     return result.length;
@@ -45,7 +45,7 @@
 
   /**
    * Sets (overrides) one of the strings split off.
-   * 
+   *
    * @param index the index of the string to be set.
    */
   public void set(int index, String value) {
diff --git a/user/src/com/google/gwt/regexp/super/com/google/gwt/regexp/shared/MatchResult.java b/user/src/com/google/gwt/regexp/super/com/google/gwt/regexp/shared/MatchResult.java
index 89b03d1..a4ef2b9 100644
--- a/user/src/com/google/gwt/regexp/super/com/google/gwt/regexp/shared/MatchResult.java
+++ b/user/src/com/google/gwt/regexp/super/com/google/gwt/regexp/shared/MatchResult.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -27,7 +27,7 @@
 
   /**
    * Retrieves the matched string or the given matched group.
-   * 
+   *
    * @param index the index of the group to return, 0 to return the whole
    *          matched string; must be between 0 and {@code getGroupCount() - 1}
    *          included
@@ -41,22 +41,22 @@
    }-*/;
 
   /**
-   * @return The number of groups, including the matched string hence greater or
-   *         equal than 1.
+   * Returns the number of groups, including the matched string hence greater or
+   * equal than 1.
    */
   public final native int getGroupCount() /*-{
      return this.length;
    }-*/;
-  
-  /** 
-   * @return The zero-based index of the match in the input string.
+
+  /**
+   * Returns the zero-based index of the match in the input string.
    */
   public final native int getIndex() /*-{
      return this.index;
    }-*/;
 
   /**
-   * @return The original input string.
+   * Returns the original input string.
    */
   public final native String getInput() /*-{
      return this.input;
diff --git a/user/src/com/google/gwt/regexp/super/com/google/gwt/regexp/shared/RegExp.java b/user/src/com/google/gwt/regexp/super/com/google/gwt/regexp/shared/RegExp.java
index 8307ba8..5c41859 100644
--- a/user/src/com/google/gwt/regexp/super/com/google/gwt/regexp/shared/RegExp.java
+++ b/user/src/com/google/gwt/regexp/super/com/google/gwt/regexp/shared/RegExp.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -25,7 +25,7 @@
 
   /**
    * Creates a regular expression object from a pattern with no flags.
-   * 
+   *
    * @param pattern the Javascript regular expression pattern to compile
    * @return a new regular expression
    * @throws RuntimeException if the pattern is invalid
@@ -36,7 +36,7 @@
 
   /**
    * Creates a regular expression object from a pattern with no flags.
-   * 
+   *
    * @param pattern the Javascript regular expression pattern to compile
    * @param flags the flags string, containing at most one occurence of {@code
    *          'g'} ({@link #getGlobal()}), {@code 'i'} ({@link #getIgnoreCase()}
@@ -54,7 +54,7 @@
   /**
    * Applies the regular expression to the given string. This call affects the
    * value returned by {@link #getLastIndex()} if the global flag is set.
-   * 
+   *
    * @param input the string to apply the regular expression to
    * @return a match result if the string matches, else {@code null}
    */
@@ -63,26 +63,26 @@
    }-*/;
 
   /**
-   * @return Whether the regular expression captures all occurences of the
-   *         pattern.
+   * Returns whether the regular expression captures all occurences of the
+   * pattern.
    */
   public final native boolean getGlobal() /*-{
     return this.global;
   }-*/;
 
   /**
-   * @return Whether the regular expression ignores case.
+   * Returns whether the regular expression ignores case.
    */
   public final native boolean getIgnoreCase() /*-{
     return this.ignoreCase;
   }-*/;
 
   /**
-   * @return The zero-based position at which to start the next match. The
-   *         return value is not defined if the global flag is not set. After a
-   *         call to {@link #exec} or {@link #test}, this method returns the
-   *         next position following the most recent match.
-   * 
+   * Returns the zero-based position at which to start the next match. The
+   * return value is not defined if the global flag is not set. After a call
+   * to {@link #exec(String)} or {@link #test(String)}, this method returns
+   * the next position following the most recent match.
+   *
    * @see #getGlobal()
    */
   public final native int getLastIndex() /*-{
@@ -90,15 +90,15 @@
    }-*/;
 
   /**
-   * @return Whether '$' and '^' match line returns ('\n' and '\r') in addition
-   *         to the beginning or end of the string.
+   * Returns whether '$' and '^' match line returns ('\n' and '\r') in addition
+   * to the beginning or end of the string.
    */
   public final native boolean getMultiline() /*-{
     return this.multiline;
   }-*/;
 
   /**
-   * @return The pattern string of the regular expression.
+   * Returns the pattern string of the regular expression.
    */
   public final native String getSource() /*-{
      return this.source;
@@ -117,12 +117,12 @@
    * <li>$&amp; - inserts the entire string matched by the regular expression.
    * <li>$$ - inserts a $.
    * </ul>
-   * 
+   *
    * @param input the string in which the regular expression is to be searched.
    * @param replacement the replacement string.
    * @return the input string with the regular expression replaced with the
    *         replacement string.
-   * @throws RuntimeException if {@code replacement} is invalid        
+   * @throws RuntimeException if {@code replacement} is invalid
    */
   public final native String replace(String input, String replacement) /*-{
      return input.replace(this, replacement);
@@ -140,9 +140,9 @@
    * regular expression is completely empty, splits the input string into its
    * constituent characters. If the regular expression is not empty but matches
    * an empty string, the results are not well defined.
-   * 
+   *
    * @param input the string to be split.
-   * 
+   *
    * @return the strings split off, any of which may be empty.
    */
   public final native SplitResult split(String input) /*-{
@@ -154,12 +154,12 @@
    * regular expression is completely empty, splits the input string into its
    * constituent characters. If the regular expression is not empty but matches
    * an empty string, the results are not well defined.
-   * 
+   *
    * @param input the string to be split.
    * @param limit the the maximum number of strings to split off and return,
    *          ignoring the rest of the input string. If negative, there is no
    *          limit.
-   * 
+   *
    * @return the strings split off, any of which may be empty.
    */
   public final native SplitResult split(String input, int limit) /*-{
@@ -170,7 +170,7 @@
    * Determines if the regular expression matches the given string. This call
    * affects the value returned by {@link #getLastIndex()} if the global flag is
    * not set. Equivalent to: {@code exec(input) != null}
-   * 
+   *
    * @param input the string to apply the regular expression to
    * @return whether the regular expression matches the given string.
    */
@@ -178,4 +178,3 @@
      return this.test(input);
    }-*/;
 }
-
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java
index f5f3c1a..66ec958 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractRequest.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -48,7 +48,7 @@
  * </p>
  * Abstract implementation of {@link Request}. Each request stores a
  * {@link DeltaValueStoreJsonImpl}.
- * 
+ *
  * @param <T> return type
  */
 public abstract class AbstractRequest<T> implements Request<T>,
@@ -76,7 +76,7 @@
   }
 
   /**
-   * @return the properties
+   * Returns the properties.
    */
   public Set<String> getPropertyRefs() {
     return Collections.unmodifiableSet(propertyRefs);
diff --git a/user/src/com/google/gwt/requestfactory/rebind/model/RequestFactoryModel.java b/user/src/com/google/gwt/requestfactory/rebind/model/RequestFactoryModel.java
index 3ecc1f5..3803b1f 100644
--- a/user/src/com/google/gwt/requestfactory/rebind/model/RequestFactoryModel.java
+++ b/user/src/com/google/gwt/requestfactory/rebind/model/RequestFactoryModel.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -128,7 +128,7 @@
       die(poisonedMessage());
     }
   }
-  
+
   public Collection<EntityProxyModel> getAllProxyModels() {
     return Collections.unmodifiableCollection(peers.values());
   }
@@ -194,7 +194,7 @@
   }
 
   /**
-   * Return a list of public methods that match the given methodName.
+   * Returns a list of public methods that match the given methodName.
    */
   private List<Method> findMethods(Class<?> domainType, String methodName) {
     List<Method> toReturn = new ArrayList<Method>();
@@ -327,7 +327,6 @@
       return false;
     }
 
-
     if (instanceRequestInterface.isAssignableFrom(requestReturnType)) {
       if (isStatic(domainMethod)) {
         poison("Method %s.%s is an instance method, "
diff --git a/user/src/com/google/gwt/requestfactory/server/DefaultSecurityProvider.java b/user/src/com/google/gwt/requestfactory/server/DefaultSecurityProvider.java
index 72b1ed2..7b60641 100644
--- a/user/src/com/google/gwt/requestfactory/server/DefaultSecurityProvider.java
+++ b/user/src/com/google/gwt/requestfactory/server/DefaultSecurityProvider.java
@@ -18,13 +18,8 @@
 import com.google.gwt.requestfactory.shared.Service;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
- * A security provider that enforces {@link com.google.gwt.requestfactory.shared.Service}
- * annotations.
+ * A security provider that enforces
+ * {@link com.google.gwt.requestfactory.shared.Service} annotations.
  */
 public class DefaultSecurityProvider implements RequestSecurityProvider {
 
diff --git a/user/src/com/google/gwt/requestfactory/server/OperationRegistry.java b/user/src/com/google/gwt/requestfactory/server/OperationRegistry.java
index 06c7675..c769ee0 100644
--- a/user/src/com/google/gwt/requestfactory/server/OperationRegistry.java
+++ b/user/src/com/google/gwt/requestfactory/server/OperationRegistry.java
@@ -16,11 +16,6 @@
 package com.google.gwt.requestfactory.server;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Maps operation name to {RequestDefinition}.
  */
 public interface OperationRegistry {
diff --git a/user/src/com/google/gwt/requestfactory/server/ReflectionBasedOperationRegistry.java b/user/src/com/google/gwt/requestfactory/server/ReflectionBasedOperationRegistry.java
index 3720195..b2c89bf 100644
--- a/user/src/com/google/gwt/requestfactory/server/ReflectionBasedOperationRegistry.java
+++ b/user/src/com/google/gwt/requestfactory/server/ReflectionBasedOperationRegistry.java
@@ -29,11 +29,6 @@
 import java.util.Set;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * OperationRegistry which uses the operation name as a convention for
  * reflection to a method on a class, and returns an appropriate {@link
  * com.google.gwt.requestfactory.server.RequestDefinition}.
diff --git a/user/src/com/google/gwt/requestfactory/server/RequestDefinition.java b/user/src/com/google/gwt/requestfactory/server/RequestDefinition.java
index 9d5223b..1e0db57 100644
--- a/user/src/com/google/gwt/requestfactory/server/RequestDefinition.java
+++ b/user/src/com/google/gwt/requestfactory/server/RequestDefinition.java
@@ -19,11 +19,6 @@
 import java.lang.reflect.Type;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Implemented by enums that define the mapping between request objects and
  * service methods.
  */
diff --git a/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java b/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
index cdf9ef3..1f8eb6b 100644
--- a/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
+++ b/user/src/com/google/gwt/requestfactory/server/RequestFactoryServlet.java
@@ -29,11 +29,6 @@
 import javax.servlet.http.HttpServletResponse;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Handles GWT RequestFactory JSON requests. Does user authentication on every
  * request, returning SC_UNAUTHORIZED if authentication fails, as well as a
  * header named "login" which contains the URL the user should be sent in to
diff --git a/user/src/com/google/gwt/requestfactory/server/RequestProperty.java b/user/src/com/google/gwt/requestfactory/server/RequestProperty.java
index ec183b8..b1aeb0c 100644
--- a/user/src/com/google/gwt/requestfactory/server/RequestProperty.java
+++ b/user/src/com/google/gwt/requestfactory/server/RequestProperty.java
@@ -21,9 +21,7 @@
 import java.util.Map;
 
 /**
- * <p> <span style="color:red">Experimental API: This class is still under rapid development, and is
- * very likely to be deleted. Use it at your own risk. </span> </p> Represents one piece in a
- * property reference sequence.
+ * Represents one piece in a property reference sequence.
  */
 public class RequestProperty implements Iterable<RequestProperty> {
 
diff --git a/user/src/com/google/gwt/requestfactory/server/RequestSecurityProvider.java b/user/src/com/google/gwt/requestfactory/server/RequestSecurityProvider.java
index b16dd02..9a404af 100644
--- a/user/src/com/google/gwt/requestfactory/server/RequestSecurityProvider.java
+++ b/user/src/com/google/gwt/requestfactory/server/RequestSecurityProvider.java
@@ -16,11 +16,6 @@
 package com.google.gwt.requestfactory.server;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Enforces security policy for operations and classes, as well as permitting
  * request obfuscation.
  */
diff --git a/user/src/com/google/gwt/requestfactory/server/SampleDataPopulator.java b/user/src/com/google/gwt/requestfactory/server/SampleDataPopulator.java
index 1162a9d..2ffd72e 100644
--- a/user/src/com/google/gwt/requestfactory/server/SampleDataPopulator.java
+++ b/user/src/com/google/gwt/requestfactory/server/SampleDataPopulator.java
@@ -34,11 +34,6 @@
 import java.io.UnsupportedEncodingException;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Class to populate the datastore with sample data in a JSON file.
  */
 public class SampleDataPopulator {
diff --git a/user/src/com/google/gwt/requestfactory/shared/EntityProxy.java b/user/src/com/google/gwt/requestfactory/shared/EntityProxy.java
index ec92a32..64072ce 100644
--- a/user/src/com/google/gwt/requestfactory/shared/EntityProxy.java
+++ b/user/src/com/google/gwt/requestfactory/shared/EntityProxy.java
@@ -16,11 +16,6 @@
 package com.google.gwt.requestfactory.shared;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * A proxy for a server-side domain object.
  */
 public interface EntityProxy {
diff --git a/user/src/com/google/gwt/requestfactory/shared/EntityProxyChange.java b/user/src/com/google/gwt/requestfactory/shared/EntityProxyChange.java
index 29517cb..3b7abde 100644
--- a/user/src/com/google/gwt/requestfactory/shared/EntityProxyChange.java
+++ b/user/src/com/google/gwt/requestfactory/shared/EntityProxyChange.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,12 +21,8 @@
 import com.google.gwt.event.shared.HandlerRegistration;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
- * Abstract base class for an event announcing changes to a {@link EntityProxy}.
+ * Abstract base class for an event announcing changes to an
+ * {@link EntityProxy}.
  * <p>
  * Note that this event includes an unpopulated copy of the changed proxy
  * &mdash; all properties are undefined except it's id. That is, the event
@@ -34,12 +30,12 @@
  * themselves fresh copies of the proxy.
  * <p>
  * TODO: use ProxyId rather than an empty proxy
- * 
+ *
  * @param <P> the type of the proxy
  */
 public class EntityProxyChange<P extends EntityProxy> extends
     GwtEvent<EntityProxyChange.Handler<P>> {
-  
+
   /**
    * Implemented by methods that handle EntityProxyChange events.
    * @param <P> the proxy type
@@ -81,8 +77,8 @@
   }
 
   /**
-   * @return an unpopulated copy of the changed proxy &mdash; all properties are
-   *         undefined except its id
+   * Returns an unpopulated copy of the changed proxy &mdash; all properties are
+   * undefined except its id.
    */
   @SuppressWarnings("unchecked")
   public EntityProxyId<P> getProxyId() {
diff --git a/user/src/com/google/gwt/requestfactory/shared/Id.java b/user/src/com/google/gwt/requestfactory/shared/Id.java
index cb9db03..6340eff 100644
--- a/user/src/com/google/gwt/requestfactory/shared/Id.java
+++ b/user/src/com/google/gwt/requestfactory/shared/Id.java
@@ -16,11 +16,6 @@
 package com.google.gwt.requestfactory.shared;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Marks the id property of an entity.
  */
 public @interface Id {
diff --git a/user/src/com/google/gwt/requestfactory/shared/ProxyFor.java b/user/src/com/google/gwt/requestfactory/shared/ProxyFor.java
index f118ac8..7a8c747 100644
--- a/user/src/com/google/gwt/requestfactory/shared/ProxyFor.java
+++ b/user/src/com/google/gwt/requestfactory/shared/ProxyFor.java
@@ -21,9 +21,7 @@
 import java.lang.annotation.Target;
 
 /**
- * <p> <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span> </p> Annotation on Record classes specifying 'type'. 'type'
+ * Annotation on Record classes specifying 'type'. 'type'
  * represents the server-side counterpart of the Record.
  */
 @Retention(RetentionPolicy.RUNTIME)
diff --git a/user/src/com/google/gwt/requestfactory/shared/Receiver.java b/user/src/com/google/gwt/requestfactory/shared/Receiver.java
index 8ba90ae..4f28289 100644
--- a/user/src/com/google/gwt/requestfactory/shared/Receiver.java
+++ b/user/src/com/google/gwt/requestfactory/shared/Receiver.java
@@ -18,11 +18,6 @@
 import java.util.Set;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Implemented by objects that display values.
  * 
  * @param <V> value type
diff --git a/user/src/com/google/gwt/requestfactory/shared/Request.java b/user/src/com/google/gwt/requestfactory/shared/Request.java
index a2965d0..4ca7a23 100644
--- a/user/src/com/google/gwt/requestfactory/shared/Request.java
+++ b/user/src/com/google/gwt/requestfactory/shared/Request.java
@@ -16,11 +16,6 @@
 package com.google.gwt.requestfactory.shared;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Implemented by the request objects created by this factory.
  * 
  * @param <T> The return type of objects in the corresponding response.
diff --git a/user/src/com/google/gwt/requestfactory/shared/RequestEvent.java b/user/src/com/google/gwt/requestfactory/shared/RequestEvent.java
index b490984..cd9faf3 100644
--- a/user/src/com/google/gwt/requestfactory/shared/RequestEvent.java
+++ b/user/src/com/google/gwt/requestfactory/shared/RequestEvent.java
@@ -22,11 +22,6 @@
 import com.google.gwt.http.client.Response;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * An event posted whenever an RPC request is sent or its response is received.
  */
 public class RequestEvent extends GwtEvent<RequestEvent.Handler> {
diff --git a/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java b/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
index dce35e2..1b44616 100644
--- a/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
+++ b/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
@@ -18,11 +18,6 @@
 import com.google.gwt.event.shared.EventBus;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Marker interface for the RequestFactory code generator.
  */
 public interface RequestFactory {
diff --git a/user/src/com/google/gwt/requestfactory/shared/Service.java b/user/src/com/google/gwt/requestfactory/shared/Service.java
index 1baddc0..59f2cf5 100644
--- a/user/src/com/google/gwt/requestfactory/shared/Service.java
+++ b/user/src/com/google/gwt/requestfactory/shared/Service.java
@@ -21,11 +21,6 @@
 import java.lang.annotation.Target;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Annotation on Request classes specifying the server side implementations that
  * back them.
  */
diff --git a/user/src/com/google/gwt/requestfactory/shared/Version.java b/user/src/com/google/gwt/requestfactory/shared/Version.java
index a28a139..5e66314 100644
--- a/user/src/com/google/gwt/requestfactory/shared/Version.java
+++ b/user/src/com/google/gwt/requestfactory/shared/Version.java
@@ -16,11 +16,6 @@
 package com.google.gwt.requestfactory.shared;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Marks the version property of an entity.
  */
 public @interface Version {
diff --git a/user/src/com/google/gwt/requestfactory/shared/Violation.java b/user/src/com/google/gwt/requestfactory/shared/Violation.java
index 45b96d5..2119c24 100644
--- a/user/src/com/google/gwt/requestfactory/shared/Violation.java
+++ b/user/src/com/google/gwt/requestfactory/shared/Violation.java
@@ -16,12 +16,8 @@
 package com.google.gwt.requestfactory.shared;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
- * A lightweight representation of a ConstraintViolation.
+ * A lightweight representation of a
+ * {@link javax.validation.ConstraintViolation}.
  */
 public interface Violation {
   String getMessage();
diff --git a/user/src/com/google/gwt/requestfactory/shared/WriteOperation.java b/user/src/com/google/gwt/requestfactory/shared/WriteOperation.java
index 71d71fd..34ff6fb 100644
--- a/user/src/com/google/gwt/requestfactory/shared/WriteOperation.java
+++ b/user/src/com/google/gwt/requestfactory/shared/WriteOperation.java
@@ -16,11 +16,6 @@
 package com.google.gwt.requestfactory.shared;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * The enum used in {@link EntityProxyChange}.
  * <ul>
  * <li>A PERSIST event is fired after a proxy that was created on the client has
diff --git a/user/src/com/google/gwt/requestfactory/shared/impl/Property.java b/user/src/com/google/gwt/requestfactory/shared/impl/Property.java
index e81adf3..06bd8ba 100644
--- a/user/src/com/google/gwt/requestfactory/shared/impl/Property.java
+++ b/user/src/com/google/gwt/requestfactory/shared/impl/Property.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,8 +21,8 @@
  * development, and is very likely to be deleted. Use it at your own risk.
  * </span>
  * </p>
- * Defines a property of a {@link EntityProxy}.
- * 
+ * Defines a property of an {@link EntityProxy}.
+ *
  * @param <V> the type of the property's value
  */
 public class Property<V> {
diff --git a/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java b/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java
index 45cb529..baed540 100644
--- a/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java
+++ b/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -107,7 +107,7 @@
   /**
    * These are type names from previous APIs or from APIs with similar
    * functionality that might be confusing.
-   * 
+   *
    * @see #checkForDeprecatedAnnotations
    */
   private static final String[] DEPRECATED_ANNOTATION_NAMES = {
@@ -149,7 +149,7 @@
    * method is intended to be called by Generators that create ClientBundle
    * instances and need to pass source data to the ClientBundle system that is
    * not accessible through the classpath.
-   * 
+   *
    * @param resourceName the path at which the contents of <code>file</code>
    *          should be made available
    * @param file the File whose contents are to be provided to the ClientBundle
@@ -164,9 +164,9 @@
   }
 
   /**
-   * Return the base filename of a resource. The behavior is similar to the unix
+   * Returns the base filename of a resource. The behavior is similar to the unix
    * command <code>basename</code>.
-   * 
+   *
    * @param resource the URL of the resource
    * @return the final name segment of the resource
    */
@@ -187,7 +187,7 @@
    * Loading through a ClassLoader with this method is much slower than the
    * other <code>findResources</code> methods which make use of the compiler's
    * ResourceOracle.
-   * 
+   *
    * @param logger a TreeLogger that will be used to report errors or warnings
    * @param context the ResourceContext in which the ResourceGenerator is
    *          operating
@@ -227,8 +227,8 @@
    * <p>
    * If the method's return type declares the {@link DefaultExtensions}
    * annotation, the value of this annotation will be used to find matching
-   * resource names if the method lacks an {@link Source} annotation.
-   * 
+   * resource names if the method lacks a {@link Source} annotation.
+   *
    * @param logger a TreeLogger that will be used to report errors or warnings
    * @param context the ResourceContext in which the ResourceGenerator is
    *          operating
@@ -267,7 +267,7 @@
    * will fall back to using the current thread's context ClassLoader. If it is
    * necessary to alter the way in which resources are located, use the overload
    * that accepts a ClassLoader.
-   * 
+   *
    * @param logger a TreeLogger that will be used to report errors or warnings
    * @param context the ResourceContext in which the ResourceGenerator is
    *          operating
@@ -299,13 +299,13 @@
   /**
    * Finds a method by following a dotted path interpreted as a series of no-arg
    * method invocations from an instance of a given root type.
-   * 
+   *
    * @param rootType the type from which the search begins
    * @param pathElements a sequence of no-arg method names
    * @param expectedReturnType the expected return type of the method to locate,
    *          or <code>null</code> if no constraint on the return type is
    *          necessary
-   * 
+   *
    * @return the requested JMethod
    * @throws NotFoundException if the requested method could not be found
    */
@@ -483,7 +483,7 @@
 
   /**
    * Converts a package relative path into an absolute path.
-   * 
+   *
    * @param pkg the package
    * @param path a path relative to the package
    * @return an absolute path
@@ -494,7 +494,7 @@
 
   /**
    * This performs the locale lookup function for a given resource name.
-   * 
+   *
    * @param locator the Locator to use to load the resources
    * @param resourceName the string name of the desired resource
    * @param locale the locale of the current rebind permutation
diff --git a/user/src/com/google/gwt/resources/rebind/context/ClientBundleContext.java b/user/src/com/google/gwt/resources/rebind/context/ClientBundleContext.java
index c151bd2..29fb817 100644
--- a/user/src/com/google/gwt/resources/rebind/context/ClientBundleContext.java
+++ b/user/src/com/google/gwt/resources/rebind/context/ClientBundleContext.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -24,7 +24,7 @@
 public class ClientBundleContext {
   /**
    * A general purpose String to object class which backs the interfaces defined
-   * in @{link ResourceContext}.
+   * in {@link ResourceContext}.
    */
   private final Map<String, Object> cachedData = new HashMap<String, Object>();
 
diff --git a/user/src/com/google/gwt/safehtml/rebind/HtmlTemplateParser.java b/user/src/com/google/gwt/safehtml/rebind/HtmlTemplateParser.java
index 8db7e1e..6329130 100644
--- a/user/src/com/google/gwt/safehtml/rebind/HtmlTemplateParser.java
+++ b/user/src/com/google/gwt/safehtml/rebind/HtmlTemplateParser.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -38,7 +38,7 @@
 
 /**
  * A HTML context-aware parser for a simple HTML template language.
- * 
+ *
  * <p>This parser parses templates consisting of well-formed XML or XHTML
  * markup, with template parameters of the form {@code "{n}"}. For example, a
  * template might look like,
@@ -78,7 +78,7 @@
  * <p>The implementation is subject to the following limitations:
  * <ul>
  *   <li>The input template must be well-formed XML/XHTML. If it is not,
- *       a {@link UnableToCompleteException} is thrown and details regarding
+ *       an {@link UnableToCompleteException} is thrown and details regarding
  *       the source of the parse failure are logged to this parser's logger.
  *   <li>Template parameters can only appear within inner text and within
  *       attributes. In particular, parameters cannot appear within a HTML
@@ -145,11 +145,11 @@
     /*
      * Throw errors on various irrelevant SAX events that we don't want to
      * handle, and which should not occur in templates.
-     * 
+     *
      * It may be reasonable to just silently ignore these events, but failing
      * explicitly seems more helpful to developers.
      */
-    
+
     @Override
     public void notationDecl(String name, String publicId, String systemId)
         throws SAXException {
@@ -220,11 +220,11 @@
 
     /**
      * Returns exception for unsupported event in SafeHtmlTemplates.
-     * 
+     *
      * <p>
      * Returns an exception indicating that the event in question is not
      * supported in SafeHtmlTemplates.
-     * 
+     *
      * @param what unsupported SAX event that should not occur in templates
      * @return exception stating that the event is not allowed
      */
@@ -300,14 +300,14 @@
     } catch (SAXParseException e) {
       String logMessage = "Parse Error during template parsing, at line "
           + e.getLineNumber() + ", column " + e.getColumnNumber();
-      // Attempt to extract (some) of the input to provide a more useful 
+      // Attempt to extract (some) of the input to provide a more useful
       // error message.
       try {
         input.reset();
         char[] buf = new char[200];
         int len = input.read(buf);
         if (len > 0) {
-          logMessage += " of input " + new String(buf, 0, len); 
+          logMessage += " of input " + new String(buf, 0, len);
         }
       } catch (IOException e1) {
         // We tried, but resetting/reading from the input stream failed. Sorry.
diff --git a/user/src/com/google/gwt/text/client/DoubleParser.java b/user/src/com/google/gwt/text/client/DoubleParser.java
index b3d3560..c3977dd 100644
--- a/user/src/com/google/gwt/text/client/DoubleParser.java
+++ b/user/src/com/google/gwt/text/client/DoubleParser.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -28,7 +28,7 @@
   private static DoubleParser INSTANCE;
 
   /**
-   * @return the instance of the no-op renderer
+   * Returns the instance of the no-op renderer.
    */
   public static Parser<Double> instance() {
     if (INSTANCE == null) {
diff --git a/user/src/com/google/gwt/text/client/DoubleRenderer.java b/user/src/com/google/gwt/text/client/DoubleRenderer.java
index 4c53c1e..0a526bf 100644
--- a/user/src/com/google/gwt/text/client/DoubleRenderer.java
+++ b/user/src/com/google/gwt/text/client/DoubleRenderer.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -26,7 +26,7 @@
   private static DoubleRenderer INSTANCE;
 
   /**
-   * @return the instance
+   * Returns the instance.
    */
   public static Renderer<Double> instance() {
     if (INSTANCE == null) {
@@ -42,7 +42,7 @@
     if (object == null) {
       return "";
     }
-    
+
     return NumberFormat.getDecimalFormat().format(object);
   }
 }
diff --git a/user/src/com/google/gwt/text/client/IntegerParser.java b/user/src/com/google/gwt/text/client/IntegerParser.java
index f959fb0..9638347 100644
--- a/user/src/com/google/gwt/text/client/IntegerParser.java
+++ b/user/src/com/google/gwt/text/client/IntegerParser.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -28,7 +28,7 @@
   private static IntegerParser INSTANCE;
 
   /**
-   * @return the instance of the no-op renderer
+   * Returns the instance of the no-op renderer.
    */
   public static Parser<Integer> instance() {
     if (INSTANCE == null) {
diff --git a/user/src/com/google/gwt/text/client/IntegerRenderer.java b/user/src/com/google/gwt/text/client/IntegerRenderer.java
index d9efe2d..4a6f5a6 100644
--- a/user/src/com/google/gwt/text/client/IntegerRenderer.java
+++ b/user/src/com/google/gwt/text/client/IntegerRenderer.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -19,7 +19,6 @@
 import com.google.gwt.text.shared.AbstractRenderer;
 import com.google.gwt.text.shared.Renderer;
 
-
 /**
  * A localized renderer based on {@link NumberFormat#getDecimalFormat}.
  */
@@ -27,7 +26,7 @@
   private static IntegerRenderer INSTANCE;
 
   /**
-   * @return the instance
+   * Returns the instance.
    */
   public static Renderer<Integer> instance() {
     if (INSTANCE == null) {
@@ -43,7 +42,7 @@
     if (null == object) {
       return "";
     }
-    
+
     return NumberFormat.getDecimalFormat().format(object);
   }
 }
diff --git a/user/src/com/google/gwt/text/client/LongParser.java b/user/src/com/google/gwt/text/client/LongParser.java
index f896ca4..5115cf3 100644
--- a/user/src/com/google/gwt/text/client/LongParser.java
+++ b/user/src/com/google/gwt/text/client/LongParser.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.text.client;
 
-
 import com.google.gwt.i18n.client.NumberFormat;
 import com.google.gwt.text.shared.Parser;
 
@@ -27,9 +26,9 @@
 public class LongParser implements Parser<Long> {
 
   private static LongParser INSTANCE;
-  
+
   /**
-   * @return the instance of the no-op renderer
+   * Returns the instance of the no-op renderer.
    */
   public static Parser<Long> instance() {
     if (INSTANCE == null) {
@@ -37,7 +36,7 @@
     }
     return INSTANCE;
   }
-  
+
   protected LongParser() {
   }
 
@@ -48,7 +47,7 @@
 
     try {
       return (long) NumberFormat.getDecimalFormat().parse(object.toString());
-    } catch (NumberFormatException e) { 
+    } catch (NumberFormatException e) {
       throw new ParseException(e.getMessage(), 0);
     }
   }
diff --git a/user/src/com/google/gwt/text/client/LongRenderer.java b/user/src/com/google/gwt/text/client/LongRenderer.java
index 0c3a92a..1edf218 100644
--- a/user/src/com/google/gwt/text/client/LongRenderer.java
+++ b/user/src/com/google/gwt/text/client/LongRenderer.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -19,7 +19,6 @@
 import com.google.gwt.text.shared.AbstractRenderer;
 import com.google.gwt.text.shared.Renderer;
 
-
 /**
  * A localized renderer based on {@link NumberFormat#getDecimalFormat}.
  */
@@ -27,7 +26,7 @@
   private static LongRenderer INSTANCE;
 
   /**
-   * @return the instance
+   * Returns the instance.
    */
   public static Renderer<Long> instance() {
     if (INSTANCE == null) {
diff --git a/user/src/com/google/gwt/text/shared/AbstractRenderer.java b/user/src/com/google/gwt/text/shared/AbstractRenderer.java
index 3c69c9e..946cfa7 100644
--- a/user/src/com/google/gwt/text/shared/AbstractRenderer.java
+++ b/user/src/com/google/gwt/text/shared/AbstractRenderer.java
@@ -18,10 +18,6 @@
 import java.io.IOException;
 
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * Abstract implementation of a renderer to make implementation of rendering
  * simpler.
  * 
diff --git a/user/src/com/google/gwt/text/shared/AbstractSafeHtmlRenderer.java b/user/src/com/google/gwt/text/shared/AbstractSafeHtmlRenderer.java
index 521fcb3..7a33b69 100644
--- a/user/src/com/google/gwt/text/shared/AbstractSafeHtmlRenderer.java
+++ b/user/src/com/google/gwt/text/shared/AbstractSafeHtmlRenderer.java
@@ -20,10 +20,6 @@
 import com.google.gwt.safehtml.shared.SafeHtmlUtils;
 
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * Abstract implementation of a safe HTML renderer to make implementation of
  * rendering simpler.
  *
diff --git a/user/src/com/google/gwt/text/shared/Parser.java b/user/src/com/google/gwt/text/shared/Parser.java
index ba25b95..c848649 100644
--- a/user/src/com/google/gwt/text/shared/Parser.java
+++ b/user/src/com/google/gwt/text/shared/Parser.java
@@ -18,10 +18,6 @@
 import java.text.ParseException;
 
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * An object that can parse text and return a value.
  *
  * @param <T> the type to parse
diff --git a/user/src/com/google/gwt/text/shared/Renderer.java b/user/src/com/google/gwt/text/shared/Renderer.java
index 431307a..f428e87 100644
--- a/user/src/com/google/gwt/text/shared/Renderer.java
+++ b/user/src/com/google/gwt/text/shared/Renderer.java
@@ -18,10 +18,6 @@
 import java.io.IOException;
 
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * An object that can render other objects of a particular type into plain-text
  * form. Allows decoupling that is useful for a dependency-injection
  * architecture.
diff --git a/user/src/com/google/gwt/text/shared/SafeHtmlRenderer.java b/user/src/com/google/gwt/text/shared/SafeHtmlRenderer.java
index f244e4f..7685b23 100644
--- a/user/src/com/google/gwt/text/shared/SafeHtmlRenderer.java
+++ b/user/src/com/google/gwt/text/shared/SafeHtmlRenderer.java
@@ -19,10 +19,6 @@
 import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
 
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * An object that can render other objects of a particular type into safe HTML
  * form. Allows decoupling that is useful for a dependency-injection
  * architecture.
diff --git a/user/src/com/google/gwt/text/shared/testing/PassthroughParser.java b/user/src/com/google/gwt/text/shared/testing/PassthroughParser.java
index 3cc6555..927bf72 100644
--- a/user/src/com/google/gwt/text/shared/testing/PassthroughParser.java
+++ b/user/src/com/google/gwt/text/shared/testing/PassthroughParser.java
@@ -17,20 +17,15 @@
 
 import com.google.gwt.text.shared.Parser;
 
-
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * A no-op String parser.
  */
 public class PassthroughParser implements Parser<String> {
 
   private static PassthroughParser INSTANCE;
-  
+
   /**
-   * @return the instance of the no-op renderer
+   * Returns the instance of the no-op renderer.
    */
   public static Parser<String> instance() {
     if (INSTANCE == null) {
@@ -38,7 +33,7 @@
     }
     return INSTANCE;
   }
-  
+
   protected PassthroughParser() {
   }
 
diff --git a/user/src/com/google/gwt/text/shared/testing/PassthroughRenderer.java b/user/src/com/google/gwt/text/shared/testing/PassthroughRenderer.java
index 4967058..26f4816 100644
--- a/user/src/com/google/gwt/text/shared/testing/PassthroughRenderer.java
+++ b/user/src/com/google/gwt/text/shared/testing/PassthroughRenderer.java
@@ -18,21 +18,16 @@
 import com.google.gwt.text.shared.AbstractRenderer;
 import com.google.gwt.text.shared.Renderer;
 
-
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * A no-op String renderer. This is rarely or never the right
  * thing to use in production, but it's handy for tests.
  */
 public class PassthroughRenderer extends AbstractRenderer<String> {
 
   private static PassthroughRenderer INSTANCE;
-  
+
   /**
-   * @return the instance of the no-op renderer
+   * Returns the instance of the no-op renderer.
    */
   public static Renderer<String> instance() {
     if (INSTANCE == null) {
@@ -40,7 +35,7 @@
     }
     return INSTANCE;
   }
-  
+
   protected PassthroughRenderer() {
   }
 
diff --git a/user/src/com/google/gwt/uibinder/attributeparsers/FieldReferenceConverter.java b/user/src/com/google/gwt/uibinder/attributeparsers/FieldReferenceConverter.java
index 85cbb45..2e99553 100644
--- a/user/src/com/google/gwt/uibinder/attributeparsers/FieldReferenceConverter.java
+++ b/user/src/com/google/gwt/uibinder/attributeparsers/FieldReferenceConverter.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -58,7 +58,7 @@
    */
   interface Delegate {
     /**
-     * @return the type any parsed field references are expected to return
+     * Returns the type any parsed field references are expected to return.
      */
     JType getType();
 
@@ -111,9 +111,9 @@
 
   private static final Pattern BRACES = Pattern.compile("[{]([^}]*)[}]");
   private static final Pattern LEGAL_FIRST_CHAR = Pattern.compile("^[$_a-zA-Z].*");
-  
+
   /**
-   * @return true if the given string holds one or more field references
+   * Returns true if the given string holds one or more field references.
    */
   public static boolean hasFieldReferences(String string) {
     Telltale telltale = new Telltale();
diff --git a/user/src/com/google/gwt/uibinder/client/UiTemplate.java b/user/src/com/google/gwt/uibinder/client/UiTemplate.java
index f677d44..6c3bf3c 100644
--- a/user/src/com/google/gwt/uibinder/client/UiTemplate.java
+++ b/user/src/com/google/gwt/uibinder/client/UiTemplate.java
@@ -27,7 +27,7 @@
 public @interface UiTemplate {
 
   /**
-   * @return The template name
+   * Returns the template name.
    */
   String value();
 }
diff --git a/user/src/com/google/gwt/uibinder/rebind/DesignTimeUtils.java b/user/src/com/google/gwt/uibinder/rebind/DesignTimeUtils.java
index 4ca3e48..5d194c3 100644
--- a/user/src/com/google/gwt/uibinder/rebind/DesignTimeUtils.java
+++ b/user/src/com/google/gwt/uibinder/rebind/DesignTimeUtils.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -29,19 +29,19 @@
   void addDeclarations(IndentedWriter w);
 
   /**
-   * @return the name of "Impl", unique each time if it is design time.
+   * Returns the name of "Impl", unique each time if it is design time.
    */
   String getImplName(String implName);
 
   /**
-   * @return the path of given {@link Element}.
+   * Returns the path of given {@link Element}.
    */
   String getPath(Element element);
 
   /**
-   * @return the design time content of <code>*.ui.xml</code> template to parse,
-   *         or <code>null</code> if not design time, or this template is not
-   *         under design.
+   * Returns the design time content of <code>*.ui.xml</code> template to parse,
+   * or <code>null</code> if not design time, or this template is not under
+   * design.
    */
   String getTemplateContent(String path);
 
@@ -51,9 +51,9 @@
   void handleUIObject(Statements writer, XMLElement elem, String fieldName);
 
   /**
-   * @return <code>true</code> if this template is under design now, so some of
-   *         UiBinder features should be disables. This includes assigning
-   *         values into "@UiField", processing "@UiHandler".
+   * Returns <code>true</code> if this template is under design now, so some of
+   * UiBinder features should be disables. This includes assigning values into
+   * "@UiField", processing "@UiHandler".
    */
   boolean isDesignTime();
 
@@ -77,4 +77,4 @@
    * Writes remembered values of attributes.
    */
   void writeAttributes(Statements writer);
-}
\ No newline at end of file
+}
diff --git a/user/src/com/google/gwt/uibinder/rebind/DesignTimeUtilsImpl.java b/user/src/com/google/gwt/uibinder/rebind/DesignTimeUtilsImpl.java
index d0c1f94..9acd169 100644
--- a/user/src/com/google/gwt/uibinder/rebind/DesignTimeUtilsImpl.java
+++ b/user/src/com/google/gwt/uibinder/rebind/DesignTimeUtilsImpl.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -29,10 +29,10 @@
  */
 public class DesignTimeUtilsImpl implements DesignTimeUtils {
   /**
-   * @return <code>true</code> if given "Binder" is under design now. We should
-   *         not use "design time" globally, because while one widget in under
-   *         design, it may use other widgets and we want to execute them as is,
-   *         without design time tweaks.
+   * Returns <code>true</code> if given "Binder" is under design now. We should
+   * not use "design time" globally, because while one widget in under design,
+   * it may use other widgets and we want to execute them as is, without design
+   * time tweaks.
    */
   public static boolean isDesignTime(String fqInterfaceName) {
     if (Beans.isDesignTime()) {
@@ -121,7 +121,7 @@
   }
 
   /**
-   * @return remembered attributes, used during tests only.
+   * Returns remembered attributes, used during tests only.
    */
   Map<String, String> getAttributes() {
     return attributes;
@@ -142,4 +142,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/user/src/com/google/gwt/uibinder/rebind/FieldReference.java b/user/src/com/google/gwt/uibinder/rebind/FieldReference.java
index abea40b..74fa092 100644
--- a/user/src/com/google/gwt/uibinder/rebind/FieldReference.java
+++ b/user/src/com/google/gwt/uibinder/rebind/FieldReference.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -68,7 +68,7 @@
   }
 
   /**
-   * @return A failure message if the types don't mesh, or null on success
+   * Returns a failure message if the types don't mesh, or null on success.
    */
   private void ensureAssignable(JType leftHandType, JType rightHandType,
       MonitoredLogger logger) {
@@ -144,7 +144,7 @@
      * Integer i = (int) 1.0 is okay
      * int i = (int) Double.valueOf(1.0) is not
      */
-    if (isNumber(leftHandType) && isNumber(rightHandType) 
+    if (isNumber(leftHandType) && isNumber(rightHandType)
         && (rightHandType.isPrimitive() != null)) {
       return true; // They will be cast into submission
     }
diff --git a/user/src/com/google/gwt/uibinder/rebind/FieldWriter.java b/user/src/com/google/gwt/uibinder/rebind/FieldWriter.java
index 77456d5..6e411a4 100644
--- a/user/src/com/google/gwt/uibinder/rebind/FieldWriter.java
+++ b/user/src/com/google/gwt/uibinder/rebind/FieldWriter.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -36,35 +36,35 @@
 public interface FieldWriter {
 
   /**
-   * @return the type of this field, or for generated types the type it extends
+   * Returns the type of this field, or for generated types the type it extends.
    */
   // TODO(rjrjr) When ui:style is able to implement multiple interfaces,
   // this will need to become a set
   JClassType getAssignableType();
 
   /**
-   * @return the custom initializer for this field, or null if it is not set
+   * Returns the custom initializer for this field, or null if it is not set.
    */
   String getInitializer();
 
   /**
-   * @return the type of this field, or null if this field is of a type that has
-   *         not yet been generated
+   * Returns the type of this field, or null if this field is of a type that has
+   * not yet been generated.
    */
   JClassType getInstantiableType();
 
   /**
-   * @return the qualified source name of this type
+   * Returns the qualified source name of this type.
    */
   String getQualifiedSourceName();
 
   /**
-   * @return the return type found at the end of the given method call
+   * Returns the return type found at the end of the given method call
    * path, which must begin with the receiver's name, or null if the
-   * path is invalid
+   * path is invalid.
    */
   JType getReturnType(String[] path, MonitoredLogger logger);
-  
+
   /**
    * Declares that the receiver depends upon the given field.
    */
@@ -74,7 +74,7 @@
    * Used to provide an initializer string to use instead of a
    * {@link com.google.gwt.core.client.GWT#create()} call. Note that this is an
    * RHS expression. Don't include the leading '=', and don't end it with ';'.
-   * 
+   *
    * @throws UnableToCompleteException
    * @throws IllegalStateException on second attempt to set the initializer
    */
@@ -84,4 +84,4 @@
    * Write the field delcaration.
    */
   void write(IndentedWriter w) throws UnableToCompleteException;
-}
\ No newline at end of file
+}
diff --git a/user/src/com/google/gwt/uibinder/rebind/MonitoredLogger.java b/user/src/com/google/gwt/uibinder/rebind/MonitoredLogger.java
index 3f54f27..9f03693 100644
--- a/user/src/com/google/gwt/uibinder/rebind/MonitoredLogger.java
+++ b/user/src/com/google/gwt/uibinder/rebind/MonitoredLogger.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -38,7 +38,7 @@
   }
 
   /**
-   * @return true if {@link #error} has ever been called.
+   * Returns true if {@link #error} has ever been called.
    */
   public boolean hasErrors() {
     return hasErrors;
diff --git a/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java b/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
index 9a93a1e..5d9def6 100644
--- a/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
+++ b/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -52,10 +52,10 @@
 
 /**
  * Writer for UiBinder generated classes.
- * 
+ *
  * TODO(rdamazio): Refactor this, extract model classes, improve ordering
  * guarantees, etc.
- * 
+ *
  * TODO(rjrjr): Line numbers in error messages.
  */
 @SuppressWarnings("deprecation")
@@ -127,7 +127,7 @@
   /**
    * Returns a list of the given type and all its superclasses and implemented
    * interfaces in a breadth-first traversal.
-   * 
+   *
    * @param type the base type
    * @return a breadth-first collection of its type hierarchy
    */
@@ -277,7 +277,7 @@
    * Add a statement to be executed right after the current attached element is
    * detached. This is useful for doing things that might be expensive while the
    * element is attached to the DOM.
-   * 
+   *
    * @param format
    * @param args
    * @see #beginAttachedSection(String)
@@ -311,7 +311,7 @@
    * Succeeding calls made to {@link #ensureAttached} and
    * {@link #ensureFieldAttached} must refer to children of this element, until
    * {@link #endAttachedSection} is called.
-   * 
+   *
    * @param element Java expression for the generated code that will return the
    *          dom element to be attached.
    */
@@ -329,7 +329,7 @@
    * generate a unique dom id at runtime. Further code will be generated to be
    * run after widgets are instantiated, to use that dom id in a getElementById
    * call and assign the Element instance to its field.
-   * 
+   *
    * @param fieldName The name of the field being declared
    */
   public String declareDomField(String fieldName)
@@ -347,7 +347,7 @@
   /**
    * Declare a variable that will be filled at runtime with a unique id, safe
    * for use as a dom element's id attribute.
-   * 
+   *
    * @return that variable's name.
    */
   public String declareDomIdHolder() throws UnableToCompleteException {
@@ -387,7 +387,7 @@
    * If this element has a gwt:field attribute, create a field for it of the
    * appropriate type, and return the field name. If no gwt:field attribute is
    * found, do nothing and return null
-   * 
+   *
    * @return The new field name, or null if no field is created
    */
   public String declareFieldIfNeeded(XMLElement elem)
@@ -439,7 +439,7 @@
   /**
    * End the current attachable section. This will detach the element if it was
    * ever attached and execute any detach statements.
-   * 
+   *
    * @see #beginAttachedSection(String)
    */
   public void endAttachedSection() {
@@ -456,7 +456,7 @@
 
   /**
    * Ensure that the specified element is attached to the DOM.
-   * 
+   *
    * @see #beginAttachedSection(String)
    */
   public void ensureAttached() {
@@ -475,7 +475,7 @@
    * Ensure that the specified field is attached to the DOM. The field must hold
    * an object that responds to Element getElement(). Convenience wrapper for
    * {@link ensureAttached}<code>(field + ".getElement()")</code>.
-   * 
+   *
    * @see #beginAttachedSection(String)
    */
   public void ensureCurrentFieldAttached() {
@@ -485,7 +485,7 @@
   /**
    * Finds the JClassType that corresponds to this XMLElement, which must be a
    * Widget or an Element.
-   * 
+   *
    * @throws UnableToCompleteException If no such widget class exists
    * @throws RuntimeException if asked to handle a non-widget, non-DOM element
    */
@@ -533,7 +533,7 @@
   /**
    * Finds an attribute {@link BundleAttributeParser} for the given xml
    * attribute, if any, based on its namespace uri.
-   * 
+   *
    * @return the parser or null
    * @deprecated exists only to support {@link BundleAttributeParser}, which
    *             will be leaving us soon.
@@ -549,15 +549,15 @@
   }
 
   /**
-   * @return the {@link DesignTimeUtils}, not <code>null</code>.
+   * Returns the {@link DesignTimeUtils}, not <code>null</code>.
    */
   public DesignTimeUtils getDesignTime() {
     return designTime;
   }
 
   /**
-   * @return The logger, at least until we get get it handed off to parsers via
-   *         constructor args.
+   * Returns the logger, at least until we get get it handed off to parsers via
+   * constructor args.
    */
   public MortalLogger getLogger() {
     return logger;
@@ -600,7 +600,7 @@
    * name of the field (possibly private) that will hold it. The element is
    * likely to make recursive calls back to this method to have its children
    * parsed.
-   * 
+   *
    * @param elem the xml element to be parsed
    * @return the name of the field containing the parsed widget
    */
@@ -634,7 +634,7 @@
   /**
    * Gives the writer the initializer to use for this field instead of the
    * default GWT.create call.
-   * 
+   *
    * @throws IllegalStateException if an initializer has already been set
    */
   public void setFieldInitializer(String fieldName, String factoryMethod) {
@@ -644,7 +644,7 @@
   /**
    * Instructs the writer to initialize the field with a specific constructor
    * invocation, instead of the default GWT.create call.
-   * 
+   *
    * @param fieldName the field to initialize
    * @param type the type of the field
    * @param args arguments to the constructor call
@@ -662,7 +662,7 @@
    * token, surrounded by plus signs. This is useful in strings to be handed to
    * setInnerHTML() and setText() calls, to allow a unique dom id attribute or
    * other runtime expression in the string.
-   * 
+   *
    * @param expression
    */
   public String tokenForExpression(String expression) {
@@ -694,7 +694,7 @@
    * Entry point for the code generation logic. It generates the
    * implementation's superstructure, and parses the root widget (leading to all
    * of its children being parsed as well).
-   * 
+   *
    * @param doc TODO
    */
   void parseDocument(Document doc, PrintWriter printWriter)
@@ -745,7 +745,7 @@
   /**
    * Ensures that all of the internal data structures are cleaned up correctly
    * at the end of parsing the document.
-   * 
+   *
    * @throws UnableToCompleteException
    */
   private void ensureAttachmentCleanedUp() {
@@ -792,7 +792,7 @@
   /**
    * Inspects this element for a gwt:field attribute. If one is found, the
    * attribute is consumed and its value returned.
-   * 
+   *
    * @return The field name declared by an element, or null if none is declared
    */
   private String getFieldName(XMLElement elem) throws UnableToCompleteException {
@@ -835,7 +835,7 @@
 
   /**
    * Find a set of element parsers for the given ui type.
-   * 
+   *
    * The list of parsers will be returned in order from most- to least-specific.
    */
   private Iterable<ElementParser> getParsersForClass(JClassType type) {
@@ -844,7 +844,7 @@
     /*
      * Let this non-widget parser go first (it finds <m:attribute/> elements).
      * Any other such should land here too.
-     * 
+     *
      * TODO(rjrjr) Need a scheme to associate these with a namespace uri or
      * something?
      */
@@ -948,7 +948,7 @@
 
   /**
    * Parses a package uri (e.g., package://com.google...).
-   * 
+   *
    * @throws UnableToCompleteException on bad package name
    */
   private JPackage parseNamespacePackage(String ns)
@@ -1078,7 +1078,7 @@
    * gwt:field in the template. For those that have not had constructor
    * generation suppressed, emit GWT.create() calls instantiating them (or die
    * if they have no default constructor).
-   * 
+   *
    * @throws UnableToCompleteException on constructor problem
    */
   private void writeGwtFields(IndentedWriter niceWriter)
diff --git a/user/src/com/google/gwt/uibinder/rebind/XMLElement.java b/user/src/com/google/gwt/uibinder/rebind/XMLElement.java
index 9e283d1..74ea05d 100644
--- a/user/src/com/google/gwt/uibinder/rebind/XMLElement.java
+++ b/user/src/com/google/gwt/uibinder/rebind/XMLElement.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -56,7 +56,7 @@
   public interface Interpreter<T> {
     /**
      * Given an XMLElement, return its filtered value.
-     * 
+     *
      * @throws UnableToCompleteException on error
      */
     T interpretElement(XMLElement elem) throws UnableToCompleteException;
@@ -185,7 +185,7 @@
 
   /**
    * Ensure that the receiver has no attributes left.
-   * 
+   *
    * @throws UnableToCompleteException if it does
    */
   public void assertNoAttributes() throws UnableToCompleteException {
@@ -206,7 +206,7 @@
 
   /**
    * Require that the receiver's body is empty of text and has no child nodes.
-   * 
+   *
    * @throws UnableToCompleteException if it isn't
    */
   public void assertNoBody() throws UnableToCompleteException {
@@ -222,7 +222,7 @@
 
   /**
    * Require that the receiver's body is empty of text.
-   * 
+   *
    * @throws UnableToCompleteException if it isn't
    */
   public void assertNoText() throws UnableToCompleteException {
@@ -237,7 +237,7 @@
   /**
    * Consumes the given attribute as a literal or field reference. The type
    * parameter is required to determine how the value is parsed and validated.
-   * 
+   *
    * @param name the attribute's full name (including prefix)
    * @param type the type this attribute is expected to provide
    * @return the attribute's value as a Java expression, or null if it is not
@@ -252,7 +252,7 @@
   /**
    * Consumes the given attribute as a literal or field reference. The type
    * parameter is required to determine how the value is parsed and validated.
-   * 
+   *
    * @param name the attribute's full name (including prefix)
    * @param defaultValue the value to @return if the attribute was unset
    * @param type the type this attribute is expected to provide
@@ -302,10 +302,10 @@
   /**
    * Convenience method for parsing the named attribute as a boolean value or
    * reference.
-   * 
+   *
    * @return an expression that will evaluate to a boolean value in the
    *         generated code, or null if there is no such attribute
-   * 
+   *
    * @throws UnableToCompleteException on unparseable value
    */
   public String consumeBooleanAttribute(String name)
@@ -316,11 +316,11 @@
   /**
    * Convenience method for parsing the named attribute as a boolean value or
    * reference.
-   * 
+   *
    * @param defaultValue value to return if attribute was not set
    * @return an expression that will evaluate to a boolean value in the
    *         generated code, or defaultValue if there is no such attribute
-   * 
+   *
    * @throws UnableToCompleteException on unparseable value
    */
   public String consumeBooleanAttribute(String name, boolean defaultValue)
@@ -333,10 +333,10 @@
    * Consumes the named attribute as a boolean expression. This will not accept
    * {field.reference} expressions. Useful for values that must be resolved at
    * compile time, such as generated annotation values.
-   * 
+   *
    * @return {@link Boolean#TRUE}, {@link Boolean#FALSE}, or null if no such
    *         attribute
-   * 
+   *
    * @throws UnableToCompleteException on unparseable value
    */
   public Boolean consumeBooleanConstantAttribute(String name)
@@ -354,7 +354,7 @@
 
   /**
    * Consumes and returns all child elements.
-   * 
+   *
    * @throws UnableToCompleteException if extra text nodes are found
    */
   public Iterable<XMLElement> consumeChildElements()
@@ -368,7 +368,7 @@
    * Consumes and returns all child elements selected by the interpreter. Note
    * that text nodes are not elements, and so are not presented for
    * interpretation, and are not consumed.
-   * 
+   *
    * @param interpreter Should return true for any child that should be consumed
    *          and returned by the consumeChildElements call
    * @throws UnableToCompleteException
@@ -399,7 +399,7 @@
   /**
    * Convenience method for parsing the named attribute as an ImageResource
    * value or reference.
-   * 
+   *
    * @return an expression that will evaluate to an ImageResource value in the
    *         generated code, or null if there is no such attribute
    * @throws UnableToCompleteException on unparseable value
@@ -423,7 +423,7 @@
    * for an HTML value, or
    * {@link com.google.gwt.uibinder.elementparsers.templates.parsers.TextInterpreter}
    * for text.
-   * 
+   *
    * @param interpreter Called for each element, expected to return a string
    *          replacement for it, or null if it should be left as is
    */
@@ -468,7 +468,7 @@
    * This call requires an interpreter to make sense of any special children.
    * The odds are you want to use
    * {@link com.google.gwt.uibinder.elementparsers.templates.parsers.TextInterpreter}
-   * 
+   *
    * @throws UnableToCompleteException If any elements present are not consumed
    *           by the interpreter
    */
@@ -497,11 +497,11 @@
 
   /**
    * Convenience method for parsing the named attribute as a CSS length value.
-   * 
+   *
    * @return a (double, Unit) pair literal, an expression that will evaluate to
    *         such a pair in the generated code, or null if there is no such
    *         attribute
-   * 
+   *
    * @throws UnableToCompleteException on unparseable value
    */
   public String consumeLengthAttribute(String name)
@@ -527,7 +527,7 @@
    * Consumes the named attribute and parses it to an unparsed, unescaped array
    * of Strings. The strings in the attribute may be comma or space separated
    * (or a mix of both).
-   * 
+   *
    * @return array of String, empty if the attribute was not set.
    */
   public String[] consumeRawArrayAttribute(String name) {
@@ -542,7 +542,7 @@
   /**
    * Consumes the given attribute and returns its trimmed value, or null if it
    * was unset. The returned string is not escaped.
-   * 
+   *
    * @param name the attribute's full name (including prefix)
    * @return the attribute's value, or ""
    */
@@ -558,7 +558,7 @@
   /**
    * Consumes the given attribute and returns its trimmed value, or the given
    * default value if it was unset. The returned string is not escaped.
-   * 
+   *
    * @param name the attribute's full name (including prefix)
    * @param defaultValue the value to return if the attribute was unset
    * @return the attribute's value, or defaultValue
@@ -575,7 +575,7 @@
    * Consumes the given required attribute as a literal or field reference. The
    * types parameters are required to determine how the value is parsed and
    * validated.
-   * 
+   *
    * @param name the attribute's full name (including prefix)
    * @param types the type(s) this attribute is expected to provide
    * @return the attribute's value as a Java expression
@@ -609,10 +609,10 @@
   /**
    * Convenience method for parsing the named required attribute as a double
    * value or reference.
-   * 
+   *
    * @return a double literal, an expression that will evaluate to a double
    *         value in the generated code
-   * 
+   *
    * @throws UnableToCompleteException on unparseable value, or if the attribute
    *           is empty or unspecified
    */
@@ -624,10 +624,10 @@
   /**
    * Convenience method for parsing the named required attribute as a integer
    * value or reference.
-   * 
+   *
    * @return a integer literal, an expression that will evaluate to a integer
    *         value in the generated code
-   * 
+   *
    * @throws UnableToCompleteException on unparseable value, or if the attribute
    *           is empty or unspecified
    */
@@ -651,7 +651,7 @@
   /**
    * Consumes a single child element, ignoring any text nodes and throwing an
    * exception if no child is found, or more than one child element is found.
-   * 
+   *
    * @throws UnableToCompleteException on no children, or too many
    */
   public XMLElement consumeSingleChildElement()
@@ -678,7 +678,7 @@
    * Consumes the named attribute and parses it to an array of String
    * expressions. The strings in the attribute may be comma or space separated
    * (or a mix of both).
-   * 
+   *
    * @return array of String expressions, empty if the attribute was not set.
    * @throws UnableToCompleteException on unparseable value
    */
@@ -702,7 +702,7 @@
   /**
    * Convenience method for parsing the named attribute as a String value or
    * reference.
-   * 
+   *
    * @return an expression that will evaluate to a String value in the generated
    *         code, or null if there is no such attribute
    * @throws UnableToCompleteException on unparseable value
@@ -715,7 +715,7 @@
   /**
    * Convenience method for parsing the named attribute as a String value or
    * reference.
-   * 
+   *
    * @return an expression that will evaluate to a String value in the generated
    *         code, or the given defaultValue if there is no such attribute
    * @throws UnableToCompleteException on unparseable value
@@ -731,7 +731,7 @@
    * <p>
    * You probably want to use
    * {@link #consumeInnerTextEscapedAsHtmlStringLiteral} instead.
-   * 
+   *
    * @return the text
    * @throws UnableToCompleteException if it held anything other than text nodes
    */
@@ -759,7 +759,7 @@
 
   /**
    * Get the attribute with the given name.
-   * 
+   *
    * @return the attribute, or null if there is none of that name
    */
   public XMLAttribute getAttribute(String name) {
@@ -771,7 +771,7 @@
   }
 
   /**
-   * @return The number of attributes this element has
+   * Returns the number of attributes this element has.
    */
   public int getAttributeCount() {
     return elem.getAttributes().getLength();
@@ -785,8 +785,8 @@
   }
 
   /**
-   * @return the design time path of this element, in form of indexes from root,
-   *         such as "0/0/1/0".
+   * Returns the design time path of this element, in form of indexes from root,
+   * such as "0/0/1/0".
    */
   public String getDesignTimePath() {
     return designTime.getPath(elem);
@@ -816,8 +816,8 @@
   }
 
   /**
-   * @return the parent element, or null if parent is null or a node type other
-   *         than Element
+   * Returns the parent element, or null if parent is null or a node type other
+   * than Element.
    */
   public XMLElement getParent() {
     Node parent = elem.getParentNode();
diff --git a/user/src/com/google/gwt/uibinder/rebind/messages/MessagesWriter.java b/user/src/com/google/gwt/uibinder/rebind/messages/MessagesWriter.java
index e4353c5..1ddab62 100644
--- a/user/src/com/google/gwt/uibinder/rebind/messages/MessagesWriter.java
+++ b/user/src/com/google/gwt/uibinder/rebind/messages/MessagesWriter.java
@@ -166,7 +166,7 @@
   }
 
   /**
-   * @return the expression that will instantiate the Messages interface
+   * Returns the expression that will instantiate the Messages interface.
    */
   public String getDeclaration() {
     return String.format(
@@ -179,8 +179,8 @@
   }
 
   /**
-   * @return The namespace prefix (not including :) declared by the template for
-   *         message elements and attributes
+   * Returns the namespace prefix (not including :) declared by the template for
+   * message elements and attributes.
    */
   public String getMessagesPrefix() {
     return messagesPrefix;
@@ -196,7 +196,7 @@
   }
 
   /**
-   * @return true iff any messages have been declared
+   * Returns true iff any messages have been declared.
    */
   public boolean hasMessages() {
     return !messages.isEmpty();
@@ -222,8 +222,8 @@
   }
 
   /**
-   * @return The set of AttributeMessages that were found in elem and stored by
-   *         a previous call to {@link #consumeAndStoreMessageAttributesFor}
+   * Returns the set of AttributeMessages that were found in elem and stored by a
+   * previous call to {@link #consumeAndStoreMessageAttributesFor}.
    */
   public Collection<AttributeMessage> retrieveMessageAttributesFor(
       XMLElement elem) {
diff --git a/user/src/com/google/gwt/uibinder/rebind/model/ImplicitCssResource.java b/user/src/com/google/gwt/uibinder/rebind/model/ImplicitCssResource.java
index 4ba585d..5a2b817 100644
--- a/user/src/com/google/gwt/uibinder/rebind/model/ImplicitCssResource.java
+++ b/user/src/com/google/gwt/uibinder/rebind/model/ImplicitCssResource.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -73,15 +73,15 @@
   }
 
   /**
-   * @return the name of the CssResource interface
+   * Returns the name of the CssResource interface.
    */
   public String getClassName() {
     return className;
   }
 
   /**
-   * @return the set of CSS classnames in the underlying .css files
-   * 
+   * Returns the set of CSS classnames in the underlying .css files.
+   *
    * @throws UnableToCompleteException if the user has called for a .css file we
    *           can't find.
    */
@@ -107,29 +107,29 @@
   }
 
   /**
-   * @return the public interface that this CssResource implements
+   * Returns the public interface that this CssResource implements.
    */
   public JClassType getExtendedInterface() {
     return extendedInterface;
   }
 
   /**
-   * @return the set of CssResource types whose scopes are imported
+   * Returns the set of CssResource types whose scopes are imported.
    */
   public Set<JClassType> getImports() {
     return imports;
   }
 
   /**
-   * @return the name of this resource. This is both its method name in the
-   *         owning {@link ImplicitClientBundle} and its ui:field name
+   * Returns the name of this resource. This is both its method name in the
+   * owning {@link ImplicitClientBundle} and its ui:field name.
    */
   public String getName() {
     return name;
   }
 
   /**
-   * @return css class names with dashed-names normalized like so: dashedNames
+   * Returns css class names with dashed-names normalized like so: dashedNames.
    */
   public Set<String> getNormalizedCssClassNames()
       throws UnableToCompleteException {
@@ -144,15 +144,15 @@
   }
 
   /**
-   * @return the package in which the generated CssResource interface should
-   *         reside
+   * Returns the package in which the generated CssResource interface should
+   * reside.
    */
   public String getPackageName() {
     return packageName;
   }
 
   /**
-   * @return name of the generated type
+   * Returns the name of the generated type.
    */
   public String getQualifiedSourceName() {
     if (packageName.length() == 0) {
@@ -163,7 +163,7 @@
   }
 
   /**
-   * @return the name of the .css file(s), separate by white space
+   * Returns the name of the .css file(s), separate by white space.
    */
   public Collection<String> getSource() {
     if (body.length() == 0) {
diff --git a/user/src/com/google/gwt/user/cellview/CellView.gwt.xml b/user/src/com/google/gwt/user/cellview/CellView.gwt.xml
index 22a4326..bb7ffa1 100644
--- a/user/src/com/google/gwt/user/cellview/CellView.gwt.xml
+++ b/user/src/com/google/gwt/user/cellview/CellView.gwt.xml
@@ -55,4 +55,12 @@
       <when-property-is name="user.agent" value="ie8"/>
     </any>
   </replace-with>
+
+  <!-- IE6-specific CellTree implementation. -->
+  <replace-with class="com.google.gwt.user.cellview.client.CellTree.ImplIE6">
+    <when-type-is class="com.google.gwt.user.cellview.client.CellTree.Impl"/>
+    <any>
+      <when-property-is name="user.agent" value="ie6"/>
+    </any>
+  </replace-with>
 </module>
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTree.java b/user/src/com/google/gwt/user/cellview/client/CellTree.java
index fa93a60..bbe2b4d 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTree.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTree.java
@@ -21,6 +21,7 @@
 import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.Style.Display;
+import com.google.gwt.dom.client.Style.Overflow;
 import com.google.gwt.dom.client.Style.Position;
 import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.event.dom.client.KeyCodes;
@@ -226,6 +227,7 @@
     protected void onStart() {
       if (opening) {
         animFrame.getStyle().setHeight(1.0, Unit.PX);
+        animFrame.getStyle().setPosition(Position.RELATIVE);
         animFrame.getStyle().clearDisplay();
         height = contentContainer.getScrollHeight();
       } else {
@@ -242,6 +244,10 @@
         double curHeight = (1.0 - progress) * height;
         animFrame.getStyle().setHeight(curHeight, Unit.PX);
       }
+
+      // Remind IE6 that we want the overflow to be hidden.
+      animFrame.getStyle().setOverflow(Overflow.HIDDEN);
+      animFrame.getStyle().setPosition(Position.RELATIVE);
     }
 
     /**
@@ -288,6 +294,7 @@
         childContainer.setInnerHTML("");
       }
       animFrame.getStyle().clearHeight();
+      animFrame.getStyle().clearPosition();
       this.contentContainer = null;
       this.childContainer = null;
       this.animFrame = null;
@@ -437,6 +444,48 @@
         + "width:{2}px;height:{3}px;\">{4}</div>")
     SafeHtml imageWrapper(String classes, String direction, int width,
         int height, SafeHtml image);
+
+    @Template("<div class=\"{0}\" style=\"position:absolute;{1}:-{2}px;"
+        + "width:{2}px;height:{3}px;\">{4}</div>")
+    SafeHtml imageWrapperIE6(String classes, String direction, int width,
+        int height, SafeHtml image);
+  }
+
+  /**
+   * Implementation of {@link CellTree}.
+   */
+  private static class Impl {
+    /**
+     * Create an image wrapper.
+     */
+    public SafeHtml imageWrapper(String classes, String direction, int width,
+        int height, SafeHtml image) {
+      return template.imageWrapper(classes, direction, width, height, image);
+    }
+  }
+
+  /**
+   * Implementation of {@link CellTable} used by IE6.
+   */
+  @SuppressWarnings("unused")
+  private static class ImplIE6 extends Impl {
+    @Override
+    public SafeHtml imageWrapper(String classes, String direction, int width,
+        int height, SafeHtml image) {
+      /*
+       * In IE6, left/right positions are relative to the inside of the padding
+       * instead of the outside of the padding. The bug does not happen on IE7,
+       * which maps to the IE6 user agent, so we need a runtime check for IE6.
+       */
+      if (isIe6()) {
+        return template.imageWrapperIE6(classes, direction, width, height, image);
+      }
+      return super.imageWrapper(classes, direction, width, height, image);
+    }
+
+    private native boolean isIe6() /*-{
+      return @com.google.gwt.dom.client.DOMImplIE6::isIE6()();
+    }-*/;
   }
 
   /**
@@ -446,6 +495,7 @@
 
   private static Resources DEFAULT_RESOURCES;
 
+  private static Impl TREE_IMPL;
   private static Template template;
 
   private static Resources getDefaultResources() {
@@ -565,6 +615,9 @@
     if (template == null) {
       template = GWT.create(Template.class);
     }
+    if (TREE_IMPL == null) {
+      TREE_IMPL = GWT.create(Impl.class);
+    }
     this.style = resources.cellTreeStyle();
     this.style.ensureInjected();
     initWidget(new SimplePanel());
@@ -959,7 +1012,7 @@
 
     AbstractImagePrototype proto = AbstractImagePrototype.create(res);
     SafeHtml image = SafeHtmlUtils.fromTrustedString(proto.getHTML());
-    return template.imageWrapper(classesBuilder.toString(), direction,
+    return TREE_IMPL.imageWrapper(classesBuilder.toString(), direction,
         res.getWidth(), res.getHeight(), image);
   }
 
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java b/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
index f9e524b..7104c01 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
@@ -24,7 +24,6 @@
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.dom.client.Style.Display;
 import com.google.gwt.dom.client.Style.Overflow;
-import com.google.gwt.dom.client.Style.Position;
 import com.google.gwt.event.logical.shared.CloseEvent;
 import com.google.gwt.event.logical.shared.OpenEvent;
 import com.google.gwt.event.shared.EventHandler;
@@ -1051,7 +1050,6 @@
   Element ensureAnimationFrame() {
     if (animationFrame == null) {
       animationFrame = Document.get().createDivElement();
-      animationFrame.getStyle().setPosition(Position.RELATIVE);
       animationFrame.getStyle().setOverflow(Overflow.HIDDEN);
       animationFrame.getStyle().setDisplay(Display.NONE);
       getElement().appendChild(animationFrame);
diff --git a/user/src/com/google/gwt/user/cellview/client/Column.java b/user/src/com/google/gwt/user/cellview/client/Column.java
index 83055bb..7802303 100644
--- a/user/src/com/google/gwt/user/cellview/client/Column.java
+++ b/user/src/com/google/gwt/user/cellview/client/Column.java
@@ -74,7 +74,7 @@
   }
 
   /**
-   * Return the column value from within the underlying data object.
+   * Returns the column value from within the underlying data object.
    */
   public abstract C getValue(T object);
 
@@ -102,7 +102,7 @@
 
   /**
    * Render the object into the cell.
-   * 
+   *
    * @param object the object to render
    * @param keyProvider the {@link ProvidesKey} for the object
    * @param sb the buffer to render into
@@ -112,7 +112,6 @@
     cell.render(getValue(object), key, sb);
   }
 
-
   /**
    * Set the {@link FieldUpdater} used for updating values in the column.
    *
diff --git a/user/src/com/google/gwt/user/client/WindowCloseListener.java b/user/src/com/google/gwt/user/client/WindowCloseListener.java
index 5e6ed4a..606a786 100644
--- a/user/src/com/google/gwt/user/client/WindowCloseListener.java
+++ b/user/src/com/google/gwt/user/client/WindowCloseListener.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2007 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -17,11 +17,11 @@
 
 /**
  * Implement this interface to receive closing events from the browser window.
- * 
+ *
  * @see com.google.gwt.user.client.Window#addWindowCloseListener(WindowCloseListener)
  * @deprecated use {@link Window.ClosingHandler} and
  *             {@link com.google.gwt.event.logical.shared.CloseHandler} instead
- * 
+ *
  */
 @Deprecated
 public interface WindowCloseListener extends java.util.EventListener {
@@ -29,7 +29,7 @@
   /**
    * Fired just before the browser window closes or navigates to a different
    * site. No user-interface may be displayed during shutdown.
-   * 
+   *
    * @return non-<code>null</code> to present a confirmation dialog that asks
    *         the user whether or not she wishes to navigate away from the page.
    *         The string returned will be displayed in the close confirmation
@@ -41,7 +41,7 @@
 
   /**
    * Fired after the browser window closes or navigates to a different site.
-   * This event cannot be cancelled, and is used mainly to clean up application
+   * This event cannot be canceled, and is used mainly to clean up application
    * state and/or save state to the server.
    */
   @Deprecated
diff --git a/user/src/com/google/gwt/user/client/ui/AcceptsOneWidget.java b/user/src/com/google/gwt/user/client/ui/AcceptsOneWidget.java
index 6fe3cdf..44059c9 100644
--- a/user/src/com/google/gwt/user/client/ui/AcceptsOneWidget.java
+++ b/user/src/com/google/gwt/user/client/ui/AcceptsOneWidget.java
@@ -16,7 +16,7 @@
 package com.google.gwt.user.client.ui;
 
 /**
- * Implemented by displays that can be given accept a {@link IsWidget}
+ * Implemented by displays that can be given accept an {@link IsWidget}
  * to show.
  */
 public interface AcceptsOneWidget {
diff --git a/user/src/com/google/gwt/user/client/ui/CaptionPanel.java b/user/src/com/google/gwt/user/client/ui/CaptionPanel.java
index e2b4f92..5fda0ff 100644
--- a/user/src/com/google/gwt/user/client/ui/CaptionPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/CaptionPanel.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -144,7 +144,7 @@
 
   /**
    * Constructs a CaptionPanel having the specified caption.
-   * 
+   *
    * @param caption the caption to display
    * @param asHTML if <code>true</code>, the <code>caption</code> param is
    *            interpreted as HTML; otherwise, <code>caption</code> is
@@ -174,9 +174,8 @@
   }
 
   /**
-   * @return the caption as HTML; note that if the caption was previously set
-   *         using {@link #setCaptionText(String)}, the return value is
-   *         undefined
+   * Returns the caption as HTML; note that if the caption was previously set
+   * using {@link #setCaptionText(String)}, the return value is undefined.
    */
   public String getCaptionHTML() {
     String html = legend.getInnerHTML();
@@ -185,9 +184,8 @@
   }
 
   /**
-   * @return the caption as text; note that if the caption was previously set
-   *         using {@link #setCaptionHTML(String)}, the return value is
-   *         undefined
+   * Returns the caption as text; note that if the caption was previously set
+   * using {@link #setCaptionHTML(String)}, the return value is undefined.
    */
   public String getCaptionText() {
     String text = legend.getInnerText();
@@ -197,7 +195,7 @@
 
   /**
    * Accesses the content widget, if present.
-   * 
+   *
    * @return the content widget specified previously in
    *         {@link #setContentWidget(Widget)}
    */
@@ -215,7 +213,7 @@
   /**
    * Removes the specified widget, although in practice the specified widget
    * must be the content widget.
-   * 
+   *
    * @param w the widget to remove; note that anything other than the Widget
    *            returned by {@link #getContentWidget()} will have no effect
    */
@@ -226,7 +224,7 @@
   /**
    * Sets the caption for the panel using an HTML fragment. Pass in empty string
    * to remove the caption completely, leaving just the unadorned panel.
-   * 
+   *
    * @param html HTML for the new caption; must not be <code>null</code>
    */
   public void setCaptionHTML(String html) {
@@ -257,7 +255,7 @@
 
   /**
    * Sets or replaces the content widget within the CaptionPanel.
-   * 
+   *
    * @param w the content widget to be set
    */
   public void setContentWidget(Widget w) {
diff --git a/user/src/com/google/gwt/user/client/ui/Composite.java b/user/src/com/google/gwt/user/client/ui/Composite.java
index 4f2c795..c90cc4e 100644
--- a/user/src/com/google/gwt/user/client/ui/Composite.java
+++ b/user/src/com/google/gwt/user/client/ui/Composite.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.user.client.ui;
 
+import com.google.gwt.event.logical.shared.AttachEvent;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 
@@ -109,12 +110,14 @@
 
     // Call onLoad() directly, because we're not calling super.onAttach().
     onLoad();
+    AttachEvent.fire(this, true);
   }
 
   @Override
   protected void onDetach() {
     try {
       onUnload();
+      AttachEvent.fire(this, false);
     } finally {
       // We don't want an exception in user code to keep us from calling the
       // super implementation (or event listeners won't get cleaned up and
diff --git a/user/src/com/google/gwt/user/client/ui/DoubleBox.java b/user/src/com/google/gwt/user/client/ui/DoubleBox.java
index 960f0ca..5c939f3 100644
--- a/user/src/com/google/gwt/user/client/ui/DoubleBox.java
+++ b/user/src/com/google/gwt/user/client/ui/DoubleBox.java
@@ -20,10 +20,6 @@
 import com.google.gwt.text.client.DoubleRenderer;
 
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * A ValueBox that uses {@link DoubleParser} and {@link DoubleRenderer}.
  */
 public class DoubleBox extends ValueBox<Double> {
diff --git a/user/src/com/google/gwt/user/client/ui/FormHandlerCollection.java b/user/src/com/google/gwt/user/client/ui/FormHandlerCollection.java
index abdd2db..31cb1a4 100644
--- a/user/src/com/google/gwt/user/client/ui/FormHandlerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/FormHandlerCollection.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -22,7 +22,7 @@
  * {@link com.google.gwt.user.client.ui.FormHandler FormHandlers}. This subclass
  * of ArrayList assumes that all items added to it will be of type
  * {@link com.google.gwt.user.client.ui.FormHandler}.
- * 
+ *
  * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
@@ -31,7 +31,7 @@
   /**
    * Fires a {@link FormHandler#onSubmitComplete(FormSubmitCompleteEvent)} on
    * all handlers in the collection.
-   * 
+   *
    * @param sender the object sending the event
    * @param results the results of the form submission
    * @deprecated {@link FormPanel} now implements all handler management internally
@@ -47,9 +47,9 @@
   /**
    * Fires a {@link FormHandler#onSubmit(FormSubmitEvent)} on all handlers in
    * the collection.
-   * 
+   *
    * @param sender the object sending the event
-   * @return <code>true</code> if the event should be cancelled
+   * @return <code>true</code> if the event should be canceled
    * @deprecated {@link FormPanel} now implements all handler management internally
    */
   @Deprecated
diff --git a/user/src/com/google/gwt/user/client/ui/FormPanel.java b/user/src/com/google/gwt/user/client/ui/FormPanel.java
index 2ad6825..697b158 100644
--- a/user/src/com/google/gwt/user/client/ui/FormPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/FormPanel.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -30,7 +30,7 @@
 
 /**
  * A panel that wraps its contents in an HTML &lt;FORM&gt; element.
- * 
+ *
  * <p>
  * This panel can be used to achieve interoperability with servers that accept
  * traditional HTML form encoding. The following widgets (those that implement
@@ -52,7 +52,7 @@
  * <i>only</i> useful when used within a FormPanel, because the browser will
  * only upload files using form submission.
  * </p>
- * 
+ *
  * <p>
  * <h3>Example</h3>
  * {@example com.google.gwt.examples.FormPanelExample}
@@ -73,7 +73,7 @@
 
     /**
      * Handler hook.
-     * 
+     *
      * @return the handler hook
      */
     static Type<SubmitCompleteHandler> getType() {
@@ -87,7 +87,7 @@
 
     /**
      * Create a submit complete event.
-     * 
+     *
      * @param resultsHtml the results from submitting the form
      */
     protected SubmitCompleteEvent(String resultsHtml) {
@@ -101,7 +101,7 @@
 
     /**
      * Gets the result text of the form submission.
-     * 
+     *
      * @return the result html, or <code>null</code> if there was an error
      *         reading it
      * @tip The result html can be <code>null</code> as a result of submitting a
@@ -123,7 +123,7 @@
   public interface SubmitCompleteHandler extends EventHandler {
     /**
      * Fired when a form has been submitted successfully.
-     * 
+     *
      * @param event the event
      */
     void onSubmitComplete(FormPanel.SubmitCompleteEvent event);
@@ -140,7 +140,7 @@
 
     /**
      * Handler hook.
-     * 
+     *
      * @return the handler hook
      */
     static Type<SubmitHandler> getType() {
@@ -167,7 +167,7 @@
 
     /**
      * Gets whether this form submit will be canceled.
-     * 
+     *
      * @return <code>true</code> if the form submit will be canceled
      */
     public boolean isCanceled() {
@@ -182,7 +182,7 @@
     /**
      * This method is used for legacy support and should be removed when
      * {@link FormHandler} is removed.
-     * 
+     *
      * @deprecated Use {@link FormPanel.SubmitEvent#cancel()} instead
      */
     @Deprecated
@@ -197,13 +197,13 @@
   public interface SubmitHandler extends EventHandler {
     /**
      *Fired when the form is submitted.
-     * 
+     *
      * <p>
      * The FormPanel must <em>not</em> be detached (i.e. removed from its parent
      * or otherwise disconnected from a {@link RootPanel}) until the submission
      * is complete. Otherwise, notification of submission will fail.
      * </p>
-     * 
+     *
      * @param event the event
      */
     void onSubmit(FormPanel.SubmitEvent event);
@@ -240,16 +240,16 @@
 
   /**
    * Creates a FormPanel that wraps an existing &lt;form&gt; element.
-   * 
+   *
    * This element must already be attached to the document. If the element is
    * removed from the document, you must call
    * {@link RootPanel#detachNow(Widget)}.
-   * 
+   *
    * <p>
    * The specified form element's target attribute will not be set, and the
    * {@link FormSubmitCompleteEvent} will not be fired.
    * </p>
-   * 
+   *
    * @param element the element to be wrapped
    */
   public static FormPanel wrap(Element element) {
@@ -267,18 +267,18 @@
 
   /**
    * Creates a FormPanel that wraps an existing &lt;form&gt; element.
-   * 
+   *
    * This element must already be attached to the document. If the element is
    * removed from the document, you must call
    * {@link RootPanel#detachNow(Widget)}.
-   * 
+   *
    * <p>
    * If the createIFrame parameter is set to <code>true</code>, then the wrapped
    * form's target attribute will be set to a hidden iframe. If not, the form's
    * target will be left alone, and the FormSubmitComplete event will not be
    * fired.
    * </p>
-   * 
+   *
    * @param element the element to be wrapped
    * @param createIFrame <code>true</code> to create an &lt;iframe&gt; element
    *          that will be targeted by this form
@@ -303,7 +303,7 @@
    * Creates a new FormPanel. When created using this constructor, it will be
    * submitted to a hidden &lt;iframe&gt; element, and the results of the
    * submission made available via {@link SubmitCompleteHandler}.
-   * 
+   *
    * <p>
    * The back-end server is expected to respond with a content-type of
    * 'text/html', meaning that the text returned will be treated as HTML. If any
@@ -312,7 +312,7 @@
    * {@link SubmitCompleteHandler#onSubmitComplete(com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent)
    * onSubmitComplete} event may not fire at all.
    * </p>
-   * 
+   *
    * @tip The initial implementation of FormPanel specified that the server
    *      respond with a content-type of 'text/plain'. This has been
    *      intentionally changed to specify 'text/html' because 'text/plain'
@@ -326,12 +326,12 @@
    * Creates a FormPanel that targets a {@link NamedFrame}. The target frame is
    * not physically attached to the form, and must therefore still be added to a
    * panel elsewhere.
-   * 
+   *
    * <p>
    * When the FormPanel targets an external frame in this way, it will not fire
    * the FormSubmitComplete event.
    * </p>
-   * 
+   *
    * @param frameTarget the {@link NamedFrame} to be targetted
    */
   public FormPanel(NamedFrame frameTarget) {
@@ -342,12 +342,12 @@
    * Creates a new FormPanel. When created using this constructor, it will be
    * submitted either by replacing the current page, or to the named
    * &lt;iframe&gt;.
-   * 
+   *
    * <p>
    * When the FormPanel targets an external frame in this way, it will not fire
    * the FormSubmitComplete event.
    * </p>
-   * 
+   *
    * @param target the name of the &lt;iframe&gt; to receive the results of the
    *          submission, or <code>null</code> to specify that the current page
    *          be replaced
@@ -360,12 +360,12 @@
   /**
    * This constructor may be used by subclasses to explicitly use an existing
    * element. This element must be a &lt;form&gt; element.
-   * 
+   *
    * <p>
    * The specified form element's target attribute will not be set, and the
    * {@link FormSubmitCompleteEvent} will not be fired.
    * </p>
-   * 
+   *
    * @param element the element to be used
    */
   protected FormPanel(Element element) {
@@ -375,14 +375,14 @@
   /**
    * This constructor may be used by subclasses to explicitly use an existing
    * element. This element must be a &lt;form&gt; element.
-   * 
+   *
    * <p>
    * If the createIFrame parameter is set to <code>true</code>, then the wrapped
    * form's target attribute will be set to a hidden iframe. If not, the form's
    * target will be left alone, and the FormSubmitComplete event will not be
    * fired.
    * </p>
-   * 
+   *
    * @param element the element to be used
    * @param createIFrame <code>true</code> to create an &lt;iframe&gt; element
    *          that will be targeted by this form
@@ -414,7 +414,7 @@
 
   /**
    * Adds a {@link SubmitCompleteEvent} handler.
-   * 
+   *
    * @param handler the handler
    * @return the handler registration used to remove the handler
    */
@@ -425,7 +425,7 @@
 
   /**
    * Adds a {@link SubmitEvent} handler.
-   * 
+   *
    * @param handler the handler
    * @return the handler registration used to remove the handler
    */
@@ -436,7 +436,7 @@
   /**
    * Gets the 'action' associated with this form. This is the URL to which it
    * will be submitted.
-   * 
+   *
    * @return the form's action
    */
   public String getAction() {
@@ -446,7 +446,7 @@
   /**
    * Gets the encoding used for submitting this form. This should be either
    * {@link #ENCODING_MULTIPART} or {@link #ENCODING_URLENCODED}.
-   * 
+   *
    * @return the form's encoding
    */
   public String getEncoding() {
@@ -456,7 +456,7 @@
   /**
    * Gets the HTTP method used for submitting this form. This should be either
    * {@link #METHOD_GET} or {@link #METHOD_POST}.
-   * 
+   *
    * @return the form's method
    */
   public String getMethod() {
@@ -467,7 +467,7 @@
    * Gets the form's 'target'. This is the name of the {@link NamedFrame} that
    * will receive the results of submission, or <code>null</code> if none has
    * been specified.
-   * 
+   *
    * @return the form's target.
    */
   public String getTarget() {
@@ -476,7 +476,7 @@
 
   /**
    * Fired when a form is submitted.
-   * 
+   *
    * @return true if the form is submitted, false if canceled
    */
   public boolean onFormSubmit() {
@@ -506,7 +506,7 @@
   /**
    * Sets the 'action' associated with this form. This is the URL to which it
    * will be submitted.
-   * 
+   *
    * @param url the form's action
    */
   public void setAction(String url) {
@@ -516,7 +516,7 @@
   /**
    * Sets the encoding used for submitting this form. This should be either
    * {@link #ENCODING_MULTIPART} or {@link #ENCODING_URLENCODED}.
-   * 
+   *
    * @param encodingType the form's encoding
    */
   public void setEncoding(String encodingType) {
@@ -526,7 +526,7 @@
   /**
    * Sets the HTTP method used for submitting this form. This should be either
    * {@link #METHOD_GET} or {@link #METHOD_POST}.
-   * 
+   *
    * @param method the form's method
    */
   public void setMethod(String method) {
@@ -535,7 +535,7 @@
 
   /**
    * Submits the form.
-   * 
+   *
    * <p>
    * The FormPanel must <em>not</em> be detached (i.e. removed from its parent
    * or otherwise disconnected from a {@link RootPanel}) until the submission is
@@ -602,7 +602,7 @@
 
   /**
    * Fire a {@link FormPanel.SubmitEvent}.
-   * 
+   *
    * @return true to continue, false if canceled
    */
   private boolean fireSubmitEvent() {
@@ -616,7 +616,7 @@
   }
 
   /**
-   * @return true if the form is submitted, false if canceled
+   * Returns true if the form is submitted, false if canceled.
    */
   private boolean onFormSubmitImpl() {
     return fireSubmitEvent();
diff --git a/user/src/com/google/gwt/user/client/ui/FormSubmitEvent.java b/user/src/com/google/gwt/user/client/ui/FormSubmitEvent.java
index c8fbb40..59b7216 100644
--- a/user/src/com/google/gwt/user/client/ui/FormSubmitEvent.java
+++ b/user/src/com/google/gwt/user/client/ui/FormSubmitEvent.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -27,7 +27,7 @@
 
   /**
    * Creates a new event with information about the source.
-   * 
+   *
    * @param source the object sending the event
    */
   public FormSubmitEvent(FormPanel source) {
@@ -35,17 +35,17 @@
   }
 
   /**
-   * Gets whether this form submit will be cancelled.
-   * 
-   * @return <code>true</code> if the form submit will be cancelled
+   * Gets whether this form submit will be canceled.
+   *
+   * @return <code>true</code> if the form submit will be canceled
    */
   public boolean isCancelled() {
     return cancel;
   }
 
   /**
-   * Sets whether the form submit will be cancelled.
-   * 
+   * Sets whether the form submit will be canceled.
+   *
    * @param cancel <code>true</code> to cancel the submit
    */
   public void setCancelled(boolean cancel) {
diff --git a/user/src/com/google/gwt/user/client/ui/HasAnimation.java b/user/src/com/google/gwt/user/client/ui/HasAnimation.java
index 350bac1..2ae126e 100644
--- a/user/src/com/google/gwt/user/client/ui/HasAnimation.java
+++ b/user/src/com/google/gwt/user/client/ui/HasAnimation.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,14 +21,14 @@
  */
 public interface HasAnimation {
   /**
-   * @return true if animations are enabled, false if not
+   * Returns true if animations are enabled, false if not.
    */
   boolean isAnimationEnabled();
 
   /**
    * Enable or disable animations.
-   * 
+   *
    * @param enable true to enable, false to disable
    */
   void setAnimationEnabled(boolean enable);
-}
\ No newline at end of file
+}
diff --git a/user/src/com/google/gwt/user/client/ui/HasEnabled.java b/user/src/com/google/gwt/user/client/ui/HasEnabled.java
index cf5adb6..835bbc2 100644
--- a/user/src/com/google/gwt/user/client/ui/HasEnabled.java
+++ b/user/src/com/google/gwt/user/client/ui/HasEnabled.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -22,13 +22,13 @@
 public interface HasEnabled {
 
   /**
-   * @return true if the widget is enabled, false if not
+   * Returns true if the widget is enabled, false if not.
    */
   boolean isEnabled();
 
   /**
    * Sets whether this widget is enabled.
-   * 
+   *
    * @param enabled <code>true</code> to enable the widget, <code>false</code>
    *          to disable it
    */
diff --git a/user/src/com/google/gwt/user/client/ui/IntegerBox.java b/user/src/com/google/gwt/user/client/ui/IntegerBox.java
index 0f6b1f6..350f82a 100644
--- a/user/src/com/google/gwt/user/client/ui/IntegerBox.java
+++ b/user/src/com/google/gwt/user/client/ui/IntegerBox.java
@@ -20,10 +20,6 @@
 import com.google.gwt.text.client.IntegerRenderer;
 
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * A ValueBox that uses {@link IntegerParser} and {@link IntegerRenderer}.
  */
 public class IntegerBox extends ValueBox<Integer> {
diff --git a/user/src/com/google/gwt/user/client/ui/IsWidget.java b/user/src/com/google/gwt/user/client/ui/IsWidget.java
index 85331ca..78d0b3f 100644
--- a/user/src/com/google/gwt/user/client/ui/IsWidget.java
+++ b/user/src/com/google/gwt/user/client/ui/IsWidget.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,9 +21,9 @@
  * ability to provide a mock view instance in JRE unit tests.
  */
 public interface IsWidget {
-  
+
   /**
-   * @return the {@link Widget} aspect of the receiver
+   * Returns the {@link Widget} aspect of the receiver.
    */
   Widget asWidget();
 }
diff --git a/user/src/com/google/gwt/user/client/ui/LongBox.java b/user/src/com/google/gwt/user/client/ui/LongBox.java
index 0121583..5e4820f 100644
--- a/user/src/com/google/gwt/user/client/ui/LongBox.java
+++ b/user/src/com/google/gwt/user/client/ui/LongBox.java
@@ -20,10 +20,6 @@
 import com.google.gwt.text.client.LongRenderer;
 
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * A ValueBox that uses {@link LongParser} and {@link LongRenderer}.
  */
 public class LongBox extends ValueBox<Long> {
diff --git a/user/src/com/google/gwt/user/client/ui/MenuBar.java b/user/src/com/google/gwt/user/client/ui/MenuBar.java
index 68ee719..fc3061a 100644
--- a/user/src/com/google/gwt/user/client/ui/MenuBar.java
+++ b/user/src/com/google/gwt/user/client/ui/MenuBar.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -44,11 +44,11 @@
  * A standard menu bar widget. A menu bar can contain any number of menu items,
  * each of which can either fire a {@link com.google.gwt.user.client.Command} or
  * open a cascaded menu bar.
- * 
+ *
  * <p>
  * <img class='gallery' src='doc-files/MenuBar.png'/>
  * </p>
- * 
+ *
  * <h3>CSS Style Rules</h3>
  * <dl>
  * <dt>.gwt-MenuBar</dt>
@@ -102,12 +102,12 @@
  * <dt>.gwt-MenuBarPopup .menuPopupBottomRightInner</dt>
  * <dd>the inner element of the cell</dd>
  * </dl>
- * 
+ *
  * <p>
  * <h3>Example</h3>
  * {@example com.google.gwt.examples.MenuBarExample}
  * </p>
- * 
+ *
  * <h3>Use in UiBinder Templates</h3>
  * <p>
  * MenuBar elements in UiBinder template files can have a <code>vertical</code>
@@ -115,7 +115,7 @@
  * elements as children. MenuItems may contain HTML and MenuBars.
  * <p>
  * For example:
- * 
+ *
  * <pre>
  * &lt;g:MenuBar>
  *   &lt;g:MenuItem>Higgledy
@@ -150,14 +150,14 @@
 
   /**
    * An {@link ImageBundle} that provides images for {@link MenuBar}.
-   * 
+   *
    * @deprecated replaced by {@link Resources}
    */
   @Deprecated
   public interface MenuBarImages extends ImageBundle {
     /**
      * An image indicating a {@link MenuItem} has an associated submenu.
-     * 
+     *
      * @return a prototype of this image
      */
     AbstractImagePrototype menuBarSubMenuIcon();
@@ -206,7 +206,7 @@
 
   /**
    * Creates an empty menu bar.
-   * 
+   *
    * @param vertical <code>true</code> to orient the menu bar vertically
    */
   public MenuBar(boolean vertical) {
@@ -216,7 +216,7 @@
   /**
    * Creates an empty menu bar that uses the specified image bundle for menu
    * images.
-   * 
+   *
    * @param vertical <code>true</code> to orient the menu bar vertically
    * @param images a bundle that provides images for this menu
    * @deprecated replaced by {@link #MenuBar(boolean, Resources)}
@@ -229,7 +229,7 @@
   /**
    * Creates an empty menu bar that uses the specified ClientBundle for menu
    * images.
-   * 
+   *
    * @param vertical <code>true</code> to orient the menu bar vertically
    * @param resources a bundle that provides images for this menu
    */
@@ -241,7 +241,7 @@
   /**
    * Creates an empty horizontal menu bar that uses the specified image bundle
    * for menu images.
-   * 
+   *
    * @param images a bundle that provides images for this menu
    * @deprecated replaced by {@link #MenuBar(Resources)}
    */
@@ -253,7 +253,7 @@
   /**
    * Creates an empty horizontal menu bar that uses the specified ClientBundle
    * for menu images.
-   * 
+   *
    * @param resources a bundle that provides images for this menu
    */
   public MenuBar(Resources resources) {
@@ -266,7 +266,7 @@
 
   /**
    * Adds a menu item to the bar.
-   * 
+   *
    * @param item the item to be added
    * @return the {@link MenuItem} object
    */
@@ -275,9 +275,9 @@
   }
 
   /**
-   * Adds a menu item to the bar containing SafeHtml, that will fire the given 
+   * Adds a menu item to the bar containing SafeHtml, that will fire the given
    * command when it is selected.
-   * 
+   *
    * @param html the item's html text
    * @param cmd the command to be fired
    * @return the {@link MenuItem} object created
@@ -289,7 +289,7 @@
   /**
    * Adds a menu item to the bar, that will fire the given command when it is
    * selected.
-   * 
+   *
    * @param text the item's text
    * @param asHTML <code>true</code> to treat the specified text as html
    * @param cmd the command to be fired
@@ -302,7 +302,7 @@
   /**
    * Adds a menu item to the bar, that will open the specified menu when it is
    * selected.
-   * 
+   *
    * @param html the item's html text
    * @param popup the menu to be cascaded from it
    * @return the {@link MenuItem} object created
@@ -314,7 +314,7 @@
   /**
    * Adds a menu item to the bar, that will open the specified menu when it is
    * selected.
-   * 
+   *
    * @param text the item's text
    * @param asHTML <code>true</code> to treat the specified text as html
    * @param popup the menu to be cascaded from it
@@ -327,7 +327,7 @@
   /**
    * Adds a menu item to the bar, that will fire the given command when it is
    * selected.
-   * 
+   *
    * @param text the item's text
    * @param cmd the command to be fired
    * @return the {@link MenuItem} object created
@@ -339,7 +339,7 @@
   /**
    * Adds a menu item to the bar, that will open the specified menu when it is
    * selected.
-   * 
+   *
    * @param text the item's text
    * @param popup the menu to be cascaded from it
    * @return the {@link MenuItem} object created
@@ -351,7 +351,7 @@
   /**
    * Adds a thin line to the {@link MenuBar} to separate sections of
    * {@link MenuItem}s.
-   * 
+   *
    * @return the {@link MenuItemSeparator} object created
    */
   public MenuItemSeparator addSeparator() {
@@ -361,7 +361,7 @@
   /**
    * Adds a thin line to the {@link MenuBar} to separate sections of
    * {@link MenuItem}s.
-   * 
+   *
    * @param separator the {@link MenuItemSeparator} to be added
    * @return the {@link MenuItemSeparator} object
    */
@@ -428,7 +428,7 @@
   /**
    * Gets whether this menu bar's child menus will open when the mouse is moved
    * over it.
-   * 
+   *
    * @return <code>true</code> if child menus will auto-open
    */
   public boolean getAutoOpen() {
@@ -437,7 +437,7 @@
 
   /**
    * Get the index of a {@link MenuItem}.
-   * 
+   *
    * @return the index of the item, or -1 if it is not contained by this MenuBar
    */
   public int getItemIndex(MenuItem item) {
@@ -446,7 +446,7 @@
 
   /**
    * Get the index of a {@link MenuItemSeparator}.
-   * 
+   *
    * @return the index of the separator, or -1 if it is not contained by this
    *         MenuBar
    */
@@ -456,7 +456,7 @@
 
   /**
    * Adds a menu item to the bar at a specific index.
-   * 
+   *
    * @param item the item to be inserted
    * @param beforeIndex the index where the item should be inserted
    * @return the {@link MenuItem} object
@@ -491,8 +491,8 @@
   /**
    * Adds a thin line to the {@link MenuBar} to separate sections of
    * {@link MenuItem}s at the specified index.
-   * 
-   * @param beforeIndex the index where the seperator should be inserted
+   *
+   * @param beforeIndex the index where the separator should be inserted
    * @return the {@link MenuItemSeparator} object
    * @throws IndexOutOfBoundsException if <code>beforeIndex</code> is out of
    *           range
@@ -504,9 +504,9 @@
   /**
    * Adds a thin line to the {@link MenuBar} to separate sections of
    * {@link MenuItem}s at the specified index.
-   * 
+   *
    * @param separator the {@link MenuItemSeparator} to be inserted
-   * @param beforeIndex the index where the seperator should be inserted
+   * @param beforeIndex the index where the separator should be inserted
    * @return the {@link MenuItemSeparator} object
    * @throws IndexOutOfBoundsException if <code>beforeIndex</code> is out of
    *           range
@@ -534,7 +534,7 @@
   /**
    * Check whether or not this widget will steal keyboard focus when the mouse
    * hovers over it.
-   * 
+   *
    * @return true if enabled, false if disabled
    */
   public boolean isFocusOnHoverEnabled() {
@@ -653,7 +653,7 @@
             break;
           case KeyCodes.KEY_TAB:
             closeAllParentsAndChildren();
-            break;  
+            break;
           case KeyCodes.KEY_ENTER:
             if (!selectFirstItemIfNoneSelected()) {
               doItemAction(selectedItem, true, true);
@@ -670,7 +670,7 @@
 
   /**
    * Closes the menu bar.
-   * 
+   *
    * @deprecated Use {@link #addCloseHandler(CloseHandler)} instead
    */
   @Deprecated
@@ -693,7 +693,7 @@
 
   /**
    * Removes the specified menu item from the bar.
-   * 
+   *
    * @param item the item to be removed
    */
   public void removeItem(MenuItem item) {
@@ -711,7 +711,7 @@
 
   /**
    * Removes the specified {@link MenuItemSeparator} from the bar.
-   * 
+   *
    * @param separator the separator to be removed
    */
   public void removeSeparator(MenuItemSeparator separator) {
@@ -722,7 +722,7 @@
 
   /**
    * Select the given MenuItem, which must be a direct child of this MenuBar.
-   * 
+   *
    * @param item the MenuItem to select, or null to clear selection
    */
   public void selectItem(MenuItem item) {
@@ -771,7 +771,7 @@
   /**
    * Sets whether this menu bar's child menus will open when the mouse is moved
    * over it.
-   * 
+   *
    * @param autoOpen <code>true</code> to cause child menus to auto-open
    */
   public void setAutoOpen(boolean autoOpen) {
@@ -783,7 +783,7 @@
    * allows the MenuBar to respond to keyboard events without the user having to
    * click on it, but it will steal focus from other elements on the page.
    * Enabled by default.
-   * 
+   *
    * @param enabled true to enable, false to disable
    */
   public void setFocusOnHoverEnabled(boolean enabled) {
@@ -794,7 +794,7 @@
    * Returns a list containing the <code>MenuItem</code> objects in the menu
    * bar. If there are no items in the menu bar, then an empty <code>List</code>
    * object will be returned.
-   * 
+   *
    * @return a list containing the <code>MenuItem</code> objects in the menu bar
    */
   protected List<MenuItem> getItems() {
@@ -805,7 +805,7 @@
    * Returns the <code>MenuItem</code> that is currently selected (highlighted)
    * by the user. If none of the items in the menu are currently selected, then
    * <code>null</code> will be returned.
-   * 
+   *
    * @return the <code>MenuItem</code> that is currently selected, or
    *         <code>null</code> if no items are currently selected
    */
@@ -828,7 +828,7 @@
    * <ul>
    * <li>-item# = the {@link MenuItem} at the specified index.</li>
    * </ul>
-   * 
+   *
    * @see UIObject#onEnsureDebugId(String)
    */
   @Override
@@ -867,7 +867,7 @@
    * popup associated with it, the popup will be shown. If it has a command
    * associated with it, and 'fireCommand' is true, then the command will be
    * fired. Popups associated with other items will be hidden.
-   * 
+   *
    * @param item the item whose popup is to be shown. @param fireCommand
    * <code>true</code> if the item's command should be fired, <code>false</code>
    * otherwise.
@@ -966,7 +966,7 @@
 
   /**
    * Set the IDs of the menu items.
-   * 
+   *
    * @param baseID the base ID
    */
   void setMenuItemDebugIds(String baseID) {
@@ -979,7 +979,7 @@
 
   /**
    * Show or hide the icon used for items with a submenu.
-   * 
+   *
    * @param item the item with or without a submenu
    */
   void updateSubmenuIcon(MenuItem item) {
@@ -1018,8 +1018,8 @@
   /**
    * Physically add the td element of a {@link MenuItem} or
    * {@link MenuItemSeparator} to this {@link MenuBar}.
-   * 
-   * @param beforeIndex the index where the seperator should be inserted
+   *
+   * @param beforeIndex the index where the separator should be inserted
    * @param tdElem the td element to be added
    */
   private void addItemElement(int beforeIndex, Element tdElem) {
@@ -1035,7 +1035,7 @@
 
   /**
    * Closes this menu (if it is a popup).
-   * 
+   *
    * @param focus true to move focus to the parent
    */
   private void close(boolean focus) {
@@ -1267,7 +1267,7 @@
   /**
    * Removes the specified item from the {@link MenuBar} and the physical DOM
    * structure.
-   * 
+   *
    * @param item the item to be removed
    * @return true if the item was removed
    */
@@ -1286,7 +1286,7 @@
   /**
    * Selects the first item in the menu if no items are currently selected. Has
    * no effect if there are no items.
-   * 
+   *
    * @return true if no item was previously selected, false otherwise
    */
   private boolean selectFirstItemIfNoneSelected() {
@@ -1378,7 +1378,7 @@
 
   /**
    * Set the colspan of a {@link MenuItem} or {@link MenuItemSeparator}.
-   * 
+   *
    * @param item the {@link MenuItem} or {@link MenuItemSeparator}
    * @param colspan the colspan
    */
diff --git a/user/src/com/google/gwt/user/client/ui/MouseWheelVelocity.java b/user/src/com/google/gwt/user/client/ui/MouseWheelVelocity.java
index 86732d3..3cc8703 100644
--- a/user/src/com/google/gwt/user/client/ui/MouseWheelVelocity.java
+++ b/user/src/com/google/gwt/user/client/ui/MouseWheelVelocity.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2007 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -22,7 +22,7 @@
  * Encapsulates the direction and velocity of mouse wheel events. Not all
  * combinations of browser and user input devices can generate all combinations
  * of direction or range of velocity information.
- * 
+ *
  * @see com.google.gwt.user.client.DOM#eventGetMouseWheelVelocityY An
  *      explanation of the units used for mouse wheel velocity.
  * @deprecated use
@@ -39,7 +39,7 @@
 
   /**
    * Construct the higher-level view of the original ONMOUSEWHEEL Event.
-   * 
+   *
    * @param e the event
    */
   public MouseWheelVelocity(Event e) {
@@ -57,10 +57,10 @@
   }
 
   /**
-   * @return the change in the mouse wheel position along the Y-axis; positive
-   *         if the mouse wheel is moving north (toward the top of the screen)
-   *         or negative if the mouse wheel is moving south (toward the bottom
-   *         of the screen)
+   * Returns the change in the mouse wheel position along the Y-axis; positive if
+   * the mouse wheel is moving north (toward the top of the screen) or negative
+   * if the mouse wheel is moving south (toward the bottom of the screen).
+   *
    * @deprecated use
    *             {@link com.google.gwt.event.dom.client.MouseWheelEvent#getDeltaY()}
    *             instead
@@ -78,7 +78,7 @@
   /**
    * Convenience method that returns <code>true</code> if {@link #getDeltaY()}
    * is a negative value.
-   * 
+   *
    * @return <code>true</code> if the velocity includes a component directed
    *         toword the top of the screen
    * @deprecated use
@@ -93,7 +93,7 @@
   /**
    * Convenience method that returns <code>true</code> if {@link #getDeltaY()}
    * is a positive value.
-   * 
+   *
    * @return <code>true</code> if the velocity includes a component directed
    *         toword the bottom of the screen
    * @deprecated use
diff --git a/user/src/com/google/gwt/user/client/ui/MultiWordSuggestOracle.java b/user/src/com/google/gwt/user/client/ui/MultiWordSuggestOracle.java
index ea960ce..daa7ad1 100644
--- a/user/src/com/google/gwt/user/client/ui/MultiWordSuggestOracle.java
+++ b/user/src/com/google/gwt/user/client/ui/MultiWordSuggestOracle.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2007 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -77,7 +77,7 @@
 
     /**
      * Constructor for <code>MultiWordSuggestion</code>.
-     * 
+     *
      * @param replacementString the string to enter into the SuggestBox's text
      *          box if the suggestion is chosen
      * @param displayString the display string
@@ -97,21 +97,21 @@
   }
 
   /**
-   * A class reresenting the bounds of a word within a string. 
-   * 
+   * A class reresenting the bounds of a word within a string.
+   *
    * The bounds are represented by a {@code startIndex} (inclusive) and
    * an {@code endIndex} (exclusive).
    */
   private static class WordBounds implements Comparable<WordBounds> {
-  
+
     final int startIndex;
     final int endIndex;
-    
+
     public WordBounds(int startIndex, int length) {
       this.startIndex = startIndex;
       this.endIndex = startIndex + length;
     }
-    
+
     public int compareTo(WordBounds that) {
       int comparison = this.startIndex - that.startIndex;
       if (comparison == 0) {
@@ -120,7 +120,7 @@
       return comparison;
     }
   }
-  
+
   private static final char WHITESPACE_CHAR = ' ';
   private static final String WHITESPACE_STRING = " ";
 
@@ -155,7 +155,7 @@
   /**
    * Constructor for <code>MultiWordSuggestOracle</code>. This uses a space as
    * the whitespace character.
-   * 
+   *
    * @see #MultiWordSuggestOracle(String)
    */
   public MultiWordSuggestOracle() {
@@ -172,7 +172,7 @@
    * matching. For example, the query "bar" would match "bar", but not "foo
    * bar".
    * </p>
-   * 
+   *
    * @param whitespaceChars the characters to treat as word separators
    */
   public MultiWordSuggestOracle(String whitespaceChars) {
@@ -184,7 +184,7 @@
 
   /**
    * Adds a suggestion to the oracle. Each suggestion must be plain text.
-   * 
+   *
    * @param suggestion the suggestion
    */
   public void add(String suggestion) {
@@ -208,7 +208,7 @@
 
   /**
    * Adds all suggestions specified. Each suggestion must be plain text.
-   * 
+   *
    * @param collection the collection
    */
   public final void addAll(Collection<String> collection) {
@@ -255,7 +255,7 @@
     }
 
     // Convert candidates to suggestions.
-    List<MultiWordSuggestion> suggestions = 
+    List<MultiWordSuggestion> suggestions =
         convertToFormattedSuggestions(query, candidates);
 
     Response response = new Response(suggestions);
@@ -266,7 +266,7 @@
 
   /**
    * Sets the default suggestion collection.
-   * 
+   *
    * @param suggestionList the default list of suggestions
    */
   public void setDefaultSuggestions(Collection<Suggestion> suggestionList) {
@@ -275,9 +275,9 @@
 
   /**
    * A convenience method to set default suggestions using plain text strings.
-   * 
+   *
    * Note to use this method each default suggestion must be plain text.
-   * 
+   *
    * @param suggestionList the default list of suggestions
    */
   public final void setDefaultSuggestionsFromText(
@@ -291,11 +291,11 @@
 
   /**
    * Creates the suggestion based on the given replacement and display strings.
-   * 
+   *
    * @param replacementString the string to enter into the SuggestBox's text box
    *          if the suggestion is chosen
    * @param displayString the display string
-   * 
+   *
    * @return the suggestion created
    */
   protected MultiWordSuggestion createSuggestion(String replacementString,
@@ -306,7 +306,7 @@
   /**
    * Returns real suggestions with the given query in <code>strong</code> html
    * font.
-   * 
+   *
    * @param query query string
    * @param candidates candidates
    * @return real suggestions
@@ -324,14 +324,14 @@
 
       // Create strong search string.
       SafeHtmlBuilder accum = new SafeHtmlBuilder();
-      
+
       String[] searchWords = query.split(WHITESPACE_STRING);
       while (true) {
         WordBounds wordBounds = findNextWord(candidate, searchWords, index);
         if (wordBounds == null) {
           break;
         }
-        if (wordBounds.startIndex == 0 || 
+        if (wordBounds.startIndex == 0 ||
             WHITESPACE_CHAR == candidate.charAt(wordBounds.startIndex - 1)) {
           String part1 = formattedSuggestion.substring(cursor, wordBounds.startIndex);
           String part2 = formattedSuggestion.substring(wordBounds.startIndex,
@@ -344,12 +344,12 @@
         }
         index = wordBounds.endIndex;
       }
-      
+
       // Check to make sure the search was found in the string.
       if (cursor == 0) {
         continue;
       }
-      
+
       accum.appendEscaped(formattedSuggestion.substring(cursor));
       MultiWordSuggestion suggestion = createSuggestion(formattedSuggestion,
           accum.toSafeHtml().asString());
@@ -404,7 +404,7 @@
 
   /**
    * Creates a set of potential candidates that match the given query.
-   * 
+   *
    * @param query query string
    * @return possible candidates
    */
@@ -423,11 +423,11 @@
     }
     return candidateSet;
   }
-  
+
   /**
-   * @return a {@link WordBounds} representing the first word in 
-   *     {@code searchWords} that is found in candidate starting at 
-   *     {@code indexToStartAt} or {@code null} if no words could be found.
+   * Returns a {@link WordBounds} representing the first word in {@code
+   * searchWords} that is found in candidate starting at {@code indexToStartAt}
+   * or {@code null} if no words could be found.
    */
   private WordBounds findNextWord(String candidate, String[] searchWords, int indexToStartAt) {
     WordBounds firstWord = null;
@@ -442,7 +442,7 @@
     }
     return firstWord;
   }
-  
+
   /**
    * Normalize the search key by making it lower case, removing multiple spaces,
    * apply whitespace masks, and make it lower case.
diff --git a/user/src/com/google/gwt/user/client/ui/NotificationMole.java b/user/src/com/google/gwt/user/client/ui/NotificationMole.java
index 47a726f..85c1449 100644
--- a/user/src/com/google/gwt/user/client/ui/NotificationMole.java
+++ b/user/src/com/google/gwt/user/client/ui/NotificationMole.java
@@ -27,11 +27,6 @@
 import com.google.gwt.user.client.Timer;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Simple widget for providing notification feedback.
  */
 public class NotificationMole extends Composite {
diff --git a/user/src/com/google/gwt/user/client/ui/Panel.java b/user/src/com/google/gwt/user/client/ui/Panel.java
index 6aa07c8..42515a7 100644
--- a/user/src/com/google/gwt/user/client/ui/Panel.java
+++ b/user/src/com/google/gwt/user/client/ui/Panel.java
@@ -176,26 +176,6 @@
   }
 
   /**
-   * A Panel's onLoad method will be called after all of its children are
-   * attached.
-   * 
-   * @see Widget#onLoad()
-   */
-  @Override
-  protected void onLoad() {
-  }
-
-  /**
-   * A Panel's onUnload method will be called before its children become
-   * detached themselves.
-   * 
-   * @see Widget#onLoad()
-   */
-  @Override
-  protected void onUnload() {
-  }
-
-  /**
    * <p>
    * This method must be called as part of the remove method of any Panel. It
    * ensures that the Widget's parent is cleared. This method should be called
diff --git a/user/src/com/google/gwt/user/client/ui/PopupPanel.java b/user/src/com/google/gwt/user/client/ui/PopupPanel.java
index 9d1cd74..19e7931 100644
--- a/user/src/com/google/gwt/user/client/ui/PopupPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/PopupPanel.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -50,7 +50,7 @@
 /**
  * A panel that can "pop up" over other widgets. It overlays the browser's
  * client area (and any previously-created popups).
- * 
+ *
  * <p>
  * A PopupPanel should not generally be added to other panels; rather, it should
  * be shown and hidden using the {@link #show()} and {@link #hide()} methods.
@@ -64,7 +64,7 @@
  * <p>
  * <img class='gallery' src='doc-files/PopupPanel.png'/>
  * </p>
- * 
+ *
  * <p>
  * The PopupPanel can be optionally displayed with a "glass" element behind it,
  * which is commonly used to gray out the widgets behind it. It can be enabled
@@ -72,7 +72,7 @@
  * "gwt-PopupPanelGlass", which can be changed using
  * {@link #setGlassStyleName(String)}.
  * </p>
- * 
+ *
  * <p>
  * <h3>Example</h3>
  * {@example com.google.gwt.examples.PopupPanelExample}
@@ -102,7 +102,7 @@
      * before the PopupPanel is shown. The offsetWidth and offsetHeight values
      * of the PopupPanel are made available to allow for positioning based on
      * its size.
-     * 
+     *
      * @param offsetWidth the offsetWidth of the PopupPanel
      * @param offsetHeight the offsetHeight of the PopupPanel
      * @see PopupPanel#setPopupPositionAndShow(PositionCallback)
@@ -112,7 +112,7 @@
 
   /**
    * The type of animation to use when opening the popup.
-   * 
+   *
    * <ul>
    * <li>CENTER - Expand from the center of the popup</li>
    * <li>ONE_WAY_CORNER - Expand from the top left corner, do not animate hiding
@@ -163,7 +163,7 @@
 
     /**
      * Create a new {@link ResizeAnimation}.
-     * 
+     *
      * @param panel the panel to affect
      */
     public ResizeAnimation(PopupPanel panel) {
@@ -174,7 +174,7 @@
      * Open or close the content. This method always called immediately after
      * the PopupPanel showing state has changed, so we base the animation on the
      * current state.
-     * 
+     *
      * @param showing true if the popup is showing, false if not
      */
     public void setState(boolean showing, boolean isUnloading) {
@@ -299,7 +299,7 @@
     }
 
     /**
-     * @return a rect string
+     * Returns a rect string.
      */
     private String getRectString(int top, int right, int bottom, int left) {
       return "rect(" + top + "px, " + right + "px, " + bottom + "px, " + left
@@ -457,7 +457,7 @@
 
   /**
    * Creates an empty popup panel, specifying its "auto-hide" property.
-   * 
+   *
    * @param autoHide <code>true</code> if the popup should be automatically
    *          hidden when the user clicks outside of it or the history token
    *          changes.
@@ -471,7 +471,7 @@
   /**
    * Creates an empty popup panel, specifying its "auto-hide" and "modal"
    * properties.
-   * 
+   *
    * @param autoHide <code>true</code> if the popup should be automatically
    *          hidden when the user clicks outside of it or the history token
    *          changes.
@@ -486,7 +486,7 @@
   /**
    * Mouse events that occur within an autoHide partner will not hide a panel
    * set to autoHide.
-   * 
+   *
    * @param partner the auto hide partner to add
    */
   public void addAutoHidePartner(Element partner) {
@@ -545,7 +545,7 @@
   /**
    * Gets the style name to be used on the glass element. By default, this is
    * "gwt-PopupPanelGlass".
-   * 
+   *
    * @return the glass element's style name
    */
   public String getGlassStyleName() {
@@ -556,7 +556,7 @@
    * Gets the panel's offset height in pixels. Calls to
    * {@link #setHeight(String)} before the panel's child widget is set will not
    * influence the offset height.
-   * 
+   *
    * @return the object's offset height
    */
   @Override
@@ -567,7 +567,7 @@
   /**
    * Gets the panel's offset width in pixels. Calls to {@link #setWidth(String)}
    * before the panel's child widget is set will not influence the offset width.
-   * 
+   *
    * @return the object's offset width
    */
   @Override
@@ -577,7 +577,7 @@
 
   /**
    * Gets the popup's left position relative to the browser's client area.
-   * 
+   *
    * @return the popup's left position
    */
   public int getPopupLeft() {
@@ -586,7 +586,7 @@
 
   /**
    * Gets the popup's top position relative to the browser's client area.
-   * 
+   *
    * @return the popup's top position
    */
   public int getPopupTop() {
@@ -609,7 +609,7 @@
   /**
    * Hides the popup and detaches it from the page. This has no effect if it is
    * not currently showing.
-   * 
+   *
    * @param autoClosed the value that will be passed to
    *          {@link CloseHandler#onClose(CloseEvent)} when the popup is closed
    */
@@ -628,7 +628,7 @@
   /**
    * Returns <code>true</code> if the popup should be automatically hidden when
    * the user clicks outside of it.
-   * 
+   *
    * @return true if autoHide is enabled, false if disabled
    */
   public boolean isAutoHideEnabled() {
@@ -639,7 +639,7 @@
    * Returns <code>true</code> if the popup should be automatically hidden when
    * the history token changes, such as when the user presses the browser's back
    * button.
-   * 
+   *
    * @return true if enabled, false if disabled
    */
   public boolean isAutoHideOnHistoryEventsEnabled() {
@@ -649,7 +649,7 @@
   /**
    * Returns <code>true</code> if a glass element will be displayed under the
    * {@link PopupPanel}.
-   * 
+   *
    * @return true if enabled
    */
   public boolean isGlassEnabled() {
@@ -659,7 +659,7 @@
   /**
    * Returns <code>true</code> if keyboard or mouse events that do not target
    * the PopupPanel or its children should be ignored.
-   * 
+   *
    * @return true if popup is modal, false if not
    */
   public boolean isModal() {
@@ -669,7 +669,7 @@
   /**
    * Returns <code>true</code> if the popup should preview all native events,
    * even if the event has already been consumed by another popup.
-   * 
+   *
    * @return true if previewAllNativeEvents is enabled, false if disabled
    */
   public boolean isPreviewingAllNativeEvents() {
@@ -678,7 +678,7 @@
 
   /**
    * Determines whether or not this popup is showing.
-   * 
+   *
    * @return <code>true</code> if the popup is showing
    * @see #show()
    * @see #hide()
@@ -692,7 +692,7 @@
    * the <code>visibility</code> style attribute, which is set in the
    * {@link #setVisible(boolean)} method. If you want to know if the popup is
    * attached to the page, use {@link #isShowing()} instead.
-   * 
+   *
    * @return <code>true</code> if the object is visible
    * @see #setVisible(boolean)
    */
@@ -712,7 +712,7 @@
   /**
    * Popups get an opportunity to preview keyboard events before they are passed
    * to a widget contained by the Popup.
-   * 
+   *
    * @param key the key code of the depressed key
    * @param modifiers keyboard modifiers, as specified in
    *          {@link com.google.gwt.event.dom.client.KeyCodes}.
@@ -727,7 +727,7 @@
   /**
    * Popups get an opportunity to preview keyboard events before they are passed
    * to a widget contained by the Popup.
-   * 
+   *
    * @param key the unicode character pressed
    * @param modifiers keyboard modifiers, as specified in
    *          {@link com.google.gwt.event.dom.client.KeyCodes}.
@@ -742,7 +742,7 @@
   /**
    * Popups get an opportunity to preview keyboard events before they are passed
    * to a widget contained by the Popup.
-   * 
+   *
    * @param key the key code of the released key
    * @param modifiers keyboard modifiers, as specified in
    *          {@link com.google.gwt.event.dom.client.KeyCodes}.
@@ -756,7 +756,7 @@
 
   /**
    * Remove an autoHide partner.
-   * 
+   *
    * @param partner the auto hide partner to remove
    */
   public void removeAutoHidePartner(Element partner) {
@@ -782,7 +782,7 @@
   /**
    * Enable or disable the autoHide feature. When enabled, the popup will be
    * automatically hidden when the user clicks outside of it.
-   * 
+   *
    * @param autoHide true to enable autoHide, false to disable
    */
   public void setAutoHideEnabled(boolean autoHide) {
@@ -793,7 +793,7 @@
    * Enable or disable autoHide on history change events. When enabled, the
    * popup will be automatically hidden when the history token changes, such as
    * when the user presses the browser's back button. Disabled by default.
-   * 
+   *
    * @param enabled true to enable, false to disable
    */
   public void setAutoHideOnHistoryEventsEnabled(boolean enabled) {
@@ -804,7 +804,7 @@
    * When enabled, the background will be blocked with a semi-transparent pane
    * the next time it is shown. If the PopupPanel is already visible, the glass
    * will not be displayed until it is hidden and shown again.
-   * 
+   *
    * @param enabled true to enable, false to disable
    */
   public void setGlassEnabled(boolean enabled) {
@@ -822,7 +822,7 @@
   /**
    * Sets the style name to be used on the glass element. By default, this is
    * "gwt-PopupPanelGlass".
-   * 
+   *
    * @param glassStyleName the glass element's style name
    */
   public void setGlassStyleName(String glassStyleName) {
@@ -836,14 +836,14 @@
    * Sets the height of the panel's child widget. If the panel's child widget
    * has not been set, the height passed in will be cached and used to set the
    * height immediately after the child widget is set.
-   * 
+   *
    * <p>
    * Note that subclasses may have a different behavior. A subclass may decide
    * not to change the height of the child widget. It may instead decide to
    * change the height of an internal panel widget, which contains the child
    * widget.
    * </p>
-   * 
+   *
    * @param height the object's new height, in CSS units (e.g. "10px", "1em")
    */
   @Override
@@ -859,7 +859,7 @@
   /**
    * When the popup is modal, keyboard or mouse events that do not target the
    * PopupPanel or its children will be ignored.
-   * 
+   *
    * @param modal true to make the popup modal
    */
   public void setModal(boolean modal) {
@@ -869,7 +869,7 @@
   /**
    * Sets the popup's position relative to the browser's client area. The
    * popup's position may be set before calling {@link #show()}.
-   * 
+   *
    * @param left the left position, in pixels
    * @param top the top position, in pixels
    */
@@ -897,7 +897,7 @@
    * offsetWidth and offsetHeight of the popup, which are normally not available
    * until the popup is showing. By positioning the popup before it is shown,
    * the the popup will not jump from its original position to the new position.
-   * 
+   *
    * @param callback the callback to set the position of the popup
    * @see PositionCallback#setPosition(int offsetWidth, int offsetHeight)
    */
@@ -919,7 +919,7 @@
    * feature is disabled, the popup will only autoHide if it was the last popup
    * opened.
    * </p>
-   * 
+   *
    * @param previewAllNativeEvents true to enable, false to disable
    */
   public void setPreviewingAllNativeEvents(boolean previewAllNativeEvents) {
@@ -940,7 +940,7 @@
    * Sets whether this object is visible. This method just sets the
    * <code>visibility</code> style attribute. You need to call {@link #show()}
    * to actually attached/detach the {@link PopupPanel} to the page.
-   * 
+   *
    * @param visible <code>true</code> to show the object, <code>false</code> to
    *          hide it
    * @see #show()
@@ -974,14 +974,14 @@
    * Sets the width of the panel's child widget. If the panel's child widget has
    * not been set, the width passed in will be cached and used to set the width
    * immediately after the child widget is set.
-   * 
+   *
    * <p>
    * Note that subclasses may have a different behavior. A subclass may decide
    * not to change the width of the child widget. It may instead decide to
    * change the width of an internal panel widget, which contains the child
    * widget.
    * </p>
-   * 
+   *
    * @param width the object's new width, in CSS units (e.g. "10px", "1em")
    */
   @Override
@@ -1017,7 +1017,7 @@
    * bottom and right edges of the window, the popup may be displayed directly
    * above the target, and/or its right edge may be aligned with the right edge
    * of the target.
-   * 
+   *
    * @param target the target to show the popup below
    */
   public final void showRelativeTo(final UIObject target) {
@@ -1037,7 +1037,7 @@
   /**
    * Get the glass element used by this {@link PopupPanel}. The element is not
    * created until it is enabled via {@link #setGlassEnabled(boolean)}.
-   * 
+   *
    * @return the glass element, or null if not created
    */
   protected Element getGlassElement() {
@@ -1099,7 +1099,7 @@
    * Sets the animation used to animate this popup. Used by gwt-incubator to
    * allow DropDownPanel to override the default popup animation. Not protected
    * because the exact API may change in gwt 1.6.
-   * 
+   *
    * @param animation the animation to use for this popup
    */
   void setAnimation(ResizeAnimation animation) {
@@ -1108,7 +1108,7 @@
 
   /**
    * Enable or disable animation of the {@link PopupPanel}.
-   * 
+   *
    * @param type the type of animation to use
    */
   void setAnimationType(AnimationType type) {
@@ -1117,7 +1117,7 @@
 
   /**
    * Remove focus from an Element.
-   * 
+   *
    * @param elt The Element on which <code>blur()</code> will be invoked
    */
   private native void blur(Element elt) /*-{
@@ -1129,7 +1129,7 @@
 
   /**
    * Does the event target one of the partner elements?
-   * 
+   *
    * @param event the native event
    * @return true if the event targets a partner
    */
@@ -1151,7 +1151,7 @@
 
   /**
    * Does the event target this popup?
-   * 
+   *
    * @param event the native event
    * @return true if the event targets the popup
    */
@@ -1168,7 +1168,7 @@
    * that goes inside of the outer element, so all methods in PopupImpl are
    * relative to the first child of the outer element, not the outer element
    * itself.
-   * 
+   *
    * @return the Element that {@link PopupImpl} creates and expects
    */
   private com.google.gwt.user.client.Element getPopupImplElement() {
@@ -1178,7 +1178,7 @@
   /**
    * Positions the popup, called after the offset width and height of the popup
    * are known.
-   * 
+   *
    * @param relativeObject the ui object to position relative to
    * @param offsetWidth the drop down's offset width
    * @param offsetHeight the drop down's offset height
@@ -1307,7 +1307,7 @@
 
   /**
    * Preview the {@link NativePreviewEvent}.
-   * 
+   *
    * @param event the {@link NativePreviewEvent}
    */
   private void previewNativeEvent(NativePreviewEvent event) {
diff --git a/user/src/com/google/gwt/user/client/ui/StackPanel.java b/user/src/com/google/gwt/user/client/ui/StackPanel.java
index 727e2e0..c7a8898 100644
--- a/user/src/com/google/gwt/user/client/ui/StackPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/StackPanel.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -23,12 +23,12 @@
 /**
  * A panel that stacks its children vertically, displaying only one at a time,
  * with a header for each child which the user can click to display.
- * 
+ *
  * <p>
  * This widget will <em>only</em> work in quirks mode. If your application is in
  * Standards Mode, use {@link StackLayoutPanel} instead.
  * </p>
- * 
+ *
  * <p>
  * <img class='gallery' src='doc-files/StackPanel.png'/>
  * </p>
@@ -44,7 +44,7 @@
  * <h3>Example</h3>
  * {@example com.google.gwt.examples.StackPanelExample}
  * </p>
- * 
+ *
  * @see StackLayoutPanel
  */
 public class StackPanel extends ComplexPanel implements InsertPanel.ForIsWidget {
@@ -79,7 +79,7 @@
 
   /**
    * Adds a new child with the given widget and header.
-   * 
+   *
    * @param w the widget to be added
    * @param stackText the header text associated with this widget
    */
@@ -113,7 +113,7 @@
 
   /**
    * Gets the currently selected child index.
-   * 
+   *
    * @return selected child
    */
   public int getSelectedIndex() {
@@ -198,7 +198,7 @@
 
   /**
    * Sets the text associated with a child by its index.
-   * 
+   *
    * @param index the index of the child whose text is to be set
    * @param text the text to be associated with it
    */
@@ -239,14 +239,14 @@
 
   /**
    * Shows the widget at the specified child index.
-   * 
+   *
    * @param index the index of the child to be shown
    */
   public void showStack(int index) {
     if ((index >= getWidgetCount()) || (index < 0) || (index == visibleStack)) {
       return;
     }
- 
+
     if (visibleStack >= 0) {
       setStackVisible(visibleStack, false);
     }
@@ -262,7 +262,7 @@
    * <li>-text-wrapper# = The element around the header at the specified index.</li>
    * <li>-content# = The element around the body at the specified index.</li>
    * </ul>
-   * 
+   *
    * @see UIObject#onEnsureDebugId(String)
    */
   @Override
@@ -281,7 +281,7 @@
   }
 
   /**
-   * @return a header element
+   * Returns a header element.
    */
   Element createHeaderElem() {
     return DOM.createDiv();
@@ -290,7 +290,7 @@
   /**
    * Get the element that holds the header text given the header element created
    * by #createHeaderElement.
-   * 
+   *
    * @param headerElem the header element
    * @return the element around the header text
    */
diff --git a/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java b/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
index 378a93b..4e154d5 100644
--- a/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
@@ -307,7 +307,7 @@
   }
 
   /**
-   * @return the widget at the given index.
+   * Returns the widget at the given index.
    */
   public Widget getWidget(int index) {
     checkIndex(index);
@@ -315,7 +315,7 @@
   }
 
   /**
-   * @return the number of tabs and widgets
+   * Returns the number of tabs and widgets.
    */
   public int getWidgetCount() {
     return children.size();
@@ -329,7 +329,7 @@
   }
 
   /**
-   * @return the index of the given child, or -1 if it is not a child
+   * Returns the index of the given child, or -1 if it is not a child.
    */
   public int getWidgetIndex(Widget child) {
     return children.indexOf(child);
@@ -557,7 +557,7 @@
    *
    * Use care when setting an object's HTML; it is an easy way to expose
    * script-based security problems. Consider using
-   * {@link #setTabHTML(int, SafeHtml)} or 
+   * {@link #setTabHTML(int, SafeHtml)} or
    * {@link #setTabText(int, String)} whenever possible.
    *
    * @param index the index of the tab whose HTML is to be set
diff --git a/user/src/com/google/gwt/user/client/ui/TextBoxBase.java b/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
index 9a710b2..79caf7c 100644
--- a/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
+++ b/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,7 +21,7 @@
 
 /**
  * Abstract base class for most text entry widgets.
- * 
+ *
  * <p>
  * The names of the static members of {@link TextBoxBase}, as well as simple
  * alignment names (<code>left</code>, <code>center</code>, <code>right</code>,
@@ -29,7 +29,7 @@
  * attribute.
  * <p>
  * For example,
- * 
+ *
  * <pre>
  * &lt;g:TextBox textAlignment='ALIGN_RIGHT'/&gt;
  * &lt;g:TextBox textAlignment='right'/&gt;
@@ -39,8 +39,8 @@
     SourcesChangeEvents {
 
   /**
-   * Legacy wrapper for {@link TextAlignment}, soon to be deprecated.
-   * @deprecated use {@link #setAlignment(TextAlignment)}
+   * Legacy wrapper for {@link ValueBoxBase.TextAlignment}, soon to be deprecated.
+   * @deprecated use {@link #setAlignment(ValueBoxBase.TextAlignment)}
    */
   @Deprecated
   public static class TextAlignConstant {
@@ -82,7 +82,7 @@
   /**
    * Creates a text box that wraps the given browser element handle. This is
    * only used by subclasses.
-   * 
+   *
    * @param elem the browser element to wrap
    */
   protected TextBoxBase(Element elem) {
@@ -108,7 +108,7 @@
 
   /**
    * Legacy wrapper for {@link #setAlignment(TextAlignment)}.
-   * 
+   *
    * @deprecated use {@link #setAlignment(TextAlignment)}
    */
   @Deprecated
diff --git a/user/src/com/google/gwt/user/client/ui/ValueBox.java b/user/src/com/google/gwt/user/client/ui/ValueBox.java
index 87721ec..33b75e8 100644
--- a/user/src/com/google/gwt/user/client/ui/ValueBox.java
+++ b/user/src/com/google/gwt/user/client/ui/ValueBox.java
@@ -23,10 +23,6 @@
 import com.google.gwt.text.shared.Renderer;
 
 /**
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * <p>
  * A text box able to parse its displayed value.
  * 
  * @param <T> the value type
diff --git a/user/src/com/google/gwt/user/client/ui/ValuePicker.java b/user/src/com/google/gwt/user/client/ui/ValuePicker.java
index 8115023..8003cec 100644
--- a/user/src/com/google/gwt/user/client/ui/ValuePicker.java
+++ b/user/src/com/google/gwt/user/client/ui/ValuePicker.java
@@ -32,11 +32,6 @@
 import java.util.Collection;
 
 /**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
  * Allows the user to pick a single value from a list.
  *
  * @param <T> the type of value
@@ -89,7 +84,7 @@
   }
 
   /**
-   * @return this view
+   * Returns this view.
    */
   @Override
   public ValuePicker<T> asWidget() {
diff --git a/user/src/com/google/gwt/user/client/ui/Widget.java b/user/src/com/google/gwt/user/client/ui/Widget.java
index c80a25a..e0138a0 100644
--- a/user/src/com/google/gwt/user/client/ui/Widget.java
+++ b/user/src/com/google/gwt/user/client/ui/Widget.java
@@ -290,7 +290,7 @@
    * <p>
    * This method is called when a widget is attached to the browser's document.
    * To receive notification after a Widget has been added to the document,
-   * override the {@link #onLoad} method.
+   * override the {@link #onLoad} method or use {@link #addAttachHandler}.
    * </p>
    * <p>
    * It is strongly recommended that you override {@link #onLoad()} or
@@ -328,13 +328,14 @@
     // the attached flag is set. This allows widgets to be notified when they
     // are fully attached, and panels when all of their children are attached.
     onLoad();
+    AttachEvent.fire(this, true);
   }
 
   /**
    * <p>
    * This method is called when a widget is detached from the browser's
    * document. To receive notification before a Widget is removed from the
-   * document, override the {@link #onUnload} method.
+   * document, override the {@link #onUnload} method or use {@link #addAttachHandler}.
    * </p>
    * <p>
    * It is strongly recommended that you override {@link #onUnload()} or
@@ -363,6 +364,7 @@
       // onUnload() gets called *before* everything else (the opposite of
       // onLoad()).
       onUnload();
+      AttachEvent.fire(this, false);
     } finally {
       // Put this in a finally, just in case onUnload throws an exception.
       try {
@@ -377,22 +379,16 @@
 
   /**
    * This method is called immediately after a widget becomes attached to the
-   * browser's document. This default implementation notifies the widgets
-   * {@link com.google.gwt.event.logical.shared.AttachEvent.Handler
-   * AttachEvent.Handler}s.
+   * browser's document.
    */
   protected void onLoad() {
-    AttachEvent.fire(this, true);
   }
 
   /**
    * This method is called immediately before a widget will be detached from the
-   * browser's document. This default implementation notifies the widget's
-   * {@link com.google.gwt.event.logical.shared.AttachEvent.Handler
-   * AttachEvent.Handler}s.
+   * browser's document.
    */
   protected void onUnload() {
-    AttachEvent.fire(this, false);
   }
 
   /**
diff --git a/user/src/com/google/gwt/user/datepicker/client/DateBox.java b/user/src/com/google/gwt/user/datepicker/client/DateBox.java
index a5edd54..c9ebf25 100644
--- a/user/src/com/google/gwt/user/datepicker/client/DateBox.java
+++ b/user/src/com/google/gwt/user/datepicker/client/DateBox.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -46,9 +46,9 @@
 
 /**
  * A text box that shows a {@link DatePicker} when the user focuses on it.
- * 
+ *
  * <h3>CSS Style Rules</h3>
- * 
+ *
  * <dl>
  * <dt>.gwt-DateBox</dt>
  * <dd>default style name</dd>
@@ -59,7 +59,7 @@
  * {@link DateBox.DefaultFormat} when the text does not represent a date that
  * can be parsed</dd>
  * </dl>
- * 
+ *
  * <p>
  * <h3>Example</h3>
  * {@example com.google.gwt.examples.DateBoxExample}
@@ -97,7 +97,7 @@
 
     /**
      * Creates a new default format instance.
-     * 
+     *
      * @param dateTimeFormat the {@link DateTimeFormat} to use with this
      *          {@link Format}.
      */
@@ -115,7 +115,7 @@
 
     /**
      * Gets the date time format.
-     * 
+     *
      * @return the date time format
      */
     public DateTimeFormat getDateTimeFormat() {
@@ -156,7 +156,7 @@
 
     /**
      * Formats the provided date. Note, a null date is a possible input.
-     * 
+     *
      * @param dateBox the date box you are formatting
      * @param date the date to format
      * @return the formatted date as a string
@@ -165,7 +165,7 @@
 
     /**
      * Parses the provided string as a date.
-     * 
+     *
      * @param dateBox the date box
      * @param text the string representing a date
      * @param reportError should the formatter indicate a parse error to the
@@ -177,7 +177,7 @@
     /**
      * If the format did any modifications to the date box's styling, reset them
      * now.
-     * 
+     *
      * @param abandon true when the current format is being replaced by another
      * @param dateBox the date box
      */
@@ -261,7 +261,7 @@
 
   /**
    * Create a new date box.
-   * 
+   *
    * @param date the default date.
    * @param picker the picker to drop down from the date box
    * @param format to use to parse and format dates
@@ -303,9 +303,9 @@
 
   /**
    * Gets the current cursor position in the date box.
-   * 
+   *
    * @return the cursor position
-   * 
+   *
    */
   public int getCursorPos() {
     return box.getCursorPos();
@@ -313,7 +313,7 @@
 
   /**
    * Gets the date picker.
-   * 
+   *
    * @return the date picker
    */
   public DatePicker getDatePicker() {
@@ -323,7 +323,7 @@
   /**
    * Gets the format instance used to control formatting and parsing of this
    * {@link DateBox}.
-   * 
+   *
    * @return the format
    */
   public Format getFormat() {
@@ -332,7 +332,7 @@
 
   /**
    * Gets the date box's position in the tab index.
-   * 
+   *
    * @return the date box's tab index
    */
   public int getTabIndex() {
@@ -341,7 +341,7 @@
 
   /**
    * Get text box.
-   * 
+   *
    * @return the text box used to enter the formatted date
    */
   public TextBox getTextBox() {
@@ -351,7 +351,7 @@
   /**
    * Get the date displayed, or null if the text box is empty, or cannot be
    * interpreted.
-   * 
+   *
    * @return the current date value
    */
   public Date getValue() {
@@ -366,7 +366,7 @@
   }
 
   /**
-   * @return true if date picker is currently showing, false if not
+   * Returns true if date picker is currently showing, false if not.
    */
   public boolean isDatePickerShowing() {
     return popup.isShowing();
@@ -375,7 +375,7 @@
   /**
    * Sets the date box's 'access key'. This key is used (in conjunction with a
    * browser-specific modifier key) to automatically focus the widget.
-   * 
+   *
    * @param key the date box's access key
    */
   public void setAccessKey(char key) {
@@ -384,7 +384,7 @@
 
   /**
    * Sets whether the date box is enabled.
-   * 
+   *
    * @param enabled is the box enabled
    */
   public void setEnabled(boolean enabled) {
@@ -394,7 +394,7 @@
   /**
    * Explicitly focus/unfocus this widget. Only one widget can have focus at a
    * time, and the widget that does will receive all keyboard events.
-   * 
+   *
    * @param focused whether this widget should take focus or release it
    */
   public void setFocus(boolean focused) {
@@ -405,7 +405,7 @@
    * Sets the format used to control formatting and parsing of dates in this
    * {@link DateBox}. If this {@link DateBox} is not empty, the contents of date
    * box will be replaced with current contents in the new format.
-   * 
+   *
    * @param format the new date format
    */
   public void setFormat(Format format) {
@@ -429,7 +429,7 @@
    * the same tab index, each such widget will receive focus in an arbitrary
    * order. Setting the tab index to <code>-1</code> will cause this widget to
    * be removed from the tab order.
-   * 
+   *
    * @param index the date box's tab index
    */
   public void setTabIndex(int index) {
diff --git a/user/src/com/google/gwt/user/rebind/rpc/ProblemReport.java b/user/src/com/google/gwt/user/rebind/rpc/ProblemReport.java
index d8a82f4..ef76913 100644
--- a/user/src/com/google/gwt/user/rebind/rpc/ProblemReport.java
+++ b/user/src/com/google/gwt/user/rebind/rpc/ProblemReport.java
@@ -111,7 +111,7 @@
    * @param extraLines additional continuation lines for the message, usually
    *    for additional explanations.
    */
-  public Problem add(JClassType type, String message, Priority priority, 
+  public Problem add(JClassType type, String message, Priority priority,
       String... extraLines) {
     String contextString = "";
     if (contextType != null) {
@@ -186,7 +186,7 @@
   /**
    * Sets the context type currently being analyzed.  Problems found will
    * include reference to this context, until reset with another call to this
-   * method.  Context may be cancelled with a {@code null} value here.
+   * method.  Context may be canceled with a {@code null} value here.
    *
    * @param newContext the type under analysis
    */
diff --git a/user/src/com/google/gwt/user/server/rpc/impl/SerializedInstanceReference.java b/user/src/com/google/gwt/user/server/rpc/impl/SerializedInstanceReference.java
index d0133a6..26ffad5 100644
--- a/user/src/com/google/gwt/user/server/rpc/impl/SerializedInstanceReference.java
+++ b/user/src/com/google/gwt/user/server/rpc/impl/SerializedInstanceReference.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -22,12 +22,12 @@
   String SERIALIZED_REFERENCE_SEPARATOR = "/";
 
   /**
-   * @return name of the type
+   * Returns the name of the type.
    */
   String getName();
 
   /**
-   * @return signature of the instance reference
+   * Returns the signature of the instance reference.
    */
   String getSignature();
-}
\ No newline at end of file
+}
diff --git a/user/src/com/google/gwt/validation/client/constraints/NotGwtCompatibleValidator.java b/user/src/com/google/gwt/validation/client/constraints/NotGwtCompatibleValidator.java
new file mode 100644
index 0000000..c1a2949
--- /dev/null
+++ b/user/src/com/google/gwt/validation/client/constraints/NotGwtCompatibleValidator.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.validation.client.constraints;
+
+import java.lang.annotation.Annotation;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+/**
+ * Masks a {@link ConstraintValidator} that is not GWT compatible. This
+ * validator always fails.
+ * <p>
+ * Extend this class and implement it as GWT super class. Use validation groups
+ * to keep this constraint from being validated on the client.
+ *
+ * <p>
+ * In a super source directory override your validator like this:
+ *
+ * <pre>
+ * public class MyValidator extends
+ *     NotGwtCompatibleValidator &lt;MyConstraint, MyType&gt;{
+ * }
+ * </pre>
+ *
+ * @param <A> the constraint to validate
+ * @param <T> the type to validate
+ */
+public abstract class NotGwtCompatibleValidator<A extends Annotation, T>
+    implements ConstraintValidator<A, T> {
+
+  public final void initialize(A constraintAnnotation) {
+  }
+
+  /**
+   * Always fails.
+   */
+  public final boolean isValid(T value, ConstraintValidatorContext context) {
+    // TODO (nchalko) add a custom message
+    return false;
+  }
+
+}
diff --git a/user/src/com/google/gwt/validation/client/impl/ConstraintDescriptorImpl.java b/user/src/com/google/gwt/validation/client/impl/ConstraintDescriptorImpl.java
new file mode 100644
index 0000000..f5703d9
--- /dev/null
+++ b/user/src/com/google/gwt/validation/client/impl/ConstraintDescriptorImpl.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.validation.client.impl;
+
+import java.lang.annotation.Annotation;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.Payload;
+import javax.validation.metadata.ConstraintDescriptor;
+
+/**
+ * A immutable GWT implementation of {@link ConstraintDescriptor}.
+ *
+ * @param <T> the constraint annotation to describe.
+ */
+public class ConstraintDescriptorImpl<T extends Annotation> implements
+    ConstraintDescriptor<T> {
+
+  /**
+   * Builder for {@link ConstraintDescriptorImpl}.
+   *
+   * @param <T> the constraint annotation to describe.
+   */
+  public static class Builder<T extends Annotation> {
+    private T annotation;
+    private Set<Class<?>> groups;
+    private Set<Class<? extends Payload>> payload;
+    private List<Class<? extends ConstraintValidator<T, ?>>> constraintValidatorClasses;
+    private Map<String, Object> attributes;
+    private Set<ConstraintDescriptor<?>> composingConstraints;
+    private boolean reportAsSingleViolation;
+
+    public ConstraintDescriptorImpl<T> build() {
+      return new ConstraintDescriptorImpl<T>(//
+          annotation, //
+          groups, //
+          payload, //
+          constraintValidatorClasses, //
+          attributes, //
+          composingConstraints, //
+          reportAsSingleViolation);
+    }
+
+    public Builder<T> setAnnotation(T annotation) {
+      this.annotation = annotation;
+      return this;
+    }
+
+    public Builder<T> setAttributes(Map<String, Object> attributes) {
+      this.attributes = attributes;
+      return this;
+    }
+
+    public Builder<T> setComposingConstraints(
+        Set<ConstraintDescriptor<?>> composingConstraints) {
+      this.composingConstraints = composingConstraints;
+      return this;
+    }
+
+    public Builder<T> setConstraintValidatorClasses(
+        List<Class<? extends ConstraintValidator<T, ?>>> constraintValidatorClasses) {
+      this.constraintValidatorClasses = constraintValidatorClasses;
+      return this;
+    }
+
+    /**
+     * @param classes
+     * @return
+     */
+    public Builder<T> setConstraintValidatorClasses(
+        Class<? extends ConstraintValidator<T, ?>>[] constraintValidatorClasses) {
+      List<Class<? extends ConstraintValidator<T, ?>>> list = Arrays.asList(constraintValidatorClasses);
+      setConstraintValidatorClasses(list);
+      return this;
+    }
+
+    public Builder<T> setGroups(Set<Class<?>> groups) {
+      this.groups = groups;
+      return this;
+    }
+
+    public Builder<T> setGroups(Class<?>[] classes) {
+      setGroups(new HashSet<Class<?>>(Arrays.asList(classes)));
+      return this;
+    }
+
+    public Builder<T> setPayload(Set<Class<? extends Payload>> payload) {
+      this.payload = payload;
+      return this;
+    }
+
+    public Builder<T> setPayload(Class<? extends Payload>[] classes) {
+      setPayload(new HashSet<Class<? extends Payload>>(Arrays.asList(classes)));
+      return this;
+    }
+
+    public Builder<T> setReportAsSingleViolation(boolean reportAsSingleViolation) {
+      this.reportAsSingleViolation = reportAsSingleViolation;
+      return this;
+    }
+  }
+
+  public static <T extends Annotation> Builder<T> builder() {
+    return new Builder<T>();
+  }
+
+  private final T annotation;
+  private final Set<Class<?>> groups;
+  private final Set<Class<? extends Payload>> payload;
+  private final List<Class<? extends ConstraintValidator<T, ?>>> constraintValidatorClasses;
+  private final Map<String, Object> attributes;
+  private final Set<ConstraintDescriptor<?>> composingConstraints;
+  private final boolean reportAsSingleViolation;
+
+  private ConstraintDescriptorImpl(
+      T annotation,
+      Set<Class<?>> groups,
+      Set<Class<? extends Payload>> payload,
+      List<Class<? extends ConstraintValidator<T, ?>>> constraintValidatorClasses,
+      Map<String, Object> attributes,
+      Set<ConstraintDescriptor<?>> composingConstraints,
+      boolean reportAsSingleViolation) {
+    super();
+    this.annotation = annotation;
+    this.groups = groups;
+    this.payload = payload;
+    this.constraintValidatorClasses = constraintValidatorClasses;
+    this.attributes = attributes;
+    this.composingConstraints = composingConstraints;
+    this.reportAsSingleViolation = reportAsSingleViolation;
+  }
+
+  public T getAnnotation() {
+    return annotation;
+  }
+
+  public Map<String, Object> getAttributes() {
+    return attributes;
+  }
+
+  public Set<ConstraintDescriptor<?>> getComposingConstraints() {
+    return composingConstraints;
+  }
+
+  public List<Class<? extends ConstraintValidator<T, ?>>> getConstraintValidatorClasses() {
+    return constraintValidatorClasses;
+  }
+
+  public Set<Class<?>> getGroups() {
+    return groups;
+  }
+
+  public Set<Class<? extends Payload>> getPayload() {
+    return payload;
+  }
+
+  public boolean isReportAsSingleViolation() {
+    return reportAsSingleViolation;
+  }
+}
diff --git a/user/super/com/google/gwt/emul/java/math/Conversion.java b/user/super/com/google/gwt/emul/java/math/Conversion.java
index 28b8a95..14cc0bb 100644
--- a/user/super/com/google/gwt/emul/java/math/Conversion.java
+++ b/user/super/com/google/gwt/emul/java/math/Conversion.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,22 +21,22 @@
  * licenses this file to You under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  * License for the specific language governing permissions and limitations under
  * the License.
- * 
+ *
  * INCLUDES MODIFICATIONS BY RICHARD ZSCHECH AS WELL AS GOOGLE.
  */
 package java.math;
 
 /**
  * Static library that provides {@link BigInteger} base conversion from/to any
- * integer represented in an {@link java.lang.String} Object.
+ * integer represented in a {@link java.lang.String} Object.
  */
 class Conversion {
 
@@ -168,7 +168,7 @@
   /**
    * Builds the correspondent {@code String} representation of {@code val} being
    * scaled by {@code scale}.
-   * 
+   *
    * @see BigInteger#toString()
    * @see BigDecimal#toString()
    */
diff --git a/user/super/com/google/gwt/emul/java/math/Division.java b/user/super/com/google/gwt/emul/java/math/Division.java
index 4179a82..9b676e3 100644
--- a/user/super/com/google/gwt/emul/java/math/Division.java
+++ b/user/super/com/google/gwt/emul/java/math/Division.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,15 +21,15 @@
  * licenses this file to You under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  * License for the specific language governing permissions and limitations under
  * the License.
- * 
+ *
  * INCLUDES MODIFICATIONS BY RICHARD ZSCHECH AS WELL AS GOOGLE.
  */
 package java.math;
@@ -38,7 +38,7 @@
  * Static library that provides all operations related with division and modular
  * arithmetic to {@link BigInteger}. Some methods are provided in both mutable
  * and immutable way. There are several variants provided listed below:
- * 
+ *
  * <ul type="circle"> <li><b>Division</b> <ul type="circle"> <li>
  * {@link BigInteger} division and remainder by {@link BigInteger}.</li> <li>
  * {@link BigInteger} division and remainder by {@code int}.</li> <li><i>gcd</i>
@@ -54,7 +54,7 @@
    * remainder. Implements the Knuth's division algorithm. See D. Knuth, The Art
    * of Computer Programming, vol. 2. Steps D1-D8 correspond the steps in the
    * algorithm description.
-   * 
+   *
    * @param quot the quotient
    * @param quotLength the quotient's length
    * @param a the dividend
@@ -173,7 +173,7 @@
   /**
    * Computes the quotient and the remainder after a division by an {@code int}
    * number.
-   * 
+   *
    * @return an array of the form {@code [quotient, remainder]}.
    */
   static BigInteger[] divideAndRemainderByInteger(BigInteger val, int divisor,
@@ -212,7 +212,7 @@
   /**
    * Divides an array by an integer value. Implements the Knuth's division
    * algorithm. See D. Knuth, The Art of Computer Programming, vol. 2.
-   * 
+   *
    * @param dest the quotient
    * @param src the dividend
    * @param srcLength the length of the dividend
@@ -265,7 +265,7 @@
   /**
    * Divides an unsigned long a by an unsigned int b. It is supposed that the
    * most significant bit of b is set to 1, i.e. b < 0
-   * 
+   *
    * @param a the dividend
    * @param b the divisor
    * @return the long value containing the unsigned integer remainder in the
@@ -313,7 +313,7 @@
    * square and multiply algorithm and the Montgomery Reduction C. K. Koc -
    * Montgomery Reduction with Even Modulus</i>. The square and multiply
    * algorithm and the Montgomery Reduction.
-   * 
+   *
    * @ar.org.fitc.ref "C. K. Koc - Montgomery Reduction with Even Modulus"
    * @see BigInteger#modPow(BigInteger, BigInteger)
    */
@@ -343,7 +343,7 @@
 
   /**
    * Performs the final reduction of the Montgomery algorithm.
-   * 
+   *
    * @see #monPro(BigInteger, BigInteger, BigInteger, long)
    * @see #monSquare(BigInteger, BigInteger, long)
    */
@@ -378,7 +378,7 @@
   /**
    * @param m a positive modulus Return the greatest common divisor of op1 and
    *          op2,
-   * 
+   *
    * @param op1 must be greater than zero
    * @param op2 must be greater than zero
    * @see BigInteger#gcd(BigInteger)
@@ -443,7 +443,7 @@
   /**
    * Performs the same as {@link #gcdBinary(BigInteger, BigInteger)}, but with
    * numbers of 63 bits, represented in positives values of {@code long} type.
-   * 
+   *
    * @param op1 a positive number
    * @param op2 a positive number
    * @see #gcdBinary(BigInteger, BigInteger)
@@ -475,7 +475,7 @@
 
   /**
    * Performs {@code x = x mod (2<sup>n</sup>)}.
-   * 
+   *
    * @param x a positive number, it will store the result.
    * @param n a positive exponent of {@code 2}.
    */
@@ -494,10 +494,10 @@
   }
 
   /**
-   * 
+   *
    * Based on "New Algorithm for Classical Modular Inverse" Róbert Lórencz. LNCS
    * 2523 (2002)
-   * 
+   *
    * @return a^(-1) mod m
    */
   static BigInteger modInverseLorencz(BigInteger a, BigInteger modulo) {
@@ -714,7 +714,7 @@
   /**
    * Implements the Montgomery Product of two integers represented by {@code
    * int} arrays. The arrays are supposed in <i>little endian</i> notation.
-   * 
+   *
    * @param a The first factor of the product.
    * @param b The second factor of the product.
    * @param modulus The modulus of the operations. Z<sub>modulus</sub>.
@@ -737,7 +737,7 @@
   /**
    * Multiplies an array by int and subtracts it from a subarray of another
    * array.
-   * 
+   *
    * @param a the array to subtract from
    * @param start the start element of the subarray of a
    * @param b the array to be multiplied and subtracted
@@ -765,7 +765,7 @@
   /**
    * Performs modular exponentiation using the Montgomery Reduction. It requires
    * that all parameters be positive and the modulus be odd. >
-   * 
+   *
    * @see BigInteger#modPow(BigInteger, BigInteger)
    * @see #monPro(BigInteger, BigInteger, BigInteger, int)
    * @see #slidingWindow(BigInteger, BigInteger, BigInteger, BigInteger, int)
@@ -795,7 +795,7 @@
 
   /**
    * It requires that all parameters be positive.
-   * 
+   *
    * @return {@code base<sup>exponent</sup> mod (2<sup>j</sup>)}.
    * @see BigInteger#modPow(BigInteger, BigInteger)
    */
@@ -830,7 +830,7 @@
   /**
    * Divides a <code>BigInteger</code> by a signed <code>int</code> and returns
    * the remainder.
-   * 
+   *
    * @param dividend the BigInteger to be divided. Must be non-negative.
    * @param divisor a signed int
    * @return divide % divisor
@@ -842,7 +842,7 @@
   /**
    * Divides an array by an integer value. Implements the Knuth's division
    * algorithm. See D. Knuth, The Art of Computer Programming, vol. 2.
-   * 
+   *
    * @param src the dividend
    * @param srcLength the length of the dividend
    * @param divisor the divisor
@@ -864,11 +864,11 @@
   /*
    * Implements the Montgomery modular exponentiation based in <i>The sliding
    * windows algorithm and the MongomeryReduction</i>.
-   * 
+   *
    * @ar.org.fitc.ref
    * "A. Menezes,P. van Oorschot, S. Vanstone - Handbook of Applied Cryptography"
    * ;
-   * 
+   *
    * @see #oddModPow(BigInteger, BigInteger, BigInteger)
    */
   static BigInteger slidingWindow(BigInteger x2, BigInteger a2,
@@ -946,7 +946,7 @@
   /**
    * Calculate how many iteration of Lorencz's algorithm would perform the same
    * operation.
-   * 
+   *
    * @param bi
    * @param n
    * @return
@@ -967,7 +967,7 @@
   }
 
   /**
-   * @return bi == abs(2^exp)
+   * Returns {@code bi == abs(2^exp)}.
    */
   private static boolean isPowerOfTwo(BigInteger bi, int exp) {
     boolean result = false;
diff --git a/user/super/com/google/gwt/emul/java/util/AbstractCollection.java b/user/super/com/google/gwt/emul/java/util/AbstractCollection.java
index 8f123d8..eac8574 100644
--- a/user/super/com/google/gwt/emul/java/util/AbstractCollection.java
+++ b/user/super/com/google/gwt/emul/java/util/AbstractCollection.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -21,9 +21,9 @@
  * Skeletal implementation of the Collection interface. <a
  * href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/AbstractCollection.html">[Sun
  * docs]</a>
- * 
+ *
  * @param <E> the element type.
- * 
+ *
  */
 public abstract class AbstractCollection<E> implements Collection<E> {
 
diff --git a/user/super/com/google/gwt/emul/java/util/MapEntryImpl.java b/user/super/com/google/gwt/emul/java/util/MapEntryImpl.java
index 3690fc7..9ffcf40 100644
--- a/user/super/com/google/gwt/emul/java/util/MapEntryImpl.java
+++ b/user/super/com/google/gwt/emul/java/util/MapEntryImpl.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -16,7 +16,7 @@
 package java.util;
 
 /**
- * An {@link Map.Entry} shared by several {@link Map} implementations.
+ * A {@link Map.Entry} shared by several {@link Map} implementations.
  */
 class MapEntryImpl<K, V> extends AbstractMapEntry<K, V> {
 
diff --git a/user/super/com/google/gwt/emul/java/util/TreeMap.java b/user/super/com/google/gwt/emul/java/util/TreeMap.java
index dd8a12f..0761e75 100644
--- a/user/super/com/google/gwt/emul/java/util/TreeMap.java
+++ b/user/super/com/google/gwt/emul/java/util/TreeMap.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -22,7 +22,7 @@
  * performance on lookups, inserts, and deletes while maintaining linear
  * in-order traversal time. Null keys and values are fully supported if the
  * comparator supports them (the default comparator does not).
- * 
+ *
  * @param <K> key type
  * @param <V> value type
  */
@@ -33,7 +33,7 @@
    * September 2007 at:
    * http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx
    * written by Julienne Walker.
-   * 
+   *
    * This version does not require a parent pointer kept in each node.
    */
 
@@ -53,7 +53,7 @@
 
     /**
      * Create an iterator which may return only a restricted range.
-     * 
+     *
      * @param fromKey the first key to return in the iterator.
      * @param toKey the upper bound of keys to return.
      */
@@ -159,7 +159,7 @@
 
   /**
    * Tree node.
-   * 
+   *
    * @param <K> key type
    * @param <V> value type
    */
@@ -175,7 +175,7 @@
 
     /**
      * Create a red node.
-     * 
+     *
      * @param key
      * @param value
      */
@@ -185,7 +185,7 @@
 
     /**
      * Create a node of the specified color.
-     * 
+     *
      * @param key
      * @param value
      * @param isRed true if this should be a red node, false for black
@@ -247,7 +247,7 @@
    * removed node as well as to pass in a value which must match (used for
    * entrySet().remove(entry)), and the matchValue flag is used to request this
    * behavior.
-   * 
+   *
    * @param <V> value type
    */
   private static class State<V> {
@@ -526,14 +526,14 @@
     };
 
     /**
-     * @return true if this submap type uses a from-key.
+     * Returns true if this submap type uses a from-key.
      */
     public boolean fromKeyValid() {
       return false;
     }
 
     /**
-     * @return true if this submap type uses a to-key.
+     * Returns true if this submap type uses a to-key.
      */
     public boolean toKeyValid() {
       return false;
@@ -565,9 +565,9 @@
 
   /**
    * Throw a NoSuchElementException if the specified node is null.
-   * 
+   *
    * Used to clean up error checking at use sites.
-   * 
+   *
    * @param node node to check
    * @param <NK> key type
    * @param <NV> value type
@@ -708,9 +708,9 @@
   }
 
   /**
-   * Return the first node which compares equal to or greater than the given
+   * Returns the first node which compares equal to or greater than the given
    * key.
-   * 
+   *
    * @param key the key to search for
    * @return the next node, or null if there is none
    */
@@ -732,8 +732,8 @@
   }
 
   /**
-   * Return the last node which is strictly less than the given key.
-   * 
+   * Returns the last node which is strictly less than the given key.
+   *
    * @param key the key to search for
    * @return the previous node, or null if there is none
    */
@@ -755,13 +755,13 @@
   /**
    * Used for testing. Validate that the tree meets all red-black correctness
    * requirements. These include:
-   * 
+   *
    * <pre>
    *  - root is black
    *  - no children of a red node may be red
    *  - the black height of every path through the three to a leaf is exactly the same
    * </pre>
-   * 
+   *
    * @throws RuntimeException if any correctness errors are detected.
    */
   void assertCorrectness() {
@@ -770,7 +770,7 @@
 
   /**
    * Internal helper function for public {@link #assertCorrectness()}.
-   * 
+   *
    * @param tree the subtree to validate.
    * @param isRed true if the parent of this node is red.
    * @return the black height of this subtree.
@@ -805,7 +805,7 @@
 
   /**
    * Finds an entry given a key and returns the node.
-   * 
+   *
    * @param key the search key
    * @return the node matching the key or null
    */
@@ -826,7 +826,7 @@
   }
 
   /**
-   * @return the left-most node of the tree, or null if empty
+   * Returns the left-most node of the tree, or null if empty.
    */
   private Node<K, V> getFirstNode() {
     if (root == null) {
@@ -840,7 +840,7 @@
   }
 
   /**
-   * @return the right-most node of the tree, or null if empty
+   * Returns the right-most node of the tree, or null if empty.
    */
   private Node<K, V> getLastNode() {
     if (root == null) {
@@ -855,10 +855,10 @@
 
   /**
    * Insert a node into a subtree, collecting state about the insertion.
-   * 
+   *
    * If the same key already exists, the value of the node is overwritten with
    * the value from the new node instead.
-   * 
+   *
    * @param tree subtree to insert into
    * @param newNode new node to insert
    * @param state result of the insertion: state.found true if the key already
@@ -885,7 +885,7 @@
           tree.child[LEFT].isRed = false;
           tree.child[RIGHT].isRed = false;
         } else {
-          // 
+          //
           if (isRed(tree.child[childNum].child[childNum])) {
             tree = rotateSingle(tree, otherChild(childNum));
           } else if (isRed(tree.child[childNum].child[otherChild(childNum)])) {
@@ -898,7 +898,7 @@
   }
 
   /**
-   * Return true if <code>node</code> is red. Note that null pointers are
+   * Returns true if <code>node</code> is red. Note that null pointers are
    * considered black.
    */
   private boolean isRed(Node<K, V> node) {
@@ -907,7 +907,7 @@
 
   /**
    * Remove a key from the tree, returning whether it was found and its value.
-   * 
+   *
    * @param key key to remove
    * @param state return state, not null
    * @return true if the value was found
@@ -971,7 +971,7 @@
        * put the "node" values in "found" (the node with key K) and cut "node"
        * out. However, we do not want to corrupt "found" -- issue 3423. So
        * create a new node "newNode" to replace the "found" node.
-       * 
+       *
        * TODO: (jat's suggestion) Consider using rebalance to move the deleted
        * node to a leaf to avoid the extra traversal in replaceNode.
        */
@@ -1022,14 +1022,14 @@
    * Perform a double rotation, first rotating the child which will become the
    * root in the opposite direction, then rotating the root in the specified
    * direction.
-   * 
+   *
    * <pre>
    *           A                                               F
    *         B   C    becomes (with rotateDirection=0)       A   C
    *        D E F G                                         B E   G
    *                                                       D
    * </pre>
-   * 
+   *
    * @param tree root of the subtree to rotate
    * @param rotateDirection the direction to rotate: 0=left, 1=right
    * @return the new root of the rotated subtree
@@ -1044,13 +1044,13 @@
   /**
    * Perform a single rotation, pushing the root of the subtree to the specified
    * direction.
-   * 
+   *
    * <pre>
    *      A                                              B
    *    B   C     becomes (with rotateDirection=1)     D   A
    *   D E                                              E   C
    * </pre>
-   * 
+   *
    * @param tree the root of the subtree to rotate
    * @param rotateDirection the direction to rotate: 0=left rotation, 1=right
    * @return the new root of the rotated subtree
diff --git a/user/test/com/google/gwt/animation/client/AnimationTest.java b/user/test/com/google/gwt/animation/client/AnimationTest.java
index 1249dfc..2aebc0a 100644
--- a/user/test/com/google/gwt/animation/client/AnimationTest.java
+++ b/user/test/com/google/gwt/animation/client/AnimationTest.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -33,7 +33,7 @@
    * A default implementation of {@link Animation} used for testing.
    */
   private static class DefaultAnimation extends Animation {
-    protected boolean cancelled = false;
+    protected boolean canceled = false;
     protected boolean completed = false;
     protected boolean started = false;
     protected double curProgress = -1.0;
@@ -42,7 +42,7 @@
      * Assert the value of canceled.
      */
     public void assertCancelled(boolean expected) {
-      assertEquals(expected, cancelled);
+      assertEquals(expected, canceled);
     }
 
     /**
@@ -74,7 +74,7 @@
     }
 
     public void reset() {
-      cancelled = false;
+      canceled = false;
       completed = false;
       started = false;
       curProgress = -1.0;
@@ -88,7 +88,7 @@
     @Override
     protected void onCancel() {
       super.onCancel();
-      cancelled = true;
+      canceled = true;
     }
 
     @Override
@@ -116,7 +116,7 @@
 
     @Override
     protected void onCancel() {
-      cancelled = true;
+      canceled = true;
     }
 
     @Override
diff --git a/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java b/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java
index b5a9beb..1f15edb 100644
--- a/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java
+++ b/user/test/com/google/gwt/editor/client/SimpleBeanEditorTest.java
@@ -42,6 +42,14 @@
     }
   }
 
+  class AddressEditorPartOne implements Editor<Address> {
+    SimpleEditor<String> city = SimpleEditor.of(UNINITIALIZED);
+  }
+
+  class AddressEditorPartTwo implements Editor<Address> {
+    SimpleEditor<String> street = SimpleEditor.of(UNINITIALIZED);
+  }
+
   class AddressEditorView implements IsEditor<LeafAddressEditor> {
     LeafAddressEditor addressEditor = new LeafAddressEditor();
 
@@ -105,6 +113,18 @@
       SimpleBeanEditorDriver<Person, PersonEditorWithLeafAddressEditor> {
   }
 
+  class PersonEditorWithMultipleBindings implements Editor<Person> {
+    @Editor.Path("address")
+    AddressEditorPartOne one = new AddressEditorPartOne();
+
+    @Editor.Path("address")
+    AddressEditorPartTwo two = new AddressEditorPartTwo();
+  }
+
+  interface PersonEditorWithMultipleBindingsDriver extends
+      SimpleBeanEditorDriver<Person, PersonEditorWithMultipleBindings> {
+  }
+
   interface PersonEditorWithOptionalAddressDriver extends
       SimpleBeanEditorDriver<Person, PersonEditorWithOptionalAddressEditor> {
   }
@@ -361,10 +381,10 @@
 
     List<SimpleEditor<String>> editors = editor.getEditors();
     assertEquals(rawData.size(), editors.size());
-    assertEquals(rawData, Arrays.asList(editors.get(0).getValue(), editors.get(
-        1).getValue(), editors.get(2).getValue()));
-    assertEquals(editors, new ArrayList<SimpleEditor<String>>(
-        positionMap.values()));
+    assertEquals(rawData, Arrays.asList(editors.get(0).getValue(),
+        editors.get(1).getValue(), editors.get(2).getValue()));
+    assertEquals(editors,
+        new ArrayList<SimpleEditor<String>>(positionMap.values()));
 
     List<String> mutableList = editor.getList();
     assertEquals(rawData, mutableList);
@@ -383,8 +403,8 @@
     mutableList.add("quux");
     assertEquals(4, editors.size());
     assertEquals("quux", editors.get(3).getValue());
-    assertEquals(editors, new ArrayList<SimpleEditor<String>>(
-        positionMap.values()));
+    assertEquals(editors,
+        new ArrayList<SimpleEditor<String>>(positionMap.values()));
 
     // Delete an element
     SimpleEditor<String> expectedDisposed = editors.get(0);
@@ -392,8 +412,8 @@
     assertSame(expectedDisposed, disposed[0]);
     assertEquals(3, editors.size());
     assertEquals("quux", editors.get(2).getValue());
-    assertEquals(editors, new ArrayList<SimpleEditor<String>>(
-        positionMap.values()));
+    assertEquals(editors,
+        new ArrayList<SimpleEditor<String>>(positionMap.values()));
   }
 
   /**
@@ -434,6 +454,23 @@
     assertEquals("edited", person.addresses.get(1).getCity());
   }
 
+  public void testMultipleBinding() {
+    PersonEditorWithMultipleBindingsDriver driver = GWT.create(PersonEditorWithMultipleBindingsDriver.class);
+    PersonEditorWithMultipleBindings editor = new PersonEditorWithMultipleBindings();
+
+    driver.initialize(editor);
+    driver.edit(person);
+    assertEquals("City", editor.one.city.getValue());
+    assertEquals("Street", editor.two.street.getValue());
+
+    editor.one.city.setValue("Foo");
+    editor.two.street.setValue("Bar");
+    driver.flush();
+
+    assertEquals("Foo", person.getAddress().getCity());
+    assertEquals("Bar", person.getAddress().getStreet());
+  }
+
   public void testOptionalField() {
     PersonEditorWithOptionalAddressDriver driver = GWT.create(PersonEditorWithOptionalAddressDriver.class);
     person.address = null;
diff --git a/user/test/com/google/gwt/i18n/client/DateTimeFormatTestBase.java b/user/test/com/google/gwt/i18n/client/DateTimeFormatTestBase.java
index ae4da68..8ff9e10 100644
--- a/user/test/com/google/gwt/i18n/client/DateTimeFormatTestBase.java
+++ b/user/test/com/google/gwt/i18n/client/DateTimeFormatTestBase.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -36,19 +36,19 @@
   public interface MyFormats extends CustomDateTimeFormat {
 
     /**
-     * @return a pattern for abbreviated year, month, and date.
+     * Returns a pattern for abbreviated year, month, and date.
      */
     @Pattern("yMMMd")
     DateTimeFormat yearMonthDayAbbrev();
 
     /**
-     * @return a pattern for full year, month, and date.
+     * Returns a pattern for full year, month, and date.
      */
     @Pattern("yyyyMMMMd")
     DateTimeFormat yearMonthDayFull();
 
     /**
-     * @return a pattern for full year, month, and date.
+     * Returns a pattern for full year, month, and date.
      */
     @Pattern("MMMM d, yyyy")
     DateTimeFormat yearMonthDayFull2();
@@ -77,4 +77,4 @@
     String str = dtf.format(date, TEST_TIMEZONE);
     assertEquals("Thu, 27 Jul 2006 08:10:10 -0500", str);
   }
-}
\ No newline at end of file
+}
diff --git a/user/test/com/google/gwt/requestfactory/server/SimpleFoo.java b/user/test/com/google/gwt/requestfactory/server/SimpleFoo.java
index bef8b4a..6c53ac3 100644
--- a/user/test/com/google/gwt/requestfactory/server/SimpleFoo.java
+++ b/user/test/com/google/gwt/requestfactory/server/SimpleFoo.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -374,14 +374,14 @@
   }
 
   /**
-   * @return the bigDecimalField
+   * Returns the bigDecimalField.
    */
   public BigDecimal getBigDecimalField() {
     return bigDecimalField;
   }
 
   /**
-   * @return the bigIntegerField
+   * Returns the bigIntegerField.
    */
   public BigInteger getBigIntField() {
     return bigIntField;
@@ -392,14 +392,14 @@
   }
 
   /**
-   * @return the byteField
+   * Returns the byteField.
    */
   public Byte getByteField() {
     return byteField;
   }
 
   /**
-   * @return the charField
+   * Returns the charField.
    */
   public Character getCharField() {
     return charField;
@@ -410,7 +410,7 @@
   }
 
   /**
-   * @return the doubleField
+   * Returns the doubleField.
    */
   public Double getDoubleField() {
     return doubleField;
@@ -421,7 +421,7 @@
   }
 
   /**
-   * @return the floatField
+   * Returns the floatField.
    */
   public Float getFloatField() {
     return floatField;
@@ -460,7 +460,7 @@
   }
 
   /**
-   * @return the otherBoolField
+   * Returns the otherBoolField.
    */
   public Boolean getOtherBoolField() {
     return otherBoolField;
@@ -479,7 +479,7 @@
   }
 
   /**
-   * @return the shortField
+   * Returns the shortField.
    */
   public Short getShortField() {
     return shortField;
@@ -685,7 +685,7 @@
 
   /**
    * Persist this entity and all child entities. This method can handle loops.
-   * 
+   *
    * @param processed the entities that have been processed
    */
   private void persistCascadingAndReturnSelfImpl(Set<SimpleFoo> processed) {
diff --git a/user/test/com/google/gwt/requestfactory/server/SimpleFooString.java b/user/test/com/google/gwt/requestfactory/server/SimpleFooString.java
index d4d3eb6..aaa4870 100644
--- a/user/test/com/google/gwt/requestfactory/server/SimpleFooString.java
+++ b/user/test/com/google/gwt/requestfactory/server/SimpleFooString.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -160,7 +160,7 @@
   private List<SimpleBar> oneToManyField;
   private List<SimpleFooString> selfOneToManyField;
   private Set<SimpleBar> oneToManySetField;
-  
+
   private List<Integer> numberListField;
 
   public SimpleFooString() {
@@ -202,14 +202,14 @@
   }
 
   /**
-   * @return the bigDecimalField
+   * Returns the bigDecimalField.
    */
   public BigDecimal getBigDecimalField() {
     return bigDecimalField;
   }
 
   /**
-   * @return the bigIntegerField
+   * Returns the bigIntegerField.
    */
   public BigInteger getBigIntField() {
     return bigIntField;
@@ -220,14 +220,14 @@
   }
 
   /**
-   * @return the byteField
+   * Returns the byteField.
    */
   public Byte getByteField() {
     return byteField;
   }
 
   /**
-   * @return the charField
+   * Returns the charField.
    */
   public Character getCharField() {
     return charField;
@@ -238,7 +238,7 @@
   }
 
   /**
-   * @return the doubleField
+   * Returns the doubleField.
    */
   public Double getDoubleField() {
     return doubleField;
@@ -249,7 +249,7 @@
   }
 
   /**
-   * @return the floatField
+   * Returns the floatField.
    */
   public Float getFloatField() {
     return floatField;
@@ -270,7 +270,7 @@
   public Long getLongField() {
     return longField;
   }
-  
+
   public List<Integer> getNumberListField() {
     return numberListField;
   }
@@ -288,7 +288,7 @@
   }
 
   /**
-   * @return the otherBoolField
+   * Returns the otherBoolField.
    */
   public Boolean getOtherBoolField() {
     return otherBoolField;
@@ -307,7 +307,7 @@
   }
 
   /**
-   * @return the shortField
+   * Returns the shortField.
    */
   public Short getShortField() {
     return shortField;
diff --git a/user/test/com/google/gwt/uibinder/All.java b/user/test/com/google/gwt/uibinder/All.java
index 59669af..ab7152f 100644
--- a/user/test/com/google/gwt/uibinder/All.java
+++ b/user/test/com/google/gwt/uibinder/All.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -26,7 +26,7 @@
 public class All {
 
   /**
-   * @return a test suite containing all the UiBinder tests.
+   * Returns a test suite containing all the UiBinder tests.
    */
   public static Test suite() {
     GWTTestSuite suite = new GWTTestSuite("All UiBinder tests");
@@ -39,4 +39,4 @@
 
   private All() {
   }
-}
\ No newline at end of file
+}
diff --git a/user/test/com/google/gwt/uibinder/rebind/DesignTimeUtilsTest.java b/user/test/com/google/gwt/uibinder/rebind/DesignTimeUtilsTest.java
index ef5eacb..f4d45d2 100644
--- a/user/test/com/google/gwt/uibinder/rebind/DesignTimeUtilsTest.java
+++ b/user/test/com/google/gwt/uibinder/rebind/DesignTimeUtilsTest.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -327,7 +327,7 @@
   }
 
   /**
-   * @return the only child {@link Element} with given tag name.
+   * Returns the only child {@link Element} with given tag name.
    */
   private static Element getChildElement(Element parent, String name) {
     NodeList elements = parent.getElementsByTagName(name);
@@ -336,7 +336,7 @@
   }
 
   /**
-   * @return the {@link XMLElement} wrapper for given {@link Element}.
+   * Returns the {@link XMLElement} wrapper for given {@link Element}.
    */
   private static XMLElement createXMLElement(Element elem,
       DesignTimeUtils designTime) {
diff --git a/user/test/com/google/gwt/uibinder/rebind/model/OwnerFieldClassTest.java b/user/test/com/google/gwt/uibinder/rebind/model/OwnerFieldClassTest.java
index 2ee6790..4e55392 100644
--- a/user/test/com/google/gwt/uibinder/rebind/model/OwnerFieldClassTest.java
+++ b/user/test/com/google/gwt/uibinder/rebind/model/OwnerFieldClassTest.java
@@ -343,7 +343,7 @@
   }
 
   /**
-   * Class with a {@link UiChild}-annotated methods.
+   * Class with {@link UiChild}-annotated methods.
    */
   @SuppressWarnings("unused")
   // We know these methods are unused
@@ -430,7 +430,7 @@
 
   /**
    * Asserts that the given method has the proper name and parameters.
-   * 
+   *
    * @param method the actual method
    * @param methodName the expected method name
    * @param parameterTypes the expected parameter types
diff --git a/user/test/com/google/gwt/uibinder/test/UiJavaResources.java b/user/test/com/google/gwt/uibinder/test/UiJavaResources.java
index 6e4c0a8..91852ee 100644
--- a/user/test/com/google/gwt/uibinder/test/UiJavaResources.java
+++ b/user/test/com/google/gwt/uibinder/test/UiJavaResources.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2009 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -480,8 +480,8 @@
   };
 
   /**
-   * @return a pale reflection of com.google.gwt.user.ui, plus
-   *         {@link JavaResourceBase#getStandardResources}
+   * Returns a pale reflection of com.google.gwt.user.ui, plus
+   * {@link JavaResourceBase#getStandardResources}.
    */
   public static Set<Resource> getUiResources() {
     Set<Resource> rtn = new HashSet<Resource>(
diff --git a/user/test/com/google/gwt/uibinder/test/client/FooLabel.java b/user/test/com/google/gwt/uibinder/test/client/FooLabel.java
index afbb5ea..492f224 100644
--- a/user/test/com/google/gwt/uibinder/test/client/FooLabel.java
+++ b/user/test/com/google/gwt/uibinder/test/client/FooLabel.java
@@ -26,7 +26,7 @@
 public class FooLabel extends Composite {
   int rawInt;
   Integer objectInteger;
-  
+
   boolean rawBoolean;
   Boolean objectBoolean;
 
@@ -53,7 +53,7 @@
   }
 
   /**
-   * @return the text
+   * Returns the text.
    */
   public String getText() {
     return getLabel().getText();
diff --git a/user/test/com/google/gwt/user/client/ui/CompositeTest.java b/user/test/com/google/gwt/user/client/ui/CompositeTest.java
index 37abcf8..902c56c 100644
--- a/user/test/com/google/gwt/user/client/ui/CompositeTest.java
+++ b/user/test/com/google/gwt/user/client/ui/CompositeTest.java
@@ -19,6 +19,7 @@
 import com.google.gwt.event.dom.client.BlurHandler;
 import com.google.gwt.event.dom.client.FocusEvent;
 import com.google.gwt.event.dom.client.FocusHandler;
+import com.google.gwt.event.logical.shared.AttachEvent;
 import com.google.gwt.junit.client.GWTTestCase;
 import com.google.gwt.user.client.Command;
 import com.google.gwt.user.client.DOM;
@@ -30,6 +31,8 @@
  */
 public class CompositeTest extends GWTTestCase {
 
+  static int orderIndex;
+
   @Override
   public String getModuleName() {
     return "com.google.gwt.user.User";
@@ -132,4 +135,43 @@
    */
   public void testNothing() {
   }
+
+  public void testAttachAndDetachOrder() {
+    class TestAttachHandler implements AttachEvent.Handler {
+      int delegateAttachOrder;
+      int delegateDetachOrder;
+
+      public void onAttachOrDetach(AttachEvent event) {
+        if (event.isAttached()) {
+          delegateAttachOrder = ++orderIndex;
+        } else {
+          delegateDetachOrder = ++orderIndex;
+        }
+      }
+    }
+
+    class TestComposite extends Composite {
+      TextBox tb = new TextBox();
+
+      public TestComposite() {
+        initWidget(tb);
+      }
+    }
+
+    TestComposite c = new TestComposite();
+    TestAttachHandler ca = new TestAttachHandler();
+    TestAttachHandler wa = new TestAttachHandler();
+
+    c.addAttachHandler(ca);
+    c.tb.addAttachHandler(wa);
+
+    RootPanel.get().add(c);
+    RootPanel.get().remove(c);
+
+    assertTrue(ca.delegateAttachOrder > 0);
+    assertTrue(ca.delegateDetachOrder > 0);
+    assertTrue(ca.delegateAttachOrder > wa.delegateAttachOrder);
+    assertTrue(ca.delegateDetachOrder < wa.delegateDetachOrder);
+  }
+
 }
diff --git a/user/test/com/google/gwt/user/client/ui/FormPanelTest.java b/user/test/com/google/gwt/user/client/ui/FormPanelTest.java
index 3e9bee0..5743726 100644
--- a/user/test/com/google/gwt/user/client/ui/FormPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/FormPanelTest.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -29,16 +29,16 @@
 
 /**
  * Tests the FormPanel.
- * 
+ *
  * @see com.google.gwt.user.server.ui.FormPanelTestServlet
  */
 public class FormPanelTest extends SimplePanelTestBase<FormPanel> {
-  
+
   /**
    * The maximum amount of time to wait for a test to finish.
    */
   private static final int TEST_DELAY = 15000;
-  
+
   public static boolean clicked = false;
 
   @Override
@@ -61,7 +61,7 @@
     });
     form.addSubmitCompleteHandler(new SubmitCompleteHandler() {
       public void onSubmitComplete(SubmitCompleteEvent event) {
-        fail("Form was cancelled and should not have been submitted");
+        fail("Form was canceled and should not have been submitted");
       }
     });
 
diff --git a/user/test/com/google/gwt/user/client/ui/ImageTest.java b/user/test/com/google/gwt/user/client/ui/ImageTest.java
index e3d6fbd..d32d411 100644
--- a/user/test/com/google/gwt/user/client/ui/ImageTest.java
+++ b/user/test/com/google/gwt/user/client/ui/ImageTest.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -61,7 +61,7 @@
     }
 
     /**
-     * @return true if the test has finished
+     * Returns true if the test has finished.
      */
     public boolean isFinished() {
       return finished;
@@ -85,7 +85,7 @@
     }
 
     /**
-     * @return true if the test has finished
+     * Returns true if the test has finished.
      */
     public boolean isFinished() {
       return finished;
@@ -100,7 +100,7 @@
    * Helper method that allows us to 'peek' at the private <code>state</code>
    * field in the Image object, and call the <code>state.getStateName()</code>
    * method.
-   * 
+   *
    * @param image The image instance
    * @return "unclipped" if image is in the unclipped state, or "clipped" if the
    *         image is in the clipped state
diff --git a/user/test/com/google/gwt/user/client/ui/WidgetOnLoadTest.java b/user/test/com/google/gwt/user/client/ui/WidgetOnLoadTest.java
index 51293de..dc6170f 100644
--- a/user/test/com/google/gwt/user/client/ui/WidgetOnLoadTest.java
+++ b/user/test/com/google/gwt/user/client/ui/WidgetOnLoadTest.java
@@ -108,50 +108,68 @@
 
   public void testOnLoadAndUnloadOrder() {
     class TestAttachHandler implements AttachEvent.Handler {
-      int delegateAttachOrder;
-      int delegateDetachOrder;
+      int handleAttachOrder;
+      int handleDetachOrder;
 
       public void onAttachOrDetach(AttachEvent event) {
         if (event.isAttached()) {
-          delegateAttachOrder = ++orderIndex;
+          handleAttachOrder = ++orderIndex;
         } else {
-          delegateDetachOrder = ++orderIndex;
+          handleDetachOrder = ++orderIndex;
         }
       }
     }
 
     TestPanel tp = new TestPanel();
+    TestAttachHandler tpa = new TestAttachHandler();
+    tp.addAttachHandler(tpa);
+
     TestWidget tw = new TestWidget();
-    TestAttachHandler ta = new TestAttachHandler();
-    tw.addAttachHandler(ta);
+    TestAttachHandler twa = new TestAttachHandler();
+    tw.addAttachHandler(twa);
 
     tp.add(tw);
     RootPanel.get().add(tp);
     RootPanel.get().remove(tp);
 
-    // Trivial tests. Ensure that each panel/widget's onAttach/onDetach are
-    // called before their associated onLoad/onUnload.
+    /*
+     * Ensure that each panel/widget's onAttach/onDetach are called before their
+     * associated onLoad/onUnload, and before attach events are fired
+     */
     assertTrue(tp.onAttachOrder < tp.onLoadOrder);
     assertTrue(tp.onDetachOrder < tp.onUnloadOrder);
     assertTrue(tw.onAttachOrder < tw.onLoadOrder);
-    assertTrue(tw.onLoadOrder < ta.delegateAttachOrder);
+    assertTrue(tw.onLoadOrder < twa.handleAttachOrder);
+    assertTrue(tp.onLoadOrder < tpa.handleAttachOrder);
     assertTrue(tw.onDetachOrder < tw.onUnloadOrder);
-    assertTrue(tw.onUnloadOrder < ta.delegateDetachOrder);
+    assertTrue(tw.onUnloadOrder < twa.handleDetachOrder);
+    assertTrue(tp.onUnloadOrder < tpa.handleDetachOrder);
 
-    // Also trivial. Ensure that the panel's onAttach/onDetach is called before
-    // its child's onAttach/onDetach.
+    /*
+     * Ensure that the panel's onAttach/onDetach is called before its child's
+     * onAttach/onDetach.
+     */
     assertTrue(tp.onAttachOrder < tw.onAttachOrder);
+    assertTrue(tp.onDetachOrder < tw.onDetachOrder);
 
-    // Ensure that the panel's onLoad is only called after its widgets are
-    // attached/loaded.
+    /*
+     * Ensure that the panel's onLoad is only called after its widgets are
+     * attached/loaded, and likewise for the attach event listeners
+     */
     assertTrue(tp.onLoadOrder > tw.onLoadOrder);
+    assertTrue(tpa.handleAttachOrder > twa.handleAttachOrder);
 
-    // Ensure that the panel's onUnload is called before its widgets are
-    // detached/unloaded.
+    /*
+     * Ensure that the panel's onUnload is called before its widgets are
+     * detached/unloaded.
+     */
     assertTrue(tp.onUnloadOrder < tw.onUnloadOrder);
+    assertTrue(tpa.handleDetachOrder < twa.handleDetachOrder);
 
-    // Make sure each widget/panel's elements are actually still attached to the
-    // DOM during onLoad/onUnload.
+    /*
+     * Make sure each widget/panel's elements are actually still attached to the
+     * DOM during onLoad/onUnload.
+     */
     assertTrue(tp.domAttachedOnLoad);
     assertTrue(tp.domAttachedOnUnload);
     assertTrue(tw.domAttachedOnLoad);
diff --git a/user/test/com/google/gwt/valuestore/server/SimpleFoo.java b/user/test/com/google/gwt/valuestore/server/SimpleFoo.java
index 35db57f..0745240 100644
--- a/user/test/com/google/gwt/valuestore/server/SimpleFoo.java
+++ b/user/test/com/google/gwt/valuestore/server/SimpleFoo.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2010 Google Inc.
- * 
+ *
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
@@ -76,31 +76,31 @@
   private String userName;
 
   private Character charField;
-  
+
   private Long longField;
 
   private BigDecimal bigDecimalField;
-  
+
   private BigInteger bigIntField;
-  
+
   private Short shortField;
-  
+
   private Byte byteField;
-  
+
   private Date created;
-  
+
   private Double doubleField;
-  
+
   private Float floatField;
-  
+
   private SimpleEnum enumField;
-  
+
   private Boolean boolField;
 
   private Boolean otherBoolField;
 
   private SimpleBar barField;
-  
+
   private SimpleFoo fooField;
 
   public SimpleFoo() {
@@ -124,14 +124,14 @@
   }
 
   /**
-   * @return the bigDecimalField
+   * Returns the bigDecimalField.
    */
   public BigDecimal getBigDecimalField() {
     return bigDecimalField;
   }
 
   /**
-   * @return the bigIntField
+   * Returns the bigIntField.
    */
   public BigInteger getBigIntField() {
     return bigIntField;
@@ -142,14 +142,14 @@
   }
 
   /**
-   * @return the byteField
+   * Returns the byteField.
    */
   public Byte getByteField() {
     return byteField;
   }
 
   /**
-   * @return the charField
+   * Returns the charField.
    */
   public Character getCharField() {
     return charField;
@@ -160,7 +160,7 @@
   }
 
   /**
-   * @return the doubleField
+   * Returns the doubleField.
    */
   public Double getDoubleField() {
     return doubleField;
@@ -171,7 +171,7 @@
   }
 
   /**
-   * @return the floatField
+   * Returns the floatField.
    */
   public Float getFloatField() {
     return floatField;
@@ -192,9 +192,9 @@
   public Long getLongField() {
     return longField;
   }
-  
+
   /**
-   * @return the otherBoolField
+   * Returns the otherBoolField.
    */
   public Boolean getOtherBoolField() {
     return otherBoolField;
@@ -205,7 +205,7 @@
   }
 
   /**
-   * @return the shortField
+   * Returns the shortField.
    */
   public Short getShortField() {
     return shortField;
@@ -220,7 +220,7 @@
   }
 
   public String hello(SimpleBar bar) {
-    return "Greetings " + bar.getUserName() + " from " + getUserName();  
+    return "Greetings " + bar.getUserName() + " from " + getUserName();
   }
 
   public void persist() {
@@ -289,7 +289,7 @@
   public void setFloatField(Float floatField) {
     this.floatField = floatField;
   }
-  
+
   public void setFooField(SimpleFoo fooField) {
     this.fooField = fooField;
   }
diff --git a/user/test/org/apache/commons/collections/LocalTestNode.java b/user/test/org/apache/commons/collections/LocalTestNode.java
index 64e22d8..5608b62 100644
--- a/user/test/org/apache/commons/collections/LocalTestNode.java
+++ b/user/test/org/apache/commons/collections/LocalTestNode.java
@@ -45,7 +45,7 @@
     }
 
     /**
-     * @return the unique key associated with the current node
+     * Returns the unique key associated with the current node.
      */
     Comparable getKey() {
         return key;
@@ -59,7 +59,7 @@
     }
 
     /**
-     * @return the unique value associated with the current node
+     * Returns the unique value associated with the current node.
      */
     Comparable getValue() {
         return value;
@@ -97,7 +97,7 @@
             return false;
         }
 
-         
+
         if(!(getClass().getName().equals(o.getClass().getName()))){
             return false;
         }
diff --git a/user/test/org/apache/commons/collections/TestCollection.java b/user/test/org/apache/commons/collections/TestCollection.java
index 7c148a8..e3aac53 100644
--- a/user/test/org/apache/commons/collections/TestCollection.java
+++ b/user/test/org/apache/commons/collections/TestCollection.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 package org.apache.commons.collections;
- 
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -30,12 +30,12 @@
  * Tests base {@link java.util.Collection} methods and contracts.
  * <p>
  * You should create a concrete subclass of this class to test any custom
- * {@link Collection} implementation.  At minimum, you'll have to 
- * implement the {@link #makeCollection()} method.  You might want to 
+ * {@link Collection} implementation.  At minimum, you'll have to
+ * implement the {@link #makeCollection()} method.  You might want to
  * override some of the additional protected methods as well:<P>
  *
  * <B>Element Population Methods</B><P>
- * 
+ *
  * Override these if your collection restricts what kind of elements are
  * allowed (for instance, if <Code>null</Code> is not permitted):
  * <UL>
@@ -69,7 +69,7 @@
  *
  * The {@link #collection} field holds an instance of your collection
  * implementation; the {@link #confirmed} field holds an instance of the
- * confirmed collection implementation.  The {@link #resetEmpty()} and 
+ * confirmed collection implementation.  The {@link #resetEmpty()} and
  * {@link #resetFull()} methods set these fields to empty or full collections,
  * so that tests can proceed from a known state.<P>
  *
@@ -80,14 +80,14 @@
  * views of a map, {@link TestMap} would override {@link #verify()} to make
  * sure the map is changed after the collection view is changed.
  *
- * If you're extending this class directly, you will have to provide 
+ * If you're extending this class directly, you will have to provide
  * implementations for the following:
  * <UL>
  * <LI>{@link #makeConfirmedCollection()}
  * <LI>{@link #makeConfirmedFullCollection()}
  * </UL>
  *
- * Those methods should provide a confirmed collection implementation 
+ * Those methods should provide a confirmed collection implementation
  * that's compatible with your collection implementation.<P>
  *
  * If you're extending {@link TestList}, {@link TestSet},
@@ -102,7 +102,7 @@
  * test case (method) your {@link Collection} fails.  For instance, the
  * {@link #testIteratorFailFast()} method is provided since most collections
  * have fail-fast iterators; however, that's not strictly required by the
- * collection contract, so you may want to override that method to do 
+ * collection contract, so you may want to override that method to do
  * nothing.<P>
  *
  * @author Rodney Waldhoff
@@ -113,7 +113,7 @@
 public abstract class TestCollection extends TestObject {
 
     //
-    // NOTE: 
+    // NOTE:
     //
     // Collection doesn't define any semantics for equals, and recommends you
     // use reference-based default behavior of Object.equals.  (And a test for
@@ -126,21 +126,21 @@
     // These fields are used by reset() and verify(), and any test
     // method that tests a modification.
 
-    /** 
+    /**
      *  A collection instance that will be used for testing.
      */
     protected Collection collection;
 
-    /** 
+    /**
      *  Confirmed collection.  This is an instance of a collection that is
      *  confirmed to conform exactly to the java.util.Collection contract.
-     *  Modification operations are tested by performing a mod on your 
+     *  Modification operations are tested by performing a mod on your
      *  collection, performing the exact same mod on an equivalent confirmed
      *  collection, and then calling verify() to make sure your collection
      *  still matches the confirmed collection.
      */
     protected Collection confirmed;
- 
+
 
 
     /**
@@ -169,7 +169,7 @@
      *  distinguishable with information not readily available.  That is, if a
      *  particular value is to be removed from the collection, then there is
      *  one and only one value that can be removed, even if there are other
-     *  elements which are equal to it.  
+     *  elements which are equal to it.
      *
      *  <P>In most collection cases, elements are not distinguishable (equal is
      *  equal), thus this method defaults to return false.  In some cases,
@@ -191,7 +191,7 @@
     }
 
     /**
-     *  Verifies that {@link #collection} and {@link #confirmed} have 
+     *  Verifies that {@link #collection} and {@link #confirmed} have
      *  identical state.
      */
     protected void verify() {
@@ -199,7 +199,7 @@
         assertEquals("Collection size should match confirmed collection's",
                      confirmedSize, collection.size());
         assertEquals("Collection isEmpty() result should match confirmed " +
-                     " collection's", 
+                     " collection's",
                      confirmed.isEmpty(), collection.isEmpty());
 
         // verify the collections are the same by attempting to match each
@@ -216,7 +216,7 @@
 
         Iterator iter;
 
-        iter = confirmed.iterator(); 
+        iter = confirmed.iterator();
         int pos = 0;
         while(iter.hasNext()) {
             confirmedValues[pos++] = iter.next();
@@ -225,7 +225,7 @@
         // allocate an array of boolean flags for tracking values that have
         // been matched once and only once.
         boolean[] matched = new boolean[confirmedSize];
-        
+
         // now iterate through the values of the collection and try to match
         // the value with one in the confirmed array.
         iter = collection.iterator();
@@ -251,7 +251,7 @@
                      "confirmed collection does not have.");
             }
         }
-        
+
         // make sure there aren't any unmatched values
         for(int i = 0; i < confirmedSize; i++) {
             if(!matched[i]) {
@@ -261,11 +261,11 @@
             }
         }
     }
-    
-    
+
+
     /**
      *  Returns a confirmed empty collection.
-     *  For instance, an {@link java.util.ArrayList} for lists or a
+     *  For instance, a {@link java.util.ArrayList} for lists or a
      *  {@link java.util.HashSet} for sets.
      *
      *  @return a confirmed empty collection
@@ -276,7 +276,7 @@
 
     /**
      *  Returns a confirmed full collection.
-     *  For instance, an {@link java.util.ArrayList} for lists or a
+     *  For instance, a {@link java.util.ArrayList} for lists or a
      *  {@link java.util.HashSet} for sets.  The returned collection
      *  should contain the elements returned by {@link #getFullElements()}.
      *
@@ -286,7 +286,7 @@
 
 
     /**
-     *  Returns true if the collections produced by 
+     *  Returns true if the collections produced by
      *  {@link #makeCollection()} and {@link #makeFullCollection()}
      *  support the <Code>add</Code> and <Code>addAll</Code>
      *  operations.<P>
@@ -299,7 +299,7 @@
 
 
     /**
-     *  Returns true if the collections produced by 
+     *  Returns true if the collections produced by
      *  {@link #makeCollection()} and {@link #makeFullCollection()}
      *  support the <Code>remove</Code>, <Code>removeAll</Code>,
      *  <Code>retainAll</Code>, <Code>clear</Code> and
@@ -316,15 +316,15 @@
      *  Returns an array of objects that are contained in a collection
      *  produced by {@link #makeFullCollection()}.  Every element in the
      *  returned array <I>must</I> be an element in a full collection.<P>
-     *  The default implementation returns a heterogenous array of 
-     *  objects with some duplicates and with the null element.  
+     *  The default implementation returns a heterogenous array of
+     *  objects with some duplicates and with the null element.
      *  Override if you require specific testing elements.  Note that if you
      *  override {@link #makeFullCollection()}, you <I>must</I> override
      *  this method to reflect the contents of a full collection.
      */
     protected Object[] getFullElements() {
         ArrayList list = new ArrayList();
-        
+
         list.addAll(Arrays.asList(getFullNonNullElements()));
         list.add(4, null);
         return list.toArray();
@@ -333,7 +333,7 @@
 
     /**
      *  Returns an array of elements that are <I>not</I> contained in a
-     *  full collection.  Every element in the returned array must 
+     *  full collection.  Every element in the returned array must
      *  not exist in a collection returned by {@link #makeFullCollection()}.
      *  The default implementation returns a heterogenous array of elements
      *  without null.  Note that some of the tests add these elements
@@ -343,10 +343,10 @@
     protected Object[] getOtherElements() {
         return getOtherNonNullElements();
     }
-    
+
 
     /**
-     * Return a new, empty {@link Collection} to be used for testing.
+     * Returns a new, empty {@link Collection} to be used for testing.
      */
     protected abstract Collection makeCollection();
 
@@ -379,7 +379,7 @@
      */
     public void testCollectionAdd() {
         if (!isAddSupported()) return;
-        
+
         Object[] elements = getFullElements();
         for (int i = 0; i < elements.length; i++) {
             resetEmpty();
@@ -387,10 +387,10 @@
             confirmed.add(elements[i]);
             verify();
             assertTrue("Empty collection changed after add", r);
-            assertTrue("Collection size is 1 after first add", 
+            assertTrue("Collection size is 1 after first add",
                        collection.size() == 1);
         }
-        
+
         resetEmpty();
         int size = 0;
         for (int i = 0; i < elements.length; i++) {
@@ -398,14 +398,14 @@
             confirmed.add(elements[i]);
             verify();
             if (r) size++;
-            assertEquals("Collection size should grow after add", 
+            assertEquals("Collection size should grow after add",
                          size, collection.size());
             assertTrue("Collection should contain added element",
                        collection.contains(elements[i]));
         }
     }
-    
-    
+
+
     /**
      *  Tests {@link Collection#addAll(Collection)}.
      */
@@ -434,21 +434,21 @@
             assertTrue("Full collection should contain added element",
                        collection.contains(elements[i]));
         }
-        assertEquals("Size should increase after addAll", 
+        assertEquals("Size should increase after addAll",
                      size + elements.length, collection.size());
-        
+
         resetFull();
         size = collection.size();
         r = collection.addAll(Arrays.asList(getFullElements()));
         confirmed.addAll(Arrays.asList(getFullElements()));
         verify();
         if (r) {
-            assertTrue("Size should increase if addAll returns true", 
+            assertTrue("Size should increase if addAll returns true",
                        size < collection.size());
         } else {
             assertEquals("Size should not change if addAll returns false",
                          size, collection.size());
-        } 
+        }
     }
 
 
@@ -458,7 +458,7 @@
      */
     public void testUnsupportedAdd() {
         if (isAddSupported()) return;
-        
+
         resetEmpty();
         try {
             collection.add(new Object());
@@ -490,7 +490,7 @@
         // make sure things didn't change even if the expected exception was
         // thrown.
         verify();
-        
+
         try {
             collection.addAll(Arrays.asList(getOtherElements()));
             fail("Full collection should not support addAll.");
@@ -517,9 +517,9 @@
         collection.clear();
         confirmed.clear();
         verify();
-    }    
+    }
 
-    
+
     /**
      *  Tests {@link Collection#contains(Object)}.
      */
@@ -546,7 +546,7 @@
         resetFull();
         elements = getFullElements();
         for(int i = 0; i < elements.length; i++) {
-            assertTrue("Full collection should contain element.", 
+            assertTrue("Full collection should contain element.",
                        collection.contains(elements[i]));
         }
         // make sure calls to "contains" don't change anything
@@ -555,7 +555,7 @@
         resetFull();
         elements = getOtherElements();
         for(int i = 0; i < elements.length; i++) {
-            assertTrue("Full collection shouldn't contain element", 
+            assertTrue("Full collection shouldn't contain element",
                        !collection.contains(elements[i]));
         }
     }
@@ -576,9 +576,9 @@
         verify();
 
         resetFull();
-        assertTrue("Full collection shouldn't contain other elements", 
+        assertTrue("Full collection shouldn't contain other elements",
                    !collection.containsAll(col));
-        
+
         col.clear();
         col.addAll(Arrays.asList(getFullElements()));
         assertTrue("Full collection should containAll full elements",
@@ -586,13 +586,13 @@
         // make sure calls to "containsAll" don't change anything
         verify();
 
-         
-        assertTrue("Full collection should containAll itself", 
+
+        assertTrue("Full collection should containAll itself",
                    collection.containsAll(collection));
 
         // make sure calls to "containsAll" don't change anything
         verify();
-        
+
         col = new ArrayList();
         col.addAll(Arrays.asList(getFullElements()));
         col.addAll(Arrays.asList(getFullElements()));
@@ -608,13 +608,13 @@
      */
     public void testCollectionIsEmpty() {
         resetEmpty();
-        assertEquals("New Collection should be empty.", 
+        assertEquals("New Collection should be empty.",
                      true, collection.isEmpty());
         // make sure calls to "isEmpty() don't change anything
         verify();
 
         resetFull();
-        assertEquals("Full collection shouldn't be empty", 
+        assertEquals("Full collection shouldn't be empty",
                      false, collection.isEmpty());
         // make sure calls to "isEmpty() don't change anything
         verify();
@@ -635,19 +635,19 @@
                  "NoSuchElementException when next is called.");
         } catch(NoSuchElementException e) {
             // expected
-        } 
+        }
         // make sure nothing has changed after non-modification
         verify();
 
         resetFull();
         it1 = collection.iterator();
         for (int i = 0; i < collection.size(); i++) {
-            assertTrue("Iterator for full collection should haveNext", 
+            assertTrue("Iterator for full collection should haveNext",
                        it1.hasNext());
             it1.next();
         }
         assertTrue("Iterator should be finished", !it1.hasNext());
-        
+
         ArrayList list = new ArrayList();
         it1 = collection.iterator();
         for (int i = 0; i < collection.size(); i++) {
@@ -706,7 +706,7 @@
             // contents are still the same.  Otherwise, we don't have the
             // ability to distinguish the elements and determine which to
             // remove from the confirmed collection (in which case, we don't
-            // verify because we don't know how). 
+            // verify because we don't know how).
             //
             // see areEqualElementsDistinguishable()
             if(!areEqualElementsDistinguishable()) {
@@ -720,7 +720,7 @@
         }
         assertTrue("Collection should be empty after iterator purge",
                    collection.isEmpty());
-        
+
         resetFull();
         iter = collection.iterator();
         iter.next();
@@ -743,20 +743,20 @@
         resetEmpty();
         Object[] elements = getFullElements();
         for (int i = 0; i < elements.length; i++) {
-            assertTrue("Shouldn't remove nonexistent element", 
+            assertTrue("Shouldn't remove nonexistent element",
                        !collection.remove(elements[i]));
             verify();
         }
-        
+
         Object[] other = getOtherElements();
-        
+
         resetFull();
         for (int i = 0; i < other.length; i++) {
-            assertTrue("Shouldn't remove nonexistent other element", 
+            assertTrue("Shouldn't remove nonexistent other element",
                        !collection.remove(other[i]));
             verify();
         }
-        
+
         int size = collection.size();
         for (int i = 0; i < elements.length; i++) {
             resetFull();
@@ -768,7 +768,7 @@
             // contents are still the same.  Otherwise, we don't have the
             // ability to distinguish the elements and determine which to
             // remove from the confirmed collection (in which case, we don't
-            // verify because we don't know how). 
+            // verify because we don't know how).
             //
             // see areEqualElementsDistinguishable()
             if(!areEqualElementsDistinguishable()) {
@@ -776,11 +776,11 @@
                 verify();
             }
 
-            assertEquals("Collection should shrink after remove", 
+            assertEquals("Collection should shrink after remove",
                          size - 1, collection.size());
         }
     }
-    
+
 
     /**
      *  Tests {@link Collection#removeAll(Collection)}.
@@ -790,45 +790,45 @@
 
         resetEmpty();
         assertTrue("Emtpy collection removeAll should return false for " +
-                   "empty input", 
+                   "empty input",
                    !collection.removeAll(Collections.EMPTY_SET));
         verify();
-        
+
         assertTrue("Emtpy collection removeAll should return false for " +
-                   "nonempty input", 
+                   "nonempty input",
                    !collection.removeAll(new ArrayList(collection)));
         verify();
-        
+
         resetFull();
-        assertTrue("Full collection removeAll should return false for " + 
-                   "empty input", 
+        assertTrue("Full collection removeAll should return false for " +
+                   "empty input",
                    !collection.removeAll(Collections.EMPTY_SET));
         verify();
-        
+
         assertTrue("Full collection removeAll should return false for " +
-                   "other elements", 
+                   "other elements",
                    !collection.removeAll(Arrays.asList(getOtherElements())));
         verify();
-        
+
         assertTrue("Full collection removeAll should return true for " +
-                   "full elements", 
+                   "full elements",
                    collection.removeAll(new HashSet(collection)));
         confirmed.removeAll(new HashSet(confirmed));
         verify();
-        
+
         resetFull();
 
         int size = collection.size();
         Object[] s = getFullElements();
         List l = new ArrayList();
         l.add(s[2]); l.add(s[3]); l.add(s[3]);
-        
-        assertTrue("Full collection removeAll should work", 
+
+        assertTrue("Full collection removeAll should work",
                    collection.removeAll(l));
         confirmed.removeAll(l);
         verify();
-        
-        assertTrue("Collection should shrink after removeAll", 
+
+        assertTrue("Collection should shrink after removeAll",
                    collection.size() < size);
         Iterator iter = l.iterator();
         while (iter.hasNext()) {
@@ -848,36 +848,36 @@
         List elements = Arrays.asList(getFullElements());
         List other = Arrays.asList(getOtherElements());
         Set empty = new HashSet();
-        
-        assertTrue("Empty retainAll() should return false", 
+
+        assertTrue("Empty retainAll() should return false",
                    !collection.retainAll(empty));
         verify();
-        
-        assertTrue("Empty retainAll() should return false", 
+
+        assertTrue("Empty retainAll() should return false",
                    !collection.retainAll(elements));
         verify();
-        
+
         resetFull();
-        assertTrue("Collection should change from retainAll empty", 
+        assertTrue("Collection should change from retainAll empty",
                    collection.retainAll(empty));
         confirmed.retainAll(empty);
         verify();
-        
+
         resetFull();
-        assertTrue("Collection changed from retainAll other", 
+        assertTrue("Collection changed from retainAll other",
                    collection.retainAll(other));
         confirmed.retainAll(other);
         verify();
-        
+
         resetFull();
         int size = collection.size();
         assertTrue("Collection shouldn't change from retainAll elements",
                    !collection.retainAll(elements));
         verify();
-        assertEquals("Collection size shouldn't change", size, 
+        assertEquals("Collection size shouldn't change", size,
                      collection.size());
-        
-        
+
+
         resetFull();
         HashSet set = new HashSet(elements);
         size = collection.size();
@@ -887,8 +887,8 @@
         assertEquals("Collection size didn't change from nonduplicate " +
                      "retainAll", size, collection.size());
     }
-    
-    
+
+
     /**
      *  Tests {@link Collection#size()}.
      */
@@ -897,23 +897,23 @@
         assertEquals("Size of new Collection is 0.", 0, collection.size());
 
         resetFull();
-        assertTrue("Size of full collection should be greater than zero", 
+        assertTrue("Size of full collection should be greater than zero",
                    collection.size() > 0);
     }
 
 
-  
+
 
     /**
      *  Tests <Code>toString</Code> on a collection.
      */
     public void testCollectionToString() {
         resetEmpty();
-        assertTrue("toString shouldn't return null", 
+        assertTrue("toString shouldn't return null",
                    collection.toString() != null);
 
         resetFull();
-        assertTrue("toString shouldn't return null", 
+        assertTrue("toString shouldn't return null",
                    collection.toString() != null);
     }
 
@@ -971,12 +971,12 @@
 
     }
 
- 
+
 
     /**
      *  Returns a list of elements suitable for return by
      *  {@link #getFullElements()}.  The array returned by this method
-     *  does not include null, but does include a variety of objects 
+     *  does not include null, but does include a variety of objects
      *  of different types.  Override getFullElements to return
      *  the results of this method if your collection does not support
      *  the null element.
@@ -1006,7 +1006,7 @@
 
 
     /**
-     *  Returns the default list of objects returned by 
+     *  Returns the default list of objects returned by
      *  {@link #getOtherElements()}.  Includes many objects
      *  of different types.
      */