Cherry picking bugs from trunk into release branch: 1012801, 1007801, 1010801, 988802, 1005801, 1002801, 1011801


git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/2.1@9083 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/samples/expenses/pom.xml b/samples/expenses/pom.xml
index 7e45bb9..b45c4d4 100644
--- a/samples/expenses/pom.xml
+++ b/samples/expenses/pom.xml
@@ -10,12 +10,25 @@
 		<roo.version>1.1.0.M2</roo.version>
 		<spring.version>3.0.3.RELEASE</spring.version>
 		<slf4j.version>1.6.1</slf4j.version>
-	<gae.version>1.3.4</gae.version>
-    <gae-test.version>1.3.4</gae-test.version>
+	<gae.version>1.3.7</gae.version>
+    <gae-test.version>1.3.7</gae-test.version>
     <gae.home>${user.home}/.m2/repository/com/google/appengine/appengine-java-sdk/${gae.version}/appengine-java-sdk-${gae.version}</gae.home>
-    <datanucleus.version>1.1.6</datanucleus.version>
+    <datanucleus.version>1.1.5</datanucleus.version>
     </properties>
 	<repositories>
+		<repository>
+			<id>google-maven-snapshot-repository</id>
+			<name>Google Maven Snapshot Repository</name>
+			<url>https://oss.sonatype.org/content/repositories/google-snapshots/</url>
+			<snapshots>
+				<enabled>true</enabled>
+			</snapshots>
+		</repository>
+	<repository>
+            <id>maven-gae-plugin-repo</id>
+            <url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
+            <name>maven-gae-plugin repository</name>
+        </repository>
         <repository>
             <id>spring-maven-release</id>
             <name>Spring Maven Release Repository</name>
@@ -31,11 +44,6 @@
             <name>Spring Roo Repository</name>
             <url>http://spring-roo-repository.springsource.org/release</url>
         </repository>
-	<repository>
-            <id>maven-gae-plugin-repo</id>
-            <url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
-            <name>maven-gae-plugin repository</name>
-        </repository>
     <repository>
             <id>DataNucleus_2</id>
             <url>http://www.datanucleus.org/downloads/maven2/</url>
@@ -46,18 +54,15 @@
             <url>https://repository.jboss.org/nexus/content/repositories/releases</url>
             <name>JBoss Repo</name>
         </repository>
+<!--
     <repository>
             <id>gwt-repo</id>
             <url>http://google-web-toolkit.googlecode.com/svn/2.1.0.M3/gwt/maven</url>
             <name>Google Web Toolkit Repository</name>
         </repository>
+-->
     </repositories>
     <pluginRepositories>
-        <pluginRepository>
-            <id>maven-gae-plugin-repo</id>
-            <url>http://maven-gae-plugin.googlecode.com/svn/repository</url>
-            <name>maven-gae-plugin repository</name>
-        </pluginRepository>
     <pluginRepository>
             <id>DataNucleus_2</id>
             <url>http://www.datanucleus.org/downloads/maven2/</url>
@@ -437,6 +442,11 @@
     	<type>jar</type>
     	<scope>compile</scope>
     </dependency>
+    <dependency>
+        <groupId>xalan</groupId>
+        <artifactId>xalan</artifactId>
+        <version>2.7.1</version>
+    </dependency>
 	</dependencies>
 	<build>
 		<plugins>
@@ -549,7 +559,7 @@
 		<plugin>
                 <groupId>net.kindleit</groupId>
                 <artifactId>maven-gae-plugin</artifactId>
-                <version>0.5.7</version>
+                <version>0.7.2</version>
                 <configuration>
 						<unpackVersion>${gae.version}</unpackVersion>
 					</configuration>
@@ -611,7 +621,7 @@
         <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>gwt-maven-plugin</artifactId>
-                <version>1.3.1.google</version>
+                <version>1.3.2.google</version>
                 <configuration>
 				<logLevel>INFO</logLevel>
 				<style>PRETTY</style>
diff --git a/user/src/com/google/gwt/cell/client/AbstractEditableCell.java b/user/src/com/google/gwt/cell/client/AbstractEditableCell.java
index 2bac676..a99eb8f 100644
--- a/user/src/com/google/gwt/cell/client/AbstractEditableCell.java
+++ b/user/src/com/google/gwt/cell/client/AbstractEditableCell.java
@@ -76,6 +76,7 @@
    *
    * @param key the key identifying the row object
    * @return the view data, or null if none has been set
+   * @see #setViewData(Object, Object)V
    */
   public V getViewData(Object key) {
     return (key == null) ? null : viewDataMap.get(key);
@@ -90,6 +91,7 @@
    * @param parent the parent Element
    * @param value the value associated with the cell
    * @param key the unique key associated with the row object
+   * @return true if the cell is in edit mode
    */
   @Override
   public abstract boolean isEditing(Element parent, C value, Object key);
@@ -100,6 +102,7 @@
    *
    * @param key the key of the view data
    * @param viewData the view data to associate
+   * @see #getViewData(Object)
    */
   public void setViewData(Object key, V viewData) {
     if (key == null) {
diff --git a/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java b/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java
index 0e2bbfd..4d7bc32 100644
--- a/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java
+++ b/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java
@@ -65,6 +65,8 @@
 
   /**
    * Return the {@link SafeHtmlRenderer} used by this cell.
+   *
+   * @return a {@link SafeHtmlRenderer} instance
    */
   public SafeHtmlRenderer<C> getRenderer() {
     return renderer;
diff --git a/user/src/com/google/gwt/cell/client/ActionCell.java b/user/src/com/google/gwt/cell/client/ActionCell.java
index 8e06066..0003118 100644
--- a/user/src/com/google/gwt/cell/client/ActionCell.java
+++ b/user/src/com/google/gwt/cell/client/ActionCell.java
@@ -37,6 +37,8 @@
   public static interface Delegate<T> {
     /**
      * Perform the desired action on the given object.
+     *
+     * @param object the object to be acted upon
      */
     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 e819440..d8caa83 100644
--- a/user/src/com/google/gwt/cell/client/ButtonCell.java
+++ b/user/src/com/google/gwt/cell/client/ButtonCell.java
@@ -36,6 +36,8 @@
 
   /**
    * Construct a new ButtonCell that will use a given {@link SafeHtmlRenderer}.
+   * 
+   * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
    */
   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 85bb507..217217f 100644
--- a/user/src/com/google/gwt/cell/client/Cell.java
+++ b/user/src/com/google/gwt/cell/client/Cell.java
@@ -41,12 +41,10 @@
   boolean dependsOnSelection();
 
   /**
-   * <p>
    * Get the set of events that this cell consumes. The container that uses this
    * cell should only pass these events to
-   * {@link #onBrowserEvent(Element, Object, Object, NativeEvent, ValueUpdater)}
-   * .
-   * </p>
+   * {@link #onBrowserEvent(Element, Object, Object, NativeEvent, ValueUpdater)}.
+   *
    * <p>
    * The returned value should not be modified, and may be an unmodifiable set.
    * Changes to the return value may not be reflected in the cell.
@@ -73,6 +71,7 @@
    * @param parent the parent Element
    * @param value the value associated with the cell
    * @param key the unique key associated with the row object
+   * @return true if the cell is in edit mode
    */
   boolean isEditing(Element parent, C value, Object key);
 
@@ -109,6 +108,10 @@
    * Reset focus on the Cell. This method is called if the cell has focus when
    * it is refreshed.
    *
+   * @param parent the parent Element
+   * @param value the value associated with the cell
+   * @param key the unique key associated with the row object
+   *
    * @return true if focus is taken, false if not
    */
   boolean resetFocus(Element parent, C value, Object key);
diff --git a/user/src/com/google/gwt/cell/client/ClickableTextCell.java b/user/src/com/google/gwt/cell/client/ClickableTextCell.java
index 2c57c59..16fbe38 100644
--- a/user/src/com/google/gwt/cell/client/ClickableTextCell.java
+++ b/user/src/com/google/gwt/cell/client/ClickableTextCell.java
@@ -39,6 +39,8 @@
   /**
    * Construct a new ClickableTextCell that will use a given
    * {@link SafeHtmlRenderer}.
+   * 
+   * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
    */
   public ClickableTextCell(SafeHtmlRenderer<String> renderer) {
     super(renderer, "click", "keydown");
diff --git a/user/src/com/google/gwt/cell/client/DatePickerCell.java b/user/src/com/google/gwt/cell/client/DatePickerCell.java
index 236fb03..49df900 100644
--- a/user/src/com/google/gwt/cell/client/DatePickerCell.java
+++ b/user/src/com/google/gwt/cell/client/DatePickerCell.java
@@ -79,6 +79,8 @@
   /**
    * Constructs a new DatePickerCell that uses the given date/time format and a
    * {@link SimpleSafeHtmlRenderer}.
+   *
+   * @param format a {@link DateTimeFormat} instance
    */
   public DatePickerCell(DateTimeFormat format) {
     this(format, SimpleSafeHtmlRenderer.getInstance());
@@ -88,6 +90,8 @@
    * Constructs a new DatePickerCell that uses the date/time format given by
    * {@link DateTimeFormat#getFullDateFormat} and the given
    * {@link SafeHtmlRenderer}.
+   * 
+   * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
    */
   public DatePickerCell(SafeHtmlRenderer<String> renderer) {
     this(DateTimeFormat.getFormat(PredefinedFormat.DATE_FULL), renderer);
@@ -96,6 +100,9 @@
   /**
    * Constructs a new DatePickerCell that uses the given date/time format and
    * {@link SafeHtmlRenderer}.
+   *
+   * @param format a {@link DateTimeFormat} instance
+   * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
    */
   public DatePickerCell(DateTimeFormat format, SafeHtmlRenderer<String> renderer) {
     super("click", "keydown");
diff --git a/user/src/com/google/gwt/cell/client/EditTextCell.java b/user/src/com/google/gwt/cell/client/EditTextCell.java
index 07d5ef8..004967b 100644
--- a/user/src/com/google/gwt/cell/client/EditTextCell.java
+++ b/user/src/com/google/gwt/cell/client/EditTextCell.java
@@ -145,8 +145,9 @@
   }
 
   /**
-   * Construct a new EditTextCell that will use a given {@link SafeHtmlRenderer}
-   * .
+   * Construct a new EditTextCell that will use a given {@link SafeHtmlRenderer}.
+   * 
+   * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
    */
   public EditTextCell(SafeHtmlRenderer<String> renderer) {
     super("click", "keyup", "keydown", "blur");
diff --git a/user/src/com/google/gwt/cell/client/ImageLoadingCell.java b/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
index 10c1a24..67a3e23 100644
--- a/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
+++ b/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
@@ -108,15 +108,30 @@
       }
     }
 
+    /**
+     * Returns the renderer for a broken image.
+     *
+     * @return a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
+     */
     public SafeHtmlRenderer<String> getErrorRenderer() {
       // Show the broken image on error.
       return getImageRenderer();
     }
 
+    /**
+     * Returns the renderer for an image.
+     *
+     * @return a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
+     */
     public SafeHtmlRenderer<String> getImageRenderer() {
       return IMAGE_RENDERER;
     }
 
+    /**
+     * Returns the renderer for a loading image.
+     *
+     * @return a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
+     */
     public SafeHtmlRenderer<String> getLoadingRenderer() {
       return LOADING_RENDERER;
     }
@@ -150,7 +165,8 @@
   /**
    * Construct an {@link ImageResourceCell} using the specified
    * {@link SafeHtmlRenderer SafeHtmlRenderers}.
-   *
+   * 
+   * @param renderers an instance of {@link ImageLoadingCell.Renderers Renderers}
    */
   public ImageLoadingCell(Renderers renderers) {
     super("load", "error");
diff --git a/user/src/com/google/gwt/cell/client/TextCell.java b/user/src/com/google/gwt/cell/client/TextCell.java
index 0a6fbeb..48db9eb 100644
--- a/user/src/com/google/gwt/cell/client/TextCell.java
+++ b/user/src/com/google/gwt/cell/client/TextCell.java
@@ -36,6 +36,8 @@
   /**
    * Constructs a TextCell that uses the provided {@link SafeHtmlRenderer} to
    * render its text.
+   * 
+   * @param renderer a {@link SafeHtmlRenderer SafeHtmlRenderer<String>} instance
    */
   public TextCell(SafeHtmlRenderer<String> renderer) {
     super(renderer);
diff --git a/user/src/com/google/gwt/cell/client/TextInputCell.java b/user/src/com/google/gwt/cell/client/TextInputCell.java
index ca932e5..be1f7d5 100644
--- a/user/src/com/google/gwt/cell/client/TextInputCell.java
+++ b/user/src/com/google/gwt/cell/client/TextInputCell.java
@@ -52,6 +52,8 @@
 
     /**
      * Construct a ViewData instance containing a given value.
+     *
+     * @param value a String value
      */
     public ViewData(String value) {
       this.lastValue = value;
@@ -74,6 +76,9 @@
 
     /**
      * Return the current value of the input element.
+     * 
+     * @return the current value String
+     * @see #setCurrentValue(String)
      */
     public String getCurrentValue() {
       return curValue;
@@ -81,6 +86,9 @@
 
     /**
      * Return the last value sent to the {@link ValueUpdater}.
+     * 
+     * @return the last value String
+     * @see #setLastValue(String)
      */
     public String getLastValue() {
       return lastValue;
@@ -98,6 +106,7 @@
      * Set the current value.
      * 
      * @param curValue the current value
+     * @see #getCurrentValue()
      */
     protected void setCurrentValue(String curValue) {
       this.curValue = curValue;
@@ -107,6 +116,7 @@
      * Set the last value.
      * 
      * @param lastValue the last value
+     * @see #getLastValue()
      */
     protected void setLastValue(String lastValue) {
       this.lastValue = lastValue;
diff --git a/user/src/com/google/gwt/cell/client/package.html b/user/src/com/google/gwt/cell/client/package.html
index 2ad25ad..9e1d211 100644
--- a/user/src/com/google/gwt/cell/client/package.html
+++ b/user/src/com/google/gwt/cell/client/package.html
@@ -23,7 +23,7 @@
 <li>{@link com.google.gwt.cell.client.SelectionCell SelectionCell} - a cell that displays a drop-down list</li>
 <li>{@link com.google.gwt.cell.client.TextCell TextCell} - a cell that displays HTML text</li>
 <li>{@link com.google.gwt.cell.client.TextInputCell TextInputCell} - a cell that provides text input</li>
-<ul>
+</ul>
 </p>
 
 <p>In addition to cells, this package provides the following interfaces:
@@ -33,5 +33,7 @@
 <li>{@link com.google.gwt.cell.client.FieldUpdater FieldUpdater}</li>
 </ul>
 </p>
+
+@since GWT 2.1
 </body>
 </html>
diff --git a/user/src/com/google/gwt/editor/client/AutoBean.java b/user/src/com/google/gwt/editor/client/AutoBean.java
index 8e20ef4..f90e621 100644
--- a/user/src/com/google/gwt/editor/client/AutoBean.java
+++ b/user/src/com/google/gwt/editor/client/AutoBean.java
@@ -23,12 +23,16 @@
 public interface AutoBean<T> {
   /**
    * Accept an AutoBeanVisitor.
+   *
+   * @param visitor an {@link AutoBeanVisitor}
    */
   void accept(AutoBeanVisitor visitor);
 
   /**
    * Returns a proxy implementation of the <code>T</code> interface which will
    * delegate to the underlying wrapped object, if any.
+   *
+   * @return a proxy that delegates to the wrapped object
    */
   T as();
 
@@ -40,6 +44,7 @@
    * of the value of <code>deep</code>.
    * 
    * @param deep indicates if all referenced AutoBeans should be cloned
+   * @return a copy of this {@link AutoBean}
    * @throws IllegalStateException if the AutoBean is a wrapper type
    */
   AutoBean<T> clone(boolean deep);
@@ -47,36 +52,52 @@
   /**
    * Retrieve a tag value that was previously provided to
    * {@link #setTag(String, Object)}.
+   * 
+   * @param tagName the tag name
+   * @return the tag value
+   * @see #setTag(String, Object)
    */
   <Q> Q getTag(String tagName);
 
   /**
-   * Returns the value most recently passed to {@link #setFrozen}, or false
-   * if it has never been called.
+   * Returns the value most recently passed to {@link #setFrozen}, or {@code
+   * false} if it has never been called.
+   * 
+   * @return {@code true} if this instance is frozen
    */
   boolean isFrozen();
 
   /**
-   * Returns <code>true</code> if the AutoBean was provided with an external
+   * Returns {@code true} if the AutoBean was provided with an external
    * object.
+   *
+   * @return {@code true} if this instance is a wrapper
    */
   boolean isWrapper();
 
   /**
    * Disallows any method calls other than getters. All setter and call
    * operations will throw an {@link UnsupportedOperationException}.
+   * 
+   * @param frozen if {@code true}, freeze this instance
    */
   void setFrozen(boolean frozen);
 
   /**
    * A tag is an arbitrary piece of external metadata to be associated with the
    * wrapped value.
+   *
+   * @param tagName the tag name
+   * @param value the wrapped value
+   * @see #getTag(String)
    */
   void setTag(String tagName, Object value);
 
   /**
    * If the AutoBean wraps an object, return the underlying object.
-   * 
+   * The AutoBean will no longer function once unwrapped.
+   *
+   * @return the previously-wrapped object
    * @throws IllegalStateException if the AutoBean is not a wrapper
    */
   T unwrap();
diff --git a/user/src/com/google/gwt/editor/client/AutoBeanFactory.java b/user/src/com/google/gwt/editor/client/AutoBeanFactory.java
index 3f7dc88..872e1b5 100644
--- a/user/src/com/google/gwt/editor/client/AutoBeanFactory.java
+++ b/user/src/com/google/gwt/editor/client/AutoBeanFactory.java
@@ -93,12 +93,24 @@
   /**
    * Allows dynamic creation of AutoBean instances based on declared
    * parameterizations.
+   * 
+   * @param <T> the parameterization of the created {@link AutoBean}
+   * @param clazz the Class of type T of the new instance
+   * @return an {@link AutoBean} of type T or {@code null} if the interface type
+   *         is unknown to the factory
    */
   <T> AutoBean<T> create(Class<T> clazz);
 
   /**
    * Allows dynamic creation of wrapped AutoBean instances based on declared
    * parameterizations.
+   * 
+   * @param <T> the parameterization of the created {@link AutoBean}
+   * @param <U> the delegate's type, a subtype of T
+   * @param clazz the Class of type T of the new instance
+   * @param delegate a delegate that extends type T
+   * @return an {@link AutoBean} of type T or {@code null} if the interface type
+   *         is unknown to the factory
    */
   <T, U extends T> AutoBean<T> create(Class<T> clazz, U delegate);
 }
diff --git a/user/src/com/google/gwt/editor/client/AutoBeanUtils.java b/user/src/com/google/gwt/editor/client/AutoBeanUtils.java
index 67d346a..2299b9f 100644
--- a/user/src/com/google/gwt/editor/client/AutoBeanUtils.java
+++ b/user/src/com/google/gwt/editor/client/AutoBeanUtils.java
@@ -35,6 +35,10 @@
    * although the diff produced is likely meaningless.
    * <p>
    * This will work for both simple and wrapper AutoBeans.
+   *
+   * @param a an {@link AutoBean}
+   * @param b an {@link AutoBean}
+   * @return a {@link Map} of differing properties
    */
   public static Map<String, Object> diff(AutoBean<?> a, AutoBean<?> b) {
     // Fast check for comparing an object to itself
@@ -93,6 +97,9 @@
    * Returns a map that is a copy of the properties contained in an AutoBean.
    * The returned map is mutable, but editing it will not have any effect on the
    * bean that produced it.
+   *
+   * @param bean an {@link AutoBean}
+   * @return a {@link Map} of the bean's properties
    */
   public static Map<String, Object> getAllProperties(AutoBean<?> bean) {
     final Map<String, Object> toReturn = new LinkedHashMap<String, Object>();
@@ -118,8 +125,11 @@
 
   /**
    * Return the single AutoBean wrapper that is observing the delegate object or
-   * <code>null</code> if the parameter is <code>null</code> or not wrapped by
+   * {@code null} if the parameter is {@code null}or not wrapped by
    * an AutoBean.
+   * 
+   * @param delegate a delegate object, or {@code null}
+   * @return the {@link AutoBean} wrapper for the delegate, or {@code null}
    */
   @SuppressWarnings("unchecked")
   public static <T, U extends T> AutoBean<T> getAutoBean(U delegate) {
diff --git a/user/src/com/google/gwt/editor/client/AutoBeanVisitor.java b/user/src/com/google/gwt/editor/client/AutoBeanVisitor.java
index 305d481..40c14d1 100644
--- a/user/src/com/google/gwt/editor/client/AutoBeanVisitor.java
+++ b/user/src/com/google/gwt/editor/client/AutoBeanVisitor.java
@@ -31,37 +31,49 @@
   public interface PropertyContext {
     /**
      * Indicates if the {@link #set} method will succeed.
+     *
+     * @return {@code true} if the property can be set
      */
     boolean canSet();
 
     /**
      * If the reference property is a collection, returns the collection's
      * element type.
+     * 
+     * @return a Class object representing the element type or {@code null} if
+     *         the property is not a collection type
      */
     Class<?> getElementType();
 
     /**
      * Returns the expected type of the property.
+     *
+     * @return a Class object representing the property type
      */
     Class<?> getType();
 
+    /**
+     * Sets a property value.
+     *
+     * @param value the new value
+     */
     void set(Object value);
   }
 
   /**
-   * TODO: document.
+   * Called after visiting an {@link AutoBean}.
    * 
-   * @param bean
+   * @param bean an {@link AutoBean}
    * @param ctx a Context
    */
   public void endVisit(AutoBean<?> bean, Context ctx) {
   }
 
   /**
-   * TODO: document.
+   * Called after visiting a reference property.
    * 
-   * @param propertyName
-   * @param value
+   * @param propertyName the property name, as a String
+   * @param value the property value
    * @param ctx a PropertyContext
    */
   public void endVisitReferenceProperty(String propertyName, AutoBean<?> value,
@@ -69,10 +81,10 @@
   }
 
   /**
-   * TODO: document.
+   * Called after visiting a value property.
    * 
-   * @param propertyName
-   * @param value
+   * @param propertyName the property name, as a String
+   * @param value the property value
    * @param ctx a PropertyContext
    */
   public void endVisitValueProperty(String propertyName, Object value,
@@ -80,9 +92,9 @@
   }
 
   /**
-   * TODO: document.
+   * Called when visiting an {@link AutoBean}.
    * 
-   * @param bean
+   * @param bean an {@link AutoBean}
    * @param ctx a Context
    */
   public boolean visit(AutoBean<?> bean, Context ctx) {
@@ -93,8 +105,8 @@
    * Called every time, but {@link #visit(AutoBean, Context)} will be called for
    * the value only the first time it is encountered.
    * 
-   * @param propertyName
-   * @param value
+   * @param propertyName the property name, as a String
+   * @param value the property value
    * @param ctx a PropertyContext
    */
   public boolean visitReferenceProperty(String propertyName, AutoBean<?> value,
@@ -105,8 +117,8 @@
   /**
    * TODO: document.
    * 
-   * @param propertyName
-   * @param value
+   * @param propertyName the property name, as a String
+   * @param value the property value
    * @param ctx a PropertyContext
    */
   public boolean visitValueProperty(String propertyName, Object value,
diff --git a/user/src/com/google/gwt/editor/client/CompositeEditor.java b/user/src/com/google/gwt/editor/client/CompositeEditor.java
index 95d48a6..48d458d 100644
--- a/user/src/com/google/gwt/editor/client/CompositeEditor.java
+++ b/user/src/com/google/gwt/editor/client/CompositeEditor.java
@@ -84,13 +84,25 @@
   /**
    * Returns an canonical sub-editor instance that will be used by the driver
    * for computing all edited paths.
+   *
+   * @return an instance of the Editor type
    */
   E createEditorForTraversal();
 
   /**
-   * Used to implement {@link EditorDelegate#getPath()}.
+   * Used to implement {@link EditorDelegate#getPath()} for the component
+   * Editors.
+   * 
+   * @param subEditor an instance of the Editor type previously passed into
+   *          {@link EditorChain#attach}
+   * @return the path element as a String
    */
   String getPathElement(E subEditor);
 
+  /**
+   * Called by the Editor framework to provide the {@link EditorChain}.
+   *
+   * @param chain an {@link EditorChain} instance
+   */
   void setEditorChain(EditorChain<C, E> chain);
 }
diff --git a/user/src/com/google/gwt/editor/client/EditorDelegate.java b/user/src/com/google/gwt/editor/client/EditorDelegate.java
index b77dbde..87abeb3 100644
--- a/user/src/com/google/gwt/editor/client/EditorDelegate.java
+++ b/user/src/com/google/gwt/editor/client/EditorDelegate.java
@@ -29,6 +29,8 @@
 public interface EditorDelegate<T> {
   /**
    * Returns the Editor's path, relative to the root object.
+   *
+   * @return the path as a String
    */
   String getPath();
 
diff --git a/user/src/com/google/gwt/editor/client/EditorError.java b/user/src/com/google/gwt/editor/client/EditorError.java
index 1a9c0f3..6f62751 100644
--- a/user/src/com/google/gwt/editor/client/EditorError.java
+++ b/user/src/com/google/gwt/editor/client/EditorError.java
@@ -26,16 +26,22 @@
   /**
    * Returns the absolute path location of the error, relative to the object
    * that was passed into the EditorDriver.
+   * 
+   * @return the absolute path as a String
    */
   String getAbsolutePath();
 
   /**
    * Returns the Editor that holds the invalid value.
+   * 
+   * @return the Editor instance
    */
   Editor<?> getEditor();
 
   /**
    * Returns a message associated with the error.
+   * 
+   * @return the error message as a String
    */
   String getMessage();
 
@@ -43,28 +49,40 @@
    * Returns the path of the error relative to the Editor receiving the error.
    * If the error concerns the Editor that is receiving the error, this method
    * will return an empty string.
+   * 
+   * @return the error path as a String
    */
   String getPath();
 
   /**
    * Returns the object passed into {@link EditorDelegate#recordError}.
+   * 
+   * @return the user data Object
    */
   Object getUserData();
 
   /**
    * Returns the value that triggered the error.
+   * 
+   * @return the error value Object
    */
   Object getValue();
 
   /**
    * Indicates whether or not the EditorError will be propagated to the
    * enclosing Editor.
+   * 
+   * @return {@code true} if the error will not be propagated
+   * @see #setConsumed(boolean)
    */
   boolean isConsumed();
 
   /**
    * Indicates whether or not the EditorError will be propagated to the
    * enclosing Editor.
+   * 
+   * @param consumed {@code true} if the error will not be propagated
+   * @see #isConsumed()
    */
   void setConsumed(boolean consumed);
 }
diff --git a/user/src/com/google/gwt/editor/client/HasEditorDelegate.java b/user/src/com/google/gwt/editor/client/HasEditorDelegate.java
index 641bc81..9821cde 100644
--- a/user/src/com/google/gwt/editor/client/HasEditorDelegate.java
+++ b/user/src/com/google/gwt/editor/client/HasEditorDelegate.java
@@ -25,6 +25,8 @@
   /**
    * Called by the EditorDriver to provide access to the EditorDelegate the
    * Editor is peered with.
+   *
+   * @param delegate an {@link EditorDelegate} of type T
    */
   void setDelegate(EditorDelegate<T> delegate);
 
diff --git a/user/src/com/google/gwt/editor/client/IsEditor.java b/user/src/com/google/gwt/editor/client/IsEditor.java
index f787df2..fe5f282 100644
--- a/user/src/com/google/gwt/editor/client/IsEditor.java
+++ b/user/src/com/google/gwt/editor/client/IsEditor.java
@@ -50,6 +50,8 @@
 public interface IsEditor<E extends Editor<?>> {
   /**
    * Returns the Editor encapsulated by the view object.
+   * 
+   * @return an {@link Editor} of type E
    */
   E asEditor();
 }
diff --git a/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java b/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java
index 6d08afd..7ea8245 100644
--- a/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java
+++ b/user/src/com/google/gwt/editor/client/SimpleBeanEditorDriver.java
@@ -59,11 +59,15 @@
 
   /**
    * Returns any unconsumed EditorErrors from the last call to {@link #flush()}.
+   * 
+   * @return a List of {@link EditorError} instances
    */
   List<EditorError> getErrors();
 
   /**
    * Indicates if the last call to {@link #flush()} resulted in any errors.
+   * 
+   * @return {@code true} if errors are present
    */
   boolean hasErrors();
 
diff --git a/user/src/com/google/gwt/editor/client/ValueAwareEditor.java b/user/src/com/google/gwt/editor/client/ValueAwareEditor.java
index 84da806..4dc7019 100644
--- a/user/src/com/google/gwt/editor/client/ValueAwareEditor.java
+++ b/user/src/com/google/gwt/editor/client/ValueAwareEditor.java
@@ -32,6 +32,8 @@
   /**
    * Notifies the Editor that one or more value properties have changed. Not all
    * backing services support property-based notifications.
+   * 
+   * @param paths a list of String paths
    */
   void onPropertyChange(String... paths);
 
@@ -40,6 +42,8 @@
    * <p>
    * ValueAwareEditors should preferentially use sub-editors to alter the
    * properties of the object being edited.
+   * 
+   * @param value a value of type T
    */
   void setValue(T value);
 }
diff --git a/user/src/com/google/gwt/editor/client/adapters/EditorSource.java b/user/src/com/google/gwt/editor/client/adapters/EditorSource.java
index 27731fe..6a1d779 100644
--- a/user/src/com/google/gwt/editor/client/adapters/EditorSource.java
+++ b/user/src/com/google/gwt/editor/client/adapters/EditorSource.java
@@ -32,6 +32,7 @@
    * Create a new Editor.
    * 
    * @param index the position at which the new Editor should be displayed
+   * @return an {@link Editor} of type E
    */
   public abstract E create(int index);
 
@@ -41,6 +42,7 @@
    * 
    * @param count the number of Editors desired
    * @param index the position at which the new Editors should be displayed
+   * @return a List of {@link Editor}s of type E
    */
   public List<E> create(int count, int index) {
     List<E> toReturn = new ArrayList<E>(count);
@@ -54,7 +56,7 @@
    * Called when an Editor no longer requires a sub-Editor. The default
    * implementation is a no-op.
    *
-   * @param subEditor
+   * @param subEditor an {@link Editor} of type E
    */
   public void dispose(E subEditor) {
   }
@@ -62,8 +64,8 @@
   /**
    * Re-order a sub-Editor. The default implementation is a no-op.
    *
-   * @param editor
-   * @param index
+   * @param editor an {@link Editor} of type E
+   * @param index the index of the Editor
    */
   public void setIndex(E editor, int index) {
   }
diff --git a/user/src/com/google/gwt/editor/client/adapters/ListEditor.java b/user/src/com/google/gwt/editor/client/adapters/ListEditor.java
index 988aaa2..5a6373e 100644
--- a/user/src/com/google/gwt/editor/client/adapters/ListEditor.java
+++ b/user/src/com/google/gwt/editor/client/adapters/ListEditor.java
@@ -48,10 +48,20 @@
   private EditorSource<E> editorSource;
   private ListEditorWrapper<T, E> list;
 
+  /**
+   * Create a ListEditor backed by an EditorSource.
+   * 
+   * @param source the EditorSource which will create sub-Editors
+   */
   protected ListEditor(EditorSource<E> source) {
     this.editorSource = source;
   }
 
+  /**
+   * Creates a temporary sub-Editor to use for traversal.
+   * 
+   * @return an {@link Editor} of type E
+   */
   public E createEditorForTraversal() {
     E toReturn = editorSource.create(0);
     editorSource.dispose(toReturn);
@@ -65,6 +75,8 @@
   /**
    * Returns an unmodifiable, live view of the Editors managed by the
    * ListEditor.
+   * 
+   * @return a List of {@link Editor Editors} of type E
    */
   public List<E> getEditors() {
     if (list == null) {
@@ -85,6 +97,8 @@
    * listEditor.getList().set(1, new Foo());
    * listEditor.getEditors().get(1).getFooFieldEditor().setValue(....);
    * </pre>
+   * 
+   * @return a live view of the ListEditor's backing data
    */
   public List<T> getList() {
     return list;
@@ -104,6 +118,11 @@
     this.chain = chain;
   }
 
+  /**
+   * Sets the ListEditor's backing data.
+   * 
+   * @param value a List of data objects of type T
+   */
   public void setValue(List<T> value) {
     if (list != null) {
       // Having entire value reset, so dump the wrapper gracefully
diff --git a/user/src/com/google/gwt/editor/client/adapters/OptionalFieldEditor.java b/user/src/com/google/gwt/editor/client/adapters/OptionalFieldEditor.java
index 0373e16..6c7d7b2 100644
--- a/user/src/com/google/gwt/editor/client/adapters/OptionalFieldEditor.java
+++ b/user/src/com/google/gwt/editor/client/adapters/OptionalFieldEditor.java
@@ -59,10 +59,22 @@
   private T currentValue;
   private final E subEditor;
 
+  /**
+   * Construct an OptionalFieldEditor backed by the given sub-Editor.
+   *
+   * @param subEditor the sub-Editor that will be attached to the Editor
+   *          hierarchy
+   */
   protected OptionalFieldEditor(E subEditor) {
     this.subEditor = subEditor;
   }
 
+  /**
+   * Returns the sub-Editor that the OptionalFieldEditor was constructed
+   * with.
+   *
+   * @return an {@link Editor} of type E
+   */
   public E createEditorForTraversal() {
     return subEditor;
   }
diff --git a/user/src/com/google/gwt/editor/client/adapters/SimpleEditor.java b/user/src/com/google/gwt/editor/client/adapters/SimpleEditor.java
index d48ee9a..d1e8833 100644
--- a/user/src/com/google/gwt/editor/client/adapters/SimpleEditor.java
+++ b/user/src/com/google/gwt/editor/client/adapters/SimpleEditor.java
@@ -25,7 +25,9 @@
  */
 public class SimpleEditor<T> implements LeafValueEditor<T> {
   /**
-   * Returns a new ValueEditor that holds a <code>null</code> value.
+   * Returns a new ValueEditor that holds a {@code null} value.
+   *
+   * @return a SimpleEditor instance holding a {@code null} value
    */
   public static <T> SimpleEditor<T> of() {
     return new SimpleEditor<T>(null);
@@ -33,6 +35,9 @@
 
   /**
    * Returns a new ValueEditor that holds the given value.
+   *
+   * @param value a data object of type T
+   * @return a SimpleEditor instance holding the given value
    */
   public static <T> SimpleEditor<T> of(T value) {
     return new SimpleEditor<T>(value);
@@ -40,6 +45,11 @@
 
   private T value;
 
+  /**
+   * Constructs a new SimpleEditor that holds the given value.
+   *
+   * @param value a data object of type T
+   */
   protected SimpleEditor(T value) {
     this.value = value;
   }
diff --git a/user/src/com/google/gwt/editor/client/adapters/TakesValueEditor.java b/user/src/com/google/gwt/editor/client/adapters/TakesValueEditor.java
index 2472e85..6e45531 100644
--- a/user/src/com/google/gwt/editor/client/adapters/TakesValueEditor.java
+++ b/user/src/com/google/gwt/editor/client/adapters/TakesValueEditor.java
@@ -24,13 +24,25 @@
  * @param <T> the type of value to be edited
  */
 public class TakesValueEditor<T> implements LeafValueEditor<T> {
-
+  /**
+   * Returns a new ValueEditor that modifies the given {@link TakesValue} peer
+   * instance.
+   * 
+   * @param peer a {@link TakesValue} instance
+   * @return a TakesValueEditor instance of the same type as its peer
+   */
   public static <T> TakesValueEditor<T> of(TakesValue<T> peer) {
     return new TakesValueEditor<T>(peer);
   }
 
   private final TakesValue<T> peer;
 
+  /**
+   * Returns a new ValueEditor that modifies the given {@link TakesValue} peer
+   * instance.
+   * 
+   * @param peer a {@link TakesValue} instance
+   */
   protected TakesValueEditor(TakesValue<T> peer) {
     this.peer = peer;
   }
diff --git a/user/src/com/google/gwt/editor/client/adapters/package.html b/user/src/com/google/gwt/editor/client/adapters/package.html
new file mode 100644
index 0000000..01c6238
--- /dev/null
+++ b/user/src/com/google/gwt/editor/client/adapters/package.html
@@ -0,0 +1,7 @@
+<html>
+<body>
+<p>Adapters for the bean editor framework.</p>
+
+@since GWT 2.1
+</body>
+</html>
diff --git a/user/src/com/google/gwt/editor/client/package.html b/user/src/com/google/gwt/editor/client/package.html
new file mode 100644
index 0000000..8966953
--- /dev/null
+++ b/user/src/com/google/gwt/editor/client/package.html
@@ -0,0 +1,7 @@
+<html>
+<body>
+<p>A framework for editing bean-like objects.</p>
+
+@since GWT 2.1
+</body>
+</html>
diff --git a/user/src/com/google/gwt/editor/ui/client/ValueBoxEditorDecorator.java b/user/src/com/google/gwt/editor/ui/client/ValueBoxEditorDecorator.java
index eb8551e..226d912 100644
--- a/user/src/com/google/gwt/editor/ui/client/ValueBoxEditorDecorator.java
+++ b/user/src/com/google/gwt/editor/ui/client/ValueBoxEditorDecorator.java
@@ -44,7 +44,7 @@
  * For example:
  * <pre>
  * &#64;UiField
- * ValueBoxEditorDecorator<String> name;
+ * ValueBoxEditorDecorator&lt;String&gt; name;
  * </pre>
  * <pre>
  * &lt;e:ValueBoxEditorDecorator ui:field='name'>
@@ -70,11 +70,21 @@
 
   private ValueBoxEditor<T> editor;
 
+  /**
+   * Constructs a ValueBoxEditorDecorator.
+   */
   @UiConstructor
   public ValueBoxEditorDecorator() {
     initWidget(Binder.BINDER.createAndBindUi(this));
   }
 
+  /**
+   * Constructs a ValueBoxEditorDecorator using a {@link ValueBoxBase}
+   * widget and a {@link ValueBoxEditor} editor.
+   * 
+   * @param widget the widget
+   * @param editor the editor
+   */
   public ValueBoxEditorDecorator(ValueBoxBase<T> widget,
       ValueBoxEditor<T> editor) {
     this();
@@ -82,10 +92,22 @@
     this.editor = editor;
   }
 
+  /**
+   * Returns the associated {@link ValueBoxEditor}.
+   * 
+   * @return a {@link ValueBoxEditor} instance
+   * @see #setEditor(ValueBoxEditor)
+   */
   public ValueBoxEditor<T> asEditor() {
     return editor;
   }
 
+  /**
+   * Sets the associated {@link ValueBoxEditor}.
+   * 
+   * @param editor a {@link ValueBoxEditor} instance
+   * @see #asEditor()
+   */
   public void setEditor(ValueBoxEditor<T> editor) {
     this.editor = editor;
   }
@@ -93,6 +115,8 @@
   /**
    * Set the widget that the EditorPanel will display. This method will
    * automatically call {@link #setEditor}.
+   * 
+   * @param widget a {@link ValueBoxBase} widget
    */
   @UiChild(limit = 1, tagname = "valuebox")
   public void setValueBox(ValueBoxBase<T> widget) {
@@ -104,6 +128,8 @@
    * The default implementation will display, but not consume, received errors
    * whose {@link EditorError#getEditor() getEditor()} method returns the Editor
    * passed into {@link #setEditor}.
+   * 
+   * @param errors a List of {@link EditorError} instances
    */
   public void showErrors(List<EditorError> errors) {
     StringBuilder sb = new StringBuilder();
diff --git a/user/src/com/google/gwt/editor/ui/client/adapters/HasTextEditor.java b/user/src/com/google/gwt/editor/ui/client/adapters/HasTextEditor.java
index 00f3fe4..a34d724 100644
--- a/user/src/com/google/gwt/editor/ui/client/adapters/HasTextEditor.java
+++ b/user/src/com/google/gwt/editor/ui/client/adapters/HasTextEditor.java
@@ -22,12 +22,25 @@
  * Adapts the HasText interface to the Editor framework.
  */
 public class HasTextEditor implements LeafValueEditor<String> {
+  /**
+   * Returns a new ValueEditor that that modifies the given {@link HasText} peer
+   * instance.
+   * 
+   * @param peer a {@link HasText} instance
+   * @return a HasTextEditor instance
+   */
   public static HasTextEditor of(HasText peer) {
     return new HasTextEditor(peer);
   }
 
   private HasText peer;
 
+  /**
+   * Constructs a new HasTextEditor that that modifies the given {@link HasText}
+   * peer instance.
+   * 
+   * @param peer a {@link HasText} instance
+   */
   protected HasTextEditor(HasText peer) {
     this.peer = peer;
   }
diff --git a/user/src/com/google/gwt/editor/ui/client/adapters/ValueBoxEditor.java b/user/src/com/google/gwt/editor/ui/client/adapters/ValueBoxEditor.java
index 9dc6956..ad18aea 100644
--- a/user/src/com/google/gwt/editor/ui/client/adapters/ValueBoxEditor.java
+++ b/user/src/com/google/gwt/editor/ui/client/adapters/ValueBoxEditor.java
@@ -32,6 +32,14 @@
 public class ValueBoxEditor<T> extends TakesValueEditor<T> implements
     HasEditorDelegate<T> {
 
+  /**
+   * Returns a new TakesValueEditor that adapts a {@link ValueBoxBase}
+   * instance.
+   *
+   * @param valueBox a {@link ValueBoxBase} instance to adapt
+   * @return a ValueBoxEditor instance of the same type as the
+   *   adapted {@link ValueBoxBase} instance
+   */
   public static <T> ValueBoxEditor<T> of(ValueBoxBase<T> valueBox) {
     return new ValueBoxEditor<T>(valueBox);
   }
@@ -40,11 +48,23 @@
   private final ValueBoxBase<T> peer;
   private T value;
 
+  /**
+   * Constructs a new ValueBoxEditor that adapts a {@link ValueBoxBase} peer
+   * instance.
+   *
+   * @param peer a {@link ValueBoxBase} instance of type T
+   */
   protected ValueBoxEditor(ValueBoxBase<T> peer) {
     super(peer);
     this.peer = peer;
   }
 
+  /**
+   * Returns the {@link EditorDelegate} for this instance.
+   *
+   * @return an {@link EditorDelegate}, or {@code null}
+   * @see #setDelegate(EditorDelegate)
+   */
   public EditorDelegate<T> getDelegate() {
     return delegate;
   }
@@ -54,6 +74,9 @@
    * is thrown, it will be available through
    * {@link com.google.gwt.editor.client.EditorError#getUserData()
    * EditorError.getUserData()}.
+   *
+   * @return a value of type T
+   * @see #setValue(Object)
    */
   @Override
   public T getValue() {
@@ -67,6 +90,13 @@
     return value;
   }
 
+  /**
+   * Sets the {@link EditorDelegate} for this instance. This method is only
+   * called by the driver.
+   * 
+   * @param delegate an {@link EditorDelegate}, or {@code null}
+   * @see #getDelegate()
+   */
   public void setDelegate(EditorDelegate<T> delegate) {
     this.delegate = delegate;
   }
diff --git a/user/src/com/google/gwt/editor/ui/client/adapters/package.html b/user/src/com/google/gwt/editor/ui/client/adapters/package.html
new file mode 100644
index 0000000..24bafb4
--- /dev/null
+++ b/user/src/com/google/gwt/editor/ui/client/adapters/package.html
@@ -0,0 +1,7 @@
+<html>
+<body>
+<p>User interface adapters for the bean editor framework.</p>
+
+@since GWT 2.1
+</body>
+</html>
diff --git a/user/src/com/google/gwt/editor/ui/client/package.html b/user/src/com/google/gwt/editor/ui/client/package.html
new file mode 100644
index 0000000..4c7efad
--- /dev/null
+++ b/user/src/com/google/gwt/editor/ui/client/package.html
@@ -0,0 +1,7 @@
+<html>
+<body>
+<p>User interface components for the bean editor framework.</p>
+
+@since GWT 2.1
+</body>
+</html>
diff --git a/user/src/com/google/gwt/requestfactory/client/DefaultRequestTransport.java b/user/src/com/google/gwt/requestfactory/client/DefaultRequestTransport.java
index 93fac74..0fd2571 100644
--- a/user/src/com/google/gwt/requestfactory/client/DefaultRequestTransport.java
+++ b/user/src/com/google/gwt/requestfactory/client/DefaultRequestTransport.java
@@ -25,9 +25,9 @@
 import com.google.gwt.http.client.RequestException;
 import com.google.gwt.http.client.Response;
 import com.google.gwt.requestfactory.shared.RequestEvent;
+import com.google.gwt.requestfactory.shared.RequestEvent.State;
 import com.google.gwt.requestfactory.shared.RequestFactory;
 import com.google.gwt.requestfactory.shared.RequestTransport;
-import com.google.gwt.requestfactory.shared.RequestEvent.State;
 import com.google.gwt.user.client.Window.Location;
 
 import java.util.logging.Level;
@@ -36,6 +36,18 @@
 /**
  * An implementation of {@link RequestTransport} that uses a
  * {@link RequestBuilder}.
+ * <p>
+ * This implementation will send {@link RequestEvent} objects to the
+ * {@link EventBus} passed into the constructor to provide indication of
+ * transport-level activity. When an HTTP request is sent, an event with a
+ * {@link State#SENT} state and a {@code null} {@link Request} will be posted.
+ * When an HTTP transport completes successfully, an event will be posted with
+ * state {@link State#RECEIVED} and the {@link Request} object provided to the
+ * internal {@link RequestCallback#onResponseReceived()}. If an HTTP transport
+ * fails (e.g. due to network malfunction), an event with state
+ * {@link State#RECEIVED} and a {@code null} {@link Request} will be sent. The
+ * success or failure of the HTTP transport is wholly independent from whether
+ * or not the application payload was successfully executed by the server.
  */
 public class DefaultRequestTransport implements RequestTransport {
 
diff --git a/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java b/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
index 1b44616..dc88565 100644
--- a/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
+++ b/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
@@ -19,6 +19,33 @@
 
 /**
  * Marker interface for the RequestFactory code generator.
+ * <p>
+ * A RequestFactory implementation will post {@link EntityProxyChange} events to
+ * the {@link EventBus} passed into the {@link #initialize} method. The events
+ * will have the following {@link WriteOperation} associated with them in the
+ * following circumstances:
+ * <ul>
+ * <li>{@link WriteOperation#PERSIST} when an {@link EntityProxy}
+ * {@link RequestContext#create(Class) created} on the client is successfully
+ * persisted in the server's backing store.</li>
+ * <li>{@link WriteOperation#UPDATE} when changes due to an {@link EntityProxy}
+ * being {@link RequestContext#edit(EntityProxy) edited} on the client are
+ * successfully persisted in the server's backing store.</li>
+ * <li>{@link WriteOperation#UPDATE} when a previously-unseen
+ * {@link EntityProxy} is reachable from the return value for a
+ * successfully-executed {@link Request}.</li>
+ * <li>{@link WriteOperation#UPDATE} when any property of an {@link EntityProxy}
+ * reachable from a {@link Request Request's} arguments is seen to have changed
+ * after executing the service method on the server.</li>
+ * <li>{@link WriteOperation#DELETE} when an {@link EntityProxy} reachable from
+ * a {@link Request Request's} arguments becomes irretrievable after executing
+ * the service method on the server.</li>
+ * </ul>
+ * <p>
+ * Other types of events may be posted to the {@link EventBus} by other services
+ * used by the RequestFactory.
+ * 
+ * @see {@link com.google.gwt.requestfactory.client.DefaultRequestTransport}
  */
 public interface RequestFactory {
   String JSON_CONTENT_TYPE_UTF8 = "application/json; charset=utf-8";
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 7ab531e..8dcd61d 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
@@ -968,7 +968,7 @@
 
   /**
    * Set the open state of a tree node.
-   *
+   * 
    * @param cellList the CellList that changed state.
    * @param value the value to open
    * @param open true to open, false to close
@@ -1029,12 +1029,9 @@
       }
 
       // Close the node.
-      TreeNode closedNode = cellList.isFocusedOpen
+      TreeNode closedNode = (cellList.isFocusedOpen && (treeNodes.size() > cellList.level + 1))
           ? treeNodes.get(cellList.level + 1) : null;
       trimToLevel(cellList.level);
-      cellList.focusedKey = null;
-      cellList.focusedValue = null;
-      cellList.isFocusedOpen = false;
 
       // Refresh the display to update the styles for this node.
       if (redraw) {
@@ -1065,5 +1062,13 @@
       removed.destroy();
       curLevel--;
     }
+
+    // Nullify the focused key at the level.
+    if (level < treeNodes.size()) {
+      TreeNodeImpl<?> node = treeNodes.get(level);
+      node.display.focusedKey = null;
+      node.display.focusedValue = null;
+      node.display.isFocusedOpen = false;
+    }
   }
 }
diff --git a/user/src/com/google/gwt/user/client/TakesValue.java b/user/src/com/google/gwt/user/client/TakesValue.java
index 11fd99e..1e15f8e 100644
--- a/user/src/com/google/gwt/user/client/TakesValue.java
+++ b/user/src/com/google/gwt/user/client/TakesValue.java
@@ -23,11 +23,17 @@
 public interface TakesValue<V> {
   /**
    * Sets the value.
+   *
+   * @param value a value object of type V
+   * @see #getValue()
    */
   void setValue(V value);
 
   /**
    * Returns the current value.
+   * 
+   * @return the value as an object of type V
+   * @see #setValue
    */
   V getValue();
 }
diff --git a/user/src/com/google/gwt/user/client/ui/Tree.java b/user/src/com/google/gwt/user/client/ui/Tree.java
index d5cc644..b468940 100644
--- a/user/src/com/google/gwt/user/client/ui/Tree.java
+++ b/user/src/com/google/gwt/user/client/ui/Tree.java
@@ -55,6 +55,7 @@
 import com.google.gwt.i18n.client.LocaleInfo;
 import com.google.gwt.resources.client.ClientBundle;
 import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.safehtml.shared.SafeHtml;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.Event;
@@ -331,6 +332,16 @@
   }
 
   /**
+   * Adds a simple tree item containing the specified html.
+   * 
+   * @param itemHtml the html of the item to be added
+   * @return the item that was added
+   */
+  public TreeItem addItem(SafeHtml itemHtml) {
+    return root.addItem(itemHtml);
+  }
+
+  /**
    * Adds an item to the root level of this tree.
    * 
    * @param item the item to be added
@@ -494,6 +505,19 @@
   }
 
   /**
+   * Inserts a child tree item at the specified index containing the specified
+   * html.
+   * 
+   * @param beforeIndex the index where the item will be inserted
+   * @param itemHtml the html of the item to be added
+   * @return the item that was added
+   * @throws IndexOutOfBoundsException if the index is out of range
+   */
+  public TreeItem insertItem(int beforeIndex, SafeHtml itemHtml) {
+    return root.insertItem(beforeIndex, itemHtml);
+  }
+
+  /**
    * Inserts an item into the root level of this tree.
    * 
    * @param beforeIndex the index where the item will be inserted
diff --git a/user/src/com/google/gwt/user/client/ui/TreeItem.java b/user/src/com/google/gwt/user/client/ui/TreeItem.java
index 6aed8a5..1244015 100644
--- a/user/src/com/google/gwt/user/client/ui/TreeItem.java
+++ b/user/src/com/google/gwt/user/client/ui/TreeItem.java
@@ -338,6 +338,18 @@
   }
 
   /**
+   * Adds a child tree item containing the specified html.
+   * 
+   * @param itemHtml the item's HTML
+   * @return the item that was added
+   */
+  public TreeItem addItem(SafeHtml itemHtml) {
+    TreeItem ret = new TreeItem(itemHtml);
+    addItem(ret);
+    return ret;
+  }
+
+  /**
    * Adds another item as a child to this one.
    * 
    * @param item the item to be added
@@ -473,6 +485,22 @@
   }
 
   /**
+   * Inserts a child tree item at the specified index containing the specified
+   * text.
+   * 
+   * @param beforeIndex the index where the item will be inserted
+   * @param itemHtml the item's HTML
+   * @return the item that was added
+   * @throws IndexOutOfBoundsException if the index is out of range
+   */
+  public TreeItem insertItem(int beforeIndex, SafeHtml itemHtml)
+      throws IndexOutOfBoundsException {
+    TreeItem ret = new TreeItem(itemHtml);
+    insertItem(beforeIndex, ret);
+    return ret;
+  }
+
+  /**
    * Inserts an item as a child to this one.
    * 
    * @param beforeIndex the index where the item will be inserted
diff --git a/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java b/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
index 1f57b59..18bc2cc 100644
--- a/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
+++ b/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
@@ -387,6 +387,9 @@
 
     // Verify the node is destroyed.
     assertTrue(b.isDestroyed());
+
+    // True to open a new node.
+    assertNotNull(root.setChildOpen(0, true));
   }
 
   /**
diff --git a/user/test/com/google/gwt/user/client/ui/TreeItemTest.java b/user/test/com/google/gwt/user/client/ui/TreeItemTest.java
index df4ebf3..da6a325 100644
--- a/user/test/com/google/gwt/user/client/ui/TreeItemTest.java
+++ b/user/test/com/google/gwt/user/client/ui/TreeItemTest.java
@@ -47,6 +47,12 @@
     assertEquals(a, item.getChild(1));
   }
 
+  public void testAddItemSafeHtml() {
+    TreeItem item = new TreeItem("foo");
+    TreeItem child = item.addItem(SafeHtmlUtils.fromSafeConstant(html));
+    assertEquals(html, child.getHTML().toLowerCase());
+  }
+
   public void testInsert() {
     TreeItem item = new TreeItem();
     TreeItem b = item.addItem("b");
@@ -124,6 +130,12 @@
     }
   }
 
+  public void testInsertItemSafeHtml() {
+    TreeItem item = new TreeItem("foo");
+    TreeItem child = item.insertItem(0, SafeHtmlUtils.fromSafeConstant(html));
+    assertEquals(html, child.getHTML().toLowerCase());
+  }
+
   public void testSafeHtmlConstructor() {
     TreeItem item = new TreeItem(SafeHtmlUtils.fromSafeConstant(html));
     
diff --git a/user/test/com/google/gwt/user/client/ui/TreeTest.java b/user/test/com/google/gwt/user/client/ui/TreeTest.java
index 0e04aa0..e283fb8 100644
--- a/user/test/com/google/gwt/user/client/ui/TreeTest.java
+++ b/user/test/com/google/gwt/user/client/ui/TreeTest.java
@@ -16,6 +16,7 @@
 package com.google.gwt.user.client.ui;
 
 import com.google.gwt.junit.client.GWTTestCase;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 
@@ -26,6 +27,8 @@
  */
 public class TreeTest extends GWTTestCase {
 
+  private static final String html = "<b>hello</b><i>world</i>";
+
   static class Adder implements HasWidgetsTester.WidgetAdder {
     public void addChild(HasWidgets container, Widget child) {
       ((Tree) container).addItem(child);
@@ -37,6 +40,12 @@
     return "com.google.gwt.user.DebugTest";
   }
 
+  public void testAddItemSafeHtml() {
+    Tree t = new Tree();
+    TreeItem item = t.addItem(SafeHtmlUtils.fromSafeConstant(html));
+    assertEquals(html, item.getHTML().toLowerCase());
+  }
+
   public void testAttachDetachOrder() {
     HasWidgetsTester.testAll(new Tree(), new Adder(), true);
   }
@@ -111,6 +120,12 @@
     assertEquals(wti, t.getItem(1));
   }
 
+  public void testInsertItemSafeHtml() {
+    Tree t = new Tree();
+    TreeItem item = t.insertItem(0, SafeHtmlUtils.fromSafeConstant(html));
+    assertEquals(html, item.getHTML().toLowerCase());
+  }
+
   public void testIterator() {
     Tree tree = new Tree();
     Iterator<TreeItem> iter = tree.treeItemIterator();