diff -ruN klic-3.003-2002-03-09/include/klic/g_methtab.h klic-3.003-2002-03-09a/include/klic/g_methtab.h
--- klic-3.003-2002-03-09/include/klic/g_methtab.h	Sat Mar  9 12:02:52 2002
+++ klic-3.003-2002-03-09a/include/klic/g_methtab.h	Sat Mar  9 14:02:05 2002
@@ -31,10 +31,9 @@
 		    unsigned long length */ );
   q* (*gc)( /* struct data_object* obj */ );
   void (*deallocate)( /* struct data_object* obj */ );
-  q *(*body_generic)( /* struct data_object *obj,
+  void (*body_generic)( /* struct data_object* obj,
 				      q method_functor,
-				      q *argv,
-				      q *allocp */ );
+				      q* argv */ );
   q (*g_generic)( /* struct data_object *obj,
 		     q method_functor,
 		     q *args */ );
@@ -79,8 +78,7 @@
 
 struct generator_object_method_table {
   void (*active_unify)(/* q self, q other */);
-  q (*generate)(/* struct generator_object* self,
-		q* allocp */);
+  q (*generate)(/* struct generator_object* self */);
   q (*suspend)(/* q reference, struct goalrec* goal */);
   long (*print)/* print what ? */ (/* struct generator_object* self,
 		  FILE* out_stream,
diff -ruN klic-3.003-2002-03-09/include/klic/gd_macro.h klic-3.003-2002-03-09a/include/klic/gd_macro.h
--- klic-3.003-2002-03-09/include/klic/gd_macro.h	Sat Mar  9 13:30:50 2002
+++ klic-3.003-2002-03-09a/include/klic/gd_macro.h	Sat Mar  9 14:07:45 2002
@@ -380,12 +380,8 @@
     GD_OBJ_TYPE* GD_SELF;
 
 #define GDDEF_GENERIC() \
-static q * \
- GD_rappend(generic) (GD_SELF,g_method_functor,GD_ARGV,g_allocp) \
-    GD_OBJ_TYPE * GD_SELF; \
-    long g_method_functor; \
-    q GD_ARGV[]; \
-    q *g_allocp;
+static void \
+GD_rappend(generic) (GD_OBJ_TYPE* GD_SELF, long g_method_functor, q* GD_ARGV)
 
 /**********************************************************************/
 /*  guard utility */
diff -ruN klic-3.003-2002-03-09/include/klic/gg_macro.h klic-3.003-2002-03-09a/include/klic/gg_macro.h
--- klic-3.003-2002-03-09/include/klic/gg_macro.h	Sat Mar  9 13:01:28 2002
+++ klic-3.003-2002-03-09a/include/klic/gg_macro.h	Sat Mar  9 13:38:38 2002
@@ -187,10 +187,7 @@
   struct goalrec* GG_GOAL;
 
 #define GGDEF_GENERATE() \
-static q \
-GG_rappend(generate) (GG_SELF, g_allocp) \
-  GG_OBJ_TYPE *GG_SELF; \
-  q *g_allocp;
+static q GG_rappend(generate) (GG_OBJ_TYPE* GG_SELF)
 
 #define GGDEF_PRINT() \
   static \
diff -ruN klic-3.003-2002-03-09/runtime/gcode.c klic-3.003-2002-03-09a/runtime/gcode.c
--- klic-3.003-2002-03-09/runtime/gcode.c	Sat Mar  9 12:16:17 2002
+++ klic-3.003-2002-03-09a/runtime/gcode.c	Sat Mar  9 14:13:42 2002
@@ -155,6 +155,7 @@
 GDDEF_GENERIC()
 {
   G_STD_DECL;
+  q* g_allocp = heapp();
 
   GD_SWITCH_ON_GMETHOD {
     GD_METHOD_CASE(module_1);
@@ -167,7 +168,7 @@
       GD_METHOD_NAME_CASE_DEFAULT;
     }
   }
-  GD_RETURN;
+  set_heapp(g_allocp);
 }
 
 GDDEF_PRINT()
diff -ruN klic-3.003-2002-03-09/runtime/ge_exref.c klic-3.003-2002-03-09a/runtime/ge_exref.c
--- klic-3.003-2002-03-09/runtime/ge_exref.c	Sat Mar  9 13:03:21 2002
+++ klic-3.003-2002-03-09a/runtime/ge_exref.c	Sat Mar  9 13:40:34 2002
@@ -39,16 +39,14 @@
 {
   G_STD_DECL;
   q rdhok;
-  q* allocp;
+  q* allocp = heapp();
 
   generic_arg[0] = makeint(GG_SELF->node);
   generic_arg[1] = makeint(GG_SELF->index);
   generic_arg[2] = makeint(GG_SELF->wec);
 
-  allocp = g_allocp;                    /* Using allocp in 'new_generic' */
   new_generic(read_hook_g_new, 3, rdhok, 0);
   assert(allocp == heapp());
-  g_allocp = allocp;                    /* Using allocp in 'new_generic' */
 
   GG_SELF->method_table = 0;
 
@@ -58,7 +56,6 @@
 
   GG_SELF->gc_flag = IMPREC_RELEASED;
 
-  set_heapp(g_allocp);
   return rdhok;
 }
 
diff -ruN klic-3.003-2002-03-09/runtime/generic.c klic-3.003-2002-03-09a/runtime/generic.c
--- klic-3.003-2002-03-09/runtime/generic.c	Fri Mar  8 16:37:26 2002
+++ klic-3.003-2002-03-09a/runtime/generic.c	Sat Mar  9 14:04:04 2002
@@ -129,8 +129,9 @@
     fatal("Generic method issued to a non-object");
   }
   g_obj = data_objectp(g_object);
-  g_allocp = (g_obj->method_table)
-    ->body_generic(g_obj, g_method_functor, g_argv, g_allocp);
+  set_heapp(g_allocp);
+  g_obj->method_table->body_generic(g_obj, g_method_functor, g_argv);
+  g_allocp = heapp();
   GD_RETURN;
 }
 
diff -ruN klic-3.003-2002-03-09/runtime/gfloat.c klic-3.003-2002-03-09a/runtime/gfloat.c
--- klic-3.003-2002-03-09/runtime/gfloat.c	Sat Mar  9 12:29:32 2002
+++ klic-3.003-2002-03-09a/runtime/gfloat.c	Sat Mar  9 14:15:10 2002
@@ -177,6 +177,7 @@
   unsigned long result_index;
   GD_OBJ_TYPE* newobj;
   double (*func)();
+  q* g_allocp = heapp();
 
   self = GD_SELF->value;
   GD_SWITCH_ON_METHOD {
@@ -249,7 +250,8 @@
     GD_METHOD_CASE_DEFAULT;
     }
   }
-  GD_RETURN;
+  set_heapp(g_allocp);
+  return;
 
  apply_1:
   result = func(self);
@@ -258,7 +260,6 @@
   set_heapp(g_allocp);
   GD_UNIFY(GD_ARGV[result_index], makefunctor(newobj));
   assert(g_allocp == heapp());
-  GD_RETURN;
 }
 
 /* guard generic methods */
diff -ruN klic-3.003-2002-03-09/runtime/ggoal.c klic-3.003-2002-03-09a/runtime/ggoal.c
--- klic-3.003-2002-03-09/runtime/ggoal.c	Tue Mar  5 22:14:03 2002
+++ klic-3.003-2002-03-09a/runtime/ggoal.c	Sat Mar  9 14:15:26 2002
@@ -289,6 +289,7 @@
 GDDEF_GENERIC()
 {
   G_STD_DECL;
+  q* g_allocp = heapp();
 
   GD_SWITCH_ON_METHOD{
     GD_METHOD_CASE(reduce_0);
@@ -300,7 +301,7 @@
     GD_METHOD_CASE(set__predicate_2);
     GD_METHOD_CASE_DEFAULT;
   }
-  GD_RETURN;
+  set_heapp(g_allocp);
 }
 
 /* Guard Methods */
diff -ruN klic-3.003-2002-03-09/runtime/gmodule.c klic-3.003-2002-03-09a/runtime/gmodule.c
--- klic-3.003-2002-03-09/runtime/gmodule.c	Sat Mar  9 12:51:01 2002
+++ klic-3.003-2002-03-09a/runtime/gmodule.c	Sat Mar  9 14:15:40 2002
@@ -79,12 +79,13 @@
 GDDEF_GENERIC()
 {
   G_STD_DECL;
+  q* g_allocp = heapp();
 
   GD_SWITCH_ON_GMETHOD {
     GD_METHOD_CASE(name_1);
     GD_METHOD_CASE_DEFAULT;
   }
-  GD_RETURN;
+  set_heapp(g_allocp);
 }
 
 GDDEF_PRINT()
diff -ruN klic-3.003-2002-03-09/runtime/gmvv.c klic-3.003-2002-03-09a/runtime/gmvv.c
--- klic-3.003-2002-03-09/runtime/gmvv.c	Sat Mar  9 12:51:38 2002
+++ klic-3.003-2002-03-09a/runtime/gmvv.c	Sat Mar  9 14:15:55 2002
@@ -419,6 +419,7 @@
 GDDEF_GENERIC()
 {
   G_STD_DECL;
+  q* g_allocp = heapp();
 
   GD_SWITCH_ON_METHOD{
     GD_METHOD_CASE(element_2);
@@ -429,7 +430,7 @@
     GD_METHOD_CASE(join_2);
     GD_METHOD_CASE_DEFAULT;
   }
-  GD_RETURN;
+  set_heapp(g_allocp);
 }
 
 /* guard generic methods */
diff -ruN klic-3.003-2002-03-09/runtime/gobj.h klic-3.003-2002-03-09a/runtime/gobj.h
--- klic-3.003-2002-03-09/runtime/gobj.h	Sat Mar  9 12:09:10 2002
+++ klic-3.003-2002-03-09a/runtime/gobj.h	Sat Mar  9 13:42:24 2002
@@ -21,7 +21,7 @@
   method_table_of(obj)->active_unify((obj), (anothor)); \
 }while(0)
 
-#define generic_generate(obj)  (method_table_of(obj)->generate((obj), heapp()))
+#define generic_generate(obj)  (method_table_of(obj)->generate(obj))
 
 /*** for Shared-memory KLIC system ***/
 #define generic_shmcopy(obj) \
diff -ruN klic-3.003-2002-03-09/runtime/gstring.c klic-3.003-2002-03-09a/runtime/gstring.c
--- klic-3.003-2002-03-09/runtime/gstring.c	Sat Mar  9 12:53:02 2002
+++ klic-3.003-2002-03-09a/runtime/gstring.c	Sat Mar  9 14:16:18 2002
@@ -396,6 +396,7 @@
 GDDEF_GENERIC()
 {
   G_STD_DECL;
+  q* g_allocp = heapp();
 
   GD_SWITCH_ON_METHOD{
     GD_METHOD_CASE(string_2);
@@ -408,7 +409,7 @@
     GD_METHOD_CASE(search__character_4);
     GD_METHOD_CASE_DEFAULT;
   }
-  GD_RETURN;
+  set_heapp(g_allocp);
 }
 
 /* guard generic methods */
diff -ruN klic-3.003-2002-03-09/runtime/random.c klic-3.003-2002-03-09a/runtime/random.c
--- klic-3.003-2002-03-09/runtime/random.c	Sat Mar  9 13:06:11 2002
+++ klic-3.003-2002-03-09a/runtime/random.c	Sat Mar  9 13:42:13 2002
@@ -42,6 +42,7 @@
   q var;
   long one_random;
   struct generator_susp* s;
+  q* g_allocp = heapp();
 
   GG_TRY_TO_ALLOC(cons, makecons, 2, gc_request);
   GG_TRY_TO_ALLOC(var, makeref, 1, gc_request);
