diff --git a/Mesh/3D_Extrude.cpp b/Mesh/3D_Extrude.cpp
index d82e7927b9f69b09c0ee466d89fc2a5e9fca3a14..52767622d3fc8dc160ffc61378642ac0f8d4843b 100644
--- a/Mesh/3D_Extrude.cpp
+++ b/Mesh/3D_Extrude.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_Extrude.cpp,v 1.23 2001-08-12 00:15:04 geuzaine Exp $
+// $Id: 3D_Extrude.cpp,v 1.24 2001-08-12 09:07:16 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Numeric.h"
@@ -449,7 +449,7 @@ void Extrude_Curve (void *data, void *dum){
 
 void copy_mesh (Curve * from, Curve * to){
   List_T *list = from->Vertices;
-  Vertex *vi, *v, **vexist;
+  Vertex *vi, *v, **vv, **vexist;
 
   int nb = List_Nbr(to->Vertices);
   if(nb){
@@ -460,21 +460,23 @@ void copy_mesh (Curve * from, Curve * to){
   }
 
   to->Vertices =  List_Create (List_Nbr(from->Vertices), 2, sizeof (Vertex *));
-  
-  if (Vertex_Bound && (vexist = (Vertex **) Tree_PQuery (Vertex_Bound, &to->beg))){
+
+  vv = &to->beg;
+  if ((vexist = (Vertex **) Tree_PQuery (THEM->Vertices, vv))){
     (*vexist)->u = to->ubeg;
-    vi = *vexist;
+    Tree_Insert (THEM->Vertices, vexist);
+    if ((*vexist)->ListCurves)
+      List_Add ((*vexist)->ListCurves, &to);
+    List_Add (to->Vertices, vexist);
   }
   else{
-    vi = Create_Vertex (++CurrentNodeNumber, 
-			to->beg->Pos.X, to->beg->Pos.Y, to->beg->Pos.Z, to->beg->lc, to->ubeg);
+    vi = Create_Vertex ((*vv)->Num, (*vv)->Pos.X, (*vv)->Pos.Y, (*vv)->Pos.Z,
+			(*vv)->lc, to->ubeg);
     Tree_Insert (THEM->Vertices, &vi);
-    Tree_Insert (Vertex_Bound, &vi);
-  }
-  if(!vi->ListCurves)
     vi->ListCurves = List_Create (1, 1, sizeof (Curve *));
-  List_Add (vi->ListCurves, &to);
-  List_Add (to->Vertices, &vi);
+    List_Add (vi->ListCurves, &to);
+    List_Add (to->Vertices, &vi);
+  }
 
   for (int i = 1; i < List_Nbr (list)-1; i++){
     List_Read (list, i, &v);
@@ -482,35 +484,29 @@ void copy_mesh (Curve * from, Curve * to){
 			v->Pos.Y, v->Pos.Z, v->lc, v->u);
     ep->Extrude (ep->mesh.NbLayer - 1, ep->mesh.NbElmLayer[ep->mesh.NbLayer - 1],
 		 vi->Pos.X, vi->Pos.Y, vi->Pos.Z);
-    if (Vertex_Bound && (vexist = (Vertex **) Tree_PQuery (Vertex_Bound, &vi))){
-      Free_Vertex(&vi,0);
-      vi = *vexist;
-    }
-    else{
-      Tree_Insert (THEM->Vertices, &vi);
-      Tree_Insert (Vertex_Bound, &vi);
-    }
+    Tree_Insert (THEM->Vertices, &vi);
     if(!vi->ListCurves)
       vi->ListCurves = List_Create (1, 1, sizeof (Curve *));
     List_Add (vi->ListCurves, &to);
     List_Add (to->Vertices, &vi);
   }
 
-  
-  if (Vertex_Bound && (vexist = (Vertex **) Tree_PQuery (Vertex_Bound, &to->end))){
+  vv = &to->end;
+  if ((vexist = (Vertex **) Tree_PQuery (THEM->Vertices, vv))){
     (*vexist)->u = to->uend;
-    vi = *vexist;
+    Tree_Insert (THEM->Vertices, vexist);
+    if ((*vexist)->ListCurves)
+      List_Add ((*vexist)->ListCurves, &to);
+    List_Add (to->Vertices, vexist);
   }
   else{
-    vi = Create_Vertex (++CurrentNodeNumber, 
-			to->end->Pos.X, to->end->Pos.Y, to->end->Pos.Z, to->end->lc, to->uend);
+    vi = Create_Vertex ((*vv)->Num, (*vv)->Pos.X, (*vv)->Pos.Y, (*vv)->Pos.Z, 
+			(*vv)->lc, to->uend);
     Tree_Insert (THEM->Vertices, &vi);
-    Tree_Insert (Vertex_Bound, &vi);
-  }
-  if(!vi->ListCurves)
     vi->ListCurves = List_Create (1, 1, sizeof (Curve *));
-  List_Add (vi->ListCurves, &to);
-  List_Add (to->Vertices, &vi);
+    List_Add (vi->ListCurves, &to);
+    List_Add (to->Vertices, &vi);
+  }
 
 
 }