diff --git a/Mesh/3D_Extrude.cpp b/Mesh/3D_Extrude.cpp
index 8b03dadec0d5d894c8e17653079f9b130cd476d2..a1a264374bad9fe6a74d352ff53132246d5cbe22 100644
--- a/Mesh/3D_Extrude.cpp
+++ b/Mesh/3D_Extrude.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_Extrude.cpp,v 1.74 2004-02-07 01:40:21 geuzaine Exp $
+// $Id: 3D_Extrude.cpp,v 1.75 2004-04-18 03:14:55 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -759,9 +759,8 @@ void copy_mesh(Curve * from, Curve * to, int direction)
     newv = Create_Vertex(++THEM->MaxPointNum, v->Pos.X,
 			 v->Pos.Y, v->Pos.Z, v->lc,
 			 (direction > 0) ? v->u : (1. - v->u));
-    ep->Extrude(ep->mesh.NbLayer - 1,
-                ep->mesh.NbElmLayer[ep->mesh.NbLayer - 1], newv->Pos.X,
-                newv->Pos.Y, newv->Pos.Z);
+    ep->Extrude(ep->mesh.NbLayer - 1, ep->mesh.NbElmLayer[ep->mesh.NbLayer - 1],
+		newv->Pos.X, newv->Pos.Y, newv->Pos.Z);
     if(!comparePosition(&newv, &v)) {
       Free_Vertex(&newv, 0);
       newv = v;
@@ -840,7 +839,7 @@ int Extrude_Mesh(Curve * c)
       List_Add(c->Vertices, vexist);
     }
     else {
-      newv = Create_Vertex(v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->lc, 0.0);
+      newv = Create_Vertex(v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->lc, c->ubeg);
       newv->ListCurves = List_Create(1, 1, sizeof(Curve *));
       List_Add(newv->ListCurves, &c);
       Tree_Add(THEM->Vertices, &newv);
@@ -853,7 +852,9 @@ int Extrude_Mesh(Curve * c)
         v->ListCurves = List_Create(1, 1, sizeof(Curve *));
       List_Add(v->ListCurves, &c);
       Tree_Insert(THEM->Vertices, &v);
-      v->u = (double)i / (double)List_Nbr(L);
+      // This is not correct when we have multiple layers with
+      // different spacings. So we fill this in later.
+      //v->u = (double)i / (double)(List_Nbr(L)-1);
       List_Add(c->Vertices, &v);
     }
 
@@ -865,7 +866,7 @@ int Extrude_Mesh(Curve * c)
       List_Add(c->Vertices, vexist);
     }
     else {
-      newv = Create_Vertex(v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->lc, 0.0);
+      newv = Create_Vertex(v->Num, v->Pos.X, v->Pos.Y, v->Pos.Z, v->lc, c->uend);
       newv->ListCurves = List_Create(1, 1, sizeof(Curve *));
       List_Add(newv->ListCurves, &c);
       Tree_Add(THEM->Vertices, &newv);
@@ -889,6 +890,9 @@ int Extrude_Mesh(Curve * c)
 	  s->iEnt = ep->mesh.ZonLayer[i];
 	Tree_Add(c->Simplexes, &s);
 	List_Add(c->TrsfSimplexes, &s);
+
+	// fill-in the data we didn't have above:
+	v1->u = ep->u(i, j);
 	k++;
       }
     }
@@ -925,9 +929,8 @@ void copy_mesh(Surface * from, Surface * to)
         v = s->V[j];
         newv[j] = Create_Vertex(++THEM->MaxPointNum, v->Pos.X,
 				v->Pos.Y, v->Pos.Z, v->lc, v->u);
-        ep->Extrude(ep->mesh.NbLayer - 1,
-                    ep->mesh.NbElmLayer[ep->mesh.NbLayer - 1], newv[j]->Pos.X,
-                    newv[j]->Pos.Y, newv[j]->Pos.Z);
+        ep->Extrude(ep->mesh.NbLayer - 1, ep->mesh.NbElmLayer[ep->mesh.NbLayer - 1], 
+		    newv[j]->Pos.X, newv[j]->Pos.Y, newv[j]->Pos.Z);
         if(Vertex_Bound && (vexist = (Vertex **) Tree_PQuery(Vertex_Bound, &newv[j]))) {
           Free_Vertex(&newv[j], 0);
           newv[j] = *vexist;