diff --git a/Fltk/onelabWindow.cpp b/Fltk/onelabWindow.cpp
index 6af057bf358ac66c620c180ce05f0a9d1ea73ce4..bffe320b82e72c5994cf21a5973bccdb39aafd13 100644
--- a/Fltk/onelabWindow.cpp
+++ b/Fltk/onelabWindow.cpp
@@ -598,7 +598,7 @@ void onelab_cb(Fl_Widget *w, void *data)
   std::string action((const char*)data);
 
   if(action == "refresh"){
-    static int recurse = false;
+    static bool recurse = false;
     if(recurse) return;
     recurse = true;
     updateOnelabGraphs();
@@ -609,7 +609,7 @@ void onelab_cb(Fl_Widget *w, void *data)
 
   if(action == "stop"){
     FlGui::instance()->onelab->stop(true);
-    FlGui::instance()->onelab->setButtonMode("kill");
+    FlGui::instance()->onelab->setButtonMode("", "kill");
     for(onelab::server::citer it = onelab::server::instance()->firstClient();
         it != onelab::server::instance()->lastClient(); it++){
       onelab::string o(it->second->getName() + "/Action", "stop");
@@ -665,11 +665,14 @@ void onelab_cb(Fl_Widget *w, void *data)
     action = "check";
   }
 
-  FlGui::instance()->onelab->setButtonMode("stop");
+  if(action == "compute")
+    FlGui::instance()->onelab->setButtonMode("refresh", "stop");
+  else
+    FlGui::instance()->onelab->setButtonMode("", "stop");
 
   if(action == "compute") initializeLoop();
 
-  do{ // enter computation loop
+  do{ // enter loop
 
     // the Gmsh client is special: it always gets executed first. (The
     // meta-model will allow more flexibility: but in the simple GUI
@@ -707,7 +710,7 @@ void onelab_cb(Fl_Widget *w, void *data)
           incrementLoop());
 
   FlGui::instance()->onelab->stop(false);
-  FlGui::instance()->onelab->setButtonMode("compute");
+  FlGui::instance()->onelab->setButtonMode("check", "compute");
   if(action != "initialize") FlGui::instance()->onelab->show();
 }
 
@@ -827,13 +830,13 @@ onelabWindow::onelabWindow(int deltaFontSize)
   _tree->connectorstyle(FL_TREE_CONNECTOR_SOLID);
   _tree->showroot(0);
 
-  _butt[0] = new Fl_Button(width - WB - BB, height - WB - BH, BB, BH, "Compute");
-  _butt[0]->callback(onelab_cb, (void*)"compute");
-  _butt[1] = new Fl_Button(width - 2*WB - 2*BB, height - WB - BH, BB, BH, "Check");
-  _butt[1]->callback(onelab_cb, (void*)"check");
+  _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");
+  _butt[1]->callback(onelab_cb, (void*)"compute");
 
   _gear = new Fl_Menu_Button
-    (_butt[1]->x() - WB - BB/2, _butt[1]->y(), BB/2, BH, "@-1gmsh_gear");
+    (_butt[0]->x() - WB - BB/2, _butt[0]->y(), BB/2, BH, "@-1gmsh_gear");
   _gear->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
   _gear->add("Reset database", 0, onelab_cb, (void*)"reset");
   _gear->add("_Print database", 0, onelab_cb, (void*)"dump");
@@ -973,25 +976,39 @@ void onelabWindow::checkForErrors(const std::string &client)
   }
 }
 
-void onelabWindow::setButtonMode(const std::string &mode)
+void onelabWindow::setButtonMode(const std::string &butt0, const std::string &butt1)
 {
-  if(mode == "compute"){
-    _butt[0]->label("Compute");
-    _butt[0]->callback(onelab_cb, (void*)"compute");
-    _butt[1]->label("Check");
-    _butt[1]->callback(onelab_cb, (void*)"check");
+  if(butt0 == "check"){
+    _butt[0]->activate();
+    _butt[0]->label("Check");
+    _butt[0]->callback(onelab_cb, (void*)"check");
+  }
+  else if(butt0 == "refresh"){
+    _butt[0]->activate();
+    _butt[0]->label("Refresh");
+    _butt[0]->callback(onelab_cb, (void*)"refresh");
+  }
+  else{
+    _butt[0]->deactivate();
+  }
+
+  if(butt1 == "compute"){
+    _butt[1]->activate();
+    _butt[1]->label("Compute");
+    _butt[1]->callback(onelab_cb, (void*)"compute");
+  }
+  else if(butt1 == "stop"){
+    _butt[1]->activate();
+    _butt[1]->label("Stop");
+    _butt[1]->callback(onelab_cb, (void*)"stop");
   }
-  else if(mode == "stop"){
-    _butt[0]->label("Stop");
-    _butt[0]->callback(onelab_cb, (void*)"stop");
-    _butt[1]->label("Refresh");
-    _butt[1]->callback(onelab_cb, (void*)"refresh");
+  else if(butt1 == "kill"){
+    _butt[1]->activate();
+    _butt[1]->label("Kill");
+    _butt[1]->callback(onelab_cb, (void*)"kill");
   }
   else{
-    _butt[0]->label("Kill");
-    _butt[0]->callback(onelab_cb, (void*)"kill");
-    _butt[1]->label("Refresh");
-    _butt[1]->callback(onelab_cb, (void*)"refresh");
+    _butt[1]->deactivate();
   }
 }
 
diff --git a/Fltk/onelabWindow.h b/Fltk/onelabWindow.h
index 55a9c09493c5f405cb76e8d4bc0567fd85d2b587..80f1233c8813460070fb578fb31834763a59b7be 100644
--- a/Fltk/onelabWindow.h
+++ b/Fltk/onelabWindow.h
@@ -35,7 +35,7 @@ class onelabWindow{
   void rebuildSolverList();
   void rebuildTree();
   void redrawTree(){ _tree->redraw(); }
-  void setButtonMode(const std::string &mode);
+  void setButtonMode(const std::string &butt0, const std::string &butt1);
   void show(){ _win->show(); }
   int shown(){ return _win->shown(); }
   int meshAuto(){ return _gear->menu()[2].value(); }