diff --git a/contrib/onelab/OnelabClients.cpp b/contrib/onelab/OnelabClients.cpp
index 41aa9bb550e6ecc084360b06aa6afa0cf4c112aa..6f93146be1d3880a6012f0745f3e208ddb639483 100644
--- a/contrib/onelab/OnelabClients.cpp
+++ b/contrib/onelab/OnelabClients.cpp
@@ -473,7 +473,7 @@ bool localSolverClient::buildRmCommand(std::string &cmd){
   return false;
 }
 
-void localSolverClient::addNumberChoice(std::string name, double val)
+void localSolverClient::addNumberChoice(std::string name, double val, bool readOnly)
 {
   std::vector<double> choices;
   std::vector<onelab::number> ps;
@@ -486,7 +486,7 @@ void localSolverClient::addNumberChoice(std::string name, double val)
     ps[0].setName(name);
   }
   //ps[0].setAttribute("Highlight","Coral");
-  //ps[0].setReadOnly(false);
+  ps[0].setReadOnly(readOnly);
   ps[0].setValue(val);
   choices.push_back(val);
   ps[0].setChoices(choices);
@@ -502,7 +502,7 @@ void localSolverClient::PostArray(std::vector<std::string> choices)
     std::string fileName = getWorkingDir()+choices[4*i];
       //checkIfPresent or make available locally
     double val=find_in_array(lin,col,read_array(fileName,' '));
-    addNumberChoice(choices[4*i+3],val);
+    addNumberChoice(choices[4*i+3],val,true);
     OLMsg::Info("Upload parameter <%s>=%e from file <%s>",
 		choices[4*i+3].c_str(),val,fileName.c_str());
     i++;
@@ -657,7 +657,6 @@ void MetaModel::construct()
   parse_onefile( genericNameFromArgs + onelabExtension);
   closeOnelabBlock();
   saveCommandLines();
-  //onelab::server::instance()->setChanged(true, getName());
 }
 
 void MetaModel::analyze() {
diff --git a/contrib/onelab/OnelabClients.h b/contrib/onelab/OnelabClients.h
index 08db4637870fa0d859477a363a0378aea88a2fc3..e5428f6d5a549bf1ade308afda881cabc8d262bc 100644
--- a/contrib/onelab/OnelabClients.h
+++ b/contrib/onelab/OnelabClients.h
@@ -177,7 +177,7 @@ class localSolverClient : public onelab::localClient{
   virtual bool checkCommandLine();
   virtual void analyze() =0;
   virtual void compute() =0;
-  void addNumberChoice(std::string name, double val);
+  void addNumberChoice(std::string name, double val, bool readOnly=false);
   void PostArray(std::vector<std::string> choices);
   void GmshMerge(std::vector<std::string> choices);
 };
diff --git a/contrib/onelab/OnelabParser.cpp b/contrib/onelab/OnelabParser.cpp
index aedcfde264739f7ef88a31fd811cee9dc0de137a..ffe4291c0f83875f29d58a3ee0749b5fa96a8ed8 100644
--- a/contrib/onelab/OnelabParser.cpp
+++ b/contrib/onelab/OnelabParser.cpp
@@ -530,8 +530,10 @@ void localSolverClient::parse_sentence(std::string line) {
       if(numbers.empty()){ 
 	numbers.resize(1);
 	numbers[0].setName(name);
-	if(arguments[0].empty())
+	if(arguments[0].empty()){
 	  val=0;
+	  numbers[0].setReadOnly(true);
+	}
 	else
 	  val=atof(resolveGetVal(arguments[0]).c_str());
 	numbers[0].setValue(val);
diff --git a/contrib/onelab/loader.cpp b/contrib/onelab/loader.cpp
index be29f428f23a3602227b8df741ec2290835a6296..c8cfacc16b0de6696c0d2446fc70e55466d62167 100644
--- a/contrib/onelab/loader.cpp
+++ b/contrib/onelab/loader.cpp
@@ -1,5 +1,5 @@
 #include "StringUtils.h"
-#include "onelabUtils.h"
+//#include "onelabUtils.h"
 #include "OnelabClients.h"
 #include "metamodel.h"
 #include <algorithm>
@@ -37,11 +37,16 @@ void initializeLoop(const std::string &level)
       }
     }
   }
-
   // force this to make sure that we remesh, even if a mesh exists and
   // we did not actually change a Gmsh parameter
   if(changed)
-    onelab::server::instance()->setChanged(true, "Gmsh");
+   onelab::server::instance()->setChanged(true, "Gmsh");
+}
+void initializeLoops()
+{
+  initializeLoop("1");
+  initializeLoop("2");
+  initializeLoop("3");
 }
 
 bool incrementLoop(const std::string &level)
@@ -93,13 +98,6 @@ bool incrementLoop(const std::string &level)
   return recompute;
 }
 
-void initializeLoops()
-{
-  initializeLoop("1");
-  initializeLoop("2");
-  initializeLoop("3");
-}
-
 bool incrementLoops()
 {
   bool ret = false;