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 155f02f..dd95468 100644
--- a/user/src/com/google/gwt/user/client/ui/Image.java
+++ b/user/src/com/google/gwt/user/client/ui/Image.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 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
@@ -42,6 +42,7 @@
 import com.google.gwt.event.dom.client.MouseWheelEvent;
 import com.google.gwt.event.dom.client.MouseWheelHandler;
 import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.resources.client.ImageResource;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.impl.ClippedImageImpl;
 
@@ -56,16 +57,16 @@
  * image is constructed, and how it is transformed after construction. Methods
  * will operate differently depending on the mode that the image is in. These
  * differences are detailed in the documentation for each method.
- * 
+ *
  * <p>
  * If an image transitions between clipped mode and unclipped mode, any
  * {@link Element}-specific attributes added by the user (including style
  * attributes, style names, and style modifiers), except for event listeners,
  * will be lost.
  * </p>
- * 
+ *
  * <h3>CSS Style Rules</h3> <ul class="css"> <li>.gwt-Image { }</li> </ul>
- * 
+ *
  * Tranformations between clipped and unclipped state will result in a loss of
  * any style names that were set/added; the only style names that are preserved
  * are those that are mentioned in the static CSS style rules. Due to
@@ -74,7 +75,7 @@
  * expected when an image is in clipped mode. These limitations can usually be
  * easily worked around by encapsulating the image in a container widget that
  * can itself be styled.
- * 
+ *
  * <p>
  * <h3>Example</h3>
  * {@example com.google.gwt.examples.ImageExample}
@@ -304,7 +305,7 @@
 
   /**
    * Causes the browser to pre-fetch the image at a given URL.
-   * 
+   *
    * @param url the URL of the image to be prefetched
    */
   public static void prefetch(String url) {
@@ -315,11 +316,11 @@
 
   /**
    * Creates a Image widget that wraps an existing &lt;img&gt; element.
-   * 
+   *
    * This element must already be attached to the document. If the element is
    * removed from the document, you must call
    * {@link RootPanel#detachNow(Widget)}.
-   * 
+   *
    * @param element the element to be wrapped
    */
   public static Image wrap(Element element) {
@@ -347,9 +348,19 @@
   }
 
   /**
+   * Creates an image whose size and content are defined by an ImageResource.
+   *
+   * @param resource the ImageResource to be displayed
+   */
+  public Image(ImageResource resource) {
+    this(resource.getURL(), resource.getLeft(),
+         resource.getTop(), resource.getWidth(), resource.getHeight());
+  }
+
+  /**
    * Creates an image with a specified URL. The load event will be fired once
    * the image at the given URL has been retrieved by the browser.
-   * 
+   *
    * @param url the URL of the image to be displayed
    */
   public Image(String url) {
@@ -366,7 +377,7 @@
    * the width and height are specified explicitly by the user, this behavior
    * will not cause problems with retrieving the width and height of a clipped
    * image in a load event handler.
-   * 
+   *
    * @param url the URL of the image to be displayed
    * @param left the horizontal co-ordinate of the upper-left vertex of the
    *          visibility rectangle
@@ -383,7 +394,7 @@
   /**
    * This constructor may be used by subclasses to explicitly use an existing
    * element. This element must be an &lt;img&gt; element.
-   * 
+   *
    * @param element the element to be used
    */
   protected Image(Element element) {
@@ -466,7 +477,7 @@
    * Gets the height of the image. When the image is in the unclipped state, the
    * height of the image is not known until the image has been loaded (i.e. load
    * event has been fired for the image).
-   * 
+   *
    * @return the height of the image, or 0 if the height is unknown
    */
   public int getHeight() {
@@ -478,7 +489,7 @@
    * visibility rectangle. If the image is in the unclipped state, then the
    * visibility rectangle is assumed to be the rectangle which encompasses the
    * entire image, which has an upper-left vertex of (0,0).
-   * 
+   *
    * @return the horizontal co-ordinate of the upper-left vertex of the image's
    *         visibility rectangle
    */
@@ -491,7 +502,7 @@
    * visibility rectangle. If the image is in the unclipped state, then the
    * visibility rectangle is assumed to be the rectangle which encompasses the
    * entire image, which has an upper-left vertex of (0,0).
-   * 
+   *
    * @return the vertical co-ordinate of the upper-left vertex of the image's
    *         visibility rectangle
    */
@@ -503,7 +514,7 @@
    * Gets the URL of the image. The URL that is returned is not necessarily the
    * URL that was passed in by the user. It may have been transformed to an
    * absolute URL.
-   * 
+   *
    * @return the image URL
    */
   public String getUrl() {
@@ -514,7 +525,7 @@
    * Gets the width of the image. When the image is in the unclipped state, the
    * width of the image is not known until the image has been loaded (i.e. load
    * event has been fired for the image).
-   * 
+   *
    * @return the width of the image, or 0 if the width is unknown
    */
   public int getWidth() {
@@ -522,7 +533,7 @@
   }
 
   /**
-   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
+   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on
    * the object returned by {@link #addClickHandler} instead
    */
   @Deprecated
@@ -559,11 +570,26 @@
   }
 
   /**
+   * Sets the url and the visibility rectangle for the image at the same time,
+   * based on an ImageResource instance. A single load event will be fired if
+   * either the incoming url or visiblity rectangle co-ordinates differ from the
+   * image's current url or current visibility rectangle co-ordinates. If the
+   * image is currently in the unclipped state, a call to this method will cause
+   * a transition to the clipped state.
+   *
+   * @param resource the ImageResource to display
+   */
+  public void setResource(ImageResource resource) {
+    setUrlAndVisibleRect(resource.getURL(), resource.getLeft(),
+        resource.getTop(), resource.getWidth(), resource.getHeight());
+  }
+
+  /**
    * Sets the URL of the image to be displayed. If the image is in the clipped
    * state, a call to this method will cause a transition of the image to the
    * unclipped state. Regardless of whether or not the image is in the clipped
    * or unclipped state, a load event will be fired.
-   * 
+   *
    * @param url the image URL
    */
   public void setUrl(String url) {
@@ -577,7 +603,7 @@
    * visibility rectangle co-ordinates. If the image is currently in the
    * unclipped state, a call to this method will cause a transition to the
    * clipped state.
-   * 
+   *
    * @param url the image URL
    * @param left the horizontal coordinate of the upper-left vertex of the
    *          visibility rectangle
@@ -600,7 +626,7 @@
    * is in the unclipped state, a call to this method will cause a transition of
    * the image to the clipped state. This transition will cause a load event to
    * fire.
-   * 
+   *
    * @param left the horizontal coordinate of the upper-left vertex of the
    *          visibility rectangle
    * @param top the vertical coordinate of the upper-left vertex of the
diff --git a/user/test/com/google/gwt/user/client/ui/ImageTest.java b/user/test/com/google/gwt/user/client/ui/ImageTest.java
index 62d5cda..5abe47d 100644
--- a/user/test/com/google/gwt/user/client/ui/ImageTest.java
+++ b/user/test/com/google/gwt/user/client/ui/ImageTest.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 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
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.user.client.ui;
 
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.DivElement;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.event.dom.client.ErrorEvent;
@@ -24,6 +25,8 @@
 import com.google.gwt.junit.DoNotRunWith;
 import com.google.gwt.junit.Platform;
 import com.google.gwt.junit.client.GWTTestCase;
+import com.google.gwt.resources.client.ClientBundle;
+import com.google.gwt.resources.client.ImageResource;
 
 /**
  * Tests for the Image widget. Images in both clipped mode and unclipped mode
@@ -31,6 +34,10 @@
  */
 @SuppressWarnings("deprecation")
 public class ImageTest extends GWTTestCase {
+  interface Bundle extends ClientBundle {
+    ImageResource prettyPiccy();
+  }
+
   private static class TestErrorHandler implements ErrorHandler {
     private Image image;
 
@@ -75,7 +82,7 @@
    * Helper method that allows us to 'peek' at the private <code>state</code>
    * field in the Image object, and call the <code>state.getStateName()</code>
    * method.
-   * 
+   *
    * @param image The image instance
    * @return "unclipped" if image is in the unclipped state, or "clipped" if the
    *         image is in the clipped state
@@ -91,7 +98,7 @@
 
   /**
    * Tests the transition from the clipped state to the unclipped state.
-   * 
+   *
    * Disabled because of issue #863 & #864. It fails intermittently in linux
    * hosted mode tests.
    */
@@ -127,7 +134,7 @@
 
   /**
    * Tests the transition from the unclipped state to the clipped state.
-   * 
+   *
    * Disabled because of issue #863.
    */
   public void disabledTestChangeImageToClipped() {
@@ -163,7 +170,7 @@
 
   /**
    * Tests the creation of an image in unclipped mode.
-   * 
+   *
    * Disabled because of issue #863 & #864.
    */
   public void disabledTestCreateImage() {
@@ -196,7 +203,7 @@
    * Tests the firing of onload events when
    * {@link com.google.gwt.user.client.ui.Image#setUrl(String)} is called on an
    * unclipped image.
-   * 
+   *
    * Disabled because of issue #863
    */
   public void disabledTestSetUrlAndLoadEventsOnUnclippedImage() {
@@ -227,7 +234,7 @@
    * Tests the behavior of
    * <code>setUrlAndVisibleRect(String, int, int, int, int)</code> method on
    * an unclipped image, which causes a state transition to the clipped state.
-   * 
+   *
    * Disabled because of issue #863.
    */
   public void disabledTestSetUrlAndVisibleRectOnUnclippedImage() {
@@ -336,6 +343,19 @@
     assertEquals(1, firedError);
   }
 
+  public void testResourceConstructor() {
+    Bundle b = GWT.create(Bundle.class);
+    Image image = new Image(b.prettyPiccy());
+    assertResourceWorked(image, b.prettyPiccy());
+  }
+
+  public void testSetResource() {
+    Bundle b = GWT.create(Bundle.class);
+    Image image = new Image();
+    image.setResource(b.prettyPiccy());
+    assertResourceWorked(image, b.prettyPiccy());
+  }
+
   /**
    * Tests the behavior of
    * {@link com.google.gwt.user.client.ui.Image#setUrlAndVisibleRect(String,int,int,int,int)}
@@ -455,4 +475,12 @@
     assertEquals(16, image.getHeight());
     assertEquals("clipped", getCurrentImageStateName(image));
   }
+
+  private void assertResourceWorked(Image image, ImageResource prettyPiccy) {
+    assertEquals(prettyPiccy.getURL(), image.getUrl());
+    assertEquals(prettyPiccy.getTop(), image.getOriginTop());
+    assertEquals(prettyPiccy.getHeight(), image.getHeight());
+    assertEquals(prettyPiccy.getLeft(), image.getOriginLeft());
+    assertEquals(prettyPiccy.getWidth(), image.getWidth());
+  }
 }
diff --git a/user/test/com/google/gwt/user/client/ui/prettyPiccy.png b/user/test/com/google/gwt/user/client/ui/prettyPiccy.png
new file mode 100644
index 0000000..a7a9ae6
--- /dev/null
+++ b/user/test/com/google/gwt/user/client/ui/prettyPiccy.png
Binary files differ
