diff -rup gob2-2.0.12-ORIG/src/checks.c gob2-2.0.12/src/checks.c
--- gob2-2.0.12-ORIG/src/checks.c	2005-07-22 20:48:06.000000000 +0200
+++ gob2-2.0.12/src/checks.c	2005-11-07 12:58:17.000000000 +0100
@@ -334,12 +334,12 @@ check_signal_args (Class *c)
 				continue;
 
 			for (l = m->gtktypes; l != NULL; l = l->next) {
-				if (strcmp (l->data, "BOXED") == 0) {
-					error_printf (GOB_ERROR, m->line_no,
-						      "BOXED not allowed as "
-						      "a signal argument, use "
-						      "POINTER");
-					continue;
+				if (strncmp (l->data, "BOXED_", 6) == 0) {
+/* 					error_printf (GOB_ERROR, m->line_no, */
+/* 						      "BOXED not allowed as " */
+/* 						      "a signal argument, use " */
+/* 						      "POINTER"); */
+ 					continue;
 				} else if (strcmp (l->data, "FLAGS") == 0) {
 					error_printf (GOB_ERROR, m->line_no,
 						      "FLAGS not allowed as "
diff -rup gob2-2.0.12-ORIG/src/main.c gob2-2.0.12/src/main.c
--- gob2-2.0.12-ORIG/src/main.c	2005-07-22 21:55:23.000000000 +0200
+++ gob2-2.0.12/src/main.c	2005-11-07 12:58:11.000000000 +0100
@@ -737,6 +737,8 @@ print_signal_marsal_args (const Method *
 			if (strcmp (li->data, "UNICHAR") == 0)
 				/* hack because glib is braindamaged */
 				get_func = g_strdup ("g_value_get_uint");
+			else if (strncmp(li->data, "BOXED_", 6) == 0)
+			        get_func = g_strdup ("g_value_get_boxed");
 			else
 				get_func = g_strdup_printf
 					("g_value_get_%s", (char *)li->data);
@@ -1308,9 +1310,16 @@ add_signals(Class *c)
 		
 		if( ! is_none) {
 			GList *l;
-			for(l = m->gtktypes->next; l != NULL; l = l->next)
-				out_printf(out, ",\n\t\t\tG_TYPE_%s",
-					(char *)l->data);
+			char  *t;
+			for(l = m->gtktypes->next; l != NULL; l = l->next) {			  
+			  if(strncmp(l->data, "BOXED_", 6) == 0)
+			    t=g_strdup(&(l->data[6]));
+			  else
+			    t=g_strconcat("G_TYPE_", l->data, NULL);
+			  out_printf(out, ",\n\t\t\t%s",
+				     t);
+			  g_free(t);
+			}
 		}
 
 		out_printf(out, ");\n");
@@ -2715,8 +2724,8 @@ put_signal_args (Method *m)
 		char *cast = g_strdup (get_cast (ali->data, FALSE));
 		/* FIXME: This code is so fucking ugly it hurts */
 		gboolean do_static = 
-			(strcmp ((char *)ali->data, "STRING") == 0 ||
-			 strcmp ((char *)ali->data, "BOXED") == 0);
+			(strcmp  ((char *)ali->data, "STRING") == 0 ||
+			 strncmp ((char *)ali->data, "BOXED_", 6) == 0);
 		char *set_func;
 
 		if (cast == NULL) {
@@ -2726,14 +2735,23 @@ put_signal_args (Method *m)
 		   the we know all the types */
 		g_assert (cast != NULL);
 
+		char *t;
+		if(strncmp(ali->data, "BOXED_", 6) == 0)
+		  t=g_strdup(&(ali->data[6]));
+		else
+		  t=g_strconcat("G_TYPE_", ali->data, NULL);
+
 		out_printf (out,
 			    "\t___param_values[%d].g_type = 0;\n"
-			    "\tg_value_init (&___param_values[%d], G_TYPE_%s);\n",
-			    i, i, (char *)ali->data);
+			    "\tg_value_init (&___param_values[%d], %s);\n",
+			    i, i, t);
+		g_free(t);
 
 		if (strcmp (ali->data, "UNICHAR") == 0)
 			/* hack because glib is braindamaged */
 			set_func = g_strdup ("g_value_set_uint");
+		else if (strncmp (ali->data, "BOXED_", 6) == 0)
+			set_func = g_strdup ("g_value_set_static_boxed");
 		else
 			set_func = g_strdup_printf ("g_value_set%s_%s",
 						    do_static ? "_static" : "",
diff -rup gob2-2.0.12-ORIG/src/util.c gob2-2.0.12/src/util.c
--- gob2-2.0.12-ORIG/src/util.c	2004-09-23 01:03:10.000000000 +0200
+++ gob2-2.0.12/src/util.c	2005-11-07 12:58:23.000000000 +0100
@@ -268,7 +268,10 @@ get_cast (const char *type, gboolean sim
 
 	init_type_hash ();
 
-	gtype = g_hash_table_lookup (type_hash, type);
+	if(strncmp(type, "BOXED_", 6) == 0)	 
+	  gtype = g_hash_table_lookup (type_hash, "BOXED");
+	else
+	  gtype = g_hash_table_lookup (type_hash, type);
 
 	if (gtype == NULL ||
 	    (simple_only &&
