diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp
index fc29a07b9e5d1fa68afdd28ca6aa8702f791541d..d31c54d6b254e7be96b06a31ce2249ac56458e3b 100644
--- a/Graphics/Mesh.cpp
+++ b/Graphics/Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Mesh.cpp,v 1.54 2002-11-08 18:56:21 geuzaine Exp $
+// $Id: Mesh.cpp,v 1.55 2002-11-08 23:35:41 geuzaine Exp $
 //
 // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
 //
@@ -122,40 +122,52 @@ void Draw_Mesh (Mesh *M) {
   if(CTX.mesh.draw && CTX.render_mode != GMSH_SELECT){
 
     static int first = 1, listnum;
+
     if(CTX.mesh.display_lists && CTX.mesh.changed){
       if(first) listnum = glGenLists(1);
       first = 0;
-      printf("new list!\n");
-      glNewList(listnum, GL_COMPILE);
+      //printf("new mesh display list\n");
+      glNewList(listnum, GL_COMPILE_AND_EXECUTE);
     }
       
-    if(M->status >= 3 && (CTX.mesh.volumes || CTX.mesh.volumes_num)){
-      Tree_Action(M->Volumes, Draw_Mesh_Volumes);
-    }
-    
-    if(M->status >= 2 && (CTX.mesh.surfaces || CTX.mesh.surfaces_num)){
-      Tree_Action(M->Surfaces, Draw_Mesh_Surfaces);
-      if(CTX.mesh.oldxtrude)//old extrusion algo
-	Tree_Action(M->Volumes, Draw_Mesh_Extruded_Surfaces);
-    }
+    if(!CTX.mesh.display_lists || (CTX.mesh.display_lists && CTX.mesh.changed)){
+
+      //printf("normal mesh drawing\n");
+
+      if(M->status >= 3 && (CTX.mesh.volumes || CTX.mesh.volumes_num)){
+	Tree_Action(M->Volumes, Draw_Mesh_Volumes);
+      }
+      
+      if(M->status >= 2 && (CTX.mesh.surfaces || CTX.mesh.surfaces_num)){
+	Tree_Action(M->Surfaces, Draw_Mesh_Surfaces);
+	if(CTX.mesh.oldxtrude)//old extrusion algo
+	  Tree_Action(M->Volumes, Draw_Mesh_Extruded_Surfaces);
+      }
+      
+      if(M->status >= 1 && (CTX.mesh.lines || CTX.mesh.lines_num)){
+	Tree_Action(M->Curves, Draw_Mesh_Curves);
+	DrawVertexSupp = 1 ; 
+	Tree_Action(M->VertexEdges, Draw_Mesh_Points);
+      }
+      
+      if(M->status >= 0 && (CTX.mesh.points || CTX.mesh.points_num)){
+	DrawVertexSupp = 0 ; 
+	Tree_Action(M->Vertices, Draw_Mesh_Points);
+      }
     
-    if(M->status >= 1 && (CTX.mesh.lines || CTX.mesh.lines_num)){
-      Tree_Action(M->Curves, Draw_Mesh_Curves);
-      DrawVertexSupp = 1 ; 
-      Tree_Action(M->VertexEdges, Draw_Mesh_Points);
     }
-    
-    if(M->status >= 0 && (CTX.mesh.points || CTX.mesh.points_num)){
-      DrawVertexSupp = 0 ; 
-      Tree_Action(M->Vertices, Draw_Mesh_Points);
+    else{
+
+      //printf("calling mesh display list\n");
+      glCallList(listnum);
+
     }
-    
+
     if(CTX.mesh.display_lists){
       if(CTX.mesh.changed){
 	glEndList();
 	CTX.mesh.changed=0;
       }
-      glCallList(listnum);
     }
     
   }