diff --git a/user/src/com/google/gwt/dom/client/DOMImpl.java b/user/src/com/google/gwt/dom/client/DOMImpl.java
index 864a1f3..2b755c6 100644
--- a/user/src/com/google/gwt/dom/client/DOMImpl.java
+++ b/user/src/com/google/gwt/dom/client/DOMImpl.java
@@ -121,7 +121,7 @@
   }-*/;
 
   public native void eventStopPropagation(NativeEvent evt) /*-{
-    evt.cancelBubble = cancel;
+    evt.stopPropagation();
   }-*/;
 
   public abstract String eventToString(NativeEvent evt);
diff --git a/user/src/com/google/gwt/dom/client/DOMImplIE6.java b/user/src/com/google/gwt/dom/client/DOMImplIE6.java
index 3f062bc..fa32bdb 100644
--- a/user/src/com/google/gwt/dom/client/DOMImplIE6.java
+++ b/user/src/com/google/gwt/dom/client/DOMImplIE6.java
@@ -124,6 +124,11 @@
   }-*/;
 
   @Override
+  public native void eventStopPropagation(NativeEvent evt) /*-{
+    evt.cancelBubble = true;
+  }-*/;
+
+  @Override
   public native String eventToString(NativeEvent evt) /*-{
     if (evt.toString) return evt.toString();
       return "[event" + evt.type + "]";
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 33653cf..a59978a 100644
--- a/user/src/com/google/gwt/user/client/ui/CustomButton.java
+++ b/user/src/com/google/gwt/user/client/ui/CustomButton.java
@@ -318,6 +318,12 @@
   private boolean isFocusing;
 
   /**
+   * Used to decide whether to allow clicks to propagate up to the superclass
+   * or container elements.
+   */
+  private boolean allowClick;
+
+  /**
    * Constructor for <code>CustomButton</code>.
    * 
    * @param upImage image for the default (up) face of the button
@@ -577,6 +583,14 @@
 
     int type = DOM.eventGetType(event);
     switch (type) {
+      case Event.ONCLICK:
+        // If clicks are currently disallowed, keep it from bubbling or being
+        // passed to the superclass.
+        if (!allowClick) {
+          event.stopPropagation();
+          return;
+        }
+        break;
       case Event.ONMOUSEDOWN:
         if (event.getButton() == Event.BUTTON_LEFT) {
           setFocus(true);
@@ -747,11 +761,18 @@
    * widget display.
    */
   protected void onClick() {
+    // Allow the click we're about to synthesize to pass through to the
+    // superclass and containing elements. Element.dispatchEvent() is
+    // synchronous, so we simply set and clear the flag within this method.
+    allowClick = true;
+
     // Mouse coordinates are not always available (e.g., when the click is
     // caused by a keyboard event).
     NativeEvent evt = Document.get().createClickEvent(1, 0, 0, 0, 0, false,
         false, false, false);
     getElement().dispatchEvent(evt);
+
+    allowClick = false;
   }
 
   /**
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 f6f46cc..9029f94 100644
--- a/user/test/com/google/gwt/user/client/ui/CreateEventTest.java
+++ b/user/test/com/google/gwt/user/client/ui/CreateEventTest.java
@@ -209,6 +209,29 @@
   }
 
   /**
+   * Tests NativeEvent.stopPropagation()
+   */
+  public void testStopPropagation() {
+    NonBubbleAssertingEventListener listener = new NonBubbleAssertingEventListener(
+        "click") {
+      @Override
+      public void onBrowserEvent(Event event) {
+        super.onBrowserEvent(event);
+        if (event.getCurrentTarget() == child) {
+          event.stopPropagation();
+        }
+      }
+    };
+    Event.setEventListener(parent, listener);
+    Event.setEventListener(child, listener);
+
+    child.dispatchEvent(Document.get().createClickEvent(MOUSE_DETAIL, SCREEN_X,
+        SCREEN_Y, CLIENT_X, CLIENT_Y, true, true, true, true));
+
+    assertTrue("Expected child to receive event", listener.childReceived);
+  }
+
+  /**
    * Tests createBlurEvent().
    */
   public void testTriggerBlurEvent() {
