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 5fb3006..b33e4fb 100644
--- a/user/src/com/google/gwt/user/client/ui/Image.java
+++ b/user/src/com/google/gwt/user/client/ui/Image.java
@@ -116,7 +116,6 @@
       // common widget.After the branch is stable, this should be fixed.
       image.sinkEvents(Event.ONCLICK | Event.MOUSEEVENTS | Event.ONMOUSEWHEEL
           | Event.ONLOAD);
-      fireSyntheticLoadEvent(image);
     }
 
     @Override
diff --git a/user/test/com/google/gwt/user/client/ui/impl/ClippedImagePrototypeTest.java b/user/test/com/google/gwt/user/client/ui/impl/ClippedImagePrototypeTest.java
index e305a2e..7480a84 100644
--- a/user/test/com/google/gwt/user/client/ui/impl/ClippedImagePrototypeTest.java
+++ b/user/test/com/google/gwt/user/client/ui/impl/ClippedImagePrototypeTest.java
@@ -82,7 +82,6 @@
    * is called.
    */
   public void testApplyToClippedImage() {
-
     final Image image = new Image("counting-backwards.png", 12, 13, 8, 8);
 
     assertEquals(12, image.getOriginLeft());
@@ -91,27 +90,6 @@
     assertEquals(8, image.getHeight());
     assertEquals("clipped", ImageTest.getCurrentImageStateName(image));
 
-    final TestLoadListener listener = new TestLoadListener(image) {
-      @Override
-      public void onLoad(Widget sender) {
-        super.onLoad(sender);
-
-        if (image.getOriginLeft() == 12 && image.getOriginTop() == 13) {
-          ClippedImagePrototype clippedImagePrototype = new ClippedImagePrototype(
-              "counting-forwards.png", 16, 16, 16, 16);
-
-          clippedImagePrototype.applyTo(image);
-
-          assertEquals(16, image.getOriginLeft());
-          assertEquals(16, image.getOriginTop());
-          assertEquals(16, image.getWidth());
-          assertEquals(16, image.getHeight());
-          assertEquals("clipped", ImageTest.getCurrentImageStateName(image));
-        }
-      }
-    };
-    image.addLoadListener(listener);
-
     final TestLoadHandler handler = new TestLoadHandler() {
       @Override
       public void onLoad(LoadEvent event) {
@@ -137,14 +115,13 @@
         fail("The image " + image.getUrl() + " failed to load.");
       }
     });
-    
+
     RootPanel.get().add(image);
     delayTestFinish(2000);
 
     Timer t = new Timer() {
       @Override
       public void run() {
-        assertEquals(2, listener.getOnloadEventFireCount());
         assertEquals(2, handler.getOnloadEventFireCount());
         finishTest();
       }
