diff --git a/modules/other/gail/gailimagecell.c b/modules/other/gail/gailimagecell.c
index 095b8bc..14b330a 100644
--- a/modules/other/gail/gailimagecell.c
+++ b/modules/other/gail/gailimagecell.c
@@ -19,6 +19,7 @@
 
 #include "config.h"
 
+#include <string.h>
 #include <gtk/gtk.h>
 #include "gailimagecell.h"
 
@@ -108,7 +109,46 @@ static gboolean
 gail_image_cell_update_cache (GailRendererCell *cell, 
                               gboolean         emit_change_signal)
 {
-  return FALSE;
+  GailImageCell *image_cell = GAIL_IMAGE_CELL (cell);
+  gboolean rv = FALSE;
+  GdkPixbuf *pixbuf;
+  gchar *new_description = NULL;
+
+  g_object_get (G_OBJECT(cell->renderer), "pixbuf", &pixbuf, NULL);
+  if(!GDK_IS_PIXBUF (pixbuf))
+    return FALSE;
+  new_description = gdk_pixbuf_get_description(pixbuf);
+  if (image_cell->image_description)
+    {
+     /*
+      * If the new value is NULL and the old value isn't NULL, then the
+      * value has changed.
+      */
+      if (new_description == NULL ||
+          strcmp (image_cell->image_description, new_description))
+        {
+          g_free (image_cell->image_description);
+          image_cell->image_description = NULL;
+          if (new_description)
+            rv = TRUE;
+        }
+    }
+  else if(new_description)
+    rv = TRUE;
+
+  if (rv)
+    {
+      if (new_description == NULL)
+        {
+          image_cell->image_description = NULL;
+        }
+      else
+        {
+          image_cell->image_description = g_strdup (new_description);
+        }
+    }
+
+  return rv;
 }
 
 static void
