diff --git a/src/post_modules/GTK2/source/gdkcolormap.pre b/src/post_modules/GTK2/source/gdkcolormap.pre
index 15386b3f8579427bd08f8aadbb5a44155b9bd5fe..935e493f7f23bade75c86cfe75bc0e99a58dc4bf 100644
--- a/src/post_modules/GTK2/source/gdkcolormap.pre
+++ b/src/post_modules/GTK2/source/gdkcolormap.pre
@@ -37,8 +37,17 @@ int alloc_colors(array(GDK2.Color) colors, int writeable,
     get_all_args("alloc_colors",args,"%A%i%i",&a,&wr,&best);
     if (a==NULL)
       Pike_error("Invalid array.\n");
-    gc=(GdkColor *)xmalloc(sizeof(GdkColor)*a->size);
-    suc=(int *)xmalloc(sizeof(int)*a->size);
+
+    gc=(GdkColor *)malloc(sizeof(GdkColor)*a->size);
+    suc=(int *)malloc(sizeof(int)*a->size);
+    if(!gc || !suc)
+    {
+      if(gc) free(gc);
+      SIMPLE_OUT_OF_MEMORY_ERROR("alloc_colors",
+                                 sizeof(GdkColor)*a->size +
+                                 sizeof(int)*a->size);
+    }
+
     for (i=0; i<a->size; i++) {
       struct object *o;
       o=ITEM(a)[i].u.object;
@@ -82,7 +91,7 @@ void free_colors(array(GDK2.Color) colors)
     get_all_args("free_colors",args,"%A",&a);
     if (a==NULL)
       Pike_error("Invalid array.\n");
-    gc=(GdkColor *)xmalloc(sizeof(GdkColor)*a->size);
+    gc=(GdkColor *)xalloc(sizeof(GdkColor)*a->size);
     for (i=0; i<a->size; i++) {
       struct object *o;
       o=ITEM(a)[i].u.object;
@@ -106,9 +115,9 @@ void free_colors(array(GDK2.Color) colors)
     GdkColor *gc;
 
     get_all_args("query_color",args,"%i",&pix);
-    pgtk2_pop_n_elems(args);
-    gc=(GdkColor *)xmalloc(sizeof(GdkColor));
+    gc=(GdkColor *)xalloc(sizeof(GdkColor));
     gdk_colormap_query_color(GDK_COLORMAP(THIS->obj),pix,gc);
+    pgtk2_pop_n_elems(args);
     push_gdkobject(gc,color);
   }
 }
diff --git a/src/post_modules/GTK2/source/gdkdisplay.pre b/src/post_modules/GTK2/source/gdkdisplay.pre
index 6ae183e6887b2ca4552ffd85d547604db6742c25..c984f74ec7afaf58da7c1cb1602f361255921a30 100644
--- a/src/post_modules/GTK2/source/gdkdisplay.pre
+++ b/src/post_modules/GTK2/source/gdkdisplay.pre
@@ -257,7 +257,7 @@ void store_clipboard(GDK2.Window clipboard_window,
       GdkAtom *targets;
       int n;
 
-      targets=xmalloc(a->size);
+      targets=xalloc(a->size);
       for (n=0; n<a->size; n++)
 	targets[n]=get_gdkatom(ITEM(a)[n].u.object);
       gdk_display_store_clipboard(GDK_DISPLAY_OBJECT(THIS->obj),
diff --git a/src/post_modules/GTK2/source/gdkscreen.pre b/src/post_modules/GTK2/source/gdkscreen.pre
index cd29addc348223604e50974960e86dcc350defcb..bdb41d229b92c969405da75e0705783c551fdc84 100644
--- a/src/post_modules/GTK2/source/gdkscreen.pre
+++ b/src/post_modules/GTK2/source/gdkscreen.pre
@@ -231,7 +231,7 @@ int get_n_monitors();
     GdkRectangle *gr;
 
     get_all_args("get_monitor_geometry",args,"%i",&a);
-    gr=(GdkRectangle *)xmalloc(sizeof(GdkRectangle));
+    gr=(GdkRectangle *)xalloc(sizeof(GdkRectangle));
     gdk_screen_get_monitor_geometry(GDK_SCREEN(THIS->obj),a,gr);
     pgtk2_pop_n_elems(args);
     push_gdkobject(gr,rectangle);
diff --git a/src/post_modules/GTK2/source/gobject.pre b/src/post_modules/GTK2/source/gobject.pre
index 83b3c521488e614f46b321217c683c4dac393fde..8f04f46a9762ebec31fe44e1e772bbe752ba4bc2 100644
--- a/src/post_modules/GTK2/source/gobject.pre
+++ b/src/post_modules/GTK2/source/gobject.pre
@@ -221,11 +221,13 @@ int new_signal(string name, array types, string return_type)
       } else {
 	return_type=G_TYPE_POINTER;
       }
-      param_types=xmalloc(sizeof(GType)*a->size);
+
+      param_types=malloc(sizeof(GType)*a->size);
       if (param_types==NULL) {
 	g_free(name);
 	SIMPLE_OUT_OF_MEMORY_ERROR("new_signal",sizeof(GType)*a->size);
       }
+
       for (i=n_params=0; i<a->size; i++) {
 	if (ITEM(a)[i].type!=PIKE_T_STRING)
 	  continue;