diff --git a/user/src/com/google/gwt/activity/shared/ActivityManager.java b/user/src/com/google/gwt/activity/shared/ActivityManager.java
index 9eeb3f9..ff5eb90 100644
--- a/user/src/com/google/gwt/activity/shared/ActivityManager.java
+++ b/user/src/com/google/gwt/activity/shared/ActivityManager.java
@@ -196,7 +196,7 @@
    * setDisplay(null) to get it to deregister from the event bus, so that it can
    * be garbage collected.
    *
-   * @param display
+   * @param display an instance of AcceptsOneWidget
    */
   public void setDisplay(AcceptsOneWidget display) {
     boolean wasActive = (null != this.display);
diff --git a/user/src/com/google/gwt/activity/shared/ActivityMapper.java b/user/src/com/google/gwt/activity/shared/ActivityMapper.java
index d7fce27..f9c95a9 100644
--- a/user/src/com/google/gwt/activity/shared/ActivityMapper.java
+++ b/user/src/com/google/gwt/activity/shared/ActivityMapper.java
@@ -27,5 +27,10 @@
  * an {@link ActivityManager}.
  */
 public interface ActivityMapper {
+  /**
+   * Returns the activity to run for the given {@link Place}.
+   *
+   * @param place a Place object
+   */
   Activity getActivity(Place place);
 }
diff --git a/user/src/com/google/gwt/activity/shared/CachingActivityMapper.java b/user/src/com/google/gwt/activity/shared/CachingActivityMapper.java
index a651649..8f0a570 100644
--- a/user/src/com/google/gwt/activity/shared/CachingActivityMapper.java
+++ b/user/src/com/google/gwt/activity/shared/CachingActivityMapper.java
@@ -28,6 +28,11 @@
   private Place lastPlace;
   private Activity lastActivity;
 
+  /**
+   * Constructs a CachingActivityMapper object.
+   *
+   * @param wrapped an ActivityMapper object
+   */
   public CachingActivityMapper(ActivityMapper wrapped) {
     this.wrapped = wrapped;
   }
diff --git a/user/src/com/google/gwt/activity/shared/FilteredActivityMapper.java b/user/src/com/google/gwt/activity/shared/FilteredActivityMapper.java
index 16b774c..5833263 100644
--- a/user/src/com/google/gwt/activity/shared/FilteredActivityMapper.java
+++ b/user/src/com/google/gwt/activity/shared/FilteredActivityMapper.java
@@ -27,12 +27,24 @@
    * Implemented by objects that want to interpret one place as another.
    */
   public interface Filter {
+    /**
+     * Returns the filtered interpretation of the given {@link Place}.
+     *
+     * @param place the input {@link Place}.
+     * @return the output {@link Place}.
+     */
     Place filter(Place place);
   }
 
   private final Filter filter;
   private final ActivityMapper wrapped;
 
+  /**
+   * Constructs a FilteredActivityMapper object.
+   *
+   * @param filter a Filter object
+   * @param wrapped an ActivityMapper object
+   */
   public FilteredActivityMapper(Filter filter, ActivityMapper wrapped) {
     this.filter = filter;
     this.wrapped = wrapped;
diff --git a/user/src/com/google/gwt/animation/client/Animation.java b/user/src/com/google/gwt/animation/client/Animation.java
index bb3da8b..f4225b2 100644
--- a/user/src/com/google/gwt/animation/client/Animation.java
+++ b/user/src/com/google/gwt/animation/client/Animation.java
@@ -198,10 +198,12 @@
   /**
    * Called when the animation should be updated.
    * 
-   * The value of progress is between 0.0 and 1.0 inclusively (unless you
+   * The value of progress is between 0.0 and 1.0 (inclusive) (unless you
    * override the {@link #interpolate(double)} method to provide a wider range
    * of values). You can override {@link #onStart()} and {@link #onComplete()}
    * to perform setup and tear down procedures.
+   * 
+   * @param progress a double, normally between 0.0 and 1.0 (inclusive)
    */
   protected abstract void onUpdate(double progress);
 
diff --git a/user/src/com/google/gwt/cell/client/DatePickerCell.java b/user/src/com/google/gwt/cell/client/DatePickerCell.java
index d8c957b..65ca6ef 100644
--- a/user/src/com/google/gwt/cell/client/DatePickerCell.java
+++ b/user/src/com/google/gwt/cell/client/DatePickerCell.java
@@ -37,16 +37,16 @@
 /**
  * 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 {@code DatePicker}, the new date is passed to the
+ * using the {@link 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 {@code ValueUpdater.update} will occur after {@code
- * onBrowserEvent} has returned. Pressing the 'escape' key dismisses the {@code
- * DatePicker} popup without calling {@code ValueUpdater.update}.
+ * means that the call to {@link ValueUpdater#update} will occur after {@link
+ * #onBrowserEvent} has returned. Pressing the 'escape' key dismisses the {@link
+ * DatePicker} popup without calling {@link ValueUpdater#update}.
  * 
  * <p>
- * 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
+ * Each {@link DatePickerCell} has a unique {@link DatePicker} popup associated
+ * with it; thus, if a single {@link 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>
diff --git a/user/src/com/google/gwt/cell/client/HasCell.java b/user/src/com/google/gwt/cell/client/HasCell.java
index 01e782a..7afbb3e 100644
--- a/user/src/com/google/gwt/cell/client/HasCell.java
+++ b/user/src/com/google/gwt/cell/client/HasCell.java
@@ -27,6 +27,8 @@
 
   /**
    * Returns the {@link Cell} of type C.
+   * 
+   * @return a Cell
    */
   Cell<C> getCell();
 
diff --git a/user/src/com/google/gwt/dom/client/SelectElement.java b/user/src/com/google/gwt/dom/client/SelectElement.java
index 0dd4ec9..70d2234 100644
--- a/user/src/com/google/gwt/dom/client/SelectElement.java
+++ b/user/src/com/google/gwt/dom/client/SelectElement.java
@@ -139,9 +139,9 @@
    }-*/;
 
   /**
-   * The current form control value (i.e. the value of the currently selected
-   * option), if multiple options are selected this is the value of the first
-   * selected option.
+   * The current form control value (i.e., the value of the currently
+   * selected option), if multiple options are selected this is the value of the
+   * first selected option.
    */
   public final native String getValue() /*-{
      return this.value;
@@ -238,9 +238,9 @@
    }-*/;
 
   /**
-   * The current form control value (i.e. the value of the currently selected
-   * option), if multiple options are selected this is the value of the first
-   * selected option.
+   * The current form control value (i.e., the value of the currently
+   * selected option), if multiple options are selected this is the value of the
+   * first selected option.
    */
   public final native void setValue(String value) /*-{
      this.value = value;
diff --git a/user/src/com/google/gwt/requestfactory/rebind/model/ContextMethod.java b/user/src/com/google/gwt/requestfactory/rebind/model/ContextMethod.java
index ba674df..be744e4 100644
--- a/user/src/com/google/gwt/requestfactory/rebind/model/ContextMethod.java
+++ b/user/src/com/google/gwt/requestfactory/rebind/model/ContextMethod.java
@@ -69,7 +69,7 @@
   }
 
   /**
-   * The qualified source name of the RequestContext sub-interface (i.e. the
+   * The qualified source name of the RequestContext sub-interface (i.e., the
    * return type of the method declaration).
    */
   public String getImplementedInterfaceQualifiedSourceName() {
diff --git a/user/src/com/google/gwt/safehtml/client/SafeHtmlTemplates.java b/user/src/com/google/gwt/safehtml/client/SafeHtmlTemplates.java
index 7b969a9..3046049 100644
--- a/user/src/com/google/gwt/safehtml/client/SafeHtmlTemplates.java
+++ b/user/src/com/google/gwt/safehtml/client/SafeHtmlTemplates.java
@@ -28,11 +28,13 @@
  * <p>Example usage:
  * <pre>
  *   public interface MyTemplate extends SafeHtmlTemplates {
- *     &#064;Template("<span class=\"{3}\">{0}: <a href=\"{1}\">{2}</a></span>")
+ *     &#064;Template("&lt;span class=\"{3}\"&gt;{0}: &lt;a href=\"{1}\"&gt;{2}&lt;/a&gt;&lt;/span&gt;")
  *     SafeHtml messageWithLink(SafeHtml message, String url, String linkText,
  *       String style);
  *   }
+ *
  *   private static final MyTemplate TEMPLATE = GWT.create(MyTemplate.class);
+ *
  *   public void useTemplate(...) {
  *     SafeHtml message;
  *     String url;
@@ -44,12 +46,12 @@
  *   }
  * </pre>
  * 
- * Instantiating a SafeHtmlTemplates interface with GWT.create() returns an
- * instance of an implementation that is generated at compile time. The code
- * generator parses the value of each template method's @Template annotation as 
- * a (X)HTML template, with template variables denoted by curly-brace 
- * placeholders that refer by index to the corresponding template method 
- * parameter.
+ * Instantiating a SafeHtmlTemplates interface with {@code GWT.create()} returns
+ * an instance of an implementation that is generated at compile time. The code
+ * generator parses the value of each template method's {@code @Template}
+ * annotation as a (X)HTML template, with template variables denoted by
+ * curly-brace placeholders that refer by index to the corresponding template
+ * method parameter.
  */
 public interface SafeHtmlTemplates {
 
diff --git a/user/src/com/google/gwt/safehtml/client/package.html b/user/src/com/google/gwt/safehtml/client/package.html
index 9ac9e09..3163def 100644
--- a/user/src/com/google/gwt/safehtml/client/package.html
+++ b/user/src/com/google/gwt/safehtml/client/package.html
@@ -1,5 +1,7 @@
 <html>
 <body>
 Contains interfaces for creating safe HTML content using templates.
+
+@since GWT 2.1
 </body>
 </html>
diff --git a/user/src/com/google/gwt/safehtml/shared/OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml.java b/user/src/com/google/gwt/safehtml/shared/OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml.java
index 4d7a03d..a32ad27 100644
--- a/user/src/com/google/gwt/safehtml/shared/OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml.java
+++ b/user/src/com/google/gwt/safehtml/shared/OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml.java
@@ -27,6 +27,11 @@
     implements SafeHtml {
   private String html;
 
+  /**
+   * Constructs an instance from a given HTML String.
+   *
+   * @param html an HTML String that is assumed to be safe
+   */
   public OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml(String html) {
     if (html == null) {
       throw new NullPointerException("html is null");
diff --git a/user/src/com/google/gwt/safehtml/shared/SafeHtml.java b/user/src/com/google/gwt/safehtml/shared/SafeHtml.java
index 9226b32..700f2bd 100644
--- a/user/src/com/google/gwt/safehtml/shared/SafeHtml.java
+++ b/user/src/com/google/gwt/safehtml/shared/SafeHtml.java
@@ -45,11 +45,11 @@
  * requirement implies that for any value {@code A} of this type, if {@code
  * A.asString()} includes HTML markup, the string must end in an "inner HTML"
  * context and not inside a tag or attribute. For example, a value of {@code
- * <div style="} or {@code <img src="} would not satisfy the SafeHtml contract.
+ * &lt;div style="} or {@code &lt;img src="} would not satisfy the SafeHtml contract.
  * This is because concatenating such strings with a second value that itself
  * does not contain script-executing HTML markup can result in an overall string
- * that does. For example, if {@code javascript:malicious()">} is appended to
- * {@code <img src="}, the resulting string may result in script execution.
+ * that does. For example, if {@code javascript:malicious()"&gt;} is appended to
+ * {@code &lt;img src="}, the resulting string may result in script execution.
  *
  * <p>
  * All implementations must implement equals() and hashCode() to behave
@@ -82,12 +82,16 @@
    * <p>
    * Based on this class' contract, the returned value will be non-null and a
    * string that is safe to use in an HTML context.
+   * 
+   * @return the contents as a String
    */
   String asString();
 
   /**
    * Compares this string to the specified object.
    * Must be equal to asString().equals().
+   *
+   * @param anObject the object to compare to
    */
   boolean equals(Object anObject);
 
diff --git a/user/src/com/google/gwt/safehtml/shared/SafeHtmlBuilder.java b/user/src/com/google/gwt/safehtml/shared/SafeHtmlBuilder.java
index f2e8a2c..9a26ed9 100644
--- a/user/src/com/google/gwt/safehtml/shared/SafeHtmlBuilder.java
+++ b/user/src/com/google/gwt/safehtml/shared/SafeHtmlBuilder.java
@@ -180,10 +180,10 @@
    *
    * <li>The value of the argument must end in "inner HTML" context and not
    * contain incomplete HTML tags. I.e., the following is not a correct use of
-   * this method, because the {@code <a>} tag is incomplete:
+   * this method, because the {@code &lt;a&gt;} tag is incomplete:
    *
    * <pre class="code">
-   * {@code shb.appendConstantHtml("<a href='").append(url)}</pre>
+   * {@code shb.appendConstantHtml("&lt;a href='").append(url)}</pre>
    *
    * </ol>
    *
@@ -214,6 +214,8 @@
 
   /**
    * Returns the safe HTML accumulated in the builder as a {@link SafeHtml}.
+   *
+   * @return a SafeHtml instance
    */
   public SafeHtml toSafeHtml() {
     return new SafeHtmlString(sb.toString());
diff --git a/user/src/com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java b/user/src/com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java
index f4504c0..08cbd27 100644
--- a/user/src/com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java
+++ b/user/src/com/google/gwt/safehtml/shared/SafeHtmlHostedModeUtils.java
@@ -29,6 +29,9 @@
  */
 public class SafeHtmlHostedModeUtils {
 
+  /**
+   * If true, perform checks in server-side code.
+   */
   public static final String FORCE_CHECK_COMPLETE_HTML =
       "com.google.gwt.safehtml.ForceCheckCompleteHtml";
 
@@ -51,17 +54,17 @@
    * For example, this check will pass for the following strings:
    *
    * <pre>{@code
-   *   <foo>blah
-   *   baz<em>foo</em> <x a="b">hello
+   *   &lt;foo&gt;blah
+   *   baz&lt;em&gt;foo&lt;/em&gt; &lt;x a="b"&gt;hello
    * }</pre>
    *
    * <p>
    * The check will fail for the following strings:
    *
    * <pre>{@code
-   *   baz<em>foo</em> <x
-   *   baz<em>foo</em> <x a="b
-   *   baz<em>foo</em> <x a="b"
+   *   baz&lt;em&gt;foo&lt;/em&gt; &lt;x
+   *   baz&lt;em&gt;foo&lt;/em&gt; &lt;x a="b
+   *   baz&lt;em&gt;foo&lt;/em&gt; &lt;x a="b"
    * }</pre>
    *
    * <p>
@@ -104,11 +107,19 @@
    * Sets a global flag that controls whether or not
    * {@link #maybeCheckCompleteHtml(String)} should perform its check in a
    * server-side environment.
+   *
+   * @param check if true, perform server-side checks.
    */
   public static void setForceCheckCompleteHtml(boolean check) {
     forceCheckCompleteHtml = check;
   }
 
+  /**
+   * Sets a global flag that controls whether or not
+   * {@link #maybeCheckCompleteHtml(String)} should perform its check in a
+   * server-side environment from the value of the {@value
+   * FORCE_CHECK_COMPLETE_HTML} property.
+   */
   // The following annotation causes javadoc to crash on Mac OS X 10.5.8,
   // using java 1.5.0_24.
   //
diff --git a/user/src/com/google/gwt/safehtml/shared/SafeHtmlUtils.java b/user/src/com/google/gwt/safehtml/shared/SafeHtmlUtils.java
index ddede90..1febb8a 100644
--- a/user/src/com/google/gwt/safehtml/shared/SafeHtmlUtils.java
+++ b/user/src/com/google/gwt/safehtml/shared/SafeHtmlUtils.java
@@ -25,6 +25,9 @@
   private static final String HTML_ENTITY_REGEX =
       "[a-z]+|#[0-9]+|#x[0-9a-fA-F]+";
 
+  /**
+   * An empty String.
+   */
   public static final SafeHtml EMPTY_SAFE_HTML = new SafeHtmlString("");
 
   private static final RegExp AMP_RE = RegExp.compile("&", "g");
@@ -34,8 +37,8 @@
   private static final RegExp QUOT_RE = RegExp.compile("\"", "g");
 
   /**
-   * Returns a SafeHtml constructed from a safe string, i.e. without escaping
-   * the string.
+   * Returns a SafeHtml constructed from a safe string, i.e., without
+   * escaping the string.
    *
    * <p>
    * <b>Important</b>: For this method to be able to honor the {@link SafeHtml}
@@ -47,10 +50,10 @@
    *
    * <li>The value of the argument must end in "inner HTML" context and not
    * contain incomplete HTML tags. I.e., the following is not a correct use of
-   * this method, because the {@code <a>} tag is incomplete:
+   * this method, because the {@code &lt;a&gt;} tag is incomplete:
    *
    * <pre class="code">
-   * {@code shb.appendConstantHtml("<a href='").append(url)}</pre>
+   * {@code shb.appendConstantHtml("&lt;a href='").append(url)}</pre>
    *
    * </ol>
    *
@@ -78,16 +81,22 @@
   }
 
   /**
-   * Returns a SafeHtml containing the escaped string.
+   * Returns a {@link SafeHtml} containing the escaped string.
+   *
+   * @param s the input String
+   * @return a SafeHtml instance
    */
   public static SafeHtml fromString(String s) {
     return new SafeHtmlString(htmlEscape(s));
   }
 
   /**
-   * Returns a SafeHtml constructed from a trusted string, i.e. without escaping
-   * the string. No checks are performed. The calling code should be carefully
-   * reviewed to ensure the argument meets the SafeHtml contract.
+   * Returns a {@link SafeHtml} constructed from a trusted string, i.e., without
+   * escaping the string. No checks are performed. The calling code should be
+   * carefully reviewed to ensure the argument meets the SafeHtml contract.
+   *
+   * @param s the input String
+   * @return a SafeHtml instance
    */
   public static SafeHtml fromTrustedString(String s) {
     return new SafeHtmlString(s);
@@ -96,7 +105,7 @@
   /**
    * HTML-escapes a string.
    *
-   *  Note: The following variants of this function were profiled on FF36,
+   * Note: The following variants of this function were profiled on FF36,
    * Chrome6, IE8:
    * #1) for each case, check indexOf, then use s.replace(regex, string)
    * #2) for each case, check indexOf, then use s.replaceAll()
diff --git a/user/src/com/google/gwt/safehtml/shared/SimpleHtmlSanitizer.java b/user/src/com/google/gwt/safehtml/shared/SimpleHtmlSanitizer.java
index 101d032..6a9a123 100644
--- a/user/src/com/google/gwt/safehtml/shared/SimpleHtmlSanitizer.java
+++ b/user/src/com/google/gwt/safehtml/shared/SimpleHtmlSanitizer.java
@@ -15,8 +15,6 @@
  */
 package com.google.gwt.safehtml.shared;
 
-import com.google.gwt.regexp.shared.RegExp;
-
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
@@ -25,11 +23,20 @@
  * A simple and relatively inexpensive HTML sanitizer.
  *
  * <p>
- * This sanitizer accepts the subset of HTML consisting of attribute-free tags
- * in a whitelist (including {@code <b>, <em>, <i>}, etc; for the exact list
- * consult the source), as well as numeric HTML entities and HTML entity
- * references. Any HTML metacharacters that do not appear as part of markup in
- * this subset will be HTML-escaped.
+ * This sanitizer accepts the subset of HTML consisting of the following
+ * attribute-free tags:
+ *
+ * <ul>
+ * <li>{@code &lt;b&gt;}, {@code &lt;em&gt;}, {@code &lt;i&gt;}</li>
+ * <li>{@code &lt;h1&gt;}, {@code &lt;h2&gt;}, {@code &lt;h3&gt;},
+ *     {@code &lt;h4&gt;}, {@code &lt;h5&gt;}, {@code &lt;h6&gt;}</li>
+ * <li>{@code &lt;ul&gt;}, {@code &lt;ol&gt;}. {@code &lt;li&gt;}</li>
+ * <li>{@code &lt;hr&gt;}</li>
+ * </ul>
+ *
+ * as well as numeric HTML entities and HTML entity references. Any HTML
+ * metacharacters that do not appear as part of markup in this subset will be
+ * HTML-escaped.
  */
 public final class SimpleHtmlSanitizer implements HtmlSanitizer {
 
@@ -38,9 +45,12 @@
   private static final Set<String> TAG_WHITELIST = new HashSet<String>(
       Arrays.asList("b", "em", "i", "h1", "h2", "h3", "h4", "h5", "h6", "hr",
           "ul", "ol", "li"));
-  
-  private static final RegExp LT_RE = RegExp.compile("<", "g");
 
+  /**
+   * Return a singleton SimpleHtmlSanitizer instance.
+   *
+   * @return the instance
+   */
   public static SimpleHtmlSanitizer getInstance() {
     return INSTANCE;
   }
@@ -53,6 +63,9 @@
    * the string is guaranteed to be safe to use (with respect to XSS
    * vulnerabilities) in HTML contexts, and is returned as an instance of the
    * {@link SafeHtml} type.
+   *
+   * @param html the input String
+   * @return a sanitized SafeHtml instance
    */
   public static SafeHtml sanitizeHtml(String html) {
     if (html == null) {
@@ -83,7 +96,7 @@
       if (firstSegment) {
         /*
          *  the first segment is never part of a valid tag; note that if the
-         *  input string starts with a tag, we will get an empty segment at the 
+         *  input string starts with a tag, we will get an empty segment at the
          *  beginning.
          */
         firstSegment = false;
@@ -137,8 +150,8 @@
    * construction of SafeHtml objects that are not stable in the sense that for
    * a {@code SafeHtml s} it may not be true that {@code s.asString()} equals
    * {@code SimpleHtmlSanitizer.sanitizeHtml(s.asString()).asString()}. While
-   * this is not currently an issue, it might become one and result in 
-   * unexpected behavior if this class were to become serializable and enforce 
+   * this is not currently an issue, it might become one and result in
+   * unexpected behavior if this class were to become serializable and enforce
    * its class invariant upon deserialization.
    */
 
diff --git a/user/src/com/google/gwt/safehtml/shared/UriUtils.java b/user/src/com/google/gwt/safehtml/shared/UriUtils.java
index f477d04..c177518 100644
--- a/user/src/com/google/gwt/safehtml/shared/UriUtils.java
+++ b/user/src/com/google/gwt/safehtml/shared/UriUtils.java
@@ -89,7 +89,8 @@
    * of a URI-valued HTML attribute according to {@link #isSafeUri}, or the URI
    * "{@code #}" otherwise.
    * 
-   * @param uri the URI to sanitize.
+   * @param uri the URI to sanitize
+   * @return a sanitized String
    */
   public static String sanitizeUri(String uri) {
     if (isSafeUri(uri)) {
diff --git a/user/src/com/google/gwt/safehtml/shared/package.html b/user/src/com/google/gwt/safehtml/shared/package.html
index abd4087..4286e34 100644
--- a/user/src/com/google/gwt/safehtml/shared/package.html
+++ b/user/src/com/google/gwt/safehtml/shared/package.html
@@ -1,5 +1,7 @@
 <html>
 <body>
 Contains utilities to create safe HTML content.
+
+@since GWT 2.1
 </body>
 </html>
diff --git a/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java b/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
index 8e464bf..5d9def6 100644
--- a/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
+++ b/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
@@ -947,7 +947,7 @@
   }
 
   /**
-   * Parses a package uri (i.e. package://com.google...).
+   * Parses a package uri (e.g., package://com.google...).
    *
    * @throws UnableToCompleteException on bad package name
    */
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 ac5d9c4..c02133c 100644
--- a/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
+++ b/user/src/com/google/gwt/user/cellview/client/AbstractHasData.java
@@ -273,7 +273,9 @@
   /**
    * Constructs an {@link AbstractHasData} with the given page size.
    *
+   * @param elem the parent {@link Element}
    * @param pageSize the page size
+   * @param keyProvider the key provider, or null
    */
   public AbstractHasData(Element elem, final int pageSize,
       final ProvidesKey<T> keyProvider) {
@@ -304,6 +306,7 @@
    * Get the access key.
    *
    * @return the access key, or -1 if not set
+   * @see #setAccessKey(char)
    */
   public char getAccessKey() {
     return accessKey;
@@ -322,7 +325,9 @@
   }
 
   /**
-   * Get the row values that the widget is currently displaying.
+   * Return the row values that the widget is currently displaying.
+   * 
+   * @return a List of displayed items
    */
   public List<T> getDisplayedItems() {
     return new ArrayList<T>(presenter.getRowData());
@@ -342,7 +347,11 @@
 
   /**
    * Return the range size.
+   * 
+   * @return the size of the range as an int
+   *
    * @see #getVisibleRange()
+   * @see #setPageSize(int)
    */
   public final int getPageSize() {
     return getVisibleRange().getLength();
@@ -350,7 +359,11 @@
 
   /**
    * Return the range start.
+   *
+   * @return the start of the range as an int
+   *
    * @see #getVisibleRange()
+   * @see #setPageStart(int)
    */
   public final int getPageStart() {
     return getVisibleRange().getStart();
@@ -461,6 +474,11 @@
     presenter.redraw();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @see #getAccessKey()
+   */
   public void setAccessKey(char key) {
     this.accessKey = key;
     setKeyboardSelected(getKeyboardSelectedRow(), true, false);
@@ -490,6 +508,7 @@
    *
    * @param pageSize the page size
    * @see #setVisibleRange(Range)
+   * @see #getPageSize()
    */
   public final void setPageSize(int pageSize) {
     setVisibleRange(getPageStart(), pageSize);
@@ -502,6 +521,7 @@
    * @param pageStart the index of the row that should appear at the start of
    *          the page
    * @see #setVisibleRange(Range)
+   * @see #getPageStart()
    */
   public final void setPageStart(int pageStart) {
     setVisibleRange(pageStart, getPageSize());
@@ -586,6 +606,8 @@
 
   /**
    * Return the element that holds the rendered cells.
+   * 
+   * @return the container {@link Element}
    */
   protected abstract Element getChildContainer();
 
diff --git a/user/src/com/google/gwt/user/cellview/client/AbstractPager.java b/user/src/com/google/gwt/user/cellview/client/AbstractPager.java
index 4303770..1ea9866 100644
--- a/user/src/com/google/gwt/user/cellview/client/AbstractPager.java
+++ b/user/src/com/google/gwt/user/cellview/client/AbstractPager.java
@@ -46,6 +46,7 @@
    * Get the {@link HasRows} being paged.
    *
    * @return the {@link HasRows}
+   * @see #setDisplay(HasRows)
    */
   public HasRows getDisplay() {
     return display;
@@ -55,6 +56,7 @@
    * Get the page size.
    *
    * @return the page size, or -1 if the display is not set
+   * @see #setPageSize(int)
    */
   public int getPageSize() {
     return display == null ? -1 : display.getVisibleRange().getLength();
@@ -64,6 +66,7 @@
    * Get the page start index.
    *
    * @return the page start index, or -1 if the display is not set
+   * @see #setPageStart(int)
    */
   public int getPageStart() {
     return display == null ? -1 : display.getVisibleRange().getStart();
@@ -74,6 +77,7 @@
    * true.
    *
    * @return true if the range is limited to the data size
+   * @see #setRangeLimited(boolean)
    */
   public boolean isRangeLimited() {
     return isRangeLimited;
@@ -85,6 +89,7 @@
    * visible on the page.
    *
    * @param isRangeLimited true to limit the range, false not to
+   * @see #isRangeLimited()
    */
   public void setRangeLimited(boolean isRangeLimited) {
     this.isRangeLimited = isRangeLimited;
@@ -94,6 +99,7 @@
    * Set the {@link HasRows} to be paged.
    *
    * @param display the {@link HasRows}
+   * @see #getDisplay()
    */
   public void setDisplay(HasRows display) {
     // Remove the old handlers.
@@ -150,6 +156,7 @@
    * </p>
    *
    * @return the page index, or -1 if the display is not set
+   * @see #setPage(int)
    */
   protected int getPage() {
     if (display == null) {
@@ -177,6 +184,8 @@
    * Returns true if there is enough data such that a call to
    * {@link #nextPage()} will succeed in moving the starting point of the table
    * forward.
+   *
+   * @return true if there is a next page
    */
   protected boolean hasNextPage() {
     if (display == null) {
@@ -191,6 +200,9 @@
   /**
    * Returns true if there is enough data to display a given number of
    * additional pages.
+   *
+   * @param pages the number of pages to query
+   * @return true if there are {@code pages} next pages
    */
   protected boolean hasNextPages(int pages) {
     if (display == null) {
@@ -203,6 +215,9 @@
   /**
    * Returns true if there is enough data such that the specified page is within
    * range.
+   *
+   * @param index the page index
+   * @return true if the specified page is in range
    */
   protected boolean hasPage(int index) {
     return display == null ? false : getPageSize() * index
@@ -213,6 +228,8 @@
    * Returns true if there is enough data such that a call to
    * {@link #previousPage()} will succeed in moving the starting point of the
    * table backward.
+   *
+   * @return true if there is a previous page
    */
   protected boolean hasPreviousPage() {
     return display == null ? false : getPageStart() > 0
@@ -222,6 +239,9 @@
   /**
    * Returns true if there is enough data to display a given number of previous
    * pages.
+   *
+   * @param pages the number of previous pages to query
+   * @return true if there are {@code pages} previous pages
    */
   protected boolean hasPreviousPages(int pages) {
     if (display == null) {
@@ -277,6 +297,7 @@
    * Go to a specific page.
    *
    * @param index the page index
+   * @see #getPage()
    */
   protected void setPage(int index) {
     if (display != null
@@ -293,6 +314,7 @@
    * Set the page size of the display.
    *
    * @param pageSize the new page size
+   * @see #getPageSize()
    */
   protected void setPageSize(int pageSize) {
     if (display != null) {
@@ -310,6 +332,7 @@
    * Set the page start index.
    *
    * @param index the index
+   * @see #getPageStart()
    */
   protected void setPageStart(int index) {
     if (display != null) {
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 c98075e..42e31d5 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
@@ -773,6 +773,7 @@
    * Get the default width of new columns.
    *
    * @return the default width in pixels
+   * @see #setDefaultColumnWidth(int)
    */
   public int getDefaultColumnWidth() {
     return defaultWidth;
@@ -782,6 +783,7 @@
    * Get the minimum width of columns.
    *
    * @return the minimum width in pixels
+   * @see #setMinimumColumnWidth(int)
    */
   public int getMinimumColumnWidth() {
     return minWidth;
@@ -819,6 +821,7 @@
    * Set the default width of new columns.
    *
    * @param width the default width in pixels
+   * @see #getDefaultColumnWidth()
    */
   public void setDefaultColumnWidth(int width) {
     this.defaultWidth = width;
@@ -836,6 +839,7 @@
    * Set the minimum width of columns.
    *
    * @param minWidth the minimum width in pixels
+   * @see #getMinimumColumnWidth()
    */
   public void setMinimumColumnWidth(int minWidth) {
     this.minWidth = minWidth;
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 40ac250..9097338 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellList.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellList.java
@@ -223,6 +223,7 @@
    * Get the message that is displayed when there is no data.
    *
    * @return the empty message
+   * @see #setEmptyListMessage(SafeHtml)
    */
   public SafeHtml getEmptyListMessage() {
     return emptyListMessage;
@@ -249,6 +250,7 @@
    * Set the message to display when there is no data.
    *
    * @param html the message to display when there are no results
+   * @see #getEmptyListMessage()
    */
   public void setEmptyListMessage(SafeHtml html) {
     this.emptyListMessage = html;
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 43208af..8d45754 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTable.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTable.java
@@ -581,6 +581,8 @@
 
   /**
    * Adds a column to the table.
+   *
+   * @param col the column to be added
    */
   public void addColumn(Column<T, ?> col) {
     addColumn(col, (Header<?>) null, (Header<?>) null);
@@ -588,6 +590,9 @@
 
   /**
    * Adds a column to the table with an associated header.
+   *
+   * @param col the column to be added
+   * @param header the associated {@link Header}
    */
   public void addColumn(Column<T, ?> col, Header<?> header) {
     addColumn(col, header, null);
@@ -595,6 +600,10 @@
 
   /**
    * Adds a column to the table with an associated header and footer.
+   *
+   * @param col the column to be added
+   * @param header the associated {@link Header}
+   * @param footer the associated footer (as a {@link Header} object)
    */
   public void addColumn(Column<T, ?> col, Header<?> header, Header<?> footer) {
     headers.add(header);
@@ -637,13 +646,19 @@
 
   /**
    * Adds a column to the table with an associated String header.
+   *
+   * @param col the column to be added
+   * @param headerString the associated header text, as a String
    */
   public void addColumn(Column<T, ?> col, String headerString) {
     addColumn(col, new TextHeader(headerString), null);
   }
 
   /**
-   * Adds a column to the table with an associated SafeHtml header.
+   * Adds a column to the table with an associated {@link SafeHtml} header.
+   * 
+   * @param col the column to be added
+   * @param headerHtml the associated header text, as safe HTML
    */
   public void addColumn(Column<T, ?> col, SafeHtml headerHtml) {
     addColumn(col, new SafeHtmlHeader(headerHtml), null);
@@ -651,6 +666,10 @@
 
   /**
    * Adds a column to the table with an associated String header and footer.
+   *
+   * @param col the column to be added
+   * @param headerString the associated header text, as a String
+   * @param footerString the associated footer text, as a String
    */
   public void addColumn(Column<T, ?> col, String headerString,
       String footerString) {
@@ -658,14 +677,19 @@
   }
 
   /**
-   * Adds a column to the table with an associated SafeHtml header and footer.
+   * Adds a column to the table with an associated {@link SafeHtml} header and
+   * footer.
+   * 
+   * @param col the column to be added
+   * @param headerHtml the associated header text, as safe HTML
+   * @param footerHtml the associated footer text, as safe HTML
    */
   public void addColumn(Column<T, ?> col, SafeHtml headerHtml,
       SafeHtml footerHtml) {
     addColumn(col, new SafeHtmlHeader(headerHtml), new SafeHtmlHeader(
         footerHtml));
   }
-
+  
   /**
    * Add a style name to the {@link TableColElement} at the specified index,
    * creating it if necessary.
@@ -679,6 +703,8 @@
 
   /**
    * Return the height of the table body.
+   *
+   * @return an int representing the body height
    */
   public int getBodyHeight() {
     int height = getClientHeight(tbody);
@@ -687,6 +713,8 @@
 
   /**
    * Return the height of the table header.
+   *
+   * @return an int representing the header height
    */
   public int getHeaderHeight() {
     int height = getClientHeight(thead);
@@ -788,6 +816,8 @@
   /**
    * Sets the object used to determine how a row is styled; the change will take
    * effect the next time that the table is rendered.
+   *
+   * @param rowStyles a {@link RowStyles} object
    */
   public void setRowStyles(RowStyles<T> rowStyles) {
     this.rowStyles = rowStyles;
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 78273fc..66dbaba 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellTree.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellTree.java
@@ -80,6 +80,9 @@
     @ImageOptions(flipRtl = true)
     ImageResource cellTreeOpenItem();
 
+    /**
+     * The styles used in this widget.
+     */
     @Source(BasicStyle.DEFAULT_CSS)
     BasicStyle cellTreeStyle();
   }
@@ -104,6 +107,8 @@
 
     /**
      * Return the duration of the animation in milliseconds.
+     *
+     * @see #setDuration(int)
      */
     public int getDuration() {
       return duration;
@@ -111,6 +116,9 @@
 
     /**
      * Set the duration of the animation in milliseconds.
+     * 
+     * @param duration the duration in milliseconds
+     * @see #getDuration()
      */
     public void setDuration(int duration) {
       this.duration = duration;
@@ -592,6 +600,7 @@
    *
    * @return the animation
    * @see #isAnimationEnabled()
+   * @see #setAnimation(NodeAnimation)
    */
   public NodeAnimation getAnimation() {
     return animation;
@@ -601,6 +610,7 @@
    * Get the default maximum number of children to display under each tree node.
    *
    * @return the default node size
+   * @see #setDefaultNodeSize(int)
    */
   public int getDefaultNodeSize() {
     return defaultNodeSize;
@@ -701,6 +711,8 @@
    * <p>
    * Setting the key to (int) 0 will disable the access key.
    * </p>
+   * 
+   * @see #getAccessKey()
    */
   public void setAccessKey(char key) {
     this.accessKey = key;
@@ -713,6 +725,7 @@
    *
    * @param animation a {@link NodeAnimation}
    * @see #setAnimationEnabled(boolean)
+   * @see #getAnimation()
    */
   public void setAnimation(NodeAnimation animation) {
     assert animation != null : "animation cannot be null";
@@ -733,6 +746,7 @@
    * tree nodes that are already open.
    *
    * @param defaultNodeSize the max
+   * @see #getDefaultNodeSize()
    */
   public void setDefaultNodeSize(int defaultNodeSize) {
     this.defaultNodeSize = defaultNodeSize;
@@ -751,15 +765,22 @@
    * Get the access key.
    *
    * @return the access key, or -1 if not set
+   * @see #setAccessKey(char)
    */
   protected char getAccessKey() {
     return accessKey;
   }
 
+  /**
+   * Called when the keyboard selected node loses focus.
+   */
   protected void onBlur() {
     keyboardSelectedNode.setKeyboardSelectedStyle(false);
   }
 
+  /**
+   * Called when the keyboard selected node gains focus.
+   */
   protected void onFocus() {
     keyboardSelectedNode.setKeyboardSelectedStyle(true);
   }
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 a149331..7802303 100644
--- a/user/src/com/google/gwt/user/cellview/client/Column.java
+++ b/user/src/com/google/gwt/user/cellview/client/Column.java
@@ -47,6 +47,8 @@
 
   /**
    * Construct a new Column with a given {@link Cell}.
+   *
+   * @param cell the Cell used by this Column
    */
   public Column(Cell<C> cell) {
     this.cell = cell;
@@ -54,6 +56,8 @@
 
   /**
    * Returns the {@link Cell} responsible for rendering items in the column.
+   * 
+   * @return a Cell
    */
   public Cell<C> getCell() {
     return cell;
@@ -61,6 +65,9 @@
 
   /**
    * Returns the {@link FieldUpdater} used for updating values in the column.
+   * 
+   * @return an instance of FieldUpdater<T, C>
+   * @see #setFieldUpdater(FieldUpdater)
    */
   public FieldUpdater<T, C> getFieldUpdater() {
     return fieldUpdater;
@@ -107,6 +114,9 @@
 
   /**
    * Set the {@link FieldUpdater} used for updating values in the column.
+   *
+   * @param fieldUpdater the field updater
+   * @see #getFieldUpdater()
    */
   public void setFieldUpdater(FieldUpdater<T, C> fieldUpdater) {
     this.fieldUpdater = fieldUpdater;
diff --git a/user/src/com/google/gwt/user/cellview/client/HasKeyboardPagingPolicy.java b/user/src/com/google/gwt/user/cellview/client/HasKeyboardPagingPolicy.java
index 62d7b87..341fca3 100644
--- a/user/src/com/google/gwt/user/cellview/client/HasKeyboardPagingPolicy.java
+++ b/user/src/com/google/gwt/user/cellview/client/HasKeyboardPagingPolicy.java
@@ -54,11 +54,17 @@
 
   /**
    * Get the {@link KeyboardPagingPolicy}.
+   *
+   * @return the paging policy
+   * @see #setKeyboardPagingPolicy(KeyboardPagingPolicy)
    */
   KeyboardPagingPolicy getKeyboardPagingPolicy();
 
   /**
    * Set the {@link KeyboardPagingPolicy}.
+   *
+   * @param policy the paging policy
+   * @see #getKeyboardPagingPolicy()
    */
   void setKeyboardPagingPolicy(KeyboardPagingPolicy policy);
 }
diff --git a/user/src/com/google/gwt/user/cellview/client/HasKeyboardSelectionPolicy.java b/user/src/com/google/gwt/user/cellview/client/HasKeyboardSelectionPolicy.java
index 23713bdb0..393a602 100644
--- a/user/src/com/google/gwt/user/cellview/client/HasKeyboardSelectionPolicy.java
+++ b/user/src/com/google/gwt/user/cellview/client/HasKeyboardSelectionPolicy.java
@@ -44,11 +44,17 @@
 
   /**
    * Get the {@link KeyboardSelectionPolicy}.
+   *
+   * @return the selection policy
+   * @see #setKeyboardSelectionPolicy(KeyboardSelectionPolicy)
    */
   KeyboardSelectionPolicy getKeyboardSelectionPolicy();
 
   /**
    * Set the {@link KeyboardSelectionPolicy}.
+   *
+   * @param policy the selection policy
+   * @see #getKeyboardSelectionPolicy()
    */
   void setKeyboardSelectionPolicy(KeyboardSelectionPolicy policy);
 }
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 c3c3ac6..3739fc3 100644
--- a/user/src/com/google/gwt/user/cellview/client/Header.java
+++ b/user/src/com/google/gwt/user/cellview/client/Header.java
@@ -34,6 +34,8 @@
 
   /**
    * Construct a Header with a given {@link Cell}.
+   * 
+   * @param cell the {@link Cell} responsible for rendering items in the header
    */
   public Header(Cell<H> cell) {
     this.cell = cell;
@@ -41,6 +43,8 @@
 
   /**
    * Return the {@link Cell} responsible for rendering items in the header.
+   *
+   * @return the header Cell
    */
   public Cell<H> getCell() {
     return cell;
@@ -48,6 +52,8 @@
 
   /**
    * Return the header value.
+   *
+   * @return the header value
    */
   public abstract H getValue();
 
@@ -73,6 +79,8 @@
 
   /**
    * Set the {@link ValueUpdater}.
+   * 
+   * @param updater the value updater to use
    */
   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 614c144..2b9569d 100644
--- a/user/src/com/google/gwt/user/cellview/client/IdentityColumn.java
+++ b/user/src/com/google/gwt/user/cellview/client/IdentityColumn.java
@@ -27,6 +27,8 @@
 
   /**
    * Construct a new IdentityColumn with a given {@link Cell}.
+   * 
+   * @param cell the {@link Cell} responsible for rendering items in the column
    */
   public IdentityColumn(Cell<T> cell) {
     super(cell);
@@ -34,6 +36,8 @@
 
   /**
    * Return the passed-in object.
+   *
+   * @param object the object to return
    */
   @Override
   public T getValue(T object) {
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 651506f..e239d50 100644
--- a/user/src/com/google/gwt/user/cellview/client/SafeHtmlHeader.java
+++ b/user/src/com/google/gwt/user/cellview/client/SafeHtmlHeader.java
@@ -27,6 +27,8 @@
 
   /**
    * Construct a Header with a given {@link SafeHtml} text value.
+   *
+   * @param text the header text, as safe HTML
    */
   public SafeHtmlHeader(SafeHtml text) {
     super(new SafeHtmlCell());
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 609f483..f33aa2d 100644
--- a/user/src/com/google/gwt/user/cellview/client/TextHeader.java
+++ b/user/src/com/google/gwt/user/cellview/client/TextHeader.java
@@ -25,7 +25,9 @@
   private String text;
 
   /**
-   * Construct a new TextColumn.
+   * Construct a new TextHeader.
+   *
+   * @param text the header text as a String
    */
   public TextHeader(String text) {
     super(new TextCell());
diff --git a/user/src/com/google/gwt/user/cellview/client/TreeNode.java b/user/src/com/google/gwt/user/cellview/client/TreeNode.java
index c7eedab..c9008bd 100644
--- a/user/src/com/google/gwt/user/cellview/client/TreeNode.java
+++ b/user/src/com/google/gwt/user/cellview/client/TreeNode.java
@@ -30,6 +30,7 @@
   /**
    * Get the value associated with a child node.
    *
+   * @param index the child index
    * @return the value
    */
   Object getChildValue(int index);
diff --git a/user/src/com/google/gwt/user/cellview/client/package.html b/user/src/com/google/gwt/user/cellview/client/package.html
index d820739..c6b13c2 100644
--- a/user/src/com/google/gwt/user/cellview/client/package.html
+++ b/user/src/com/google/gwt/user/cellview/client/package.html
@@ -22,5 +22,7 @@
 {@link com.google.gwt.user.cellview.client.PageSizePager PageSizePager},
 or a user-defined subclass.
 </p>
+
+@since GWT 2.1
 </body>
 </html>
diff --git a/user/src/com/google/gwt/user/client/ui/AbsolutePanel.java b/user/src/com/google/gwt/user/client/ui/AbsolutePanel.java
index 1f4da9f..66bb445 100644
--- a/user/src/com/google/gwt/user/client/ui/AbsolutePanel.java
+++ b/user/src/com/google/gwt/user/client/ui/AbsolutePanel.java
@@ -228,8 +228,8 @@
   }
 
   /**
-   * Verify that the given widget is not statically positioned on the page, i.e.
-   * relative to the document window, unless the widget is in fact directly
+   * Verify that the given widget is not statically positioned on the page
+   * (relative to the document window), unless the widget is in fact directly
    * attached to the document BODY. Note that the current use of this method is
    * not comprehensive, since we can only verify the offsetParent if both parent
    * (AbsolutePanel) and child widget are both visible and attached to the DOM
diff --git a/user/src/com/google/gwt/view/client/AbstractDataProvider.java b/user/src/com/google/gwt/view/client/AbstractDataProvider.java
index f824a86..635317c 100644
--- a/user/src/com/google/gwt/view/client/AbstractDataProvider.java
+++ b/user/src/com/google/gwt/view/client/AbstractDataProvider.java
@@ -63,6 +63,8 @@
   
   /**
    * Construct an AbstractDataProvider with a given key provider.
+   * 
+   * @param keyProvider a {@link ProvidesKey} object
    */
   protected AbstractDataProvider(ProvidesKey<T> keyProvider) {
     this.keyProvider = keyProvider;
@@ -149,6 +151,8 @@
   /**
    * Remove the given data display.
    * 
+   * @param display a {@link HasData} instance
+   * 
    * @throws IllegalStateException if the display is not present
    */
   public void removeDataDisplay(HasData<T> display) {
diff --git a/user/src/com/google/gwt/view/client/DefaultSelectionModel.java b/user/src/com/google/gwt/view/client/DefaultSelectionModel.java
index 23a5f45..086810e 100644
--- a/user/src/com/google/gwt/view/client/DefaultSelectionModel.java
+++ b/user/src/com/google/gwt/view/client/DefaultSelectionModel.java
@@ -63,6 +63,9 @@
   /**
    * Returns true if the given object should be selected by default. Subclasses
    * implement this method in order to define the default selection behavior.
+   * 
+   * @param object an object of this {@link SelectionModel}'s type
+   * @return true if the object should be selected by default
    */
   public abstract boolean isDefaultSelected(T object);
 
diff --git a/user/src/com/google/gwt/view/client/HasData.java b/user/src/com/google/gwt/view/client/HasData.java
index c26558a..7040772 100644
--- a/user/src/com/google/gwt/view/client/HasData.java
+++ b/user/src/com/google/gwt/view/client/HasData.java
@@ -28,6 +28,8 @@
    * Get the {@link SelectionModel} used by this {@link HasData}.
    *
    * @return the {@link SelectionModel}
+   *
+   * @see #setSelectionModel(SelectionModel)
    */
   SelectionModel<? super T> getSelectionModel();
 
@@ -43,6 +45,8 @@
    * Set the {@link SelectionModel} used by this {@link HasData}.
    *
    * @param selectionModel the {@link SelectionModel}
+   *
+   * @see #getSelectionModel()
    */
   void setSelectionModel(SelectionModel<? super T> selectionModel);
 
diff --git a/user/src/com/google/gwt/view/client/HasRows.java b/user/src/com/google/gwt/view/client/HasRows.java
index 5e4e3f5..fb63c99 100644
--- a/user/src/com/google/gwt/view/client/HasRows.java
+++ b/user/src/com/google/gwt/view/client/HasRows.java
@@ -44,6 +44,8 @@
    * Get the total count of all rows.
    *
    * @return the total row count
+   *
+   * @see #setRowCount(int)
    */
   int getRowCount();
 
@@ -51,6 +53,9 @@
    * Get the range of visible rows.
    *
    * @return the visible range
+   * 
+   * @see #setVisibleRange(Range)
+   * @see #setVisibleRange(int, int)
    */
   Range getVisibleRange();
 
@@ -66,6 +71,8 @@
    * {@link #setRowCount(int, boolean)}.
    *
    * @param count the exact total count
+   *
+   * @see #getRowCount()
    */
   void setRowCount(int count);
 
@@ -75,6 +82,7 @@
    *
    * @param count the total count
    * @param isExact true if the count is exact, false if an estimate
+   * @see #getRowCount()
    */
   void setRowCount(int count, boolean isExact);
 
@@ -84,6 +92,8 @@
    *
    * @param start the start index
    * @param length the length
+   *
+   * @see #getVisibleRange()
    */
   // TODO(jlabanca): Should we include setPageStart/Size as shortcut methods?
   void setVisibleRange(int start, int length);
@@ -92,6 +102,8 @@
    * Set the visible range or rows.
    *
    * @param range the visible range
+   *
+   * @see #getVisibleRange()
    */
   void setVisibleRange(Range range);
 }
diff --git a/user/src/com/google/gwt/view/client/ListDataProvider.java b/user/src/com/google/gwt/view/client/ListDataProvider.java
index 2bd2c7e..30b64d2 100644
--- a/user/src/com/google/gwt/view/client/ListDataProvider.java
+++ b/user/src/com/google/gwt/view/client/ListDataProvider.java
@@ -444,6 +444,8 @@
    * 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 listToWrap the List to be wrapped
    */
   public ListDataProvider(List<T> listToWrap) {
     this(listToWrap, null);
@@ -463,7 +465,8 @@
    * 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 listToWrap the List to be wrapped
    * @param keyProvider an instance of ProvidesKey<T>, or null if the record
    *        object should act as its own key
    */
@@ -489,6 +492,8 @@
    * in the model.
    *
    * @return the list
+   *
+   * @see #setList(List)
    */
   public List<T> getList() {
     return listWrapper;
@@ -505,6 +510,8 @@
    * Replace this model's list.
    *
    * @param listToWrap the model's new list
+   *
+   * @see #getList()
    */
   public void setList(List<T> listToWrap) {
     listWrapper = new ListWrapper(listToWrap);
diff --git a/user/src/com/google/gwt/view/client/RowCountChangeEvent.java b/user/src/com/google/gwt/view/client/RowCountChangeEvent.java
index c166d3e..9b64150 100644
--- a/user/src/com/google/gwt/view/client/RowCountChangeEvent.java
+++ b/user/src/com/google/gwt/view/client/RowCountChangeEvent.java
@@ -47,6 +47,7 @@
    *
    * @param source the source of the handlers
    * @param rowCount the new rowCount
+   * @param isExact true if rowCount is an exact count
    */
   public static void fire(HasRows source, int rowCount, boolean isExact) {
     if (TYPE != null) {
diff --git a/user/src/com/google/gwt/view/client/SelectionModel.java b/user/src/com/google/gwt/view/client/SelectionModel.java
index 54a2f77..7019e8c 100644
--- a/user/src/com/google/gwt/view/client/SelectionModel.java
+++ b/user/src/com/google/gwt/view/client/SelectionModel.java
@@ -75,7 +75,10 @@
     }
 
     /**
-     * Returns a ProvidesKey instance that simply returns the input data item.
+     * Returns a {@link ProvidesKey} instance that simply returns the input data
+     * item.
+     *
+     * @return the key provider, which may be null
      */
     public ProvidesKey<T> getKeyProvider() {
       return keyProvider;
@@ -93,6 +96,8 @@
 
     /**
      * Return true if the next scheduled event should be canceled.
+     *
+     * @return true if the event is canceled
      */
     protected boolean isEventCancelled() {
       return isEventCancelled;
@@ -100,6 +105,8 @@
 
     /**
      * Return true if an event is scheduled to be fired.
+     *
+     * @return true if the event is scheduled
      */
     protected boolean isEventScheduled() {
       return isEventScheduled;
@@ -128,6 +135,8 @@
 
     /**
      * Set whether the next scheduled event should be canceled.
+     * 
+     * @param isEventCancelled if true, cancel the event
      */
     protected void setEventCancelled(boolean isEventCancelled) {
       this.isEventCancelled = isEventCancelled;
@@ -135,6 +144,8 @@
 
     /**
      * Set whether an event is scheduled to be fired.
+     * 
+     * @param isEventScheduled if true, schedule the event
      */
     protected void setEventScheduled(boolean isEventScheduled) {
       this.isEventScheduled = isEventScheduled;
diff --git a/user/src/com/google/gwt/view/client/SingleSelectionModel.java b/user/src/com/google/gwt/view/client/SingleSelectionModel.java
index dcb22fa..c5a6982 100644
--- a/user/src/com/google/gwt/view/client/SingleSelectionModel.java
+++ b/user/src/com/google/gwt/view/client/SingleSelectionModel.java
@@ -51,6 +51,8 @@
 
   /**
    * Gets the currently-selected object.
+   *
+   * @return the selected object
    */
   public T getSelectedObject() {
     resolveChanges();
diff --git a/user/src/com/google/gwt/view/client/TreeViewModel.java b/user/src/com/google/gwt/view/client/TreeViewModel.java
index d0b558f..68ef100 100644
--- a/user/src/com/google/gwt/view/client/TreeViewModel.java
+++ b/user/src/com/google/gwt/view/client/TreeViewModel.java
@@ -52,6 +52,7 @@
      *          child values
      * @param cell the {@link Cell} used to render the child values update when
      *          the selection changes
+     * @param selectionModel the {@link SelectionModel} used for selection
      * @param valueUpdater the {@link ValueUpdater}
      */
     public DefaultNodeInfo(AbstractDataProvider<T> dataProvider,
diff --git a/user/src/com/google/gwt/view/client/package.html b/user/src/com/google/gwt/view/client/package.html
index b8dd670..461c296 100644
--- a/user/src/com/google/gwt/view/client/package.html
+++ b/user/src/com/google/gwt/view/client/package.html
@@ -2,6 +2,8 @@
 <body>
 <p>Classes and interfaces used by the
 {@link com.google.gwt.user.cellview.client cellview} widget set.
+
+@since GWT 2.1
 </p>
 </body>
 </html>
diff --git a/user/super/com/google/gwt/emul/java/math/BitLevel.java b/user/super/com/google/gwt/emul/java/math/BitLevel.java
index b539637..82e88c9 100644
--- a/user/super/com/google/gwt/emul/java/math/BitLevel.java
+++ b/user/super/com/google/gwt/emul/java/math/BitLevel.java
@@ -227,8 +227,8 @@
   }
 
   /**
-   * Abstractly shifts left an array of integers in little endian (i.e. shift it
-   * right). Total shift distance in bits is intCount * 32 + count
+   * Abstractly shifts left an array of integers in little endian (i.e.,
+   * shift it right). Total shift distance in bits is intCount * 32 + count
    * 
    * @param result the destination array
    * @param source the source array
