diff --git a/Mesh/meshGEdgeExtruded.cpp b/Mesh/meshGEdgeExtruded.cpp
index e92574e40f0ec017a6e07e0db350ccd499f9a334..a32c6642ef10496cad99d03fa40ceab2ee861f23 100644
--- a/Mesh/meshGEdgeExtruded.cpp
+++ b/Mesh/meshGEdgeExtruded.cpp
@@ -1,4 +1,4 @@
-// $Id: meshGEdgeExtruded.cpp,v 1.2 2006-11-27 02:35:38 geuzaine Exp $
+// $Id: meshGEdgeExtruded.cpp,v 1.3 2006-11-27 03:06:46 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -40,10 +40,12 @@ void extrudeMesh(GVertex *from, GEdge *to)
   }
 }
 
-void copyMesh(GEdge *from, GEdge *to, int direction)
+void copyMesh(GEdge *from, GEdge *to)
 {
   ExtrudeParams *ep = to->meshAttributes.extrude;
 
+  int direction = (ep->geo.Source > 0) ? 1 : -1;
+
   Range<double> u_bounds = from->parBounds(0);
   double u_min = u_bounds.low();
   double u_max = u_bounds.high();
@@ -77,7 +79,7 @@ int MeshExtrudedCurve(GEdge *ge)
     // curve is a copy of another curve ("chapeau")
     GEdge *from = ge->model()->edgeByTag(std::abs(ep->geo.Source));
     if(!from) return 0;
-    copyMesh(from, ge, (ep->geo.Source > 0) ? 1 : -1);
+    copyMesh(from, ge);
   }
 
   // create elements
diff --git a/Mesh/meshGFaceExtruded.cpp b/Mesh/meshGFaceExtruded.cpp
index e0a1feac5a4cbc9f8ce6f3e812690defcd97d90e..27e5f3bfabef238ce16b2629765c5e63c8547a2f 100644
--- a/Mesh/meshGFaceExtruded.cpp
+++ b/Mesh/meshGFaceExtruded.cpp
@@ -1,4 +1,4 @@
-// $Id: meshGFaceExtruded.cpp,v 1.6 2006-11-27 02:35:38 geuzaine Exp $
+// $Id: meshGFaceExtruded.cpp,v 1.7 2006-11-27 03:06:46 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -56,14 +56,12 @@ void extrudeMesh(GEdge *from, GFace *to,
     for(int j = 0; j < ep->mesh.NbLayer; j++) {
       for(int k = 0; k < ep->mesh.NbElmLayer[j]; k++) {
 	std::vector<MVertex*> verts;
-	double x[4], y[4], z[4];
-	x[0] = v0->x(); y[0] = v0->y(); z[0] = v0->z();
+	double x[4] = {v0->x(), v1->x(), v0->x(), v1->x()};
+	double y[4] = {v0->y(), v1->y(), v0->y(), v1->y()};
+	double z[4] = {v0->z(), v1->z(), v0->z(), v1->z()};
 	ep->Extrude(j, k, x[0], y[0], z[0]);
-	x[1] = v1->x(); y[1] = v1->y(); z[1] = v1->z();
 	ep->Extrude(j, k, x[1], y[1], z[1]);
-	x[2] = v0->x(); y[2] = v0->y(); z[2] = v0->z();
 	ep->Extrude(j, k + 1, x[2], y[2], z[2]);
-	x[3] = v1->x(); y[3] = v1->y(); z[3] = v1->z();
 	ep->Extrude(j, k + 1, x[3], y[3], z[3]);
 	for(int p = 0; p < 4; p++){
 	  MVertex tmp(x[p], y[p], z[p], 0, -1);
@@ -81,7 +79,7 @@ void extrudeMesh(GEdge *from, GFace *to,
 	  to->triangles.push_back(new MTriangle(verts[0], verts[1], verts[3]));
 	}
 	else if(verts[0] == verts[3] || verts[1] == verts[2]){
-          Msg(GERROR, "Uncoherent quadrangle in extrusion");
+          Msg(GERROR, "Uncoherent extruded quadrangle in surface %d", to->tag());
           return;
         }
         else{