diff --git a/Common/onelab.h b/Common/onelab.h
index 6459e1ab50420a4d2e0e98998286c7791dca65e0..a2ff906fa9ab08f9ec2ae788430419e57908f188 100644
--- a/Common/onelab.h
+++ b/Common/onelab.h
@@ -215,10 +215,11 @@ namespace onelab{
       while(!feof(fp)){
         int numc = 0;
         if(!fscanf(fp, "%d ", &numc)) break; // space is important
+        if(!numc) break;
         msg.push_back("");
         for(int i = 0; i < numc; i++)
           msg.back() += fgetc(fp);
-        if(!fgets(tmp, sizeof(tmp), fp)) return false; // end of line
+        if(!fgets(tmp, sizeof(tmp), fp)) break; // end of line
       }
       fclose(fp);
       return true;
diff --git a/Fltk/onelabWindow.cpp b/Fltk/onelabWindow.cpp
index 5b2a9c24f457a9c268f7729f72f16d739b22f15e..089640bf8c2a5f6a323a4a51c32bcd882453731d 100644
--- a/Fltk/onelabWindow.cpp
+++ b/Fltk/onelabWindow.cpp
@@ -422,10 +422,17 @@ void onelab_cb(Fl_Widget *w, void *data)
     Msg::Info("Writing database `onelab.db'...");
     onelab::server::instance()->toFile("onelab.db");
     Msg::Info("Done writing database");
-    FlGui::instance()->showMessages();
     return;
   }
 
+  if(action == "load"){
+    std::string name = "onelab.db";
+    Msg::Info("Loading database '%s'...", name.c_str());
+    onelab::server::instance()->fromFile(name);
+    Msg::Info("Done loading database '%s'", name.c_str());
+    action = "check";
+  }
+
   if(action == "reset"){
     // clear everything except model names and command line setup
     std::vector<onelab::string> modelNames;
@@ -570,15 +577,16 @@ onelabWindow::onelabWindow(int deltaFontSize)
     (_butt[0]->x() - WB - BB/2, _butt[0]->y(), BB/2, BH, "@-1gmsh_gear");
   _gear->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE);
   _gear->add("Reset database", 0, onelab_cb, (void*)"reset");
-  _gear->add("_Print database", 0, onelab_cb, (void*)"dump");
+  _gear->add("Print database", 0, onelab_cb, (void*)"dump");
+  _gear->add("_Load database", 0, onelab_cb, (void*)"load");
   _gear->add("Remesh automatically", 0, 0, 0, FL_MENU_TOGGLE);
   _gear->add("Merge results automatically", 0, 0, 0, FL_MENU_TOGGLE);
   _gear->add("Hide new views", 0, 0, 0, FL_MENU_TOGGLE);
   _gear->add("_Always show last step", 0, 0, 0, FL_MENU_TOGGLE);
-  ((Fl_Menu_Item*)_gear->menu())[2].set();
   ((Fl_Menu_Item*)_gear->menu())[3].set();
-  ((Fl_Menu_Item*)_gear->menu())[4].clear();
-  ((Fl_Menu_Item*)_gear->menu())[5].set();
+  ((Fl_Menu_Item*)_gear->menu())[4].set();
+  ((Fl_Menu_Item*)_gear->menu())[5].clear();
+  ((Fl_Menu_Item*)_gear->menu())[6].set();
   _gearFrozenMenuSize = _gear->menu()->size();
 
   Fl_Box *resbox = new Fl_Box(WB, WB,
@@ -1019,19 +1027,19 @@ void onelabWindow::setButtonMode(const std::string &butt0, const std::string &bu
     _butt[1]->label("Stop");
     _butt[1]->callback(onelab_cb, (void*)"stop");
     for(int i = 0; i < _gear->menu()->size(); i++)
-      if(i < 1 || i > 5) ((Fl_Menu_Item*)_gear->menu())[i].deactivate();
+      if(i < 1 || i > 6) ((Fl_Menu_Item*)_gear->menu())[i].deactivate();
   }
   else if(butt1 == "kill"){
     _butt[1]->activate();
     _butt[1]->label("Kill");
     _butt[1]->callback(onelab_cb, (void*)"kill");
     for(int i = 0; i < _gear->menu()->size(); i++)
-      if(i < 1 || i > 5) ((Fl_Menu_Item*)_gear->menu())[i].deactivate();
+      if(i < 1 || i > 6) ((Fl_Menu_Item*)_gear->menu())[i].deactivate();
   }
   else{
     _butt[1]->deactivate();
     for(int i = 0; i < _gear->menu()->size(); i++)
-      if(i < 1 || i > 5) ((Fl_Menu_Item*)_gear->menu())[i].deactivate();
+      if(i < 1 || i > 6) ((Fl_Menu_Item*)_gear->menu())[i].deactivate();
   }
 }