diff -ruN klic-3.003-2002-02-08/compiler/klicdb.c klic-3.003-2002-02-08a/compiler/klicdb.c
--- klic-3.003-2002-02-08/compiler/klicdb.c	Wed Feb  6 22:11:21 2002
+++ klic-3.003-2002-02-08a/compiler/klicdb.c	Fri Feb  8 14:47:07 2002
@@ -18,7 +18,8 @@
 #include <fcntl.h>
 #endif
 #include <assert.h>
-#include <klic/atomstuffs.h>  /* ATOMNUMBERBASE */
+
+#define ATOMNUMBERBASE 2
 
 extern void* malloc();
 
@@ -532,7 +533,7 @@
     atomh = open_cwd_out("atom.h");
     atomc = open_db_out("atom.c");
     (void) fprintf(atomh,
-      "#include <klic/atomstuffs.h>  /* ATOMNUMBERBASE */\n\n");
+      "#include <klic/atomstuffs.h>\n\n");
     (void) fprintf(atomc,
       "#include <klic/atomstuffs.h>  /* init_atomname */\n" \
       "#include <klic/basic.h>\n\n" \
@@ -560,16 +561,16 @@
     functh = open_cwd_out("funct.h");
     functc = open_db_out("funct.c");
     (void) fprintf(functh,
-      "#include <klic/functorstuffs.h>  /* FUNCTORNUMBERBASE */\n\n");
+      "#include <klic/functorstuffs.h>\n\n");
     (void) fprintf(functc,
-      "#include <klic/atomstuffs.h>  /* ATOMNUMBERBASE */\n" \
-      "#include <klic/functorstuffs.h>  /* functors, arities */\n" \
+      "#include <klic/atomstuffs.h>\n" \
+      "#include <klic/functorstuffs.h>\n" \
       "#include <klic/basic.h>\n\n" \
       "const unsigned long init_functors[] = {\n" );
   }
   for (f=functroot; f!=NULL; f=f->next) {
     if (!nocfiles) {
-      (void) fprintf(functh, "#define functor_%s_%d\t%dL+FUNCTORNUMBERBASE\n",
+      (void) fprintf(functh, "#define functor_%s_%d\t%dL\n",
 		    f->principal_functor->name, f->arity,
 		    f->id);
       (void) fprintf(functc, "\t%dL,\n",
@@ -589,9 +590,7 @@
     }
     assert(f == NULL);
     (void) fprintf(functc, "};\n\n" \
-		"const unsigned long initial_functors = %d;\n" \
-		"unsigned long* functors = (unsigned long*) init_functors;\n" \
-		"unsigned long* arities = (unsigned long*) init_arities;\n",
+		"const unsigned long initial_functors = %d;\n",
 		nextfunct );
     (void) fclose(functh);
     (void) fclose(functc);
diff -ruN klic-3.003-2002-02-08/include/klic/atomstuffs.h klic-3.003-2002-02-08a/include/klic/atomstuffs.h
--- klic-3.003-2002-02-08/include/klic/atomstuffs.h	Wed Feb  6 16:35:58 2002
+++ klic-3.003-2002-02-08a/include/klic/atomstuffs.h	Fri Feb  8 14:47:07 2002
@@ -16,7 +16,6 @@
 extern unsigned char* const init_atomname[];
 extern unsigned char* atomname(unsigned long id);
 
-#define ATOMNUMBERBASE 2
 #define functoratomname(f)  (atomname (functoratom (f)))
 #define namestringof(a)  (atomname (symval (a)))
 
diff -ruN klic-3.003-2002-02-08/include/klic/functorstuffs.h klic-3.003-2002-02-08a/include/klic/functorstuffs.h
--- klic-3.003-2002-02-08/include/klic/functorstuffs.h	Thu Dec 27 19:15:58 2001
+++ klic-3.003-2002-02-08a/include/klic/functorstuffs.h	Fri Feb  8 14:47:07 2002
@@ -9,11 +9,13 @@
 #define _KLIC_FUNCTORSTUFFS_H_
 
 /* funct.c */
-extern unsigned long* arities;
-extern unsigned long* functors;
+extern const unsigned long init_functors[];
+extern const unsigned long init_arities[];
+extern unsigned long functors(unsigned long id);
+extern unsigned long arities(unsigned long id);
 
 #define FUNCTORNUMBERBASE 0
-#define functoratom(f)  (functors[symval(f) - FUNCTORNUMBERBASE])
-#define arityof(f)  (arities[symval(f) - FUNCTORNUMBERBASE])
+#define functoratom(f)  (functors (symval(f) - FUNCTORNUMBERBASE))
+#define arityof(f)  (arities (symval(f) - FUNCTORNUMBERBASE))
 
 #endif /* _KLIC_FUNCTORSTUFFS_H_ */
diff -ruN klic-3.003-2002-02-08/include/klic/gd_macro.h klic-3.003-2002-02-08a/include/klic/gd_macro.h
--- klic-3.003-2002-02-08/include/klic/gd_macro.h	Tue Jan 15 10:44:24 2002
+++ klic-3.003-2002-02-08a/include/klic/gd_macro.h	Fri Feb  8 14:47:07 2002
@@ -9,7 +9,7 @@
 #define _KLIC_GD_MACRO_H_
 
 #include <klic/stdc.h>  /* CONCATENATE */
-#include <klic/functorstuffs.h>  /* functors, arities, FUNCTORNUMBERBASE */
+#include <klic/functorstuffs.h>  /* functor, arity, FUNCTORNUMBERBASE */
 #include <klic/basic.h>  /* fatal, klic_fprintf, klic_putc */
 
 /* runtime/unify2.c */
@@ -283,7 +283,7 @@
 
 /****************************************************/
 #define GD_SWITCH_ON_METHOD switch(g_method_functor)
-#define GD_SWITCH_ON_ARITY switch (arities[g_method_functor])
+#define GD_SWITCH_ON_ARITY switch (arities (g_method_functor))
 
 #define GD_METHOD_CASE_DIRECT(fa) \
  case (long) G_functor(fa)
@@ -297,7 +297,7 @@
   default: fatal("undefined method")
 
 #define GD_SWITCH_ON_GMETHOD_NAME \
-  switch(functors[g_method_functor - FUNCTORNUMBERBASE])
+  switch (functors (g_method_functor - FUNCTORNUMBERBASE))
 
 #define GD_METHOD_NAME_CASE(sym) \
  case ((long)(G_atom(sym))) : \
diff -ruN klic-3.003-2002-02-08/runtime/debug.c klic-3.003-2002-02-08a/runtime/debug.c
--- klic-3.003-2002-02-08/runtime/debug.c	Wed Feb  6 16:37:52 2002
+++ klic-3.003-2002-02-08a/runtime/debug.c	Fri Feb  8 14:47:07 2002
@@ -19,7 +19,7 @@
 #include <klic/unify.h>
 #include <klic/index.h>
 #include <klic/atomstuffs.h>  /* atomname */
-#include <klic/functorstuffs.h>  /* functors, arities, FUNCTORNUMBERBASE */
+#include <klic/functorstuffs.h>  /* functor, arity, FUNCTORNUMBERBASE */
 
 #ifdef DIST
 #include <klic/distio.h>
@@ -290,11 +290,11 @@
       case 'F':
 	fprintf_func(out, "%s/%d",
 #ifdef DEBUGLIB
-		atomname(functors[*argp - FUNCTORNUMBERBASE]),
+		atomname (functors (*argp - FUNCTORNUMBERBASE)),
 #else
 		"???",
 #endif
-		arities[*argp -FUNCTORNUMBERBASE] );
+		arities (*argp -FUNCTORNUMBERBASE) );
 	argp++;
 	break;
       default:
diff -ruN klic-3.003-2002-02-08/runtime/gcode.c klic-3.003-2002-02-08a/runtime/gcode.c
--- klic-3.003-2002-02-08/runtime/gcode.c	Sat Jan 12 20:05:30 2002
+++ klic-3.003-2002-02-08a/runtime/gcode.c	Fri Feb  8 14:47:07 2002
@@ -130,7 +130,7 @@
   GD_RETURN;
 }
 
-#define GD_METHOD_ARITY  arities[g_method_functor - FUNCTORNUMBERBASE]
+#define GD_METHOD_ARITY  arities (g_method_functor - FUNCTORNUMBERBASE)
 
 GDDEF_METHOD(call)
 {
diff -ruN klic-3.003-2002-02-08/runtime/generic.c klic-3.003-2002-02-08a/runtime/generic.c
--- klic-3.003-2002-02-08/runtime/generic.c	Fri Jan 18 15:37:50 2002
+++ klic-3.003-2002-02-08a/runtime/generic.c	Fri Feb  8 14:47:07 2002
@@ -47,7 +47,7 @@
   q* g_allocp;
 {
   G_STD_DECL;
-  unsigned long argc = arities[method_functor - FUNCTORNUMBERBASE];
+  unsigned long argc = arities (method_functor - FUNCTORNUMBERBASE);
   q objp;
   int i;
 
diff -ruN klic-3.003-2002-02-08/runtime/newatom.c klic-3.003-2002-02-08a/runtime/newatom.c
--- klic-3.003-2002-02-08/runtime/newatom.c	Wed Feb  6 22:11:21 2002
+++ klic-3.003-2002-02-08a/runtime/newatom.c	Fri Feb  8 14:48:18 2002
@@ -28,6 +28,8 @@
 extern unsigned char* convert_klic_string_to_c_string();
 
 static unsigned char** atomnames = (unsigned char**) init_atomname;
+static unsigned long* functorids = (unsigned long*) init_functors;
+static unsigned long* aritiesof = (unsigned long*) init_arities;
 
 struct atomhashtable{
   long atomid;
@@ -144,7 +146,7 @@
 
   index = functhp->table[hashvalue]-1;
   if( index >= 0 ){
-    while( (functors[index] != a_no) || (arities[index] != arity) ){
+    while( (functorids[index] != a_no) || (aritiesof[index] != arity) ){
       long index0 = nextfunctor[index];
       if( index0 == -1 ){
 	nextfunctor[index] = i;
@@ -208,14 +210,14 @@
       (long*) malloc_check((unsigned) (sizeof(long) * numberOfFunctors));
   }else{
     functhp->functortablesize = 1;
-    functors = (unsigned long*) malloc_check(sizeof(q));
-    arities  = (unsigned long*) malloc_check(sizeof(q));
+    functorids = (unsigned long*) malloc_check(sizeof(q));
+    aritiesof  = (unsigned long*) malloc_check(sizeof(q));
     nextfunctor = (long*) malloc_check(sizeof(q));
   }
   for( i = 0; i < Hashsize; i++ ){ functhp->table[i] = 0; }
   for( i = 0; i < functhp->functortablesize; i++ ){ nextfunctor[i] = -1; }
   for( i = 0; i < numberOfFunctors; i++ )
-    { enter_old_functor(i, functors[i], arities[i]); }
+    { enter_old_functor(i, functorids[i], aritiesof[i]); }
 }
 
 extern unsigned long
@@ -343,14 +345,14 @@
  again:
   index = functhp->table[hashvalue] - 1;
   if( index >= 0 ){
-    while( (functors[index] != a_no) || (arities[index] != arity) ){
+    while( (functorids[index] != a_no) || (aritiesof[index] != arity) ){
       index0 = nextfunctor[index];
       if( index0 == -1 ){
 	if( functhp->functorid +1 == functhp->functortablesize ) goto expand;
 	++ functhp->functorid;
 	nextfunctor[index] = (long) functhp->functorid;
-	functors[functhp->functorid] = a_no;
-        arities[functhp->functorid] = arity;
+	functorids[functhp->functorid] = a_no;
+        aritiesof[functhp->functorid] = arity;
 	nextfunctor[functhp->functorid] = -1;
 #ifdef SHM
 	s_unlock(f_key());
@@ -371,8 +373,8 @@
     }else{
       ++ functhp->functorid;
       functhp->table[hashvalue] = functhp->functorid + 1;
-      functors[functhp->functorid] = a_no;
-      arities[functhp->functorid] = arity;
+      functorids[functhp->functorid] = a_no;
+      aritiesof[functhp->functorid] = arity;
       nextfunctor[functhp->functorid] = -1;
     }
 
@@ -383,22 +385,22 @@
   }
 
  expand:
-  { unsigned long* newfunctors;
-    unsigned long* newarities;
+  { unsigned long* newfunctorids;
+    unsigned long* newaritiesof;
     unsigned long* newnextfunctor;
     int i;
 #ifdef SHM
-    if( is_shma(functors) ) abend("Can't expand on this version.");
+    if( is_shma(functorids) ) abend("Can't expand on this version.");
 #endif
-    newfunctors = (unsigned long*)
+    newfunctorids = (unsigned long*)
       malloc_check((functhp->functortablesize) * sizeof(unsigned long)*2);
-    newarities = (unsigned long*)
+    newaritiesof = (unsigned long*)
       malloc_check((functhp->functortablesize) * sizeof(unsigned long)*2);
     newnextfunctor = (unsigned long*)
       malloc_check((functhp->functortablesize) * sizeof(unsigned long)*2);
     for( i = 0; i < functhp->functortablesize; i++ ){
-      newfunctors[i] = functors[i];
-      newarities[i] = arities[i];
+      newfunctorids[i] = functorids[i];
+      newaritiesof[i] = aritiesof[i];
       newnextfunctor[i] = nextfunctor[i];
     }
     for( i = functhp->functortablesize;
@@ -406,8 +408,8 @@
       newnextfunctor[i] = -1;
     }
     functhp->functortablesize = 2 * functhp->functortablesize;
-    functors = newfunctors;
-    arities  = newarities;
+    functorids = newfunctorids;
+    aritiesof  = newaritiesof;
     nextfunctor = (long*) newnextfunctor;
   }
   goto again;
@@ -424,4 +426,29 @@
     fatalf("atomname: id %d > %d", id, size);
 
   return atomnames[id];
+}
+
+
+extern unsigned long
+functors(unsigned long id)
+{
+  unsigned long size = (functhp->functortablesize > 0 ?
+    functhp->functortablesize : initial_functors);
+
+  if (id > size)
+    fatalf("functors: id %d > %d", id, size);
+
+  return functorids[id];
+}
+
+extern unsigned long
+arities(unsigned long id)
+{
+  unsigned long size = (functhp->functortablesize > 0 ?
+    functhp->functortablesize : initial_functors);
+
+  if(id > size)
+    fatalf("arities: id %d > %d", id, size);
+
+  return aritiesof[id];
 }
