diff -ruN klic-3.003-2002-02-17d/include/klic/gc_macro.h klic-3.003-2002-02-17e/include/klic/gc_macro.h
--- klic-3.003-2002-02-17d/include/klic/gc_macro.h	Sun Feb 17 15:59:14 2002
+++ klic-3.003-2002-02-17e/include/klic/gc_macro.h	Sun Feb 17 17:21:02 2002
@@ -18,8 +18,8 @@
 extern void do_shallow_unify_value(q x, q y);
 
 /* runtime/generic.c */
-extern q* G_SUSPEND(q x, struct goalrec* goal, q* g_allocp);
-extern q* G_MAKE_THE_NEW_GOAL(
+extern void G_SUSPEND(q x, struct goalrec* goal);
+extern void G_MAKE_THE_NEW_GOAL(
   q* var, struct goalrec** goalp1, q(*myself)(),
   unsigned long argc, q argv[], q* g_allocp );
 
@@ -284,10 +284,9 @@
 	if(isref(temp0) && (x) == derefone(temp0)) { \
           q var; \
           struct goalrec *goal; \
-	  g_allocp = \
-	    G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself, \
-				GC_ARGC,GC_ARGV,g_allocp); \
-          g_allocp = G_SUSPEND((x),goal,g_allocp); \
+	  G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself,GC_ARGC,GC_ARGV,g_allocp); \
+          G_SUSPEND((x), goal); \
+          g_allocp = heapp(); \
           GC_RETURN_FROM_NEW(var); \
 	} else { \
 	  (x) = temp0; \
@@ -308,8 +307,8 @@
   if(GC_GCREQUEST == res){ \
     q var; \
     struct goalrec *goal; \
-    g_allocp = \
-      G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself,GC_ARGC,GC_ARGV,g_allocp); \
+    G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GC_ARGC, GC_ARGV, g_allocp); \
+    g_allocp = heapp(); \
     G_PUSH_GOAL_TO_SPECIAL_QUEUE(goal); \
     GC_RETURN_FROM_NEW(var); \
   } \
diff -ruN klic-3.003-2002-02-17d/include/klic/gd_macro.h klic-3.003-2002-02-17e/include/klic/gd_macro.h
--- klic-3.003-2002-02-17d/include/klic/gd_macro.h	Sun Feb 17 16:00:08 2002
+++ klic-3.003-2002-02-17e/include/klic/gd_macro.h	Sun Feb 17 17:21:54 2002
@@ -26,11 +26,11 @@
   struct goalrec** goalp1, q var,
   unsigned long method_functor, q argv[], q* g_allocp );
 
-extern q* G_MAKE_THE_NEW_GOAL(
+extern void G_MAKE_THE_NEW_GOAL(
   q* var, struct goalrec** goalp1, q(*myself)(),
   unsigned long argc, q argv[], q* g_allocp );
 
-extern q* G_SUSPEND(q x, struct goalrec* goal, q* g_allocp);
+extern void G_SUSPEND(q x, struct goalrec* goal);
 
 
 #define GD_rappend(pref) G_rappend0(GD_CLASS_NAME(),pref)
@@ -93,8 +93,8 @@
   if(GD_GCREQUEST == res){ \
     q var; \
     struct goalrec *goal; \
-    g_allocp = \
-      G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself,GD_ARGC,GD_ARGV,g_allocp); \
+    G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GD_ARGC, GD_ARGV, g_allocp); \
+    g_allocp = heapp(); \
     G_PUSH_GOAL_TO_SPECIAL_QUEUE(goal); \
     GD_SUSPEND_NEW(var); \
   } \
@@ -110,8 +110,8 @@
   if(GENERIC_GCREQUEST == res){ \
     q var; \
     struct goalrec *goal; \
-    g_allocp = \
-      G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself,GD_ARGC,GD_ARGV,g_allocp); \
+    G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GD_ARGC, GD_ARGV, g_allocp); \
+    g_allocp = heapp(); \
     G_PUSH_GOAL_TO_SPECIAL_QUEUE(goal); \
     GD_SUSPEND_NEW(var); \
   } \
@@ -177,7 +177,9 @@
           struct goalrec *goal; \
           g_allocp = \
 	    GD_MAKE_GENERIC_GOAL(&goal, (obj), (method_functor), (argv), g_allocp); \
-	  g_allocp = G_SUSPEND((obj),goal,g_allocp); \
+          set_heapp(g_allocp); \
+          G_SUSPEND((obj), goal); \
+	  g_allocp = heapp(); \
           GD_RETURN; \
 	} else { \
 	  (obj) = temp0; \
@@ -202,7 +204,9 @@
           g_allocp = \
 	    GD_MAKE_GENERIC_GOAL(&goal,makefunctor(GD_SELF), \
 				 g_method_functor,GD_ARGV,g_allocp); \
-          g_allocp = G_SUSPEND((x),goal,g_allocp); \
+          set_heapp(g_allocp); \
+          G_SUSPEND((x), goal); \
+          g_allocp = heapp(); \
           GD_RETURN; \
 	} else { \
 	  (x) = temp0; \
@@ -227,10 +231,9 @@
 	if(isref(temp0) && (x) == derefone(temp0)) { \
           q var; \
           struct goalrec *goal; \
-       	  g_allocp = \
-	    G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself,GD_ARGC,\
-				GD_ARGV,g_allocp); \
-          g_allocp = G_SUSPEND((x),goal,g_allocp); \
+	  G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself,GD_ARGC,GD_ARGV,g_allocp); \
+          G_SUSPEND((x), goal); \
+          g_allocp = heapp(); \
           GD_SUSPEND_NEW(var); \
 	} else { \
 	  (x) = temp0; \
diff -ruN klic-3.003-2002-02-17d/include/klic/gg_macro.h klic-3.003-2002-02-17e/include/klic/gg_macro.h
--- klic-3.003-2002-02-17d/include/klic/gg_macro.h	Sun Feb 17 16:01:00 2002
+++ klic-3.003-2002-02-17e/include/klic/gg_macro.h	Sun Feb 17 17:22:33 2002
@@ -20,11 +20,11 @@
 
 /* runtime/generic.c */
 
-extern q* G_MAKE_THE_NEW_GOAL(
+extern void G_MAKE_THE_NEW_GOAL(
   q* var, struct goalrec** goalp1, q(*myself)(),
   unsigned long argc, q argv[], q* g_allocp );
 
-extern q* G_SUSPEND(q x, struct goalrec* goal, q* g_allocp);
+extern void G_SUSPEND(q x, struct goalrec* goal);
 extern q GG_MAKE_HOOK_VAR(struct generator_object* obj);
 
 
@@ -157,10 +157,9 @@
 	if(isref(temp0) && (x) == derefone(temp0)) { \
           q var; \
           struct goalrec *goal; \
-	  g_allocp = \
-	    G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself, \
-				GG_ARGC,GG_ARGV,g_allocp); \
-          g_allocp = G_SUSPEND((x),goal,g_allocp); \
+	  G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself,GG_ARGC,GG_ARGV,g_allocp); \
+          G_SUSPEND((x), goal); \
+          g_allocp = heapp(); \
           GG_RETURN_FROM_NEW(var); \
 	} else { \
 	  (x) = temp0; \
@@ -180,8 +179,8 @@
   if(GG_GCREQUEST == res) { \
     q var; \
     struct goalrec *goal; \
-    g_allocp = G_MAKE_THE_NEW_GOAL(&var,&goal,g_myself, \
-				   GG_ARGC,GG_ARGV,g_allocp); \
+    G_MAKE_THE_NEW_GOAL(&var, &goal, g_myself, GG_ARGC, GG_ARGV, g_allocp); \
+    g_allocp = heapp(); \
     G_PUSH_GOAL_TO_SPECIAL_QUEUE(goal); \
     GG_RETURN_FROM_NEW(var); \
   } \
diff -ruN klic-3.003-2002-02-17d/runtime/generic.c klic-3.003-2002-02-17e/runtime/generic.c
--- klic-3.003-2002-02-17d/runtime/generic.c	Sat Feb 16 11:56:45 2002
+++ klic-3.003-2002-02-17e/runtime/generic.c	Sun Feb 17 17:19:33 2002
@@ -28,14 +28,14 @@
 
 /*************************** inlines *******************************/
 
-extern q*
-G_SUSPEND(x, goal, g_allocp)
+extern void
+G_SUSPEND(x, goal)
   q x;
   struct goalrec* goal;
-  q* g_allocp;
 {
   G_STD_DECL;
-  return suspend_goal(g_allocp, goal, x, 1);
+  q* g_allocp = heapp();
+  set_heapp (suspend_goal (g_allocp, goal, x, 1));
 }
 
 extern q*
@@ -64,7 +64,7 @@
   return g_allocp;
 }
 
-extern q*
+extern void
 G_MAKE_THE_NEW_GOAL(var, goalp1, myself, argc, argv, g_allocp)
   q* var;
   struct goalrec** goalp1;
@@ -86,7 +86,7 @@
   (*goalp1)->args[1] = newobj;
   (*goalp1)->args[2] = newobj2;
   *var = newvar;
-  return g_allocp;
+  set_heapp(g_allocp);
 }
 
 /**********************************************************************/
@@ -98,7 +98,9 @@
       struct goalrec* goal; \
       g_allocp = \
         GD_MAKE_GENERIC_GOAL(&goal,(obj),g_method_functor,g_argv,g_allocp); \
-      g_allocp = G_SUSPEND((obj), goal, g_allocp); \
+      set_heapp(g_allocp); \
+      G_SUSPEND((obj), goal); \
+      g_allocp = heapp(); \
       GD_RETURN; \
     }else{ \
       (obj) = temp0; \
