svn merge -r4992:5022 https://google-web-toolkit.googlecode.com/svn/releases/1.6 .
svn merge -r5023:5064 https://google-web-toolkit.googlecode.com/svn/releases/1.6 .


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5065 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/HostedMode.java b/dev/core/src/com/google/gwt/dev/HostedMode.java
index cea85a4..d5064ab 100644
--- a/dev/core/src/com/google/gwt/dev/HostedMode.java
+++ b/dev/core/src/com/google/gwt/dev/HostedMode.java
@@ -69,7 +69,7 @@
 
     @Override
     public String getPurpose() {
-      return "Specify a different embedded web server to run (must implement ServletContainerLauncher)";
+      return "Specifies a different embedded web server to run (must implement ServletContainerLauncher)";
     }
 
     @Override
@@ -375,9 +375,7 @@
   @Override
   protected int doStartUpServer() {
     try {
-      TreeLogger serverLogger = getTopLogger().branch(TreeLogger.INFO,
-          "Starting HTTP on port " + getPort(), null);
-      server = options.getServletContainerLauncher().start(serverLogger,
+      server = options.getServletContainerLauncher().start(getTopLogger(),
           getPort(), options.getWarDir());
       assert (server != null);
       return server.getPort();
diff --git a/dev/core/src/com/google/gwt/dev/HostedModeBase.java b/dev/core/src/com/google/gwt/dev/HostedModeBase.java
index 226a91e..9d1d7cc 100644
--- a/dev/core/src/com/google/gwt/dev/HostedModeBase.java
+++ b/dev/core/src/com/google/gwt/dev/HostedModeBase.java
@@ -130,7 +130,7 @@
 
     @Override
     public String getPurpose() {
-      return "Specify the TCP port for the embedded web server (defaults to 8888)";
+      return "Specifies the TCP port for the embedded web server (defaults to 8888)";
     }
 
     @Override
diff --git a/dev/core/src/com/google/gwt/dev/RunWebApp.java b/dev/core/src/com/google/gwt/dev/RunWebApp.java
index a2c7ad9..cd5896a 100644
--- a/dev/core/src/com/google/gwt/dev/RunWebApp.java
+++ b/dev/core/src/com/google/gwt/dev/RunWebApp.java
@@ -72,12 +72,12 @@
 
     @Override
     public String getPurpose() {
-      return "Specifies the name(s) of the module(s)";
+      return "Specifies the location of the target .war file or war directory";
     }
 
     @Override
     public String[] getTagArgs() {
-      return new String[] {"module[s]"};
+      return new String[] {"war"};
     }
 
     @Override
diff --git a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java b/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
index 72a35ba..6375ab3 100644
--- a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
+++ b/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
@@ -197,35 +197,39 @@
       String msg = "Reloading web app to reflect changes in "
           + appRootDir.getAbsolutePath();
       TreeLogger branch = logger.branch(TreeLogger.INFO, msg);
+      // Temporarily log Jetty on the branch.
+      Log.setLog(new JettyTreeLogger(branch));
       try {
         wac.stop();
-      } catch (Exception e) {
-        branch.log(TreeLogger.ERROR, "Unable to stop embedded Jetty server", e);
-        throw new UnableToCompleteException();
-      }
-
-      try {
         wac.start();
+        branch.log(TreeLogger.INFO, "Reload completed successfully");
       } catch (Exception e) {
-        branch.log(TreeLogger.ERROR, "Unable to start embedded Jetty server", e);
+        branch.log(TreeLogger.ERROR, "Unable to restart embedded Jetty server",
+            e);
         throw new UnableToCompleteException();
+      } finally {
+        // Reset the top-level logger.
+        Log.setLog(new JettyTreeLogger(logger));
       }
-
-      branch.log(TreeLogger.INFO, "Reload completed successfully");
     }
 
     @Override
     public void stop() throws UnableToCompleteException {
       TreeLogger branch = logger.branch(TreeLogger.INFO,
           "Stopping Jetty server");
+      // Temporarily log Jetty on the branch.
+      Log.setLog(new JettyTreeLogger(branch));
       try {
         server.stop();
         server.setStopAtShutdown(false);
+        branch.log(TreeLogger.INFO, "Stopped successfully");
       } catch (Exception e) {
         branch.log(TreeLogger.ERROR, "Unable to stop embedded Jetty server", e);
         throw new UnableToCompleteException();
+      } finally {
+        // Reset the top-level logger.
+        Log.setLog(new JettyTreeLogger(logger));
       }
-      branch.log(TreeLogger.INFO, "Stopped successfully");
     }
   }
 
@@ -434,10 +438,13 @@
   @Override
   public ServletContainer start(TreeLogger logger, int port, File appRootDir)
       throws Exception {
-    checkStartParams(logger, port, appRootDir);
+    TreeLogger branch = logger.branch(TreeLogger.INFO,
+        "Starting Jetty on port " + port, null);
 
-    // Setup our own logger.
-    Log.setLog(new JettyTreeLogger(logger));
+    checkStartParams(branch, port, appRootDir);
+
+    // Setup our branch logger during startup.
+    Log.setLog(new JettyTreeLogger(branch));
 
     // Turn off XML validation.
     System.setProperty("org.mortbay.xml.XmlParser.Validating", "false");
@@ -465,6 +472,9 @@
     server.start();
     server.setStopAtShutdown(true);
 
+    // Now that we're started, log to the top level logger.
+    Log.setLog(new JettyTreeLogger(logger));
+
     return new JettyServletContainer(logger, server, wac,
         connector.getLocalPort(), appRootDir);
   }
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLocalWorkers.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLocalWorkers.java
index 6800c83..eb7781f 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLocalWorkers.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLocalWorkers.java
@@ -38,7 +38,7 @@
 
   @Override
   public String getPurpose() {
-    return "Specifies the number of local workers to use whe compiling permutations";
+    return "Specifies the number of local workers to use when compiling permutations";
   }
 
   @Override
diff --git a/dev/core/src/com/google/gwt/util/tools/Utility.java b/dev/core/src/com/google/gwt/util/tools/Utility.java
index 4ed188b..7179561 100644
--- a/dev/core/src/com/google/gwt/util/tools/Utility.java
+++ b/dev/core/src/com/google/gwt/util/tools/Utility.java
@@ -19,12 +19,14 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.LineNumberReader;
 import java.io.OutputStream;
+import java.io.PrintWriter;
 import java.io.RandomAccessFile;
 import java.io.Reader;
+import java.io.StringReader;
 import java.io.Writer;
 import java.net.Socket;
 import java.net.URI;
@@ -317,9 +319,12 @@
       replacedContents = replacedContents.replaceAll(replaceThis, withThis);
     }
 
-    FileWriter fw = new FileWriter(file);
-    fw.write(replacedContents);
-    close(fw);
+    PrintWriter pw = new PrintWriter(file);
+    LineNumberReader lnr = new LineNumberReader(new StringReader(replacedContents));
+    for (String line = lnr.readLine(); line != null; line = lnr.readLine()) {
+      pw.println(line);
+    }
+    close(pw);
   }
 
   private static void computeInstallationPath() {
diff --git a/distro-source/core/src/index.html b/distro-source/core/src/index.html
index 166c3bf..aa970a3 100644
--- a/distro-source/core/src/index.html
+++ b/distro-source/core/src/index.html
@@ -148,12 +148,6 @@
                A glimpse at GWT's internationalization facilities.
             </div>
          </li>
-         <li>
-           <a href="samples/SimpleXML/war/SimpleXML.html">SimpleXML</a>
-           <div>
-              Using GWT's XML parsing classes.
-           </div>
-         </li>
       </ul>
 
    </body></html>
diff --git a/distro-source/core/src/samples/build.xml b/distro-source/core/src/samples/build.xml
index 0a77f56..cfd8969 100644
--- a/distro-source/core/src/samples/build.xml
+++ b/distro-source/core/src/samples/build.xml
@@ -7,7 +7,6 @@
     <ant target="${target}" dir="JSON"/>
     <ant target="${target}" dir="Mail"/>
     <ant target="${target}" dir="Showcase"/>
-    <ant target="${target}" dir="SimpleXML"/>
   </target>
 
   <target name="build" description="Build all samples">
diff --git a/samples/build.xml b/samples/build.xml
index 3d44771..f937fc9 100644
--- a/samples/build.xml
+++ b/samples/build.xml
@@ -30,10 +30,6 @@
     <gwt.ant dir="showcase" />
   </target>
 
-  <target name="simplexml" description="Build simplexml">
-    <gwt.ant dir="simplexml" />
-  </target>
-
   <target name="-do" description="Run all subprojects" >
     <antcall target="dynatable" />
     <antcall target="hello" />
@@ -41,7 +37,6 @@
     <antcall target="json" />
     <antcall target="mail" />
     <antcall target="showcase" />
-    <antcall target="simplexml" />
   </target>
 
   <target name="build" description="Builds GWT">
diff --git a/samples/dynatable/war/WEB-INF/web.xml b/samples/dynatable/war/WEB-INF/web.xml
index f70220e..aa87e96 100644
--- a/samples/dynatable/war/WEB-INF/web.xml
+++ b/samples/dynatable/war/WEB-INF/web.xml
@@ -5,13 +5,12 @@
   <welcome-file-list>
     <welcome-file>DynaTable.html</welcome-file>
   </welcome-file-list>
-  
+
   <!-- Servlets -->
   <servlet>
     <servlet-name>calendar</servlet-name>
     <servlet-class>com.google.gwt.sample.dynatable.server.SchoolCalendarServiceImpl</servlet-class>
   </servlet>
-  
   <servlet-mapping>
     <servlet-name>calendar</servlet-name>
     <url-pattern>/dynatable/calendar</url-pattern>
diff --git a/samples/hello/war/WEB-INF/web.xml b/samples/hello/war/WEB-INF/web.xml
new file mode 100644
index 0000000..9a545f7
--- /dev/null
+++ b/samples/hello/war/WEB-INF/web.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app>
+
+  <!-- Default page to serve -->
+  <welcome-file-list>
+    <welcome-file>Hello.html</welcome-file>
+  </welcome-file-list>
+
+</web-app>
diff --git a/samples/i18n/war/WEB-INF/web.xml b/samples/i18n/war/WEB-INF/web.xml
new file mode 100644
index 0000000..113189a
--- /dev/null
+++ b/samples/i18n/war/WEB-INF/web.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app>
+
+  <!-- Default page to serve -->
+  <welcome-file-list>
+    <welcome-file>I18N.html</welcome-file>
+  </welcome-file-list>
+
+</web-app>
diff --git a/samples/json/war/WEB-INF/web.xml b/samples/json/war/WEB-INF/web.xml
new file mode 100644
index 0000000..fa92ebe
--- /dev/null
+++ b/samples/json/war/WEB-INF/web.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app>
+
+  <!-- Default page to serve -->
+  <welcome-file-list>
+    <welcome-file>JSON.html</welcome-file>
+  </welcome-file-list>
+
+</web-app>
diff --git a/samples/mail/war/WEB-INF/web.xml b/samples/mail/war/WEB-INF/web.xml
new file mode 100644
index 0000000..2f36339
--- /dev/null
+++ b/samples/mail/war/WEB-INF/web.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app>
+
+  <!-- Default page to serve -->
+  <welcome-file-list>
+    <welcome-file>Mail.html</welcome-file>
+  </welcome-file-list>
+
+</web-app>
diff --git a/samples/showcase/war/WEB-INF/web.xml b/samples/showcase/war/WEB-INF/web.xml
new file mode 100644
index 0000000..9f3ad20
--- /dev/null
+++ b/samples/showcase/war/WEB-INF/web.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app>
+
+  <!-- Default page to serve -->
+  <welcome-file-list>
+    <welcome-file>Showcase.html</welcome-file>
+  </welcome-file-list>
+
+</web-app>
diff --git a/samples/simplerpc/war/WEB-INF/web.xml b/samples/simplerpc/war/WEB-INF/web.xml
index 30af99f..2e67ae4 100644
--- a/samples/simplerpc/war/WEB-INF/web.xml
+++ b/samples/simplerpc/war/WEB-INF/web.xml
@@ -1,15 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <web-app>
 
-	<servlet>
-		<servlet-name>simpleRPC</servlet-name>
-		<servlet-class>
-			com.google.gwt.sample.simplerpc.server.SimpleRPCServiceImpl
-		</servlet-class>
-	</servlet>
-	<servlet-mapping>
-		<servlet-name>simpleRPC</servlet-name>
-		<url-pattern>/simplerpc/simpleRPC</url-pattern>
-	</servlet-mapping>
+  <!-- Default page to serve -->
+  <welcome-file-list>
+    <welcome-file>SimpleRPC.html</welcome-file>
+  </welcome-file-list>
+
+  <!-- Servlets -->
+  <servlet>
+    <servlet-name>simpleRPC</servlet-name>
+      <servlet-class>
+      com.google.gwt.sample.simplerpc.server.SimpleRPCServiceImpl
+    </servlet-class>
+  </servlet>
+  <servlet-mapping>
+    <servlet-name>simpleRPC</servlet-name>
+    <url-pattern>/simplerpc/simpleRPC</url-pattern>
+  </servlet-mapping>
 
 </web-app>
diff --git a/samples/simplexml/war/WEB-INF/web.xml b/samples/simplexml/war/WEB-INF/web.xml
new file mode 100644
index 0000000..1a1909c
--- /dev/null
+++ b/samples/simplexml/war/WEB-INF/web.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app>
+
+  <!-- Default page to serve -->
+  <welcome-file-list>
+    <welcome-file>SimpleXML.html</welcome-file>
+  </welcome-file-list>
+
+</web-app>
diff --git a/user/src/com/google/gwt/dom/client/DOMImpl.java b/user/src/com/google/gwt/dom/client/DOMImpl.java
index dd0c07c..1d7e39b 100644
--- a/user/src/com/google/gwt/dom/client/DOMImpl.java
+++ b/user/src/com/google/gwt/dom/client/DOMImpl.java
@@ -85,6 +85,10 @@
     return !!evt.ctrlKey;
   }-*/;
 
+  public native EventTarget eventGetCurrentTarget(NativeEvent event) /*-{
+    return event.currentTarget;
+  }-*/;
+
   public final native int eventGetKeyCode(NativeEvent evt) /*-{
     // 'which' gives the right key value, except when it doesn't -- in which
     // case, keyCode gives the right value on all browsers.
@@ -98,7 +102,7 @@
 
   public abstract int eventGetMouseWheelVelocityY(NativeEvent evt);
 
-  public abstract Element eventGetRelatedTarget(NativeEvent nativeEvent);
+  public abstract EventTarget eventGetRelatedTarget(NativeEvent nativeEvent);
 
   public native int eventGetScreenX(NativeEvent evt) /*-{
     return evt.screenX || 0;
@@ -112,7 +116,7 @@
     return !!evt.shiftKey;
   }-*/;
 
-  public abstract Element eventGetTarget(NativeEvent evt);
+  public abstract EventTarget eventGetTarget(NativeEvent evt);
 
   public final native String eventGetType(NativeEvent evt) /*-{
     return evt.type;
diff --git a/user/src/com/google/gwt/dom/client/DOMImplIE6.java b/user/src/com/google/gwt/dom/client/DOMImplIE6.java
index d0c2f21..04c205a 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplIE6.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplIE6.java
@@ -21,6 +21,15 @@
  */
 class DOMImplIE6 extends DOMImpl {
 
+  /**
+   * This field *must* be filled in from JSNI code before dispatching an event
+   * on IE. It should be set to the 'this' context of the handler that receives
+   * the event, then restored to its initial value when the dispatcher is done.
+   * See {@link com.google.gwt.user.client.impl.DOMImplIE6#initEventSystem()}
+   * for an example of how this should be done.
+   */
+  private static EventTarget currentEventTarget;
+
   @Override
   public native NativeEvent createHtmlEvent(Document doc, String type, boolean canBubble,
       boolean cancelable) /*-{
@@ -34,7 +43,7 @@
   @Override
   public native InputElement createInputRadioElement(Document doc, String name) /*-{
     return doc.createElement("<INPUT type='RADIO' name='" + name + "'>");
-  }-*/; 
+  }-*/;
 
   @Override
   public native NativeEvent createKeyEvent(Document doc, String type, boolean canBubble,
@@ -101,12 +110,17 @@
   }-*/;
 
   @Override
+  public EventTarget eventGetCurrentTarget(NativeEvent event) {
+    return currentEventTarget;
+  }
+
+  @Override
   public native int eventGetMouseWheelVelocityY(NativeEvent evt) /*-{
     return Math.round(-evt.wheelDelta / 40) || 0;
   }-*/;
 
   @Override
-  public native Element eventGetRelatedTarget(NativeEvent evt) /*-{
+  public native EventTarget eventGetRelatedTarget(NativeEvent evt) /*-{
     // Prefer 'relatedTarget' if it's set (see createMouseEvent(), which
     // explicitly sets relatedTarget when synthesizing mouse events).
     return evt.relatedTarget ||
@@ -114,7 +128,7 @@
   }-*/;
 
   @Override
-  public native Element eventGetTarget(NativeEvent evt) /*-{
+  public native EventTarget eventGetTarget(NativeEvent evt) /*-{
     return evt.srcElement;
   }-*/;
 
diff --git a/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java b/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java
index 23d14c2..ecf52fb 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplMozillaOld.java
@@ -37,47 +37,17 @@
   }
 
   @Override
-  public native int getAbsoluteLeft(Element elem) /*-{
-    var doc = elem.ownerDocument;
-    var style = doc.defaultView.getComputedStyle(elem, null);
-    var left = doc.getBoxObjectFor(elem).x - Math.round(
-        style.getPropertyCSSValue('border-left-width').getFloatValue(
-        CSSPrimitiveValue.CSS_PX));
-
-    var parent = elem.parentNode;
-    while (parent) {
-      // Sometimes get NAN.
-      if (parent.scrollLeft > 0) {
-        left -= parent.scrollLeft;
-      }
-      parent = parent.parentNode;
-    }
-
-    return left
-        + @com.google.gwt.dom.client.DOMImplMozillaOld::getDocumentScrollLeft()();
-  }-*/;
+  public int getAbsoluteLeft(Element elem) {
+    return getAbsoluteLeftImpl(elem.getOwnerDocument().getViewportElement(),
+        elem);
+  }
 
   @Override
-  public native int getAbsoluteTop(Element elem) /*-{
-    var doc = elem.ownerDocument;
-    var style = doc.defaultView.getComputedStyle(elem, null);
-    var top = doc.getBoxObjectFor(elem).y - Math.round(
-        style.getPropertyCSSValue('border-top-width').getFloatValue(
-        CSSPrimitiveValue.CSS_PX));
-      
-    var parent = elem.parentNode;
-    while (parent) {
-      // Sometimes get NAN.
-      if (parent.scrollTop > 0) {
-        top -= parent.scrollTop;
-      }
-      parent = parent.parentNode;
-    }
+  public int getAbsoluteTop(Element elem) {
+    return getAbsoluteTopImpl(elem.getOwnerDocument().getViewportElement(),
+        elem);
+  }
 
-    return top
-        + @com.google.gwt.dom.client.DOMImplMozillaOld::getDocumentScrollTop()();
-  }-*/;
-  
   @Override
   public native String getInnerText(Element node) /*-{
     // To mimic IE's 'innerText' property in the W3C DOM, we need to recursively
@@ -94,7 +64,7 @@
     }
     return text;
   }-*/;
-  
+
   @Override
   public native void setInnerText(Element elem, String text) /*-{
     // Remove all children first.
@@ -106,4 +76,42 @@
       elem.appendChild(elem.ownerDocument.createTextNode(text));
     }
   }-*/;
+  
+  private native int getAbsoluteLeftImpl(Element viewport, Element elem) /*-{
+    var doc = elem.ownerDocument;
+    var style = doc.defaultView.getComputedStyle(elem, null);
+    var left = doc.getBoxObjectFor(elem).x - Math.round(
+        style.getPropertyCSSValue('border-left-width').getFloatValue(
+        CSSPrimitiveValue.CSS_PX));
+
+    var parent = elem.parentNode;
+    while (parent) {
+      // Sometimes get NAN.
+      if (parent.scrollLeft > 0) {
+        left -= parent.scrollLeft;
+      }
+      parent = parent.parentNode;
+    }
+
+    return left + viewport.scrollLeft;
+  }-*/;
+  
+  private native int getAbsoluteTopImpl(Element viewport, Element elem) /*-{
+    var doc = elem.ownerDocument;
+    var style = doc.defaultView.getComputedStyle(elem, null);
+    var top = doc.getBoxObjectFor(elem).y - Math.round(
+        style.getPropertyCSSValue('border-top-width').getFloatValue(
+        CSSPrimitiveValue.CSS_PX));
+      
+    var parent = elem.parentNode;
+    while (parent) {
+      // Sometimes get NAN.
+      if (parent.scrollTop > 0) {
+        top -= parent.scrollTop;
+      }
+      parent = parent.parentNode;
+    }
+
+    return top + viewport.scrollTop;
+  }-*/;
 }
diff --git a/user/src/com/google/gwt/dom/client/DOMImplSafari.java b/user/src/com/google/gwt/dom/client/DOMImplSafari.java
index ca512ac..d75edc7 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplSafari.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplSafari.java
@@ -48,6 +48,11 @@
   }
 
   @Override
+  public native EventTarget eventGetCurrentTarget(NativeEvent event) /*-{
+    return event.currentTarget || $wnd;
+  }-*/;
+
+  @Override
   public native int eventGetMouseWheelVelocityY(NativeEvent evt) /*-{
     return Math.round(-evt.wheelDelta / 40) || 0;
   }-*/;
diff --git a/user/src/com/google/gwt/dom/client/DOMImplStandard.java b/user/src/com/google/gwt/dom/client/DOMImplStandard.java
index c1cd284..90d2e89 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplStandard.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplStandard.java
@@ -94,12 +94,12 @@
   }-*/;
 
   @Override
-  public native Element eventGetRelatedTarget(NativeEvent evt) /*-{
+  public native EventTarget eventGetRelatedTarget(NativeEvent evt) /*-{
     return evt.relatedTarget;
   }-*/;
 
   @Override
-  public native Element eventGetTarget(NativeEvent evt) /*-{
+  public native EventTarget eventGetTarget(NativeEvent evt) /*-{
     return evt.target;
   }-*/;
 
diff --git a/user/src/com/google/gwt/dom/client/Element.java b/user/src/com/google/gwt/dom/client/Element.java
index f5c9aed..a0bf9f2 100644
--- a/user/src/com/google/gwt/dom/client/Element.java
+++ b/user/src/com/google/gwt/dom/client/Element.java
@@ -15,20 +15,49 @@
  */
 package com.google.gwt.dom.client;
 
+import com.google.gwt.core.client.JavaScriptObject;
+
 /**
  * All HTML element interfaces derive from this class.
  */
 public class Element extends Node {
 
   /**
-   * Assert that the given {@link Node} is of type {@link Node#ELEMENT_NODE} and
-   * automatically typecast it.
+   * Assert that the given {@link Node} is an {@link Element} and automatically
+   * typecast it.
+   */
+  public static Element as(JavaScriptObject o) {
+    assert is(o);
+    return (Element)o;
+  }
+
+  /**
+   * Assert that the given {@link Node} is an {@link Element} and automatically
+   * typecast it.
    */
   public static Element as(Node node) {
-    assert node.getNodeType() == Node.ELEMENT_NODE;
+    assert is(node);
     return (Element) node;
   }
 
+  /**
+   * Determines whether the given {@link JavaScriptObject} can be cast to an
+   * {@link Element}.
+   */
+  public static boolean is(JavaScriptObject o) {
+    if (Node.is(o)) {
+      return is((Node)o);
+    }
+    return false;
+  }
+
+  /**
+   * Determine whether the given {@link Node} can be cast to an {@link Element}.
+   */
+  public static boolean is(Node node) {
+    return node.getNodeType() == Node.ELEMENT_NODE;
+  }
+
   protected Element() {
   }
 
diff --git a/user/src/com/google/gwt/dom/client/EventTarget.java b/user/src/com/google/gwt/dom/client/EventTarget.java
new file mode 100644
index 0000000..77c32fe
--- /dev/null
+++ b/user/src/com/google/gwt/dom/client/EventTarget.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2009 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.dom.client;
+
+import com.google.gwt.core.client.JavaScriptObject;
+
+/**
+ * Represents the target of a JavaScript event.
+ * 
+ * <p>
+ * This type is returned from methods such as
+ * {@link NativeEvent#getEventTarget()}, and must usually be cast to another
+ * type using methods such as {@link Element#is(JavaScriptObject)} and
+ * {@link Element#as(JavaScriptObject)}.
+ * </p>
+ * 
+ * <p>
+ * This class intentionally does <em>not</em> specify the methods from the DOM
+ * IDL (dispatchEvent, addEventListener, and removeEventListener).
+ * </p>
+ */
+public class EventTarget extends JavaScriptObject {
+
+  protected EventTarget() {
+  }
+}
diff --git a/user/src/com/google/gwt/dom/client/NativeEvent.java b/user/src/com/google/gwt/dom/client/NativeEvent.java
index 8109652..622286b 100644
--- a/user/src/com/google/gwt/dom/client/NativeEvent.java
+++ b/user/src/com/google/gwt/dom/client/NativeEvent.java
@@ -91,6 +91,25 @@
   }

 

   /**

+   * Gets the current target element of this event. This is the element whose

+   * listener fired last, not the element which fired the event initially.

+   * 

+   * @return the event's current target element

+   */

+  public final EventTarget getCurrentEventTarget() {

+    return DOMImpl.impl.eventGetCurrentTarget(this);

+  }

+

+  /**

+   * Returns the element that was the actual target of the given event.

+   * 

+   * @return the target element

+   */

+  public final EventTarget getEventTarget() {

+    return DOMImpl.impl.eventGetTarget(this);

+  }

+

+  /**

    * Gets the key code associated with this event.

    * 

    * <p>

@@ -138,7 +157,7 @@
    * 

    * @return the related target

    */

-  public final Element getRelatedTarget() {

+  public final EventTarget getRelatedEventTarget() {

     return DOMImpl.impl.eventGetRelatedTarget(this);

   }

 

@@ -182,15 +201,6 @@
   }

 

   /**

-   * Returns the element that was the actual target of the given event.

-   * 

-   * @return the target element

-   */

-  public final Element getTarget() {

-    return DOMImpl.impl.eventGetTarget(this);

-  }

-

-  /**

    * Gets the enumerated type of this event.

    * 

    * @return the event's enumerated type

diff --git a/user/src/com/google/gwt/dom/client/Node.java b/user/src/com/google/gwt/dom/client/Node.java
index cf7c211..fa3e35c 100644
--- a/user/src/com/google/gwt/dom/client/Node.java
+++ b/user/src/com/google/gwt/dom/client/Node.java
@@ -40,6 +40,22 @@
    */
   public static final short DOCUMENT_NODE = 9;
 
+  /**
+   * Assert that the given {@link JavaScriptObject} is a DOM node and
+   * automatically typecast it.
+   */
+  public static Node as(JavaScriptObject o) {
+    assert is(o);
+    return (Node)o;
+  }
+
+  /**
+   * Determines whether the given {@link JavaScriptObject} is a DOM node.
+   */
+  public static native boolean is(JavaScriptObject o) /*-{
+    return !!o.nodeType;
+  }-*/;
+
   protected Node() {
   }
 
diff --git a/user/src/com/google/gwt/event/dom/client/DomEvent.java b/user/src/com/google/gwt/event/dom/client/DomEvent.java
index bf279db..4961054 100644
--- a/user/src/com/google/gwt/event/dom/client/DomEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/DomEvent.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.shared.EventHandler;
 import com.google.gwt.event.shared.GwtEvent;
@@ -87,16 +88,35 @@
    */
   public static void fireNativeEvent(NativeEvent nativeEvent,
       HasHandlers handlerSource) {
+    fireNativeEvent(nativeEvent, handlerSource, null);
+  }
+
+  /**
+   * Fires the given native event on the specified handlers.
+   * 
+   * @param nativeEvent the native event
+   * @param handlerSource the source of the handlers to fire
+   * @param relativeElem the element relative to which event coordinates will be
+   *          measured
+   */
+  public static void fireNativeEvent(NativeEvent nativeEvent,
+      HasHandlers handlerSource, Element relativeElem) {
     assert nativeEvent != null : "nativeEvent must not be null";
+
     if (registered != null) {
       final DomEvent.Type<?> typeKey = registered.unsafeGet(nativeEvent.getType());
       if (typeKey != null) {
         // Store and restore native event just in case we are in recursive
         // loop.
         NativeEvent currentNative = typeKey.flyweight.nativeEvent;
+        Element currentRelativeElem = typeKey.flyweight.relativeElem;
         typeKey.flyweight.setNativeEvent(nativeEvent);
+        typeKey.flyweight.setRelativeElement(relativeElem);
+
         handlerSource.fireEvent(typeKey.flyweight);
+
         typeKey.flyweight.setNativeEvent(currentNative);
+        typeKey.flyweight.setRelativeElement(currentRelativeElem);
       }
     }
   }
@@ -107,6 +127,7 @@
   }
 
   private NativeEvent nativeEvent;
+  private Element relativeElem;
 
   @Override
   public abstract DomEvent.Type<H> getAssociatedType();
@@ -117,6 +138,18 @@
   }
 
   /**
+   * Gets the element relative to which event coordinates will be measured.
+   * If this element is <code>null</code>, event coordinates will be measured
+   * relative to the window's client area.
+   * 
+   * @return the event's relative element
+   */
+  public final Element getRelativeElement() {
+    assertLive();
+    return relativeElem;
+  }
+
+  /**
    * Prevents the wrapped native event's default action.
    */
   public void preventDefault() {
@@ -135,6 +168,15 @@
   }
 
   /**
+   * Gets the element relative to which event coordinates will be measured.
+   * 
+   * @param relativeElem the event's relative element
+   */
+  public void setRelativeElement(Element relativeElem) {
+    this.relativeElem = relativeElem;
+  }
+
+  /**
    * Stops the propagation of the underlying native event.
    */
   public void stopPropagation() {
diff --git a/user/src/com/google/gwt/event/dom/client/MouseEvent.java b/user/src/com/google/gwt/event/dom/client/MouseEvent.java
index e86407e..e9be08c 100644
--- a/user/src/com/google/gwt/event/dom/client/MouseEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/MouseEvent.java
@@ -102,21 +102,29 @@
   }
 
   /**
-   * Gets the mouse x-position relative to the event's target element.
+   * Gets the mouse x-position relative to the event's current target element.
    * 
    * @return the relative x-position
    */
-  public int getTargetX() {
-    return getRelativeX(getNativeEvent().getTarget());
+  public int getX() {
+    Element relativeElem = getRelativeElement();
+    if (relativeElem != null) {
+      return getRelativeX(relativeElem);
+    }
+    return getClientX();
   }
 
   /**
-   * Gets the mouse y-position relative to the event's target element.
+   * Gets the mouse y-position relative to the event's current target element.
    * 
    * @return the relative y-position
    */
-  public int getTargetY() {
-    return getRelativeY(getNativeEvent().getTarget());
+  public int getY() {
+    Element relativeElem = getRelativeElement();
+    if (relativeElem != null) {
+      return getRelativeY(relativeElem);
+    }
+    return getClientY();
   }
 
   /**
diff --git a/user/src/com/google/gwt/event/dom/client/MouseOutEvent.java b/user/src/com/google/gwt/event/dom/client/MouseOutEvent.java
index 9b89c91..7611621 100644
--- a/user/src/com/google/gwt/event/dom/client/MouseOutEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/MouseOutEvent.java
@@ -15,7 +15,7 @@
  */

 package com.google.gwt.event.dom.client;

 

-import com.google.gwt.dom.client.Element;

+import com.google.gwt.dom.client.EventTarget;

 

 /**

  * Represents a native mouse out event.

@@ -52,27 +52,16 @@
   }

 

   /**

-   * Gets the element from which the mouse pointer was moved.

+   * Gets the target to which the mouse pointer was moved.

    * 

-   * @return the element from which the mouse pointer was moved

+   * @return the target to which the mouse pointer was moved

    */

-  public Element getFromElement() {

-    return getNativeEvent().getTarget();

-  }

-

-  /**

-   * Gets the element to which the mouse pointer was moved.

-   * 

-   * @return the element to which the mouse pointer was moved

-   */

-  public Element getToElement() {

-    // Use a deferred binding instead of DOMImpl's inefficient switch statement

-    return getNativeEvent().getRelatedTarget();

+  public EventTarget getRelatedTarget() {

+    return getNativeEvent().getRelatedEventTarget();

   }

 

   @Override

   protected void dispatch(MouseOutHandler handler) {

     handler.onMouseOut(this);

   }

-

 }

diff --git a/user/src/com/google/gwt/event/dom/client/MouseOverEvent.java b/user/src/com/google/gwt/event/dom/client/MouseOverEvent.java
index 3306151..0518b82 100644
--- a/user/src/com/google/gwt/event/dom/client/MouseOverEvent.java
+++ b/user/src/com/google/gwt/event/dom/client/MouseOverEvent.java
@@ -15,7 +15,7 @@
  */

 package com.google.gwt.event.dom.client;

 

-import com.google.gwt.dom.client.Element;

+import com.google.gwt.dom.client.EventTarget;

 

 /**

  * Represents a native mouse over event.

@@ -52,26 +52,16 @@
   }

 

   /**

-   * Gets the element from which the mouse pointer was moved.

+   * Gets the target from which the mouse pointer was moved.

    * 

-   * @return the element from which the mouse pointer was moved

+   * @return the target from which the mouse pointer was moved

    */

-  public Element getFromElement() {

-    return getNativeEvent().getRelatedTarget();

-  }

-

-  /**

-   * Gets the element to which the mouse pointer was moved.

-   * 

-   * @return the element to which the mouse pointer was moved

-   */

-  public Element getToElement() {

-    return getNativeEvent().getTarget();

+  public EventTarget getRelatedTarget() {

+    return getNativeEvent().getRelatedEventTarget();

   }

 

   @Override

   protected void dispatch(MouseOverHandler handler) {

     handler.onMouseOver(this);

   }

-

 }

diff --git a/user/src/com/google/gwt/junit/tools/JUnitCreator.java b/user/src/com/google/gwt/junit/tools/JUnitCreator.java
index 00fb599..2dc7f4c 100644
--- a/user/src/com/google/gwt/junit/tools/JUnitCreator.java
+++ b/user/src/com/google/gwt/junit/tools/JUnitCreator.java
@@ -300,7 +300,7 @@
 
       @Override
       public String getPurpose() {
-        return "Specify the path to your junit.jar (required)";
+        return "Specifies the path to your junit.jar (required)";
       }
 
       @Override
@@ -339,7 +339,7 @@
 
       @Override
       public String getPurpose() {
-        return "Specify the name of the GWT module to use (required)";
+        return "Specifies the name of the GWT module to use (required)";
       }
 
       @Override
diff --git a/user/src/com/google/gwt/user/client/DOM.java b/user/src/com/google/gwt/user/client/DOM.java
index 8ba36b5..03721b8 100644
--- a/user/src/com/google/gwt/user/client/DOM.java
+++ b/user/src/com/google/gwt/user/client/DOM.java
@@ -457,7 +457,7 @@
    * @see DOM#eventGetTarget(Event)
    */
   public static Element eventGetCurrentTarget(Event evt) {
-    return impl.eventGetCurrentTarget(evt);
+    return evt.getCurrentTarget().cast();
   }
 
   /**
diff --git a/user/src/com/google/gwt/user/client/Event.java b/user/src/com/google/gwt/user/client/Event.java
index a7e466a..76b3c7c 100644
--- a/user/src/com/google/gwt/user/client/Event.java
+++ b/user/src/com/google/gwt/user/client/Event.java
@@ -446,30 +446,6 @@
   }
 
   /**
-   * Gets the x coordinate relative to the given element.
-   * 
-   * @param nativeEvent the native event
-   * @param relativeTo the relative element
-   * @return the relative x
-   */
-  public static int getRelativeX(NativeEvent nativeEvent, Element relativeTo) {
-    return nativeEvent.getClientX() - relativeTo.getAbsoluteLeft()
-        + relativeTo.getScrollLeft() + Window.getScrollLeft();
-  }
-
-  /**
-   * Gets the y coordinate relative to the given element.
-   * 
-   * @param nativeEvent the native event
-   * @param relativeTo the relative element
-   * @return the relative y
-   */
-  public static int getRelativeY(NativeEvent nativeEvent, Element relativeTo) {
-    return nativeEvent.getClientY() - relativeTo.getAbsoluteTop()
-        + relativeTo.getScrollTop() + Window.getScrollTop();
-  }
-
-  /**
    * Gets the enumerated type of this event given a valid event type name.
    * 
    * @param typeName the typeName to be tested
@@ -549,7 +525,9 @@
    * propagated to parent elements.
    * 
    * @param cancel <code>true</code> to cancel bubbling
+   * @deprecated use {@link NativeEvent#stopPropagation()} instead
    */
+  @Deprecated
   public final void cancelBubble(boolean cancel) {
     DOM.eventCancelBubble(this, cancel);
   }
@@ -559,9 +537,11 @@
    * listener fired last, not the element which fired the event initially.
    * 
    * @return the event's current target element
+   * @deprecated use {@link NativeEvent#getCurrentEventTarget()} instead
    */
+  @Deprecated
   public final Element getCurrentTarget() {
-    return DOM.eventGetCurrentTarget(this);
+    return getCurrentEventTarget().cast();
   }
 
   /**
@@ -577,6 +557,17 @@
   }
 
   /**
+   * Gets the related target for this event.
+   * 
+   * @return the related target
+   * @deprecated use {@link NativeEvent#getRelatedEventTarget()} instead
+   */
+  @Deprecated
+  public final Element getRelatedTarget() {
+    return getRelatedEventTarget().cast();
+  }
+
+  /**
    * Gets the key-repeat state of this event.
    * 
    * @return <code>true</code> if this key event was an auto-repeat
@@ -588,6 +579,17 @@
   }
 
   /**
+   * Returns the element that was the actual target of the given event.
+   * 
+   * @return the target element
+   * @deprecated use {@link NativeEvent#getEventTarget()} instead
+   */
+  @Deprecated
+  public final Element getTarget() {
+    return getEventTarget().cast();
+  }
+
+  /**
    * Gets the element to which the mouse pointer was moved (only valid for
    * {@link Event#ONMOUSEOUT}).
    * 
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImpl.java b/user/src/com/google/gwt/user/client/impl/DOMImpl.java
index 2b31054..11f9ef6 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImpl.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImpl.java
@@ -48,10 +48,6 @@
   public native void eventCancelBubble(Event evt, boolean cancel) /*-{
     evt.cancelBubble = cancel;
   }-*/;
-  
-  public native Element eventGetCurrentTarget(Event evt) /*-{
-    return evt.currentTarget;
-  }-*/;
 
   public abstract Element eventGetFromElement(Event evt);
   
diff --git a/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java b/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java
index 03e937c..3ce49bd 100644
--- a/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java
+++ b/user/src/com/google/gwt/user/client/impl/DOMImplIE6.java
@@ -26,20 +26,12 @@
 class DOMImplIE6 extends DOMImpl {
 
   @SuppressWarnings("unused")
-  private static Element currentEventTarget;
-
-  @SuppressWarnings("unused")
   private static JavaScriptObject dispatchEvent;
 
   @SuppressWarnings("unused")
   private static JavaScriptObject dispatchDblClickEvent;
 
   @Override
-  public native Element eventGetCurrentTarget(Event evt) /*-{
-    return @com.google.gwt.user.client.impl.DOMImplIE6::currentEventTarget;
-  }-*/;
-
-  @Override
   public native Element eventGetFromElement(Event evt) /*-{
     // Prefer 'relatedTarget' if it's set (see createMouseEvent(), which
     // explicitly sets relatedTarget when synthesizing mouse events).
@@ -81,13 +73,13 @@
       // also seems that IE won't allow you to add expandos to the event object,
       // so we have to store it in a global. This is ok because only one event
       // can actually be dispatched at a time.
-      var oldEventTarget = @com.google.gwt.user.client.impl.DOMImplIE6::currentEventTarget;
-      @com.google.gwt.user.client.impl.DOMImplIE6::currentEventTarget = this;
+      var oldEventTarget = @com.google.gwt.dom.client.DOMImplIE6::currentEventTarget;
+      @com.google.gwt.dom.client.DOMImplIE6::currentEventTarget = this;
 
       if ($wnd.event.returnValue == null) {
         $wnd.event.returnValue = true;
         if (!@com.google.gwt.user.client.DOM::previewEvent(Lcom/google/gwt/user/client/Event;)($wnd.event)) {
-          @com.google.gwt.user.client.impl.DOMImplIE6::currentEventTarget = oldEventTarget;
+          @com.google.gwt.dom.client.DOMImplIE6::currentEventTarget = oldEventTarget;
           return;
         }
       }
@@ -103,7 +95,7 @@
         }
       }
 
-      @com.google.gwt.user.client.impl.DOMImplIE6::currentEventTarget = oldEventTarget;
+      @com.google.gwt.dom.client.DOMImplIE6::currentEventTarget = oldEventTarget;
     };
 
     @com.google.gwt.user.client.impl.DOMImplIE6::dispatchDblClickEvent = function() {
diff --git a/user/src/com/google/gwt/user/client/ui/ChangeListener.java b/user/src/com/google/gwt/user/client/ui/ChangeListener.java
index d1b4ebf..4b50253 100644
--- a/user/src/com/google/gwt/user/client/ui/ChangeListener.java
+++ b/user/src/com/google/gwt/user/client/ui/ChangeListener.java
@@ -36,7 +36,7 @@
    * 
    * @param sender the widget that has changed
    * 
-   * @deprecated See the deprecation message on the enclosing interface for details.
+   * @deprecated See the deprecation message on this interface for details
    */
   @Deprecated
   void onChange(Widget sender);
diff --git a/user/src/com/google/gwt/user/client/ui/ChangeListenerCollection.java b/user/src/com/google/gwt/user/client/ui/ChangeListenerCollection.java
index b095bac..0c57587 100644
--- a/user/src/com/google/gwt/user/client/ui/ChangeListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/ChangeListenerCollection.java
@@ -22,11 +22,7 @@
  * subclass of {@link ArrayList} assumes that all objects added to it will be of
  * type {@link com.google.gwt.user.client.ui.ChangeListener}.
  * 
- * @deprecated As of GWT 1.6, to manage handlers for your widget, call
- *             <code>{@link Widget#addDomHandler(com.google.gwt.event.shared.EventHandler, com.google.gwt.event.dom.client.DomEvent.Type) addDomHandler}(myHandler, ChangeEvent.getType())</code>
- *             for DOM-based change events, and call
- *             <code>{@link Widget#addHandler(com.google.gwt.event.shared.EventHandler, com.google.gwt.event.shared.GwtEvent.Type) addHandler}(myHandler, ValueChangeEvent.getType())</code>
- *             for logical change events
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class ChangeListenerCollection extends ArrayList<ChangeListener> {
diff --git a/user/src/com/google/gwt/user/client/ui/ClickListener.java b/user/src/com/google/gwt/user/client/ui/ClickListener.java
index 6a2e222..e4efc31 100644
--- a/user/src/com/google/gwt/user/client/ui/ClickListener.java
+++ b/user/src/com/google/gwt/user/client/ui/ClickListener.java
@@ -29,6 +29,8 @@
    * Fired when the user clicks on a widget.
    * 
    * @param sender the widget sending the event.
+   * @deprecated Use {@link com.google.gwt.event.dom.client.ClickHandler#onClick} 
+   *             instead
    */
   @Deprecated
   void onClick(Widget sender);
diff --git a/user/src/com/google/gwt/user/client/ui/ComplexPanel.java b/user/src/com/google/gwt/user/client/ui/ComplexPanel.java
index b7b1d52..6d87f62 100644
--- a/user/src/com/google/gwt/user/client/ui/ComplexPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/ComplexPanel.java
@@ -151,7 +151,7 @@
    * {@link #insert(Widget, Element, int, boolean)}, which clarifies this
    * ambiguity.
    * 
-   * @deprecated Use {@link #insert(Widget, Element, int, boolean)}.
+   * @deprecated Use {@link #insert(Widget, Element, int, boolean)} instead
    */
   @Deprecated
   protected void insert(Widget child, Element container, int beforeIndex) {
diff --git a/user/src/com/google/gwt/user/client/ui/CustomButton.java b/user/src/com/google/gwt/user/client/ui/CustomButton.java
index a59978a..ac3e063 100644
--- a/user/src/com/google/gwt/user/client/ui/CustomButton.java
+++ b/user/src/com/google/gwt/user/client/ui/CustomButton.java
@@ -349,6 +349,7 @@
    * 
    * @param upImage image for the default (up) face of the button
    * @param listener the click listener
+   * @deprecated Use {@link #CustomButton(Image, ClickHandler)} instead
    */
   @Deprecated
   public CustomButton(Image upImage, ClickListener listener) {
@@ -385,6 +386,7 @@
    * @param upImage image for the default (up) face of the button
    * @param downImage image for the down face of the button
    * @param listener clickListener
+   * @deprecated Use {@link #CustomButton(Image, Image, ClickHandler} instead
    */
   @Deprecated
   public CustomButton(Image upImage, Image downImage, ClickListener listener) {
@@ -418,6 +420,7 @@
    * 
    * @param upText the text for the default (up) face of the button
    * @param listener the click listener
+   * @deprecated Use {@link #CustomButton(String, ClickListener)} instead
    */
   @Deprecated
   public CustomButton(String upText, ClickListener listener) {
@@ -454,6 +457,7 @@
    * @param upText the text for the default (up) face of the button
    * @param downText the text for the down face of the button
    * @param listener the click listener
+   * @deprecated Use {@link #CustomButton(String, String, ClickHandler)} instead
    */
   @Deprecated
   public CustomButton(String upText, String downText, ClickListener listener) {
diff --git a/user/src/com/google/gwt/user/client/ui/DelegatingClickListenerCollection.java b/user/src/com/google/gwt/user/client/ui/DelegatingClickListenerCollection.java
index 0374d2c..04e04f5 100644
--- a/user/src/com/google/gwt/user/client/ui/DelegatingClickListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/DelegatingClickListenerCollection.java
@@ -39,7 +39,7 @@
  *  }
  *</pre>
  * 
- * @deprecated Use <code>Widget#delegateEvent</code> instead
+ * @deprecated Use {@link Widget#delegateEvent} instead
  */
 @Deprecated
 public class DelegatingClickListenerCollection extends ClickListenerCollection
diff --git a/user/src/com/google/gwt/user/client/ui/DelegatingFocusListenerCollection.java b/user/src/com/google/gwt/user/client/ui/DelegatingFocusListenerCollection.java
index eca071d..e1c41c6 100644
--- a/user/src/com/google/gwt/user/client/ui/DelegatingFocusListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/DelegatingFocusListenerCollection.java
@@ -39,7 +39,7 @@
  *  }
  *</pre>
  * 
- * @deprecated Use {@link Widget#delegateEvent Widget.delegateEvent} instead
+ * @deprecated Use {@link Widget#delegateEvent} instead
  */
 @Deprecated
 public class DelegatingFocusListenerCollection extends FocusListenerCollection
diff --git a/user/src/com/google/gwt/user/client/ui/DelegatingKeyboardListenerCollection.java b/user/src/com/google/gwt/user/client/ui/DelegatingKeyboardListenerCollection.java
index 38b40cc..d7aa996 100644
--- a/user/src/com/google/gwt/user/client/ui/DelegatingKeyboardListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/DelegatingKeyboardListenerCollection.java
@@ -40,7 +40,7 @@
  *  }
  *</pre>
  * 
- * @deprecated Use {@link Widget#delegateEvent Widget.delegateEvent} instead
+ * @deprecated Use {@link Widget#delegateEvent} instead
  */
 @Deprecated
 public class DelegatingKeyboardListenerCollection extends
diff --git a/user/src/com/google/gwt/user/client/ui/DialogBox.java b/user/src/com/google/gwt/user/client/ui/DialogBox.java
index a5bde38..b259fcc 100644
--- a/user/src/com/google/gwt/user/client/ui/DialogBox.java
+++ b/user/src/com/google/gwt/user/client/ui/DialogBox.java
@@ -16,6 +16,7 @@
 package com.google.gwt.user.client.ui;
 
 import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.EventTarget;
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.dom.client.HasAllMouseHandlers;
 import com.google.gwt.event.dom.client.MouseDownEvent;
@@ -236,7 +237,7 @@
   }
 
   /**
-   * @deprecated Use {@link #beginDragging} instead and {@link #getCaption}
+   * @deprecated Use {@link #beginDragging} and {@link #getCaption}
    *             instead
    */
   @Deprecated
@@ -247,10 +248,16 @@
     dragStartY = y;
   }
 
+  /**
+   * @deprecated Use {@link Caption#addMouseOverHandler} instead
+   */
   @Deprecated
   public void onMouseEnter(Widget sender) {
   }
 
+  /**
+   * @deprecated Use {@link Caption#addMouseOutHandler} instead
+   */
   @Deprecated
   public void onMouseLeave(Widget sender) {
   }
@@ -329,8 +336,7 @@
    * @param event the mouse down event that triggered dragging
    */
   protected void beginDragging(MouseDownEvent event) {
-    onMouseDown(caption, Event.getRelativeX(event.getNativeEvent(),
-        getElement()), Event.getRelativeY(event.getNativeEvent(), getElement()));
+    onMouseDown(caption, event.getX(), event.getY());
   }
 
   /**
@@ -342,8 +348,7 @@
    * @param event the mouse move event that continues dragging
    */
   protected void continueDragging(MouseMoveEvent event) {
-    onMouseMove(caption, Event.getRelativeX(event.getNativeEvent(),
-        getElement()), Event.getRelativeY(event.getNativeEvent(), getElement()));
+    onMouseMove(caption, event.getX(), event.getY());
   }
 
   @Override
@@ -376,9 +381,7 @@
    * @see #endDragging
    */
   protected void endDragging(MouseUpEvent event) {
-    onMouseUp(caption,
-        Event.getRelativeX(event.getNativeEvent(), getElement()),
-        Event.getRelativeY(event.getNativeEvent(), getElement()));
+    onMouseUp(caption, event.getX(), event.getY());
   }
 
   /**
@@ -414,7 +417,11 @@
   }
 
   private boolean isCaptionEvent(NativeEvent event) {
-    return getCellElement(0, 1).getParentElement().isOrHasChild(
-        event.getTarget());
+    EventTarget target = event.getEventTarget();
+    if (Element.is(target)) {
+      return getCellElement(0, 1).getParentElement().isOrHasChild(
+          Element.as(target));
+    }
+    return false;
   }
 }
diff --git a/user/src/com/google/gwt/user/client/ui/DisclosureEvent.java b/user/src/com/google/gwt/user/client/ui/DisclosureEvent.java
index e19ecfe..de899b2 100644
--- a/user/src/com/google/gwt/user/client/ui/DisclosureEvent.java
+++ b/user/src/com/google/gwt/user/client/ui/DisclosureEvent.java
@@ -32,6 +32,9 @@
    * @param sender the panel from which the event is originating.
    * 
    * @see DisclosureHandler
+   * @deprecated Use
+   *             {@link com.google.gwt.event.logical.shared.CloseEvent} and
+   *             {@link  com.google.gwt.event.logical.shared.OpenEvent} instead
    */
   @Deprecated
   public DisclosureEvent(DisclosurePanel sender) {
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 621a57f..04d9989 100644
--- a/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java
+++ b/user/src/com/google/gwt/user/client/ui/DisclosurePanel.java
@@ -440,6 +440,8 @@
    * Removes an event handler from the panel.
    * 
    * @param handler the handler to be removed
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by an add*Handler method instead
    */
   @Deprecated
   public void removeEventHandler(DisclosureHandler handler) {
diff --git a/user/src/com/google/gwt/user/client/ui/FiresDisclosureEvents.java b/user/src/com/google/gwt/user/client/ui/FiresDisclosureEvents.java
index 7799054..83f2828 100644
--- a/user/src/com/google/gwt/user/client/ui/FiresDisclosureEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/FiresDisclosureEvents.java
@@ -39,6 +39,8 @@
    * Removes a previously added handler interface.
    * 
    * @param handler the handler to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by an add*Handler method instead
    */
   @Deprecated
   void removeEventHandler(DisclosureHandler handler);
diff --git a/user/src/com/google/gwt/user/client/ui/FiresFormEvents.java b/user/src/com/google/gwt/user/client/ui/FiresFormEvents.java
index 47e1936..241a644 100644
--- a/user/src/com/google/gwt/user/client/ui/FiresFormEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/FiresFormEvents.java
@@ -40,6 +40,8 @@
    * Removes a previously added handler interface.
    * 
    * @param handler the handler interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by an add*Handler method instead
    */
   @Deprecated
   void removeFormHandler(FormHandler handler);
diff --git a/user/src/com/google/gwt/user/client/ui/FiresSuggestionEvents.java b/user/src/com/google/gwt/user/client/ui/FiresSuggestionEvents.java
index 176b136..38b9b65 100644
--- a/user/src/com/google/gwt/user/client/ui/FiresSuggestionEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/FiresSuggestionEvents.java
@@ -39,6 +39,8 @@
    * Removes a previously added handler interface.
    * 
    * @param handler the handler to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by an add*Handler method instead
    */
   @Deprecated
   void removeEventHandler(SuggestionHandler handler);
diff --git a/user/src/com/google/gwt/user/client/ui/FocusListenerCollection.java b/user/src/com/google/gwt/user/client/ui/FocusListenerCollection.java
index 8ec58ad..ae1725a 100644
--- a/user/src/com/google/gwt/user/client/ui/FocusListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/FocusListenerCollection.java
@@ -26,9 +26,7 @@
  * subclass of {@link ArrayList} assumes that all objects added to it will be of
  * type {@link com.google.gwt.user.client.ui.FocusListener}
  * 
- * @deprecated Use <code>{@link Widget#addDomHandler(com.google.gwt.event.shared.EventHandler, com.google.gwt.event.dom.client.DomEvent.Type) addDomHandler}(myHandler, FocusEvent.getType())</code>
- *             and <code>{@link Widget#addDomHandler(com.google.gwt.event.shared.EventHandler, com.google.gwt.event.dom.client.DomEvent.Type) addDomHandler}(myHandler, BlurEvent.getType())</code> to
- *             manage your widget's handlers instead
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class FocusListenerCollection extends ArrayList<FocusListener> {
diff --git a/user/src/com/google/gwt/user/client/ui/FocusPanel.java b/user/src/com/google/gwt/user/client/ui/FocusPanel.java
index 37dd2dc..80ca488 100644
--- a/user/src/com/google/gwt/user/client/ui/FocusPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/FocusPanel.java
@@ -75,6 +75,9 @@
     return addDomHandler(handler, ClickEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addClickHandler} instead
+   */
   @Deprecated
   public void addClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.add(this, listener);
@@ -84,11 +87,18 @@
     return addDomHandler(handler, FocusEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addFocusHandler} instead
+   */
   @Deprecated
   public void addFocusListener(FocusListener listener) {
     ListenerWrapper.WrappedFocusListener.add(this, listener);
   }
 
+  /**
+   * @deprecated Use {@link #addKeyDownHandler}, {@link
+   * #addKeyUpHandler} and {@link #addKeyPressHandler} instead
+   */
   @Deprecated
   public void addKeyboardListener(KeyboardListener listener) {
     ListenerWrapper.WrappedKeyboardListener.add(this, listener);
@@ -110,6 +120,11 @@
     return addDomHandler(handler, MouseDownEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addMouseOverHandler}, {@link
+   * #addMouseMoveHandler}, {@link #addMouseDownHandler}, {@link
+   * #addMouseUpHandler} and {@link #addMouseOutHandler} instead
+   */
   @Deprecated
   public void addMouseListener(MouseListener listener) {
     ListenerWrapper.WrappedMouseListener.add(this, listener);
@@ -135,6 +150,9 @@
     return addDomHandler(handler, MouseWheelEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addMouseWheelHandler} instead
+   */
   @Deprecated
   public void addMouseWheelListener(MouseWheelListener listener) {
     ListenerWrapper.WrappedMouseWheelListener.add(this, listener);
@@ -144,26 +162,46 @@
     return impl.getTabIndex(getElement());
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by {@link #addClickHandler} instead
+   */
   @Deprecated
   public void removeClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by {@link #addFocusHandler} instead
+   */
   @Deprecated
   public void removeFocusListener(FocusListener listener) {
     ListenerWrapper.WrappedFocusListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeKeyboardListener(KeyboardListener listener) {
     ListenerWrapper.WrappedKeyboardListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeMouseListener(MouseListener listener) {
     ListenerWrapper.WrappedMouseListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #addMouseWheelHandler} instead
+   */
   @Deprecated
   public void removeMouseWheelListener(MouseWheelListener listener) {
     ListenerWrapper.WrappedMouseWheelListener.remove(this, listener);
diff --git a/user/src/com/google/gwt/user/client/ui/FocusWidget.java b/user/src/com/google/gwt/user/client/ui/FocusWidget.java
index 9ed6c6c..f7390f8 100644
--- a/user/src/com/google/gwt/user/client/ui/FocusWidget.java
+++ b/user/src/com/google/gwt/user/client/ui/FocusWidget.java
@@ -91,6 +91,9 @@
     return addDomHandler(handler, ClickEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addClickHandler} instead
+   */
   @Deprecated
   public void addClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.add(this, listener);
@@ -100,11 +103,18 @@
     return addDomHandler(handler, FocusEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addFocusHandler} instead
+   */
   @Deprecated
   public void addFocusListener(FocusListener listener) {
     ListenerWrapper.WrappedFocusListener.add(this, listener);
   }
 
+  /**
+   * @deprecated Use {@link #addKeyDownHandler}, {@link
+   * #addKeyUpHandler} and {@link #addKeyPressHandler} instead
+   */
   @Deprecated
   public void addKeyboardListener(KeyboardListener listener) {
     ListenerWrapper.WrappedKeyboardListener.add(this, listener);
@@ -126,6 +136,11 @@
     return addDomHandler(handler, MouseDownEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addMouseOverHandler} {@link
+   * #addMouseMoveHandler}, {@link #addMouseDownHandler}, {@link
+   * #addMouseUpHandler} and {@link #addMouseOutHandler} instead
+   */
   @Deprecated
   public void addMouseListener(MouseListener listener) {
     ListenerWrapper.WrappedMouseListener.add(this, listener);
@@ -151,6 +166,9 @@
     return addDomHandler(handler, MouseWheelEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addMouseWheelHandler} instead
+   */
   @Deprecated
   public void addMouseWheelListener(MouseWheelListener listener) {
     ListenerWrapper.WrappedMouseWheelListener.add(this, listener);
@@ -174,26 +192,46 @@
     return !DOM.getElementPropertyBoolean(getElement(), "disabled");
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by {@link #addClickHandler} instead
+   */
   @Deprecated
   public void removeClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by {@link #addFocusHandler} instead
+   */
   @Deprecated
   public void removeFocusListener(FocusListener listener) {
     ListenerWrapper.WrappedFocusListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeKeyboardListener(KeyboardListener listener) {
     ListenerWrapper.WrappedKeyboardListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeMouseListener(MouseListener listener) {
     ListenerWrapper.WrappedMouseListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #addMouseWheelHandler} instead
+   */
   @Deprecated
   public void removeMouseWheelListener(MouseWheelListener listener) {
     ListenerWrapper.WrappedMouseWheelListener.remove(this, listener);
diff --git a/user/src/com/google/gwt/user/client/ui/FormHandlerCollection.java b/user/src/com/google/gwt/user/client/ui/FormHandlerCollection.java
index 7b74c9c..abdd2db 100644
--- a/user/src/com/google/gwt/user/client/ui/FormHandlerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/FormHandlerCollection.java
@@ -23,7 +23,7 @@
  * of ArrayList assumes that all items added to it will be of type
  * {@link com.google.gwt.user.client.ui.FormHandler}.
  * 
- * @deprecated {@link FormPanel} now implements all handler management internally
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class FormHandlerCollection extends ArrayList<FormHandler> {
@@ -34,6 +34,7 @@
    * 
    * @param sender the object sending the event
    * @param results the results of the form submission
+   * @deprecated {@link FormPanel} now implements all handler management internally
    */
   @Deprecated
   public void fireOnComplete(FormPanel sender, String results) {
@@ -49,6 +50,7 @@
    * 
    * @param sender the object sending the event
    * @return <code>true</code> if the event should be cancelled
+   * @deprecated {@link FormPanel} now implements all handler management internally
    */
   @Deprecated
   public boolean fireOnSubmit(FormPanel sender) {
diff --git a/user/src/com/google/gwt/user/client/ui/FormPanel.java b/user/src/com/google/gwt/user/client/ui/FormPanel.java
index 5af185e..404fcbb 100644
--- a/user/src/com/google/gwt/user/client/ui/FormPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/FormPanel.java
@@ -402,6 +402,10 @@
     }
   }
 
+  /**
+   * @deprecated Use {@link #addSubmitCompleteHandler} and
+   * {@link #addSubmitHandler} instead
+   */
   @Deprecated
   public void addFormHandler(FormHandler handler) {
     ListenerWrapper.WrappedOldFormHandler.add(this, handler);
@@ -492,6 +496,10 @@
     }
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by and add*Handler method instead
+   */
   @Deprecated
   public void removeFormHandler(FormHandler handler) {
     ListenerWrapper.WrappedOldFormHandler.remove(this, handler);
diff --git a/user/src/com/google/gwt/user/client/ui/HTMLTable.java b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
index 41066ff..7519439 100644
--- a/user/src/com/google/gwt/user/client/ui/HTMLTable.java
+++ b/user/src/com/google/gwt/user/client/ui/HTMLTable.java
@@ -956,6 +956,9 @@
    * Removes the specified table listener.
    * 
    * @param listener listener to remove
+   *
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
    */
   @Deprecated
   public void removeTableListener(TableListener listener) {
diff --git a/user/src/com/google/gwt/user/client/ui/Hyperlink.java b/user/src/com/google/gwt/user/client/ui/Hyperlink.java
index ca070a3..83084ac 100644
--- a/user/src/com/google/gwt/user/client/ui/Hyperlink.java
+++ b/user/src/com/google/gwt/user/client/ui/Hyperlink.java
@@ -113,6 +113,9 @@
     return addHandler(handler, ClickEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addClickHandler} instead
+   */
   @Deprecated
   public void addClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.add(this, listener);
@@ -145,6 +148,10 @@
     }
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.remove(this, listener);
diff --git a/user/src/com/google/gwt/user/client/ui/Image.java b/user/src/com/google/gwt/user/client/ui/Image.java
index e3bc47e..04d60c6 100644
--- a/user/src/com/google/gwt/user/client/ui/Image.java
+++ b/user/src/com/google/gwt/user/client/ui/Image.java
@@ -395,6 +395,9 @@
     return addHandler(handler, ClickEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addClickHandler} instead
+   */
   @Deprecated
   public void addClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.add(this, listener);
@@ -408,6 +411,10 @@
     return super.addHandler(handler, LoadEvent.getType());
   }
 
+  /**
+   * @deprecated use {@link com.google.gwt.event.dom.client.LoadHandler} and
+   *             {@link com.google.gwt.event.dom.client.ErrorHandler} instead
+   */
   @Deprecated
   public void addLoadListener(LoadListener listener) {
     ListenerWrapper.WrappedLoadListener.add(this, listener);
@@ -417,6 +424,11 @@
     return addDomHandler(handler, MouseDownEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addMouseOverHandler} {@link
+   * #addMouseMoveHandler}, {@link #addMouseDownHandler}, {@link
+   * #addMouseUpHandler} and {@link #addMouseOutHandler} instead
+   */
   @Deprecated
   public void addMouseListener(MouseListener listener) {
     ListenerWrapper.WrappedMouseListener.add(this, listener);
@@ -442,6 +454,9 @@
     return addDomHandler(handler, MouseWheelEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addMouseWheelHandler} instead
+   */
   @Deprecated
   public void addMouseWheelListener(MouseWheelListener listener) {
     ListenerWrapper.WrappedMouseWheelListener.add(this, listener);
@@ -506,21 +521,38 @@
     return state.getWidth(this);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by {@link #addClickHandler} instead
+   */
   @Deprecated
   public void removeClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeLoadListener(LoadListener listener) {
     ListenerWrapper.WrappedLoadListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeMouseListener(MouseListener listener) {
     ListenerWrapper.WrappedMouseListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #addMouseWheelHandler}
+   * instead
+   */
   @Deprecated
   public void removeMouseWheelListener(MouseWheelListener listener) {
     ListenerWrapper.WrappedMouseWheelListener.remove(this, listener);
diff --git a/user/src/com/google/gwt/user/client/ui/KeyboardListenerCollection.java b/user/src/com/google/gwt/user/client/ui/KeyboardListenerCollection.java
index 315913a..62dbde8 100644
--- a/user/src/com/google/gwt/user/client/ui/KeyboardListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/KeyboardListenerCollection.java
@@ -25,9 +25,7 @@
  * subclass of {@link ArrayList} assumes that all objects added to it will be of
  * type {@link com.google.gwt.user.client.ui.KeyboardListener}.
  * 
- * @deprecated use
- *             <code>addDomHandler(myHandler, Key(Down/Up/Press)Event.getType())</code>
- *             to manage handlers within your widget
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class KeyboardListenerCollection extends ArrayList<KeyboardListener> {
diff --git a/user/src/com/google/gwt/user/client/ui/Label.java b/user/src/com/google/gwt/user/client/ui/Label.java
index 9166b7b..547bddf 100644
--- a/user/src/com/google/gwt/user/client/ui/Label.java
+++ b/user/src/com/google/gwt/user/client/ui/Label.java
@@ -128,6 +128,9 @@
     return addDomHandler(handler, ClickEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addClickHandler} instead
+   */
   @Deprecated
   public void addClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.add(this, listener);
@@ -137,6 +140,11 @@
     return addDomHandler(handler, MouseDownEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addMouseOverHandler} {@link
+   * #addMouseMoveHandler}, {@link #addMouseDownHandler}, {@link
+   * #addMouseUpHandler} and {@link #addMouseOutHandler} instead
+   */
   @Deprecated
   public void addMouseListener(MouseListener listener) {
     ListenerWrapper.WrappedMouseListener.add(this, listener);
@@ -162,6 +170,9 @@
     return addDomHandler(handler, MouseWheelEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addMouseWheelHandler} instead
+   */
   @Deprecated
   public void addMouseWheelListener(MouseWheelListener listener) {
     ListenerWrapper.WrappedMouseWheelListener.add(this, listener);
@@ -183,16 +194,28 @@
     return !getElement().getStyle().getProperty("whiteSpace").equals("nowrap");
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by {@link #addClickHandler} instead
+   */
   @Deprecated
   public void removeClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeMouseListener(MouseListener listener) {
     ListenerWrapper.WrappedMouseListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #addMouseWheelHandler} instead
+   */
   @Deprecated
   public void removeMouseWheelListener(MouseWheelListener listener) {
     ListenerWrapper.WrappedMouseWheelListener.remove(this, listener);
diff --git a/user/src/com/google/gwt/user/client/ui/ListBox.java b/user/src/com/google/gwt/user/client/ui/ListBox.java
index 35b1b87..5794de6 100644
--- a/user/src/com/google/gwt/user/client/ui/ListBox.java
+++ b/user/src/com/google/gwt/user/client/ui/ListBox.java
@@ -104,6 +104,9 @@
     return addDomHandler(handler, ChangeEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addChangeHandler} instead
+   */
   @Deprecated
   public void addChangeListener(ChangeListener listener) {
     ListenerWrapper.WrappedChangeListener.add(this, listener);
@@ -257,6 +260,10 @@
     return getSelectElement().isMultiple();
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #addChangeHandler} instead
+   */
   @Deprecated
   public void removeChangeListener(ChangeListener listener) {
     ListenerWrapper.WrappedChangeListener.remove(this, listener);
@@ -316,7 +323,6 @@
    */
   @Deprecated
   public void setMultipleSelect(boolean multiple) {
-    // TODO: we can remove the above doc admonition once we address issue 1007
     getSelectElement().setMultiple(multiple);
   }
 
diff --git a/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java b/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
index a3a5435..fae414a 100644
--- a/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
+++ b/user/src/com/google/gwt/user/client/ui/ListenerWrapper.java
@@ -463,18 +463,12 @@
 

     public void onMouseDown(MouseDownEvent event) {

       Widget source = getSource(event);

-      Element elem = source.getElement();

-      getListener().onMouseDown(source,

-          Event.getRelativeX(event.getNativeEvent(), elem),

-          Event.getRelativeY(event.getNativeEvent(), elem));

+      getListener().onMouseDown(source, event.getX(), event.getY());

     }

 

     public void onMouseMove(MouseMoveEvent event) {

       Widget source = getSource(event);

-      Element elem = source.getElement();

-      getListener().onMouseMove(source,

-          Event.getRelativeX(event.getNativeEvent(), elem),

-          Event.getRelativeY(event.getNativeEvent(), elem));

+      getListener().onMouseMove(source, event.getX(), event.getY());

     }

 

     public void onMouseOut(MouseOutEvent event) {

@@ -487,10 +481,7 @@
 

     public void onMouseUp(MouseUpEvent event) {

       Widget source = getSource(event);

-      Element elem = source.getElement();

-      getListener().onMouseUp(source,

-          Event.getRelativeX(event.getNativeEvent(), elem),

-          Event.getRelativeY(event.getNativeEvent(), elem));

+      getListener().onMouseUp(source, event.getX(), event.getY());

     }

   }

   /**

@@ -652,6 +643,9 @@
   static class WrappedOldSuggestionHandler extends

       ListenerWrapper<SuggestionHandler> implements

       SelectionHandler<SuggestOracle.Suggestion> {

+    /**

+     * @deprecated will be removed in GWT 2.0 along with the listener classes

+     */

     @Deprecated

     public static void add(SuggestBox source, SuggestionHandler listener) {

       source.addSelectionHandler(new WrappedOldSuggestionHandler(listener));

@@ -696,6 +690,9 @@
 

   static class WrappedTableListener extends ListenerWrapper<TableListener>

       implements ClickHandler {

+    /**

+     * @deprecated will be removed in GWT 2.0 along with the listener classes

+     */

     @Deprecated

     public static void add(HasClickHandlers source, TableListener listener) {

       source.addClickHandler(new WrappedTableListener(listener));

@@ -721,6 +718,9 @@
 

   static class WrappedTabListener extends ListenerWrapper<TabListener>

       implements SelectionHandler<Integer>, BeforeSelectionHandler<Integer> {

+    /**

+     * @deprecated will be removed in GWT 2.0 along with the listener classes

+     */

     @Deprecated

     public static void add(TabBar source, TabListener listener) {

       WrappedTabListener t = new WrappedTabListener(listener);

@@ -759,6 +759,9 @@
   static class WrappedTreeListener extends ListenerWrapper<TreeListener>

       implements SelectionHandler<TreeItem>, CloseHandler<TreeItem>,

       OpenHandler<TreeItem> {

+    /**

+     * @deprecated will be removed in GWT 2.0 along with the listener classes

+     */

     @Deprecated

     public static void add(com.google.gwt.user.client.ui.Tree tree,

         TreeListener listener) {

diff --git a/user/src/com/google/gwt/user/client/ui/LoadListener.java b/user/src/com/google/gwt/user/client/ui/LoadListener.java
index 47acf54..8164979 100644
--- a/user/src/com/google/gwt/user/client/ui/LoadListener.java
+++ b/user/src/com/google/gwt/user/client/ui/LoadListener.java
@@ -5,7 +5,7 @@
  * use this file except in compliance with the License. You may obtain a copy of
  * the License at
  * 
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0/
  * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
@@ -20,7 +20,7 @@
 /**
  * Event listener interface for 'load' events.
  * 
- * @deprecated use {@link com.google.gwt.event.dom.client.LoadHandler} and/or
+ * @deprecated use {@link com.google.gwt.event.dom.client.LoadHandler} and
  *             {@link com.google.gwt.event.dom.client.ErrorHandler} instead
  */
 @Deprecated
diff --git a/user/src/com/google/gwt/user/client/ui/LoadListenerCollection.java b/user/src/com/google/gwt/user/client/ui/LoadListenerCollection.java
index e39b182..bdfafe8 100644
--- a/user/src/com/google/gwt/user/client/ui/LoadListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/LoadListenerCollection.java
@@ -22,9 +22,7 @@
  * subclass of {@link ArrayList} assumes that all objects added to it will be of
  * type {@link com.google.gwt.user.client.ui.LoadListener}.
  * 
- * @deprecated use
- *             <code>addDomHandler(myHandler, (Load/Error)Event.getType())</code>
- *             to manage handlers within your widget instead
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class LoadListenerCollection extends ArrayList<LoadListener> {
diff --git a/user/src/com/google/gwt/user/client/ui/MenuBar.java b/user/src/com/google/gwt/user/client/ui/MenuBar.java
index 3bc10ee..2e02ca2 100644
--- a/user/src/com/google/gwt/user/client/ui/MenuBar.java
+++ b/user/src/com/google/gwt/user/client/ui/MenuBar.java
@@ -16,6 +16,7 @@
 package com.google.gwt.user.client.ui;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.EventTarget;
 import com.google.gwt.event.dom.client.KeyCodes;
 import com.google.gwt.event.logical.shared.CloseEvent;
 import com.google.gwt.event.logical.shared.CloseHandler;
@@ -508,7 +509,7 @@
   /**
    * Closes the menu bar.
    *
-   * @deprecated use {@link #addCloseHandler(CloseHandler)} instead.
+   * @deprecated Use {@link #addCloseHandler(CloseHandler)} instead
    */
   @Deprecated
   public void onPopupClosed(PopupPanel sender, boolean autoClosed) {
@@ -1016,9 +1017,9 @@
             case Event.ONMOUSEDOWN:
               // If the event target is part of the parent menu, suppress the
               // event altogether.
-              com.google.gwt.dom.client.Element target = event.getNativeEvent().getTarget();
+              EventTarget target = event.getNativeEvent().getEventTarget();
               Element parentMenuElement = item.getParentMenu().getElement();
-              if (parentMenuElement.isOrHasChild(target)) {
+              if (parentMenuElement.isOrHasChild(Element.as(target))) {
                 event.cancel();
                 return;
               }
diff --git a/user/src/com/google/gwt/user/client/ui/MouseListener.java b/user/src/com/google/gwt/user/client/ui/MouseListener.java
index 0ad8fb8..b0baf38 100644
--- a/user/src/com/google/gwt/user/client/ui/MouseListener.java
+++ b/user/src/com/google/gwt/user/client/ui/MouseListener.java
@@ -23,7 +23,7 @@
  * @deprecated use {@link com.google.gwt.event.dom.client.MouseDownHandler},
  *             {@link com.google.gwt.event.dom.client.MouseUpHandler},
  *             {@link com.google.gwt.event.dom.client.MouseOverHandler},
- *             {@link com.google.gwt.event.dom.client.MouseMoveHandler}, and/or
+ *             {@link com.google.gwt.event.dom.client.MouseMoveHandler}, and
  *             {@link com.google.gwt.event.dom.client.MouseOutHandler} instead
  */
 @Deprecated
diff --git a/user/src/com/google/gwt/user/client/ui/MouseListenerCollection.java b/user/src/com/google/gwt/user/client/ui/MouseListenerCollection.java
index 390b2c6..49d849a 100644
--- a/user/src/com/google/gwt/user/client/ui/MouseListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/MouseListenerCollection.java
@@ -27,9 +27,7 @@
  * subclass of {@link ArrayList} assumes that all objects added to it will be of
  * type {@link com.google.gwt.user.client.ui.MouseListener}.
  * 
- * @deprecated use
- *             <code>addDomHandler(myHandler, Mouse(Down/Up/Move/Over/Out)Event.getType())</code>
- *             to manage handlers within your widget
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class MouseListenerCollection extends ArrayList<MouseListener> {
diff --git a/user/src/com/google/gwt/user/client/ui/MouseWheelListener.java b/user/src/com/google/gwt/user/client/ui/MouseWheelListener.java
index 65c4499..efdf4e4 100644
--- a/user/src/com/google/gwt/user/client/ui/MouseWheelListener.java
+++ b/user/src/com/google/gwt/user/client/ui/MouseWheelListener.java
@@ -22,7 +22,6 @@
  * 
  * @deprecated use {@link com.google.gwt.event.dom.client.MouseWheelHandler}
  *             instead
- * 
  */
 @Deprecated
 public interface MouseWheelListener extends EventListener {
@@ -32,6 +31,8 @@
    * 
    * @param sender the widget sending the event
    * @param velocity the velocity information for the wheel event
+   * @deprecated use {@link com.google.gwt.event.dom.client.MouseWheelHandler#onMouseWheel}
+   *             instead
    */
   @Deprecated
   void onMouseWheel(Widget sender, MouseWheelVelocity velocity);
diff --git a/user/src/com/google/gwt/user/client/ui/MouseWheelListenerCollection.java b/user/src/com/google/gwt/user/client/ui/MouseWheelListenerCollection.java
index 16d10a1..f28555e 100644
--- a/user/src/com/google/gwt/user/client/ui/MouseWheelListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/MouseWheelListenerCollection.java
@@ -25,9 +25,7 @@
  * This subclass of {@link ArrayList} assumes that all objects added to it will
  * be of type {@link com.google.gwt.user.client.ui.MouseWheelListener}.
  * 
- * @deprecated use
- *             <code>addDomHandler(myHandler, MouseWheelEvent.getType())</code>
- *             to manage handlers within your widget
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class MouseWheelListenerCollection extends ArrayList<MouseWheelListener> {
diff --git a/user/src/com/google/gwt/user/client/ui/PopupListener.java b/user/src/com/google/gwt/user/client/ui/PopupListener.java
index 0a38b23..a892a95 100644
--- a/user/src/com/google/gwt/user/client/ui/PopupListener.java
+++ b/user/src/com/google/gwt/user/client/ui/PopupListener.java
@@ -32,6 +32,8 @@
    * @param sender popup being closed.
    * @param autoClosed <code>true</code> if the popup was automatically closed;
    *          <code>false</code> if it was closed programmatically.
+   * @deprecated use {@link com.google.gwt.event.logical.shared.CloseHandler#onClose}
+   *             instead
    */
   @Deprecated
   void onPopupClosed(PopupPanel sender, boolean autoClosed);
diff --git a/user/src/com/google/gwt/user/client/ui/PopupListenerCollection.java b/user/src/com/google/gwt/user/client/ui/PopupListenerCollection.java
index b1c21b4..6f1ce71 100644
--- a/user/src/com/google/gwt/user/client/ui/PopupListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/PopupListenerCollection.java
@@ -22,8 +22,7 @@
  * subclass of {@link ArrayList} assumes that all objects added to it will be of
  * type {@link com.google.gwt.user.client.ui.PopupListener}.
  * 
- * @deprecated use <code>addHandler(myHandler,  CloseEvent.getType())</code> to
- *             manage handlers within your widget instead
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class PopupListenerCollection extends ArrayList<PopupListener> {
@@ -34,6 +33,8 @@
    * @param sender the widget sending the event.
    * @param autoClosed <code>true</code> if the popup was automatically closed;
    *          <code>false</code> if it was closed programmatically.
+   * @deprecated use {@link com.google.gwt.event.logical.shared.CloseHandler#onClose}
+   *             instead
    */
   @Deprecated
   public void firePopupClosed(PopupPanel sender, boolean autoClosed) {
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 08fd2b8..1a2e62e 100644
--- a/user/src/com/google/gwt/user/client/ui/PopupPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/PopupPanel.java
@@ -19,6 +19,7 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.EventTarget;
 import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.logical.shared.CloseEvent;
 import com.google.gwt.event.logical.shared.CloseHandler;
@@ -364,6 +365,9 @@
     return addHandler(handler, CloseEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addCloseHandler} instead
+   */
   @Deprecated
   public void addPopupListener(final PopupListener listener) {
     ListenerWrapper.WrappedPopupListener.add(this, listener);
@@ -530,7 +534,7 @@
   }
 
   /**
-   * @deprecated Use <code>onPreviewNativeEvent(NativePreviewEvent)</code>
+   * @deprecated Use {@link #onPreviewNativeEvent(NativePreviewEvent)}
    *             instead
    */
   @Deprecated
@@ -546,7 +550,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 <code>onPreviewNativeEvent(NativePreviewEvent)</code>
+   * @deprecated Use {@link #onPreviewNativeEvent(NativePreviewEvent)}
    *             instead
    */
   @Deprecated
@@ -562,7 +566,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 <code>onPreviewNativeEvent(NativePreviewEvent)</code>
+   * @deprecated Use {@link #onPreviewNativeEvent(NativePreviewEvent)}
    *             instead
    */
   @Deprecated
@@ -578,7 +582,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 <code>onPreviewNativeEvent(NativePreviewEvent)</code>
+   * @deprecated Use {@link #onPreviewNativeEvent(NativePreviewEvent)}
    *             instead
    */
   @Deprecated
@@ -598,6 +602,10 @@
     }
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #addCloseHandler} instead
+   */
   @Deprecated
   public void removePopupListener(PopupListener listener) {
     ListenerWrapper.WrappedPopupListener.remove(this, listener);
@@ -902,10 +910,12 @@
       return false;
     }
 
-    Element target = event.getTarget();
-    for (Element elem : autoHidePartners) {
-      if (elem.isOrHasChild(target)) {
-        return true;
+    EventTarget target = event.getEventTarget();
+    if (Element.is(target)) {
+      for (Element elem : autoHidePartners) {
+        if (elem.isOrHasChild(Element.as(target))) {
+          return true;
+        }
       }
     }
     return false;
@@ -918,7 +928,11 @@
    * @return true if the event targets the popup
    */
   private boolean eventTargetsPopup(NativeEvent event) {
-    return getElement().isOrHasChild(event.getTarget());
+    EventTarget target = event.getEventTarget();
+    if (Element.is(target)) {
+      return getElement().isOrHasChild(Element.as(target));
+    }
+    return false;
   }
 
   /**
diff --git a/user/src/com/google/gwt/user/client/ui/PushButton.java b/user/src/com/google/gwt/user/client/ui/PushButton.java
index daad75d..92b0c6c 100644
--- a/user/src/com/google/gwt/user/client/ui/PushButton.java
+++ b/user/src/com/google/gwt/user/client/ui/PushButton.java
@@ -75,6 +75,7 @@
    * 
    * @param upImage image for the default (up) face of the button
    * @param listener the click listener
+   * @deprecated Use {@link #PushButton(Image, ClickHandler)} instead
    */
   @Deprecated
   public PushButton(Image upImage, ClickListener listener) {
@@ -108,6 +109,7 @@
    * @param upImage image for the default(up) face of the button
    * @param downImage image for the down face of the button
    * @param listener clickListener
+   * @deprecated Use {@link #PushButton(Image, Image, ClickHandler)} instead
    */
   @Deprecated
   public PushButton(Image upImage, Image downImage, ClickListener listener) {
@@ -141,6 +143,7 @@
    * 
    * @param upText the text for the default (up) face of the button
    * @param listener the click listener
+   * @deprecated Use {@link #PushButton(String, ClickHandler)} instead
    */
   @Deprecated
   public PushButton(String upText, ClickListener listener) {
@@ -174,6 +177,7 @@
    * @param upText the text for the default (up) face of the button
    * @param downText the text for down face of the button
    * @param listener the click listener
+   * @deprecated Use {@link #PushButton(String, String, ClickHandler)} instead
    */
   @Deprecated
   public PushButton(String upText, String downText, ClickListener listener) {
diff --git a/user/src/com/google/gwt/user/client/ui/ScrollListenerCollection.java b/user/src/com/google/gwt/user/client/ui/ScrollListenerCollection.java
index 15a0b03..c9a20c4 100644
--- a/user/src/com/google/gwt/user/client/ui/ScrollListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/ScrollListenerCollection.java
@@ -22,8 +22,7 @@
  * subclass of {@link ArrayList} assumes that all objects added to it will be of
  * type {@link com.google.gwt.user.client.ui.ScrollListener}.
  * 
- * @deprecated use <code>addDomHandler(myHandler, ScrollEvent.getType())</code>
- *             to manage handlers within your widget instead
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class ScrollListenerCollection extends ArrayList<ScrollListener> {
diff --git a/user/src/com/google/gwt/user/client/ui/ScrollPanel.java b/user/src/com/google/gwt/user/client/ui/ScrollPanel.java
index 66a4dd8..7d9d749 100644
--- a/user/src/com/google/gwt/user/client/ui/ScrollPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/ScrollPanel.java
@@ -52,6 +52,9 @@
     return addDomHandler(handler, ScrollEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addScrollHandler} instead
+   */
   @Deprecated
   public void addScrollListener(ScrollListener listener) {
     ListenerWrapper.WrappedScrollListener.add(this, listener);
@@ -87,6 +90,10 @@
     return DOM.getElementPropertyInt(getElement(), "scrollTop");
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link addScrollHandler} instead
+   */
   @Deprecated
   public void removeScrollListener(ScrollListener listener) {
     ListenerWrapper.WrappedScrollListener.remove(this, listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesChangeEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesChangeEvents.java
index 1987220..e395ead 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesChangeEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesChangeEvents.java
@@ -44,6 +44,9 @@
    * Removes a previously added listener interface.
    * 
    * @param listener the listener interface to remove
+   *
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #addChangeHandler} instead
    */
   @Deprecated
   void removeChangeListener(ChangeListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesClickEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesClickEvents.java
index 36d2c36..f27d80b 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesClickEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesClickEvents.java
@@ -38,6 +38,8 @@
    * Removes a previously added listener interface.
    * 
    * @param listener the listener interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #addClickHandler} instead
    */
   @Deprecated
   void removeClickListener(ClickListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesFocusEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesFocusEvents.java
index 6f56adb..b137daa 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesFocusEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesFocusEvents.java
@@ -39,6 +39,8 @@
    * Removes a previously added listener interface.
    * 
    * @param listener the listener interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #addFocusHandler} instead
    */
   @Deprecated
   void removeFocusListener(FocusListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesKeyboardEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesKeyboardEvents.java
index 78e1052..850561c 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesKeyboardEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesKeyboardEvents.java
@@ -41,6 +41,8 @@
    * Removes a previously added listener interface.
    * 
    * @param listener the listener interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
    */
   @Deprecated
   void removeKeyboardListener(KeyboardListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesLoadEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesLoadEvents.java
index 1536e55..0f215a8 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesLoadEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesLoadEvents.java
@@ -29,7 +29,7 @@
    * Adds a listener interface to receive load events.
    * 
    * @param listener the listener interface to add
-   * @deprecated use <code>addLoadHandler</code> instead
+   * @deprecated use {@link HasLoadHandlers#addLoadHandler} instead
    */
   @Deprecated
   void addLoadListener(LoadListener listener);
@@ -38,6 +38,8 @@
    * Removes a previously added listener interface.
    * 
    * @param listener the listener interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link HasLoadHandlers#addLoadListener} instead
    */
   @Deprecated
   void removeLoadListener(LoadListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesMouseEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesMouseEvents.java
index 96a6cad..f8f78a5 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesMouseEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesMouseEvents.java
@@ -29,7 +29,8 @@
    * Adds a listener interface to receive mouse events.
    * 
    * @param listener the listener interface to add
-   * @deprecated use <code>addMouse(Down/Up/Over/Out/Move/Scroll)Handler</code>
+   * @deprecated use add* methods of {@link
+   *             com.google.gwt.event.dom.client.HasAllMouseHandlers}
    *             instead
    */
   @Deprecated
@@ -39,6 +40,8 @@
    * Removes a previously added listener interface.
    * 
    * @param listener the listener interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
    */
   @Deprecated
   void removeMouseListener(MouseListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesMouseWheelEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesMouseWheelEvents.java
index f342544..49fdc16 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesMouseWheelEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesMouseWheelEvents.java
@@ -19,7 +19,7 @@
  * A widget that implements this interface sources the events defined by the
  * {@link com.google.gwt.user.client.ui.MouseWheelListener} interface.
  * 
- * @deprecated use {@link com.google.gwt.event.dom.client.HasMouseWheelHandlers}
+ * @deprecated Use {@link com.google.gwt.event.dom.client.HasMouseWheelHandlers}
  *             instead
  */
 @Deprecated
@@ -29,7 +29,9 @@
    * Adds a listener interface to receive mouse events.
    * 
    * @param listener the listener interface to add
-   * @deprecated use <code>addMouseWheelHandler</code>
+   * @deprecated Use {@link
+   * com.google.gwt.event.dom.client.HasMouseWheelHandlers#addMouseWheelHandler}
+   * instead
    */
   @Deprecated
   void addMouseWheelListener(MouseWheelListener listener);
@@ -38,6 +40,10 @@
    * Removes a previously added listener interface.
    * 
    * @param listener the listener interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link
+   * com.google.gwt.event.dom.client.HasMouseWheelHandlers#addMouseWheelHandler}
+   * instead
    */
   @Deprecated
   void removeMouseWheelListener(MouseWheelListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesPopupEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesPopupEvents.java
index 6b3ec61..b4d7447 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesPopupEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesPopupEvents.java
@@ -29,7 +29,8 @@
    * Adds a listener interface to receive popup events.
    * 
    * @param listener the listener interface to add.
-   * @deprecated use <code>addCloseHandler<PopupPanel></code> instead
+   * @deprecated use {@link com.google.gwt.event.logical.shared.HasCloseHandlers#addCloseHandler}
+   *             instead
    */
   @Deprecated
   void addPopupListener(PopupListener listener);
@@ -38,6 +39,10 @@
    * Removes a previously added popup listener.
    * 
    * @param listener the listener interface to remove.
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link
+   * com.google.gwt.event.logical.shared.HasCloseHandlers#addCloseHandler}
+   * instead
    */
   @Deprecated
   void removePopupListener(PopupListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesScrollEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesScrollEvents.java
index fd785e2..8b993a2 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesScrollEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesScrollEvents.java
@@ -29,7 +29,8 @@
    * Adds a listener interface to receive scroll events.
    * 
    * @param listener the listener interface to add
-   * @deprecated use addScrollHandler instead
+   * @deprecated use {@link com.google.gwt.event.dom.client.HasScrollHandlers#addScrollHandler}
+   *             instead
    */
   @Deprecated
   void addScrollListener(ScrollListener listener);
@@ -38,6 +39,10 @@
    * Removes a previously added scroll listener.
    * 
    * @param listener the listener interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link
+   * com.google.gwt.event.dom.client.HasScrollHandlers#addScrollHandler}
+   * instead instead
    */
   @Deprecated
   void removeScrollListener(ScrollListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesTabEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesTabEvents.java
index d017a68..6334fe3 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesTabEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesTabEvents.java
@@ -31,7 +31,11 @@
    * Adds a listener interface to receive click events.
    * 
    * @param listener the listener interface to add
-   * @deprecated use addBeforeSelectionHandler and addSelectionHandler instead
+   * @deprecated use (@link
+   * com.google.gwt.event.logical.shared.HasBeforeSelectionHandlers#addBeforeSelectionHandler}
+   * and {@link
+   * com.google.gwt.event.logical.shared.SelectionHandler#addSelectionHandler}
+   * instead
    */
   @Deprecated
   void addTabListener(TabListener listener);
@@ -40,6 +44,8 @@
    * Removes a previously added listener interface.
    * 
    * @param listener the listener interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by and add*Handler method instead
    */
   @Deprecated
   void removeTabListener(TabListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesTableEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesTableEvents.java
index 6ffd7d0..91b000b 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesTableEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesTableEvents.java
@@ -30,7 +30,7 @@
    * Adds a listener interface to receive click events.
    * 
    * @param listener the listener interface to add
-   * @deprecated use addClickHandler and getCell(DomEvent) instead
+   * @deprecated See the {@link SourcesTableEvents interface doc} instead
    */
   @Deprecated
   void addTableListener(TableListener listener);
@@ -39,6 +39,8 @@
    * Removes a previously added listener interface.
    * 
    * @param listener the listener interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
    */
   @Deprecated
   void removeTableListener(TableListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SourcesTreeEvents.java b/user/src/com/google/gwt/user/client/ui/SourcesTreeEvents.java
index 2a986df..c579f27 100644
--- a/user/src/com/google/gwt/user/client/ui/SourcesTreeEvents.java
+++ b/user/src/com/google/gwt/user/client/ui/SourcesTreeEvents.java
@@ -20,8 +20,8 @@
  * {@link com.google.gwt.user.client.ui.TreeListener} interface.
  * 
  * @deprecated use
- *             {@link com.google.gwt.event.logical.shared.HasBeforeSelectionHandlers}
- *             , {@link com.google.gwt.event.logical.shared.HasOpenHandlers},
+ *             {@link com.google.gwt.event.logical.shared.HasBeforeSelectionHandlers},
+ *             {@link com.google.gwt.event.logical.shared.HasOpenHandlers} and
  *             {@link com.google.gwt.event.dom.client.HasClickHandlers} instead
  */
 @Deprecated
@@ -31,8 +31,10 @@
    * Adds a listener interface to receive tree events.
    * 
    * @param listener the listener interface to add
-   * @deprecated use addSelectionHandler,addOpenHandler, and addCloseHandler
-   *             instead
+   * @deprecated use {@link 
+   * com.google.gwt.event.logical.shared.HasBeforeSelectionHandlers#addBeforeSelectionHandler},
+   * {@link com.google.gwt.event.logical.shared.HasOpenHandlers#addOpenHandler} and
+   * {@link com.google.gwt.event.dom.client.HasClickHandlers#addClickHandler} instead
    */
   @Deprecated
   void addTreeListener(TreeListener listener);
@@ -41,6 +43,8 @@
    * Removes a previously added listener interface.
    * 
    * @param listener the listener interface to remove
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
    */
   @Deprecated
   void removeTreeListener(TreeListener listener);
diff --git a/user/src/com/google/gwt/user/client/ui/SuggestBox.java b/user/src/com/google/gwt/user/client/ui/SuggestBox.java
index 7f30b3d..7f63c03 100644
--- a/user/src/com/google/gwt/user/client/ui/SuggestBox.java
+++ b/user/src/com/google/gwt/user/client/ui/SuggestBox.java
@@ -331,7 +331,7 @@
    * source Widget for these events will be the SuggestBox.
    * 
    * @param listener the listener interface to add
-   * @deprecated use getTextBox().addChangeHandler instead
+   * @deprecated use {@link #getTextBox}().addChangeHandler instead
    */
   @Deprecated
   public void addChangeListener(final ChangeListener listener) {
@@ -343,7 +343,7 @@
    * source Widget for these events will be the SuggestBox.
    * 
    * @param listener the listener interface to add
-   * @deprecated use getTextBox().addClickHandler instead
+   * @deprecated use {@link #getTextBox}().addClickHandler instead
    */
   @Deprecated
   public void addClickListener(final ClickListener listener) {
@@ -355,7 +355,7 @@
   /**
    * Adds an event to this handler.
    * 
-   * @deprecated use addSelectionHandler instead.
+   * @deprecated use {@link #addSelectionHandler} instead.
    */
   @Deprecated
   public void addEventHandler(final SuggestionHandler handler) {
@@ -367,7 +367,7 @@
    * source Widget for these events will be the SuggestBox.
    * 
    * @param listener the listener interface to add
-   * @deprecated use getTextBox().addFocusHandler/addBlurHandler() instead
+   * @deprecated use {@link getTextBox}().addFocusHandler/addBlurHandler() instead
    */
   @Deprecated
   public void addFocusListener(final FocusListener listener) {
@@ -376,6 +376,10 @@
     focus.setSource(this);
   }
 
+  /**
+   * @deprecated Use {@link #addKeyDownHandler}, {@link
+   * #addKeyUpHandler} and {@link #addKeyPressHandler} instead
+   */
   @Deprecated
   public void addKeyboardListener(KeyboardListener listener) {
     ListenerWrapper.WrappedKeyboardListener.add(this, listener);
@@ -472,26 +476,46 @@
     return suggestionPopup.isShowing();
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #getTextBox}().addChangeHandler instead
+   */
   @Deprecated
   public void removeChangeListener(ChangeListener listener) {
     ListenerWrapper.WrappedChangeListener.remove(box, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #getTextBox}().addClickHandler instead
+   */
   @Deprecated
   public void removeClickListener(ClickListener listener) {
     ListenerWrapper.WrappedClickListener.remove(box, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method no the object returned by {@link #addSelectionHandler} instead
+   */
   @Deprecated
   public void removeEventHandler(SuggestionHandler handler) {
     ListenerWrapper.WrappedOldSuggestionHandler.remove(this, handler);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #getTextBox}().addFocusListener instead
+   */
   @Deprecated
   public void removeFocusListener(FocusListener listener) {
     ListenerWrapper.WrappedFocusListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by {@link #getTextBox}().add*Handler instead
+   */
   @Deprecated
   public void removeKeyboardListener(KeyboardListener listener) {
     ListenerWrapper.WrappedKeyboardListener.remove(this, listener);
diff --git a/user/src/com/google/gwt/user/client/ui/TabBar.java b/user/src/com/google/gwt/user/client/ui/TabBar.java
index 218a148..4f252c4 100644
--- a/user/src/com/google/gwt/user/client/ui/TabBar.java
+++ b/user/src/com/google/gwt/user/client/ui/TabBar.java
@@ -248,6 +248,10 @@
     insertTab(widget, getTabCount());
   }
 
+  /**
+   * @deprecated Use {@link #addBeforeSelectionHandler} and {#link
+   *             #addSelectionHandler} instead
+   */
   @Deprecated
   public void addTabListener(TabListener listener) {
     ListenerWrapper.WrappedTabListener.add(this, listener);
@@ -379,7 +383,8 @@
   }
 
   /**
-   * @deprecated add a key down handler to the individual tab wrappers instead.
+   * @deprecated add a key down handler to the individual {@link Tab} objects
+   *  instead.
    */
   @Deprecated
   public void onKeyDown(Widget sender, char keyCode, int modifiers) {
@@ -420,6 +425,10 @@
     panel.remove(toRemove);
   }
 
+  /**
+   * @deprecated Instead use the {@link HandlerRegistration#removeHandler}
+   * call on the object returned by an add*Handler method
+   */
   @Deprecated
   public void removeTabListener(TabListener listener) {
     ListenerWrapper.WrappedTabListener.remove(this, listener);
diff --git a/user/src/com/google/gwt/user/client/ui/TabListenerCollection.java b/user/src/com/google/gwt/user/client/ui/TabListenerCollection.java
index 968fed3..281d148 100644
--- a/user/src/com/google/gwt/user/client/ui/TabListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/TabListenerCollection.java
@@ -23,8 +23,7 @@
  * subclass of {@link ArrayList} assumes that all objects added to it will be of
  * type {@link com.google.gwt.user.client.ui.TabListener}.
  * 
- * @deprecated {@link TabPanel} and {@link TabBar} should now completely manage
- *             their own handlers
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class TabListenerCollection extends ArrayList<TabListener> {
diff --git a/user/src/com/google/gwt/user/client/ui/TabPanel.java b/user/src/com/google/gwt/user/client/ui/TabPanel.java
index 5f6b116..6454d3d 100644
--- a/user/src/com/google/gwt/user/client/ui/TabPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/TabPanel.java
@@ -260,6 +260,10 @@
     return addHandler(handler, SelectionEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addBeforeSelectionHandler} and {@link
+   * #addSelectionHandler} instead
+   */
   @Deprecated
   public void addTabListener(TabListener listener) {
     ListenerWrapper.WrappedTabListener.add(this, listener);
@@ -354,12 +358,18 @@
     return deck.iterator();
   }
 
+  /**
+   * @deprecated Use {@link BeforeSelectionHandler#onBeforeSelection} instead
+   */
   @Deprecated
   public boolean onBeforeTabSelected(SourcesTabEvents sender, int tabIndex) {
     BeforeSelectionEvent<Integer> event = BeforeSelectionEvent.fire(this, tabIndex);
     return event == null || !event.isCanceled();
   }
 
+  /**
+   * @deprecated Use {@link SelectionHandler#onSelection} instead
+   */
   @Deprecated
   public void onTabSelected(SourcesTabEvents sender, int tabIndex) {
     deck.showWidget(tabIndex);
@@ -381,6 +391,10 @@
     return deck.remove(widget);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by and add*Handler method instead
+   */
   @Deprecated
   public void removeTabListener(TabListener listener) {
     ListenerWrapper.WrappedTabListener.remove(this, listener);
diff --git a/user/src/com/google/gwt/user/client/ui/TableListenerCollection.java b/user/src/com/google/gwt/user/client/ui/TableListenerCollection.java
index d013eed..8fab7ed 100644
--- a/user/src/com/google/gwt/user/client/ui/TableListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/TableListenerCollection.java
@@ -23,9 +23,7 @@
  * subclass of {@link ArrayList} assumes that all objects added to it will be of
  * type {@link com.google.gwt.user.client.ui.TableListener}.
  * 
- * @deprecated use
- *             {@link HTMLTable#getCellForEvent(com.google.gwt.event.dom.client.ClickEvent)}
- *             or similar code
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class TableListenerCollection extends ArrayList<TableListener> {
diff --git a/user/src/com/google/gwt/user/client/ui/TextBoxBase.java b/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
index d143c8b..8bc0366 100644
--- a/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
+++ b/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
@@ -93,6 +93,9 @@
     return addDomHandler(handler, ChangeEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link addChangeHandler} instead
+   */
   @Deprecated
   public void addChangeListener(ChangeListener listener) {
     addChangeHandler(new ListenerWrapper.WrappedChangeListener(listener));
@@ -195,6 +198,10 @@
     }
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by {@link #addChangeHandler} instead
+   */
   @Deprecated
   public void removeChangeListener(ChangeListener listener) {
     ListenerWrapper.WrappedChangeListener.remove(this, listener);
diff --git a/user/src/com/google/gwt/user/client/ui/ToggleButton.java b/user/src/com/google/gwt/user/client/ui/ToggleButton.java
index efc6595..a3931dc 100644
--- a/user/src/com/google/gwt/user/client/ui/ToggleButton.java
+++ b/user/src/com/google/gwt/user/client/ui/ToggleButton.java
@@ -64,6 +64,7 @@
    * 
    * @param upImage image for the default (up) face of the button
    * @param listener the click listener
+   * @deprecated Use {@link #ToggleButton(Image, ClickHandler} instead
    */
   @Deprecated
   public ToggleButton(Image upImage, ClickListener listener) {
@@ -97,6 +98,7 @@
    * @param upImage image for the default(up) face of the button
    * @param downImage image for the down face of the button
    * @param listener clickListener
+   * @deprecated Use {@link #ToggleButton(Image, Image, ClickHandler} instead
    */
   @Deprecated
   public ToggleButton(Image upImage, Image downImage, ClickListener listener) {
@@ -130,6 +132,7 @@
    * 
    * @param upText the text for the default (up) face of the button
    * @param listener the click listener
+   * @deprecated Use {@link #ToggleButton(String, ClickHandler} instead
    */
   @Deprecated
   public ToggleButton(String upText, ClickListener listener) {
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 3fde2f4..4044bdd 100644
--- a/user/src/com/google/gwt/user/client/ui/Tree.java
+++ b/user/src/com/google/gwt/user/client/ui/Tree.java
@@ -301,6 +301,9 @@
     return addDomHandler(handler, FocusEvent.getType());
   }
 
+  /**
+   * @deprecate Use {@link #addFocusHandler} instead
+   */
   @Deprecated
   public void addFocusListener(FocusListener listener) {
     ListenerWrapper.WrappedFocusListener.add(this, listener);
@@ -338,6 +341,10 @@
     return root.addItem(widget);
   }
 
+  /**
+   * @deprecated Use {@link #addKeyDownHandler}, {@link
+   * #addKeyUpHandler} and {@link #addKeyPressHandler} instead
+   */
   @Deprecated
   public void addKeyboardListener(KeyboardListener listener) {
     ListenerWrapper.WrappedKeyboardListener.add(this, listener);
@@ -359,6 +366,11 @@
     return addHandler(handler, MouseDownEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addMouseOverHandler} {@link
+   * #addMouseMoveHandler}, {@link #addMouseDownHandler}, {@link
+   * #addMouseUpHandler} and {@link #addMouseOutHandler} instead
+   */
   @Deprecated
   public void addMouseListener(MouseListener listener) {
     ListenerWrapper.WrappedMouseListener.add(this, listener);
@@ -393,6 +405,10 @@
     return addHandler(handler, SelectionEvent.getType());
   }
 
+  /**
+   * @deprecated Use {@link #addSelectionHandler}, {@link
+   * #addOpenHandler}, and {@link #addCloseHandler} instead
+   */
   @Deprecated
   public void addTreeListener(TreeListener listener) {
     ListenerWrapper.WrappedTreeListener.add(this, listener);
@@ -585,6 +601,10 @@
     return true;
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * the object returned by {@link #addFocusHandler} instead
+   */
   @Deprecated
   public void removeFocusListener(FocusListener listener) {
     ListenerWrapper.WrappedFocusListener.remove(this, listener);
@@ -608,16 +628,28 @@
     }
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeKeyboardListener(KeyboardListener listener) {
     ListenerWrapper.WrappedKeyboardListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeMouseListener(MouseListener listener) {
     ListenerWrapper.WrappedMouseListener.remove(this, listener);
   }
 
+  /**
+   * @deprecated Use the {@link HandlerRegistration#removeHandler}
+   * method on the object returned by an add*Handler method instead
+   */
   @Deprecated
   public void removeTreeListener(TreeListener listener) {
     ListenerWrapper.WrappedTreeListener.remove(this, listener);
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 9eb040d..fad65f9 100644
--- a/user/src/com/google/gwt/user/client/ui/TreeItem.java
+++ b/user/src/com/google/gwt/user/client/ui/TreeItem.java
@@ -631,8 +631,8 @@
    * Returns the widget, if any, that should be focused on if this TreeItem is
    * selected.
    * 
-   * @deprecated use {@link #getFocusable()} instead
    * @return widget to be focused.
+   * @deprecated use {@link #getFocusable()} instead
    */
   @Deprecated
   protected HasFocus getFocusableWidget() {
diff --git a/user/src/com/google/gwt/user/client/ui/TreeListener.java b/user/src/com/google/gwt/user/client/ui/TreeListener.java
index c251be0..389c06e 100644
--- a/user/src/com/google/gwt/user/client/ui/TreeListener.java
+++ b/user/src/com/google/gwt/user/client/ui/TreeListener.java
@@ -20,8 +20,8 @@
 /**
  * Event listener interface for tree events.
  * 
- * @deprecated use {@link com.google.gwt.event.logical.shared.SelectionHandler},
- *             {@link com.google.gwt.event.logical.shared.OpenHandler}, and/or
+ * @deprecated Use {@link com.google.gwt.event.logical.shared.SelectionHandler},
+ *             {@link com.google.gwt.event.logical.shared.OpenHandler}, and
  *             {@link com.google.gwt.event.logical.shared.CloseHandler} instead
  */
 @Deprecated
diff --git a/user/src/com/google/gwt/user/client/ui/TreeListenerCollection.java b/user/src/com/google/gwt/user/client/ui/TreeListenerCollection.java
index f1099f5..16075b6 100644
--- a/user/src/com/google/gwt/user/client/ui/TreeListenerCollection.java
+++ b/user/src/com/google/gwt/user/client/ui/TreeListenerCollection.java
@@ -22,7 +22,7 @@
  * subclass of {@link ArrayList} assumes that all objects added to it will be of
  * type {@link com.google.gwt.user.client.ui.ClickListener}.
  * 
- * @deprecated {@link Tree} should now completely manage its own handlers
+ * @deprecated Widgets should now manage their own handlers via {@link Widget#addDomHandler}
  */
 @Deprecated
 public class TreeListenerCollection extends ArrayList<TreeListener> {
diff --git a/user/src/com/google/gwt/user/client/ui/UIObject.java b/user/src/com/google/gwt/user/client/ui/UIObject.java
index 9341329..a9ba5be 100644
--- a/user/src/com/google/gwt/user/client/ui/UIObject.java
+++ b/user/src/com/google/gwt/user/client/ui/UIObject.java
@@ -97,7 +97,7 @@
    * The implementation of the set debug id method, which does nothing by
    * default.
    */
-  private static class DebugIdImpl {
+  public static class DebugIdImpl {
     @SuppressWarnings("unused")
     // parameters
     public void ensureDebugId(UIObject uiObject, String id) {
@@ -114,7 +114,7 @@
    * {@link Element}s in this {@link UIObject}.
    */
   @SuppressWarnings("unused")
-  private static class DebugIdImplEnabled extends DebugIdImpl {
+  public static class DebugIdImplEnabled extends DebugIdImpl {
     @Override
     public void ensureDebugId(UIObject uiObject, String id) {
       uiObject.onEnsureDebugId(id);
diff --git a/user/src/com/google/gwt/user/client/ui/Widget.java b/user/src/com/google/gwt/user/client/ui/Widget.java
index e2e5860..8c998b3 100644
--- a/user/src/com/google/gwt/user/client/ui/Widget.java
+++ b/user/src/com/google/gwt/user/client/ui/Widget.java
@@ -87,7 +87,7 @@
         }
         break;
     }
-    DomEvent.fireNativeEvent(event, this);
+    DomEvent.fireNativeEvent(event, this, this.getElement());
   }
 
   /**
diff --git a/user/src/com/google/gwt/user/tools/README.txtsrc b/user/src/com/google/gwt/user/tools/README.txtsrc
index 3a9d1c0..dda9750 100644
--- a/user/src/com/google/gwt/user/tools/README.txtsrc
+++ b/user/src/com/google/gwt/user/tools/README.txtsrc
@@ -5,8 +5,8 @@
 -- Option A: Import your project into Eclipse (recommended) --
 
 If you use Eclipse, you can simply import the generated project into Eclipse.
-We've tested against Eclipse 3.3 and 3.4.  Later versions will likely also work,
-eariler versions may not.
+We've tested against Eclipse 3.3 and 3.4.  Later versions will likely also
+work, earlier versions may not.
 
 In Eclipse, go to the File menu and choose:
 
diff --git a/user/src/com/google/gwt/user/tools/RpcClientTemplate.javasrc b/user/src/com/google/gwt/user/tools/RpcClientTemplate.javasrc
index 0402cb6..40fcca7 100644
--- a/user/src/com/google/gwt/user/tools/RpcClientTemplate.javasrc
+++ b/user/src/com/google/gwt/user/tools/RpcClientTemplate.javasrc
@@ -4,7 +4,7 @@
 import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
 
 /**
- * The client side stub for the Rpc service.
+ * The client side stub for the RPC service.
  */
 @RemoteServiceRelativePath("greet")
 public interface GreetingService extends RemoteService {
diff --git a/user/test/com/google/gwt/event/dom/client/DomEventTest.java b/user/test/com/google/gwt/event/dom/client/DomEventTest.java
index 5655c59..e7c211c 100644
--- a/user/test/com/google/gwt/event/dom/client/DomEventTest.java
+++ b/user/test/com/google/gwt/event/dom/client/DomEventTest.java
@@ -15,9 +15,13 @@
  */
 package com.google.gwt.event.dom.client;
 
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.NativeEvent;
 import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.event.shared.HandlerTestBase;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.RootPanel;
 
 /**
  * Events test.
@@ -59,7 +63,6 @@
   }
 
   public void testMouseEvents() {
-
     final Flag flag = new Flag();
     manager = new HandlerManager(flag);
 
@@ -128,6 +131,28 @@
         "onDoubleClick");
   }
 
+  public void testMouseEventCoordinates() {
+    Button b = new Button();
+    RootPanel.get().add(b);
+
+    final Flag flag = new Flag();
+    b.addMouseDownHandler(new MouseDownHandler() {
+      public void onMouseDown(MouseDownEvent event) {
+        assertEquals("", 16, event.getX());
+        assertEquals("", 8, event.getY());
+        flag.flag = true;
+      }
+    });
+
+    int x = b.getAbsoluteLeft() + 16;
+    int y = b.getAbsoluteTop() + 8;
+    NativeEvent event = Document.get().createMouseDownEvent(0, x, y, x, y,
+        false, false, false, false, 1);
+    b.getElement().dispatchEvent(event);
+
+    assertTrue("Never received expected mouse-down event", flag.flag);
+  }
+
   private void checkFire(DomEvent<?> event, HandlerRegistration registration,
       Flag flag, String eventName) {
 
diff --git a/user/test/com/google/gwt/user/client/ui/ButtonTest.java b/user/test/com/google/gwt/user/client/ui/ButtonTest.java
index 83777e7..9ba6cef 100644
--- a/user/test/com/google/gwt/user/client/ui/ButtonTest.java
+++ b/user/test/com/google/gwt/user/client/ui/ButtonTest.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.user.client.ui;
 
-import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.EventTarget;
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.junit.client.GWTTestCase;
@@ -31,10 +31,10 @@
 
   private class H implements ClickHandler {
     boolean clicked;
-    Element target;
+    EventTarget target;
 
     public void onClick(ClickEvent event) {
-      target = event.getNativeEvent().getTarget();
+      target = event.getNativeEvent().getEventTarget();
       clicked = true;
     }
   }
diff --git a/user/test/com/google/gwt/user/client/ui/CreateEventTest.java b/user/test/com/google/gwt/user/client/ui/CreateEventTest.java
index 9029f94..09a06f9 100644
--- a/user/test/com/google/gwt/user/client/ui/CreateEventTest.java
+++ b/user/test/com/google/gwt/user/client/ui/CreateEventTest.java
@@ -18,6 +18,7 @@
 import com.google.gwt.dom.client.DivElement;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.EventTarget;
 import com.google.gwt.dom.client.ImageElement;
 import com.google.gwt.dom.client.InputElement;
 import com.google.gwt.junit.client.GWTTestCase;
@@ -75,21 +76,23 @@
     public void onBrowserEvent(Event event) {
       assertEquals(eventType, event.getType());
 
-      Element target = event.getCurrentTarget();
-      if (target == child) {
-        assertFalse("Expecting child to receive the event only once",
-            childReceived);
-        assertFalse("Expecting child to receive the event before parent",
-            parentReceived);
+      EventTarget target = event.getCurrentEventTarget();
+      if (Element.is(target)) {
+        if (Element.as(target) == child) {
+          assertFalse("Expecting child to receive the event only once",
+              childReceived);
+          assertFalse("Expecting child to receive the event before parent",
+              parentReceived);
 
-        childReceived = true;
-      } else if (target == parent) {
-        assertFalse("Expecting parent to receive the event only once",
-            parentReceived);
-        assertTrue("Expecting parent to receive the event after the child",
-            childReceived);
+          childReceived = true;
+        } else if (Element.as(target) == parent) {
+          assertFalse("Expecting parent to receive the event only once",
+              parentReceived);
+          assertTrue("Expecting parent to receive the event after the child",
+              childReceived);
 
-        parentReceived = true;
+          parentReceived = true;
+        }
       }
     }
   }