diff --git a/src/goocanvasimage.c b/src/goocanvasimage.c
index 5ecc7db..a9ef31d 100644
--- a/src/goocanvasimage.c
+++ b/src/goocanvasimage.c
@@ -174,6 +174,23 @@ goo_canvas_image_init (GooCanvasImage *image)
 
 
 /**
+ * Convert the width and height to the canvas's units, from the pixbuf's size 
+ * in pixels.
+ */
+static void
+goo_canvas_image_convert_pixbuf_sizes(GooCanvasItem *item, GooCanvasImageData *image_data)
+{
+  GooCanvas *canvas = goo_canvas_item_get_canvas (item);
+  if (canvas)
+    {
+      goo_canvas_convert_from_pixels (canvas, 
+        &(image_data->width),
+        &(image_data->height));
+    }
+}
+
+
+/**
  * goo_canvas_image_new:
  * @parent: the parent item, or %NULL. If a parent is specified, it will assume
  *  ownership of the item, and the item will automatically be freed when it is
@@ -207,6 +224,7 @@ goo_canvas_image_new (GooCanvasItem *parent,
   GooCanvasItem *item;
   GooCanvasImage *image;
   GooCanvasImageData *image_data;
+  GooCanvas *canvas;
   const char *first_property;
   va_list var_args;
 
@@ -222,6 +240,8 @@ goo_canvas_image_new (GooCanvasItem *parent,
       image_data->pattern = goo_canvas_cairo_pattern_from_pixbuf (pixbuf);
       image_data->width = gdk_pixbuf_get_width (pixbuf);
       image_data->height = gdk_pixbuf_get_height (pixbuf);
+
+      goo_canvas_image_convert_pixbuf_sizes (parent, image_data);
     }
 
   va_start (var_args, y);
@@ -335,6 +355,7 @@ goo_canvas_image_set_common_property (GObject              *object,
   GooCanvasImagePrivate *priv = goo_canvas_image_get_private (object);
   GdkPixbuf *pixbuf;
   gboolean recompute_bounds = TRUE;
+  GooCanvas *canvas = NULL;
 
   switch (prop_id)
     {
@@ -364,6 +385,9 @@ goo_canvas_image_set_common_property (GObject              *object,
       image_data->pattern = pixbuf ? goo_canvas_cairo_pattern_from_pixbuf (pixbuf) : NULL;
       image_data->width = pixbuf ? gdk_pixbuf_get_width (pixbuf) : 0;
       image_data->height = pixbuf ? gdk_pixbuf_get_height (pixbuf) : 0;
+
+      goo_canvas_image_convert_pixbuf_sizes (object, image_data);
+
       break;
     case PROP_ALPHA:
       priv->alpha = g_value_get_double (value);
@@ -642,6 +666,7 @@ goo_canvas_image_model_new (GooCanvasItemModel *parent,
   GooCanvasItemModel *model;
   GooCanvasImageModel *imodel;
   GooCanvasImageData *image_data;
+  GooCanvas *canvas;
   const char *first_property;
   va_list var_args;
 
@@ -657,6 +682,10 @@ goo_canvas_image_model_new (GooCanvasItemModel *parent,
       image_data->pattern = goo_canvas_cairo_pattern_from_pixbuf (pixbuf);
       image_data->width = gdk_pixbuf_get_width (pixbuf);
       image_data->height = gdk_pixbuf_get_height (pixbuf);
+
+      /* TODO:
+      goo_canvas_image_convert_pixbuf_sizes (item, image_data);
+      */
     }
 
   va_start (var_args, y);
