diff --git a/Common/GmshMessage.cpp b/Common/GmshMessage.cpp
index a68e3649bd62c27d369345ef63d13db094a8f350..af479871f9a0a2166c344fb398726704fb8e055f 100644
--- a/Common/GmshMessage.cpp
+++ b/Common/GmshMessage.cpp
@@ -743,13 +743,17 @@ void Msg::LoadOnelabClient(const std::string &clientName, const std::string &soc
 #endif
 }
 
-// void Msg::SetExecutableName(const std::string &name){ 
-//   _execName.assign(name); 
-// }
-// std::string Msg::GetExecutableName(){ 
-//   return _execName; 
-// }
-
+static void _setStandardOptions(onelab::parameter *p,
+                                std::map<std::string, std::vector<double> > &fopt,
+                                std::map<std::string, std::vector<std::string> > &copt)
+{
+  if(copt.count("Label")) p->setLabel(copt["Label"][0]);
+  if(copt.count("ShortHelp")) p->setLabel(copt["ShortHelp"][0]);
+  if(copt.count("Help")) p->setHelp(copt["Help"][0]);
+  if(fopt.count("Visible")) p->setVisible(fopt["Visible"][0] ? true : false);
+  if(fopt.count("ReadOnly")) p->setReadOnly(fopt["ReadOnly"][0] ? true : false);
+  if(copt.count("Highlight")) p->setAttribute("Highlight", copt["Highlight"][0]);
+}
 
 void Msg::ExchangeOnelabParameter(const std::string &key,
                                   std::vector<double> &val,
@@ -776,24 +780,10 @@ void Msg::ExchangeOnelabParameter(const std::string &key,
   bool noRange = true, noChoices = true, noLoop = true;
   bool noGraph = true, noClosed = true;
   if(ps.size()){
-
-    // modified implementation of ReadOnly
-    if(fopt.count("ReadOnly")) {
-      ps[0].setReadOnly(fopt["ReadOnly"][0] ? true : false);
-      if(ps[0].getReadOnly()) 
-	// If the parameter is set "read-only" in this statement
-	// use local value
-	ps[0].setValue(val[0]);
-      else
-	// use value from server
-	val[0] = ps[0].getValue(); 
-    }
+    if(fopt.count("ReadOnly") && fopt["ReadOnly"][0])
+      ps[0].setValue(val[0]); // use local value
     else
       val[0] = ps[0].getValue(); // use value from server
-
-    // if(!ps[0].getReadOnly())
-    //   val[0] = ps[0].getValue(); // use value from server
-
     // keep track of these attributes, which can be changed server-side
     if(ps[0].getMin() != -onelab::parameter::maxNumber() ||
        ps[0].getMax() != onelab::parameter::maxNumber() ||
@@ -848,14 +838,10 @@ void Msg::ExchangeOnelabParameter(const std::string &key,
     ps[0].setChoices(fopt["Choices"]);
     if(copt.count("Choices")) ps[0].setChoiceLabels(copt["Choices"]);
   }
-  if(fopt.count("Visible")) ps[0].setVisible(fopt["Visible"][0] ? true : false);
-  if(copt.count("Help")) ps[0].setHelp(copt["Help"][0]);
-  if(copt.count("Label")) ps[0].setLabel(copt["Label"][0]);
-  if(copt.count("ShortHelp")) ps[0].setLabel(copt["ShortHelp"][0]);
   if(noLoop && copt.count("Loop")) ps[0].setAttribute("Loop", copt["Loop"][0]);
   if(noGraph && copt.count("Graph")) ps[0].setAttribute("Graph", copt["Graph"][0]);
   if(noClosed && copt.count("Closed")) ps[0].setAttribute("Closed", copt["Closed"][0]);
-  if(copt.count("Highlight")) ps[0].setAttribute("Highlight", copt["Highlight"][0]);
+  _setStandardOptions(&ps[0], fopt, copt);
   _onelabClient->set(ps[0]);
 #endif
 }