diff --git a/Fltk/onelabGroup.cpp b/Fltk/onelabGroup.cpp
index da16505afc95f9afc64b0528ea0d5782a53e84ca..6b62f554a0fcb9b9d02d9120264d174daaeb8b57 100644
--- a/Fltk/onelabGroup.cpp
+++ b/Fltk/onelabGroup.cpp
@@ -219,6 +219,52 @@ bool gmshLocalNetworkClient::receiveMessage(gmshLocalNetworkClient *master)
         Msg::Error("Unknown OneLab parameter type: %s", type.c_str());
     }
     break;
+  case 32:     //case GmshSocket::GMSH_PARAMETER_UPDATE:
+    {
+      std::string version, type, name;
+      onelab::parameter::getInfoFromChar(message, version, type, name);
+      if(onelab::parameter::version() != version){
+        Msg::Error("OneLab version mismatch (server: %s / client: %s)",
+                   onelab::parameter::version().c_str(), version.c_str());
+      }
+      else if(type == "number"){
+	onelab::number p;
+        std::vector<onelab::number> par; get(par, name);
+        if(par.size() == 1) {
+	  p = par[0];
+	  onelab::number y; y.fromChar(message); 
+	  onelabUtils::updateNumber(p,y);
+	}
+	else
+	  p.fromChar(message);
+	set(p);
+        if(p.getName() == getName() + "/Progress")
+          if(FlGui::available())
+            FlGui::instance()->setProgress(p.getLabel().c_str(), p.getValue(),
+                                           p.getMin(), p.getMax());
+      }
+      else if(type == "string"){
+        onelab::string p; 
+	std::vector<onelab::string> par; get(par, name);
+        if(par.size() == 1){
+	  p = par[0];
+	  onelab::string y; y.fromChar(message); 
+	  onelabUtils::updateString(p,y);
+	}
+	else
+	  p.fromChar(message);
+	set(p);
+      }
+      else if(type == "region"){
+        onelab::region p; p.fromChar(message); set(p);
+      }
+      else if(type == "function"){
+        onelab::function p; p.fromChar(message); set(p);
+      }
+      else
+        Msg::Error("Unknown OneLab parameter type: %s", type.c_str());
+    }
+    break;
   case GmshSocket::GMSH_PARAMETER_QUERY:
     {
       std::string version, type, name, reply;
@@ -716,15 +762,17 @@ void onelab_cb(Fl_Widget *w, void *data)
 
   if(action == "compute") initializeLoops();
 
-  // check whether we are running a metamodel
+  // check whether we are running a metamodel (.ol or .py)
   std::vector<onelab::number> n;
   onelab::server::instance()->get(n, "IsMetamodel");
   bool isMetamodel = (n.size() && n[0].getValue());
+  onelab::server::instance()->get(n, "IsPyMetamodel");
+  bool isPyMetamodel = (n.size() && n[0].getValue());
 
   do{ // enter loop
 
     // if the client is a not a metamodel, run Gmsh
-    if(!isMetamodel){
+    if(!isMetamodel && !isPyMetamodel){
       if(onelabUtils::runGmshClient(action, CTX::instance()->solver.autoMesh))
         drawContext::global()->draw();
     }