diff --git a/dev/core/src/com/google/gwt/core/linker/SingleScriptLinker.java b/dev/core/src/com/google/gwt/core/linker/SingleScriptLinker.java
index a776a6c..9b2769b 100644
--- a/dev/core/src/com/google/gwt/core/linker/SingleScriptLinker.java
+++ b/dev/core/src/com/google/gwt/core/linker/SingleScriptLinker.java
@@ -129,7 +129,7 @@
 
   /**
    * Unimplemented. Normally required by
-   * {@link #doEmitCompilation(TreeLogger, LinkerContext, CompilationResult).
+   * {@link #doEmitCompilation(TreeLogger, LinkerContext, CompilationResult)}.
    */
   @Override
   protected String getCompilationExtension(TreeLogger logger,
@@ -139,7 +139,7 @@
 
   /**
    * Unimplemented. Normally required by
-   * {@link #doEmitCompilation(TreeLogger, LinkerContext, CompilationResult).
+   * {@link #doEmitCompilation(TreeLogger, LinkerContext, CompilationResult)}.
    */
   @Override
   protected String getModulePrefix(TreeLogger logger, LinkerContext context,
@@ -149,7 +149,7 @@
 
   /**
    * Unimplemented. Normally required by
-   * {@link #doEmitCompilation(TreeLogger, LinkerContext, CompilationResult).
+   * {@link #doEmitCompilation(TreeLogger, LinkerContext, CompilationResult)}.
    */
   @Override
   protected String getModuleSuffix(TreeLogger logger, LinkerContext context)
diff --git a/doc/build.xml b/doc/build.xml
index f4f40dc..0413853 100644
--- a/doc/build.xml
+++ b/doc/build.xml
@@ -10,7 +10,7 @@
   <property.ensure name="gwt.dev.jar" location="${gwt.build.lib}/gwt-dev.jar" />
 
   <property name="USER_PKGS"
-          value="com.google.gwt.animation.client;com.google.gwt.benchmarks.client;com.google.gwt.core.client;com.google.gwt.core.ext;com.google.gwt.core.ext.soyc;com.google.gwt.core.ext.linker;com.google.gwt.core.ext.typeinfo;com.google.gwt.debug.client;com.google.gwt.dom.client;com.google.gwt.event.dom.client;com.google.gwt.event.logical.shared;com.google.gwt.event.shared;com.google.gwt.http.client;com.google.gwt.i18n.client;com.google.gwt.i18n.client.constants;com.google.gwt.i18n.rebind.format;com.google.gwt.i18n.rebind.keygen;com.google.gwt.json.client;com.google.gwt.junit.client;com.google.gwt.benchmarks.client;com.google.gwt.resources.client;com.google.gwt.resources.ext;com.google.gwt.user.client;com.google.gwt.user.client.rpc;com.google.gwt.user.client.ui;com.google.gwt.user.datepicker.client;com.google.gwt.user.server.rpc;com.google.gwt.xml.client"/>
+          value="com.google.gwt.animation.client;com.google.gwt.benchmarks.client;com.google.gwt.core.client;com.google.gwt.core.ext;com.google.gwt.core.ext.soyc;com.google.gwt.core.ext.linker;com.google.gwt.core.ext.typeinfo;com.google.gwt.core.linker;com.google.gwt.debug.client;com.google.gwt.dom.client;com.google.gwt.event.dom.client;com.google.gwt.event.logical.shared;com.google.gwt.event.shared;com.google.gwt.http.client;com.google.gwt.i18n.client;com.google.gwt.i18n.client.constants;com.google.gwt.i18n.rebind.format;com.google.gwt.i18n.rebind.keygen;com.google.gwt.json.client;com.google.gwt.junit.client;com.google.gwt.benchmarks.client;com.google.gwt.resources.client;com.google.gwt.resources.ext;com.google.gwt.user.client;com.google.gwt.user.client.rpc;com.google.gwt.user.client.ui;com.google.gwt.user.datepicker.client;com.google.gwt.user.server.rpc;com.google.gwt.xml.client"/>
   <property name="LANG_PKGS" value="java.lang;java.lang.annotation;java.util;java.io;java.sql" />
 
   <!--	Individual classes to include when we don't want to 
diff --git a/user/src/com/google/gwt/resources/ext/ResourceContext.java b/user/src/com/google/gwt/resources/ext/ResourceContext.java
index 31cf03f..f327eee 100644
--- a/user/src/com/google/gwt/resources/ext/ResourceContext.java
+++ b/user/src/com/google/gwt/resources/ext/ResourceContext.java
@@ -92,9 +92,9 @@
   /**
    * Return the GeneratorContext in which the overall resource generation
    * framework is being run. Implementations of ResourceGenerator should prefer
-   * {@link #addToOutput} over {@link GeneratorContext#tryCreateResource} in
-   * order to take advantage of serving optimizations that can be performed by
-   * the bundle architecture.
+   * {@link #deploy} over {@link GeneratorContext#tryCreateResource} in order to
+   * take advantage of serving optimizations that can be performed by the bundle
+   * architecture.
    */
   GeneratorContext getGeneratorContext();
 
diff --git a/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java b/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java
index 9cfe3b1..51c8855 100644
--- a/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java
+++ b/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java
@@ -340,7 +340,7 @@
    * @param isOpen the initial open/close state of the content panel
    * 
    * @deprecated use
-   *             {@link #DisclosurePanel(ImageResource, ImageResource, String)
+   *             {@link #DisclosurePanel(ImageResource, ImageResource, String)}
    *             and {@link #setOpen(boolean)}
    */
   @Deprecated
@@ -356,9 +356,9 @@
    * open/close state and a bundle of images to be used in the default header
    * widget.
    * 
-   * @param images a bundle that provides disclosure panel specific images
+   * @param openImage the open state image resource
+   * @param closedImage the closed state image resource
    * @param headerText the text to be displayed in the header
-   * @param isOpen the initial open/close state of the content panel
    */
   public DisclosurePanel(ImageResource openImage, ImageResource closedImage,
       String headerText) {
diff --git a/user/src/com/google/gwt/user/client/ui/LayoutPanel.java b/user/src/com/google/gwt/user/client/ui/LayoutPanel.java
index 66044be..637c904 100644
--- a/user/src/com/google/gwt/user/client/ui/LayoutPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/LayoutPanel.java
@@ -20,8 +20,9 @@
 import com.google.gwt.layout.client.Layout.Layer;
 
 /**
- * A panel that lays its children out in arbitrary {@link Layout.Layer layers}
- * using the {@link Layout} class.
+ * A panel that lays its children out in arbitrary
+ * {@link com.google.gwt.layout.client.Layout.Layer layers} using the
+ * {@link Layout} class.
  * 
  * <p>
  * Whenever children are added to, or removed from, this panel, you must call
@@ -66,8 +67,9 @@
    * 
    * <p>
    * By default, each child will fill the panel. To build more interesting
-   * layouts, use {@link #getLayer(Widget)} to get the {@link Layout.Layer}
-   * associated with each child, and set its layout constraints as desired.
+   * layouts, use {@link #getLayer(Widget)} to get the
+   * {@link com.google.gwt.layout.client.Layout.Layer} associated with each
+   * child, and set its layout constraints as desired.
    * </p>
    * 
    * @param widget the widget to be added
@@ -90,7 +92,8 @@
    * @return the associated layer
    */
   public Layout.Layer getLayer(Widget child) {
-    assert child.getParent() == this : "The requested widget is not a child of this panel";
+    assert child.getParent() == this :
+      "The requested widget is not a child of this panel";
     return (Layout.Layer) child.getLayoutData();
   }
 
@@ -99,8 +102,9 @@
    * 
    * <p>
    * By default, each child will fill the panel. To build more interesting
-   * layouts, use {@link #getLayer(Widget)} to get the {@link Layout.Layer}
-   * associated with each child, and set its layout constraints as desired.
+   * layouts, use {@link #getLayer(Widget)} to get the
+   * {@link com.google.gwt.layout.client.Layout.Layer} associated with each
+   * child, and set its layout constraints as desired.
    * </p>
    * 
    * <p>
diff --git a/user/src/com/google/gwt/user/client/ui/PopupPanel.java b/user/src/com/google/gwt/user/client/ui/PopupPanel.java
index 623f193..64eff3a 100644
--- a/user/src/com/google/gwt/user/client/ui/PopupPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/PopupPanel.java
@@ -534,8 +534,7 @@
   }
 
   /**
-   * @deprecated Use {@link #onPreviewNativeEvent(NativePreviewEvent)}
-   *             instead
+   * @deprecated Use {@link #onPreviewNativeEvent} instead
    */
   @Deprecated
   public boolean onEventPreview(Event event) {
@@ -550,8 +549,7 @@
    * @param modifiers keyboard modifiers, as specified in
    *          {@link com.google.gwt.event.dom.client.KeyCodes}.
    * @return <code>false</code> to suppress the event
-   * @deprecated Use {@link #onPreviewNativeEvent(NativePreviewEvent)}
-   *             instead
+   * @deprecated Use {@link #onPreviewNativeEvent} instead
    */
   @Deprecated
   public boolean onKeyDownPreview(char key, int modifiers) {
@@ -566,8 +564,7 @@
    * @param modifiers keyboard modifiers, as specified in
    *          {@link com.google.gwt.event.dom.client.KeyCodes}.
    * @return <code>false</code> to suppress the event
-   * @deprecated Use {@link #onPreviewNativeEvent(NativePreviewEvent)}
-   *             instead
+   * @deprecated Use {@link #onPreviewNativeEvent} instead
    */
   @Deprecated
   public boolean onKeyPressPreview(char key, int modifiers) {
@@ -582,8 +579,7 @@
    * @param modifiers keyboard modifiers, as specified in
    *          {@link com.google.gwt.event.dom.client.KeyCodes}.
    * @return <code>false</code> to suppress the event
-   * @deprecated Use {@link #onPreviewNativeEvent(NativePreviewEvent)}
-   *             instead
+   * @deprecated Use {@link #onPreviewNativeEvent} instead
    */
   @Deprecated
   public boolean onKeyUpPreview(char key, int modifiers) {
diff --git a/user/src/com/google/gwt/user/client/ui/RootLayoutPanel.java b/user/src/com/google/gwt/user/client/ui/RootLayoutPanel.java
index 9351ec1..ff6026d 100644
--- a/user/src/com/google/gwt/user/client/ui/RootLayoutPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/RootLayoutPanel.java
@@ -24,8 +24,8 @@
  * to the document body (i.e. {@link RootPanel#get()}).
  * 
  * <p>
- * This panel automatically calls {@link RequiresResize#layout()} on itself when
- * initially created, and whenever the window is resized.
+ * This panel automatically calls {@link RequiresResize#onResize()} on itself
+ * when initially created, and whenever the window is resized.
  * </p>
  * 
  * <p>
diff --git a/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java b/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java
index 2ed68d5..0af2857 100644
--- a/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java
@@ -244,7 +244,7 @@
    * <p>
    * Its assocated splitter cannot be dragged to a position that would make it
    * smaller than this size. This method has no effect for the
-   * {@link Direction#CENTER} widget.
+   * {@link DockLayoutPanel.Direction#CENTER} widget.
    * </p>
    * 
    * @param child the child whose minimum size will be set
diff --git a/user/src/com/google/gwt/user/server/rpc/AbstractRemoteServiceServlet.java b/user/src/com/google/gwt/user/server/rpc/AbstractRemoteServiceServlet.java
index cf2f3d3..dae3e05 100644
--- a/user/src/com/google/gwt/user/server/rpc/AbstractRemoteServiceServlet.java
+++ b/user/src/com/google/gwt/user/server/rpc/AbstractRemoteServiceServlet.java
@@ -75,8 +75,8 @@
 
   /**
    * Override this method to control what should happen when an exception
-   * escapes the {@link #processCall(String)} method. The default implementation
-   * will log the failure and send a generic failure response to the client.
+   * escapes the {@link #doPost} method. The default implementation will log the
+   * failure and send a generic failure response to the client.
    * <p>
    * An "expected failure" is an exception thrown by a service method that is
    * declared in the signature of the service method. These exceptions are
@@ -102,8 +102,9 @@
   /**
    * Returns the strong name of the permutation, as reported by the client that
    * issued the request, or <code>null</code> if it could not be determined.
-   * This information is encoded in the {@value #STRONG_NAME_HEADER} HTTP
-   * header.
+   * This information is encoded in the
+   * {@value com.google.gwt.user.client.rpc.RpcRequestBuilder#STRONG_NAME_HEADER}
+   * HTTP header.
    */
   protected final String getPermutationStrongName() {
     return getThreadLocalRequest().getHeader(STRONG_NAME_HEADER);
