Index: Singular/LIB/resbinomial.lib
===================================================================
--- Singular/LIB/resbinomial.lib	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ Singular/LIB/resbinomial.lib	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -109,19 +109,6 @@
 
 if (cont!=n or n<=2){
-
-             // defining the new variables in Lring2[2]
-
-              list Lring,Lring2;
-              Lring=ringlist(basering);
-
-              ring raux=0,(x(1..n)),dp;
-              setring r;
-              Lring2=ringlist(raux);
-
              // making the change
-
-              for (i=1;i<=n; i++){ Lring[2][i]=Lring2[2][i];}
-
-              def Rnew=ring(Lring);
+              def Rnew=changevar ("x()");
               setring Rnew;
                 // print("INVERTIBLE VARIABLES NOT CONSIDERED AT THE BEGINNING");
Index: Singular/LIB/sagbi.lib
===================================================================
--- Singular/LIB/sagbi.lib	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ Singular/LIB/sagbi.lib	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -70,4 +70,5 @@
   //-------- extend current baserring r with new variables @y,
   // one for each new element in ideal algebra  -------------
+  setring r;
   list l = ringlist(r);
   for (i=nvars(r)-nvars(br)+1; i<=numTotalAdditionalVars;i++)
Index: Singular/ipshell.cc
===================================================================
--- Singular/ipshell.cc	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ Singular/ipshell.cc	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -5091,10 +5091,15 @@
        LongComplexInfo param;
 
-       param.float_len = float_len;
-       param.float_len2 = float_len2;
+       param.float_len = si_min (float_len, 32767);
+       param.float_len2 = si_min (float_len2, 32767);
 
        // set the parameter name
        if (complex_flag)
        {
+         if (param.float_len < SHORT_REAL_LENGTH)
+         {
+           param.float_len= SHORT_REAL_LENGTH;
+           param.float_len2= SHORT_REAL_LENGTH;
+         }
          if (pn->next == NULL)
            param.par_name=(const char*)"i"; //default to i
Index: libpolys/coeffs/gnumpc.cc
===================================================================
--- libpolys/coeffs/gnumpc.cc	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ libpolys/coeffs/gnumpc.cc	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -432,5 +432,5 @@
   n->cfSetChar=ngcSetChar;
 
-//  r->cfInit_bigint=ngcInit_bigint;
+  n->cfInit_bigint=ngcMapQ;
 
 /*
Index: libpolys/coeffs/gnumpc.h
===================================================================
--- libpolys/coeffs/gnumpc.h	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ libpolys/coeffs/gnumpc.h	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -52,6 +52,5 @@
 
 
-// Why is this here? who needs it?
-// number ngcMapQ(number from, const coeffs r, const coeffs aRing);
+number ngcMapQ(number from, const coeffs r, const coeffs aRing);
 #endif
 /* GMPCOMPLEX_H */
Index: libpolys/coeffs/gnumpfl.cc
===================================================================
--- libpolys/coeffs/gnumpfl.cc	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ libpolys/coeffs/gnumpfl.cc	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -433,4 +433,5 @@
   n->cfSetMap = ngfSetMap;
   n->cfCoeffWrite = ngfCoeffWrite;
+  n->cfInit_bigint = ngfMapQ;
 #ifdef LDEBUG
   n->cfDBTest  = ndDBTest; // not yet implemented: ngfDBTest
Index: libpolys/coeffs/gnumpfl.h
===================================================================
--- libpolys/coeffs/gnumpfl.h	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ libpolys/coeffs/gnumpfl.h	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -42,5 +42,5 @@
 void     ngfDelete(number *a, const coeffs r);
 
-number ngfMapQ(number from, const coeffs r);
+number ngfMapQ(number from, const coeffs src, const coeffs r);
 
 #endif
Index: libpolys/coeffs/shortfl.cc
===================================================================
--- libpolys/coeffs/shortfl.cc	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ libpolys/coeffs/shortfl.cc	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -572,4 +572,5 @@
   n->cfSetMap = nrSetMap;
   n->cfCoeffWrite  = nrCoeffWrite;
+  n->cfInit_bigint = nrMapQ;
 
     /* nName= ndName; */
Index: libpolys/coeffs/shortfl.h
===================================================================
--- libpolys/coeffs/shortfl.h	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ libpolys/coeffs/shortfl.h	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -44,5 +44,5 @@
 // Where are the following used?
 // int     nrGetChar();
-// number nrMapQ(number from, const coeffs r, const coeffs aRing);
+number nrMapQ(number from, const coeffs r, const coeffs aRing);
 
 
Index: libpolys/polys/ext_fields/transext.cc
===================================================================
--- libpolys/polys/ext_fields/transext.cc	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ libpolys/polys/ext_fields/transext.cc	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -247,9 +247,21 @@
   if (IS0(a)) return NULL;
   fraction f = (fraction)a;
-  poly g = p_Copy(NUM(f), ntRing);
   fraction result = (fraction)omAlloc0Bin(fractionObjectBin);
-  NUM(result) = g;
-  DEN(result) = NULL;
-  COM(result) = 0;
+  BOOLEAN denis1= DENIS1 (f);
+  if (getCoeffType (ntCoeffs) == n_Q && !denis1)
+    handleNestedFractionsOverQ (f, cf);
+  NUM (result)= p_Copy (NUM (f), ntRing);
+  DEN (result) = NULL;
+  COM (result) = 0;
+  if (getCoeffType (ntCoeffs) == n_Q && denis1)
+  {
+    if (!p_IsConstant (NUM (result), ntRing) && pNext (NUM(result)) != NULL)
+      p_Cleardenom (NUM(result), ntRing);
+    else
+    {
+      number g= p_GetAllDenom (NUM (result), ntRing);
+      NUM (result)= p_Mult_nn (NUM (result), g, ntRing);
+    }
+  }
   return (number)result;
 }
@@ -260,11 +272,29 @@
   definiteGcdCancellation(a, cf, FALSE);
   fraction f = (fraction)a;
-  poly g;
-  if (IS0(f) || DENIS1(f)) g = p_One(ntRing);
-  else g = p_Copy(DEN(f), ntRing);
   fraction result = (fraction)omAlloc0Bin(fractionObjectBin);
-  NUM(result) = g;
-  DEN(result) = NULL;
-  COM(result) = 0;
+  number g;
+  if (IS0(f) || (DENIS1 (f) && getCoeffType (ntCoeffs) != n_Q))
+  {
+    NUM (result)= p_One(ntRing);
+    DEN (result)= NULL;
+    COM (result)= 0;
+  }
+  else if (DENIS1 (f))
+  {
+    poly num= p_Copy (NUM (f), ntRing);
+    if (!p_IsConstant (num, ntRing) && pNext(num) != NULL)
+      p_Cleardenom_n (num, ntRing, g);
+    else
+      g= p_GetAllDenom (num, ntRing);
+    result= (fraction) ntSetMap (ntRing->cf, cf) (g, ntRing->cf, cf);
+  }
+  else
+  {
+    if (getCoeffType (ntCoeffs) == n_Q)
+      handleNestedFractionsOverQ (f, cf);
+    NUM (result)= p_Copy (DEN (f), ntRing);
+    DEN (result) = NULL;
+    COM (result) = 0;
+  }
   return (number)result;
 }
@@ -1049,8 +1079,8 @@
   if (n_IsZero(a, src)) return NULL;
   assume(src == dst->extRing->cf);
-  poly p = p_One(dst->extRing);
+  poly p = p_Init(dst->extRing);
   number na=n_Copy(a, src);
   n_Normalize(na, src);
-  p_SetCoeff(p, na, dst->extRing);
+  p_SetCoeff0(p, na, dst->extRing);
   fraction f = (fraction)omAlloc0Bin(fractionObjectBin);
   NUM(f) = p; DEN(f) = NULL; COM(f) = 0;
Index: libpolys/polys/monomials/p_polys.cc
===================================================================
--- libpolys/polys/monomials/p_polys.cc	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ libpolys/polys/monomials/p_polys.cc	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -3414,6 +3414,6 @@
        return NULL;
 
-    if( !DENIS1(z) )
-      WarnS("Not implemented yet: Cannot permute a rational fraction and make a polynomial out of it! Ignorring the denumerator.");
+    //if( !DENIS1(z) )
+      //WarnS("Not implemented yet: Cannot permute a rational fraction and make a polynomial out of it! Ignorring the denumerator.");
   } else
      {
Index: libpolys/polys/monomials/ring.cc
===================================================================
--- libpolys/polys/monomials/ring.cc	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ libpolys/polys/monomials/ring.cc	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -795,4 +795,12 @@
         r1->cf->ref++;
       }
+      else if ((getCoeffType (r2->cf)==n_algExt || getCoeffType (r2->cf)==n_transExt) && rChar(r2) == rChar(r1))
+      {
+        /*AlgExtInfo extParam;
+        extParam.r = r2->cf->extRing;
+        extParam.i = r2->cf->extRing->minideal;*/
+        tmpR.cf=r2->cf;
+        r2->cf->ref++;
+      }
       else
       {
@@ -809,4 +817,9 @@
     {
       if (getCoeffType(r2->cf)==n_Zp)
+      {
+        tmpR.cf=r2->cf;
+        r2->cf->ref++;
+      }
+      else if (getCoeffType(r2->cf)==n_algExt || getCoeffType(r2->cf)==n_transExt)
       {
         tmpR.cf=r2->cf;
Index: m4/options.m4
===================================================================
--- m4/options.m4	(revision 788fdfc919bcf38d8b469a0f59374abf9046985d)
+++ m4/options.m4	(revision dad9fb11f19b0cc543d1fa4b62571df6a83adbab)
@@ -61,4 +61,6 @@
 if test x$ENABLE_PLURAL = xyes; then
   AC_DEFINE(HAVE_PLURAL,1,Enable non-commutative subsystem)
+  #TODO make a seperate switch
+  AC_DEFINE(HAVE_SHIFTBBA,1,Enable letterplace)
 fi
 
