diff --git a/Common/GmshMessage.cpp b/Common/GmshMessage.cpp
index 8341a60523fdcd0a5b9a77561aeabae54a6a8034..6350947338dc84e548f87508f2f73d94c3e041dd 100644
--- a/Common/GmshMessage.cpp
+++ b/Common/GmshMessage.cpp
@@ -1183,7 +1183,8 @@ void Msg::ImportPhysicalsAsOnelabRegions()
 #endif
 }
 
-void Msg::RunOnelabClient(const std::string &name, const std::string &command)
+void Msg::RunOnelabClient(const std::string &name, const std::string &exe,
+                          const std::string &args)
 {
 #if defined(HAVE_ONELAB) && !defined(HAVE_ONELAB2)
   onelab::server::citer it = onelab::server::instance()->findClient(name);
@@ -1192,7 +1193,7 @@ void Msg::RunOnelabClient(const std::string &name, const std::string &command)
     client = it->second;
   }
   else{
-    if(command.empty()){
+    if(exe.empty()){
       Msg::Error("Unknown ONELAB client `%s'", name.c_str());
       return;
     }
@@ -1201,8 +1202,9 @@ void Msg::RunOnelabClient(const std::string &name, const std::string &command)
     o.setNeverChanged(true);
     onelab::server::instance()->set(o);
 #if defined(HAVE_FLTK)
-    Msg::Info("Creating new ONELAB client `%s' (%s)", name.c_str(), command.c_str());
-    client = new gmshLocalNetworkClient(name, command);
+    Msg::Info("Creating new ONELAB client `%s' (%s %s)", name.c_str(),
+              exe.c_str(), args.c_str());
+    client = new gmshLocalNetworkClient(name, exe, args);
     client->run();
 #else
     Msg::Error("Cannot create ONELAB client without FLTK");
diff --git a/Common/GmshMessage.h b/Common/GmshMessage.h
index 36d57a1ff8e59495d8f4e3a04ec9d33b8223705c..95ef97e4769aabb5dbfc040d331942ee3f0dcdf8 100644
--- a/Common/GmshMessage.h
+++ b/Common/GmshMessage.h
@@ -134,7 +134,8 @@ class Msg {
                                       std::map<std::string, std::vector<double> > &fopt,
                                       std::map<std::string, std::vector<std::string> > &copt);
   static void UndefineOnelabParameter(const std::string &name);
-  static void RunOnelabClient(const std::string &name, const std::string &command="");
+  static void RunOnelabClient(const std::string &name, const std::string &exe="",
+                              const std::string &args="");
   static void ImportPhysicalsAsOnelabRegions();
 };
 
diff --git a/Common/gmshLocalNetworkClient.cpp b/Common/gmshLocalNetworkClient.cpp
index b34488a23bffdb248d2b869ac15c1d4cee4121b2..5cc0114628631f33efd3287711485ac52834ae1a 100644
--- a/Common/gmshLocalNetworkClient.cpp
+++ b/Common/gmshLocalNetworkClient.cpp
@@ -114,6 +114,7 @@ class onelabGmshServer : public GmshServer{
     std::string exe = FixWindowsPath(_client->getExecutable());
     std::string args;
     if(exe.size()){
+      args.append(_client->getExtraArguments());
       std::vector<std::string> cl = onelabUtils::getCommandLine(_client);
       for(unsigned int i = 0; i < cl.size(); i++)
         args.append(" " + cl[i]);
@@ -368,10 +369,10 @@ bool gmshLocalNetworkClient::receiveMessage(gmshLocalNetworkClient *master)
     {
       std::string::size_type first = 0;
       std::string clientName = onelab::parameter::getNextToken(message, first);
-      std::string command = onelab::parameter::getNextToken(message, first);
+      std::string exe = onelab::parameter::getNextToken(message, first);
       if (!onelab::server::instance()->isRegistered(clientName)){
 	gmshLocalNetworkClient* subClient =
-	  new gmshLocalNetworkClient(clientName, command);
+	  new gmshLocalNetworkClient(clientName, exe);
 	onelabGmshServer *server = new onelabGmshServer(subClient);
 	subClient->setPid(0);
 	int sock = server->LaunchClient();
@@ -824,7 +825,7 @@ void solver_batch_cb(void *data)
   onelab::server::instance()->set(n);
 
   // create client
-  onelab::localNetworkClient *c = new gmshLocalNetworkClient(name, exe, host);
+  onelab::localNetworkClient *c = new gmshLocalNetworkClient(name, exe, "", host);
   c->setIndex(num);
   onelab::string o(c->getName() + "/Action");
 
diff --git a/Common/gmshLocalNetworkClient.h b/Common/gmshLocalNetworkClient.h
index 3dce8eda92b9040f7d331eb540d3bc6e1240a43e..cbda7159b9ac1e2b0b751d957b318ab819e97e1f 100644
--- a/Common/gmshLocalNetworkClient.h
+++ b/Common/gmshLocalNetworkClient.h
@@ -23,10 +23,12 @@ class gmshLocalNetworkClient : public onelab::localNetworkClient{
   // client that launched this one (with GMSH_CONNECT); _father is zero for the
   // master client (the one created by Gmsh).
   gmshLocalNetworkClient *_father;
+  std::string _extraArguments;
  public:
   gmshLocalNetworkClient(const std::string &name, const std::string &executable,
-                         const std::string &remoteLogin="")
-    : onelab::localNetworkClient(name, executable, remoteLogin), _father(0)
+                         const std::string &args="", const std::string &remoteLogin="")
+    : onelab::localNetworkClient(name, executable, remoteLogin), _father(0),
+      _extraArguments(args)
   {
     addClient(this);
   }
@@ -38,6 +40,7 @@ class gmshLocalNetworkClient : public onelab::localNetworkClient{
   {
     return _father;
   }
+  std::string getExtraArguments(){ return _extraArguments; }
   void addClient(gmshLocalNetworkClient *client)
   {
     _clients.push_back(client);
diff --git a/Common/onelab.h b/Common/onelab.h
index 42e63d3c02798213a0f2852405146f233899e37f..a0bca8f58e7224b143043e1855fdb5319ed125a2 100644
--- a/Common/onelab.h
+++ b/Common/onelab.h
@@ -93,7 +93,7 @@ namespace onelab{
       }
       else{
         for(std::map<std::string, bool>::iterator it = _clients.begin();
-            it != _clients.end(); it++) 
+            it != _clients.end(); it++)
           it->second = changed;
       }
     }
@@ -523,7 +523,7 @@ namespace onelab{
       dst = encode(dst, (UInt16)_choices.size());
       for(unsigned int i = 0; i < _choices.size(); i++)
         dst = encode(dst, _choices[i]);
-      
+
       dst = encode(dst, (UInt16)_valueLabels.size());
       for(std::map<double, std::string>::const_iterator it = _valueLabels.begin(); it != _valueLabels.end(); it++) {
         dst = encode(dst, it->first);
@@ -1434,6 +1434,7 @@ namespace onelab{
     void setPid(int pid){ _pid = pid; }
     GmshServer *getGmshServer(){ return _gmshServer; }
     void setGmshServer(GmshServer *server){ _gmshServer = server; }
+    virtual std::string getExtraArguments(){ return ""; }
     virtual bool run() = 0;
     virtual bool kill() = 0;
   };
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 55a9eca6a50bd0b6f0f87f6fe49acc61243f73b3..80620028ff78c89ea9bf13f87b76bbd12e2315c2 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1066,34 +1066,34 @@ static const yytype_uint16 yyrline[] =
     1953,  1958,  1981,  1987,  1998,  1999,  2004,  2007,  2011,  2034,
     2057,  2080,  2108,  2129,  2155,  2176,  2198,  2218,  2330,  2349,
     2387,  2496,  2505,  2511,  2526,  2554,  2571,  2580,  2594,  2600,
-    2606,  2615,  2624,  2633,  2647,  2703,  2728,  2745,  2760,  2779,
-    2791,  2815,  2819,  2824,  2831,  2837,  2842,  2848,  2856,  2860,
-    2864,  2869,  2924,  2937,  2954,  2971,  2992,  3013,  3048,  3056,
-    3062,  3069,  3073,  3082,  3090,  3098,  3107,  3106,  3121,  3120,
-    3135,  3134,  3149,  3148,  3162,  3169,  3176,  3183,  3190,  3197,
-    3204,  3211,  3218,  3226,  3225,  3239,  3238,  3252,  3251,  3265,
-    3264,  3278,  3277,  3291,  3290,  3304,  3303,  3317,  3316,  3330,
-    3329,  3346,  3349,  3355,  3367,  3387,  3411,  3415,  3419,  3423,
-    3427,  3433,  3439,  3443,  3447,  3451,  3455,  3474,  3487,  3490,
-    3506,  3509,  3526,  3529,  3535,  3538,  3545,  3601,  3671,  3676,
-    3743,  3779,  3787,  3830,  3869,  3889,  3916,  3956,  3984,  4012,
-    4016,  4020,  4048,  4087,  4126,  4147,  4168,  4195,  4199,  4209,
-    4244,  4245,  4246,  4250,  4256,  4268,  4286,  4314,  4315,  4316,
-    4317,  4318,  4319,  4320,  4321,  4322,  4329,  4330,  4331,  4332,
-    4333,  4334,  4335,  4336,  4337,  4338,  4339,  4340,  4341,  4342,
-    4343,  4344,  4345,  4346,  4347,  4348,  4349,  4350,  4351,  4352,
-    4353,  4354,  4355,  4356,  4357,  4358,  4359,  4360,  4361,  4370,
-    4371,  4372,  4373,  4374,  4375,  4376,  4377,  4378,  4379,  4384,
-    4383,  4391,  4408,  4426,  4444,  4449,  4455,  4467,  4484,  4502,
-    4523,  4528,  4533,  4543,  4553,  4558,  4567,  4572,  4599,  4603,
-    4607,  4611,  4615,  4622,  4626,  4630,  4634,  4641,  4646,  4653,
-    4658,  4662,  4667,  4671,  4679,  4690,  4694,  4706,  4714,  4722,
-    4729,  4739,  4768,  4772,  4776,  4780,  4784,  4813,  4842,  4871,
-    4900,  4913,  4926,  4939,  4952,  4962,  4972,  4984,  4996,  5008,
-    5026,  5047,  5052,  5056,  5060,  5072,  5076,  5088,  5095,  5105,
-    5109,  5124,  5129,  5136,  5140,  5153,  5161,  5172,  5176,  5184,
-    5190,  5198,  5206,  5221,  5235,  5249,  5261,  5277,  5281,  5301,
-    5300,  5313,  5318,  5324,  5333,  5346,  5349
+    2606,  2615,  2624,  2633,  2647,  2703,  2722,  2739,  2754,  2773,
+    2785,  2809,  2813,  2818,  2825,  2831,  2836,  2842,  2850,  2854,
+    2858,  2863,  2918,  2931,  2948,  2965,  2986,  3007,  3042,  3050,
+    3056,  3063,  3067,  3076,  3084,  3092,  3101,  3100,  3115,  3114,
+    3129,  3128,  3143,  3142,  3156,  3163,  3170,  3177,  3184,  3191,
+    3198,  3205,  3212,  3220,  3219,  3233,  3232,  3246,  3245,  3259,
+    3258,  3272,  3271,  3285,  3284,  3298,  3297,  3311,  3310,  3324,
+    3323,  3340,  3343,  3349,  3361,  3381,  3405,  3409,  3413,  3417,
+    3421,  3427,  3433,  3437,  3441,  3445,  3449,  3468,  3481,  3484,
+    3500,  3503,  3520,  3523,  3529,  3532,  3539,  3595,  3665,  3670,
+    3737,  3773,  3781,  3824,  3863,  3883,  3910,  3950,  3978,  4006,
+    4010,  4014,  4042,  4081,  4120,  4141,  4162,  4189,  4193,  4203,
+    4238,  4239,  4240,  4244,  4250,  4262,  4280,  4308,  4309,  4310,
+    4311,  4312,  4313,  4314,  4315,  4316,  4323,  4324,  4325,  4326,
+    4327,  4328,  4329,  4330,  4331,  4332,  4333,  4334,  4335,  4336,
+    4337,  4338,  4339,  4340,  4341,  4342,  4343,  4344,  4345,  4346,
+    4347,  4348,  4349,  4350,  4351,  4352,  4353,  4354,  4355,  4364,
+    4365,  4366,  4367,  4368,  4369,  4370,  4371,  4372,  4373,  4378,
+    4377,  4385,  4402,  4420,  4438,  4443,  4449,  4461,  4478,  4496,
+    4517,  4522,  4527,  4537,  4547,  4552,  4561,  4566,  4593,  4597,
+    4601,  4605,  4609,  4616,  4620,  4624,  4628,  4635,  4640,  4647,
+    4652,  4656,  4661,  4665,  4673,  4684,  4688,  4700,  4708,  4716,
+    4723,  4733,  4762,  4766,  4770,  4774,  4778,  4807,  4836,  4865,
+    4894,  4907,  4920,  4933,  4946,  4956,  4966,  4978,  4990,  5002,
+    5020,  5041,  5046,  5050,  5054,  5066,  5070,  5082,  5089,  5099,
+    5103,  5118,  5123,  5130,  5134,  5147,  5155,  5166,  5170,  5178,
+    5184,  5192,  5200,  5215,  5229,  5243,  5255,  5271,  5275,  5295,
+    5294,  5307,  5312,  5318,  5327,  5340,  5343
 };
 #endif
 
@@ -7607,20 +7607,14 @@ yyreduce:
 #line 2704 "Gmsh.y"
     {
       int n = List_Nbr((yyvsp[(3) - (5)].l));
-      if(n != 1 && n != 2){
-        yymsg(0, "OnelabRun takes one or two arguments");
+      if(n < 1 || n > 3){
+        yymsg(0, "OnelabRun takes from one to three arguments");
       }
       else{
-        char *s0;
-        List_Read((yyvsp[(3) - (5)].l), 0, &s0);
-        if(n == 2){
-          char *s1;
-          List_Read((yyvsp[(3) - (5)].l), 1, &s1);
-          Msg::RunOnelabClient(s0, s1);
-        }
-        else{
-          Msg::RunOnelabClient(s0);
-        }
+        char *s[3] = {"", "", ""};
+        for(int i = 0; i < n; i++)
+          List_Read((yyvsp[(3) - (5)].l), i, &s[i]);
+        Msg::RunOnelabClient(s[0], s[1], s[2]);
       }
       for(int i = 0; i < n; i++){
         char *s;
@@ -7633,7 +7627,7 @@ yyreduce:
 
   case 206:
 /* Line 1787 of yacc.c  */
-#line 2729 "Gmsh.y"
+#line 2723 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -7654,7 +7648,7 @@ yyreduce:
 
   case 207:
 /* Line 1787 of yacc.c  */
-#line 2746 "Gmsh.y"
+#line 2740 "Gmsh.y"
     {
 #if defined(HAVE_POST) && defined(HAVE_MESH)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -7673,7 +7667,7 @@ yyreduce:
 
   case 208:
 /* Line 1787 of yacc.c  */
-#line 2761 "Gmsh.y"
+#line 2755 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -7696,7 +7690,7 @@ yyreduce:
 
   case 209:
 /* Line 1787 of yacc.c  */
-#line 2780 "Gmsh.y"
+#line 2774 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
        try {
@@ -7712,7 +7706,7 @@ yyreduce:
 
   case 210:
 /* Line 1787 of yacc.c  */
-#line 2792 "Gmsh.y"
+#line 2786 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -7740,7 +7734,7 @@ yyreduce:
 
   case 211:
 /* Line 1787 of yacc.c  */
-#line 2816 "Gmsh.y"
+#line 2810 "Gmsh.y"
     {
       Msg::Exit(0);
     }
@@ -7748,7 +7742,7 @@ yyreduce:
 
   case 212:
 /* Line 1787 of yacc.c  */
-#line 2820 "Gmsh.y"
+#line 2814 "Gmsh.y"
     {
       gmsh_yyerrorstate = 999; // this will be checked when yyparse returns
       YYABORT;
@@ -7757,7 +7751,7 @@ yyreduce:
 
   case 213:
 /* Line 1787 of yacc.c  */
-#line 2825 "Gmsh.y"
+#line 2819 "Gmsh.y"
     {
       // FIXME: this is a hack to force a transfer from the old DB to
       // the new DB. This will become unnecessary if/when we fill the
@@ -7768,7 +7762,7 @@ yyreduce:
 
   case 214:
 /* Line 1787 of yacc.c  */
-#line 2832 "Gmsh.y"
+#line 2826 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
@@ -7778,7 +7772,7 @@ yyreduce:
 
   case 215:
 /* Line 1787 of yacc.c  */
-#line 2838 "Gmsh.y"
+#line 2832 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 1;
       SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
@@ -7787,7 +7781,7 @@ yyreduce:
 
   case 216:
 /* Line 1787 of yacc.c  */
-#line 2843 "Gmsh.y"
+#line 2837 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -7797,7 +7791,7 @@ yyreduce:
 
   case 217:
 /* Line 1787 of yacc.c  */
-#line 2849 "Gmsh.y"
+#line 2843 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
      CTX::instance()->mesh.changed = ENT_ALL;
@@ -7809,7 +7803,7 @@ yyreduce:
 
   case 218:
 /* Line 1787 of yacc.c  */
-#line 2857 "Gmsh.y"
+#line 2851 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh();
     }
@@ -7817,7 +7811,7 @@ yyreduce:
 
   case 219:
 /* Line 1787 of yacc.c  */
-#line 2861 "Gmsh.y"
+#line 2855 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh(1);
     }
@@ -7825,7 +7819,7 @@ yyreduce:
 
   case 220:
 /* Line 1787 of yacc.c  */
-#line 2865 "Gmsh.y"
+#line 2859 "Gmsh.y"
     {
       GModel::current()->importGEOInternals();
       GModel::current()->refineMesh(CTX::instance()->mesh.secondOrderLinear);
@@ -7834,7 +7828,7 @@ yyreduce:
 
   case 221:
 /* Line 1787 of yacc.c  */
-#line 2871 "Gmsh.y"
+#line 2865 "Gmsh.y"
     {
       int lock = CTX::instance()->lock;
       CTX::instance()->lock = 0;
@@ -7892,7 +7886,7 @@ yyreduce:
 
   case 222:
 /* Line 1787 of yacc.c  */
-#line 2925 "Gmsh.y"
+#line 2919 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       SetOrderN(GModel::current(), (yyvsp[(2) - (3)].d), CTX::instance()->mesh.secondOrderLinear,
@@ -7904,7 +7898,7 @@ yyreduce:
 
   case 223:
 /* Line 1787 of yacc.c  */
-#line 2938 "Gmsh.y"
+#line 2932 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -7925,7 +7919,7 @@ yyreduce:
 
   case 224:
 /* Line 1787 of yacc.c  */
-#line 2955 "Gmsh.y"
+#line 2949 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -7946,7 +7940,7 @@ yyreduce:
 
   case 225:
 /* Line 1787 of yacc.c  */
-#line 2972 "Gmsh.y"
+#line 2966 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -7971,7 +7965,7 @@ yyreduce:
 
   case 226:
 /* Line 1787 of yacc.c  */
-#line 2993 "Gmsh.y"
+#line 2987 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -7996,7 +7990,7 @@ yyreduce:
 
   case 227:
 /* Line 1787 of yacc.c  */
-#line 3014 "Gmsh.y"
+#line 3008 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -8035,7 +8029,7 @@ yyreduce:
 
   case 228:
 /* Line 1787 of yacc.c  */
-#line 3049 "Gmsh.y"
+#line 3043 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -8047,7 +8041,7 @@ yyreduce:
 
   case 229:
 /* Line 1787 of yacc.c  */
-#line 3057 "Gmsh.y"
+#line 3051 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -8057,7 +8051,7 @@ yyreduce:
 
   case 230:
 /* Line 1787 of yacc.c  */
-#line 3063 "Gmsh.y"
+#line 3057 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -8068,7 +8062,7 @@ yyreduce:
 
   case 231:
 /* Line 1787 of yacc.c  */
-#line 3070 "Gmsh.y"
+#line 3064 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     }
@@ -8076,14 +8070,14 @@ yyreduce:
 
   case 232:
 /* Line 1787 of yacc.c  */
-#line 3074 "Gmsh.y"
+#line 3068 "Gmsh.y"
     {
     }
     break;
 
   case 233:
 /* Line 1787 of yacc.c  */
-#line 3083 "Gmsh.y"
+#line 3077 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l),
@@ -8095,7 +8089,7 @@ yyreduce:
 
   case 234:
 /* Line 1787 of yacc.c  */
-#line 3091 "Gmsh.y"
+#line 3085 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l),
@@ -8107,7 +8101,7 @@ yyreduce:
 
   case 235:
 /* Line 1787 of yacc.c  */
-#line 3099 "Gmsh.y"
+#line 3093 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l),
@@ -8119,7 +8113,7 @@ yyreduce:
 
   case 236:
 /* Line 1787 of yacc.c  */
-#line 3107 "Gmsh.y"
+#line 3101 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8129,7 +8123,7 @@ yyreduce:
 
   case 237:
 /* Line 1787 of yacc.c  */
-#line 3113 "Gmsh.y"
+#line 3107 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l),
@@ -8141,7 +8135,7 @@ yyreduce:
 
   case 238:
 /* Line 1787 of yacc.c  */
-#line 3121 "Gmsh.y"
+#line 3115 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8151,7 +8145,7 @@ yyreduce:
 
   case 239:
 /* Line 1787 of yacc.c  */
-#line 3127 "Gmsh.y"
+#line 3121 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l),
@@ -8163,7 +8157,7 @@ yyreduce:
 
   case 240:
 /* Line 1787 of yacc.c  */
-#line 3135 "Gmsh.y"
+#line 3129 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8173,7 +8167,7 @@ yyreduce:
 
   case 241:
 /* Line 1787 of yacc.c  */
-#line 3141 "Gmsh.y"
+#line 3135 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l),
@@ -8185,7 +8179,7 @@ yyreduce:
 
   case 242:
 /* Line 1787 of yacc.c  */
-#line 3149 "Gmsh.y"
+#line 3143 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8195,7 +8189,7 @@ yyreduce:
 
   case 243:
 /* Line 1787 of yacc.c  */
-#line 3155 "Gmsh.y"
+#line 3149 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
@@ -8206,7 +8200,7 @@ yyreduce:
 
   case 244:
 /* Line 1787 of yacc.c  */
-#line 3163 "Gmsh.y"
+#line 3157 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d),
@@ -8217,7 +8211,7 @@ yyreduce:
 
   case 245:
 /* Line 1787 of yacc.c  */
-#line 3170 "Gmsh.y"
+#line 3164 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d),
@@ -8228,7 +8222,7 @@ yyreduce:
 
   case 246:
 /* Line 1787 of yacc.c  */
-#line 3177 "Gmsh.y"
+#line 3171 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d),
@@ -8239,7 +8233,7 @@ yyreduce:
 
   case 247:
 /* Line 1787 of yacc.c  */
-#line 3184 "Gmsh.y"
+#line 3178 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -8250,7 +8244,7 @@ yyreduce:
 
   case 248:
 /* Line 1787 of yacc.c  */
-#line 3191 "Gmsh.y"
+#line 3185 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -8261,7 +8255,7 @@ yyreduce:
 
   case 249:
 /* Line 1787 of yacc.c  */
-#line 3198 "Gmsh.y"
+#line 3192 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -8272,7 +8266,7 @@ yyreduce:
 
   case 250:
 /* Line 1787 of yacc.c  */
-#line 3205 "Gmsh.y"
+#line 3199 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d),
@@ -8283,7 +8277,7 @@ yyreduce:
 
   case 251:
 /* Line 1787 of yacc.c  */
-#line 3212 "Gmsh.y"
+#line 3206 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d),
@@ -8294,7 +8288,7 @@ yyreduce:
 
   case 252:
 /* Line 1787 of yacc.c  */
-#line 3219 "Gmsh.y"
+#line 3213 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d),
@@ -8305,7 +8299,7 @@ yyreduce:
 
   case 253:
 /* Line 1787 of yacc.c  */
-#line 3226 "Gmsh.y"
+#line 3220 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8315,7 +8309,7 @@ yyreduce:
 
   case 254:
 /* Line 1787 of yacc.c  */
-#line 3232 "Gmsh.y"
+#line 3226 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -8326,7 +8320,7 @@ yyreduce:
 
   case 255:
 /* Line 1787 of yacc.c  */
-#line 3239 "Gmsh.y"
+#line 3233 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8336,7 +8330,7 @@ yyreduce:
 
   case 256:
 /* Line 1787 of yacc.c  */
-#line 3245 "Gmsh.y"
+#line 3239 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -8347,7 +8341,7 @@ yyreduce:
 
   case 257:
 /* Line 1787 of yacc.c  */
-#line 3252 "Gmsh.y"
+#line 3246 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8357,7 +8351,7 @@ yyreduce:
 
   case 258:
 /* Line 1787 of yacc.c  */
-#line 3258 "Gmsh.y"
+#line 3252 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -8368,7 +8362,7 @@ yyreduce:
 
   case 259:
 /* Line 1787 of yacc.c  */
-#line 3265 "Gmsh.y"
+#line 3259 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8378,7 +8372,7 @@ yyreduce:
 
   case 260:
 /* Line 1787 of yacc.c  */
-#line 3271 "Gmsh.y"
+#line 3265 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d),
@@ -8389,7 +8383,7 @@ yyreduce:
 
   case 261:
 /* Line 1787 of yacc.c  */
-#line 3278 "Gmsh.y"
+#line 3272 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8399,7 +8393,7 @@ yyreduce:
 
   case 262:
 /* Line 1787 of yacc.c  */
-#line 3284 "Gmsh.y"
+#line 3278 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d),
@@ -8410,7 +8404,7 @@ yyreduce:
 
   case 263:
 /* Line 1787 of yacc.c  */
-#line 3291 "Gmsh.y"
+#line 3285 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8420,7 +8414,7 @@ yyreduce:
 
   case 264:
 /* Line 1787 of yacc.c  */
-#line 3297 "Gmsh.y"
+#line 3291 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d),
@@ -8431,7 +8425,7 @@ yyreduce:
 
   case 265:
 /* Line 1787 of yacc.c  */
-#line 3304 "Gmsh.y"
+#line 3298 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8441,7 +8435,7 @@ yyreduce:
 
   case 266:
 /* Line 1787 of yacc.c  */
-#line 3310 "Gmsh.y"
+#line 3304 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d),
@@ -8452,7 +8446,7 @@ yyreduce:
 
   case 267:
 /* Line 1787 of yacc.c  */
-#line 3317 "Gmsh.y"
+#line 3311 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8462,7 +8456,7 @@ yyreduce:
 
   case 268:
 /* Line 1787 of yacc.c  */
-#line 3323 "Gmsh.y"
+#line 3317 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d),
@@ -8473,7 +8467,7 @@ yyreduce:
 
   case 269:
 /* Line 1787 of yacc.c  */
-#line 3330 "Gmsh.y"
+#line 3324 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -8483,7 +8477,7 @@ yyreduce:
 
   case 270:
 /* Line 1787 of yacc.c  */
-#line 3336 "Gmsh.y"
+#line 3330 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d),
@@ -8494,21 +8488,21 @@ yyreduce:
 
   case 271:
 /* Line 1787 of yacc.c  */
-#line 3347 "Gmsh.y"
+#line 3341 "Gmsh.y"
     {
     }
     break;
 
   case 272:
 /* Line 1787 of yacc.c  */
-#line 3350 "Gmsh.y"
+#line 3344 "Gmsh.y"
     {
     }
     break;
 
   case 273:
 /* Line 1787 of yacc.c  */
-#line 3356 "Gmsh.y"
+#line 3350 "Gmsh.y"
     {
       int n = (int)fabs((yyvsp[(3) - (5)].d));
       if(n){ // we accept n==0 to easily disable layers
@@ -8524,7 +8518,7 @@ yyreduce:
 
   case 274:
 /* Line 1787 of yacc.c  */
-#line 3368 "Gmsh.y"
+#line 3362 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -8548,7 +8542,7 @@ yyreduce:
 
   case 275:
 /* Line 1787 of yacc.c  */
-#line 3388 "Gmsh.y"
+#line 3382 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -8575,7 +8569,7 @@ yyreduce:
 
   case 276:
 /* Line 1787 of yacc.c  */
-#line 3412 "Gmsh.y"
+#line 3406 "Gmsh.y"
     {
       extr.mesh.ScaleLast = true;
     }
@@ -8583,7 +8577,7 @@ yyreduce:
 
   case 277:
 /* Line 1787 of yacc.c  */
-#line 3416 "Gmsh.y"
+#line 3410 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     }
@@ -8591,7 +8585,7 @@ yyreduce:
 
   case 278:
 /* Line 1787 of yacc.c  */
-#line 3420 "Gmsh.y"
+#line 3414 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     }
@@ -8599,7 +8593,7 @@ yyreduce:
 
   case 279:
 /* Line 1787 of yacc.c  */
-#line 3424 "Gmsh.y"
+#line 3418 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     }
@@ -8607,7 +8601,7 @@ yyreduce:
 
   case 280:
 /* Line 1787 of yacc.c  */
-#line 3428 "Gmsh.y"
+#line 3422 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -8617,7 +8611,7 @@ yyreduce:
 
   case 281:
 /* Line 1787 of yacc.c  */
-#line 3434 "Gmsh.y"
+#line 3428 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -8627,7 +8621,7 @@ yyreduce:
 
   case 282:
 /* Line 1787 of yacc.c  */
-#line 3440 "Gmsh.y"
+#line 3434 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
     }
@@ -8635,7 +8629,7 @@ yyreduce:
 
   case 283:
 /* Line 1787 of yacc.c  */
-#line 3444 "Gmsh.y"
+#line 3438 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
     }
@@ -8643,7 +8637,7 @@ yyreduce:
 
   case 284:
 /* Line 1787 of yacc.c  */
-#line 3448 "Gmsh.y"
+#line 3442 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
     }
@@ -8651,7 +8645,7 @@ yyreduce:
 
   case 285:
 /* Line 1787 of yacc.c  */
-#line 3452 "Gmsh.y"
+#line 3446 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
     }
@@ -8659,7 +8653,7 @@ yyreduce:
 
   case 286:
 /* Line 1787 of yacc.c  */
-#line 3456 "Gmsh.y"
+#line 3450 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -8682,7 +8676,7 @@ yyreduce:
 
   case 287:
 /* Line 1787 of yacc.c  */
-#line 3475 "Gmsh.y"
+#line 3469 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "Index"))
         extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d);
@@ -8694,7 +8688,7 @@ yyreduce:
 
   case 288:
 /* Line 1787 of yacc.c  */
-#line 3487 "Gmsh.y"
+#line 3481 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     }
@@ -8702,7 +8696,7 @@ yyreduce:
 
   case 289:
 /* Line 1787 of yacc.c  */
-#line 3491 "Gmsh.y"
+#line 3485 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -8719,7 +8713,7 @@ yyreduce:
 
   case 290:
 /* Line 1787 of yacc.c  */
-#line 3506 "Gmsh.y"
+#line 3500 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     }
@@ -8727,7 +8721,7 @@ yyreduce:
 
   case 291:
 /* Line 1787 of yacc.c  */
-#line 3510 "Gmsh.y"
+#line 3504 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -8745,7 +8739,7 @@ yyreduce:
 
   case 292:
 /* Line 1787 of yacc.c  */
-#line 3526 "Gmsh.y"
+#line 3520 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    }
@@ -8753,7 +8747,7 @@ yyreduce:
 
   case 293:
 /* Line 1787 of yacc.c  */
-#line 3530 "Gmsh.y"
+#line 3524 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    }
@@ -8761,7 +8755,7 @@ yyreduce:
 
   case 294:
 /* Line 1787 of yacc.c  */
-#line 3535 "Gmsh.y"
+#line 3529 "Gmsh.y"
     {
       (yyval.i) = 45;
     }
@@ -8769,7 +8763,7 @@ yyreduce:
 
   case 295:
 /* Line 1787 of yacc.c  */
-#line 3539 "Gmsh.y"
+#line 3533 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     }
@@ -8777,7 +8771,7 @@ yyreduce:
 
   case 296:
 /* Line 1787 of yacc.c  */
-#line 3546 "Gmsh.y"
+#line 3540 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -8837,7 +8831,7 @@ yyreduce:
 
   case 297:
 /* Line 1787 of yacc.c  */
-#line 3602 "Gmsh.y"
+#line 3596 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -8911,7 +8905,7 @@ yyreduce:
 
   case 298:
 /* Line 1787 of yacc.c  */
-#line 3672 "Gmsh.y"
+#line 3666 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -8920,7 +8914,7 @@ yyreduce:
 
   case 299:
 /* Line 1787 of yacc.c  */
-#line 3677 "Gmsh.y"
+#line 3671 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -8991,7 +8985,7 @@ yyreduce:
 
   case 300:
 /* Line 1787 of yacc.c  */
-#line 3744 "Gmsh.y"
+#line 3738 "Gmsh.y"
     {
       if(!(yyvsp[(2) - (3)].l)){
   	  List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -9031,7 +9025,7 @@ yyreduce:
 
   case 301:
 /* Line 1787 of yacc.c  */
-#line 3780 "Gmsh.y"
+#line 3774 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (7)].l)); i++){
 	double d;
@@ -9043,7 +9037,7 @@ yyreduce:
 
   case 302:
 /* Line 1787 of yacc.c  */
-#line 3788 "Gmsh.y"
+#line 3782 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -9090,7 +9084,7 @@ yyreduce:
 
   case 303:
 /* Line 1787 of yacc.c  */
-#line 3831 "Gmsh.y"
+#line 3825 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -9133,7 +9127,7 @@ yyreduce:
 
   case 304:
 /* Line 1787 of yacc.c  */
-#line 3870 "Gmsh.y"
+#line 3864 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -9157,7 +9151,7 @@ yyreduce:
 
   case 305:
 /* Line 1787 of yacc.c  */
-#line 3890 "Gmsh.y"
+#line 3884 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(5) - (6)].l)) != List_Nbr((yyvsp[(3) - (6)].l))){
 	yymsg(0, "Number of master (%d) different from number of slave (%d) lines",
@@ -9188,7 +9182,7 @@ yyreduce:
 
   case 306:
 /* Line 1787 of yacc.c  */
-#line 3918 "Gmsh.y"
+#line 3912 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){
 	yymsg(0, "Number of master surface edges (%d) different from number of "
@@ -9231,7 +9225,7 @@ yyreduce:
 
   case 307:
 /* Line 1787 of yacc.c  */
-#line 3957 "Gmsh.y"
+#line 3951 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -9263,7 +9257,7 @@ yyreduce:
 
   case 308:
 /* Line 1787 of yacc.c  */
-#line 3985 "Gmsh.y"
+#line 3979 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -9295,7 +9289,7 @@ yyreduce:
 
   case 309:
 /* Line 1787 of yacc.c  */
-#line 4013 "Gmsh.y"
+#line 4007 "Gmsh.y"
     {
       Msg::Error("Point in Volume not implemented yet");
     }
@@ -9303,7 +9297,7 @@ yyreduce:
 
   case 310:
 /* Line 1787 of yacc.c  */
-#line 4017 "Gmsh.y"
+#line 4011 "Gmsh.y"
     {
       Msg::Error("Line in Volume not implemented yet");
     }
@@ -9311,7 +9305,7 @@ yyreduce:
 
   case 311:
 /* Line 1787 of yacc.c  */
-#line 4021 "Gmsh.y"
+#line 4015 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -9343,7 +9337,7 @@ yyreduce:
 
   case 312:
 /* Line 1787 of yacc.c  */
-#line 4049 "Gmsh.y"
+#line 4043 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -9386,7 +9380,7 @@ yyreduce:
 
   case 313:
 /* Line 1787 of yacc.c  */
-#line 4088 "Gmsh.y"
+#line 4082 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
@@ -9429,7 +9423,7 @@ yyreduce:
 
   case 314:
 /* Line 1787 of yacc.c  */
-#line 4127 "Gmsh.y"
+#line 4121 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::viter it = GModel::current()->firstVertex();
@@ -9454,7 +9448,7 @@ yyreduce:
 
   case 315:
 /* Line 1787 of yacc.c  */
-#line 4148 "Gmsh.y"
+#line 4142 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::eiter it = GModel::current()->firstEdge();
@@ -9479,7 +9473,7 @@ yyreduce:
 
   case 316:
 /* Line 1787 of yacc.c  */
-#line 4169 "Gmsh.y"
+#line 4163 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::fiter it = GModel::current()->firstFace();
@@ -9504,7 +9498,7 @@ yyreduce:
 
   case 317:
 /* Line 1787 of yacc.c  */
-#line 4196 "Gmsh.y"
+#line 4190 "Gmsh.y"
     {
       ReplaceAllDuplicates();
     }
@@ -9512,7 +9506,7 @@ yyreduce:
 
   case 318:
 /* Line 1787 of yacc.c  */
-#line 4200 "Gmsh.y"
+#line 4194 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -9526,7 +9520,7 @@ yyreduce:
 
   case 319:
 /* Line 1787 of yacc.c  */
-#line 4210 "Gmsh.y"
+#line 4204 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (6)].l)) >= 2){
         double d;
@@ -9560,25 +9554,25 @@ yyreduce:
 
   case 320:
 /* Line 1787 of yacc.c  */
-#line 4244 "Gmsh.y"
+#line 4238 "Gmsh.y"
     { (yyval.c) = (char*)"Homology"; }
     break;
 
   case 321:
 /* Line 1787 of yacc.c  */
-#line 4245 "Gmsh.y"
+#line 4239 "Gmsh.y"
     { (yyval.c) = (char*)"Cohomology"; }
     break;
 
   case 322:
 /* Line 1787 of yacc.c  */
-#line 4246 "Gmsh.y"
+#line 4240 "Gmsh.y"
     { (yyval.c) = (char*)"Betti"; }
     break;
 
   case 323:
 /* Line 1787 of yacc.c  */
-#line 4251 "Gmsh.y"
+#line 4245 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < 4; i++) dim.push_back(i);
@@ -9588,7 +9582,7 @@ yyreduce:
 
   case 324:
 /* Line 1787 of yacc.c  */
-#line 4257 "Gmsh.y"
+#line 4251 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@ -9604,7 +9598,7 @@ yyreduce:
 
   case 325:
 /* Line 1787 of yacc.c  */
-#line 4269 "Gmsh.y"
+#line 4263 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@ -9626,7 +9620,7 @@ yyreduce:
 
   case 326:
 /* Line 1787 of yacc.c  */
-#line 4287 "Gmsh.y"
+#line 4281 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){
@@ -9653,55 +9647,55 @@ yyreduce:
 
   case 327:
 /* Line 1787 of yacc.c  */
-#line 4314 "Gmsh.y"
+#line 4308 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           }
     break;
 
   case 328:
 /* Line 1787 of yacc.c  */
-#line 4315 "Gmsh.y"
+#line 4309 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           }
     break;
 
   case 329:
 /* Line 1787 of yacc.c  */
-#line 4316 "Gmsh.y"
+#line 4310 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          }
     break;
 
   case 330:
 /* Line 1787 of yacc.c  */
-#line 4317 "Gmsh.y"
+#line 4311 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           }
     break;
 
   case 331:
 /* Line 1787 of yacc.c  */
-#line 4318 "Gmsh.y"
+#line 4312 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          }
     break;
 
   case 332:
 /* Line 1787 of yacc.c  */
-#line 4319 "Gmsh.y"
+#line 4313 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      }
     break;
 
   case 333:
 /* Line 1787 of yacc.c  */
-#line 4320 "Gmsh.y"
+#line 4314 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      }
     break;
 
   case 334:
 /* Line 1787 of yacc.c  */
-#line 4321 "Gmsh.y"
+#line 4315 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      }
     break;
 
   case 335:
 /* Line 1787 of yacc.c  */
-#line 4323 "Gmsh.y"
+#line 4317 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -9712,271 +9706,271 @@ yyreduce:
 
   case 336:
 /* Line 1787 of yacc.c  */
-#line 4329 "Gmsh.y"
+#line 4323 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  }
     break;
 
   case 337:
 /* Line 1787 of yacc.c  */
-#line 4330 "Gmsh.y"
+#line 4324 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  }
     break;
 
   case 338:
 /* Line 1787 of yacc.c  */
-#line 4331 "Gmsh.y"
+#line 4325 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      }
     break;
 
   case 339:
 /* Line 1787 of yacc.c  */
-#line 4332 "Gmsh.y"
+#line 4326 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      }
     break;
 
   case 340:
 /* Line 1787 of yacc.c  */
-#line 4333 "Gmsh.y"
+#line 4327 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     }
     break;
 
   case 341:
 /* Line 1787 of yacc.c  */
-#line 4334 "Gmsh.y"
+#line 4328 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     }
     break;
 
   case 342:
 /* Line 1787 of yacc.c  */
-#line 4335 "Gmsh.y"
+#line 4329 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     }
     break;
 
   case 343:
 /* Line 1787 of yacc.c  */
-#line 4336 "Gmsh.y"
+#line 4330 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     }
     break;
 
   case 344:
 /* Line 1787 of yacc.c  */
-#line 4337 "Gmsh.y"
+#line 4331 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     }
     break;
 
   case 345:
 /* Line 1787 of yacc.c  */
-#line 4338 "Gmsh.y"
+#line 4332 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     }
     break;
 
   case 346:
 /* Line 1787 of yacc.c  */
-#line 4339 "Gmsh.y"
+#line 4333 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); }
     break;
 
   case 347:
 /* Line 1787 of yacc.c  */
-#line 4340 "Gmsh.y"
+#line 4334 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      }
     break;
 
   case 348:
 /* Line 1787 of yacc.c  */
-#line 4341 "Gmsh.y"
+#line 4335 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      }
     break;
 
   case 349:
 /* Line 1787 of yacc.c  */
-#line 4342 "Gmsh.y"
+#line 4336 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    }
     break;
 
   case 350:
 /* Line 1787 of yacc.c  */
-#line 4343 "Gmsh.y"
+#line 4337 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     }
     break;
 
   case 351:
 /* Line 1787 of yacc.c  */
-#line 4344 "Gmsh.y"
+#line 4338 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      }
     break;
 
   case 352:
 /* Line 1787 of yacc.c  */
-#line 4345 "Gmsh.y"
+#line 4339 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     }
     break;
 
   case 353:
 /* Line 1787 of yacc.c  */
-#line 4346 "Gmsh.y"
+#line 4340 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      }
     break;
 
   case 354:
 /* Line 1787 of yacc.c  */
-#line 4347 "Gmsh.y"
+#line 4341 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     }
     break;
 
   case 355:
 /* Line 1787 of yacc.c  */
-#line 4348 "Gmsh.y"
+#line 4342 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      }
     break;
 
   case 356:
 /* Line 1787 of yacc.c  */
-#line 4349 "Gmsh.y"
+#line 4343 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     }
     break;
 
   case 357:
 /* Line 1787 of yacc.c  */
-#line 4350 "Gmsh.y"
+#line 4344 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));}
     break;
 
   case 358:
 /* Line 1787 of yacc.c  */
-#line 4351 "Gmsh.y"
+#line 4345 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     }
     break;
 
   case 359:
 /* Line 1787 of yacc.c  */
-#line 4352 "Gmsh.y"
+#line 4346 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     }
     break;
 
   case 360:
 /* Line 1787 of yacc.c  */
-#line 4353 "Gmsh.y"
+#line 4347 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     }
     break;
 
   case 361:
 /* Line 1787 of yacc.c  */
-#line 4354 "Gmsh.y"
+#line 4348 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     }
     break;
 
   case 362:
 /* Line 1787 of yacc.c  */
-#line 4355 "Gmsh.y"
+#line 4349 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    }
     break;
 
   case 363:
 /* Line 1787 of yacc.c  */
-#line 4356 "Gmsh.y"
+#line 4350 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     }
     break;
 
   case 364:
 /* Line 1787 of yacc.c  */
-#line 4357 "Gmsh.y"
+#line 4351 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); }
     break;
 
   case 365:
 /* Line 1787 of yacc.c  */
-#line 4358 "Gmsh.y"
+#line 4352 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); }
     break;
 
   case 366:
 /* Line 1787 of yacc.c  */
-#line 4359 "Gmsh.y"
+#line 4353 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); }
     break;
 
   case 367:
 /* Line 1787 of yacc.c  */
-#line 4360 "Gmsh.y"
+#line 4354 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); }
     break;
 
   case 368:
 /* Line 1787 of yacc.c  */
-#line 4361 "Gmsh.y"
+#line 4355 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; }
     break;
 
   case 369:
 /* Line 1787 of yacc.c  */
-#line 4370 "Gmsh.y"
+#line 4364 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); }
     break;
 
   case 370:
 /* Line 1787 of yacc.c  */
-#line 4371 "Gmsh.y"
+#line 4365 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; }
     break;
 
   case 371:
 /* Line 1787 of yacc.c  */
-#line 4372 "Gmsh.y"
+#line 4366 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); }
     break;
 
   case 372:
 /* Line 1787 of yacc.c  */
-#line 4373 "Gmsh.y"
+#line 4367 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); }
     break;
 
   case 373:
 /* Line 1787 of yacc.c  */
-#line 4374 "Gmsh.y"
+#line 4368 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); }
     break;
 
   case 374:
 /* Line 1787 of yacc.c  */
-#line 4375 "Gmsh.y"
+#line 4369 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); }
     break;
 
   case 375:
 /* Line 1787 of yacc.c  */
-#line 4376 "Gmsh.y"
+#line 4370 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); }
     break;
 
   case 376:
 /* Line 1787 of yacc.c  */
-#line 4377 "Gmsh.y"
+#line 4371 "Gmsh.y"
     { (yyval.d) = Cpu(); }
     break;
 
   case 377:
 /* Line 1787 of yacc.c  */
-#line 4378 "Gmsh.y"
+#line 4372 "Gmsh.y"
     { (yyval.d) = GetMemoryUsage()/1024./1024.; }
     break;
 
   case 378:
 /* Line 1787 of yacc.c  */
-#line 4379 "Gmsh.y"
+#line 4373 "Gmsh.y"
     { (yyval.d) = TotalRam(); }
     break;
 
   case 379:
 /* Line 1787 of yacc.c  */
-#line 4384 "Gmsh.y"
+#line 4378 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); }
     break;
 
   case 380:
 /* Line 1787 of yacc.c  */
-#line 4386 "Gmsh.y"
+#line 4380 "Gmsh.y"
     {
       std::vector<double> val(1, (yyvsp[(3) - (6)].d));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -9986,7 +9980,7 @@ yyreduce:
 
   case 381:
 /* Line 1787 of yacc.c  */
-#line 4392 "Gmsh.y"
+#line 4386 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -10007,7 +10001,7 @@ yyreduce:
 
   case 382:
 /* Line 1787 of yacc.c  */
-#line 4409 "Gmsh.y"
+#line 4403 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -10029,7 +10023,7 @@ yyreduce:
 
   case 383:
 /* Line 1787 of yacc.c  */
-#line 4427 "Gmsh.y"
+#line 4421 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -10051,7 +10045,7 @@ yyreduce:
 
   case 384:
 /* Line 1787 of yacc.c  */
-#line 4445 "Gmsh.y"
+#line 4439 "Gmsh.y"
     {
       (yyval.d) = gmsh_yysymbols.count((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -10060,7 +10054,7 @@ yyreduce:
 
   case 385:
 /* Line 1787 of yacc.c  */
-#line 4450 "Gmsh.y"
+#line 4444 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.d) = !StatFile(tmp);
@@ -10070,7 +10064,7 @@ yyreduce:
 
   case 386:
 /* Line 1787 of yacc.c  */
-#line 4456 "Gmsh.y"
+#line 4450 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -10086,7 +10080,7 @@ yyreduce:
 
   case 387:
 /* Line 1787 of yacc.c  */
-#line 4468 "Gmsh.y"
+#line 4462 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -10107,7 +10101,7 @@ yyreduce:
 
   case 388:
 /* Line 1787 of yacc.c  */
-#line 4485 "Gmsh.y"
+#line 4479 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -10129,7 +10123,7 @@ yyreduce:
 
   case 389:
 /* Line 1787 of yacc.c  */
-#line 4503 "Gmsh.y"
+#line 4497 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -10151,7 +10145,7 @@ yyreduce:
 
   case 390:
 /* Line 1787 of yacc.c  */
-#line 4524 "Gmsh.y"
+#line 4518 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
@@ -10160,7 +10154,7 @@ yyreduce:
 
   case 391:
 /* Line 1787 of yacc.c  */
-#line 4529 "Gmsh.y"
+#line 4523 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
@@ -10169,7 +10163,7 @@ yyreduce:
 
   case 392:
 /* Line 1787 of yacc.c  */
-#line 4534 "Gmsh.y"
+#line 4528 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -10183,7 +10177,7 @@ yyreduce:
 
   case 393:
 /* Line 1787 of yacc.c  */
-#line 4544 "Gmsh.y"
+#line 4538 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -10197,7 +10191,7 @@ yyreduce:
 
   case 394:
 /* Line 1787 of yacc.c  */
-#line 4554 "Gmsh.y"
+#line 4548 "Gmsh.y"
     {
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -10206,7 +10200,7 @@ yyreduce:
 
   case 395:
 /* Line 1787 of yacc.c  */
-#line 4559 "Gmsh.y"
+#line 4553 "Gmsh.y"
     {
       std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c));
       if(s.find(substr) != std::string::npos)
@@ -10219,7 +10213,7 @@ yyreduce:
 
   case 396:
 /* Line 1787 of yacc.c  */
-#line 4568 "Gmsh.y"
+#line 4562 "Gmsh.y"
     {
       (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
@@ -10228,7 +10222,7 @@ yyreduce:
 
   case 397:
 /* Line 1787 of yacc.c  */
-#line 4573 "Gmsh.y"
+#line 4567 "Gmsh.y"
     {
       int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
       if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){
@@ -10256,7 +10250,7 @@ yyreduce:
 
   case 398:
 /* Line 1787 of yacc.c  */
-#line 4600 "Gmsh.y"
+#line 4594 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     }
@@ -10264,7 +10258,7 @@ yyreduce:
 
   case 399:
 /* Line 1787 of yacc.c  */
-#line 4604 "Gmsh.y"
+#line 4598 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     }
@@ -10272,7 +10266,7 @@ yyreduce:
 
   case 400:
 /* Line 1787 of yacc.c  */
-#line 4608 "Gmsh.y"
+#line 4602 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     }
@@ -10280,7 +10274,7 @@ yyreduce:
 
   case 401:
 /* Line 1787 of yacc.c  */
-#line 4612 "Gmsh.y"
+#line 4606 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     }
@@ -10288,7 +10282,7 @@ yyreduce:
 
   case 402:
 /* Line 1787 of yacc.c  */
-#line 4616 "Gmsh.y"
+#line 4610 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     }
@@ -10296,7 +10290,7 @@ yyreduce:
 
   case 403:
 /* Line 1787 of yacc.c  */
-#line 4623 "Gmsh.y"
+#line 4617 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     }
@@ -10304,7 +10298,7 @@ yyreduce:
 
   case 404:
 /* Line 1787 of yacc.c  */
-#line 4627 "Gmsh.y"
+#line 4621 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     }
@@ -10312,7 +10306,7 @@ yyreduce:
 
   case 405:
 /* Line 1787 of yacc.c  */
-#line 4631 "Gmsh.y"
+#line 4625 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     }
@@ -10320,7 +10314,7 @@ yyreduce:
 
   case 406:
 /* Line 1787 of yacc.c  */
-#line 4635 "Gmsh.y"
+#line 4629 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     }
@@ -10328,7 +10322,7 @@ yyreduce:
 
   case 407:
 /* Line 1787 of yacc.c  */
-#line 4642 "Gmsh.y"
+#line 4636 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -10337,7 +10331,7 @@ yyreduce:
 
   case 408:
 /* Line 1787 of yacc.c  */
-#line 4647 "Gmsh.y"
+#line 4641 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     }
@@ -10345,7 +10339,7 @@ yyreduce:
 
   case 409:
 /* Line 1787 of yacc.c  */
-#line 4654 "Gmsh.y"
+#line 4648 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -10354,7 +10348,7 @@ yyreduce:
 
   case 410:
 /* Line 1787 of yacc.c  */
-#line 4659 "Gmsh.y"
+#line 4653 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     }
@@ -10362,7 +10356,7 @@ yyreduce:
 
   case 411:
 /* Line 1787 of yacc.c  */
-#line 4663 "Gmsh.y"
+#line 4657 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -10371,7 +10365,7 @@ yyreduce:
 
   case 412:
 /* Line 1787 of yacc.c  */
-#line 4668 "Gmsh.y"
+#line 4662 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     }
@@ -10379,7 +10373,7 @@ yyreduce:
 
   case 413:
 /* Line 1787 of yacc.c  */
-#line 4672 "Gmsh.y"
+#line 4666 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -10391,7 +10385,7 @@ yyreduce:
 
   case 414:
 /* Line 1787 of yacc.c  */
-#line 4680 "Gmsh.y"
+#line 4674 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -10403,7 +10397,7 @@ yyreduce:
 
   case 415:
 /* Line 1787 of yacc.c  */
-#line 4691 "Gmsh.y"
+#line 4685 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     }
@@ -10411,7 +10405,7 @@ yyreduce:
 
   case 416:
 /* Line 1787 of yacc.c  */
-#line 4695 "Gmsh.y"
+#line 4689 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -10424,7 +10418,7 @@ yyreduce:
 
   case 417:
 /* Line 1787 of yacc.c  */
-#line 4707 "Gmsh.y"
+#line 4701 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -10436,7 +10430,7 @@ yyreduce:
 
   case 418:
 /* Line 1787 of yacc.c  */
-#line 4715 "Gmsh.y"
+#line 4709 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -10448,7 +10442,7 @@ yyreduce:
 
   case 419:
 /* Line 1787 of yacc.c  */
-#line 4723 "Gmsh.y"
+#line 4717 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d));
@@ -10459,7 +10453,7 @@ yyreduce:
 
   case 420:
 /* Line 1787 of yacc.c  */
-#line 4730 "Gmsh.y"
+#line 4724 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[(5) - (5)].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@ -10473,7 +10467,7 @@ yyreduce:
 
   case 421:
 /* Line 1787 of yacc.c  */
-#line 4740 "Gmsh.y"
+#line 4734 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -10506,7 +10500,7 @@ yyreduce:
 
   case 422:
 /* Line 1787 of yacc.c  */
-#line 4769 "Gmsh.y"
+#line 4763 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(0);
     }
@@ -10514,7 +10508,7 @@ yyreduce:
 
   case 423:
 /* Line 1787 of yacc.c  */
-#line 4773 "Gmsh.y"
+#line 4767 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(1);
     }
@@ -10522,7 +10516,7 @@ yyreduce:
 
   case 424:
 /* Line 1787 of yacc.c  */
-#line 4777 "Gmsh.y"
+#line 4771 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(2);
     }
@@ -10530,7 +10524,7 @@ yyreduce:
 
   case 425:
 /* Line 1787 of yacc.c  */
-#line 4781 "Gmsh.y"
+#line 4775 "Gmsh.y"
     {
       (yyval.l) = GetAllEntityNumbers(3);
     }
@@ -10538,7 +10532,7 @@ yyreduce:
 
   case 426:
 /* Line 1787 of yacc.c  */
-#line 4785 "Gmsh.y"
+#line 4779 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -10571,7 +10565,7 @@ yyreduce:
 
   case 427:
 /* Line 1787 of yacc.c  */
-#line 4814 "Gmsh.y"
+#line 4808 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -10604,7 +10598,7 @@ yyreduce:
 
   case 428:
 /* Line 1787 of yacc.c  */
-#line 4843 "Gmsh.y"
+#line 4837 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -10637,7 +10631,7 @@ yyreduce:
 
   case 429:
 /* Line 1787 of yacc.c  */
-#line 4872 "Gmsh.y"
+#line 4866 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -10670,7 +10664,7 @@ yyreduce:
 
   case 430:
 /* Line 1787 of yacc.c  */
-#line 4902 "Gmsh.y"
+#line 4896 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -10686,7 +10680,7 @@ yyreduce:
 
   case 431:
 /* Line 1787 of yacc.c  */
-#line 4915 "Gmsh.y"
+#line 4909 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -10702,7 +10696,7 @@ yyreduce:
 
   case 432:
 /* Line 1787 of yacc.c  */
-#line 4928 "Gmsh.y"
+#line 4922 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -10718,7 +10712,7 @@ yyreduce:
 
   case 433:
 /* Line 1787 of yacc.c  */
-#line 4941 "Gmsh.y"
+#line 4935 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -10734,7 +10728,7 @@ yyreduce:
 
   case 434:
 /* Line 1787 of yacc.c  */
-#line 4953 "Gmsh.y"
+#line 4947 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -10748,7 +10742,7 @@ yyreduce:
 
   case 435:
 /* Line 1787 of yacc.c  */
-#line 4963 "Gmsh.y"
+#line 4957 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -10762,7 +10756,7 @@ yyreduce:
 
   case 436:
 /* Line 1787 of yacc.c  */
-#line 4973 "Gmsh.y"
+#line 4967 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -10778,7 +10772,7 @@ yyreduce:
 
   case 437:
 /* Line 1787 of yacc.c  */
-#line 4985 "Gmsh.y"
+#line 4979 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -10794,7 +10788,7 @@ yyreduce:
 
   case 438:
 /* Line 1787 of yacc.c  */
-#line 4997 "Gmsh.y"
+#line 4991 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@ -10810,7 +10804,7 @@ yyreduce:
 
   case 439:
 /* Line 1787 of yacc.c  */
-#line 5009 "Gmsh.y"
+#line 5003 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -10832,7 +10826,7 @@ yyreduce:
 
   case 440:
 /* Line 1787 of yacc.c  */
-#line 5027 "Gmsh.y"
+#line 5021 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -10854,7 +10848,7 @@ yyreduce:
 
   case 441:
 /* Line 1787 of yacc.c  */
-#line 5048 "Gmsh.y"
+#line 5042 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -10863,7 +10857,7 @@ yyreduce:
 
   case 442:
 /* Line 1787 of yacc.c  */
-#line 5053 "Gmsh.y"
+#line 5047 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     }
@@ -10871,7 +10865,7 @@ yyreduce:
 
   case 443:
 /* Line 1787 of yacc.c  */
-#line 5057 "Gmsh.y"
+#line 5051 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     }
@@ -10879,7 +10873,7 @@ yyreduce:
 
   case 444:
 /* Line 1787 of yacc.c  */
-#line 5061 "Gmsh.y"
+#line 5055 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -10892,7 +10886,7 @@ yyreduce:
 
   case 445:
 /* Line 1787 of yacc.c  */
-#line 5073 "Gmsh.y"
+#line 5067 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     }
@@ -10900,7 +10894,7 @@ yyreduce:
 
   case 446:
 /* Line 1787 of yacc.c  */
-#line 5077 "Gmsh.y"
+#line 5071 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     }
@@ -10908,7 +10902,7 @@ yyreduce:
 
   case 447:
 /* Line 1787 of yacc.c  */
-#line 5089 "Gmsh.y"
+#line 5083 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(-1, (yyvsp[(1) - (1)].c), &flag);
@@ -10919,7 +10913,7 @@ yyreduce:
 
   case 448:
 /* Line 1787 of yacc.c  */
-#line 5096 "Gmsh.y"
+#line 5090 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -10930,7 +10924,7 @@ yyreduce:
 
   case 449:
 /* Line 1787 of yacc.c  */
-#line 5106 "Gmsh.y"
+#line 5100 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     }
@@ -10938,7 +10932,7 @@ yyreduce:
 
   case 450:
 /* Line 1787 of yacc.c  */
-#line 5110 "Gmsh.y"
+#line 5104 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -10954,7 +10948,7 @@ yyreduce:
 
   case 451:
 /* Line 1787 of yacc.c  */
-#line 5125 "Gmsh.y"
+#line 5119 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -10963,7 +10957,7 @@ yyreduce:
 
   case 452:
 /* Line 1787 of yacc.c  */
-#line 5130 "Gmsh.y"
+#line 5124 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     }
@@ -10971,7 +10965,7 @@ yyreduce:
 
   case 453:
 /* Line 1787 of yacc.c  */
-#line 5137 "Gmsh.y"
+#line 5131 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     }
@@ -10979,7 +10973,7 @@ yyreduce:
 
   case 454:
 /* Line 1787 of yacc.c  */
-#line 5141 "Gmsh.y"
+#line 5135 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -10996,7 +10990,7 @@ yyreduce:
 
   case 455:
 /* Line 1787 of yacc.c  */
-#line 5154 "Gmsh.y"
+#line 5148 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -11008,7 +11002,7 @@ yyreduce:
 
   case 456:
 /* Line 1787 of yacc.c  */
-#line 5162 "Gmsh.y"
+#line 5156 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -11020,7 +11014,7 @@ yyreduce:
 
   case 457:
 /* Line 1787 of yacc.c  */
-#line 5173 "Gmsh.y"
+#line 5167 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     }
@@ -11028,7 +11022,7 @@ yyreduce:
 
   case 458:
 /* Line 1787 of yacc.c  */
-#line 5177 "Gmsh.y"
+#line 5171 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -11040,7 +11034,7 @@ yyreduce:
 
   case 459:
 /* Line 1787 of yacc.c  */
-#line 5185 "Gmsh.y"
+#line 5179 "Gmsh.y"
     {
       std::string action = Msg::GetGmshOnelabAction();
       (yyval.c) = (char *)Malloc(action.size() + 1);
@@ -11050,7 +11044,7 @@ yyreduce:
 
   case 460:
 /* Line 1787 of yacc.c  */
-#line 5191 "Gmsh.y"
+#line 5185 "Gmsh.y"
     {
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -11062,7 +11056,7 @@ yyreduce:
 
   case 461:
 /* Line 1787 of yacc.c  */
-#line 5199 "Gmsh.y"
+#line 5193 "Gmsh.y"
     {
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -11074,7 +11068,7 @@ yyreduce:
 
   case 462:
 /* Line 1787 of yacc.c  */
-#line 5207 "Gmsh.y"
+#line 5201 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -11093,7 +11087,7 @@ yyreduce:
 
   case 463:
 /* Line 1787 of yacc.c  */
-#line 5222 "Gmsh.y"
+#line 5216 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -11111,7 +11105,7 @@ yyreduce:
 
   case 464:
 /* Line 1787 of yacc.c  */
-#line 5236 "Gmsh.y"
+#line 5230 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -11129,7 +11123,7 @@ yyreduce:
 
   case 465:
 /* Line 1787 of yacc.c  */
-#line 5250 "Gmsh.y"
+#line 5244 "Gmsh.y"
     {
       std::string input = (yyvsp[(3) - (8)].c);
       std::string substr_old = (yyvsp[(5) - (8)].c);
@@ -11145,7 +11139,7 @@ yyreduce:
 
   case 466:
 /* Line 1787 of yacc.c  */
-#line 5262 "Gmsh.y"
+#line 5256 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -11165,7 +11159,7 @@ yyreduce:
 
   case 467:
 /* Line 1787 of yacc.c  */
-#line 5278 "Gmsh.y"
+#line 5272 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     }
@@ -11173,7 +11167,7 @@ yyreduce:
 
   case 468:
 /* Line 1787 of yacc.c  */
-#line 5282 "Gmsh.y"
+#line 5276 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -11196,13 +11190,13 @@ yyreduce:
 
   case 469:
 /* Line 1787 of yacc.c  */
-#line 5301 "Gmsh.y"
+#line 5295 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); }
     break;
 
   case 470:
 /* Line 1787 of yacc.c  */
-#line 5303 "Gmsh.y"
+#line 5297 "Gmsh.y"
     {
       std::string val((yyvsp[(3) - (6)].c));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -11214,7 +11208,7 @@ yyreduce:
 
   case 471:
 /* Line 1787 of yacc.c  */
-#line 5314 "Gmsh.y"
+#line 5308 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(char*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].c)));
@@ -11223,13 +11217,13 @@ yyreduce:
 
   case 472:
 /* Line 1787 of yacc.c  */
-#line 5319 "Gmsh.y"
+#line 5313 "Gmsh.y"
     { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); }
     break;
 
   case 473:
 /* Line 1787 of yacc.c  */
-#line 5325 "Gmsh.y"
+#line 5319 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -11241,7 +11235,7 @@ yyreduce:
 
   case 474:
 /* Line 1787 of yacc.c  */
-#line 5334 "Gmsh.y"
+#line 5328 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -11253,19 +11247,19 @@ yyreduce:
 
   case 475:
 /* Line 1787 of yacc.c  */
-#line 5347 "Gmsh.y"
+#line 5341 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); }
     break;
 
   case 476:
 /* Line 1787 of yacc.c  */
-#line 5350 "Gmsh.y"
+#line 5344 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); }
     break;
 
 
 /* Line 1787 of yacc.c  */
-#line 11269 "Gmsh.tab.cpp"
+#line 11263 "Gmsh.tab.cpp"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -11497,7 +11491,7 @@ yyreturn:
 
 
 /* Line 2050 of yacc.c  */
-#line 5354 "Gmsh.y"
+#line 5348 "Gmsh.y"
 
 
 void assignVariable(const std::string &name, int index, int assignType,
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 3e83da6e53e012842ca9bbdfbc3f42022ea97445..04737825a5149ac77eaaa0178f01e9b92a8fb3bf 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -2703,20 +2703,14 @@ Command :
   | tOnelabRun '(' RecursiveListOfStringExprVar ')' tEND
     {
       int n = List_Nbr($3);
-      if(n != 1 && n != 2){
-        yymsg(0, "OnelabRun takes one or two arguments");
+      if(n < 1 || n > 3){
+        yymsg(0, "OnelabRun takes from one to three arguments");
       }
       else{
-        char *s0;
-        List_Read($3, 0, &s0);
-        if(n == 2){
-          char *s1;
-          List_Read($3, 1, &s1);
-          Msg::RunOnelabClient(s0, s1);
-        }
-        else{
-          Msg::RunOnelabClient(s0);
-        }
+        char *s[3] = {"", "", ""};
+        for(int i = 0; i < n; i++)
+          List_Read($3, i, &s[i]);
+        Msg::RunOnelabClient(s[0], s[1], s[2]);
       }
       for(int i = 0; i < n; i++){
         char *s;