diff --git a/Common/Context.h b/Common/Context.h
index 2f85aa0bf28d14c3b2c4e1c6d6f8e9256fc1d8fc..6014f4c8ed84dbbf72313c6d2aa8047f8e949d52 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -259,7 +259,8 @@ class CTX {
     std::string socketName, pythonInterpreter, octaveInterpreter;
     std::string name[NUM_SOLVERS], extension[NUM_SOLVERS];
     std::string executable[NUM_SOLVERS], remoteLogin[NUM_SOLVERS];
-    int autoSaveDatabase, autoArchiveOutputFiles, autoMesh, autoMergeFile;
+    int autoSaveDatabase, autoLoadDatabase;
+    int autoArchiveOutputFiles, autoMesh, autoMergeFile;
     int autoShowViews, autoShowLastStep, autoCheck, showInvisibleParameters;
   }solver;
   // print options
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index e998901bc093fbeefd59ba0c920324e2972fefe7..7fd61995c77f1e2770b509ca4567570a0428456a 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -1294,8 +1294,10 @@ StringXNumber SolverOptions_Number[] = {
     "Automatically archive output files after each computation" },
   { F|O, "AutoCheck" , opt_solver_auto_check , 1. ,
     "Automatically check model every time a parameter is changed" },
-  { F|O, "AutoSaveDatabase" , opt_solver_auto_save_database , 0. ,
-    "Automatically save database after each computation" },
+  { F|O, "AutoLoadDatabase" , opt_solver_auto_load_database , 0. ,
+    "Automatically load the ONELAB database when launching a solver" },
+  { F|O, "AutoSaveDatabase" , opt_solver_auto_save_database , 1. ,
+    "Automatically save the ONELAB database after each computation" },
   { F|O, "AutoMesh" , opt_solver_auto_mesh , 1. ,
     "Automatically mesh if necesssary (0: never remesh; 1: on startup, use existing "
     "mesh on disk if available; 2: always remesh)" },
diff --git a/Common/Options.cpp b/Common/Options.cpp
index ca0760cb2e82a884d8f845d033c9a1a3e173aa92..a16ea965800e4063c2b44f38a46a347bd2e681b1 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -6585,6 +6585,13 @@ double opt_solver_plugins(OPT_ARGS_NUM)
   return CTX::instance()->solver.plugins;
 }
 
+double opt_solver_auto_load_database(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX::instance()->solver.autoLoadDatabase = (int)val;
+  return CTX::instance()->solver.autoLoadDatabase;
+}
+
 double opt_solver_auto_save_database(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
diff --git a/Common/Options.h b/Common/Options.h
index 71afb1ac843ce364613c4d7dc00de26ea8a54e9b..0fd4df55eec3a20908e33b8700d5e5964b61b5cf 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -546,6 +546,7 @@ double opt_mesh_ignore_part_bound(OPT_ARGS_NUM);
 double opt_solver_listen(OPT_ARGS_NUM);
 double opt_solver_timeout(OPT_ARGS_NUM);
 double opt_solver_plugins(OPT_ARGS_NUM);
+double opt_solver_auto_load_database(OPT_ARGS_NUM);
 double opt_solver_auto_save_database(OPT_ARGS_NUM);
 double opt_solver_auto_archive_output_files(OPT_ARGS_NUM);
 double opt_solver_auto_check(OPT_ARGS_NUM);
diff --git a/Fltk/onelabGroup.cpp b/Fltk/onelabGroup.cpp
index fe15adf551d0089baa11c293a4cff92ad19a2ffe..8001f6e54f02341f959f6c00e46d919668203ac7 100644
--- a/Fltk/onelabGroup.cpp
+++ b/Fltk/onelabGroup.cpp
@@ -201,7 +201,8 @@ void onelab_cb(Fl_Widget *w, void *data)
 
   if(action == "compute" && (CTX::instance()->solver.autoSaveDatabase ||
                              CTX::instance()->solver.autoArchiveOutputFiles)){
-    std::string db = SplitFileName(GModel::current()->getFileName())[0] + "onelab.db";
+    std::vector<std::string> split = SplitFileName(GModel::current()->getFileName());
+    std::string db = split[0] + split[1] + ".db";
     if(CTX::instance()->solver.autoArchiveOutputFiles) archiveOutputFiles(db);
     if(CTX::instance()->solver.autoSaveDatabase) saveDb(db);
   }
@@ -221,6 +222,8 @@ void onelab_option_cb(Fl_Widget *w, void *data)
   double val = ((Fl_Menu_*)w)->mvalue()->value() ? 1. : 0.;
   if(what == "save")
     CTX::instance()->solver.autoSaveDatabase = val;
+  else if(what == "load")
+    CTX::instance()->solver.autoLoadDatabase = val;
   else if(what == "archive")
     CTX::instance()->solver.autoArchiveOutputFiles = val;
   else if(what == "check"){
@@ -464,7 +467,9 @@ onelabGroup::onelabGroup(int x, int y, int w, int h, const char *l)
 
   _gearOptionsStart = _gear->menu()->size();
 
-  _gear->add("Save && load database automatically", 0, onelab_option_cb, (void*)"save",
+  _gear->add("Save database automatically", 0, onelab_option_cb, (void*)"save",
+             FL_MENU_TOGGLE);
+  _gear->add("Load database automatically", 0, onelab_option_cb, (void*)"load",
              FL_MENU_TOGGLE);
   _gear->add("Archive output files automatically", 0, onelab_option_cb, (void*)"archive",
              FL_MENU_TOGGLE);
@@ -1253,7 +1258,8 @@ std::string onelabGroup::getPath(Fl_Tree_Item *item)
 void onelabGroup::updateGearMenu()
 {
   Fl_Menu_Item* menu = (Fl_Menu_Item*)_gear->menu();
-  int values[8] = {CTX::instance()->solver.autoSaveDatabase,
+  int values[9] = {CTX::instance()->solver.autoSaveDatabase,
+                   CTX::instance()->solver.autoLoadDatabase,
                    CTX::instance()->solver.autoArchiveOutputFiles,
                    CTX::instance()->solver.autoCheck,
                    CTX::instance()->solver.autoMesh,
@@ -1261,7 +1267,7 @@ void onelabGroup::updateGearMenu()
                    CTX::instance()->solver.autoShowViews,
                    CTX::instance()->solver.autoShowLastStep,
                    CTX::instance()->solver.showInvisibleParameters};
-  for(int i = 0; i < 8; i++){
+  for(int i = 0; i < 9; i++){
     int idx = _gearOptionsStart - 1 + i;
     if(values[i])
       menu[idx].set();
@@ -1365,8 +1371,9 @@ void solver_cb(Fl_Widget *w, void *data)
     FlGui::instance()->onelab->rebuildSolverList();
   }
 
-  if(CTX::instance()->solver.autoSaveDatabase){
-    std::string db = SplitFileName(GModel::current()->getFileName())[0] + "onelab.db";
+  if(CTX::instance()->solver.autoLoadDatabase){
+    std::vector<std::string> split = SplitFileName(GModel::current()->getFileName());
+    std::string db = split[0] + split[1] + ".db";
     if(!StatFile(db)){
       loadDb(db);
       CTX::instance()->launchSolverAtStartup = -1;