Index: gobject/gobject.c
===================================================================
--- gobject/gobject.c	(revision 7572)
+++ gobject/gobject.c	(working copy)
@@ -113,6 +113,9 @@
     ((G_DATALIST_GET_FLAGS (&(object)->qdata) & OBJECT_HAS_TOGGLE_REF_FLAG) != 0)
 #define OBJECT_FLOATING_FLAG 0x2
 
+#define CLASS_HAS_PROPS_FLAG 0x1
+#define CLASS_HAS_PROPS(class) \
+	(G_UNLIKELY(class->flags & CLASS_HAS_PROPS_FLAG))
 
 /* --- signals --- */
 enum {
@@ -131,7 +134,8 @@
 static void	g_object_base_class_init		(GObjectClass	*class);
 static void	g_object_base_class_finalize		(GObjectClass	*class);
 static void	g_object_do_class_init			(GObjectClass	*class);
-static void	g_object_init				(GObject	*object);
+static void	g_object_init				(GObject	*object,
+							 GObjectClass	*class);
 static GObject*	g_object_constructor			(GType                  type,
 							 guint                  n_construct_properties,
 							 GObjectConstructParam *construct_params);
@@ -405,6 +409,9 @@
 {
   g_return_if_fail (G_IS_OBJECT_CLASS (class));
   g_return_if_fail (G_IS_PARAM_SPEC (pspec));
+
+  class->flags |= CLASS_HAS_PROPS_FLAG;
+
   if (pspec->flags & G_PARAM_WRITABLE)
     g_return_if_fail (class->set_property != NULL);
   if (pspec->flags & G_PARAM_READABLE)
@@ -678,13 +685,18 @@
 }
 
 static void
-g_object_init (GObject *object)
+g_object_init (GObject		*object,
+	       GObjectClass	*class)
 {
   object->ref_count = 1;
   g_datalist_init (&object->qdata);
   
+  if (CLASS_HAS_PROPS (class))
+    {
   /* freeze object's notification queue, g_object_newv() preserves pairedness */
   g_object_notify_queue_freeze (object, &property_notify_context);
+    }
+
   /* enter construction list for notify_queue_thaw() and to allow construct-only properties */
   G_LOCK (construction_mutex);
   construction_objects = g_slist_prepend (construction_objects, object);
@@ -1109,7 +1121,7 @@
 	       guint       n_parameters,
 	       GParameter *parameters)
 {
-  GObjectConstructParam *cparams, *oparams;
+  GObjectConstructParam *cparams = NULL, *oparams;
   GObjectNotifyQueue *nqueue = NULL; /* shouldn't be initialized, just to silence compiler */
   GObject *object;
   GObjectClass *class, *unref_class = NULL;
@@ -1125,6 +1137,9 @@
   class = g_type_class_peek_static (object_type);
   if (!class)
     class = unref_class = g_type_class_ref (object_type);
+
+  if (CLASS_HAS_PROPS (class))
+    {
   for (slist = class->construct_properties; slist; slist = slist->next)
     {
       clist = g_list_prepend (clist, slist->data);
@@ -1206,28 +1221,39 @@
       g_list_free_1 (clist);
       clist = tmp;
     }
+    }
 
   /* construct object from construction parameters */
   object = class->constructor (object_type, n_total_cparams, cparams);
+
+  if (CLASS_HAS_PROPS (class))
+    {
   /* free construction values */
   g_free (cparams);
   while (n_cvalues--)
     g_value_unset (cvalues + n_cvalues);
   g_free (cvalues);
+    }
 
   /* adjust freeze_count according to g_object_init() and remaining properties */
   G_LOCK (construction_mutex);
   newly_constructed = slist_maybe_remove (&construction_objects, object);
   G_UNLOCK (construction_mutex);
+
+  if (CLASS_HAS_PROPS (class))
+    {
   if (newly_constructed || n_oparams)
     nqueue = g_object_notify_queue_freeze (object, &property_notify_context);
   if (newly_constructed)
     g_object_notify_queue_thaw (object, nqueue);
+    }
 
   /* run 'constructed' handler if there is one */
   if (newly_constructed && class->constructed)
     class->constructed (object);
 
+  if (CLASS_HAS_PROPS (class))
+    {
   /* set remaining properties */
   for (i = 0; i < n_oparams; i++)
     object_set_property (object, oparams[i].pspec, oparams[i].value, nqueue);
@@ -1236,6 +1262,7 @@
   /* release our own freeze count and handle notifications */
   if (newly_constructed || n_oparams)
     g_object_notify_queue_thaw (object, nqueue);
+    }
 
   if (unref_class)
     g_type_class_unref (unref_class);
Index: gobject/gobject.h
===================================================================
--- gobject/gobject.h	(revision 7572)
+++ gobject/gobject.h	(working copy)
@@ -344,8 +344,10 @@
   void	     (*constructed)		(GObject	*object);
 
   /*< private >*/
+  gsize		flags;
+
   /* padding */
-  gpointer	pdummy[7];
+  gpointer	pdummy[6];
 };
 /**
  * GObjectConstructParam:
