diff --git a/Geo/ExtrudeParams.cpp b/Geo/ExtrudeParams.cpp
index 3082dcf958476629d49d238c5a3ce115f4177b49..51aee4affc0196d4ab8d0a8b4ed42d8a4a9d338f 100644
--- a/Geo/ExtrudeParams.cpp
+++ b/Geo/ExtrudeParams.cpp
@@ -1,4 +1,4 @@
-// $Id: ExtrudeParams.cpp,v 1.15 2004-02-07 01:40:19 geuzaine Exp $
+// $Id: ExtrudeParams.cpp,v 1.16 2004-04-18 03:09:01 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -67,55 +67,8 @@ void ExtrudeParams::fill(int type,
 void ExtrudeParams::Extrude(int iLayer, int iElemLayer,
                             double &x, double &y, double &z)
 {
-  double dx0, dy0, dz0, dx1, dy1, dz1;
-  double dx, dy, dz, angle;
-
-  if(!iLayer) {
-    dx0 = dy0 = dz0 = 0.0;
-    dx1 = mesh.hLayer[0];
-    dy1 = mesh.hLayer[0];
-    dz1 = mesh.hLayer[0];
-  }
-  else {
-    dx0 = mesh.hLayer[iLayer - 1];
-    dy0 = mesh.hLayer[iLayer - 1];
-    dz0 = mesh.hLayer[iLayer - 1];
-    dx1 = mesh.hLayer[iLayer];
-    dy1 = mesh.hLayer[iLayer];
-    dz1 = mesh.hLayer[iLayer];
-  }
-  double t = (double)iElemLayer / (double)mesh.NbElmLayer[iLayer];
-  switch (geo.Type) {
-  case TRANSLATE:
-    dx = geo.trans[0] * (dx0 + t * (dx1 - dx0));
-    dy = geo.trans[1] * (dy0 + t * (dy1 - dy0));
-    dz = geo.trans[2] * (dz0 + t * (dz1 - dz0));
-    x += dx;
-    y += dy;
-    z += dz;
-    break;
-  case ROTATE:
-    angle = geo.angle;
-    geo.angle = geo.angle * (dx0 + t * (dx1 - dx0));
-    ProtudeXYZ(x, y, z, this);
-    geo.angle = angle;
-    break;
-  case TRANSLATE_ROTATE:
-    angle = geo.angle;
-    geo.angle = geo.angle * (dx0 + t * (dx1 - dx0));
-    ProtudeXYZ(x, y, z, this);
-    geo.angle = angle;
-    dx = geo.trans[0] * (dx0 + t * (dx1 - dx0));
-    dy = geo.trans[1] * (dy0 + t * (dy1 - dy0));
-    dz = geo.trans[2] * (dz0 + t * (dz1 - dz0));
-    x += dx;
-    y += dy;
-    z += dz;
-    break;
-  default:
-    Msg(GERROR, "Unknown extrusion type");
-    break;
-  }
+  double t = u(iLayer, iElemLayer);
+  Extrude(t, x, y, z);
 }
 
 void ExtrudeParams::Rotate(double matr[3][3])
@@ -162,3 +115,19 @@ void ExtrudeParams::Extrude(double t, double &x, double &y, double &z)
     break;
   }
 }
+
+double ExtrudeParams::u(int iLayer, int iElemLayer)
+{
+  double t0, t1;
+
+  if(!iLayer) {
+    t0 = 0.0;
+    t1 = mesh.hLayer[0];
+  }
+  else {
+    t0 = mesh.hLayer[iLayer - 1];
+    t1 = mesh.hLayer[iLayer];
+  }
+  double t = (double)iElemLayer / (double)mesh.NbElmLayer[iLayer];
+  return t0 + t * (t1 - t0);
+}
diff --git a/Geo/ExtrudeParams.h b/Geo/ExtrudeParams.h
index 2e9966bd6b71047c4debcc63d0a1cf164c966e37..907fddd6b5e4c147d0ff153f5f9c560977013bb7 100644
--- a/Geo/ExtrudeParams.h
+++ b/Geo/ExtrudeParams.h
@@ -38,6 +38,7 @@ public :
 	    double T0, double T1, double T2,
 	    double A0, double A1, double A2,
 	    double X0, double X1, double X2, double angle);
+  double u(int iLayer, int iElemLayer);
   void Extrude(int iLayer, int iElemLayer,
 	       double &dx, double &dy, double &dz);
   void Extrude(double t, double &x, double &y, double &z);