diff -pru libglade2-2.4.0/glade/glade-parser.c tmp/libglade2-2.4.0/glade/glade-parser.c
--- libglade2-2.4.0/glade/glade-parser.c	2004-02-11 09:26:01.000000000 +0800
+++ tmp/libglade2-2.4.0/glade/glade-parser.c	2004-10-28 00:19:28.000000000 +0800
@@ -183,14 +183,14 @@ flush_properties(GladeParseState *state)
     case PROP_WIDGET:
 	if (state->widget->properties)
 	    g_warning("we already read all the props for this key.  Leaking");
-	state->widget->properties = (GladeProperty *)state->props->data;
+	state->widget->properties = (GladePropInfo *)state->props->data;
 	state->widget->n_properties = state->props->len;
 	g_array_free(state->props, FALSE);
 	break;
     case PROP_ATK:
 	if (state->widget->atk_props)
 	    g_warning("we already read all the ATK props for this key.  Leaking");
-	state->widget->atk_props = (GladeProperty *)state->props->data;
+	state->widget->atk_props = (GladePropInfo *)state->props->data;
 	state->widget->n_atk_props = state->props->len;
 	g_array_free(state->props, FALSE);
 	break;
@@ -203,7 +203,7 @@ flush_properties(GladeParseState *state)
 						state->widget->n_children-1];
 	    if (info->properties)
 		g_warning("we already read all the child props for this key.  Leaking");
-	    info->properties = (GladeProperty *)state->props->data;
+	    info->properties = (GladePropInfo *)state->props->data;
 	    info->n_properties = state->props->len;
 	    g_array_free(state->props, FALSE);
 	}
@@ -861,7 +861,7 @@ glade_parser_start_element(GladeParseSta
 static void
 glade_parser_end_element(GladeParseState *state, const xmlChar *name)
 {
-    GladeProperty prop;
+    GladePropInfo prop;
 
     GLADE_NOTE(PARSER, g_message("</%s> in state %s",
 				 name, state_names[state->state]));
@@ -904,7 +904,7 @@ glade_parser_end_element(GladeParseState
 	if (strcmp(name, "property") != 0)
 	    g_warning("should find </property> here.  Found </%s>", name);
 	if (!state->props)
-	    state->props = g_array_new(FALSE, FALSE, sizeof(GladeProperty));
+	    state->props = g_array_new(FALSE, FALSE, sizeof(GladePropInfo));
 	prop.name = state->prop_name;
  	if (state->translate_prop && state->content->str[0] != '\0') {
 	    if (state->context_prop) 
@@ -931,7 +931,7 @@ glade_parser_end_element(GladeParseState
 	if (strcmp(name, "atkproperty") != 0)
 	    g_warning("should find </atkproperty> here.  Found </%s>", name);
 	if (!state->props)
-	    state->props = g_array_new(FALSE, FALSE, sizeof(GladeProperty));
+	    state->props = g_array_new(FALSE, FALSE, sizeof(GladePropInfo));
 	prop.name = state->prop_name;
  	if (state->translate_prop && state->content->str[0] != '\0') {
 	    if (state->context_prop) 
@@ -998,7 +998,7 @@ glade_parser_end_element(GladeParseState
 	if (strcmp(name, "property") != 0)
 	    g_warning("should find </property> here.  Found </%s>", name);
 	if (!state->props)
-	    state->props = g_array_new(FALSE, FALSE, sizeof(GladeProperty));
+	    state->props = g_array_new(FALSE, FALSE, sizeof(GladePropInfo));
 	prop.name = state->prop_name;
  	if (state->translate_prop && state->content->str[0] != '\0') {
 	    if (state->context_prop) 
@@ -1334,7 +1334,7 @@ dump_widget(xmlNode *parent, GladeWidget
     }
 
     for (i = 0; i < info->n_children; i++) {
-	xmlNode *child;
+	xmlNode *child, *packing;
 	GladeChildInfo *childinfo = &info->children[i];
 	gint k;
 
@@ -1348,22 +1348,38 @@ dump_widget(xmlNode *parent, GladeWidget
 	xmlNodeAddContent(widget, "\n");
 	xmlNodeAddContent(child, "\n");
 
-	for (k = 0; k < childinfo->n_properties; k++) { 
-	    xmlNode *node;
-
-	    for (j = 0; j < indent + 2; j++)
-		xmlNodeAddContent(child, "  ");
-	    node = xmlNewNode(NULL, "property");
-	    xmlSetProp(node, "name", childinfo->properties[i].name);
-	    xmlNodeSetContent(node, childinfo->properties[i].value);
-	    xmlAddChild(child, node);
-	    xmlNodeAddContent(child, "\n");
-	}
-
 	for (j = 0; j < indent + 2; j++)
 	    xmlNodeAddContent(child, "  ");
 	dump_widget(child, childinfo->child, indent + 2);
 	xmlNodeAddContent(child, "\n");
+
+	if (childinfo->n_properties)
+        {
+            for (j = 0; j < indent + 2; j++)
+	        xmlNodeAddContent(child, "  ");
+	    packing = xmlNewNode(NULL, "packing");
+	    xmlAddChild(child, packing);
+	    xmlNodeAddContent(packing, "\n");
+        }
+
+        for (k = 0; k < childinfo->n_properties; k++) { 
+	    xmlNode *node;
+
+	    for (j = 0; j < indent + 3; j++)
+		xmlNodeAddContent(packing, "  ");
+	    node = xmlNewNode(NULL, "property");
+	    xmlSetProp(node, "name", childinfo->properties[k].name);
+	    xmlNodeSetContent(node, childinfo->properties[k].value);
+	    xmlAddChild(packing, node);
+	    xmlNodeAddContent(packing, "\n");
+	}
+
+	if (childinfo->n_properties)
+        {
+	    for (j = 0; j < indent + 2; j++)
+	        xmlNodeAddContent(packing, "  ");
+            xmlNodeAddContent(child, "\n");
+        }
 
 	for (j = 0; j < indent + 1; j++)
 	    xmlNodeAddContent(child, "  ");
diff -pru libglade2-2.4.0/glade/glade-parser.h tmp/libglade2-2.4.0/glade/glade-parser.h
--- libglade2-2.4.0/glade/glade-parser.h	2003-10-21 13:31:33.000000000 +0800
+++ tmp/libglade2-2.4.0/glade/glade-parser.h	2004-10-28 00:19:24.000000000 +0800
@@ -28,8 +28,8 @@
 
 G_BEGIN_DECLS
 
-typedef struct _GladeProperty GladeProperty;
-struct _GladeProperty {
+typedef struct _GladePropInfo GladePropInfo;
+struct _GladePropInfo {
     gchar *name;
     gchar *value;
 };
@@ -70,10 +70,10 @@ struct _GladeWidgetInfo {
     gchar *classname;
     gchar *name;
 
-    GladeProperty *properties;
+    GladePropInfo *properties;
     guint n_properties;
 
-    GladeProperty *atk_props;
+    GladePropInfo *atk_props;
     guint n_atk_props;
 
     GladeSignalInfo *signals;
@@ -93,7 +93,7 @@ struct _GladeWidgetInfo {
 };
 
 struct _GladeChildInfo {
-    GladeProperty *properties;
+    GladePropInfo *properties;
     guint n_properties;
 
     GladeWidgetInfo *child;
diff -pru libglade2-2.4.0/glade/glade-xml.c tmp/libglade2-2.4.0/glade/glade-xml.c
--- libglade2-2.4.0/glade/glade-xml.c	2004-02-11 09:26:02.000000000 +0800
+++ tmp/libglade2-2.4.0/glade/glade-xml.c	2004-10-28 00:19:22.000000000 +0800
@@ -1578,7 +1578,7 @@ glade_xml_set_value_from_string (GladeXM
 typedef struct _CustomPropData CustomPropData;
 struct _CustomPropData {
     GladeApplyCustomPropFunc apply_prop;
-    GladeProperty *prop;
+    GladePropInfo *prop;
 };
 
 /**
@@ -1689,7 +1689,7 @@ glade_standard_build_widget(GladeXML *xm
 
     /* handle deferred properties */
     for (tmp = deferred_props; tmp; tmp = tmp->next) {
-	GladeProperty *prop = tmp->data;
+	GladePropInfo *prop = tmp->data;
 
 	glade_xml_handle_widget_prop(xml, widget, prop->name, prop->value);
     }
