diff --git a/Fltk/menuWindow.cpp b/Fltk/menuWindow.cpp
index b066e75d1eb6d0ff0c34ae1833da292ca8370ab9..9aeafbe1abd6fe8c0a4e6a36a43e9ac16b0a84ed 100644
--- a/Fltk/menuWindow.cpp
+++ b/Fltk/menuWindow.cpp
@@ -1595,12 +1595,6 @@ static void geometry_physical_add_cb(Fl_Widget *w, void *data)
 
 void mesh_save_cb(Fl_Widget *w, void *data)
 {
-  bool force_overwrite = false;
-  if(data){
-    std::string str((const char*)data);
-    if(str == "force overwrite") force_overwrite = true;
-  }
-
   std::string name = CTX::instance()->outputFileName;
   if(name.empty()){
     if(CTX::instance()->mesh.fileFormat == FORMAT_AUTO)
@@ -1608,7 +1602,7 @@ void mesh_save_cb(Fl_Widget *w, void *data)
     else
       name = GetDefaultFileName(CTX::instance()->mesh.fileFormat);
   }
-  if(!force_overwrite && CTX::instance()->confirmOverwrite) {
+  if(CTX::instance()->confirmOverwrite) {
     if(!StatFile(name))
       if(!fl_choice("File '%s' already exists.\n\nDo you want to replace it?",
                     "Cancel", "Replace", 0, name.c_str()))
diff --git a/Fltk/menuWindow.h b/Fltk/menuWindow.h
index 18c1ed86d9a357229286bcb678130a276fdc1cb8..94d982c7f4dfde0f51e81aa3b2c09247105af3de 100644
--- a/Fltk/menuWindow.h
+++ b/Fltk/menuWindow.h
@@ -91,7 +91,6 @@ void geometry_reload_cb(Fl_Widget *w, void *data);
 void mesh_1d_cb(Fl_Widget *w, void *data);
 void mesh_2d_cb(Fl_Widget *w, void *data);
 void mesh_3d_cb(Fl_Widget *w, void *data);
-void mesh_save_cb(Fl_Widget *w, void *data);
 void help_about_cb(Fl_Widget *w, void *data);
 
 #endif
diff --git a/Fltk/onelabWindow.cpp b/Fltk/onelabWindow.cpp
index c8212de00987e52dc6f9e1a3e1507a4ce464ad6c..ff54177f1f36a033c896d4bfd076f68fe11178c1 100644
--- a/Fltk/onelabWindow.cpp
+++ b/Fltk/onelabWindow.cpp
@@ -15,6 +15,7 @@
 #include "OS.h"
 #include "StringUtils.h"
 #include "OpenFile.h"
+#include "CreateFile.h"
 #include "drawContext.h"
 #include "PView.h"
 #include "FlGui.h"
@@ -227,6 +228,27 @@ bool onelab::localNetworkClient::kill()
   return false;
 }
 
+static void save_mesh(onelab::client *c)
+{
+  std::vector<onelab::string> ps;
+  c->get(ps, "Gmsh/MshFileName");
+  if(ps.size()){
+    CreateOutputFile(ps[0].getValue(), CTX::instance()->mesh.fileFormat);
+  }
+  else{
+    std::string name = CTX::instance()->outputFileName;
+    if(name.empty()){
+      if(CTX::instance()->mesh.fileFormat == FORMAT_AUTO)
+        name = GetDefaultFileName(FORMAT_MSH);
+      else
+        name = GetDefaultFileName(CTX::instance()->mesh.fileFormat);
+    }
+    onelab::string o("Gmsh/MshFileName", name, "Mesh name");
+    c->set(o);
+    CreateOutputFile(o.getValue(), CTX::instance()->mesh.fileFormat);
+  }
+}
+
 void onelab_cb(Fl_Widget *w, void *data)
 {
   if(!data) return;
@@ -255,10 +277,14 @@ void onelab_cb(Fl_Widget *w, void *data)
   // the Gmsh client is special: it always gets executed first. (The
   // meta-model will allow more flexibility: but in the simple GUI we
   // can assume this)
-  if(onelab::server::instance()->findClient("Gmsh") != 
-     onelab::server::instance()->lastClient()){
-    // reload geometry and/or mesh if Gmsh parameters have been modified
-    if(onelab::server::instance()->getChanged("Gmsh")){
+  onelab::server::citer it = onelab::server::instance()->findClient("Gmsh");
+  if(it != onelab::server::instance()->lastClient()){
+    static std::string gmshModelName = GModel::current()->getName();
+    // reload geometry and/or mesh it if Gmsh parameters have been
+    // modified or if the geometrical model has changed
+    if(onelab::server::instance()->getChanged("Gmsh") ||
+       gmshModelName != GModel::current()->getName()){
+      gmshModelName = GModel::current()->getName();
       if(action == "check"){
         geometry_reload_cb(0, 0);
       }
@@ -266,7 +292,7 @@ void onelab_cb(Fl_Widget *w, void *data)
         geometry_reload_cb(0, 0);
         if(FlGui::instance()->onelab->meshAuto()){
           mesh_3d_cb(0, 0);
-          mesh_save_cb(0, (void*)"force overwrite");
+          save_mesh(it->second);
         }
         onelab::server::instance()->setChanged(false, "Gmsh");
       }