Index: gtk/gtkbuilder.c
===================================================================
--- gtk/gtkbuilder.c	(revision 18370)
+++ gtk/gtkbuilder.c	(working copy)
@@ -68,6 +68,7 @@
   GSList *signals;
   gchar *current_root;
   GSList *root_objects;
+  const gchar *filename;
 };
 
 G_DEFINE_TYPE (GtkBuilder, gtk_builder, G_TYPE_OBJECT)
@@ -286,7 +287,8 @@
 
       parameter.name = prop->name;
 
-      if (G_IS_PARAM_SPEC_OBJECT (pspec))
+      if (G_IS_PARAM_SPEC_OBJECT (pspec) &&
+          (G_PARAM_SPEC_VALUE_TYPE (pspec) != GDK_TYPE_PIXBUF))
         {
           if (pspec->flags & G_PARAM_CONSTRUCT_ONLY)
             {
@@ -647,6 +649,8 @@
       return 0;
     }
   
+  builder->priv->filename = filename;
+
   _gtk_builder_parser_parse_buffer (builder, filename,
                                     buffer, length,
                                     &tmp_error);
@@ -689,6 +693,8 @@
 
   tmp_error = NULL;
 
+  builder->priv->filename = ".";
+
   _gtk_builder_parser_parse_buffer (builder, "<input>",
                                     buffer, length,
                                     &tmp_error);
@@ -1170,34 +1176,42 @@
         ret = FALSE;
       break;
     case G_TYPE_OBJECT:
-#if 0
-        if (G_VALUE_HOLDS (value, GDK_TYPE_PIXBUF))
-      {
-        gchar *filename;
-        GError *tmp_error = NULL;
-        GdkPixbuf *pixbuf;
+      if (G_VALUE_HOLDS (value, GDK_TYPE_PIXBUF))
+        {
+          gchar *filename;
+          GError *tmp_error = NULL;
+          GdkPixbuf *pixbuf;
+       
+          if (g_path_is_absolute (string))
+            filename = g_strdup (string);
+          else
+            {
+              gchar *dirname;
 
-        filename = gtk_xml_relative_file (xml, string);
-        pixbuf = gdk_pixbuf_new_from_file (filename, &tmp_error);
-        if (pixbuf)
-          {
-            g_value_set_object (value, pixbuf);
-            g_object_unref (G_OBJECT (pixbuf));
-          }
-        else
-          {
-	    g_set_error (error,
-			 GTK_BUILDER_ERROR,
-			 GTK_BUILDER_ERROR_INVALID_VALUE,
-			 "could not load image `%s'",
-			 tmp_error->message);
-            g_error_free (tmp_error);
-            ret = FALSE;
-          }
-        g_free (filename);
-      }
-        else
-#endif
+              dirname = g_path_get_dirname (builder->priv->filename);
+              filename = g_build_filename (dirname, string);
+
+              g_free (dirname);
+            }
+          pixbuf = gdk_pixbuf_new_from_file (filename, &tmp_error);
+          if (pixbuf)
+            {
+              g_value_set_object (value, pixbuf);
+              g_object_unref (G_OBJECT (pixbuf));
+            }
+          else
+            {
+	      g_set_error (error,
+	 		   GTK_BUILDER_ERROR,
+			   GTK_BUILDER_ERROR_INVALID_VALUE,
+			   "Could not load image '%s': %s",
+                           string, tmp_error->message);
+              g_error_free (tmp_error);
+              ret = FALSE;
+            }
+          g_free (filename);
+        }
+      else
         ret = FALSE;
       break;
     default:
Index: demos/gtk-demo/demo.ui
===================================================================
--- demos/gtk-demo/demo.ui	(revision 18370)
+++ demos/gtk-demo/demo.ui	(working copy)
@@ -141,6 +141,7 @@
     <object class="GtkWindow" id="window1">
         <property name="default_height">250</property>
         <property name="default_width">440</property>
+        <property name="icon">apple-red.png</property>
         <property name="title">builder</property>
         <child>
             <object class="GtkVBox" id="vbox1">
