diff --git a/Makefile b/Makefile
index 02ff182db617c48b699de0093817be5625e23831..0cbec3d86201ee87b508da7e5811c8c60032b60c 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.131 2001-08-15 10:03:33 geuzaine Exp $
+# $Id: Makefile,v 1.132 2001-08-15 11:49:29 geuzaine Exp $
 
 GMSH_RELEASE = 1.23
 
@@ -259,7 +259,7 @@ link_linux:
 linux: tag compile_linux link_linux strip_bin
 
 #
-# Linux, gcc-2.95.x
+# Linux, gcc-2.95.x (optimized build is still buggy)
 # 
 compile_linux_gcc-2.95:
 	@for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \
@@ -270,6 +270,15 @@ compile_linux_gcc-2.95:
            "GL_INCLUDE=-I/usr/X11R6/include" \
            "GUI_INCLUDE=-I$(HOME)/SOURCES/fltk" \
         ); done
+	rm -f Mesh/3D_Extrude.o
+	@for i in $(GMSH_FLTK_DIR); do (cd $$i && $(MAKE) \
+           "CC=$(HOME)/gcc-2.95.3/bin/g++" \
+           "C_FLAGS=-O0" \
+           "OS_FLAGS=-D_LITTLE_ENDIAN" \
+           "VERSION_FLAGS=-D_FLTK" \
+           "GL_INCLUDE=-I/usr/X11R6/include" \
+           "GUI_INCLUDE=-I$(HOME)/SOURCES/fltk" \
+        ); done
 link_linux_gcc-2.95:
 	$(HOME)/gcc-2.95.3/bin/g++ -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(OPENGL_LIB) \
                  -L$(HOME)/SOURCES/fltk/lib $(FLTK_LIB) -L/usr/X11R6/lib $(X11_LIB) -lm -ldl
diff --git a/Mesh/3D_Extrude.cpp b/Mesh/3D_Extrude.cpp
index b30fdedb8b3b00f7d8a53df29a20dd974171f97b..a12751d494757b0d624a91793eefff1ee6b26660 100644
--- a/Mesh/3D_Extrude.cpp
+++ b/Mesh/3D_Extrude.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_Extrude.cpp,v 1.35 2001-08-15 08:16:30 geuzaine Exp $
+// $Id: 3D_Extrude.cpp,v 1.36 2001-08-15 11:49:29 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "Numeric.h"
@@ -748,9 +748,9 @@ void copy_mesh (Surface * from, Surface * to){
 }
 
 int Extrude_Mesh (Surface * s){
-  int i;
+  int i, j;
   Vertex *v1;
-  Curve *cc;
+  Curve *c;
   extern int FACE_DIMENSION;
 
   if (!s->Extrude || !s->Extrude->mesh.ExtrudeMesh) return false;
@@ -766,29 +766,28 @@ int Extrude_Mesh (Surface * s){
   ToAdd = s->Vertices;
 
   for (i = 0; i < List_Nbr (s->Generatrices); i++){
-    List_Read (s->Generatrices, i, &cc);
-    for (int j = 0; j < List_Nbr (cc->Vertices); j++){
-      List_Read (cc->Vertices, j, &v1);
+    List_Read (s->Generatrices, i, &c);
+    for (j = 0; j < List_Nbr (c->Vertices); j++){
+      List_Read (c->Vertices, j, &v1);
       Tree_Insert (Vertex_Bound, &v1);
     }
   }
   if (ep->geo.Mode == EXTRUDED_ENTITY){
-    Curve *c = FindCurve (abs(ep->geo.Source), THEM);
+    c = FindCurve (abs(ep->geo.Source), THEM);
     if (!c) return false;
     for (i = 0; i < List_Nbr (c->Vertices); i++){
       List_Read (c->Vertices, i, &v1);
       Extrude_Vertex (&v1, NULL);
     }
     Extrude_Curve (&c, NULL);
-    return true;
   }
   else{
     Surface *ss = FindSurface (ep->geo.Source, THEM);
     if (!ss) return false;
     copy_mesh (ss, s);
-    return true;
   }
 
+  return true;
 }
 
 static Tree_T* tmp;
diff --git a/benchmarks/3d/ellipsis.geo b/benchmarks/3d/ellipsis.geo
index eb0fb3910227eebf32d6b63973e04250ab07fd68..2b14017c234b0e28b4b28fa680981836f9607019 100644
--- a/benchmarks/3d/ellipsis.geo
+++ b/benchmarks/3d/ellipsis.geo
@@ -35,3 +35,5 @@ Line Loop(25) = {-12,-4,8};
 Ruled Surface(26) = {25};
 Line Loop(27) = {-6,2,10};
 Ruled Surface(28) = {27};
+Surface Loop(29) = {26,24,22,28,14,16,18,20};
+Volume(30) = {29};