diff --git a/user/javadoc/com/google/gwt/examples/cellview/CellBrowserExample2.java b/user/javadoc/com/google/gwt/examples/cellview/CellBrowserExample2.java
index af538a9..013db42 100644
--- a/user/javadoc/com/google/gwt/examples/cellview/CellBrowserExample2.java
+++ b/user/javadoc/com/google/gwt/examples/cellview/CellBrowserExample2.java
@@ -61,7 +61,7 @@
     }
 
     /**
-     * @return the list of songs in the playlist
+     * Return the list of songs in the playlist.
      */
     public List<String> getSongs() {
       return songs;
@@ -94,7 +94,7 @@
     }
 
     /**
-     * @return the rockin' playlist for this composter
+     * Return the rockin' playlist for this composer.
      */
     public List<Playlist> getPlaylists() {
       return playlists;
diff --git a/user/javadoc/com/google/gwt/examples/cellview/CellTreeExample2.java b/user/javadoc/com/google/gwt/examples/cellview/CellTreeExample2.java
index f51dbec..6c713f8 100644
--- a/user/javadoc/com/google/gwt/examples/cellview/CellTreeExample2.java
+++ b/user/javadoc/com/google/gwt/examples/cellview/CellTreeExample2.java
@@ -62,7 +62,7 @@
     }
 
     /**
-     * @return the list of songs in the playlist
+     * Return the list of songs in the playlist.
      */
     public List<String> getSongs() {
       return songs;
@@ -95,7 +95,7 @@
     }
 
     /**
-     * @return the rockin' playlist for this composter
+     * Return the rockin' playlist for this composer.
      */
     public List<Playlist> getPlaylists() {
       return playlists;
diff --git a/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java b/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java
index 7841260..0e2bbfd 100644
--- a/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java
+++ b/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java
@@ -25,16 +25,19 @@
  * A superclass for {@link Cell}s that render or escape a String argument as
  * HTML.
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * @param <C> the type that this Cell represents
  */
 public abstract class AbstractSafeHtmlCell<C> extends AbstractCell<C> {
 
   private final SafeHtmlRenderer<C> renderer;
 
+  /**
+   * Construct an AbstractSafeHtmlCell using a given {@link SafeHtmlRenderer}
+   * that will consume a given set of events.
+   * 
+   * @param renderer a SafeHtmlRenderer
+   * @param consumedEvents a varargs list of event names
+   */
   public AbstractSafeHtmlCell(SafeHtmlRenderer<C> renderer,
       String... consumedEvents) {
     super(consumedEvents);
@@ -44,6 +47,13 @@
     this.renderer = renderer;
   }
 
+  /**
+   * Construct an AbstractSafeHtmlCell using a given {@link SafeHtmlRenderer}
+   * that will consume a given set of events.
+   * 
+   * @param renderer a SafeHtmlRenderer
+   * @param consumedEvents a Set of event names
+   */
   public AbstractSafeHtmlCell(SafeHtmlRenderer<C> renderer,
       Set<String> consumedEvents) {
     super(consumedEvents);
@@ -53,6 +63,9 @@
     this.renderer = renderer;
   }
 
+  /**
+   * Return the {@link SafeHtmlRenderer} used by this cell.
+   */
   public SafeHtmlRenderer<C> getRenderer() {
     return renderer;
   }
@@ -66,5 +79,13 @@
     }
   }
 
+  /**
+   * Render the cell contents after they have been converted to {@link SafeHtml}
+   * form.
+   * 
+   * @param data a {@link SafeHtml} string
+   * @param key the unique key associated with the row object
+   * @param sb the {@link SafeHtmlBuilder} to be written to
+   */
   protected abstract void render(SafeHtml data, Object key, SafeHtmlBuilder sb);
 }
diff --git a/user/src/com/google/gwt/cell/client/ActionCell.java b/user/src/com/google/gwt/cell/client/ActionCell.java
index c870378..8e06066 100644
--- a/user/src/com/google/gwt/cell/client/ActionCell.java
+++ b/user/src/com/google/gwt/cell/client/ActionCell.java
@@ -25,10 +25,6 @@
  * A cell that renders a button and takes a delegate to perform actions on
  * mouseUp.
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * @param <C> the type that this Cell represents
  */
 public class ActionCell<C> extends AbstractCell<C> {
@@ -39,6 +35,9 @@
    * @param <T> the type that this delegate acts on
    */
   public static interface Delegate<T> {
+    /**
+     * Perform the desired action on the given object.
+     */
     void execute(T object);
   }
 
diff --git a/user/src/com/google/gwt/cell/client/ButtonCell.java b/user/src/com/google/gwt/cell/client/ButtonCell.java
index d64631b..e819440 100644
--- a/user/src/com/google/gwt/cell/client/ButtonCell.java
+++ b/user/src/com/google/gwt/cell/client/ButtonCell.java
@@ -24,17 +24,19 @@
 
 /**
  * A {@link Cell} used to render a button.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  */
 public class ButtonCell extends AbstractSafeHtmlCell<String> {
 
+  /**
+   * Construct a new ButtonCell that will use a {@link SimpleSafeHtmlRenderer}.
+   */
   public ButtonCell() {
     this(SimpleSafeHtmlRenderer.getInstance());
   }
 
+  /**
+   * Construct a new ButtonCell that will use a given {@link SafeHtmlRenderer}.
+   */
   public ButtonCell(SafeHtmlRenderer<String> renderer) {
     super(renderer, "click", "keydown");
   }
diff --git a/user/src/com/google/gwt/cell/client/Cell.java b/user/src/com/google/gwt/cell/client/Cell.java
index 364780c..85bb507 100644
--- a/user/src/com/google/gwt/cell/client/Cell.java
+++ b/user/src/com/google/gwt/cell/client/Cell.java
@@ -90,15 +90,15 @@
       ValueUpdater<C> valueUpdater);
 
   /**
-   * Render a cell as HTML into a StringBuilder, suitable for passing to
-   * {@link Element#setInnerHTML} on a container element.
-   *
+   * Render a cell as HTML into a {@link SafeHtmlBuilder}, suitable for passing
+   * to {@link Element#setInnerHTML} on a container element.
+   * 
    * <p>
    * Note: If your cell contains natively focusable elements, such as buttons or
    * input elements, be sure to set the tabIndex to -1 so that they do not steal
    * focus away from the containing widget.
    * </p>
-   *
+   * 
    * @param value the cell value to be rendered
    * @param key the unique key associated with the row object
    * @param sb the {@link SafeHtmlBuilder} to be written to
diff --git a/user/src/com/google/gwt/cell/client/CheckboxCell.java b/user/src/com/google/gwt/cell/client/CheckboxCell.java
index 38def3e..81f319a 100644
--- a/user/src/com/google/gwt/cell/client/CheckboxCell.java
+++ b/user/src/com/google/gwt/cell/client/CheckboxCell.java
@@ -26,10 +26,6 @@
 /**
  * A {@link Cell} used to render a checkbox. The value of the checkbox may be
  * toggled using the ENTER key as well as via mouse click.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  */
 public class CheckboxCell extends AbstractEditableCell<Boolean, Boolean> {
 
diff --git a/user/src/com/google/gwt/cell/client/ClickableTextCell.java b/user/src/com/google/gwt/cell/client/ClickableTextCell.java
index 2b373ac..2c57c59 100644
--- a/user/src/com/google/gwt/cell/client/ClickableTextCell.java
+++ b/user/src/com/google/gwt/cell/client/ClickableTextCell.java
@@ -25,17 +25,21 @@
 /**
  * A {@link Cell} used to render text. Clicking on the cell causes its
  * {@link ValueUpdater} to be called.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  */
 public class ClickableTextCell extends AbstractSafeHtmlCell<String> {
 
+  /**
+   * Construct a new ClickableTextCell that will use a
+   * {@link SimpleSafeHtmlRenderer}.
+   */
   public ClickableTextCell() {
     this(SimpleSafeHtmlRenderer.getInstance());
   }
 
+  /**
+   * Construct a new ClickableTextCell that will use a given
+   * {@link SafeHtmlRenderer}.
+   */
   public ClickableTextCell(SafeHtmlRenderer<String> renderer) {
     super(renderer, "click", "keydown");
   }
diff --git a/user/src/com/google/gwt/cell/client/CompositeCell.java b/user/src/com/google/gwt/cell/client/CompositeCell.java
index edcc8ad..6013d46 100644
--- a/user/src/com/google/gwt/cell/client/CompositeCell.java
+++ b/user/src/com/google/gwt/cell/client/CompositeCell.java
@@ -37,10 +37,6 @@
  * Div), the component cells will stack vertically.
  * </p>
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * @param <C> the type that this Cell represents
  */
 public class CompositeCell<C> extends AbstractCell<C> {
@@ -179,6 +175,22 @@
     return parent;
   }
 
+  /**
+   * Render the composite cell as HTML into a {@link SafeHtmlBuilder}, suitable
+   * for passing to {@link Element#setInnerHTML} on a container element.
+   * 
+   * <p>
+   * Note: If your cell contains natively focusable elements, such as buttons or
+   * input elements, be sure to set the tabIndex to -1 so that they do not steal
+   * focus away from the containing widget.
+   * </p>
+   * 
+   * @param value the cell value to be rendered
+   * @param key the unique key associated with the row object
+   * @param sb the {@link SafeHtmlBuilder} to be written to
+   * @param hasCell a {@link HasCell} instance containing the cells to be
+   *          rendered within this cell
+   */
   protected <X> void render(C value, Object key, SafeHtmlBuilder sb,
       HasCell<C, X> hasCell) {
     Cell<X> cell = hasCell.getCell();
diff --git a/user/src/com/google/gwt/cell/client/DateCell.java b/user/src/com/google/gwt/cell/client/DateCell.java
index c03e96c..bfab2af 100644
--- a/user/src/com/google/gwt/cell/client/DateCell.java
+++ b/user/src/com/google/gwt/cell/client/DateCell.java
@@ -25,10 +25,6 @@
 
 /**
  * A {@link Cell} used to render {@link Date}s.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  */
 public class DateCell extends AbstractCell<Date> {
 
diff --git a/user/src/com/google/gwt/cell/client/DatePickerCell.java b/user/src/com/google/gwt/cell/client/DatePickerCell.java
index 5e56364..d8c957b 100644
--- a/user/src/com/google/gwt/cell/client/DatePickerCell.java
+++ b/user/src/com/google/gwt/cell/client/DatePickerCell.java
@@ -37,21 +37,18 @@
 /**
  * A {@link Cell} used to render and edit {@link Date}s. When a cell is selected
  * by clicking on it, a {@link DatePicker} is popped up. When a date is selected
- * using the DatePicker, the new date is passed to the
+ * using the {@code DatePicker}, the new date is passed to the
  * {@link ValueUpdater#update update} method of the {@link ValueUpdater} that
  * was passed to {@link #onBrowserEvent} for the click event. Note that this
- * means that the call to ValueUpdater.update will occur after onBrowserEvent
- * has returned. Pressing the 'escape' key dismisses the DatePicker popup
- * without calling ValueUpdater.update.
- *
+ * means that the call to {@code ValueUpdater.update} will occur after {@code
+ * onBrowserEvent} has returned. Pressing the 'escape' key dismisses the {@code
+ * DatePicker} popup without calling {@code ValueUpdater.update}.
+ * 
  * <p>
- * Each DatePickerCell has a unique DatePicker popup associated with it; thus,
- * if a single DatePickerCell is used as the cell for a column in a table, only
- * one entry in that column will be editable at a given time.
- * </p>
- *
- * <p>
- * Note: This class is new and its interface subject to change.
+ * Each {@code DatePickerCell} has a unique {@code DatePicker} popup associated
+ * with it; thus, if a single {@code DatePickerCell} is used as the cell for a
+ * column in a table, only one entry in that column will be editable at a given
+ * time.
  * </p>
  */
 public class DatePickerCell extends AbstractEditableCell<Date, Date> {
diff --git a/user/src/com/google/gwt/cell/client/EditTextCell.java b/user/src/com/google/gwt/cell/client/EditTextCell.java
index e9c540d..07d5ef8 100644
--- a/user/src/com/google/gwt/cell/client/EditTextCell.java
+++ b/user/src/com/google/gwt/cell/client/EditTextCell.java
@@ -30,10 +30,6 @@
 /**
  * An editable text cell. Click to edit, escape to cancel, return to commit.
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * Important TODO: This cell still treats its value as HTML for rendering
  * purposes, which is entirely wrong. It should be able to treat it as a proper
  * string (especially since that's all the user can enter).
@@ -140,10 +136,18 @@
 
   private final SafeHtmlRenderer<String> renderer;
 
+  /**
+   * Construct a new EditTextCell that will use a
+   * {@link SimpleSafeHtmlRenderer}.
+   */
   public EditTextCell() {
     this(SimpleSafeHtmlRenderer.getInstance());
   }
 
+  /**
+   * Construct a new EditTextCell that will use a given {@link SafeHtmlRenderer}
+   * .
+   */
   public EditTextCell(SafeHtmlRenderer<String> renderer) {
     super("click", "keyup", "keydown", "blur");
     if (template == null) {
diff --git a/user/src/com/google/gwt/cell/client/FieldUpdater.java b/user/src/com/google/gwt/cell/client/FieldUpdater.java
index a7f8a6c..6c4b01d 100644
--- a/user/src/com/google/gwt/cell/client/FieldUpdater.java
+++ b/user/src/com/google/gwt/cell/client/FieldUpdater.java
@@ -18,10 +18,6 @@
 /**
  * A {@link FieldUpdater} may be added to a Column to update a particular field
  * of a data item.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  * 
  * @param <T> the data type that will be modified
  * @param <C> the data type of the modified field
diff --git a/user/src/com/google/gwt/cell/client/HasCell.java b/user/src/com/google/gwt/cell/client/HasCell.java
index ce09b72..01e782a 100644
--- a/user/src/com/google/gwt/cell/client/HasCell.java
+++ b/user/src/com/google/gwt/cell/client/HasCell.java
@@ -20,10 +20,6 @@
  * of type T, provide a {@link Cell} to render that value, and provide a
  * {@link FieldUpdater} to perform notification of updates to the cell.
  * 
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- * 
  * @param <T> the underlying data type
  * @param <C> the cell data type
  */
diff --git a/user/src/com/google/gwt/cell/client/IconCellDecorator.java b/user/src/com/google/gwt/cell/client/IconCellDecorator.java
index 8a232bf..496ac3c 100644
--- a/user/src/com/google/gwt/cell/client/IconCellDecorator.java
+++ b/user/src/com/google/gwt/cell/client/IconCellDecorator.java
@@ -33,10 +33,6 @@
 /**
  * A {@link Cell} decorator that adds an icon to another {@link Cell}.
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * @param <C> the type that this Cell represents
  */
 public class IconCellDecorator<C> implements Cell<C> {
diff --git a/user/src/com/google/gwt/cell/client/ImageCell.java b/user/src/com/google/gwt/cell/client/ImageCell.java
index 42ee802..25f173d 100644
--- a/user/src/com/google/gwt/cell/client/ImageCell.java
+++ b/user/src/com/google/gwt/cell/client/ImageCell.java
@@ -22,7 +22,7 @@
 
 /**
  * <p>
- * A {@link AbstractCell} used to render an image. The String value is the url
+ * An {@link AbstractCell} used to render an image. The String value is the url
  * of the image.
  * </p>
  * <p>
@@ -41,6 +41,9 @@
 
   private static Template template;
 
+  /**
+   * Construct a new ImageCell.
+   */
   public ImageCell() {
     if (template == null) {
       template = GWT.create(Template.class);
diff --git a/user/src/com/google/gwt/cell/client/ImageLoadingCell.java b/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
index 8726544..10c1a24 100644
--- a/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
+++ b/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
@@ -31,7 +31,7 @@
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
 
 /**
- * A {@link AbstractCell} used to render an image. A loading indicator is used
+ * An {@link AbstractCell} used to render an image. A loading indicator is used
  * until the image is fully loaded. The String value is the url of the image.
  */
 public class ImageLoadingCell extends AbstractCell<String> {
diff --git a/user/src/com/google/gwt/cell/client/ImageResourceCell.java b/user/src/com/google/gwt/cell/client/ImageResourceCell.java
index e5eec17..ce9fb37 100644
--- a/user/src/com/google/gwt/cell/client/ImageResourceCell.java
+++ b/user/src/com/google/gwt/cell/client/ImageResourceCell.java
@@ -22,7 +22,7 @@
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
 
 /**
- * A {@link AbstractCell} used to render an {@link ImageResource}.
+ * An {@link AbstractCell} used to render an {@link ImageResource}.
  *
  * <p>
  * This class assumes that the URL returned from ImageResource is safe from
@@ -32,6 +32,12 @@
  * URL before returning it from {@link ImageResource#getURL()}.
  */
 public class ImageResourceCell extends AbstractCell<ImageResource> {
+  
+  /**
+   * Construct a new ImageResourceCell.
+   */
+  public ImageResourceCell() {
+  }
 
   @Override
   public void render(ImageResource value, Object key, SafeHtmlBuilder sb) {
diff --git a/user/src/com/google/gwt/cell/client/SafeHtmlCell.java b/user/src/com/google/gwt/cell/client/SafeHtmlCell.java
index b8c06d4..69f46ed 100644
--- a/user/src/com/google/gwt/cell/client/SafeHtmlCell.java
+++ b/user/src/com/google/gwt/cell/client/SafeHtmlCell.java
@@ -20,12 +20,14 @@
 
 /**
  * A {@link Cell} used to render safe HTML markup.
- * 
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  */
 public class SafeHtmlCell extends AbstractCell<SafeHtml> {
+  
+  /**
+   * Construct a new SafeHtmlCell.
+   */
+  public SafeHtmlCell() {
+  }
 
   @Override
   public void render(SafeHtml value, Object key, SafeHtmlBuilder sb) {
diff --git a/user/src/com/google/gwt/cell/client/SelectionCell.java b/user/src/com/google/gwt/cell/client/SelectionCell.java
index d3e62af..79c9b76 100644
--- a/user/src/com/google/gwt/cell/client/SelectionCell.java
+++ b/user/src/com/google/gwt/cell/client/SelectionCell.java
@@ -29,10 +29,6 @@
 
 /**
  * A {@link Cell} used to render a drop-down list.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  */
 public class SelectionCell extends AbstractInputCell<String, String> {
 
diff --git a/user/src/com/google/gwt/cell/client/TextCell.java b/user/src/com/google/gwt/cell/client/TextCell.java
index 4701e40..0a6fbeb 100644
--- a/user/src/com/google/gwt/cell/client/TextCell.java
+++ b/user/src/com/google/gwt/cell/client/TextCell.java
@@ -22,10 +22,6 @@
 
 /**
  * A {@link Cell} used to render text.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  */
 public class TextCell extends AbstractSafeHtmlCell<String> {
 
diff --git a/user/src/com/google/gwt/cell/client/TextInputCell.java b/user/src/com/google/gwt/cell/client/TextInputCell.java
index b66e857..ca932e5 100644
--- a/user/src/com/google/gwt/cell/client/TextInputCell.java
+++ b/user/src/com/google/gwt/cell/client/TextInputCell.java
@@ -26,11 +26,7 @@
 import com.google.gwt.text.shared.SimpleSafeHtmlRenderer;
 
 /**
- * A {@link AbstractCell} used to render a text input.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
+ * An {@link AbstractCell} used to render a text input.
  */
 public class TextInputCell extends
     AbstractInputCell<String, TextInputCell.ViewData> {
@@ -41,7 +37,7 @@
   }
 
   /**
-   * The ViewData for this cell.
+   * The {@code ViewData} for this cell.
    */
   public static class ViewData {
     /**
@@ -54,14 +50,21 @@
      */
     private String curValue;
 
+    /**
+     * Construct a ViewData instance containing a given value.
+     */
     public ViewData(String value) {
       this.lastValue = value;
       this.curValue = value;
     }
 
+    /**
+     * Return true if the last and current values of this ViewData object
+     * are equal to those of the other object.
+     */
     @Override
     public boolean equals(Object other) {
-      if (other == null || !(other instanceof ViewData)) {
+      if (!(other instanceof ViewData)) {
         return false;
       }
       ViewData vd = (ViewData) other;
@@ -70,28 +73,41 @@
     }
 
     /**
-     * @return the current value of the input element
+     * Return the current value of the input element.
      */
     public String getCurrentValue() {
       return curValue;
     }
 
     /**
-     * @return the last value sent to the {@link ValueUpdater}
+     * Return the last value sent to the {@link ValueUpdater}.
      */
     public String getLastValue() {
       return lastValue;
     }
 
+    /**
+     * Return a hash code based on the last and current values.
+     */
     @Override
     public int hashCode() {
-      return (lastValue + "_*!@HASH_SEPERATOR@!*_" + curValue).hashCode();
+      return (lastValue + "_*!@HASH_SEPARATOR@!*_" + curValue).hashCode();
     }
 
+    /**
+     * Set the current value.
+     * 
+     * @param curValue the current value
+     */
     protected void setCurrentValue(String curValue) {
       this.curValue = curValue;
     }
 
+    /**
+     * Set the last value.
+     * 
+     * @param lastValue the last value
+     */
     protected void setLastValue(String lastValue) {
       this.lastValue = lastValue;
     }
diff --git a/user/src/com/google/gwt/cell/client/ValueUpdater.java b/user/src/com/google/gwt/cell/client/ValueUpdater.java
index a749c27..dd97266 100644
--- a/user/src/com/google/gwt/cell/client/ValueUpdater.java
+++ b/user/src/com/google/gwt/cell/client/ValueUpdater.java
@@ -16,11 +16,8 @@
 package com.google.gwt.cell.client;
 
 /**
- * A {@link ValueUpdater} may be added to a Cell to provide updated data.
- * 
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
+ * A {@link ValueUpdater} may be added to a {@link Cell} to provide updated
+ * data.
  * 
  * @param <C> the data type of the cell
  */
diff --git a/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java b/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
index 4300d31..ac5d9c4 100644
--- a/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
+++ b/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
@@ -245,7 +245,7 @@
   }
 
   /**
-   * @return the temporary element used to create elements
+   * Return the temporary element used to create elements.
    */
   private static com.google.gwt.user.client.Element getTmpElem() {
     if (tmpElem == null) {
@@ -341,7 +341,7 @@
   }
 
   /**
-   * @return the range size
+   * Return the range size.
    * @see #getVisibleRange()
    */
   public final int getPageSize() {
@@ -349,7 +349,7 @@
   }
 
   /**
-   * @return the range start
+   * Return the range start.
    * @see #getVisibleRange()
    */
   public final int getPageStart() {
@@ -554,7 +554,7 @@
   }
 
   /**
-   * Checks that the row is within the correct bounds.
+   * Check that the row is within the correct bounds.
    *
    * @param row row index to check
    * @throws IndexOutOfBoundsException
@@ -585,7 +585,7 @@
   protected abstract boolean dependsOnSelection();
 
   /**
-   * @return the element that holds the rendered cells
+   * Return the element that holds the rendered cells.
    */
   protected abstract Element getChildContainer();
 
@@ -765,7 +765,7 @@
   }
 
   /**
-   * @return the number of child elements
+   * Return the number of child elements.
    */
   int getChildCount() {
     return getChildContainer().getChildCount();
diff --git a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
index 28533cf..c98075e 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
@@ -467,14 +467,14 @@
     }
 
     /**
-     * @return the key of the value that is focused in this node's display.
+     * Return the key of the value that is focused in this node's display.
      */
     Object getFocusedKey() {
       return display.focusedKey;
     }
 
     /**
-     * @return true if the focused value is open, false if not
+     * Return true if the focused value is open, false if not.
      */
     boolean isFocusedOpen() {
       return display.isFocusedOpen;
diff --git a/user/src/com/google/gwt/user/cellview/client/CellList.java b/user/src/com/google/gwt/user/cellview/client/CellList.java
index 4128da9..1b443d8 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellList.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellList.java
@@ -308,6 +308,9 @@
     }
   }
 
+  /**
+   * Return the cell used to render each item.
+   */
   protected Cell<T> getCell() {
     return cell;
   }
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTable.java b/user/src/com/google/gwt/user/cellview/client/CellTable.java
index e75f8c6..43208af 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTable.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTable.java
@@ -51,7 +51,7 @@
 import java.util.Set;
 
 /**
- * A list view that supports paging and columns.
+ * A tabular view that supports paging and columns.
  *
  * <p>
  * <h3>Examples</h3>
@@ -110,6 +110,9 @@
     @ImageOptions(repeatStyle = RepeatStyle.Horizontal, flipRtl = true)
     ImageResource cellTableSelectedBackground();
 
+    /**
+     * The styles used in this widget.
+     */
     @Source(Style.DEFAULT_CSS)
     Style cellTableStyle();
   }
@@ -444,7 +447,7 @@
   private int keyboardSelectedColumn = 0;
 
   /**
-   * Indicates whether or not the scheduled redraw has been cancelled.
+   * Indicates whether or not the scheduled redraw has been canceled.
    */
   private boolean redrawCancelled;
 
@@ -674,11 +677,17 @@
     ensureTableColElement(index).addClassName(styleName);
   }
 
+  /**
+   * Return the height of the table body.
+   */
   public int getBodyHeight() {
     int height = getClientHeight(tbody);
     return height;
   }
 
+  /**
+   * Return the height of the table header.
+   */
   public int getHeaderHeight() {
     int height = getClientHeight(thead);
     return height;
@@ -699,10 +708,16 @@
     return rows.getLength() > row ? rows.getItem(row) : null;
   }
 
+  /**
+   * Redraw the table's footers.
+   */
   public void redrawFooters() {
     createHeaders(true);
   }
 
+  /**
+   * Redraw the table's headers.
+   */
   public void redrawHeaders() {
     createHeaders(false);
   }
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 44b71f9..78273fc 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTree.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTree.java
@@ -95,17 +95,23 @@
     private static final int DEFAULT_ANIMATION_DURATION = 450;
 
     /**
-     * The duration of the animation.
+     * The duration of the animation in milliseconds.
      */
     private int duration = DEFAULT_ANIMATION_DURATION;
 
     NodeAnimation() {
     }
 
+    /**
+     * Return the duration of the animation in milliseconds.
+     */
     public int getDuration() {
       return duration;
     }
 
+    /**
+     * Set the duration of the animation in milliseconds.
+     */
     public void setDuration(int duration) {
       this.duration = duration;
     }
@@ -401,7 +407,7 @@
     String cellTreeTopItemImageValue();
 
     /**
-     * Applies to the widget.
+     * Applied to the widget.
      */
     String cellTreeWidget();
   }
@@ -785,14 +791,14 @@
   }
 
   /**
-   * @return the node that has keyboard selection.
+   * Return the node that has keyboard selection.
    */
   CellTreeNodeView<?> getKeyboardSelectedNode() {
     return keyboardSelectedNode;
   }
 
   /**
-   * @return the HTML to render the loading image.
+   * Return the HTML to render the loading image.
    */
   SafeHtml getLoadingImageHtml() {
     return loadingImageHtml;
@@ -809,7 +815,7 @@
   }
 
   /**
-   * @return the Style used by the tree
+   * Return the Style used by the tree.
    */
   Style getStyle() {
     return style;
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 a165244..634efe1 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
@@ -644,7 +644,7 @@
   }
 
   /**
-   * @return the temporary element used to create elements
+   * Return the temporary element used to create elements.
    */
   private static com.google.gwt.user.client.Element getTmpElem() {
     if (tmpElem == null) {
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 b730cd5..c2a178d 100644
--- a/user/src/com/google/gwt/user/cellview/client/Column.java
+++ b/user/src/com/google/gwt/user/cellview/client/Column.java
@@ -28,32 +28,56 @@
  * A representation of a column in a table. The column may maintain view data
  * for each cell on demand. New view data, if needed, is created by the cell's
  * onBrowserEvent method, stored in the Column, and passed to future calls to
- * Cell's {@link Cell#onBrowserEvent} and @link{Cell#render} methods.
+ * Cell's {@link Cell#onBrowserEvent} and {@link Cell#render} methods.
  *
  * @param <T> the row type
  * @param <C> the column type
  */
 public abstract class Column<T, C> implements HasCell<T, C> {
 
+  /**
+   * The {@link Cell} responsible for rendering items in the column.
+   */
   protected final Cell<C> cell;
 
+  /**
+   * The {@link FieldUpdater} used for updating values in the column.
+   */
   protected FieldUpdater<T, C> fieldUpdater;
 
+  /**
+   * Construct a new Column with a given {@link Cell}.
+   */
   public Column(Cell<C> cell) {
     this.cell = cell;
   }
 
+  /**
+   * Return the {@link Cell} responsible for rendering items in the column.
+   */
   public Cell<C> getCell() {
     return cell;
   }
 
+  /**
+   * Return the {@link FieldUpdater} used for updating values in the column.
+   */
   public FieldUpdater<T, C> getFieldUpdater() {
     return fieldUpdater;
   }
 
+  /**
+   * Return the column value from within the underlying data object.
+   */
   public abstract C getValue(T object);
 
   /**
+   * Handle a browser event that took place within the column.
+   *
+   * @param elem the parent Element
+   * @param index the current row index of the object
+   * @param object the base object to be updated
+   * @param event the native browser event
    * @param keyProvider an instance of ProvidesKey<T>, or null if the record
    *          object should act as its own key.
    */
@@ -71,6 +95,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
@@ -80,6 +105,10 @@
     cell.render(getValue(object), key, sb);
   }
 
+
+  /**
+   * Set the {@link FieldUpdater} used for updating values in the column.
+   */
   public void setFieldUpdater(FieldUpdater<T, C> fieldUpdater) {
     this.fieldUpdater = fieldUpdater;
   }
diff --git a/user/src/com/google/gwt/user/cellview/client/HasDataPresenter.java b/user/src/com/google/gwt/user/cellview/client/HasDataPresenter.java
index a3dacbc..55c2398 100644
--- a/user/src/com/google/gwt/user/cellview/client/HasDataPresenter.java
+++ b/user/src/com/google/gwt/user/cellview/client/HasDataPresenter.java
@@ -392,7 +392,7 @@
   }
 
   /**
-   * @return the range of data being displayed
+   * Return the range of data being displayed.
    */
   public Range getVisibleRange() {
     return new Range(pageStart, pageSize);
diff --git a/user/src/com/google/gwt/user/cellview/client/Header.java b/user/src/com/google/gwt/user/cellview/client/Header.java
index 8e4b694..c3c3ac6 100644
--- a/user/src/com/google/gwt/user/cellview/client/Header.java
+++ b/user/src/com/google/gwt/user/cellview/client/Header.java
@@ -24,7 +24,7 @@
 /**
  * A table column header or footer.
  *
- * @param <H> the {#link Cell} type
+ * @param <H> the {@link Cell} type
  */
 public abstract class Header<H> {
 
@@ -32,25 +32,48 @@
 
   private ValueUpdater<H> updater;
 
+  /**
+   * Construct a Header with a given {@link Cell}.
+   */
   public Header(Cell<H> cell) {
     this.cell = cell;
   }
 
+  /**
+   * Return the {@link Cell} responsible for rendering items in the header.
+   */
   public Cell<H> getCell() {
     return cell;
   }
 
+  /**
+   * Return the header value.
+   */
   public abstract H getValue();
 
+  /**
+   * Handle a browser event that took place within the header.
+   *
+   * @param elem the parent Element
+   * @param event the native browser event
+   */
   public void onBrowserEvent(Element elem, NativeEvent event) {
     H value = getValue();
     cell.onBrowserEvent(elem, value, getKey(), event, updater);
   }
 
+  /**
+   * Render the header.
+   * 
+   * @param sb a {@link SafeHtmlBuilder} to render into
+   */
   public void render(SafeHtmlBuilder sb) {
     cell.render(getValue(), getKey(), sb);
   }
 
+  /**
+   * Set the {@link ValueUpdater}.
+   */
   public void setUpdater(ValueUpdater<H> updater) {
     this.updater = updater;
   }
diff --git a/user/src/com/google/gwt/user/cellview/client/IdentityColumn.java b/user/src/com/google/gwt/user/cellview/client/IdentityColumn.java
index 8c15505..614c144 100644
--- a/user/src/com/google/gwt/user/cellview/client/IdentityColumn.java
+++ b/user/src/com/google/gwt/user/cellview/client/IdentityColumn.java
@@ -26,12 +26,15 @@
 public class IdentityColumn<T> extends Column<T, T> {
 
   /**
-   * @param cell
+   * Construct a new IdentityColumn with a given {@link Cell}.
    */
   public IdentityColumn(Cell<T> cell) {
     super(cell);
   }
 
+  /**
+   * Return the passed-in object.
+   */
   @Override
   public T getValue(T object) {
     return object;
diff --git a/user/src/com/google/gwt/user/cellview/client/PageSizePager.java b/user/src/com/google/gwt/user/cellview/client/PageSizePager.java
index d7c05ef..c58ce1d 100644
--- a/user/src/com/google/gwt/user/cellview/client/PageSizePager.java
+++ b/user/src/com/google/gwt/user/cellview/client/PageSizePager.java
@@ -42,6 +42,11 @@
   private final Anchor showMoreButton = new Anchor("Show More");
   private final Anchor showLessButton = new Anchor("Show Less");
 
+  /**
+   * Construct a PageSizePager with a given increment.
+   * 
+   * @param increment the amount by which to increase the page size
+   */
   @UiConstructor
   public PageSizePager(final int increment) {
     this.increment = increment;
diff --git a/user/src/com/google/gwt/user/cellview/client/SafeHtmlHeader.java b/user/src/com/google/gwt/user/cellview/client/SafeHtmlHeader.java
index df7ed30..651506f 100644
--- a/user/src/com/google/gwt/user/cellview/client/SafeHtmlHeader.java
+++ b/user/src/com/google/gwt/user/cellview/client/SafeHtmlHeader.java
@@ -25,11 +25,17 @@
 
   private SafeHtml text;
 
+  /**
+   * Construct a Header with a given {@link SafeHtml} text value.
+   */
   public SafeHtmlHeader(SafeHtml text) {
     super(new SafeHtmlCell());
     this.text = text;
   }
 
+  /**
+   * Return the {@link SafeHtml} text value.
+   */
   @Override
   public SafeHtml getValue() {
     return text;
diff --git a/user/src/com/google/gwt/user/cellview/client/TextColumn.java b/user/src/com/google/gwt/user/cellview/client/TextColumn.java
index 22c03dc..fd5642b 100644
--- a/user/src/com/google/gwt/user/cellview/client/TextColumn.java
+++ b/user/src/com/google/gwt/user/cellview/client/TextColumn.java
@@ -25,6 +25,9 @@
  */
 public abstract class TextColumn<T> extends Column<T, String> {
 
+  /**
+   * Construct a new TextColumn.
+   */
   public TextColumn() {
     super(new TextCell());
   }
diff --git a/user/src/com/google/gwt/user/cellview/client/TextHeader.java b/user/src/com/google/gwt/user/cellview/client/TextHeader.java
index 1ac8543..609f483 100644
--- a/user/src/com/google/gwt/user/cellview/client/TextHeader.java
+++ b/user/src/com/google/gwt/user/cellview/client/TextHeader.java
@@ -18,17 +18,23 @@
 import com.google.gwt.cell.client.TextCell;
 
 /**
- * A Header containing String data rendered by a TextCell.
+ * A Header containing String data rendered by a {@link TextCell}.
  */
 public class TextHeader extends Header<String> {
 
   private String text;
 
+  /**
+   * Construct a new TextColumn.
+   */
   public TextHeader(String text) {
     super(new TextCell());
     this.text = text;
   }
 
+  /**
+   * Return the header text.
+   */
   @Override
   public String getValue() {
     return text;
diff --git a/user/src/com/google/gwt/view/client/AbstractDataProvider.java b/user/src/com/google/gwt/view/client/AbstractDataProvider.java
index 1f9c7fd..f824a86 100644
--- a/user/src/com/google/gwt/view/client/AbstractDataProvider.java
+++ b/user/src/com/google/gwt/view/client/AbstractDataProvider.java
@@ -27,10 +27,6 @@
 /**
  * A base implementation of a data source for {@link HasData} implementations.
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * @param <T> the data type of records in the list
  */
 public abstract class AbstractDataProvider<T> implements ProvidesKey<T> {
@@ -58,10 +54,16 @@
   private Map<HasData<T>, HandlerRegistration> rangeChangeHandlers =
       new HashMap<HasData<T>, HandlerRegistration>();
   
+  /**
+   * Construct an AbstractDataProvider without a key provider.
+   */
   protected AbstractDataProvider() {
     this.keyProvider = null;
   }
   
+  /**
+   * Construct an AbstractDataProvider with a given key provider.
+   */
   protected AbstractDataProvider(ProvidesKey<T> keyProvider) {
     this.keyProvider = keyProvider;
   }
@@ -144,6 +146,11 @@
     return ranges;
   }
 
+  /**
+   * Remove the given data display.
+   * 
+   * @throws IllegalStateException if the display is not present
+   */
   public void removeDataDisplay(HasData<T> display) {
     if (!displays.contains(display)) {
       throw new IllegalStateException("HasData not present");
diff --git a/user/src/com/google/gwt/view/client/DefaultSelectionModel.java b/user/src/com/google/gwt/view/client/DefaultSelectionModel.java
index eaeaad0..23a5f45 100644
--- a/user/src/com/google/gwt/view/client/DefaultSelectionModel.java
+++ b/user/src/com/google/gwt/view/client/DefaultSelectionModel.java
@@ -25,14 +25,9 @@
  * according to a subclass-defined rule, plus a list of positive or negative
  * exceptions.
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * @param <T> the data type of records in the list
  */
-public abstract class DefaultSelectionModel<T> extends AbstractSelectionModel<
-    T> {
+public abstract class DefaultSelectionModel<T> extends AbstractSelectionModel<T> {
 
   private final Map<Object, Boolean> exceptions = new HashMap<Object, Boolean>();
 
@@ -99,7 +94,6 @@
     scheduleSelectionChangeEvent();
   }
 
-  // Coalesce selection changes since the last event firing
   @Override
   protected void fireSelectionChangeEvent() {
     if (isEventScheduled()) {
diff --git a/user/src/com/google/gwt/view/client/HasData.java b/user/src/com/google/gwt/view/client/HasData.java
index 4b6a23d..c26558a 100644
--- a/user/src/com/google/gwt/view/client/HasData.java
+++ b/user/src/com/google/gwt/view/client/HasData.java
@@ -20,10 +20,6 @@
 /**
  * A view that can display a range of data.
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * @param <T> the data type of each row
  */
 public interface HasData<T> extends HasRows {
diff --git a/user/src/com/google/gwt/view/client/HasKeyProvider.java b/user/src/com/google/gwt/view/client/HasKeyProvider.java
index 555a13d..ff7bf2f 100644
--- a/user/src/com/google/gwt/view/client/HasKeyProvider.java
+++ b/user/src/com/google/gwt/view/client/HasKeyProvider.java
@@ -19,18 +19,14 @@
  * Interface for classes that have a {@link ProvidesKey}. Must be implemented by
  * {@link com.google.gwt.cell.client.Cell} containers.
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * @param <T> the data type
  */
 public interface HasKeyProvider<T> {
 
   /**
-   * Get the key provider.
+   * Return the key provider.
    *
-   * @return the {@link ProvidesKey}
+   * @return the {@link ProvidesKey} instance
    */
   ProvidesKey<T> getKeyProvider();
 }
diff --git a/user/src/com/google/gwt/view/client/HasRows.java b/user/src/com/google/gwt/view/client/HasRows.java
index 8550b61..5e4e3f5 100644
--- a/user/src/com/google/gwt/view/client/HasRows.java
+++ b/user/src/com/google/gwt/view/client/HasRows.java
@@ -20,10 +20,6 @@
 
 /**
  * Describes an object that displays a range of rows.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  */
 public interface HasRows extends HasHandlers {
 
diff --git a/user/src/com/google/gwt/view/client/ListDataProvider.java b/user/src/com/google/gwt/view/client/ListDataProvider.java
index 18aa447..2bd2c7e 100644
--- a/user/src/com/google/gwt/view/client/ListDataProvider.java
+++ b/user/src/com/google/gwt/view/client/ListDataProvider.java
@@ -145,7 +145,7 @@
     private final ListWrapper delegate;
 
     /**
-     * Set to true if the pending flush has been cancelled.
+     * Set to true if the pending flush has been canceled.
      */
     private boolean flushCancelled;
 
@@ -441,12 +441,12 @@
   }
 
   /**
-   * Creates a list model that wraps the given collection. Changes to the
+   * Creates a list model that wraps the given list. Changes to the
    * wrapped list must be made via this model in order to be correctly applied
    * to displays.
    */
-  public ListDataProvider(List<T> wrappee) {
-    this(wrappee, null);
+  public ListDataProvider(List<T> listToWrap) {
+    this(listToWrap, null);
   }
 
   /**
@@ -460,16 +460,16 @@
   }
 
   /**
-   * Creates a list model that wraps the given collection. Changes to the
+   * Creates a list model that wraps the given list. Changes to the
    * wrapped list must be made via this model in order to be correctly applied
    * to displays.
    *
    * @param keyProvider an instance of ProvidesKey<T>, or null if the record
    *        object should act as its own key
    */
-  public ListDataProvider(List<T> wrappee, ProvidesKey<T> keyProvider) {
+  public ListDataProvider(List<T> listToWrap, ProvidesKey<T> keyProvider) {
     super(keyProvider);
-    listWrapper = new ListWrapper(wrappee);
+    listWrapper = new ListWrapper(listToWrap);
   }
 
   /**
@@ -502,12 +502,12 @@
   }
 
   /**
-   * Replaces this model's list.
+   * Replace this model's list.
    *
-   * @param wrappee the model's new list
+   * @param listToWrap the model's new list
    */
-  public void setList(List<T> wrappee) {
-    listWrapper = new ListWrapper(wrappee);
+  public void setList(List<T> listToWrap) {
+    listWrapper = new ListWrapper(listToWrap);
     listWrapper.minModified = 0;
     listWrapper.maxModified = listWrapper.size();
     listWrapper.modified = true;
diff --git a/user/src/com/google/gwt/view/client/MultiSelectionModel.java b/user/src/com/google/gwt/view/client/MultiSelectionModel.java
index c24d787..97c9145 100644
--- a/user/src/com/google/gwt/view/client/MultiSelectionModel.java
+++ b/user/src/com/google/gwt/view/client/MultiSelectionModel.java
@@ -25,10 +25,6 @@
 /**
  * A simple selection model that allows multiple objects to be selected.
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * @param <T> the record data type
  */
 public class MultiSelectionModel<T> extends AbstractSelectionModel<T> {
diff --git a/user/src/com/google/gwt/view/client/NoSelectionModel.java b/user/src/com/google/gwt/view/client/NoSelectionModel.java
index d29920f..4bcb89e7 100644
--- a/user/src/com/google/gwt/view/client/NoSelectionModel.java
+++ b/user/src/com/google/gwt/view/client/NoSelectionModel.java
@@ -22,10 +22,6 @@
  * events. Use this model if you want to know when a user selects an item, but
  * do not want the view to update based on the selection.
  * 
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- * 
  * @param <T> the record data type
  */
 public class NoSelectionModel<T> extends AbstractSelectionModel<T> {
diff --git a/user/src/com/google/gwt/view/client/ProvidesKey.java b/user/src/com/google/gwt/view/client/ProvidesKey.java
index a5c3614..690c8cd 100644
--- a/user/src/com/google/gwt/view/client/ProvidesKey.java
+++ b/user/src/com/google/gwt/view/client/ProvidesKey.java
@@ -23,16 +23,13 @@
  * </p>
  * <p>
  * The key must implement a coherent set of {@link Object#equals(Object)} and
- * {@link Object#hashCode()} methods such that if objects A and B are to be
- * treated as identical, then A.equals(B), B.equals(A), and A.hashCode() ==
- * B.hashCode().  If A and B are to be treated as unequal, then it must
- * be the case that A.equals(B) == false and B.equals(A) == false.
+ * {@link Object#hashCode()} methods such that if objects {@code A} and {@code
+ * B} are to be treated as identical, then {@code A.equals(B)}, {@code
+ * B.equals(A)}, and {@code A.hashCode() == B.hashCode()}. If {@code A} and
+ * {@code B} are to be treated as unequal, then it must be the case that {@code
+ * A.equals(B) == false} and {@code B.equals(A) == false}.
  * </p>
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
+ * 
  * @param <T> the data type of records in the list
  */
 public interface ProvidesKey<T> {
diff --git a/user/src/com/google/gwt/view/client/Range.java b/user/src/com/google/gwt/view/client/Range.java
index e66af06..9ad5d84 100644
--- a/user/src/com/google/gwt/view/client/Range.java
+++ b/user/src/com/google/gwt/view/client/Range.java
@@ -19,10 +19,6 @@
 
 /**
  * The range of interest for a single handler.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  */
 public class Range implements Serializable {
 
@@ -46,9 +42,13 @@
   Range() {
   }
 
+  /**
+   * Return true if this ranges's start end length are equal to those of
+   * the given object.
+   */
   @Override
   public boolean equals(Object o) {
-    if (o == null || !(o instanceof Range)) {
+    if (!(o instanceof Range)) {
       return false;
     }
     Range r = (Range) o;
@@ -73,11 +73,17 @@
     return start;
   }
 
+  /**
+   * Return a hash code based on this range's start and length.
+   */
   @Override
   public int hashCode() {
     return (length * 31) ^ start;
   }
 
+  /**
+   * Returns a String representation for debugging.
+   */
   @Override
   public String toString() {
     return "Range(" + start + "," + length + ")";
diff --git a/user/src/com/google/gwt/view/client/RangeChangeEvent.java b/user/src/com/google/gwt/view/client/RangeChangeEvent.java
index 18847d3..eaf0219 100644
--- a/user/src/com/google/gwt/view/client/RangeChangeEvent.java
+++ b/user/src/com/google/gwt/view/client/RangeChangeEvent.java
@@ -34,7 +34,7 @@
   public static interface Handler extends EventHandler {
 
     /**
-     * Called when {@link RangeChangeEvent} is fired.
+     * Called when a {@link RangeChangeEvent} is fired.
      *
      * @param event the {@link RangeChangeEvent} that was fired
      */
diff --git a/user/src/com/google/gwt/view/client/RowCountChangeEvent.java b/user/src/com/google/gwt/view/client/RowCountChangeEvent.java
index 3f8c800..19f71e9 100644
--- a/user/src/com/google/gwt/view/client/RowCountChangeEvent.java
+++ b/user/src/com/google/gwt/view/client/RowCountChangeEvent.java
@@ -34,7 +34,7 @@
   public static interface Handler extends EventHandler {
 
     /**
-     * Called when {@link RowCountChangeEvent} is fired.
+     * Called when a {@link RowCountChangeEvent} is fired.
      *
      * @param event the {@link RowCountChangeEvent} that was fired
      */
diff --git a/user/src/com/google/gwt/view/client/SelectionChangeEvent.java b/user/src/com/google/gwt/view/client/SelectionChangeEvent.java
index 8067422..a99e7a2 100644
--- a/user/src/com/google/gwt/view/client/SelectionChangeEvent.java
+++ b/user/src/com/google/gwt/view/client/SelectionChangeEvent.java
@@ -30,7 +30,7 @@
   public static interface Handler extends EventHandler {
 
     /**
-     * Called when {@link SelectionChangeEvent} is fired.
+     * Called when a {@link SelectionChangeEvent} is fired.
      *
      * @param event the {@link SelectionChangeEvent} that was fired
      */
diff --git a/user/src/com/google/gwt/view/client/SelectionModel.java b/user/src/com/google/gwt/view/client/SelectionModel.java
index 06a52f7..54a2f77 100644
--- a/user/src/com/google/gwt/view/client/SelectionModel.java
+++ b/user/src/com/google/gwt/view/client/SelectionModel.java
@@ -25,17 +25,13 @@
 /**
  * A model for selection within a list.
  * 
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- * 
  * @param <T> the data type of records in the list
  */
 public interface SelectionModel<T> extends HasHandlers, ProvidesKey<T> {
 
   /**
-   * A default implementation of SelectionModel that provides listener addition
-   * and removal.
+   * A default implementation of {@link SelectionModel} that provides listener
+   * addition and removal.
    * 
    * @param <T> the data type of records in the list
    */
@@ -44,7 +40,7 @@
     private final HandlerManager handlerManager = new HandlerManager(this);
 
     /**
-     * Set to true if the next scheduled event should be cancelled.
+     * Set to true if the next scheduled event should be canceled.
      */
     private boolean isEventCancelled;
 
@@ -56,6 +52,8 @@
     private final ProvidesKey<T> keyProvider;
     
     /**
+     * Construct an AbstractSelectionModel with a given key provider.
+     * 
      * @param keyProvider an instance of ProvidesKey<T>, or null if the record
      *        object should act as its own key
      */
@@ -83,6 +81,9 @@
       return keyProvider;
     }
 
+    /**
+     * Fire a {@link SelectionChangeEvent}.  Multiple firings may be coalesced.
+     */
     protected void fireSelectionChangeEvent() {
       if (isEventScheduled()) {
         setEventCancelled(true);
@@ -90,10 +91,16 @@
       SelectionChangeEvent.fire(AbstractSelectionModel.this);
     }
 
+    /**
+     * Return true if the next scheduled event should be canceled.
+     */
     protected boolean isEventCancelled() {
       return isEventCancelled;
     }
 
+    /**
+     * Return true if an event is scheduled to be fired.
+     */
     protected boolean isEventScheduled() {
       return isEventScheduled;
     }
@@ -119,10 +126,16 @@
       }
     }
 
+    /**
+     * Set whether the next scheduled event should be canceled.
+     */
     protected void setEventCancelled(boolean isEventCancelled) {
       this.isEventCancelled = isEventCancelled;
     }
 
+    /**
+     * Set whether an event is scheduled to be fired.
+     */
     protected void setEventScheduled(boolean isEventScheduled) {
       this.isEventScheduled = isEventScheduled;
     }
diff --git a/user/src/com/google/gwt/view/client/SimpleKeyProvider.java b/user/src/com/google/gwt/view/client/SimpleKeyProvider.java
index 7a79896..a0cb6fd 100644
--- a/user/src/com/google/gwt/view/client/SimpleKeyProvider.java
+++ b/user/src/com/google/gwt/view/client/SimpleKeyProvider.java
@@ -21,6 +21,10 @@
  * @param <T> the data type of records 
  */
 public class SimpleKeyProvider<T> implements ProvidesKey<T> {
+
+  /**
+   * Return the passed-in item.
+   */
   public Object getKey(T item) {
     return item;
   }
diff --git a/user/src/com/google/gwt/view/client/SingleSelectionModel.java b/user/src/com/google/gwt/view/client/SingleSelectionModel.java
index 831a74f..dcb22fa 100644
--- a/user/src/com/google/gwt/view/client/SingleSelectionModel.java
+++ b/user/src/com/google/gwt/view/client/SingleSelectionModel.java
@@ -20,10 +20,6 @@
 /**
  * A simple selection model that allows only one object to be selected a a time.
  *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
- *
  * @param <T> the record data type
  */
 public class SingleSelectionModel<T> extends AbstractSelectionModel<T> {
diff --git a/user/src/com/google/gwt/view/client/TreeViewModel.java b/user/src/com/google/gwt/view/client/TreeViewModel.java
index ce3ddac..d0b558f 100644
--- a/user/src/com/google/gwt/view/client/TreeViewModel.java
+++ b/user/src/com/google/gwt/view/client/TreeViewModel.java
@@ -20,10 +20,6 @@
 
 /**
  * A model of a tree.
- *
- * <p>
- * Note: This class is new and its interface subject to change.
- * </p>
  */
 public interface TreeViewModel {
 
@@ -146,9 +142,9 @@
 
   /**
    * Get the {@link NodeInfo} that will provide the {@link ProvidesKey},
-   * {@link Cell}, and {@link HasData}s to retrieve and display the children of
-   * the specified value.
-   *
+   * {@link Cell}, and {@link HasData} instances to retrieve and display the
+   * children of the specified value.
+   * 
    * @param value the value in the parent node
    * @return the {@link NodeInfo}
    */
