Index: libpolys/coeffs/numbers.cc
===================================================================
--- libpolys/coeffs/numbers.cc	(revision 6ccdd3ad26bd7de442ab57e7cc95352fcf0de398)
+++ libpolys/coeffs/numbers.cc	(revision 7af488ec51790060979537b35a03fb345e053f90)
@@ -30,4 +30,8 @@
 #endif
 
+#ifdef HAVE_POLYEXTENSIONS
+#include <polys/ext_fields/algext.h>
+#endif
+
 #ifdef HAVE_FACTORY
 #include <factory/factory.h>
@@ -153,6 +157,34 @@
 }
 
-static n_coeffType nLastCoeffs=n_Z2m;
-static cfInitCharProc *nInitCharTable=NULL;
+static n_coeffType nLastCoeffs=n_CF;
+cfInitCharProc nInitCharTableDefault[]=
+{ NULL,        /*n_unknown */
+ npInitChar,   /* n_Zp */
+ nlInitChar,   /* n_Q */
+ nrInitChar,   /* n_R */
+ nfInitChar,   /* n_GF */
+ ngfInitChar,  /* n_long_R */
+ #ifdef HAVE_POLYEXTENSIONS
+ naInitChar,  /* n_algExt */
+ #else
+ NULL,        /* n_algExt */
+ #endif
+ NULL, /* n_transExt */
+ ngcInitChar,  /* n_long_C */
+ #ifdef HAVE_RINGS
+ nrzInitChar,  /* n_Z */
+ nrnInitChar,  /* n_Zn */
+ NULL,         /* n_Zpn */
+ nr2mInitChar, /* n_Z2m */
+ #else
+ NULL,         /* n_Z */
+ NULL,         /* n_Zn */
+ NULL,         /* n_Zpn */
+ NULL,         /* n_Z2m */
+ #endif
+ NULL	/* n_CF */
+};
+
+static cfInitCharProc *nInitCharTable=nInitCharTableDefault;
 /*2
 * init operations for coeffs r
@@ -206,8 +238,8 @@
     BOOLEAN nOK=TRUE;
     // init
-    if ((nInitCharTable!=NULL) && (t<=nLastCoeffs))
+    if ((t<=nLastCoeffs) && (nInitCharTable[t]!=NULL))
       nOK = (nInitCharTable[t])(n,parameter);
     else
-       Werror("coeff init missing for %d",(int)t);
+       Werror("nInitCharTable[%d] missing",(int)t);
     if (nOK)
     {
@@ -311,4 +343,5 @@
 }
 
+
 n_coeffType nRegister(n_coeffType n, cfInitCharProc p)
 {
@@ -316,8 +349,10 @@
   {
     nLastCoeffs=(n_coeffType)(int(nLastCoeffs)+1);
-    if (nInitCharTable==NULL)
+    if (nInitCharTable==nInitCharTableDefault)
     {
       nInitCharTable=(cfInitCharProc*)omAlloc0(
                                           nLastCoeffs*sizeof(cfInitCharProc));
+      memcpy(nInitCharTable,nInitCharTableDefault,
+              (nLastCoeffs-1)*sizeof(cfInitCharProc));
     }
     else
@@ -333,9 +368,5 @@
   else
   {
-    if (nInitCharTable==NULL)
-    {
-      nInitCharTable=(cfInitCharProc*)omAlloc0(
-                                         ((int) nLastCoeffs)*sizeof(cfInitCharProc));
-    }
+    if (nInitCharTable[n]!=NULL) Print("coeff %d already initialized\n",n);
     nInitCharTable[n]=p;
     return n;
Index: libpolys/coeffs/test.cc
===================================================================
--- libpolys/coeffs/test.cc	(revision 6ccdd3ad26bd7de442ab57e7cc95352fcf0de398)
+++ libpolys/coeffs/test.cc	(revision 7af488ec51790060979537b35a03fb345e053f90)
@@ -274,10 +274,10 @@
 #ifdef HAVE_RINGS
 //  TODO(Frank, Segmentation fault! (if used wihout omalloc???). Please_ investigate!);
-  type = nRegister( n_Z2m, nr2mInitChar); assume( type == n_Z2m ); 
+  type =  n_Z2m;
   if( Test(type, (void*) 4) )
     c ++;
 #endif
 
-  type = nRegister( n_Zp, npInitChar); assume( type == n_Zp );
+  type =  n_Zp;
   if( Test(type, (void*) 101) )
     c ++;
@@ -286,5 +286,5 @@
 //  TODO(Frank, memmory corruption_ if used wihout omalloc??? Please_ investigate!);
 
-  type = nRegister( n_Z2m, nr2mInitChar); assume( type == n_Z2m ); 
+  type = n_Z2m;
   if( Test(type, (void*) 8) )
     c ++;
@@ -293,18 +293,18 @@
 
   
-  type = nRegister( n_Q, nlInitChar); assume( type == n_Q );
-  if( Test(type) )
-    c ++;
-
-  type = nRegister( n_R, nrInitChar); assume( type == n_R );
-  if( Test(type) )
-    c ++;
-
-#ifdef HAVE_RINGS
-  type = nRegister( n_Z, nrzInitChar); assume( type == n_Z ); // No need in GMP?
-  if( Test(type) )
-    c ++;
-#endif
-   type = nRegister( n_GF, nfInitChar); assume( type == n_GF );
+  type =  n_Q;
+  if( Test(type) )
+    c ++;
+
+  type = n_R;
+  if( Test(type) )
+    c ++;
+
+#ifdef HAVE_RINGS
+  type = n_Z;
+  if( Test(type) )
+    c ++;
+#endif
+   type = n_GF;
 
 
@@ -340,5 +340,5 @@
 //  TODO(Somebody, This will result in memory corruption at Z_2^m later on (due to the succs. setGMPFloatDigits?)...!?); // ????
 
-  type = nRegister( n_Zn, nrnInitChar); assume( type == n_Zn );
+  type = n_Zn;
 
   if( Test(type, (void*) 3) )
@@ -351,14 +351,14 @@
 
 
-  type = nRegister( n_long_C, ngcInitChar); assume( type == n_long_C );
-  if( Test(type) )
-    c ++;
-
-  type = nRegister( n_long_R, ngfInitChar); assume( type == n_long_R );
-  if( Test(type) )
-    c ++;
-
-#ifdef HAVE_RINGS
-  type = nRegister( n_Z2m, nr2mInitChar); assume( type == n_Z2m ); 
+  type = n_long_C;
+  if( Test(type) )
+    c ++;
+
+  type = n_long_R;
+  if( Test(type) )
+    c ++;
+
+#ifdef HAVE_RINGS
+  type = n_Z2m;
   if( Test(type, (void*) 2) )
     c ++;
@@ -367,5 +367,5 @@
 
 #ifdef HAVE_RINGS
-  type = nRegister( n_Zn, nrnInitChar); assume( type == n_Zn );
+  type = n_Zn;
 
   if( Test(type, (void*) 3) )
