diff --git a/Common/Context.h b/Common/Context.h
index f99cce39f93206f8984f6b5eeca66c1d931d0bdc..b24360a542fd5d21a0a3bd19f35df45a76443ec5 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -240,7 +240,7 @@ class CTX {
     std::string socketName;
     std::string name[NUM_SOLVERS], executable[NUM_SOLVERS], remoteLogin[NUM_SOLVERS];
     int autoSaveDatabase, autoArchiveOutputFiles, autoMesh, autoMergeFile;
-    int autoHideNewViews, autoShowLastStep, autoCheck;
+    int autoHideNewViews, autoShowLastStep, autoCheck, showInvisibleParameters;
   }solver;
   // print options
   struct{
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index a54ea64ec120feb9a146f6d44049479751946027..721b818f1685d16791ba140247b8d485c9a58cb9 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -1209,6 +1209,9 @@ StringXNumber SolverOptions_Number[] = {
   { F|O, "Plugins" , opt_solver_plugins , 0. ,
     "Enable default solver plugins?" },
 
+  { F|O, "ShowInvisibleParameters" , opt_solver_show_invisible_parameters , 0. ,
+    "Show all parameters, even those marked invisible" },
+
   { F|O, "Timeout" , opt_solver_timeout , 5. ,
     "Time (in seconds) before closing the socket if no connection is happening" },
 
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 378842645fb76a1402775eaf6859d0f96c3ebe8f..67773b4e9f5b36babd45d793bf0b1a528c2c9480 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -6180,6 +6180,13 @@ double opt_solver_auto_show_last_step(OPT_ARGS_NUM)
   return CTX::instance()->solver.autoShowLastStep;
 }
 
+double opt_solver_show_invisible_parameters(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX::instance()->solver.showInvisibleParameters = (int)val;
+  return CTX::instance()->solver.showInvisibleParameters;
+}
+
 double opt_post_horizontal_scales(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
diff --git a/Common/Options.h b/Common/Options.h
index 7829fa9b840406f26c51841d17cb57c9f29ce16c..c6a5c5ce2bfaa115eb1b23a8314d64fcbdcbbcba 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -509,6 +509,7 @@ double opt_solver_auto_mesh(OPT_ARGS_NUM);
 double opt_solver_auto_merge_file(OPT_ARGS_NUM);
 double opt_solver_auto_hide_new_views(OPT_ARGS_NUM);
 double opt_solver_auto_show_last_step(OPT_ARGS_NUM);
+double opt_solver_show_invisible_parameters(OPT_ARGS_NUM);
 double opt_post_horizontal_scales(OPT_ARGS_NUM);
 double opt_post_link(OPT_ARGS_NUM);
 double opt_post_smooth(OPT_ARGS_NUM);
diff --git a/Fltk/onelabGroup.cpp b/Fltk/onelabGroup.cpp
index b72dd9bfe244faf70f761b719fc72c104ec77cb9..c2f7cbd50cdc0040bbc7ba9c963b375fabb38eb9 100644
--- a/Fltk/onelabGroup.cpp
+++ b/Fltk/onelabGroup.cpp
@@ -875,6 +875,10 @@ void onelab_option_cb(Fl_Widget *w, void *data)
     CTX::instance()->solver.autoHideNewViews = val;
   else if(what == "step")
     CTX::instance()->solver.autoShowLastStep = val;
+  else if(what == "invisible"){
+    CTX::instance()->solver.showInvisibleParameters = val;
+    FlGui::instance()->onelab->rebuildTree(true);
+  }
 }
 
 static void onelab_choose_executable_cb(Fl_Widget *w, void *data)
@@ -1088,7 +1092,9 @@ onelabGroup::onelabGroup(int x, int y, int w, int h, const char *l)
              FL_MENU_TOGGLE);
   _gear->add("Hide new views", 0, onelab_option_cb, (void*)"hide",
              FL_MENU_TOGGLE);
-  _gear->add("_Always show last step", 0, onelab_option_cb, (void*)"step",
+  _gear->add("Always show last step", 0, onelab_option_cb, (void*)"step",
+             FL_MENU_TOGGLE);
+  _gear->add("_Show hidden parameters", 0, onelab_option_cb, (void*)"invisible",
              FL_MENU_TOGGLE);
 
   _gearOptionsEnd = _gear->menu()->size();
@@ -1638,7 +1644,8 @@ void onelabGroup::rebuildTree(bool deleteWidgets)
   std::vector<onelab::number> numbers;
   onelab::server::instance()->get(numbers);
   for(unsigned int i = 0; i < numbers.size(); i++){
-    if(!numbers[i].getVisible()) continue;
+    if(!numbers[i].getVisible() && !CTX::instance()->solver.showInvisibleParameters)
+      continue;
     if(numbers[i].getAttribute("Closed") == "1")
       closed.insert(numbers[i].getPath());
     _addParameter(numbers[i]);
@@ -1647,7 +1654,8 @@ void onelabGroup::rebuildTree(bool deleteWidgets)
   std::vector<onelab::string> strings;
   onelab::server::instance()->get(strings);
   for(unsigned int i = 0; i < strings.size(); i++){
-    if(!strings[i].getVisible()) continue;
+    if(!strings[i].getVisible() && !CTX::instance()->solver.showInvisibleParameters)
+      continue;
     if(strings[i].getAttribute("Closed") == "1")
       closed.insert(strings[i].getPath());
     _addParameter(strings[i]);
@@ -1656,7 +1664,8 @@ void onelabGroup::rebuildTree(bool deleteWidgets)
   std::vector<onelab::region> regions;
   onelab::server::instance()->get(regions);
   for(unsigned int i = 0; i < regions.size(); i++){
-    if(!regions[i].getVisible()) continue;
+    if(!regions[i].getVisible() && !CTX::instance()->solver.showInvisibleParameters)
+      continue;
     if(regions[i].getAttribute("Closed") == "1")
       closed.insert(regions[i].getPath());
     _addParameter(regions[i]);
@@ -1665,7 +1674,8 @@ void onelabGroup::rebuildTree(bool deleteWidgets)
   std::vector<onelab::function> functions;
   onelab::server::instance()->get(functions);
   for(unsigned int i = 0; i < functions.size(); i++){
-    if(!functions[i].getVisible()) continue;
+    if(!functions[i].getVisible() && !CTX::instance()->solver.showInvisibleParameters)
+      continue;
     if(functions[i].getAttribute("Closed") == "1")
       closed.insert(functions[i].getPath());
     _addParameter(functions[i]);
@@ -1826,14 +1836,15 @@ void onelabGroup::rebuildSolverList()
 {
   // update gear menu
   Fl_Menu_Item* menu = (Fl_Menu_Item*)_gear->menu();
-  int values[7] = {CTX::instance()->solver.autoSaveDatabase,
+  int values[8] = {CTX::instance()->solver.autoSaveDatabase,
                    CTX::instance()->solver.autoArchiveOutputFiles,
                    CTX::instance()->solver.autoCheck,
                    CTX::instance()->solver.autoMesh,
                    CTX::instance()->solver.autoMergeFile,
                    CTX::instance()->solver.autoHideNewViews,
-                   CTX::instance()->solver.autoShowLastStep};
-  for(int i = 0; i < 7; i++){
+                   CTX::instance()->solver.autoShowLastStep,
+                   CTX::instance()->solver.showInvisibleParameters};
+  for(int i = 0; i < 8; i++){
     int idx = _gearOptionsStart - 1 + i;
     if(values[i])
       menu[idx].set();