diff --git a/Fltk/onelabWindow.cpp b/Fltk/onelabWindow.cpp
index c86def1e178b8e0efebe903e20093d940df6dd02..d02494c7a00a0ee34206cf83a82e7cf72b16f6b2 100644
--- a/Fltk/onelabWindow.cpp
+++ b/Fltk/onelabWindow.cpp
@@ -918,6 +918,8 @@ onelabWindow::onelabWindow(int deltaFontSize)
   _tree->connectorstyle(FL_TREE_CONNECTOR_SOLID);
   _tree->showroot(0);
 
+  _itemWidth = (int)(0.5 * _tree->w());
+
   _butt[0] = new Fl_Button(width - 2*WB - 2*BB, height - WB - BH, BB, BH, "Check");
   _butt[0]->callback(onelab_cb, (void*)"check");
   _butt[1] = new Fl_Button(width - WB - BB, height - WB - BH, BB, BH, "Compute");
@@ -951,11 +953,91 @@ onelabWindow::onelabWindow(int deltaFontSize)
   FL_NORMAL_SIZE += _deltaFontSize;
 }
 
+void onelabWindow::_addParameter(onelab::number &p)
+{
+  Fl_Tree_Item *n = _tree->add(p.getName().c_str());
+  n->labelsize(FL_NORMAL_SIZE + 5);
+  std::string label = p.getShortName();
+  _tree->begin();
+  if(p.getChoices().size() == 2 && p.getChoices()[0] == 0 && p.getChoices()[1] == 1){
+    Fl_Check_Button *but = new Fl_Check_Button(1, 1, _itemWidth, 1);
+    _treeWidgets.push_back(but);
+    but->copy_label(label.c_str());
+    but->value(p.getValue());
+    but->callback(onelab_check_button_cb, (void*)n);
+    n->widget(but);
+    if(p.getAttribute("Highlight").size())
+      n->labelbgcolor(FL_YELLOW);
+  }
+  else{
+    inputRange *but = new inputRange
+      (1, 1, _itemWidth, 1, onelab::parameter::maxNumber());
+    _treeWidgets.push_back(but);
+    but->copy_label(label.c_str());
+    but->value(p.getValue());
+    but->minimum(p.getMin());
+    but->maximum(p.getMax());
+    but->step(p.getStep());
+    but->choices(p.getChoices());
+    but->loop(p.getAttribute("Loop"));
+    but->graph(p.getAttribute("Graph"));
+    if(p.getAttribute("Highlight").size())
+      but->color(FL_YELLOW);
+    but->align(FL_ALIGN_RIGHT);
+    but->callback(onelab_input_range_cb, (void*)n);
+    but->when(FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY);
+    n->widget(but);
+  }
+  _tree->end();
+}
+
+void onelabWindow::_addParameter(onelab::string &p)
+{
+  Fl_Tree_Item *n = _tree->add(p.getName().c_str());
+  n->labelsize(FL_NORMAL_SIZE + 5);
+  std::string label = p.getShortName();
+  _tree->begin();
+  Fl_Input_Choice *but = new Fl_Input_Choice(1, 1, _itemWidth, 1);
+  _treeWidgets.push_back(but);
+  but->copy_label(label.c_str());
+  std::vector<Fl_Menu_Item> menu;
+  for(unsigned int j = 0; j < p.getChoices().size(); j++){
+    // need to manually manage the label strings
+    char *str = strdup(p.getChoices()[j].c_str());
+    _treeStrings.push_back(str);
+    bool divider = (p.getKind() == "file" &&
+                    j == p.getChoices().size() - 1);
+    Fl_Menu_Item it = {str, 0, 0, 0, divider ? FL_MENU_DIVIDER : 0};
+    menu.push_back(it);
+  }
+  if(p.getKind() == "file"){
+    Fl_Menu_Item it = {"Choose...", 0, onelab_input_choice_file_chooser_cb, (void*)n};
+    menu.push_back(it);
+    Fl_Menu_Item it2 = {"Edit...", 0, onelab_input_choice_file_edit_cb, (void*)n};
+    menu.push_back(it2);
+    if(GuessFileFormatFromFileName(p.getValue()) >= 0){
+      Fl_Menu_Item it3 = {"Merge...", 0, onelab_input_choice_file_merge_cb, (void*)n};
+      menu.push_back(it3);
+    }
+  }
+  Fl_Menu_Item it = {0};
+  menu.push_back(it);
+  but->menubutton()->copy(&menu[0]);
+  but->value(p.getValue().c_str());
+  if(p.getAttribute("Highlight").size())
+    but->input()->color(FL_YELLOW);
+  but->align(FL_ALIGN_RIGHT);
+  but->callback(onelab_input_choice_cb, (void*)n);
+  but->when(FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY);
+  n->widget(but);
+  _tree->end();
+}
+
 void onelabWindow::rebuildTree()
 {
   FL_NORMAL_SIZE -= _deltaFontSize;
 
-  int width = (int)(0.5 * _tree->w());
+  _itemWidth = (int)(0.5 * _tree->w());
 
   std::vector<std::string> closed;
   for (Fl_Tree_Item *n = _tree->first(); n; n = n->next())
@@ -976,92 +1058,20 @@ void onelabWindow::rebuildTree()
   onelab::server::instance()->get(numbers);
   for(unsigned int i = 0; i < numbers.size(); i++){
     if(!numbers[i].getVisible()) continue;
-    Fl_Tree_Item *n = _tree->add(numbers[i].getName().c_str());
-    n->labelsize(FL_NORMAL_SIZE + 5);
-    std::string label = numbers[i].getShortName();
-    _tree->begin();
-    if(numbers[i].getChoices().size() == 2 &&
-       numbers[i].getChoices()[0] == 0 &&
-       numbers[i].getChoices()[1] == 1){
-      Fl_Check_Button *but = new Fl_Check_Button(1, 1, width, 1);
-      _treeWidgets.push_back(but);
-      but->copy_label(label.c_str());
-      but->value(numbers[i].getValue());
-      but->callback(onelab_check_button_cb, (void*)n);
-      n->widget(but);
-      if(numbers[i].getAttribute("Highlight").size())
-        n->labelbgcolor(FL_YELLOW);
-    }
-    else{
-      inputRange *but = new inputRange
-        (1, 1, width, 1, onelab::parameter::maxNumber());
-      _treeWidgets.push_back(but);
-      but->copy_label(label.c_str());
-      but->value(numbers[i].getValue());
-      but->minimum(numbers[i].getMin());
-      but->maximum(numbers[i].getMax());
-      but->step(numbers[i].getStep());
-      but->choices(numbers[i].getChoices());
-      but->loop(numbers[i].getAttribute("Loop"));
-      but->graph(numbers[i].getAttribute("Graph"));
-      if(numbers[i].getAttribute("Highlight").size())
-        but->color(FL_YELLOW);
-      but->align(FL_ALIGN_RIGHT);
-      but->callback(onelab_input_range_cb, (void*)n);
-      but->when(FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY);
-      n->widget(but);
-    }
-    _tree->end();
+    _addParameter(numbers[i]);
   }
 
   std::vector<onelab::string> strings;
   onelab::server::instance()->get(strings);
   for(unsigned int i = 0; i < strings.size(); i++){
     if(!strings[i].getVisible()) continue;
-    Fl_Tree_Item *n = _tree->add(strings[i].getName().c_str());
-    n->labelsize(FL_NORMAL_SIZE + 5);
-    std::string label = strings[i].getShortName();
-    _tree->begin();
-    Fl_Input_Choice *but = new Fl_Input_Choice(1, 1, width, 1);
-    _treeWidgets.push_back(but);
-    but->copy_label(label.c_str());
-    std::vector<Fl_Menu_Item> menu;
-    for(unsigned int j = 0; j < strings[i].getChoices().size(); j++){
-      // need to manually manage the label strings
-      char *str = strdup(strings[i].getChoices()[j].c_str());
-      _treeStrings.push_back(str);
-      bool divider = (strings[i].getKind() == "file" &&
-                      j == strings[i].getChoices().size() - 1);
-      Fl_Menu_Item it = {str, 0, 0, 0, divider ? FL_MENU_DIVIDER : 0};
-      menu.push_back(it);
-    }
-    if(strings[i].getKind() == "file"){
-      Fl_Menu_Item it = {"Choose...", 0, onelab_input_choice_file_chooser_cb, (void*)n};
-      menu.push_back(it);
-      Fl_Menu_Item it2 = {"Edit...", 0, onelab_input_choice_file_edit_cb, (void*)n};
-      menu.push_back(it2);
-      if(GuessFileFormatFromFileName(strings[i].getValue()) >= 0){
-        Fl_Menu_Item it3 = {"Merge...", 0, onelab_input_choice_file_merge_cb, (void*)n};
-        menu.push_back(it3);
-      }
-    }
-    Fl_Menu_Item it = {0};
-    menu.push_back(it);
-    but->menubutton()->copy(&menu[0]);
-    but->value(strings[i].getValue().c_str());
-    if(strings[i].getAttribute("Highlight").size())
-      but->input()->color(FL_YELLOW);
-    but->align(FL_ALIGN_RIGHT);
-    but->callback(onelab_input_choice_cb, (void*)n);
-    but->when(FL_WHEN_RELEASE | FL_WHEN_ENTER_KEY);
-    n->widget(but);
-    _tree->end();
+    _addParameter(strings[i]);
   }
 
   for(Fl_Tree_Item *n = _tree->first(); n; n = n->next()){
     if(n->has_children()){
       _tree->begin();
-      Fl_Box *but = new Fl_Box(1, 1, width, 1);
+      Fl_Box *but = new Fl_Box(1, 1, _itemWidth, 1);
       but->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
       _treeWidgets.push_back(but);
       onelab::string o(n->label());
@@ -1234,8 +1244,9 @@ void onelabWindow::removeSolver(const std::string &name)
 
 void solver_cb(Fl_Widget *w, void *data)
 {
-  int num = (intptr_t)data;
+  Msg::ResetErrorCounter();
 
+  int num = (intptr_t)data;
   if(num >= 0){
     std::string name = opt_solver_name(num, GMSH_GET, "");
     std::string exe = opt_solver_executable(num, GMSH_GET, "");
diff --git a/Fltk/onelabWindow.h b/Fltk/onelabWindow.h
index 4b4ab18659738a606addede6eb18470defaa7d86..2c6bbadb2cc8127d11ea09e332084ac2038317b7 100644
--- a/Fltk/onelabWindow.h
+++ b/Fltk/onelabWindow.h
@@ -29,6 +29,9 @@ class onelabWindow{
   std::string _title;
   int _deltaFontSize;
   bool _stop;
+  int _itemWidth;
+  void _addParameter(onelab::number &p);
+  void _addParameter(onelab::string &p);
  public:
   onelabWindow(int deltaFontSize=0);
   int x(){ return _win->x(); }