diff --git a/user/src/com/google/gwt/uibinder/elementparsers/ImageParser.java b/user/src/com/google/gwt/uibinder/elementparsers/ImageParser.java
index ea3d122..8c122ea 100644
--- a/user/src/com/google/gwt/uibinder/elementparsers/ImageParser.java
+++ b/user/src/com/google/gwt/uibinder/elementparsers/ImageParser.java
@@ -17,9 +17,11 @@
 
 import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.core.ext.typeinfo.JClassType;
+import com.google.gwt.core.ext.typeinfo.JType;
+import com.google.gwt.core.ext.typeinfo.TypeOracle;
+import com.google.gwt.resources.client.ImageResource;
 import com.google.gwt.uibinder.rebind.UiBinderWriter;
 import com.google.gwt.uibinder.rebind.XMLElement;
-import com.google.gwt.user.client.ui.Image;
 
 /**
  * Custom parsing of Image widgets. Sets ImageResource via constructor, because
@@ -29,11 +31,17 @@
 
   public void parse(XMLElement elem, String fieldName, JClassType type,
       UiBinderWriter writer) throws UnableToCompleteException {
-    String resource = elem.consumeImageResourceAttribute("resource");
-    if (null != resource) {
-      writer.setFieldInitializerAsConstructor(fieldName,
-          writer.getOracle().findType(Image.class.getName()),
-          resource);
+    if (hasImageResourceConstructor(writer.getOracle(), type)) {
+      String resource = elem.consumeImageResourceAttribute("resource");
+      if (null != resource) {
+        writer.setFieldInitializerAsConstructor(fieldName, type, resource);
+      }
     }
   }
+
+  private boolean hasImageResourceConstructor(TypeOracle typeOracle,
+      JClassType type) {
+    JType imageResourceType = typeOracle.findType(ImageResource.class.getName());
+    return type.findConstructor(new JType[] {imageResourceType}) != null;
+  }
 }
diff --git a/user/test/com/google/gwt/uibinder/elementparsers/ImageParserTest.java b/user/test/com/google/gwt/uibinder/elementparsers/ImageParserTest.java
index d2793ea..16a8705 100644
--- a/user/test/com/google/gwt/uibinder/elementparsers/ImageParserTest.java
+++ b/user/test/com/google/gwt/uibinder/elementparsers/ImageParserTest.java
@@ -16,6 +16,7 @@
 package com.google.gwt.uibinder.elementparsers;
 
 import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.dev.javac.impl.MockJavaResource;
 import com.google.gwt.uibinder.rebind.FieldWriter;
 
 import junit.framework.TestCase;
@@ -30,6 +31,32 @@
 public class ImageParserTest extends TestCase {
   private static final String PARSED_TYPE = "com.google.gwt.user.client.ui.Image";
 
+  private static final MockJavaResource IMAGE_SUBCLASS_NO_CONSTRUCTOR = new MockJavaResource(
+      "my.MyImage") {
+    @Override
+    protected CharSequence getContent() {
+      StringBuffer code = new StringBuffer();
+      code.append("package my;\n");
+      code.append("import com.google.gwt.user.client.ui.Image;\n");
+      code.append("public class MyImage extends Image {\n");
+      code.append("}\n");
+      return code;
+    }
+  };
+  private static final MockJavaResource IMAGE_SUBCLASS_RESOURCE_CONSTRUCTOR = new MockJavaResource(
+      "my.MyConstructedImage") {
+    @Override
+    protected CharSequence getContent() {
+      StringBuffer code = new StringBuffer();
+      code.append("package my;\n");
+      code.append("import com.google.gwt.user.client.ui.Image;\n");
+      code.append("import com.google.gwt.resources.client.ImageResource;\n");
+      code.append("public class MyConstructedImage extends Image {\n");
+      code.append("  public MyConstructedImage(ImageResource r) { super(r); }");
+      code.append("}\n");
+      return code;
+    }
+  };
   private ElementParserTester tester;
 
   @Override
@@ -38,6 +65,52 @@
     tester = new ElementParserTester(PARSED_TYPE, new ImageParser());
   }
 
+  public void testHappyWithDefaultInstantiableSubclass()
+      throws UnableToCompleteException, SAXException, IOException {
+    tester = new ElementParserTester("my.MyImage", new ImageParser(),
+        IMAGE_SUBCLASS_NO_CONSTRUCTOR, IMAGE_SUBCLASS_RESOURCE_CONSTRUCTOR);
+    ImageParser parser = new ImageParser();
+    StringBuffer b = new StringBuffer();
+
+    b.append("<ui:UiBinder xmlns:ui='" + ElementParserTester.BINDER_URI + "'");
+    b.append("    xmlns:my='urn:import:my'");
+    b.append("    xmlns:g='urn:import:com.google.gwt.user.client.ui'>");
+    b.append("  <my:MyImage resource='{someImageResource}'/> ");
+    b.append("</ui:UiBinder>");
+
+    parser.parse(tester.getElem(b.toString(), "my:MyImage"), "fieldName", 
+        tester.parsedType, tester.writer);
+    FieldWriter w = tester.fieldManager.lookup("fieldName");
+    assertNull(w.getInitializer());
+
+    assertTrue(tester.writer.statements.isEmpty());
+    assertNull(tester.logger.died);
+  }
+
+  public void testHappyWithSubclassWithImageResourceConstructor()
+      throws UnableToCompleteException, SAXException, IOException {
+    ImageParser parser = new ImageParser();
+    tester = new ElementParserTester("my.MyConstructedImage", new ImageParser(),
+        IMAGE_SUBCLASS_NO_CONSTRUCTOR, IMAGE_SUBCLASS_RESOURCE_CONSTRUCTOR);
+
+    StringBuffer b = new StringBuffer();
+
+    b.append("<ui:UiBinder xmlns:ui='" + ElementParserTester.BINDER_URI + "'");
+    b.append("    xmlns:my='urn:import:my'");
+    b.append("    xmlns:g='urn:import:com.google.gwt.user.client.ui'>");
+    b.append("  <my:MyConstructedImage resource='{someImageResource}'/> ");
+    b.append("</ui:UiBinder>");
+
+    parser.parse(tester.getElem(b.toString(), "my:MyConstructedImage"), "fieldName", 
+        tester.parsedType, tester.writer);
+    FieldWriter w = tester.fieldManager.lookup("fieldName");
+    assertEquals("new my.MyConstructedImage(someImageResource)",
+        w.getInitializer());
+
+    assertTrue(tester.writer.statements.isEmpty());
+    assertNull(tester.logger.died);
+  }
+
   public void testHappyWithResource() throws UnableToCompleteException,
       SAXException, IOException {
     StringBuffer b = new StringBuffer();
diff --git a/user/test/com/google/gwt/uibinder/test/UiJavaResources.java b/user/test/com/google/gwt/uibinder/test/UiJavaResources.java
index 861a0a7..c9e5c0e 100644
--- a/user/test/com/google/gwt/uibinder/test/UiJavaResources.java
+++ b/user/test/com/google/gwt/uibinder/test/UiJavaResources.java
@@ -174,8 +174,10 @@
     protected CharSequence getContent() {
       StringBuffer code = new StringBuffer();
       code.append("package com.google.gwt.user.client.ui;\n");
+      code.append("import com.google.gwt.resources.client.ImageResource;\n");
       code.append("public class Image extends Widget {\n");
       code.append("  public Image() {} ");
+      code.append("  public Image(ImageResource r) {} ");
       code.append("}\n");
       return code;
     }
@@ -222,7 +224,7 @@
     }
   };
   public static final MockJavaResource LIST_BOX = new MockJavaResource(
-    "com.google.gwt.user.client.ui.ListBox") {
+      "com.google.gwt.user.client.ui.ListBox") {
     @Override
     protected CharSequence getContent() {
       StringBuffer code = new StringBuffer();
diff --git a/user/test/com/google/gwt/uibinder/test/client/FooImage.java b/user/test/com/google/gwt/uibinder/test/client/FooImage.java
new file mode 100644
index 0000000..cfddeea
--- /dev/null
+++ b/user/test/com/google/gwt/uibinder/test/client/FooImage.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2010 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.uibinder.test.client;
+
+import com.google.gwt.user.client.ui.Image;
+
+/**
+ * Tests that custom Image subclasses work
+ */
+public class FooImage extends Image {
+  public FooImage() {
+    super();
+  }
+}
diff --git a/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java b/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java
index 1967fdf..d519e4b 100644
--- a/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java
+++ b/user/test/com/google/gwt/uibinder/test/client/UiBinderTest.java
@@ -445,6 +445,15 @@
     assertEquals("funny characters \" ' ' & < > > { }", t);
   }
 
+  public void testCustomImageClass() {
+    ImageResource resource = widgetUi.prettyImage;
+    Image widget = widgetUi.fooImage;
+    assertEquals(resource.getWidth(), widget.getOffsetWidth());
+    assertEquals(resource.getHeight(), widget.getOffsetHeight());
+    assertEquals(resource.getTop(), widget.getOriginTop());
+    assertEquals(resource.getLeft(), widget.getOriginLeft());
+  }
+  
   public void testImageResourceInImageWidget() {
     ImageResource resource = widgetUi.prettyImage;
     Image widget = widgetUi.babyWidget;
diff --git a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
index a74ceac..6040b3a 100644
--- a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
+++ b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
@@ -126,6 +126,7 @@
   @UiField SpanElement totallyPrivateStyleSpan;
   @UiField ImageResource prettyImage;
   @UiField ImageResource prettyTilingImage;
+  @UiField FooImage fooImage;
   @UiField Image babyWidget;
   @UiField ParagraphElement simpleSpriteParagraph;
   @UiField DataResource heartCursorResource;
diff --git a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
index 40e8dba..09fa323 100644
--- a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
+++ b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
@@ -198,6 +198,9 @@
       <gwt:Image ui:field='babyWidget' resource='{prettyImage}'
           altText='expected alt text' styleName='expected style name'
       />
+      <demo:FooImage ui:field='fooImage' resource='{prettyImage}'
+          altText='expected alt text' styleName='expected style name'
+      />
       </div>
 
       <p ui:field='simpleSpriteParagraph'
