diff --git a/src/post_modules/GTK/source/support.c b/src/post_modules/GTK/source/support.c
index d5cabb6ecb44fcf9332c166afc47adbbae4415a0..216798b3a46b9f57166bb936db458c2c4323ef77 100644
--- a/src/post_modules/GTK/source/support.c
+++ b/src/post_modules/GTK/source/support.c
@@ -307,6 +307,16 @@ GdkImage *gdkimage_from_pikeimage( struct object *img, int fast, GdkImage *i )
   return i;
 }
 
+#define IS_OBJECT_PROGRAM(X)                 \
+!( ((X) == pgtk_style_program)               \
+|| ((X) == pgtk_CTreeNode_program)           \
+|| ((X) == pgtk_CTreeRow_program)            \
+|| ((X) == pgtk_icon_list_item_program)      \
+|| ((X) == pgtk_plot_dataset_program)        \
+|| ((X) == pgtk_psfont_program)              \
+|| ((X) == pgtk_selection_data_program)      \
+|| ((X) == pgtk_sheet_child_program))
+
 void push_gtkobjectclass(void *obj, struct program *def)
 {
   struct object *o;
@@ -315,11 +325,12 @@ void push_gtkobjectclass(void *obj, struct program *def)
     push_int(0);
     return;
   }
-  if( (o=gtk_object_get_data(GTK_OBJECT(obj), "pike_object")) )
-  {
-    ref_push_object( o );
-    return;
-  }
+  if( IS_OBJECT_PROGRAM(def) )
+    if( (o=gtk_object_get_data(((void *)obj), "pike_object")) )
+    {
+      ref_push_object( o );
+      return;
+    }
   o = low_clone( def );
   call_c_initializers( o );
   ((struct object_wrapper *)o->storage)->obj = obj;