diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 20b712e9b19daaf1d4cb904b1115cdc298e3ea29..95a4ec4b270d0fe9bc8ded081eae8a58b70d558a 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.514 2006-08-15 02:17:25 geuzaine Exp $
+// $Id: GUI.cpp,v 1.515 2006-08-15 05:19:28 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -1352,52 +1352,57 @@ void GUI::create_graphic_window()
   bottom->box(FL_FLAT_BOX);
 
   int x = 2;
+#if defined(WIN32)
+  int sht = sh - 2; // go all the way to the bottom of the window
+#else
+  int sht = sh - 4; // leave a 2 pixel border at the bottom
+#endif
 
-  g_status_butt[0] = new Fl_Button(x, glheight + 2, sw, sh - 4, "X");
+  g_status_butt[0] = new Fl_Button(x, glheight + 2, sw, sht, "X");
   x += sw;
   g_status_butt[0]->callback(status_xyz1p_cb, (void *)"x");
   g_status_butt[0]->tooltip("Set +X or -X view (Alt+x or Alt+Shift+x)");
 
-  g_status_butt[1] = new Fl_Button(x, glheight + 2, sw, sh - 4, "Y");
+  g_status_butt[1] = new Fl_Button(x, glheight + 2, sw, sht, "Y");
   x += sw;
   g_status_butt[1]->callback(status_xyz1p_cb, (void *)"y");
   g_status_butt[1]->tooltip("Set +Y or -Y view (Alt+y or Alt+Shift+y)");
 
-  g_status_butt[2] = new Fl_Button(x, glheight + 2, sw, sh - 4, "Z");
+  g_status_butt[2] = new Fl_Button(x, glheight + 2, sw, sht, "Z");
   x += sw;
   g_status_butt[2]->callback(status_xyz1p_cb, (void *)"z");
   g_status_butt[2]->tooltip("Set +Z or -Z view (Alt+z or Alt+Shift+z)");
 
-  g_status_butt[4] = new Fl_Button(x, glheight + 2, sw, sh - 4);
+  g_status_butt[4] = new Fl_Button(x, glheight + 2, sw, sht);
   x += sw;
   g_status_butt[4]->callback(status_xyz1p_cb, (void *)"r");
   g_status_butt[4]->tooltip("Rotate +90 or -90 degrees");
   rotate_bmp = new Fl_Bitmap(rotate_bits, rotate_width, rotate_height);
   rotate_bmp->label(g_status_butt[4]);
 
-  g_status_butt[3] = new Fl_Button(x, glheight + 2, 2 * fontsize, sh - 4, "1:1");
+  g_status_butt[3] = new Fl_Button(x, glheight + 2, 2 * fontsize, sht, "1:1");
   x += 2 * fontsize;
   g_status_butt[3]->callback(status_xyz1p_cb, (void *)"1:1");
   g_status_butt[3]->tooltip("Set unit scale");
 
-  g_status_butt[8] = new Fl_Button(x, glheight + 2, sw, sh - 4);
+  g_status_butt[8] = new Fl_Button(x, glheight + 2, sw, sht);
   x += sw;
   g_status_butt[8]->callback(status_xyz1p_cb, (void *)"p");
   g_status_butt[8]->tooltip("Toggle projection mode (Alt+o or Alt+Shift+o)");
   ortho_bmp = new Fl_Bitmap(ortho_bits, ortho_width, ortho_height);
   ortho_bmp->label(g_status_butt[8]);
 
-  g_status_butt[9] = new Fl_Button(x, glheight + 2, sw, sh - 4, "S");
+  g_status_butt[9] = new Fl_Button(x, glheight + 2, sw, sht, "S");
   x += sw;
   g_status_butt[9]->callback(status_xyz1p_cb, (void *)"S");
   g_status_butt[9]->tooltip("Toggle mouse selection ON/OFF (Escape)");
 
-  g_status_butt[5] = new Fl_Button(x, glheight + 2, sw, sh - 4, "?");
+  g_status_butt[5] = new Fl_Button(x, glheight + 2, sw, sht, "?");
   x += sw;
   g_status_butt[5]->callback(status_xyz1p_cb, (void *)"?");
   g_status_butt[5]->tooltip("Show current options");
 
-  g_status_butt[6] = new Fl_Button(x, glheight + 2, sw, sh - 4);
+  g_status_butt[6] = new Fl_Button(x, glheight + 2, sw, sht);
   x += sw;
   g_status_butt[6]->callback(status_rewind_cb);
   g_status_butt[6]->tooltip("Rewind animation");
@@ -1405,7 +1410,7 @@ void GUI::create_graphic_window()
   rewind_bmp->label(g_status_butt[6]);
   g_status_butt[6]->deactivate();
 
-  g_status_butt[7] = new Fl_Button(x, glheight + 2, sw, sh - 4);
+  g_status_butt[7] = new Fl_Button(x, glheight + 2, sw, sht);
   x += sw;
   g_status_butt[7]->callback(status_play_cb);
   g_status_butt[7]->tooltip("Play/pause animation");
@@ -1422,9 +1427,9 @@ void GUI::create_graphic_window()
 
   x += 2;
   g_status_label[0] = new Fl_Box(x, glheight + 2, 
-				 (width - x - 2) / 3, sh - 4);
+				 (width - x) / 3 - 1, sht);
   g_status_label[1] = new Fl_Box(x + (width - x) / 3, glheight + 2, 
-				 2 * (width - x - 1) / 3, sh - 4);
+				 width - (width - x) / 3, sht);
   for(int i = 0; i < 2; i++) {
     g_status_label[i]->box(FL_THIN_DOWN_BOX);
     g_status_label[i]->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp
index 0017b4f18b4ca8be56981277ab9e279f7326b357..7a8969d79fdf33a8d1786ed5d9a412f63c1f865a 100644
--- a/Graphics/Mesh.cpp
+++ b/Graphics/Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Mesh.cpp,v 1.163 2006-08-15 04:15:19 geuzaine Exp $
+// $Id: Mesh.cpp,v 1.164 2006-08-15 05:19:28 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -236,15 +236,6 @@ class initMeshGFace {
     if(!f->meshRep)
       f->meshRep = new MRepFace(f);
 
-    if(f->meshRep->va_lines) delete f->meshRep->va_lines;
-    f->meshRep->va_lines = new VertexArray(2, f->meshRep->edges.size());
-
-    if(f->meshRep->va_triangles) delete f->meshRep->va_triangles;
-    f->meshRep->va_triangles = new VertexArray(3, f->triangles.size());
-
-    if(f->meshRep->va_quads) delete f->meshRep->va_quads;
-    f->meshRep->va_quads = new VertexArray(4, f->quadrangles.size());
-
     bool useEdges = true;
 
     if(CTX.mesh.explode != 1. || CTX.mesh.quality_sup || CTX.mesh.radius_sup || 
@@ -266,6 +257,15 @@ class initMeshGFace {
     //    glDrawElements() instead of glDrawArrays().
     // 2) we can use tc to stripe the triangles to create strips
 
+    if(f->meshRep->va_lines) delete f->meshRep->va_lines;
+    f->meshRep->va_lines = new VertexArray(2, f->meshRep->edges.size());
+
+    if(f->meshRep->va_triangles) delete f->meshRep->va_triangles;
+    f->meshRep->va_triangles = new VertexArray(3, f->triangles.size());
+
+    if(f->meshRep->va_quads) delete f->meshRep->va_quads;
+    f->meshRep->va_quads = new VertexArray(4, f->quadrangles.size());
+
     if(useEdges && CTX.mesh.surfaces_edges){
       std::set<MEdge>::const_iterator it = f->meshRep->edges.begin();
       for(; it != f->meshRep->edges.end(); ++it){