diff -ruN klic-3.003-2002-03-05f/include/klic/g_basic.h klic-3.003-2002-03-05g/include/klic/g_basic.h
--- klic-3.003-2002-03-05f/include/klic/g_basic.h	Tue Mar  5 16:13:37 2002
+++ klic-3.003-2002-03-05g/include/klic/g_basic.h	Tue Mar  5 22:07:53 2002
@@ -112,7 +112,7 @@
 #define G_COPY_KL1_TERM_TO_NEWGEN(from,to) \
 do{ \
   if(isref(from)) { \
-    q *newword = g_allocp++; \
+    q* newword = klic_alloc(1); \
     derefone(newword) = (from); \
     (to) = makeref(newword); \
     push_gc_stack(newword); \
@@ -120,7 +120,6 @@
     (to) = (from); \
     push_gc_stack(&(to)); \
   } \
-  assert(g_allocp >= heapp()); \
 }while(0)
 
 
diff -ruN klic-3.003-2002-03-05f/include/klic/gc_macro.h klic-3.003-2002-03-05g/include/klic/gc_macro.h
--- klic-3.003-2002-03-05f/include/klic/gc_macro.h	Tue Mar  5 21:27:43 2002
+++ klic-3.003-2002-03-05g/include/klic/gc_macro.h	Tue Mar  5 21:54:59 2002
@@ -226,10 +226,9 @@
 #define GCSET_NEWOBJ_IN_NEWGEN(newobj) \
 do{ \
   unsigned long size = GC_OBJ_SIZE(GC_SELF); \
-  *g_allocp = (q) GC_SELF->method_table; \
-  (newobj) = (GC_OBJ_TYPE *) g_allocp; \
-  g_allocp += size; \
-  if(g_allocp > real_heaplimit()) fatal("not enough space collected"); \
+  *heapp() = (q) GC_SELF->method_table; \
+  (newobj) = (GC_OBJ_TYPE*) klic_alloc(size); \
+  if(heapp() > real_heaplimit()) fatal("not enough space collected"); \
 }while(0)
 
 #define GC_RETURN_FROM_GC(newgobj) \
diff -ruN klic-3.003-2002-03-05f/include/klic/gd_macro.h klic-3.003-2002-03-05g/include/klic/gd_macro.h
--- klic-3.003-2002-03-05f/include/klic/gd_macro.h	Tue Mar  5 21:30:11 2002
+++ klic-3.003-2002-03-05g/include/klic/gd_macro.h	Tue Mar  5 22:04:40 2002
@@ -148,11 +148,10 @@
 
 #define GDSET_NEWOBJ_IN_NEWGEN(newobj) \
 do{ \
-    unsigned long size = GD_OBJ_SIZE(GD_SELF); \
-    (newobj) = (GD_OBJ_TYPE *) g_allocp; \
-    (newobj)->method_table = GD_SELF->method_table; \
-    g_allocp += size; \
-    if(g_allocp > real_heaplimit()) fatal("not enough space collected"); \
+  unsigned long size = GD_OBJ_SIZE(GD_SELF); \
+  (newobj) = (GD_OBJ_TYPE*) klic_alloc(size); \
+  (newobj)->method_table = GD_SELF->method_table; \
+  if(heapp() > real_heaplimit()) fatal("not enough space collected"); \
 }while(0)
 
 /***************************************************************************/
@@ -377,8 +376,6 @@
 do{ \
   return(((q *)(newgobj))); \
 }while(0)
-
-#define GD_COPY_KL1_TERM_TO_NEWGEN(from,to) G_COPY_KL1_TERM_TO_NEWGEN(from,to) 
 
 #define GDDEF_DEALLOCATE() \
   static void \
diff -ruN klic-3.003-2002-03-05f/include/klic/gg_macro.h klic-3.003-2002-03-05g/include/klic/gg_macro.h
--- klic-3.003-2002-03-05f/include/klic/gg_macro.h	Tue Mar  5 21:31:39 2002
+++ klic-3.003-2002-03-05g/include/klic/gg_macro.h	Tue Mar  5 21:57:42 2002
@@ -213,11 +213,10 @@
 
 #define GGSET_NEWOBJ_IN_NEWGEN(newobj) \
 do{ \
-    unsigned long size = GG_OBJ_SIZE; \
-    *g_allocp = (q) GG_SELF->method_table; \
-    (newobj) = (GG_OBJ_TYPE *) g_allocp; \
-    g_allocp += size; \
-    if(g_allocp > real_heaplimit()) fatal("not enough space collected"); \
+  unsigned long size = GG_OBJ_SIZE; \
+  *heapp() = (q) GG_SELF->method_table; \
+  (newobj) = (GG_OBJ_TYPE *) klic_alloc(size); \
+  if(heapp() > real_heaplimit()) fatal("not enough space collected"); \
 }while(0)
 
 #define GG_RETURN_FROM_GC(newgobj) \
diff -ruN klic-3.003-2002-03-05f/runtime/gcode.c klic-3.003-2002-03-05g/runtime/gcode.c
--- klic-3.003-2002-03-05f/runtime/gcode.c	Tue Mar  5 21:34:12 2002
+++ klic-3.003-2002-03-05g/runtime/gcode.c	Tue Mar  5 22:08:48 2002
@@ -57,13 +57,11 @@
 {
   G_STD_DECL;
   GD_OBJ_TYPE* newself;
-  q* g_allocp = heapp();
 
   GDSET_NEWOBJ_IN_NEWGEN(newself);
   newself->pdesc = GD_SELF->pdesc;
-  GD_COPY_KL1_TERM_TO_NEWGEN(GD_SELF->module_obj, newself->module_obj);
+  G_COPY_KL1_TERM_TO_NEWGEN(GD_SELF->module_obj, newself->module_obj);
   newself->predicate_name = GD_SELF->predicate_name;
-  set_heapp(g_allocp);
   GD_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/ge_exref.c klic-3.003-2002-03-05g/runtime/ge_exref.c
--- klic-3.003-2002-03-05f/runtime/ge_exref.c	Tue Mar  5 21:34:58 2002
+++ klic-3.003-2002-03-05g/runtime/ge_exref.c	Tue Mar  5 22:09:56 2002
@@ -134,7 +134,6 @@
 {
   G_STD_DECL;
   GG_OBJ_TYPE* newself;
-  q* g_allocp = heapp();
 
   INT_CL_DEBUG_X(klic_fprintf(stdout, "exref GC invoked\n"));
 
@@ -149,12 +148,10 @@
   newself->index = GG_SELF->index;
   newself->wec = GG_SELF->wec;
   G_COPY_KL1_TERM_TO_NEWGEN(GG_SELF->to_exref, newself->to_exref);
-  assert(g_allocp >= heapp());
 
   GG_SELF->gc_flag = IMPREC_COPIED;
   newself->gc_flag = IMPREC_NOT_COPIED;
 
-  set_heapp(g_allocp);
   GG_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/ge_readhook.c klic-3.003-2002-03-05g/runtime/ge_readhook.c
--- klic-3.003-2002-03-05f/runtime/ge_readhook.c	Tue Mar  5 21:35:20 2002
+++ klic-3.003-2002-03-05g/runtime/ge_readhook.c	Tue Mar  5 22:10:43 2002
@@ -66,7 +66,6 @@
 {
   G_STD_DECL;
   GC_OBJ_TYPE* newself;
-  q* g_allocp = heapp();
 
   INT_CL_DEBUG_X(klic_fprintf(stdout, "readhook GC invoked\n"));
 
@@ -78,9 +77,7 @@
   newself->return_index = GC_SELF->return_index;
 
   G_COPY_KL1_TERM_TO_NEWGEN(GC_SELF->to_read_hook, newself->to_read_hook);
-  assert(g_allocp >= heapp());
 
-  set_heapp(g_allocp);
   GC_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/ge_replyhook.c klic-3.003-2002-03-05g/runtime/ge_replyhook.c
--- klic-3.003-2002-03-05f/runtime/ge_replyhook.c	Tue Mar  5 21:35:34 2002
+++ klic-3.003-2002-03-05g/runtime/ge_replyhook.c	Tue Mar  5 22:22:46 2002
@@ -46,14 +46,12 @@
 {
   G_STD_DECL;
   GC_OBJ_TYPE* newself;
-  q* g_allocp = heapp();
 
   GCSET_NEWOBJ_IN_NEWGEN(newself);
   newself->node = GC_SELF->node;
   newself->index = GC_SELF->index;
   newself->wec = GC_SELF->wec;
 
-  set_heapp(g_allocp);
   GC_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/gfloat.c klic-3.003-2002-03-05g/runtime/gfloat.c
--- klic-3.003-2002-03-05f/runtime/gfloat.c	Tue Mar  5 21:36:19 2002
+++ klic-3.003-2002-03-05g/runtime/gfloat.c	Tue Mar  5 22:21:52 2002
@@ -110,12 +110,12 @@
 {
   G_STD_DECL;
   GD_OBJ_TYPE* newself;
+
   q* g_allocp = heapp();
-
   ALIGN();
+  set_heapp(g_allocp);
   GDSET_NEWOBJ_IN_NEWGEN(newself);
   newself->value = GD_SELF->value;
-  set_heapp(g_allocp);
   GD_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/ggoal.c klic-3.003-2002-03-05g/runtime/ggoal.c
--- klic-3.003-2002-03-05f/runtime/ggoal.c	Tue Mar  5 21:37:12 2002
+++ klic-3.003-2002-03-05g/runtime/ggoal.c	Tue Mar  5 22:14:03 2002
@@ -120,22 +120,20 @@
 {
   G_STD_DECL;
   GD_OBJ_TYPE *newself;
-  q* g_allocp = heapp();
   struct goalrec *goal = GD_SELF->goal;
-  struct goalrec *newgoal = (struct goalrec *)g_allocp;
+  struct goalrec* newgoal;
   long arity, k;
 
   arity = goal->pred->arity;
-  g_allocp += arity + 2;
+  newgoal = (struct goalrec*) klic_alloc(arity + 2);
   newgoal->next = 0;
   newgoal->pred = goal->pred;
   for (k = 0; k < arity; k++) {
-    GD_COPY_KL1_TERM_TO_NEWGEN(goal->args[k], newgoal->args[k]);
+    G_COPY_KL1_TERM_TO_NEWGEN(goal->args[k], newgoal->args[k]);
   }
   GDSET_NEWOBJ_IN_NEWGEN(newself);
   newself->goal = newgoal;
   newself->id = GD_SELF->id;
-  set_heapp(g_allocp);
   GD_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/gio.c klic-3.003-2002-03-05g/runtime/gio.c
--- klic-3.003-2002-03-05f/runtime/gio.c	Tue Mar  5 21:37:30 2002
+++ klic-3.003-2002-03-05g/runtime/gio.c	Tue Mar  5 22:14:53 2002
@@ -428,20 +428,16 @@
 {
   G_STD_DECL;
   GC_OBJ_TYPE* newself;
-  q* g_allocp = heapp();
 
   GCSET_NEWOBJ_IN_NEWGEN(newself);
   *newself = *GC_SELF;
   if( GC_SELF->stream != 0 ){
     G_COPY_KL1_TERM_TO_NEWGEN(GC_SELF->stream, newself->stream);
-    assert(g_allocp >= heapp());
   }else{
     newself->stream = 0;
   }
   G_COPY_KL1_TERM_TO_NEWGEN(GC_SELF->inname, newself->inname);
   G_COPY_KL1_TERM_TO_NEWGEN(GC_SELF->outname, newself->outname);
-  assert(g_allocp >= heapp());
-  set_heapp(g_allocp);
   GC_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/gmerge.c klic-3.003-2002-03-05g/runtime/gmerge.c
--- klic-3.003-2002-03-05f/runtime/gmerge.c	Tue Mar  5 21:37:49 2002
+++ klic-3.003-2002-03-05g/runtime/gmerge.c	Tue Mar  5 22:15:17 2002
@@ -134,13 +134,10 @@
 {
   G_STD_DECL;
   GC_OBJ_TYPE *newself;
-  q* g_allocp = heapp();
 
   GCSET_NEWOBJ_IN_NEWGEN(newself);
   newself->count = GC_SELF->count;
-  G_COPY_KL1_TERM_TO_NEWGEN(GC_SELF->outstream,newself->outstream);
-  assert(g_allocp >= heapp());
-  set_heapp(g_allocp);
+  G_COPY_KL1_TERM_TO_NEWGEN(GC_SELF->outstream, newself->outstream);
   GC_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/gmodule.c klic-3.003-2002-03-05g/runtime/gmodule.c
--- klic-3.003-2002-03-05f/runtime/gmodule.c	Tue Mar  5 21:38:12 2002
+++ klic-3.003-2002-03-05g/runtime/gmodule.c	Tue Mar  5 22:21:35 2002
@@ -59,11 +59,9 @@
 {
   G_STD_DECL;
   GD_OBJ_TYPE *newself;
-  q* g_allocp = heapp();
 
   GDSET_NEWOBJ_IN_NEWGEN(newself);
   newself->name = GD_SELF->name;
-  set_heapp(g_allocp);
   GD_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/gmvv.c klic-3.003-2002-03-05g/runtime/gmvv.c
--- klic-3.003-2002-03-05f/runtime/gmvv.c	Tue Mar  5 21:38:27 2002
+++ klic-3.003-2002-03-05g/runtime/gmvv.c	Tue Mar  5 22:17:19 2002
@@ -138,7 +138,6 @@
 {
   G_STD_DECL;
   GD_OBJ_TYPE *newself;
-  q* g_allocp = heapp();
 
   if (GD_SELF->iscnst) {
     fatal("GC method for constant vector unexpected");
@@ -151,25 +150,23 @@
     long size = GD_SELF->index;
     q *newbody;
     long k;
-    if ((g_allocp+size)>real_heaplimit()) fatal("Not enough space collected");
-    newbody = g_allocp;
-    g_allocp += size;
+    if(heapp() + size > real_heaplimit()) fatal("Not enough space collected");
+    newbody = klic_alloc(size);
     newself->next = VECTOR_SHALLOW_MARK;
     newself->index = size;
     newself->body = newbody;
     for (k=0; k<size; k++) {
-      GD_COPY_KL1_TERM_TO_NEWGEN(body[k], newbody[k]);
+      G_COPY_KL1_TERM_TO_NEWGEN(body[k], newbody[k]);
     }
   } else {
     /* Deep version */
     newself->index = GD_SELF->index;
-    GD_COPY_KL1_TERM_TO_NEWGEN(GD_SELF->next, newself->next);
+    G_COPY_KL1_TERM_TO_NEWGEN(GD_SELF->next, newself->next);
 
-    /* GD_COPY_KL1_TERM_TO_NEWGEN(GD_SELF->body, newself->body); */
+    /* G_COPY_KL1_TERM_TO_NEWGEN(GD_SELF->body, newself->body); */
     newself->body = GD_SELF->body;
     push_gc_stack((q*) &(newself->body));
   }
-  set_heapp(g_allocp);
   GD_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/gpointer.c klic-3.003-2002-03-05g/runtime/gpointer.c
--- klic-3.003-2002-03-05f/runtime/gpointer.c	Tue Mar  5 21:38:47 2002
+++ klic-3.003-2002-03-05g/runtime/gpointer.c	Tue Mar  5 22:21:11 2002
@@ -37,11 +37,9 @@
 {
   G_STD_DECL;
   GD_OBJ_TYPE *newself;
-  q* g_allocp = heapp();
 
   GDSET_NEWOBJ_IN_NEWGEN(newself);
   newself->pointer = GD_SELF->pointer;
-  set_heapp(g_allocp);
   GD_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/gstring.c klic-3.003-2002-03-05g/runtime/gstring.c
--- klic-3.003-2002-03-05f/runtime/gstring.c	Tue Mar  5 21:39:07 2002
+++ klic-3.003-2002-03-05g/runtime/gstring.c	Tue Mar  5 22:18:42 2002
@@ -128,7 +128,6 @@
 {
   G_STD_DECL;
   GD_OBJ_TYPE *newself;
-  q* g_allocp = heapp();
 
   GDSET_NEWOBJ_IN_NEWGEN(newself);
   if (GD_SELF->iscnst) {
@@ -140,9 +139,8 @@
     unsigned char *newbody;
     unsigned long size = GD_SELF->index;
     unsigned long qsize = ROUND_UP(size);
-    if ((g_allocp+qsize)>real_heaplimit()) fatal("Not enough space collected");
-    newbody = (unsigned char *)g_allocp;
-    g_allocp += qsize;
+    if(heapp() + qsize > real_heaplimit()) fatal("Not enough space collected");
+    newbody = (unsigned char*) klic_alloc(qsize);
     newself->next = STRING_SHALLOW_MARK;
     newself->index = size;
     newself->body = newbody;
@@ -150,9 +148,8 @@
   } else {
     newself->index = GD_SELF->index;
     newself->body = GD_SELF->body;
-    GD_COPY_KL1_TERM_TO_NEWGEN(GD_SELF->next, newself->next);
+    G_COPY_KL1_TERM_TO_NEWGEN(GD_SELF->next, newself->next);
   }
-  set_heapp(g_allocp);
   GD_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/gtermarray.c klic-3.003-2002-03-05g/runtime/gtermarray.c
--- klic-3.003-2002-03-05f/runtime/gtermarray.c	Tue Mar  5 21:39:34 2002
+++ klic-3.003-2002-03-05g/runtime/gtermarray.c	Tue Mar  5 22:19:05 2002
@@ -39,16 +39,13 @@
   G_STD_DECL;
   unsigned long size = GD_SELF->nterm;
   GD_OBJ_TYPE *newself;
-  q* g_allocp = heapp();
   unsigned long i;
 
   GDSET_NEWOBJ_IN_NEWGEN(newself);
   newself->nterm = size;
   for (i=0; i < size; i++) {
     G_COPY_KL1_TERM_TO_NEWGEN(GD_SELF->terms[i],newself->terms[i]);
-    assert(g_allocp >= heapp());
   }
-  set_heapp(g_allocp);
   GD_RETURN_FROM_GC(newself);
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/random.c klic-3.003-2002-03-05g/runtime/random.c
--- klic-3.003-2002-03-05f/runtime/random.c	Tue Mar  5 21:40:13 2002
+++ klic-3.003-2002-03-05g/runtime/random.c	Tue Mar  5 22:20:48 2002
@@ -74,12 +74,9 @@
 GGDEF_GC()
 {
   G_STD_DECL;
-  q* g_allocp = heapp();
-  q* newself = g_allocp;
+  q* newself = klic_alloc(sizeof(GG_OBJ_TYPE) / sizeof(q));
 
-  BCOPY(GG_SELF, g_allocp, sizeof(GG_OBJ_TYPE));
-  g_allocp += sizeof(GG_OBJ_TYPE)/sizeof(q);
-  set_heapp(g_allocp);
+  BCOPY(GG_SELF, newself, sizeof(GG_OBJ_TYPE));
   return newself;
 }
 
diff -ruN klic-3.003-2002-03-05f/runtime/wakeup.c klic-3.003-2002-03-05g/runtime/wakeup.c
--- klic-3.003-2002-03-05f/runtime/wakeup.c	Tue Mar  5 21:40:51 2002
+++ klic-3.003-2002-03-05g/runtime/wakeup.c	Tue Mar  5 22:19:20 2002
@@ -36,13 +36,10 @@
 {
   G_STD_DECL;
   GC_OBJ_TYPE *newself;
-  q* g_allocp = heapp();
 
   GCSET_NEWOBJ_IN_NEWGEN(newself);
   G_COPY_KL1_TERM_TO_NEWGEN(GC_SELF->x,newself->x);
   G_COPY_KL1_TERM_TO_NEWGEN(GC_SELF->y,newself->y);
-  assert(g_allocp >= heapp());
-  set_heapp(g_allocp);
   GC_RETURN_FROM_GC(newself);
 }
 
