diff --git a/Common/onelab.h b/Common/onelab.h
index 2e9dfaf53ebb21163cdb89be3e89d72d82087f92..f5403813ac2f66a927138dfd643b10ae2d7d520f 100644
--- a/Common/onelab.h
+++ b/Common/onelab.h
@@ -378,12 +378,17 @@ namespace onelab{
     }
   public:
     parameterSpace(){}
-    ~parameterSpace()
+    ~parameterSpace(){ clear(); }
+    void clear()
     {
       std::set<parameter*> ps;
       _getAllParameters(ps);
       for(std::set<parameter*>::iterator it = ps.begin(); it != ps.end(); it++)
         delete *it;
+      _numbers.clear();
+      _strings.clear();
+      _regions.clear();
+      _functions.clear();
     }
     bool set(number &p, bool value=true){ return _set(p, _numbers, value); }
     bool set(string &p, bool value=true){ return _set(p, _strings, value); }
@@ -487,6 +492,7 @@ namespace onelab{
       if(!_server) _server = new server(address);
       return _server;
     }
+    void clear(){ _parameterSpace.clear(); }
     template <class T> bool set(T &p, bool value=true)
     {
       return _parameterSpace.set(p, value); 
diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp
index 209667350d268e1dc9af74f9ccfaba2d1e72dd9d..d292e4472f85d15914d9a1d39d83b902b1e2c51f 100644
--- a/Fltk/graphicWindow.cpp
+++ b/Fltk/graphicWindow.cpp
@@ -55,7 +55,7 @@ static void gmsh_forward(Fl_Color c)
 
 static void gmsh_back(Fl_Color c)
 {
-  fl_rotate(180);  
+  fl_rotate(180);
   gmsh_forward(c);
 }
 
@@ -93,6 +93,23 @@ static void gmsh_clscale(Fl_Color c)
   bl; vv(-0.2,0.2); vv(0.9,0.2); vv(-0.2,-0.9); el;
 }
 
+static void gmsh_gear(Fl_Color c)
+{
+  fl_color(c);
+  fl_line_style(FL_SOLID, 2);
+  fl_begin_line(); fl_arc(0.0, 0.0, 0.5, 0.0, 360.0); fl_end_line();
+  for(int i = 0; i < 8; i++){
+    fl_rotate(i * 360./8.);
+    fl_begin_complex_polygon();
+    fl_vertex(0.5, -0.13);
+    fl_vertex(1.0, -0.13);
+    fl_vertex(1.0, 0.13);
+    fl_vertex(0.5, 0.13);
+    fl_end_complex_polygon();
+  }
+  fl_line_style(FL_SOLID);
+}
+
 #undef vv
 #undef bl
 #undef el
@@ -469,6 +486,7 @@ graphicWindow::graphicWindow(bool main, int numTiles)
     fl_add_symbol("gmsh_rotate", gmsh_rotate, 1);
     fl_add_symbol("gmsh_models", gmsh_models, 1);
     fl_add_symbol("gmsh_clscale", gmsh_clscale, 1);
+    fl_add_symbol("gmsh_gear", gmsh_gear, 1);
     first = false;
   }
   
diff --git a/Fltk/onelabWindow.cpp b/Fltk/onelabWindow.cpp
index ac80ac1e7b8328e4741726be989c9fe02c45f199..c8212de00987e52dc6f9e1a3e1507a4ce464ad6c 100644
--- a/Fltk/onelabWindow.cpp
+++ b/Fltk/onelabWindow.cpp
@@ -74,12 +74,16 @@ bool onelab::localNetworkClient::run(const std::string &what)
   _pid = 0;
   onelabGmshServer *server = new onelabGmshServer(this);
  
-  std::string sockname = "localhost:1631";
-  std::string command = _commandLine + " " + what +  " -onelab " + sockname + " &";
+  std::string sockname = CTX::instance()->solver.socketName;
+  std::string command = _commandLine + " " + what +  " -onelab " + sockname;
+#if !defined(WIN32)
+  command += " &";
+#endif
 
   int sock;
   try{
-    sock = server->Start(command.c_str(), sockname.c_str(), 30);
+    sock = server->Start(command.c_str(), sockname.c_str(),
+                         CTX::instance()->solver.timeout);
   }
   catch(const char *err){
     Msg::Error("%s (on socket '%s')", err, sockname.c_str());
@@ -228,6 +232,14 @@ void onelab_cb(Fl_Widget *w, void *data)
   if(!data) return;
   std::string action((const char*)data);
 
+  if(action == "reset"){
+    onelab::server::instance()->clear();
+    if(onelab::server::instance()->findClient("Gmsh") != 
+       onelab::server::instance()->lastClient())
+      geometry_reload_cb(0, 0);
+    action = "initial check";
+  }
+
   if(action == "choose model"){
     if(fileChooser(FILE_CHOOSER_SINGLE, "Choose", "*.pro"))
       FlGui::instance()->onelab->setModelName(fileChooserGetName(1));
@@ -252,8 +264,10 @@ void onelab_cb(Fl_Widget *w, void *data)
       }
       else if(action == "compute"){
         geometry_reload_cb(0, 0);
-        mesh_3d_cb(0, 0);
-        mesh_save_cb(0, (void*)"force overwrite");
+        if(FlGui::instance()->onelab->meshAuto()){
+          mesh_3d_cb(0, 0);
+          mesh_save_cb(0, (void*)"force overwrite");
+        }
         onelab::server::instance()->setChanged(false, "Gmsh");
       }
     }
@@ -349,6 +363,16 @@ onelabWindow::onelabWindow(int deltaFontSize)
   _butt[1] = new Fl_Button(width - 2*WB - 2*BB, height - WB - BH, BB, BH, "Check");
   _butt[1]->callback(onelab_cb, (void*)"check");
 
+  static Fl_Menu_Item gear_menu[] = {
+    {"Reset database", 0, onelab_cb, (void*)"reset"},
+    {"Mesh automatically", 0, 0, 0, FL_MENU_TOGGLE},
+    {0}
+  };
+  gear_menu[1].set();
+  _gear = new Fl_Menu_Button
+    (_butt[1]->x() - WB - BB/2, _butt[1]->y(), BB/2, BH, "@-1gmsh_gear");
+  _gear->menu(gear_menu);
+  
   Fl_Box *resbox = new Fl_Box(WB, height - BH - 3 * WB, WB, WB);
   _win->resizable(resbox);
 
@@ -358,6 +382,7 @@ onelabWindow::onelabWindow(int deltaFontSize)
 
   FL_NORMAL_SIZE += deltaFontSize;
 
+  // FIXME adding GetDP client
   onelab::server::instance()->registerClient
     (new onelab::localNetworkClient("GetDP",
                                     opt_solver_executable0(0, GMSH_GET, "")));
diff --git a/Fltk/onelabWindow.h b/Fltk/onelabWindow.h
index f775a09effc630b90ec82181c6dae7176c14f17b..64dc094af6588659ecaea5a4169afc5dc4b153e9 100644
--- a/Fltk/onelabWindow.h
+++ b/Fltk/onelabWindow.h
@@ -21,6 +21,7 @@ class onelabWindow{
   Fl_Tree *_tree;
   Fl_Button *_butt[2];
   Fl_Input *_model;
+  Fl_Menu_Button *_gear;
   std::vector<Fl_Widget*> _treeWidgets;
  public:
   onelabWindow(int deltaFontSize=0);
@@ -31,6 +32,7 @@ class onelabWindow{
   void show(){ _win->show(); }
   std::string getModelName(){ return _model->value(); }
   void setModelName(const std::string &name){ _model->value(name.c_str()); }
+  int meshAuto(){ return _gear->menu()[1].value(); }
   std::string getPath(Fl_Tree_Item *item)
   {
     char path[1024];