diff --git a/Box/Main.cpp b/Box/Main.cpp
index 992ab97b1c4eac2bbbe9370eb304619e7cfc62c8..bfbabc5db3c68444ca58ca786a08abc473aa8a12 100644
--- a/Box/Main.cpp
+++ b/Box/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.60 2006-07-12 07:24:12 geuzaine Exp $
+// $Id: Main.cpp,v 1.61 2006-08-05 10:05:44 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -32,6 +32,7 @@
 #include "Options.h"
 #include "OpenFile.h"
 #include "CommandLine.h"
+#include "CreateFile.h"
 #include "GModel.h"
 
 Context_T CTX;
@@ -116,10 +117,10 @@ int GMSHBOX(int argc, char *argv[])
     }
     if(CTX.batch > 0) {
       mai3d(THEM, CTX.batch);
-      Print_Mesh(THEM, CTX.output_filename, CTX.mesh.format);
+      CreateOutputFile(CTX.output_filename, CTX.mesh.format);
     }
     else
-      Print_Geo(CTX.output_filename);
+      CreateOutputFile(CTX.output_filename, FORMAT_GEO);
     if(CTX.mesh.histogram){
       Mesh_Quality(THEM);
       Print_Histogram(THEM->Histogram[0]);
@@ -168,7 +169,6 @@ void Msg(int level, char *fmt, ...)
   case PROGRESS:
   case STATUS1N:
   case STATUS2N:
-  case STATUS3N:
     break;
 
   case DIRECT:
diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp
index e1985ef02ec760df14e39f13bd4d8719cdc48b36..46cda735e72e02cdc48df107750d25e47f394e0b 100644
--- a/Common/CommandLine.cpp
+++ b/Common/CommandLine.cpp
@@ -1,4 +1,4 @@
-// $Id: CommandLine.cpp,v 1.71 2006-07-12 07:24:12 geuzaine Exp $
+// $Id: CommandLine.cpp,v 1.72 2006-08-05 10:05:44 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -30,7 +30,9 @@
 #include "Mesh.h"
 #include "Views.h"
 #include "OpenFile.h"
+#include "CreateFile.h"
 #include "Parser.h"
+#include "GModel.h"
 #include "OS.h"
 
 #if !defined(GMSH_EXTRA_VERSION)
@@ -41,7 +43,7 @@
 #endif
 
 extern Context_T CTX;
-extern Mesh *THEM;
+extern GModel *GMODEL;
 
 char gmsh_progname[]  = "Gmsh, a 3D mesh generator with pre- and post-processing facilities" ;
 char gmsh_copyright[] = "Copyright (C) 1997-2006 Christophe Geuzaine and Jean-Francois Remacle";
@@ -294,11 +296,9 @@ void Get_Options(int argc, char *argv[])
             WriteView(*(Post_View **) List_Pointer(CTX.post.list, j),
                       argv[i + 1], 1, j ? 1 : 0);
 	  // convert any mesh to the latest format
-	  if(THEM){
-	    if(Tree_Nbr(THEM->Vertices)){
-	      CTX.mesh.msh_file_version = 2.0;
-	      Print_Mesh(argv[i + 1], FORMAT_MSH);
-	    }
+	  if(GMODEL && GMODEL->numVertex()){
+	    CTX.mesh.msh_file_version = 2.0;
+	    CreateOutputFile(argv[i + 1], FORMAT_MSH);
 	  }
         }
         else
diff --git a/Common/Message.h b/Common/Message.h
index ab4ab897d4970b34e56d5118de940bef8de36ba2..6edad5f331f87b9214eb05ec64e6a5ec6cfe48df 100644
--- a/Common/Message.h
+++ b/Common/Message.h
@@ -47,13 +47,11 @@
 #define DEBUG2        19  // Middle part of a multiline DEBUG message
 #define DEBUG3        20  // Last part of a multiline DEBUG message  
 
-#define STATUS1       21  // Small information in status bar (left)
-#define STATUS2       22  // Small interaction in status bar (middle)
-#define STATUS3       23  // Small interaction in status bar (right)
+#define STATUS1       21  // left status bar
+#define STATUS2       22  // right status bar
 
 #define STATUS1N      24  // Same as STATUS1, but not going into the log file
 #define STATUS2N      25  // Same as STATUS2, but not going into the log file
-#define STATUS3N      26  // Same as STATUS3, but not going into the log file
 
 #define ONSCREEN      27  // Persistent on-screen message
 
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 405ea2ec1c2c089bd8e40ffd4477de3ba964a378..def9af6d9cb34d0e75f4e959a3db5251b6ccbac6 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.280 2006-05-14 02:03:59 geuzaine Exp $
+// $Id: Options.cpp,v 1.281 2006-08-05 10:05:44 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -224,7 +224,6 @@ void Print_Options(int num, int level, int diff, int help, char *filename)
       Msg(GERROR, "Unable to open file '%s'", filename);
       return;
     }
-    Msg(INFO, "Writing option file '%s'", filename);
   }
   else
     file = NULL;
@@ -321,11 +320,7 @@ void Print_Options(int num, int level, int diff, int help, char *filename)
   Print_OptionCategory(level, diff, help, "Print options (colors)", file);
   Print_ColorOptions(num, level, diff, help, PrintOptions_Color, "Print.", file);
 
-  if(filename) {
-    Msg(INFO, "Wrote option file '%s'", filename);
-    Msg(STATUS2N, "Wrote '%s'", filename);
-    fclose(file);
-  }
+  if(filename) fclose(file);
 }
 
 char * Get_OptionSaveLevel(int level){
@@ -2781,11 +2776,11 @@ double opt_general_orthographic(OPT_ARGS_NUM)
   if(WID && (action & GMSH_GUI)) {
     if(CTX.ortho){
       WID->gen_choice[2]->value(0);
-      Msg(STATUS1N, "Orthographic projection");
+      Msg(STATUS2N, "Orthographic projection");
     }
     else{
       WID->gen_choice[2]->value(1);
-      Msg(STATUS1N, "Perspective projection");
+      Msg(STATUS2N, "Perspective projection");
     }
   }
 #endif
@@ -2799,15 +2794,15 @@ double opt_general_mouse_selection(OPT_ARGS_NUM)
 #if defined(HAVE_FLTK)
   if(WID && (action & GMSH_GUI)) {
     if(CTX.enable_mouse_selection == 0){
-      Msg(STATUS1N, "Mouse selection OFF");
+      Msg(STATUS2N, "Mouse selection OFF");
       WID->g_status_butt[9]->color(FL_RED);
     }
     else if(CTX.enable_mouse_selection == 1){
-      Msg(STATUS1N, "Mouse hover OFF");
+      Msg(STATUS2N, "Mouse hover OFF");
       WID->g_status_butt[9]->color(FL_GREEN);
     }
     else{
-      Msg(STATUS1N, "Mouse selection ON");
+      Msg(STATUS2N, "Mouse selection ON");
       WID->g_status_butt[9]->color(FL_BACKGROUND_COLOR);
     }
     WID->g_status_butt[9]->redraw();
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 03a6b3b43db2e7bb93cf1fbc843f1777a1c4ee90..615e755d7c07fdc82202ef62c7d934be8bc0a769 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.420 2006-07-24 14:05:50 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.421 2006-08-05 10:05:44 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -906,6 +906,7 @@ void options_browser_cb(CALLBACK_ARGS)
 void options_save_cb(CALLBACK_ARGS)
 {
   Print_Options(0, GMSH_OPTIONSRC, 1, 1, CTX.options_filename_fullpath);
+  Msg(STATUS2N, "Wrote '%s'", CTX.options_filename_fullpath);
 }
 
 void options_restore_defaults_cb(CALLBACK_ARGS)
@@ -954,7 +955,7 @@ void general_options_rotation_center_select_cb(CALLBACK_ARGS)
   opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1);
   Draw();
 
-  Msg(STATUS3N, "Setting rotation center");
+  Msg(STATUS2N, "Setting rotation center");
   Msg(ONSCREEN, "Select point\n[Press 'q' to abort]");
   char ib = SelectEntity(ENT_POINT, &ne, v, c, s);
   if(ib == 'l') {
@@ -971,7 +972,7 @@ void general_options_rotation_center_select_cb(CALLBACK_ARGS)
   }
   ZeroHighlight();
   Draw();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
   Msg(ONSCREEN, "");
 }
 
@@ -1890,7 +1891,7 @@ void geometry_elementary_add_new_point_cb(CALLBACK_ARGS)
   WID->create_geometry_context_window(1);
 
   while(1) {
-    Msg(STATUS3N, "Creating point");
+    Msg(STATUS2N, "Creating point");
     WID->g_opengl_window->AddPointMode = true;
     Msg(ONSCREEN, "Move mouse and/or enter coordinates\n"
 	"[Press 'Shift' to hold position, 'e' to add point or 'q' to abort]");
@@ -1914,7 +1915,7 @@ void geometry_elementary_add_new_point_cb(CALLBACK_ARGS)
   }
 
   WID->reset_visibility();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
   Msg(ONSCREEN, "");
 }
 
@@ -1931,7 +1932,7 @@ static void _new_multiline(int type)
 
   n = 0;
   while(1) {
-    Msg(STATUS3N, "Creating curve");
+    Msg(STATUS2N, "Creating curve");
     if(n == 0)
       Msg(ONSCREEN, "Select control points\n"
 	  "[Press 'e' to end selection or 'q' to abort]");
@@ -1982,7 +1983,7 @@ static void _new_multiline(int type)
   }
 
   WID->reset_visibility();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
   Msg(ONSCREEN, "");
 }
 
@@ -2004,7 +2005,7 @@ void geometry_elementary_add_new_line_cb(CALLBACK_ARGS)
 
   n = 0;
   while(1) {
-    Msg(STATUS3N, "Creating straight line");
+    Msg(STATUS2N, "Creating straight line");
     if(n == 0)
       Msg(ONSCREEN, "Select start point\n"
 	  "[Press 'q' to abort]");
@@ -2039,7 +2040,7 @@ void geometry_elementary_add_new_line_cb(CALLBACK_ARGS)
   }
 
   WID->reset_visibility();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
   Msg(ONSCREEN, "");
 }
 
@@ -2066,7 +2067,7 @@ void geometry_elementary_add_new_circle_cb(CALLBACK_ARGS)
 
   n = 0;
   while(1) {
-    Msg(STATUS3N, "Creating circle");
+    Msg(STATUS2N, "Creating circle");
     if(n == 0)
       Msg(ONSCREEN, "Select start point\n"
 	  "[Press 'q' to abort]");
@@ -2104,7 +2105,7 @@ void geometry_elementary_add_new_circle_cb(CALLBACK_ARGS)
   }
 
   WID->reset_visibility();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
   Msg(ONSCREEN, "");
 }
 
@@ -2121,7 +2122,7 @@ void geometry_elementary_add_new_ellipse_cb(CALLBACK_ARGS)
 
   n = 0;
   while(1) {
-    Msg(STATUS3N, "Creating ellipse");
+    Msg(STATUS2N, "Creating ellipse");
     if(n == 0)
       Msg(ONSCREEN, "Select start point\n"
 	  "[Press 'q' to abort]");
@@ -2162,7 +2163,7 @@ void geometry_elementary_add_new_ellipse_cb(CALLBACK_ARGS)
   }
 
   WID->reset_visibility();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
   Msg(ONSCREEN, "");
 }
 
@@ -2194,7 +2195,7 @@ static void _new_surface_volume(int mode)
 
     while(1) {
       if(type == ENT_LINE){
-	Msg(STATUS3N, "Creating surface");
+	Msg(STATUS2N, "Creating surface");
 	if(!List_Nbr(List1))
 	  Msg(ONSCREEN, "Select surface boundary\n"
 	      "[Press 'q' to abort]");
@@ -2203,7 +2204,7 @@ static void _new_surface_volume(int mode)
 	      "[Press 'u' to undo last selection or 'q' to abort]");
       }
       else{
-	Msg(STATUS3N, "Creating volume");
+	Msg(STATUS2N, "Creating volume");
 	if(!List_Nbr(List1))
 	  Msg(ONSCREEN, "Select volume boundary\n"
 	      "[Press 'q' to abort]");
@@ -2304,7 +2305,7 @@ stopall:;
   List_Delete(List2);
 
   WID->reset_visibility();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
   Msg(ONSCREEN, "");
 }
 
@@ -2375,17 +2376,17 @@ static void _action_point_line_surface_volume(int action, int mode, char *what)
   List_T *List1 = List_Create(5, 5, sizeof(int));
   while(1) {
     if(action == 10)
-      Msg(STATUS3N, "Adding new model edges");
+      Msg(STATUS2N, "Adding new model edges");
     else if(action == 9)
-      Msg(STATUS3N, "Defining surfaces to recombine");
+      Msg(STATUS2N, "Defining surfaces to recombine");
     else if(action == 8)
-      Msg(STATUS3N, "Setting characteristic length");
+      Msg(STATUS2N, "Setting characteristic length");
     else if(action == 7)
-      Msg(STATUS3N, "Creating physical %s", str);
+      Msg(STATUS2N, "Creating physical %s", str);
     else if(action == 6)
-      Msg(STATUS3N, "Deleting %s", str);
+      Msg(STATUS2N, "Deleting %s", str);
     else
-      Msg(STATUS3N, "Transforming %s", str);
+      Msg(STATUS2N, "Transforming %s", str);
 
     if(!List_Nbr(List1))
       Msg(ONSCREEN, "Select %s\n"
@@ -2571,7 +2572,7 @@ static void _action_point_line_surface_volume(int action, int mode, char *what)
   List_Delete(List1);
 
   WID->reset_visibility();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
   Msg(ONSCREEN, "");
 }
   
@@ -2877,7 +2878,7 @@ void mesh_save_cb(CALLBACK_ARGS)
 		    "Cancel", "Replace", NULL, name))
 	return;
   }
-  Print_Mesh(name, CTX.mesh.format);
+  CreateOutputFile(name, CTX.mesh.format);
 }
 
 void mesh_define_cb(CALLBACK_ARGS)
@@ -2889,21 +2890,21 @@ void mesh_1d_cb(CALLBACK_ARGS)
 {
   mai3d(1);
   Draw();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
 }
 
 void mesh_2d_cb(CALLBACK_ARGS)
 {
   mai3d(2);
   Draw();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
 }
 
 void mesh_3d_cb(CALLBACK_ARGS)
 {
   mai3d(3);
   Draw();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
 }
 
 void mesh_stl_cb(CALLBACK_ARGS)
@@ -2924,7 +2925,7 @@ void mesh_degree_cb(CALLBACK_ARGS)
   }
   CTX.mesh.changed = 1;
   Draw();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
 }
 
 void mesh_optimize_cb(CALLBACK_ARGS)
@@ -2939,14 +2940,14 @@ void mesh_optimize_cb(CALLBACK_ARGS)
 
   CTX.mesh.changed = 1;
   Draw();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
 }
 
 void mesh_remesh_cb(CALLBACK_ARGS)
 {
   ReMesh(THEM);
   Draw();
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
 }
 
 void mesh_update_edges_cb(CALLBACK_ARGS)
@@ -2998,7 +2999,7 @@ static void _add_transfinite_elliptic(int type, int dim)
 
   n = 0;
   while(1) {
-    Msg(STATUS3N, "Setting structured mesh contraints");
+    Msg(STATUS2N, "Setting structured mesh contraints");
     switch (dim) {
     case 1:
       if(n == 0)
@@ -3112,7 +3113,7 @@ static void _add_transfinite_elliptic(int type, int dim)
   }
 
 stopall:
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
   Msg(ONSCREEN, "");
 }
 
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 4acd7deec0803f33e08101e05f785215e3a31a86..8389fa3a1a154edee57116fb9e40baafb114f37e 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.502 2006-07-01 10:35:48 geuzaine Exp $
+// $Id: GUI.cpp,v 1.503 2006-08-05 10:05:44 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -1147,7 +1147,7 @@ void GUI::set_context(Context_Item * menu_asked, int flag)
     return;
   }
 
-  Msg(STATUS2N, menu[0].label + 1);
+  Msg(STATUS1N, menu[0].label + 1);
 
   // Remove all the children (m_push*, m_toggle*, m_pop*). FLTK <=
   // 1.1.4 should be OK with this. FLTK 1.1.5 may crash as it may
@@ -1428,12 +1428,10 @@ void GUI::create_graphic_window()
   }
 
   g_status_label[0] = new Fl_Box(x, glheight + 2, 
-				 (width - x) / 3, sh - 4);
-  g_status_label[1] = new Fl_Box(x + (width - x) / 3, glheight + 2, 
-				 (width - x) / 3, sh - 4);
-  g_status_label[2] = new Fl_Box(x + 2 * (width - x) / 3, glheight + 2, 
-				 (width - x) / 3 - 2, sh - 4);
-  for(i = 0; i < 3; i++) {
+				 (width - x) / 2, sh - 4);
+  g_status_label[1] = new Fl_Box(x + (width - x) / 2, glheight + 2, 
+				 (width - x) / 2, sh - 4);
+  for(i = 0; i < 2; i++) {
     g_status_label[i]->box(FL_FLAT_BOX);
     g_status_label[i]->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
   }
@@ -1512,11 +1510,11 @@ void GUI::check_anim_buttons()
 
 void GUI::set_status(char *msg, int num)
 {
-  if(num >= 0 && num < 3){
+  if(num == 0 || num == 1){
     g_status_label[num]->label(msg);
     g_status_label[num]->redraw();
   }
-  else if (num == 3){
+  else if(num == 3){
     int n = strlen(msg);
     int i = 0;
     while(i < n)
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index fc08006270a4ec8a76b3310163b533ee6a63fe57..68b1eb7504291bb1cbbaac1658e64733b04aba0b 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -154,7 +154,7 @@ public:
   Fl_Window        *g_window ;
   Opengl_Window    *g_opengl_window ;
   Fl_Button        *g_status_butt[10] ;
-  Fl_Box           *g_status_label[3] ;
+  Fl_Box           *g_status_label[2] ;
 
   // Option window
   Fl_Window        *opt_window ;
diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp
index 58ea83801b43e4026729fc12314a101c4114ecde..47eb41842953e7b9c3713b46e0f14e7e96bfee73 100644
--- a/Fltk/Main.cpp
+++ b/Fltk/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.91 2006-08-04 14:28:01 geuzaine Exp $
+// $Id: Main.cpp,v 1.92 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -165,11 +165,6 @@ int main(int argc, char *argv[])
 
   CTX.batch = 0;
 
-  // Say welcome!
-
-  Msg(STATUS3N, "Ready");
-  Msg(STATUS1N, "Gmsh %s", Get_GmshVersion());
-
   // Log the following for bug reports
 
   Msg(INFO, "-------------------------------------------------------");
@@ -236,6 +231,10 @@ int main(int argc, char *argv[])
       Msg(GERROR, "Invalid background mesh (no view)");
   }
 
+  // Say welcome!
+
+  Msg(STATUS2N, "Gmsh %s", Get_GmshVersion());
+
   // Draw the actual scene
   Draw();
 
diff --git a/Fltk/Message.cpp b/Fltk/Message.cpp
index 5d2d0aad1cb2d1ddebf68bf44328457886777207..92445f7a4ec943d94cf71ee238b891d5d2922741 100644
--- a/Fltk/Message.cpp
+++ b/Fltk/Message.cpp
@@ -1,4 +1,4 @@
-// $Id: Message.cpp,v 1.73 2006-03-17 21:04:34 geuzaine Exp $
+// $Id: Message.cpp,v 1.74 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -79,14 +79,12 @@ void Msg(int level, char *fmt, ...)
   case SOLVER   : color = 4; verb = 3; break ;
   case SOLVERR  : color = 1; verb = 3; break ;
 
-  case PROGRESS : log = 0; window = 2; break ;
+  case PROGRESS : log = 0; window = 1; break ;
 
   case STATUS1N : log = 0; //fallthrough
   case STATUS1  : str = INFO_STR; verb = 1; window = 0; break ;
   case STATUS2N : log = 0; //fallthrough
   case STATUS2  : str = INFO_STR; verb = 1; window = 1; break ;
-  case STATUS3N : log = 0; //fallthrough
-  case STATUS3  : str = INFO_STR; verb = 1; window = 2; break ;
   case ONSCREEN : log = 0; verb = 1; window = 3; break ;
 
   case FATAL    : str = FATAL_STR; abort = 1; break ;
@@ -141,8 +139,7 @@ void Msg(int level, char *fmt, ...)
 	 level != DEBUG2 &&
 	 level != DEBUG3 &&
 	 level != STATUS1N &&
-	 level != STATUS2N &&
-	 level != STATUS3N){
+	 level != STATUS1N){
 	WID->check();
       }
     }
diff --git a/Fltk/Solvers.cpp b/Fltk/Solvers.cpp
index 62e52de78f20825becc9b84b78ce66aa20bcab1d..a2d3f8db6322c3dbda825e0f5e70ead7cc0c4347 100644
--- a/Fltk/Solvers.cpp
+++ b/Fltk/Solvers.cpp
@@ -1,4 +1,4 @@
-// $Id: Solvers.cpp,v 1.50 2006-03-10 15:54:30 geuzaine Exp $
+// $Id: Solvers.cpp,v 1.51 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -200,9 +200,9 @@ int Solver(int num, char *args)
 	  break;
 	case GmshServer::CLIENT_PROGRESS:
 	  if(num >= 0)
-	    Msg(STATUS3N, "%s %s", SINFO[num].name, message);
+	    Msg(STATUS2N, "%s %s", SINFO[num].name, message);
 	  else
-	    Msg(STATUS3N, "%s", message);
+	    Msg(STATUS2N, "%s", message);
 	  break;
 	case GmshServer::CLIENT_OPTION_1:
 	  if(num >= 0)
@@ -279,7 +279,7 @@ int Solver(int num, char *args)
     Msg(WARNING, "Impossible to unlink the socket '%s'", sockname);
 
   if(num >= 0){
-    Msg(STATUS3N, "Ready");
+    Msg(STATUS2N, "");
   }
   else{
     Msg(INFO, "Client disconnected: starting new connection");
diff --git a/Geo/GModelIO.cpp b/Geo/GModelIO.cpp
index 9dee137da7306658996c3666db3259a64078b2c4..1e2fefe38656e35d24aad6ed6f9cdd2a9a560ca4 100644
--- a/Geo/GModelIO.cpp
+++ b/Geo/GModelIO.cpp
@@ -52,16 +52,6 @@ static void storeElementsInEntities(GModel *m, int type,
   std::map<int, std::vector<MElement*> >::const_iterator ite = map.end();
   for(; it != ite; ++it){
     switch(type){
-    case PNT:
-      {
-	GVertex *v = m->vertexByTag(it->first);
-	if(!v){
-	  v = new gmshVertex(m, it->first);
-	  m->add(v);
-	}
-	if(type == PNT) copyElements(v->mesh_vertices, it->second);
-      }
-      break;
     case LGN1:     
       {
 	GEdge *e = m->edgeByTag(it->first);
@@ -290,6 +280,20 @@ int GModel::readMSH(const std::string &name)
   // entity does not exist, create a new one.
   for(int i = 0; i < 7; i++)
     storeElementsInEntities(this, elementTypes[i], elements[i]);
+
+  // treat points separately
+  {
+    std::map<int, std::vector<MVertex*> >::const_iterator it = points.begin();
+    std::map<int, std::vector<MVertex*> >::const_iterator ite = points.end();
+    for(; it != ite; ++it){
+      GVertex *v = vertexByTag(it->first);
+      if(!v){
+	v = new gmshVertex(this, it->first);
+	add(v);
+      }
+      v->mesh_vertices.push_back(it->second[0]);
+    }
+  }
   
   // loop on regions, then on faces, edges and vertices and store the
   // entity pointer in the the elements' vertices (this way we
@@ -309,7 +313,12 @@ int GModel::readMSH(const std::string &name)
     associateEntityWithVertices(*it, (*it)->lines);
   }
   for(viter it = firstVertex(); it != lastVertex(); ++it){
-    //FIXME: TODO 
+    // special case for points: the mesh vertex has been copied here
+    // so that we can assign the entity:
+    (*it)->mesh_vertices[0]->setEntity(*it);
+    // now that this is done, we reset mesh_vertices so that it can be
+    // filled again below
+    (*it)->mesh_vertices.clear();
   }
 
   // store the vertices in their associated geometrical entity
@@ -321,7 +330,7 @@ int GModel::readMSH(const std::string &name)
     if(ge) 
       ge->mesh_vertices.push_back(v);
     else
-      delete v; // delete unused vertex
+      delete v; // we delete all unused vertices
   }
 
   // store the physical tags
diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index 177262972cfe2dd3dfbbb09bc23f1b173b002ec2..fafdb2f5cc97fff44b335727a056f4043ee048a4 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: Geo.cpp,v 1.51 2006-07-14 12:17:06 geuzaine Exp $
+// $Id: Geo.cpp,v 1.52 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -90,7 +90,7 @@ void add_infile(char *text, char *fich)
     return;
   }
   fprintf(yyin, "%s\n", text);
-  Msg(STATUS1, "%s", text);
+  Msg(STATUS2, "%s", text);
   fclose(yyin);
   yyin = fopen(CTX.tmp_filename_fullpath, "r");
   while(!feof(yyin)) {
diff --git a/Geo/Print_Geo.cpp b/Geo/Print_Geo.cpp
index 893311ec3be7c8ffa7a8ede5a80d4b2ccfa2e2aa..78bd280fee973b762750b587c4672307faadaf66 100644
--- a/Geo/Print_Geo.cpp
+++ b/Geo/Print_Geo.cpp
@@ -1,4 +1,4 @@
-// $Id: Print_Geo.cpp,v 1.44 2006-07-12 07:24:13 geuzaine Exp $
+// $Id: Print_Geo.cpp,v 1.45 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -253,7 +253,6 @@ void Print_Geo(char *filename)
       Msg(GERROR, "Unable to open file '%s'", filename);
       return;
     }
-    Msg(INFO, "Writing flattened geometry file '%s'", filename);
   }
   else
     FOUT = stdout;
@@ -264,9 +263,5 @@ void Print_Geo(char *filename)
   Tree_Action(THEM->Volumes, Print_Volume);
   List_Action(THEM->PhysicalGroups, Print_PhysicalGroups);
 
-  if(filename) {
-    Msg(INFO, "Wrote flattened geometry file '%s'", filename);
-    Msg(STATUS2N, "Wrote '%s'", filename);
-    fclose(FOUT);
-  }
+  if(filename) fclose(FOUT);
 }
diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp
index 26adf8714fbbb838fad5161901487211d7b3e511..a6b7e6ae22324c697359b83c8685bfc977bab12e 100644
--- a/Graphics/CreateFile.cpp
+++ b/Graphics/CreateFile.cpp
@@ -1,4 +1,4 @@
-// $Id: CreateFile.cpp,v 1.84 2006-08-04 14:28:02 geuzaine Exp $
+// $Id: CreateFile.cpp,v 1.85 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -133,10 +133,15 @@ void CreateOutputFile(char *filename, int format)
   GLint width = viewport[2] - viewport[0];
   GLint height = viewport[3] - viewport[1];
 
+  bool printEndMessage = true;
+  if(format != FORMAT_AUTO)
+    Msg(INFO, "Writing %s file '%s'", GetStringForFileFormat(format), name);
+
   switch (format) {
 
   case FORMAT_AUTO:
     CreateOutputFile(name, GuessFileFormatFromFileName(name));
+    printEndMessage = false;
     break;
     
   case FORMAT_GEO:
@@ -161,8 +166,7 @@ void CreateOutputFile(char *filename, int format)
     break;
 
   case FORMAT_LC:
-    ExportMeshStatistics(name);
-    Msg(STATUS2N, "Wrote '%s'", name);
+    GMODEL->writePOS(name);
     break;
 
   case FORMAT_PPM:
@@ -190,7 +194,6 @@ void CreateOutputFile(char *filename, int format)
       CTX.print.gl_fonts = 1;
       CTX.bg_gradient = old_bg_gradient;
 
-      Msg(INFO, "Writing %s file '%s'", GetStringForFileFormat(format), name);
       if(format == FORMAT_PPM){
 	create_ppm(fp, &buffer);
       }
@@ -213,9 +216,6 @@ void CreateOutputFile(char *filename, int format)
       else{
 	create_png(fp, &buffer, 100);
       }
-
-      Msg(INFO, "Wrote %s file '%s'", GetStringForFileFormat(format), name);
-      Msg(STATUS2N, "Wrote '%s'", name);
       fclose(fp);
     }
     break;
@@ -276,8 +276,6 @@ void CreateOutputFile(char *filename, int format)
 	(format == FORMAT_EPSTEX ? GL2PS_NO_TEXT : 0) |
 	(format == FORMAT_PDFTEX ? GL2PS_NO_TEXT : 0);
       
-      Msg(INFO, "Writing %s file '%s'", GetStringForFileFormat(format), name);
-      
       GLint buffsize = 0;
       int res = GL2PS_OVERFLOW;
       while(res == GL2PS_OVERFLOW) {
@@ -311,9 +309,6 @@ void CreateOutputFile(char *filename, int format)
       }
 
       CTX.bg_gradient = old_bg_gradient;
-
-      Msg(INFO, "Wrote %s file '%s'", GetStringForFileFormat(format), name);
-      Msg(STATUS2N, "Wrote '%s'", name);
       fclose(fp);
     }
     break;
@@ -325,8 +320,6 @@ void CreateOutputFile(char *filename, int format)
 	Msg(GERROR, "Unable to open file '%s'", name);
 	return;
       }
-      Msg(INFO, "Writing TEX file '%s'", name);
-
       GLint buffsize = 0;
       int res = GL2PS_OVERFLOW;
       while(res == GL2PS_OVERFLOW) {
@@ -340,17 +333,21 @@ void CreateOutputFile(char *filename, int format)
 	CTX.print.gl_fonts = 1;
 	res = gl2psEndPage();
       }
-      Msg(INFO, "Wrote TEX file '%s'", name);
-      Msg(STATUS2N, "Wrote '%s'", name);
       fclose(fp);
     }
     break;
 
   default:
     Msg(GERROR, "Unknown output file format (%d)", format);
+    printEndMessage = false;
     break;
   }
 
+  if(printEndMessage){
+    Msg(INFO, "Wrote %s file '%s'", GetStringForFileFormat(format), name);
+    Msg(STATUS2N, "Wrote '%s'", name);
+  }
+
   CTX.print.format = oldformat;
   Draw();
 }
diff --git a/Graphics/Geom.cpp b/Graphics/Geom.cpp
index 1d633edc88b1845c29c9d8a74c5b4987f5baecc5..dee0ea5daa81a01e971aa66f52e9c1bd2ad38715 100644
--- a/Graphics/Geom.cpp
+++ b/Graphics/Geom.cpp
@@ -1,4 +1,4 @@
-// $Id: Geom.cpp,v 1.102 2006-08-04 14:28:02 geuzaine Exp $
+// $Id: Geom.cpp,v 1.103 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -280,7 +280,7 @@ void HighlightEntity(GEntity *e, int permanent)
   if(permanent)
     e->drawAttributes.Frozen = 2;
   else
-    Msg(STATUS1N, "%s", e->getInfoString().c_str());
+    Msg(STATUS2N, "%s", e->getInfoString().c_str());
 }
 
 void HighlightEntity(GVertex *v, GEdge *c, GFace *s, int permanent)
@@ -288,7 +288,7 @@ void HighlightEntity(GVertex *v, GEdge *c, GFace *s, int permanent)
   if(v) HighlightEntity(v, permanent);
   else if(c) HighlightEntity(c, permanent);
   else if(s) HighlightEntity(s, permanent);
-  else if(!permanent) Msg(STATUS1N, " ");
+  else if(!permanent) Msg(STATUS2N, "");
 }
 
 void HighlightEntityNum(int v, int c, int s, int permanent)
diff --git a/Mesh/1D_Mesh.cpp b/Mesh/1D_Mesh.cpp
index 8f5bc0afdf7243d5c85ae1ef4f8efe6041aaf5ee..26e5de0ab502f669b6980a316076d36fc53345bc 100644
--- a/Mesh/1D_Mesh.cpp
+++ b/Mesh/1D_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: 1D_Mesh.cpp,v 1.48 2006-01-29 22:53:41 geuzaine Exp $
+// $Id: 1D_Mesh.cpp,v 1.49 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -135,7 +135,7 @@ void Maillage_Curve(void *data, void *dummy)
   if(c->Num < 0)
     return;
 
-  Msg(STATUS3, "Meshing curve %d", c->Num);
+  Msg(STATUS2, "Meshing curve %d", c->Num);
 
   if(MeshDiscreteCurve(c)){
     return;
diff --git a/Mesh/2D_Mesh.cpp b/Mesh/2D_Mesh.cpp
index 2425bf15b0b78484c878578e73f0daa43844fb4a..b4a54fe64102b8922e32b4f4c08d0343ac944cc6 100644
--- a/Mesh/2D_Mesh.cpp
+++ b/Mesh/2D_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: 2D_Mesh.cpp,v 1.84 2006-07-25 12:08:23 remacle Exp $
+// $Id: 2D_Mesh.cpp,v 1.85 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -844,7 +844,7 @@ void Maillage_Surface(void *data, void *dum)
   if(!s->Support)
     return;
 
-  Msg(STATUS3, "Meshing surface %d", s->Num);
+  Msg(STATUS2, "Meshing surface %d", s->Num);
 
   int tag = MeshDiscreteSurface(s);
 
@@ -905,7 +905,7 @@ void Maillage_Surface(void *data, void *dum)
       Mesh_Triangle(s);
     
     if(CTX.mesh.nb_smoothing) {
-      Msg(STATUS3, "Smoothing surface %d", s->Num);
+      Msg(STATUS2, "Smoothing surface %d", s->Num);
       tnxe = Tree_Create(sizeof(NXE), compareNXE);
       create_NXE(s->Vertices, s->Simplexes, tnxe);
       for(int i = 0; i < CTX.mesh.nb_smoothing; i++)
@@ -914,7 +914,7 @@ void Maillage_Surface(void *data, void *dum)
     }
     
     if(s->Recombine){
-      Msg(STATUS3, "Recombining surface %d", s->Num);
+      Msg(STATUS2, "Recombining surface %d", s->Num);
       Recombine(s->Vertices, s->Simplexes, s->Quadrangles, s->RecombineAngle);
     }
 
diff --git a/Mesh/2D_Mesh_Aniso.cpp b/Mesh/2D_Mesh_Aniso.cpp
index b75ebe4b16d7dfe6a9ce0bd3b2e147f14b40e38a..3d83c46578ab79718d084d3fc3062e788b8004a6 100644
--- a/Mesh/2D_Mesh_Aniso.cpp
+++ b/Mesh/2D_Mesh_Aniso.cpp
@@ -1,4 +1,4 @@
-// $Id: 2D_Mesh_Aniso.cpp,v 1.53 2006-08-04 14:28:02 geuzaine Exp $
+// $Id: 2D_Mesh_Aniso.cpp,v 1.54 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -691,7 +691,7 @@ void Convex_Hull_Mesh_2D(List_T * Points, Surface * s)
        if(i%n == n-1){
        volume = 0.0;
        Tree_Action(s->Simplexes,VSIM_2D);
-       Msg(STATUS3, %d->%d Nodes, %d Elements",i+1,N,Tree_Nbr(s->Simplexes));
+       Msg(STATUS2, %d->%d Nodes, %d Elements",i+1,N,Tree_Nbr(s->Simplexes));
        } 
      */
     if(!THES) {
@@ -1048,7 +1048,7 @@ int AlgorithmeMaillage2DAnisotropeModeJF(Surface * s)
   N = List_Nbr(Points);
   n = N + 100;
 
-  Msg(STATUS2, "Mesh 2D... (initial)");
+  Msg(STATUS1, "Mesh 2D... (initial)");
 
   Convex_Hull_Mesh_2D(Points, s);
   List_Reset(Points);
@@ -1111,7 +1111,7 @@ int AlgorithmeMaillage2DAnisotropeModeJF(Surface * s)
     return 1;
   }
 
-  Msg(STATUS2, "Mesh 2D... (final)");
+  Msg(STATUS1, "Mesh 2D... (final)");
 
   if(!Tree_Right(s->Simplexes, &simp))
     Msg(WARNING, "No simplex left");
@@ -1146,10 +1146,9 @@ int AlgorithmeMaillage2DAnisotropeModeJF(Surface * s)
       if(i % n == n - 1) {
         volume = 0.0;
         Tree_Action(s->Simplexes, VSIM_2D);
-        Msg(STATUS3, "Nod=%d Elm=%d",
-            Tree_Nbr(s->Vertices), Tree_Nbr(s->Simplexes));
-        Msg(STATUS1, "Surf(%g) Conv(%g->%g)", volume, simp->Quality,
-            CONV_VALUE);
+        Msg(STATUS2, "Nod=%d Elm=%d Sur=%g Conv=%g->%g",
+            Tree_Nbr(s->Vertices), Tree_Nbr(s->Simplexes),
+	    volume, simp->Quality, CONV_VALUE);
       }
       Bowyer_Watson_2D(s, newv, simp, 0);
       Tree_Right(s->Simplexes, &simp);
diff --git a/Mesh/2D_Recombine.cpp b/Mesh/2D_Recombine.cpp
index 97a5c88331ff8d4fa0eb9c860cc92e1bc1e3ca5d..8b0c212f7964441ffe98dc7317c927c3b5c57e10 100644
--- a/Mesh/2D_Recombine.cpp
+++ b/Mesh/2D_Recombine.cpp
@@ -1,4 +1,4 @@
-// $Id: 2D_Recombine.cpp,v 1.28 2006-07-12 07:24:14 geuzaine Exp $
+// $Id: 2D_Recombine.cpp,v 1.29 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -207,7 +207,7 @@ int Recombine_All (Mesh *M)
   // add 2nd order nodes to all elements 
   Degre2(2);
 
-  Msg(STATUS3, "Splitting all elements");
+  Msg(STATUS2, "Splitting all elements");
 
   // then split everybody
   for(int i = 0; i < List_Nbr(surfaces); i++){
diff --git a/Mesh/3D_BGMesh.cpp b/Mesh/3D_BGMesh.cpp
index 5dbab4739ea90b5d2191dbb40d72cf39f904fc7d..2858cd000548c6a78c0562f4b0db76f3039870f2 100644
--- a/Mesh/3D_BGMesh.cpp
+++ b/Mesh/3D_BGMesh.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_BGMesh.cpp,v 1.46 2006-07-12 07:24:14 geuzaine Exp $
+// $Id: 3D_BGMesh.cpp,v 1.47 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -78,79 +78,3 @@ double BGMXYZ(double X, double Y, double Z)
   return CTX.mesh.lc_factor * l;
 }
 
-// Export a mesh as a post-processing view (that can be modified into
-// a background characteristic length field if desired)
-
-static FILE *statfile = NULL;
-
-void ExportStatistics(void *a, void *b)
-{
-  Element *ele = *(Element**)a;
-  if(statfile) ele->ExportStatistics(statfile);
-}
-
-void ExportMeshStatistics(char *filename, 
-			  int volumes, int surfaces, int lines)
-{
-  statfile = fopen(filename, "w");
-
-  if(!statfile) {
-    Msg(GERROR, "Unable to open file '%s'", filename);
-    return;
-  }
-
-  if(volumes && Tree_Nbr(THEM->Volumes)){
-    List_T *l = Tree2List(THEM->Volumes);
-    fprintf(statfile, "View \"Volumes\" {\n");
-    fprintf(statfile, "T2(1.e5,30,%d){\"Elementary Entity\", \"Element Number\", "
-	    "\"Characteristic Length\", \"Gamma\", \"Eta\", \"Rho\"};\n", 
-	    (1<<16)|(4<<8));
-    for(int i = 0; i < List_Nbr(l); i++) {
-      Volume *vol;
-      List_Read(l, i, &vol);
-      Tree_Action(vol->Simplexes, ExportStatistics);
-      Tree_Action(vol->SimplexesBase, ExportStatistics);
-      Tree_Action(vol->Hexahedra, ExportStatistics);
-      Tree_Action(vol->Prisms, ExportStatistics);
-      Tree_Action(vol->Pyramids, ExportStatistics);
-    }
-    List_Delete(l);
-    fprintf(statfile, "};\n");
-  }
-  
-  if(surfaces && Tree_Nbr(THEM->Surfaces)){
-    List_T *l = Tree2List(THEM->Surfaces);
-    fprintf(statfile, "View \"Surfaces\" {\n");
-    fprintf(statfile, "T2(1.e5,30,%d){\"Elementary Entity\", \"Element Number\", "
-	    "\"Characteristic Length\", \"Gamma\", \"Eta\", \"Rho\"};\n", 
-	    (1<<16)|(4<<8));
-    for(int i = 0; i < List_Nbr(l); i++) {
-      Surface *surf;
-      List_Read(l, i, &surf);
-      Tree_Action(surf->Simplexes, ExportStatistics);
-      Tree_Action(surf->SimplexesBase, ExportStatistics);
-      Tree_Action(surf->Quadrangles, ExportStatistics);
-    }
-    List_Delete(l);
-    fprintf(statfile, "};\n");
-  }
-
-  if(lines && Tree_Nbr(THEM->Curves)){
-    List_T *l = Tree2List(THEM->Curves);
-    fprintf(statfile, "View \"Lines\" {\n");
-    fprintf(statfile, "T2(1.e5,30,%d){\"Elementary Entity\", \"Element Number\", "
-	    "\"Characteristic Length\", \"Gamma\", \"Eta\", \"Rho\"};\n", 
-	    (1<<16)|(4<<8));
-    for(int i = 0; i < List_Nbr(l); i++) {
-      Curve *lin;
-      List_Read(l, i, &lin);
-      Tree_Action(lin->Simplexes, ExportStatistics);
-      Tree_Action(lin->SimplexesBase, ExportStatistics);
-    }
-    List_Delete(l);
-    fprintf(statfile, "};\n");
-  }
-
-  fclose(statfile);
-  statfile = NULL;
-}
diff --git a/Mesh/3D_Coherence.cpp b/Mesh/3D_Coherence.cpp
index 83da4aaa4bce483aed0466e68e5653d368eab2d1..bebc978a123b884dcbff5082a896beb0394f0b2c 100644
--- a/Mesh/3D_Coherence.cpp
+++ b/Mesh/3D_Coherence.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_Coherence.cpp,v 1.36 2006-01-06 00:34:25 geuzaine Exp $
+// $Id: 3D_Coherence.cpp,v 1.37 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -1177,7 +1177,7 @@ int Coherence(Volume * v, Mesh * m)
   MissingFaces = Missing_Faces(v);
 
   /* Edges Recovery */
-  Msg(STATUS3, "Boundary edges recovery");
+  Msg(STATUS2, "Boundary edges recovery");
 
   volume = 0;
   Tree_Action(v->Simplexes, VSIM);
@@ -1227,7 +1227,7 @@ int Coherence(Volume * v, Mesh * m)
 
   }
 
-  Msg(STATUS3, "Boundary faces recovery");
+  Msg(STATUS2, "Boundary faces recovery");
   volume = 0;
   Tree_Action(v->Simplexes, VSIM);
   Msg(INFO, "Volume = %g", volume);
@@ -1365,7 +1365,7 @@ int Coherence(Volume * v, Mesh * m)
   }
 
   Link_Simplexes(NULL, v->Simplexes);
-  Msg(STATUS3, "Volume recovery");
+  Msg(STATUS2, "Volume recovery");
   Restore_Volume(v);
 
   return 1;
diff --git a/Mesh/3D_Extrude.cpp b/Mesh/3D_Extrude.cpp
index c8502a2a182ee0b9c99f55c84a980ffd668cf2e1..9d6040a5b2c330cbed5fd5f39f9c718eb3212fad 100644
--- a/Mesh/3D_Extrude.cpp
+++ b/Mesh/3D_Extrude.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_Extrude.cpp,v 1.92 2006-05-14 00:48:20 geuzaine Exp $
+// $Id: 3D_Extrude.cpp,v 1.93 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -1083,7 +1083,7 @@ int Extrude_Mesh(Tree_T * Volumes)
   if(!extrude)
     return false;
 
-  Msg(STATUS2, "Mesh 3D... (initial)");
+  Msg(STATUS1, "Mesh 3D... (initial)");
 
   for(int ivol = 0; ivol < List_Nbr(vol); ivol++) {
     List_Read(vol, ivol, &THEV);
@@ -1092,7 +1092,7 @@ int Extrude_Mesh(Tree_T * Volumes)
     if(ep && ep->mesh.ExtrudeMesh && ep->geo.Mode == EXTRUDED_ENTITY) {
       s = FindSurface(ep->geo.Source, THEM);
       if(s) {
-        Msg(STATUS3, "Meshing volume %d", NUM);
+        Msg(STATUS2, "Meshing volume %d", NUM);
         Extrude_Surface1(s);
       }
     }
@@ -1112,7 +1112,7 @@ int Extrude_Mesh(Tree_T * Volumes)
           Extrude_Surface2(s);
       }
     }
-    Msg(STATUS3, "Swapping %d", BAD_TETS);
+    Msg(STATUS2, "Swapping %d", BAD_TETS);
     if(BAD_TETS == j && j != 0) {
       Msg(GERROR, "Unable to swap all edges (output mesh will be incorrect): use 'Recombine'");
       break;
@@ -1120,7 +1120,7 @@ int Extrude_Mesh(Tree_T * Volumes)
     j = BAD_TETS;
   } while(BAD_TETS);
 
-  Msg(STATUS2, "Mesh 3D... (Final)");
+  Msg(STATUS1, "Mesh 3D... (final)");
 
   for(int ivol = 0; ivol < List_Nbr(vol); ivol++) {
     List_Read(vol, ivol, &THEV);
@@ -1129,7 +1129,7 @@ int Extrude_Mesh(Tree_T * Volumes)
     if(ep && ep->mesh.ExtrudeMesh && ep->geo.Mode == EXTRUDED_ENTITY) {
       s = FindSurface(ep->geo.Source, THEM);
       if(s) {
-        Msg(STATUS3, "Meshing volume %d", NUM);
+        Msg(STATUS2, "Meshing volume %d", NUM);
         Extrude_Surface3(s);
       }
     }
@@ -1154,7 +1154,7 @@ int Extrude_Mesh(Tree_T * Volumes)
     Tree_Action(s->Simplexes, Free_NegativeSimplex);
     Tree_Delete(s->Simplexes);
     s->Simplexes = tmp;
-    Msg(STATUS3, "Coherence surface %d", s->Num);
+    Msg(STATUS2, "Coherence surface %d", s->Num);
     Extrude_Mesh(s);
   }
 
diff --git a/Mesh/3D_Mesh.cpp b/Mesh/3D_Mesh.cpp
index fd113a615e61cef40fd681a67a0005a2becbedd4..47fb13de2a5ed7f538258aa861aa8db5887e78f0 100644
--- a/Mesh/3D_Mesh.cpp
+++ b/Mesh/3D_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_Mesh.cpp,v 1.73 2006-01-31 00:22:33 geuzaine Exp $
+// $Id: 3D_Mesh.cpp,v 1.74 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -651,8 +651,6 @@ void Convex_Hull_Mesh(List_T * Points, Mesh * m)
   N = List_Nbr(Points);
   n = IMAX(N / 20, 1);
 
-  //clock_t t1 = clock();
-
   Box_6_Tetraedron(Points, m);
   List_Sort(Points, comparePosition);
 
@@ -696,8 +694,8 @@ void Convex_Hull_Mesh(List_T * Points, Mesh * m)
     if(i % n == n - 1) {
       volume = 0.0;
       Tree_Action(m->Simplexes, VSIM);
-      Msg(STATUS3, "Nod=%d/%d Elm=%d", i + 1, N, Tree_Nbr(m->Simplexes));
-      Msg(STATUS1, "Vol=%g (%d %d %d)", volume, Nb1, Nb2, Nb3);
+      Msg(STATUS2, "Nod=%d/%d Elm=%d Vol=%g (%d %d %d)", i + 1, N, 
+	  Tree_Nbr(m->Simplexes), volume, Nb1, Nb2, Nb3);
     }
     if(!THES) {
       Msg(WARNING, "Vertex (%g,%g,%g) in no simplex", THEV->Pos.X,
@@ -743,10 +741,6 @@ void Convex_Hull_Mesh(List_T * Points, Mesh * m)
       }
     }
   }
-  //clock_t t2 = clock();
-
-  //Msg(STATUS3,"Nb1 = %d Nb2 = %d Nb3 = %d N = %d t = %lf",Nb1,Nb2,Nb3
-  //    ,N,(double)(t2-t1)/CLOCKS_PER_SEC);
 }
 
 void suppress_vertex(void *data, void *dum)
@@ -830,7 +824,7 @@ void Maillage_Volume(void *data, void *dum)
 
     // Create initial mesh respecting the boundary
 
-    Msg(STATUS2, "Mesh 3D... (initial)");
+    Msg(STATUS1, "Mesh 3D... (initial)");
 
     Convex_Hull_Mesh(POINTS_LIST, LOCAL);
 
@@ -873,7 +867,7 @@ void Maillage_Volume(void *data, void *dum)
 
     // If there is something left to mesh:
 
-    Msg(STATUS2, "Mesh 3D... (final)");
+    Msg(STATUS1, "Mesh 3D... (final)");
 
     v->Simplexes = LOCAL->Simplexes;
 
@@ -907,10 +901,9 @@ void Maillage_Volume(void *data, void *dum)
       if(i % n == n - 1) {
         volume = 0.0;
         Tree_Action(LOCAL->Simplexes, VSIM);
-        Msg(STATUS3, "Nod=%d Elm=%d",
-            Tree_Nbr(LOCAL->Vertices), Tree_Nbr(LOCAL->Simplexes));
-        Msg(STATUS1, "Vol(%g) Conv(%g->%g)", volume, simp->Quality,
-            CONV_VALUE);
+        Msg(STATUS2, "Nod=%d Elm=%d Vol=%g Conv=%g->%g",
+            Tree_Nbr(LOCAL->Vertices), Tree_Nbr(LOCAL->Simplexes),
+	    volume, simp->Quality, CONV_VALUE);
       }
       Bowyer_Watson(LOCAL, newv, simp, 0);
       Tree_Right(LOCAL->Simplexes, &simp);
@@ -925,24 +918,24 @@ void Maillage_Volume(void *data, void *dum)
     if(CTX.mesh.quality) {
       extern void SwapEdges3D(Mesh * M, Volume * v, double GammaPrescribed,
                               bool order);
-      Msg(STATUS3, "Swapping edges (1st pass)");
+      Msg(STATUS2, "Swapping edges (1st pass)");
       SwapEdges3D(THEM, v, CTX.mesh.quality, true);
-      Msg(STATUS3, "Swapping edges (2nd pass)");
+      Msg(STATUS2, "Swapping edges (2nd pass)");
       SwapEdges3D(THEM, v, CTX.mesh.quality, false);
-      Msg(STATUS3, "Swapping edges (last pass)");
+      Msg(STATUS2, "Swapping edges (last pass)");
       SwapEdges3D(THEM, v, CTX.mesh.quality, true);
     }
 #endif
 
 #if 0 // this is full of bugs, too :-)
     if(CTX.mesh.nb_smoothing) {
-      Msg(STATUS3, "Smoothing volume %d", v->Num);
+      Msg(STATUS2, "Smoothing volume %d", v->Num);
       tnxe = Tree_Create (sizeof (NXE), compareNXE);
       create_NXE (v->Vertices, v->Simplexes, tnxe);
       for (int i = 0; i < CTX.mesh.nb_smoothing; i++)
 	Tree_Action (tnxe, ActionLiss);
       delete_NXE (tnxe);
-      Msg(STATUS3, "Swapping edges (last pass)");
+      Msg(STATUS2, "Swapping edges (last pass)");
       SwapEdges3D (THEM, v, 0.5, true);
     }
 #endif
diff --git a/Mesh/3D_Mesh_Netgen.cpp b/Mesh/3D_Mesh_Netgen.cpp
index 7d9fbdc86f48f90869a1d6467d17a66499c8f1e5..47e734c4ff919f5f1f5f48c324ff0173615a8b96 100644
--- a/Mesh/3D_Mesh_Netgen.cpp
+++ b/Mesh/3D_Mesh_Netgen.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_Mesh_Netgen.cpp,v 1.23 2006-07-12 07:24:14 geuzaine Exp $
+// $Id: 3D_Mesh_Netgen.cpp,v 1.24 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -285,7 +285,7 @@ int Mesh_Netgen(Volume * v)
     return 0;
   }
 
-  Msg(STATUS3, "Meshing volume %d", v->Num);
+  Msg(STATUS2, "Meshing volume %d", v->Num);
   Netgen ng(v);
   ng.MeshVolume();
   ng.TransferVolumeMesh();
@@ -302,7 +302,7 @@ void Optimize_Netgen(Volume * v)
      Extrude_Mesh(v) || !Tree_Nbr(v->Simplexes))
     return;
 
-  Msg(STATUS3, "Optimizing volume %d", v->Num);
+  Msg(STATUS2, "Optimizing volume %d", v->Num);
   Netgen ng(v, 1);
   ng.OptimizeVolume();
   ng.TransferVolumeMesh();
@@ -310,7 +310,7 @@ void Optimize_Netgen(Volume * v)
 
 void Optimize_Netgen()
 {
-  Msg(STATUS2, "Optimize volume mesh...");
+  Msg(STATUS1, "Mesh optimize 3D...");
   double t1 = Cpu();
 
   // cleanup 2nd order vertices, if any
@@ -329,7 +329,7 @@ void Optimize_Netgen()
   List_Delete(list);
 
   double t2 = Cpu();
-  Msg(STATUS2, "Optimize volume mesh complete (%g s)", t2 - t1);
+  Msg(STATUS1, "Mesh optimize 3D complete (%g s)", t2 - t1);
 }
 
 #endif // !HAVE_NETGEN
diff --git a/Mesh/3D_Mesh_Tetgen.cpp b/Mesh/3D_Mesh_Tetgen.cpp
index e6ede517a1bf04e2a1d3bf429cf514371d1dcbd7..32a86c3d99ba27209476c0dc865c53930837f571 100644
--- a/Mesh/3D_Mesh_Tetgen.cpp
+++ b/Mesh/3D_Mesh_Tetgen.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_Mesh_Tetgen.cpp,v 1.7 2006-06-08 12:32:08 geuzaine Exp $
+// $Id: 3D_Mesh_Tetgen.cpp,v 1.8 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -56,7 +56,7 @@ int Mesh_Tetgen(Volume * vol) {
     return 0;
   }
 
-  Msg(STATUS3, "Meshing volume %d with experimental tetgen", vol->Num);
+  Msg(STATUS2, "Meshing volume %d with experimental tetgen", vol->Num);
   
   // Get all surface vertices (from all surfaces)
   Tree_T *treeVrtx = Tree_Create(sizeof(Vertex*), compareVertex);
@@ -131,7 +131,7 @@ int Mesh_Tetgen(Volume * vol) {
  
   sprintf(opts, "pq1.4Ya%f%c", (float)CTX.mesh.quality, 
 	  (CTX.verbosity < 3)? 'Q': (CTX.verbosity > 6)? 'V': '\0');
-  Msg(STATUS3, "Meshing with volume constraint %f", (float)CTX.mesh.quality);
+  Msg(STATUS2, "Meshing with volume constraint %f", (float)CTX.mesh.quality);
   
   tetrahedralize(opts, &in, &out);
  
diff --git a/Mesh/3D_Transfinite.cpp b/Mesh/3D_Transfinite.cpp
index 3ea0e019a691450cd27ecb4e38d5058891375675..28220cc13909ee8a43f9f73c530f9b25c703bfab 100644
--- a/Mesh/3D_Transfinite.cpp
+++ b/Mesh/3D_Transfinite.cpp
@@ -1,4 +1,4 @@
-// $Id: 3D_Transfinite.cpp,v 1.5 2006-01-06 00:34:26 geuzaine Exp $
+// $Id: 3D_Transfinite.cpp,v 1.6 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -219,7 +219,7 @@ int MeshTransfiniteVolume(Volume * vol)
   if(List_Nbr(vol->TrsfPoints) != nbp)
     return 0;
 
-  Msg(STATUS3, "Meshing volume %d", vol->Num);
+  Msg(STATUS2, "Meshing volume %d", vol->Num);
 
   for(i = 0; i < 6; i++)
     G[i] = NULL;
diff --git a/Mesh/DiscreteSurface.cpp b/Mesh/DiscreteSurface.cpp
index be03c3a65beef80047c9b95dc5565f5d31df1d2e..3b1ce9061a27ee9046ba73f1a5e0a5857e63a736 100644
--- a/Mesh/DiscreteSurface.cpp
+++ b/Mesh/DiscreteSurface.cpp
@@ -1,4 +1,4 @@
-// $Id: DiscreteSurface.cpp,v 1.40 2006-07-12 07:24:14 geuzaine Exp $
+// $Id: DiscreteSurface.cpp,v 1.41 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -309,7 +309,7 @@ void BDS_To_Mesh_2(Mesh *M)
     }
   }
 
-  Msg(STATUS3N, "Ready");
+  Msg(STATUS2N, "");
 }
 
 void BDS_To_Mesh(Mesh *M)
@@ -429,13 +429,13 @@ int MeshDiscreteSurface(Surface * s)
                       THEM->bds->LC,
                       CTX.mesh.beta_smooth_metric, CTX.mesh.nb_elem_per_rc);
     if(!THEM->bds_mesh) {
-      Msg(STATUS2, "Remesh 2D...");      
+      Msg(STATUS1, "Remesh 2D...");      
       double t1 = Cpu();
 
       THEM->bds_mesh = new BDS_Mesh(*(THEM->bds));
       int iter = 0;
       while(iter < NITER && THEM->bds_mesh->adapt_mesh(metric, true, THEM->bds)) {
-        Msg(STATUS3, "Iter=%d/%d Tri=%d", iter, NITER, THEM->bds_mesh->triangles.size());
+        Msg(STATUS2, "Iter=%d/%d Tri=%d", iter, NITER, THEM->bds_mesh->triangles.size());
         iter++;
       }
       BDS_To_Mesh_2(THEM);
@@ -444,7 +444,7 @@ int MeshDiscreteSurface(Surface * s)
       // THEM->bds_mesh->save_gmsh_format("3.msh");
 
       double t2 = Cpu();
-      Msg(STATUS2, "Remesh 2D complete (%g s)", t2 - t1);
+      Msg(STATUS1, "Remesh 2D complete (%g s)", t2 - t1);
       //      NITER++;
       return 1;
     }
diff --git a/Mesh/Element.cpp b/Mesh/Element.cpp
index f33ec6533ee28b7c6874f0c7b4f554cb83333399..cf3dbc4fffa9a2369db1ed4b8d13e15d63956da4 100644
--- a/Mesh/Element.cpp
+++ b/Mesh/Element.cpp
@@ -1,4 +1,4 @@
-// $Id: Element.cpp,v 1.11 2006-01-29 20:32:48 geuzaine Exp $
+// $Id: Element.cpp,v 1.12 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -94,15 +94,6 @@ Quadrangle *Create_Quadrangle(Vertex *v1, Vertex *v2, Vertex *v3, Vertex *v4)
   return new Quadrangle(v1, v2, v3, v4);
 }
 
-void Quadrangle::ExportStatistics(FILE * f)
-{
-  int N = 4, NSUP = VSUP ? 5 : 0;
-  double g = 0.;
-  double e = 0.;
-  double r = RhoShapeMeasure();
-  print_elm_stats(f, Num, iEnt, g, e, r, "SQ", N, V, "SQ2", NSUP, VSUP);
-}
-
 void Free_Quadrangle(void *a, void *b)
 {
   Quadrangle *q = *(Quadrangle **) a;
@@ -173,15 +164,6 @@ Hexahedron *Create_Hexahedron(Vertex * v1, Vertex * v2, Vertex * v3,
   return new Hexahedron(v1, v2, v3, v4, v5, v6, v7, v8);
 }
 
-void Hexahedron::ExportStatistics(FILE * f)
-{
-  int N = 8, NSUP = VSUP ? 19 : 0;
-  double g = 0.;
-  double e = 0.;
-  double r = RhoShapeMeasure();
-  print_elm_stats(f, Num, iEnt, g, e, r, "SH", N, V, "SH2", NSUP, VSUP);
-}
-
 void Free_Hexahedron(void *a, void *b)
 {
   Hexahedron *h = *(Hexahedron **) a;
@@ -251,15 +233,6 @@ Prism *Create_Prism(Vertex * v1, Vertex * v2, Vertex * v3,
   return new Prism(v1, v2, v3, v4, v5, v6);
 }
 
-void Prism::ExportStatistics(FILE * f)
-{
-  int N = 6, NSUP = VSUP ? 12 : 0;
-  double g = 0.;
-  double e = 0.;
-  double r = RhoShapeMeasure();
-  print_elm_stats(f, Num, iEnt, g, e, r, "SI", N, V, "SI2", NSUP, VSUP);
-}
-
 void Free_Prism(void *a, void *b)
 {
   Prism *p = *(Prism **) a;
@@ -327,15 +300,6 @@ Pyramid *Create_Pyramid(Vertex * v1, Vertex * v2, Vertex * v3,
   return new Pyramid(v1, v2, v3, v4, v5);
 }
 
-void Pyramid::ExportStatistics(FILE * f)
-{
-  int N = 5, NSUP = VSUP ? 9 : 0;
-  double g = 0.;
-  double e = 0.;
-  double r = RhoShapeMeasure();
-  print_elm_stats(f, Num, iEnt, g, e, r, "SY", N, V, "SY2", NSUP, VSUP);
-}
-
 void Free_Pyramid(void *a, void *b)
 {
   Pyramid *p = *(Pyramid **) a;
@@ -352,38 +316,3 @@ int comparePyramid(const void *a, const void *b)
   return (q->Num - w->Num);
 }
 
-// dump an element in a parsed post-processing view
-
-void print_elm_stats(FILE *f, int Num, int Ent, double Gamma, double Eta, double Rho, 
-		     const char *S, int N, Vertex **V, 
-		     const char *SSUP, int NSUP, Vertex **VSUP)
-{
-  fprintf(f, "%s(", NSUP ? SSUP : S);
-  for(int i = 0; i < N; i++){
-    if(i) fprintf(f, ",");
-    fprintf(f, "%g,%g,%g", V[i]->Pos.X, V[i]->Pos.Y, V[i]->Pos.Z);
-  }
-  for(int i = 0; i < NSUP; i++){
-    fprintf(f, ",%g,%g,%g", VSUP[i]->Pos.X, VSUP[i]->Pos.Y, VSUP[i]->Pos.Z);
-  }
-  fprintf(f, "){");
-  for(int i = 0; i < N+NSUP; i++)
-    fprintf(f, "%d,", Ent);
-  for(int i = 0; i < N+NSUP; i++)
-    fprintf(f, "%d,", Num);
-  for(int i = 0; i < N; i++)
-    fprintf(f, "%g,", V[i]->lc);
-  for(int i = 0; i < NSUP; i++)
-    fprintf(f, "%g,", VSUP[i]->lc);
-  for(int i = 0; i < N+NSUP; i++)
-    fprintf(f, "%g,", Gamma);
-  for(int i = 0; i < N+NSUP; i++)
-    fprintf(f, "%g,", Eta);
-  for(int i = 0; i < N+NSUP; i++){
-    if(i == N+NSUP - 1)
-      fprintf(f, "%g", Rho);
-    else
-      fprintf(f, "%g,", Rho);
-  }
-  fprintf(f, "};\n");
-}
diff --git a/Mesh/Element.h b/Mesh/Element.h
index 56ab1f3706510cc0fecbcd4f49809ab47420a899..ccb60f80bf63cc990451d76ec5dced87549ffb2a 100644
--- a/Mesh/Element.h
+++ b/Mesh/Element.h
@@ -36,7 +36,6 @@ class Element {
   virtual double maxEdge() = 0;
   virtual double minEdge() = 0;
   double RhoShapeMeasure();
-  virtual void ExportStatistics(FILE *f) = 0;
 };
 
 class Quadrangle : public Element{
@@ -47,7 +46,6 @@ class Quadrangle : public Element{
   ~Quadrangle() {}
   double maxEdge();
   double minEdge();
-  void ExportStatistics(FILE *f);
 };
 
 class Hexahedron : public Element{
@@ -60,7 +58,6 @@ class Hexahedron : public Element{
   double Orientation();
   double maxEdge();
   double minEdge();
-  void ExportStatistics(FILE *f);
 };
 
 class Prism : public Element{
@@ -73,7 +70,6 @@ class Prism : public Element{
   double Orientation();
   double maxEdge();
   double minEdge();
-  void ExportStatistics(FILE *f);
 };
 
 class Pyramid : public Element{
@@ -85,7 +81,6 @@ class Pyramid : public Element{
   double Orientation();
   double maxEdge();
   double minEdge();
-  void ExportStatistics(FILE *f);
 };
 
 // C interface
@@ -108,8 +103,4 @@ int compareHexahedron(const void *a, const void *b);
 int comparePrism(const void *a, const void *b);
 int comparePyramid(const void *a, const void *b);
 
-void print_elm_stats(FILE *f, int Num, int Ent, double Gamma, double Eta, double Rho, 
-		     const char *S, int N, Vertex **V, 
-		     const char *SSUP, int NSUP, Vertex **VSUP);
-
 #endif
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index 0fadd7aee3d9dcd933acd1d89dc6005faf717484..551b1c5e0195225f61eb76f34e25acfe93a4bb5a 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -1,4 +1,4 @@
-// $Id: Generator.cpp,v 1.86 2006-07-25 12:08:24 remacle Exp $
+// $Id: Generator.cpp,v 1.87 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -506,7 +506,7 @@ void mai3d(int Asked)
 
   if((Asked > oldstatus && Asked > 0 && oldstatus < 1) ||
      (Asked < oldstatus && Asked > 0)) {
-    Msg(STATUS2, "Mesh 1D...");
+    Msg(STATUS1, "Mesh 1D...");
     t1 = Cpu();
 
     if(THEM->status > 1) {
@@ -515,7 +515,7 @@ void mai3d(int Asked)
 
     Maillage_Dimension_1();
     t2 = Cpu();
-    Msg(STATUS2, "Mesh 1D complete (%g s)", t2 - t1);
+    Msg(STATUS1, "Mesh 1D complete (%g s)", t2 - t1);
     THEM->status = 1;
   }
 
@@ -523,7 +523,7 @@ void mai3d(int Asked)
 
   if((Asked > oldstatus && Asked > 1 && oldstatus < 2) ||
      (Asked < oldstatus && Asked > 1)) {
-    Msg(STATUS2, "Mesh 2D...");
+    Msg(STATUS1, "Mesh 2D...");
     t1 = Cpu();
 
     if(THEM->status == 3) {
@@ -533,7 +533,7 @@ void mai3d(int Asked)
 
     Maillage_Dimension_2();
     t2 = Cpu();
-    Msg(STATUS2, "Mesh 2D complete (%g s)", t2 - t1);
+    Msg(STATUS1, "Mesh 2D complete (%g s)", t2 - t1);
     THEM->status = 2;
   }
 
@@ -541,11 +541,11 @@ void mai3d(int Asked)
 
   if((Asked > oldstatus && Asked > 2 && oldstatus < 3) ||
      (Asked < oldstatus && Asked > 2)) {
-    Msg(STATUS2, "Mesh 3D...");
+    Msg(STATUS1, "Mesh 3D...");
     t1 = Cpu();
     Maillage_Dimension_3();
     t2 = Cpu();
-    Msg(STATUS2, "Mesh 3D complete (%g s)", t2 - t1);
+    Msg(STATUS1, "Mesh 3D complete (%g s)", t2 - t1);
     THEM->status = 3;
   }
 
diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h
index f5aaa74f194704565a7c43f14298686b2cd1ea6f..f76a30c05689dae5d97b7911c07d0995c4ab57dd 100644
--- a/Mesh/Mesh.h
+++ b/Mesh/Mesh.h
@@ -419,7 +419,6 @@ int Recombine(Tree_T *TreeAllVert, Tree_T *TreeAllSimp, Tree_T *TreeAllQuad,
 		double a);
 int Recombine_All(Mesh *M);
 void ApplyLcFactor();
-void ExportMeshStatistics(char *filename, int vol=1, int surf=1, int lin=1);
 
 void Degre1();
 void Degre2(int dim);
diff --git a/Mesh/Print_Mesh.cpp b/Mesh/Print_Mesh.cpp
index e566953fca508c4bf34baa4dbfb708b433682a1b..00872cffe2dd90ec9bc8a357b2096d527a28ead3 100644
--- a/Mesh/Print_Mesh.cpp
+++ b/Mesh/Print_Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Print_Mesh.cpp,v 1.76 2006-07-12 07:24:14 geuzaine Exp $
+// $Id: Print_Mesh.cpp,v 1.77 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -1922,8 +1922,6 @@ void Print_Mesh(char *filename, int Type)
   else
     strcpy(name, filename);
 
-  Msg(INFO, "Writing mesh file '%s'", name);
-
   FILE *fp = fopen(name, "w");
   if(!fp) {
     Msg(GERROR, "Unable to open file '%s'", name);
@@ -1944,8 +1942,6 @@ void Print_Mesh(char *filename, int Type)
   }
 
   fclose(fp);
-  Msg(INFO, "Wrote mesh file '%s'", name);
-  Msg(STATUS2N, "Wrote '%s'", name);
 
   CTX.threads_lock = 0;
 }
diff --git a/Mesh/SecondOrder.cpp b/Mesh/SecondOrder.cpp
index c451adb431b05c9c6a79893a2259c92c6622f3cb..33333e7d1c977f813297b49a4919f9c8684b4f4d 100644
--- a/Mesh/SecondOrder.cpp
+++ b/Mesh/SecondOrder.cpp
@@ -1,4 +1,4 @@
-// $Id: SecondOrder.cpp,v 1.38 2006-07-12 07:24:14 geuzaine Exp $
+// $Id: SecondOrder.cpp,v 1.39 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -479,7 +479,7 @@ void Degre2_Curve(void *a, void *b)
   Curve *c = *(Curve**)a;
   if(c->Num < 0) return;
 
-  Msg(STATUS3, "Second order curve %d", c->Num);
+  Msg(STATUS2, "Second order curve %d", c->Num);
 
   edges->AddSimplexTree(c->Simplexes);
   THEC = c;
@@ -491,7 +491,7 @@ void Degre2_Surface(void *a, void *b)
 {
   Surface *s = *(Surface**)a;
 
-  Msg(STATUS3, "Second order surface %d", s->Num);
+  Msg(STATUS2, "Second order surface %d", s->Num);
 
   edges->AddSimplexTree(s->Simplexes);
   edges->AddQuadrangleTree(s->Quadrangles);
@@ -507,7 +507,7 @@ void Degre2_Volume(void *a, void *b)
 {
   Volume *v = *(Volume**)a;
 
-  Msg(STATUS3, "Second order volume %d", v->Num);
+  Msg(STATUS2, "Second order volume %d", v->Num);
 
   edges->AddSimplexTree(v->Simplexes);
   edges->AddHexahedronTree(v->Hexahedra);
@@ -527,7 +527,7 @@ void Degre2_Volume(void *a, void *b)
 
 void Degre2(int dim)
 {
-  Msg(STATUS2, "Mesh second order...");
+  Msg(STATUS1, "Mesh second order...");
   double t1 = Cpu();
 
   Degre1();
@@ -540,5 +540,5 @@ void Degre2(int dim)
     Tree_Action(THEM->Volumes, Degre2_Volume);
 
   double t2 = Cpu();
-  Msg(STATUS2, "Mesh second order complete (%g s)", t2 - t1);
+  Msg(STATUS1, "Mesh second order complete (%g s)", t2 - t1);
 }
diff --git a/Mesh/Simplex.cpp b/Mesh/Simplex.cpp
index b0b8588e1a78874b7eca70ca0f4017b1c3ba678d..2e2b4258b554a2635d0082639b4dd2c3df2b8ce3 100644
--- a/Mesh/Simplex.cpp
+++ b/Mesh/Simplex.cpp
@@ -1,4 +1,4 @@
-// $Id: Simplex.cpp,v 1.47 2006-01-29 22:53:41 geuzaine Exp $
+// $Id: Simplex.cpp,v 1.48 2006-08-05 10:05:45 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -213,18 +213,6 @@ double SimplexBase::GammaShapeMeasure()
   return 12. * rhoin() / (sqrt(6.) * maxlij);
 }
 
-void SimplexBase::ExportStatistics(FILE * f)
-{
-  int N = !V[2] ? 2 : (!V[3] ? 3 : 4);
-  int NSUP = !VSUP ? 0 : (!V[2] ? 1 : (!V[3] ? 3 : 6));
-  double g = GammaShapeMeasure();
-  double e = EtaShapeMeasure();
-  double r = RhoShapeMeasure();
-  print_elm_stats(f, Num, iEnt, g, e, r, 
-		  !V[2] ? "SL" : (!V[3] ? "ST" : "SS"), N, V, 
-		  !V[2] ? "SL2" : (!V[3] ? "ST2" : "SS2"), NSUP, VSUP);
-}
-
 SimplexBase *Create_SimplexBase(Vertex * v1, Vertex * v2, Vertex * v3, Vertex * v4)
 {
   return new SimplexBase(v1, v2, v3, v4);
diff --git a/Mesh/Simplex.h b/Mesh/Simplex.h
index 041f8ec7a0566ab7ac498bd454c8ec2a14a6c2ae..4f3043dda1374d6ef3b30a82cca84b6e2ce83cc5 100644
--- a/Mesh/Simplex.h
+++ b/Mesh/Simplex.h
@@ -43,7 +43,6 @@ class SimplexBase : public Element {
   double rhoin();
   double maxEdge();
   double minEdge();
-  void ExportStatistics(FILE *f);
 };
 
 SimplexBase *Create_SimplexBase(Vertex *v1, Vertex *v2, Vertex *v3, Vertex *v4);
diff --git a/Mesh/meshGEdge.cpp b/Mesh/meshGEdge.cpp
index 5d2a6f6ee41a242558c0d7f7cac47a453d81e3db..4ecd35737e029eb559257e78e0cc6cb1fa1663b7 100644
--- a/Mesh/meshGEdge.cpp
+++ b/Mesh/meshGEdge.cpp
@@ -111,7 +111,7 @@ void meshGEdge :: operator() (GEdge *ge)
   dem(ge);
 
   // Send a messsage to the GMSH environment
-  Msg(STATUS3, "Meshing curve %d", ge->tag());
+  Msg(STATUS2, "Meshing curve %d", ge->tag());
 
   // Create a list of integration points
   List_T *Points = List_Create(10, 10, sizeof(IntPoint));