diff --git a/Common/Views.cpp b/Common/Views.cpp
index ef5c50bbd229696b335a8dbad2604c7683e299c0..ed1bd35e9dc597c65983858a210b1ef41345e55b 100644
--- a/Common/Views.cpp
+++ b/Common/Views.cpp
@@ -1,4 +1,4 @@
-// $Id: Views.cpp,v 1.24 2001-01-19 22:32:31 remacle Exp $
+// $Id: Views.cpp,v 1.25 2001-01-25 21:36:58 remacle Exp $
 
 #include <set>
 #include "Gmsh.h"
@@ -768,9 +768,9 @@ void Post_View :: smooth ()
 		n1++;
 		n2 += (*it).nboccurences;
 		// test
-		//double val = sqrt (x[j] * x[j] + y[j] * y[j] + z[j] * z[j]);
+		// double val = sqrt ((x[j]-1) * (x[j]-1) + y[j] * y[j] + z[j] * z[j]);
 		//for(int k=0;k<NbTimeStep;k++)v[j+k*8] = val;
-				for(int k=0;k<NbTimeStep;k++)v[j+k*8] = (*it).vals[k];
+		for(int k=0;k<NbTimeStep;k++)v[j+k*8] = (*it).vals[k];
 	      }
 	  }
       } 
diff --git a/Graphics/Draw.cpp b/Graphics/Draw.cpp
index ab3f96159c4058764a08205d62d1d13de6f050dc..b459a971b51bde552647153007414f9c44dbe3f7 100644
--- a/Graphics/Draw.cpp
+++ b/Graphics/Draw.cpp
@@ -1,4 +1,4 @@
-// $Id: Draw.cpp,v 1.17 2001-01-17 21:26:24 remacle Exp $
+// $Id: Draw.cpp,v 1.18 2001-01-25 21:36:59 remacle Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -132,8 +132,14 @@ void Orthogonalize(int x, int y){
 /* ------------------------------------------------------------------------ */
 
 void InitShading(void){
-  GLfloat specular[4];
   int i;
+  float ambient[] = {0.1745, 0.01175, 0.01175};
+  float diffuse[] = {0.61424, 0.04136, 0.04136};
+  float specular[4];
+
+  glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
+  glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);
+  glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
 
   glEnable(GL_LIGHTING);
   glEnable(GL_NORMALIZE);
diff --git a/Graphics/Iso.cpp b/Graphics/Iso.cpp
index 4fef32791cca5b3bda8dff6e9bc9cbc1beffdb5b..c8dfe260a20b247fb4619e45396b4084deae5f7b 100644
--- a/Graphics/Iso.cpp
+++ b/Graphics/Iso.cpp
@@ -1,4 +1,4 @@
-// $Id: Iso.cpp,v 1.5 2001-01-19 22:32:31 remacle Exp $
+// $Id: Iso.cpp,v 1.6 2001-01-25 21:36:59 remacle Exp $
 
 #include "Gmsh.h"
 #include "Mesh.h"
@@ -35,52 +35,75 @@ void IsoSimplex(double *X, double *Y, double *Z, double *Val,
                 double V, double Vmin, double Vmax, 
                 double *Offset, double Raise[3][5], int shade){
   int    nb,i;
+  int    ed[6] = {0,0,0,0,0,0};
   double Xp[6],Yp[6],Zp[6];
   double Xpi[6],Ypi[6],Zpi[6];
 
   if(V != Vmax){
     nb = 0;
     if((Val[0] > V && Val[1] <= V) || (Val[1] > V && Val[0] <= V)){
-      Interpolate(X,Y,Z,Val,V,0,1,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,0,1,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[0]++;
     }
     if((Val[0] > V && Val[2] <= V) || (Val[2] > V && Val[0] <= V)){
-      Interpolate(X,Y,Z,Val,V,0,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,0,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[1]++;
     }
     if((Val[0] > V && Val[3] <= V) || (Val[3] > V && Val[0] <= V)){
-      Interpolate(X,Y,Z,Val,V,0,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,0,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[2]++;
     }
     if((Val[1] > V && Val[2] <= V) || (Val[2] > V && Val[1] <= V)){
-      Interpolate(X,Y,Z,Val,V,1,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,1,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[3]++;
     }
     if((Val[1] > V && Val[3] <= V) || (Val[3] > V && Val[1] <= V)){
-      Interpolate(X,Y,Z,Val,V,1,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,1,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[4]++;
     }
     if((Val[2] > V && Val[3] <= V) || (Val[3] > V && Val[2] <= V)){
-      Interpolate(X,Y,Z,Val,V,2,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,2,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[5]++;
     }
   }
   else{
     nb=0;
     if((Val[0] < V && Val[1] <= V) || (Val[1] < V && Val[0] <= V)){
-      Interpolate(X,Y,Z,Val,V,0,1,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,0,1,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[0]++;
     }
     if((Val[0] < V && Val[2] <= V) || (Val[2] < V && Val[0] <= V)){
-      Interpolate(X,Y,Z,Val,V,0,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,0,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[1]++;
     }
     if((Val[0] < V && Val[3] <= V) || (Val[3] < V && Val[0] <= V)){
-      Interpolate(X,Y,Z,Val,V,0,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,0,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[2]++;
     }
     if((Val[1] < V && Val[2] <= V) || (Val[2] < V && Val[1] <= V)){
-      Interpolate(X,Y,Z,Val,V,1,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,1,2,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[3]++;
     }
     if((Val[1] < V && Val[3] <= V) || (Val[3] < V && Val[1] <= V)){
-      Interpolate(X,Y,Z,Val,V,1,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,1,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[4]++;
     }
     if((Val[2] < V && Val[3] <= V) || (Val[3] < V && Val[2] <= V)){
-      Interpolate(X,Y,Z,Val,V,2,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;
+      Interpolate(X,Y,Z,Val,V,2,3,&Xp[nb],&Yp[nb],&Zp[nb]); nb++;ed[5]++;
     }
   }
 
+  /*
+    3 possibilities for quads
+      -) 0,2,5,3
+      -) 0,1,5,4
+      -) 1,2,4,3
+      in all cases, simply invert the 2 last ones
+      for having the quads ordered      
+   */
+
+  if(nb == 4)
+    {
+      double xx =  Xp[3];
+      double yy =  Yp[3];
+      double zz =  Zp[3];
+      Xp[3] = Xp[2]; 
+      Yp[3] = Yp[2]; 
+      Zp[3] = Zp[2];
+      Xp[2] = xx;
+      Yp[2] = yy;
+      Zp[2] = zz;
+    }
+
   /*
     for having a nice isosurface, we should have n . grad v > 0
     n = normal to the polygon
@@ -109,9 +132,9 @@ void IsoSimplex(double *X, double *Y, double *Z, double *Val,
 	  double gr[3] = {X[2]-X[0],Y[2]-Y[0],Z[2]-Z[0]};
 	  double xx = gr[0] * n[0] + gr[1] * n[1] + gr[2] + n[2];
 	  if(Val[2] > Val[0]) xx = -xx;
-	}
+	}      
 
-      
+      // test
 
       if(xx > 0)
 	{
@@ -125,13 +148,11 @@ void IsoSimplex(double *X, double *Y, double *Z, double *Val,
 	    {
 	      Xp[i] = Xpi[nb-i-1];
 	      Yp[i] = Ypi[nb-i-1];
-	      Zp[i] = Zpi[nb-i-1];
+	      Zp[i] = Zpi[nb-i-1];	      
 	    }
 	}
     }
 
-
-
   if(nb == 3) 
     Draw_Triangle(Xp,Yp,Zp,Offset,Raise,shade);
   else if(nb == 4)