diff --git a/Mesh/DiscreteSurface.cpp b/Mesh/DiscreteSurface.cpp
index 6aa9deb5881f4fc4dab704a6b8cc03166d97ec39..4a9c1dbd9e908697114e84fc1bbea2f048a50f47 100644
--- a/Mesh/DiscreteSurface.cpp
+++ b/Mesh/DiscreteSurface.cpp
@@ -1,4 +1,4 @@
-// $Id: DiscreteSurface.cpp,v 1.27 2005-10-24 14:09:42 remacle Exp $
+// $Id: DiscreteSurface.cpp,v 1.28 2005-10-26 15:19:24 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -32,7 +32,7 @@
 
 extern Mesh *THEM;
 extern Context_T CTX;
-extern void Move_SimplexBaseToSimplex(Mesh * M, int dimension);
+
 void Mesh_To_BDS(Mesh *m)
 {
 
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index d34f0f6ef6f7582ed92334f8e7bf9f9732122b6b..83f108f9c4f7172f3177c18da54ea959b21d4371 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -1,4 +1,4 @@
-// $Id: Generator.cpp,v 1.72 2005-10-16 15:55:46 geuzaine Exp $
+// $Id: Generator.cpp,v 1.73 2005-10-26 15:19:24 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -238,9 +238,8 @@ void Maillage_Dimension_1(Mesh * M)
 
   t1 = Cpu();
 
-  Move_SimplexBaseToSimplex(M, 1);
-
   Tree_Action(M->Curves, Maillage_Curve);
+
   t2 = Cpu();
   M->timing[0] = t2 - t1;
 }
@@ -253,8 +252,6 @@ void Maillage_Dimension_2(Mesh * M)
 
   t1 = Cpu();
 
-  Move_SimplexBaseToSimplex(M, 2);
-
   // create reverse 1D meshes
 
   List_T *Curves = Tree2List(M->Curves);
@@ -309,8 +306,6 @@ void Maillage_Dimension_3(Mesh * M)
 
   t1 = Cpu();
 
-  Move_SimplexBaseToSimplex(M, 3);
-
   // merge all the delaunay parts in a single special volume
   v = Create_Volume(99999, 99999);
   List_T *list = Tree2List(M->Volumes);
@@ -466,7 +461,7 @@ void mai3d(Mesh * M, int Asked)
 
   oldstatus = M->status;
 
-  // re-read data
+  // Re-read data
 
   if((Asked > oldstatus && Asked >= 0 && oldstatus < 0) ||
      (Asked < oldstatus)) {
@@ -476,6 +471,9 @@ void mai3d(Mesh * M, int Asked)
 
   CTX.threads_lock = 1;
 
+  // Clean up all the 2nd order nodes and transfer all SimplexBase
+  // into "real" Simplexes
+
   Degre1();
 
   // 1D mesh
@@ -530,11 +528,13 @@ void mai3d(Mesh * M, int Asked)
   if(M->status == 3 && CTX.mesh.optimize)
     Optimize_Netgen(M);
 
-  // Second order elements
+  // Create second order elements
 
   if(M->status && CTX.mesh.order == 2)
     Degre2(M->status);
 
+  // Partition
+
   if(M->status > 1 && CTX.mesh.nbPartitions != 1)
     PartitionMesh(M, CTX.mesh.nbPartitions);
 
diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h
index 0cace55b7bc3c1ab90b44fee635a0bdb0cf194bc..1f2a763246a6c34a7c86e19b04cc3db942629533 100644
--- a/Mesh/Mesh.h
+++ b/Mesh/Mesh.h
@@ -492,6 +492,8 @@ void Freeze_Vertex(void *a, void *b);
 void deFreeze_Vertex(void *a, void *b);
 void ReOrientSurfaceMesh(Surface *s);
 
+void Move_SimplexBaseToSimplex(Mesh * M, int dimension);
+
 double Lc_XYZ(double X, double Y, double Z, Mesh *m);
 void ActionLiss(void *data, void *dummy);
 void ActionLissSurf(void *data, void *dummy);
diff --git a/Mesh/SecondOrder.cpp b/Mesh/SecondOrder.cpp
index 1461fa2ceddef3a6dea96739df8984a9cadb0586..a7a17cdd2e4ac4371afe34742521fede8b98790e 100644
--- a/Mesh/SecondOrder.cpp
+++ b/Mesh/SecondOrder.cpp
@@ -1,4 +1,4 @@
-// $Id: SecondOrder.cpp,v 1.33 2005-05-15 01:44:26 geuzaine Exp $
+// $Id: SecondOrder.cpp,v 1.34 2005-10-26 15:19:24 geuzaine Exp $
 //
 // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle
 //
@@ -444,6 +444,9 @@ void ResetDegre2_Volume(void *a, void *b)
 
 void Degre1()
 {
+  // transform any SimplexBase into "real" simplices
+  Move_SimplexBaseToSimplex(THEM, 3);
+
   // (re-)initialize the global tree of edges/quadfaces
   if(edges)
     delete edges;