diff -ruN klic-3.003-2002-01-13/include/klic/gc_macro.h klic-3.003-2002-01-15/include/klic/gc_macro.h
--- klic-3.003-2002-01-13/include/klic/gc_macro.h	Mon Dec 31 12:04:47 2001
+++ klic-3.003-2002-01-15/include/klic/gc_macro.h	Tue Jan 15 10:42:50 2002
@@ -430,10 +430,10 @@
     q *g_allocp;
 
 #define GCDEF_DEALLOCATE() \
-  static \
-  long \
-  GC_rappend(deallocate) (GC_SELF) \
-    GC_OBJ_TYPE *GC_SELF;
+  static q* \
+  GC_rappend(deallocate) (GC_SELF, g_allocp) \
+    GC_OBJ_TYPE *GC_SELF; \
+    q* g_allocp;
 
 #define GCDEF_CLOSE() \
   static q * \
diff -ruN klic-3.003-2002-01-13/include/klic/gc_methtab.h klic-3.003-2002-01-15/include/klic/gc_methtab.h
--- klic-3.003-2002-01-13/include/klic/gc_methtab.h	Thu Dec 27 19:15:58 2001
+++ klic-3.003-2002-01-15/include/klic/gc_methtab.h	Tue Jan 15 10:43:40 2002
@@ -14,7 +14,7 @@
 
 /* runtime/generic.c */
 extern long GD_STD_REGIST(struct data_object* GD_SELF, q* g_allocp);
-extern long GD_STD_DEALLOCATE(struct data_object* GD_SELF);
+extern q* GD_STD_DEALLOCATE(struct data_object* GD_SELF, q* g_allocp);
 extern q* GD_STD_CLOSE(struct data_object* GD_SELF, q* g_allocp);
 extern q GD_STD_ENCODE(struct data_object* self, void* buffer);
 
diff -ruN klic-3.003-2002-01-13/include/klic/gd_macro.h klic-3.003-2002-01-15/include/klic/gd_macro.h
--- klic-3.003-2002-01-13/include/klic/gd_macro.h	Sat Jan 12 20:05:30 2002
+++ klic-3.003-2002-01-15/include/klic/gd_macro.h	Tue Jan 15 10:44:24 2002
@@ -395,9 +395,10 @@
     q *g_allocp;
 
 #define GDDEF_DEALLOCATE() \
-  static long \
-  GD_rappend(deallocate) (GD_SELF) \
-    GD_OBJ_TYPE * GD_SELF;
+  static q* \
+  GD_rappend(deallocate) (GD_SELF, g_allocp) \
+    GD_OBJ_TYPE * GD_SELF; \
+    q* g_allocp;
 
 #define GDDEF_CLOSE() \
   static q * \
diff -ruN klic-3.003-2002-01-13/include/klic/gd_methtab.h klic-3.003-2002-01-15/include/klic/gd_methtab.h
--- klic-3.003-2002-01-13/include/klic/gd_methtab.h	Thu Dec 27 19:15:58 2001
+++ klic-3.003-2002-01-15/include/klic/gd_methtab.h	Tue Jan 15 10:44:42 2002
@@ -23,7 +23,7 @@
 
 extern q* GD_STD_GC(struct data_object* GD_SELF, q* g_allocp, q** g_sp);
 extern long GD_STD_REGIST(struct data_object* GD_SELF, q* g_allocp);
-extern long GD_STD_DEALLOCATE(struct data_object* GD_SELF);
+extern q* GD_STD_DEALLOCATE(struct data_object* GD_SELF, q* g_allocp);
 extern q* GD_STD_CLOSE(struct data_object* GD_SELF, q* g_allocp);
 
 extern q* GD_STD_GENERIC(
diff -ruN klic-3.003-2002-01-13/include/klic/gg_macro.h klic-3.003-2002-01-15/include/klic/gg_macro.h
--- klic-3.003-2002-01-13/include/klic/gg_macro.h	Mon Dec 31 12:04:47 2001
+++ klic-3.003-2002-01-15/include/klic/gg_macro.h	Tue Jan 15 10:45:17 2002
@@ -284,10 +284,10 @@
     q *g_allocp;
 
 #define GGDEF_DEALLOCATE() \
-  static \
-  long \
-  GG_rappend(deallocate) (GG_SELF) \
-    GG_OBJ_TYPE *GG_SELF;
+  static q* \
+  GG_rappend(deallocate) (GG_SELF, g_allocp) \
+    GG_OBJ_TYPE *GG_SELF; \
+    q* g_allocp;
 
 #define GGDEF_CLOSE() \
   static q * \
diff -ruN klic-3.003-2002-01-13/include/klic/gg_methtab.h klic-3.003-2002-01-15/include/klic/gg_methtab.h
--- klic-3.003-2002-01-13/include/klic/gg_methtab.h	Thu Dec 27 19:15:58 2001
+++ klic-3.003-2002-01-15/include/klic/gg_methtab.h	Tue Jan 15 10:45:35 2002
@@ -15,7 +15,7 @@
 
 /* runtime/generic.c */
 extern long GD_STD_REGIST(struct data_object* GD_SELF, q* g_allocp);
-extern long GD_STD_DEALLOCATE(struct data_object* GD_SELF);
+extern q* GD_STD_DEALLOCATE(struct data_object* GD_SELF, q* g_allocp);
 extern q* GD_STD_CLOSE(struct data_object* GD_SELF, q* g_allocp);
 extern q GD_STD_ENCODE(struct data_object* self, void* buffer);
 
diff -ruN klic-3.003-2002-01-13/runtime/generic.c klic-3.003-2002-01-15/runtime/generic.c
--- klic-3.003-2002-01-13/runtime/generic.c	Sat Jan 12 20:05:30 2002
+++ klic-3.003-2002-01-15/runtime/generic.c	Tue Jan 15 10:41:31 2002
@@ -195,17 +195,18 @@
   return 1L;
 }
 
-extern long
-GD_STD_DEALLOCATE(GD_SELF)
+extern q*
+GD_STD_DEALLOCATE(GD_SELF, g_allocp)
   struct data_object* GD_SELF;
+  q* g_allocp;
 {
-  return 1L;
+  return g_allocp;
 }
 
 extern q*
 GD_STD_CLOSE(GD_SELF, g_allocp)
-  q* g_allocp;
   struct data_object* GD_SELF;
+  q* g_allocp;
 {
   return g_allocp;
 }
diff -ruN klic-3.003-2002-01-13/runtime/otbl.c klic-3.003-2002-01-15/runtime/otbl.c
--- klic-3.003-2002-01-13/runtime/otbl.c	Sun Jan  6 15:18:16 2002
+++ klic-3.003-2002-01-15/runtime/otbl.c	Tue Jan 15 10:39:47 2002
@@ -18,7 +18,8 @@
 
 #define OTBLBLKSIZE 100
 
-#define generic_deallocate(obj) (obj)->method_table->deallocate(obj)
+#define generic_deallocate(obj, allocp) \
+  (obj)->method_table->deallocate(obj, allocp)
 
 struct object_table {
   unsigned int type;
@@ -64,7 +65,7 @@
   q* allocp;
 {
   struct object_table* tbl = tbl_root;
-  struct object_table* newtbl = (struct object_table *)0;
+  struct object_table* newtbl = NULL;
   struct object_table** ptr = &newtbl;
   struct object_table* free = free_oent;
 
@@ -74,19 +75,18 @@
     q newplace = (q) obj->method_table;
 
     if( !isstruct(newplace) ){  /* the object is garbage */
-      int retval;
       switch( tbl->type ){
+      case G_DATA:
+	allocp = generic_deallocate(obj, allocp);
+	break;
       case G_CONSUMER:
-	retval = generic_deallocate((struct consumer_object*) obj);
+	allocp = generic_deallocate((struct consumer_object*) obj, allocp);
 	break;
       case G_GENERATOR:
-	retval = generic_deallocate((struct generator_object*) obj);
+	allocp = generic_deallocate((struct generator_object*) obj, allocp);
 	break;
-      default:  /* data object */
-	retval = generic_deallocate(obj);
-      }
-      if( retval ){
-	fatal("Close method has not been supported\n");
+      default:
+	fatal("Called deallocate method for unknown type generic object\n");
       }
       tbl->next = free;
       free = tbl;
