diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 4016e8bf906f1b9fb093b5c749ccc5fceb8c2cea..79b9eb3fe296d768ba59f31486b799574ea6efc7 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1307,39 +1307,39 @@ static const yytype_uint16 yyrline[] =
     2406,  2411,  2416,  2421,  2426,  2449,  2455,  2466,  2467,  2472,
     2475,  2479,  2502,  2525,  2548,  2576,  2597,  2623,  2644,  2666,
     2686,  2798,  2817,  2855,  2964,  2973,  2979,  2994,  3022,  3039,
-    3048,  3062,  3076,  3082,  3088,  3097,  3106,  3115,  3129,  3188,
-    3206,  3223,  3238,  3267,  3279,  3303,  3307,  3312,  3319,  3324,
-    3330,  3335,  3341,  3349,  3353,  3357,  3362,  3422,  3439,  3456,
-    3478,  3500,  3535,  3543,  3551,  3557,  3564,  3571,  3591,  3617,
-    3629,  3641,  3649,  3657,  3666,  3665,  3680,  3679,  3694,  3693,
-    3708,  3707,  3721,  3728,  3735,  3742,  3749,  3756,  3763,  3770,
-    3777,  3785,  3784,  3798,  3797,  3811,  3810,  3824,  3823,  3837,
-    3836,  3850,  3849,  3863,  3862,  3876,  3875,  3889,  3888,  3905,
-    3908,  3914,  3926,  3946,  3970,  3974,  3978,  3982,  3986,  3990,
-    3996,  4002,  4006,  4010,  4014,  4018,  4037,  4050,  4053,  4069,
-    4072,  4089,  4092,  4098,  4101,  4108,  4111,  4118,  4174,  4244,
-    4249,  4316,  4352,  4360,  4403,  4442,  4462,  4494,  4521,  4547,
-    4573,  4599,  4625,  4647,  4675,  4703,  4731,  4759,  4787,  4826,
-    4865,  4886,  4907,  4934,  4938,  4948,  4983,  4984,  4985,  4989,
-    4995,  5007,  5025,  5053,  5054,  5055,  5056,  5057,  5058,  5059,
-    5060,  5061,  5068,  5069,  5070,  5071,  5072,  5073,  5074,  5075,
-    5076,  5077,  5078,  5079,  5080,  5081,  5082,  5083,  5084,  5085,
-    5086,  5087,  5088,  5089,  5090,  5091,  5092,  5093,  5094,  5095,
-    5096,  5097,  5098,  5099,  5100,  5109,  5110,  5111,  5112,  5113,
-    5114,  5115,  5116,  5117,  5118,  5119,  5124,  5123,  5131,  5136,
-    5141,  5158,  5176,  5194,  5212,  5230,  5235,  5241,  5256,  5275,
-    5295,  5315,  5335,  5358,  5363,  5368,  5378,  5388,  5393,  5404,
-    5413,  5418,  5445,  5449,  5453,  5457,  5461,  5468,  5472,  5476,
-    5480,  5487,  5492,  5499,  5504,  5508,  5513,  5517,  5525,  5536,
-    5540,  5552,  5560,  5568,  5575,  5585,  5614,  5618,  5622,  5626,
-    5630,  5634,  5638,  5642,  5646,  5675,  5704,  5733,  5762,  5775,
-    5788,  5801,  5814,  5824,  5834,  5846,  5859,  5871,  5875,  5879,
-    5883,  5887,  5905,  5926,  5931,  5935,  5939,  5951,  5955,  5967,
-    5984,  5994,  5998,  6013,  6018,  6025,  6029,  6042,  6056,  6070,
-    6084,  6098,  6106,  6117,  6121,  6125,  6133,  6139,  6145,  6153,
-    6161,  6168,  6176,  6191,  6205,  6219,  6231,  6247,  6256,  6265,
-    6275,  6286,  6290,  6309,  6316,  6322,  6329,  6337,  6336,  6349,
-    6354,  6360,  6369,  6382,  6385,  6389
+    3048,  3062,  3076,  3082,  3088,  3097,  3106,  3115,  3129,  3191,
+    3209,  3226,  3241,  3270,  3282,  3306,  3310,  3315,  3322,  3327,
+    3333,  3338,  3344,  3352,  3356,  3360,  3365,  3425,  3442,  3459,
+    3481,  3503,  3538,  3546,  3554,  3560,  3567,  3574,  3594,  3620,
+    3632,  3644,  3652,  3660,  3669,  3668,  3683,  3682,  3697,  3696,
+    3711,  3710,  3724,  3731,  3738,  3745,  3752,  3759,  3766,  3773,
+    3780,  3788,  3787,  3801,  3800,  3814,  3813,  3827,  3826,  3840,
+    3839,  3853,  3852,  3866,  3865,  3879,  3878,  3892,  3891,  3908,
+    3911,  3917,  3929,  3949,  3973,  3977,  3981,  3985,  3989,  3993,
+    3999,  4005,  4009,  4013,  4017,  4021,  4040,  4053,  4056,  4072,
+    4075,  4092,  4095,  4101,  4104,  4111,  4114,  4121,  4177,  4247,
+    4252,  4319,  4355,  4363,  4406,  4445,  4465,  4497,  4524,  4550,
+    4576,  4602,  4628,  4650,  4678,  4706,  4734,  4762,  4790,  4829,
+    4868,  4889,  4910,  4937,  4941,  4951,  4986,  4987,  4988,  4992,
+    4998,  5010,  5028,  5056,  5057,  5058,  5059,  5060,  5061,  5062,
+    5063,  5064,  5071,  5072,  5073,  5074,  5075,  5076,  5077,  5078,
+    5079,  5080,  5081,  5082,  5083,  5084,  5085,  5086,  5087,  5088,
+    5089,  5090,  5091,  5092,  5093,  5094,  5095,  5096,  5097,  5098,
+    5099,  5100,  5101,  5102,  5103,  5112,  5113,  5114,  5115,  5116,
+    5117,  5118,  5119,  5120,  5121,  5122,  5127,  5126,  5134,  5139,
+    5144,  5161,  5179,  5197,  5215,  5233,  5238,  5244,  5259,  5278,
+    5298,  5318,  5338,  5361,  5366,  5371,  5381,  5391,  5396,  5407,
+    5416,  5421,  5448,  5452,  5456,  5460,  5464,  5471,  5475,  5479,
+    5483,  5490,  5495,  5502,  5507,  5511,  5516,  5520,  5528,  5539,
+    5543,  5555,  5563,  5571,  5578,  5588,  5617,  5621,  5625,  5629,
+    5633,  5637,  5641,  5645,  5649,  5678,  5707,  5736,  5765,  5778,
+    5791,  5804,  5817,  5827,  5837,  5849,  5862,  5874,  5878,  5882,
+    5886,  5890,  5908,  5929,  5934,  5938,  5942,  5954,  5958,  5970,
+    5987,  5997,  6001,  6016,  6021,  6028,  6032,  6045,  6059,  6073,
+    6087,  6101,  6109,  6120,  6124,  6128,  6136,  6142,  6148,  6156,
+    6164,  6171,  6179,  6194,  6208,  6222,  6234,  6250,  6259,  6268,
+    6278,  6289,  6293,  6312,  6319,  6325,  6332,  6340,  6339,  6352,
+    6357,  6363,  6372,  6385,  6388,  6392
 };
 #endif
 
@@ -8925,6 +8925,9 @@ yyreduce:
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Merge") || !strcmp((yyvsp[(1) - (3)].c), "MergeWithBoundingBox")){
 	// MergeWithBoundingBox is deprecated
+        // sync model with new DB here, so that if we e.g. import a STEP file,
+        // we have the correct entity tags and the numberings don't clash
+	GModel::current()->importGEOInternals();
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
 	MergeFile(tmp, true);
       }
@@ -8955,7 +8958,7 @@ yyreduce:
     break;
 
   case 239:
-#line 3189 "Gmsh.y"
+#line 3192 "Gmsh.y"
     {
       int n = List_Nbr((yyvsp[(3) - (5)].l));
       if(n == 1){
@@ -8976,7 +8979,7 @@ yyreduce:
     break;
 
   case 240:
-#line 3207 "Gmsh.y"
+#line 3210 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -8996,7 +8999,7 @@ yyreduce:
     break;
 
   case 241:
-#line 3224 "Gmsh.y"
+#line 3227 "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")){
@@ -9014,7 +9017,7 @@ yyreduce:
     break;
 
   case 242:
-#line 3239 "Gmsh.y"
+#line 3242 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -9046,7 +9049,7 @@ yyreduce:
     break;
 
   case 243:
-#line 3268 "Gmsh.y"
+#line 3271 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
        try {
@@ -9061,7 +9064,7 @@ yyreduce:
     break;
 
   case 244:
-#line 3280 "Gmsh.y"
+#line 3283 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -9088,14 +9091,14 @@ yyreduce:
     break;
 
   case 245:
-#line 3304 "Gmsh.y"
+#line 3307 "Gmsh.y"
     {
       Msg::Exit(0);
     ;}
     break;
 
   case 246:
-#line 3308 "Gmsh.y"
+#line 3311 "Gmsh.y"
     {
       gmsh_yyerrorstate = 999; // this will be checked when yyparse returns
       YYABORT;
@@ -9103,7 +9106,7 @@ yyreduce:
     break;
 
   case 247:
-#line 3313 "Gmsh.y"
+#line 3316 "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
@@ -9113,7 +9116,7 @@ yyreduce:
     break;
 
   case 248:
-#line 3320 "Gmsh.y"
+#line 3323 "Gmsh.y"
     {
       new GModel();
       GModel::current(GModel::list.size() - 1);
@@ -9121,7 +9124,7 @@ yyreduce:
     break;
 
   case 249:
-#line 3325 "Gmsh.y"
+#line 3328 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
@@ -9130,7 +9133,7 @@ yyreduce:
     break;
 
   case 250:
-#line 3331 "Gmsh.y"
+#line 3334 "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));
@@ -9138,7 +9141,7 @@ yyreduce:
     break;
 
   case 251:
-#line 3336 "Gmsh.y"
+#line 3339 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -9147,7 +9150,7 @@ yyreduce:
     break;
 
   case 252:
-#line 3342 "Gmsh.y"
+#line 3345 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
      CTX::instance()->mesh.changed = ENT_ALL;
@@ -9158,21 +9161,21 @@ yyreduce:
     break;
 
   case 253:
-#line 3350 "Gmsh.y"
+#line 3353 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh();
     ;}
     break;
 
   case 254:
-#line 3354 "Gmsh.y"
+#line 3357 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh(1);
     ;}
     break;
 
   case 255:
-#line 3358 "Gmsh.y"
+#line 3361 "Gmsh.y"
     {
       GModel::current()->importGEOInternals();
       GModel::current()->refineMesh(CTX::instance()->mesh.secondOrderLinear);
@@ -9180,7 +9183,7 @@ yyreduce:
     break;
 
   case 256:
-#line 3364 "Gmsh.y"
+#line 3367 "Gmsh.y"
     {
       int lock = CTX::instance()->lock;
       CTX::instance()->lock = 0;
@@ -9237,7 +9240,7 @@ yyreduce:
     break;
 
   case 257:
-#line 3423 "Gmsh.y"
+#line 3426 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -9257,7 +9260,7 @@ yyreduce:
     break;
 
   case 258:
-#line 3440 "Gmsh.y"
+#line 3443 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -9277,7 +9280,7 @@ yyreduce:
     break;
 
   case 259:
-#line 3457 "Gmsh.y"
+#line 3460 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -9302,7 +9305,7 @@ yyreduce:
     break;
 
   case 260:
-#line 3479 "Gmsh.y"
+#line 3482 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -9327,7 +9330,7 @@ yyreduce:
     break;
 
   case 261:
-#line 3501 "Gmsh.y"
+#line 3504 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -9365,7 +9368,7 @@ yyreduce:
     break;
 
   case 262:
-#line 3536 "Gmsh.y"
+#line 3539 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9376,7 +9379,7 @@ yyreduce:
     break;
 
   case 263:
-#line 3544 "Gmsh.y"
+#line 3547 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9387,7 +9390,7 @@ yyreduce:
     break;
 
   case 264:
-#line 3552 "Gmsh.y"
+#line 3555 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9396,7 +9399,7 @@ yyreduce:
     break;
 
   case 265:
-#line 3558 "Gmsh.y"
+#line 3561 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9406,7 +9409,7 @@ yyreduce:
     break;
 
   case 266:
-#line 3565 "Gmsh.y"
+#line 3568 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -9416,7 +9419,7 @@ yyreduce:
     break;
 
   case 267:
-#line 3572 "Gmsh.y"
+#line 3575 "Gmsh.y"
     {
       ImbricatedTest++;
       if(ImbricatedTest > MAX_RECUR_TESTS-1){
@@ -9439,7 +9442,7 @@ yyreduce:
     break;
 
   case 268:
-#line 3592 "Gmsh.y"
+#line 3595 "Gmsh.y"
     {
       if(ImbricatedTest > 0){
         if (statusImbricatedTests[ImbricatedTest]){
@@ -9468,7 +9471,7 @@ yyreduce:
     break;
 
   case 269:
-#line 3618 "Gmsh.y"
+#line 3621 "Gmsh.y"
     {
       if(ImbricatedTest > 0){
         if(statusImbricatedTests[ImbricatedTest]){
@@ -9483,7 +9486,7 @@ yyreduce:
     break;
 
   case 270:
-#line 3630 "Gmsh.y"
+#line 3633 "Gmsh.y"
     {
       ImbricatedTest--;
       if(ImbricatedTest < 0)
@@ -9492,7 +9495,7 @@ yyreduce:
     break;
 
   case 271:
-#line 3642 "Gmsh.y"
+#line 3645 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l),
@@ -9503,7 +9506,7 @@ yyreduce:
     break;
 
   case 272:
-#line 3650 "Gmsh.y"
+#line 3653 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l),
@@ -9514,7 +9517,7 @@ yyreduce:
     break;
 
   case 273:
-#line 3658 "Gmsh.y"
+#line 3661 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l),
@@ -9525,7 +9528,7 @@ yyreduce:
     break;
 
   case 274:
-#line 3666 "Gmsh.y"
+#line 3669 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9534,7 +9537,7 @@ yyreduce:
     break;
 
   case 275:
-#line 3672 "Gmsh.y"
+#line 3675 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l),
@@ -9545,7 +9548,7 @@ yyreduce:
     break;
 
   case 276:
-#line 3680 "Gmsh.y"
+#line 3683 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9554,7 +9557,7 @@ yyreduce:
     break;
 
   case 277:
-#line 3686 "Gmsh.y"
+#line 3689 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l),
@@ -9565,7 +9568,7 @@ yyreduce:
     break;
 
   case 278:
-#line 3694 "Gmsh.y"
+#line 3697 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9574,7 +9577,7 @@ yyreduce:
     break;
 
   case 279:
-#line 3700 "Gmsh.y"
+#line 3703 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l),
@@ -9585,7 +9588,7 @@ yyreduce:
     break;
 
   case 280:
-#line 3708 "Gmsh.y"
+#line 3711 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9594,7 +9597,7 @@ yyreduce:
     break;
 
   case 281:
-#line 3714 "Gmsh.y"
+#line 3717 "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.,
@@ -9604,7 +9607,7 @@ yyreduce:
     break;
 
   case 282:
-#line 3722 "Gmsh.y"
+#line 3725 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d),
@@ -9614,7 +9617,7 @@ yyreduce:
     break;
 
   case 283:
-#line 3729 "Gmsh.y"
+#line 3732 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d),
@@ -9624,7 +9627,7 @@ yyreduce:
     break;
 
   case 284:
-#line 3736 "Gmsh.y"
+#line 3739 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d),
@@ -9634,7 +9637,7 @@ yyreduce:
     break;
 
   case 285:
-#line 3743 "Gmsh.y"
+#line 3746 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -9644,7 +9647,7 @@ yyreduce:
     break;
 
   case 286:
-#line 3750 "Gmsh.y"
+#line 3753 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -9654,7 +9657,7 @@ yyreduce:
     break;
 
   case 287:
-#line 3757 "Gmsh.y"
+#line 3760 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -9664,7 +9667,7 @@ yyreduce:
     break;
 
   case 288:
-#line 3764 "Gmsh.y"
+#line 3767 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d),
@@ -9674,7 +9677,7 @@ yyreduce:
     break;
 
   case 289:
-#line 3771 "Gmsh.y"
+#line 3774 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d),
@@ -9684,7 +9687,7 @@ yyreduce:
     break;
 
   case 290:
-#line 3778 "Gmsh.y"
+#line 3781 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d),
@@ -9694,7 +9697,7 @@ yyreduce:
     break;
 
   case 291:
-#line 3785 "Gmsh.y"
+#line 3788 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9703,7 +9706,7 @@ yyreduce:
     break;
 
   case 292:
-#line 3791 "Gmsh.y"
+#line 3794 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -9713,7 +9716,7 @@ yyreduce:
     break;
 
   case 293:
-#line 3798 "Gmsh.y"
+#line 3801 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9722,7 +9725,7 @@ yyreduce:
     break;
 
   case 294:
-#line 3804 "Gmsh.y"
+#line 3807 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -9732,7 +9735,7 @@ yyreduce:
     break;
 
   case 295:
-#line 3811 "Gmsh.y"
+#line 3814 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9741,7 +9744,7 @@ yyreduce:
     break;
 
   case 296:
-#line 3817 "Gmsh.y"
+#line 3820 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -9751,7 +9754,7 @@ yyreduce:
     break;
 
   case 297:
-#line 3824 "Gmsh.y"
+#line 3827 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9760,7 +9763,7 @@ yyreduce:
     break;
 
   case 298:
-#line 3830 "Gmsh.y"
+#line 3833 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d),
@@ -9770,7 +9773,7 @@ yyreduce:
     break;
 
   case 299:
-#line 3837 "Gmsh.y"
+#line 3840 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9779,7 +9782,7 @@ yyreduce:
     break;
 
   case 300:
-#line 3843 "Gmsh.y"
+#line 3846 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d),
@@ -9789,7 +9792,7 @@ yyreduce:
     break;
 
   case 301:
-#line 3850 "Gmsh.y"
+#line 3853 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9798,7 +9801,7 @@ yyreduce:
     break;
 
   case 302:
-#line 3856 "Gmsh.y"
+#line 3859 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d),
@@ -9808,7 +9811,7 @@ yyreduce:
     break;
 
   case 303:
-#line 3863 "Gmsh.y"
+#line 3866 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9817,7 +9820,7 @@ yyreduce:
     break;
 
   case 304:
-#line 3869 "Gmsh.y"
+#line 3872 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d),
@@ -9827,7 +9830,7 @@ yyreduce:
     break;
 
   case 305:
-#line 3876 "Gmsh.y"
+#line 3879 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9836,7 +9839,7 @@ yyreduce:
     break;
 
   case 306:
-#line 3882 "Gmsh.y"
+#line 3885 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d),
@@ -9846,7 +9849,7 @@ yyreduce:
     break;
 
   case 307:
-#line 3889 "Gmsh.y"
+#line 3892 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -9855,7 +9858,7 @@ yyreduce:
     break;
 
   case 308:
-#line 3895 "Gmsh.y"
+#line 3898 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d),
@@ -9865,19 +9868,19 @@ yyreduce:
     break;
 
   case 309:
-#line 3906 "Gmsh.y"
+#line 3909 "Gmsh.y"
     {
     ;}
     break;
 
   case 310:
-#line 3909 "Gmsh.y"
+#line 3912 "Gmsh.y"
     {
     ;}
     break;
 
   case 311:
-#line 3915 "Gmsh.y"
+#line 3918 "Gmsh.y"
     {
       int n = (int)fabs((yyvsp[(3) - (5)].d));
       if(n){ // we accept n==0 to easily disable layers
@@ -9892,7 +9895,7 @@ yyreduce:
     break;
 
   case 312:
-#line 3927 "Gmsh.y"
+#line 3930 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -9915,7 +9918,7 @@ yyreduce:
     break;
 
   case 313:
-#line 3947 "Gmsh.y"
+#line 3950 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -9941,42 +9944,42 @@ yyreduce:
     break;
 
   case 314:
-#line 3971 "Gmsh.y"
+#line 3974 "Gmsh.y"
     {
       extr.mesh.ScaleLast = true;
     ;}
     break;
 
   case 315:
-#line 3975 "Gmsh.y"
+#line 3978 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 316:
-#line 3979 "Gmsh.y"
+#line 3982 "Gmsh.y"
     {
       extr.mesh.Recombine = (yyvsp[(2) - (3)].d) ? true : false;
     ;}
     break;
 
   case 317:
-#line 3983 "Gmsh.y"
+#line 3986 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     ;}
     break;
 
   case 318:
-#line 3987 "Gmsh.y"
+#line 3990 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     ;}
     break;
 
   case 319:
-#line 3991 "Gmsh.y"
+#line 3994 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -9985,7 +9988,7 @@ yyreduce:
     break;
 
   case 320:
-#line 3997 "Gmsh.y"
+#line 4000 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -9994,35 +9997,35 @@ yyreduce:
     break;
 
   case 321:
-#line 4003 "Gmsh.y"
+#line 4006 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
     ;}
     break;
 
   case 322:
-#line 4007 "Gmsh.y"
+#line 4010 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
     ;}
     break;
 
   case 323:
-#line 4011 "Gmsh.y"
+#line 4014 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
     ;}
     break;
 
   case 324:
-#line 4015 "Gmsh.y"
+#line 4018 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
     ;}
     break;
 
   case 325:
-#line 4019 "Gmsh.y"
+#line 4022 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -10044,7 +10047,7 @@ yyreduce:
     break;
 
   case 326:
-#line 4038 "Gmsh.y"
+#line 4041 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "Index"))
         extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d);
@@ -10055,14 +10058,14 @@ yyreduce:
     break;
 
   case 327:
-#line 4050 "Gmsh.y"
+#line 4053 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
     break;
 
   case 328:
-#line 4054 "Gmsh.y"
+#line 4057 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -10078,14 +10081,14 @@ yyreduce:
     break;
 
   case 329:
-#line 4069 "Gmsh.y"
+#line 4072 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
     break;
 
   case 330:
-#line 4073 "Gmsh.y"
+#line 4076 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -10102,49 +10105,49 @@ yyreduce:
     break;
 
   case 331:
-#line 4089 "Gmsh.y"
+#line 4092 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
     break;
 
   case 332:
-#line 4093 "Gmsh.y"
+#line 4096 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
     break;
 
   case 333:
-#line 4098 "Gmsh.y"
+#line 4101 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
     break;
 
   case 334:
-#line 4102 "Gmsh.y"
+#line 4105 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
     break;
 
   case 335:
-#line 4108 "Gmsh.y"
+#line 4111 "Gmsh.y"
     {
       (yyval.l) = List_Create(1, 1, sizeof(double));
     ;}
     break;
 
   case 336:
-#line 4112 "Gmsh.y"
+#line 4115 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
     ;}
     break;
 
   case 337:
-#line 4119 "Gmsh.y"
+#line 4122 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -10203,7 +10206,7 @@ yyreduce:
     break;
 
   case 338:
-#line 4175 "Gmsh.y"
+#line 4178 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -10276,7 +10279,7 @@ yyreduce:
     break;
 
   case 339:
-#line 4245 "Gmsh.y"
+#line 4248 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -10284,7 +10287,7 @@ yyreduce:
     break;
 
   case 340:
-#line 4250 "Gmsh.y"
+#line 4253 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -10354,7 +10357,7 @@ yyreduce:
     break;
 
   case 341:
-#line 4317 "Gmsh.y"
+#line 4320 "Gmsh.y"
     {
       if(!(yyvsp[(2) - (3)].l)){
   	  List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -10393,7 +10396,7 @@ yyreduce:
     break;
 
   case 342:
-#line 4353 "Gmsh.y"
+#line 4356 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (8)].l)); i++){
 	double d;
@@ -10404,7 +10407,7 @@ yyreduce:
     break;
 
   case 343:
-#line 4361 "Gmsh.y"
+#line 4364 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -10450,7 +10453,7 @@ yyreduce:
     break;
 
   case 344:
-#line 4404 "Gmsh.y"
+#line 4407 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -10492,7 +10495,7 @@ yyreduce:
     break;
 
   case 345:
-#line 4443 "Gmsh.y"
+#line 4446 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
         double d;
@@ -10515,7 +10518,7 @@ yyreduce:
     break;
 
   case 346:
-#line 4464 "Gmsh.y"
+#line 4467 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (11)].l)) != List_Nbr((yyvsp[(8) - (11)].l))){
         yymsg(0, "Number of master lines (%d) different from number of "
@@ -10549,7 +10552,7 @@ yyreduce:
     break;
 
   case 347:
-#line 4496 "Gmsh.y"
+#line 4499 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (11)].l)) != List_Nbr((yyvsp[(8) - (11)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -10578,7 +10581,7 @@ yyreduce:
     break;
 
   case 348:
-#line 4523 "Gmsh.y"
+#line 4526 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (18)].l)) != List_Nbr((yyvsp[(8) - (18)].l))){
         yymsg(0, "Number of master edges (%d) different from number of "
@@ -10606,7 +10609,7 @@ yyreduce:
     break;
 
   case 349:
-#line 4549 "Gmsh.y"
+#line 4552 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (18)].l)) != List_Nbr((yyvsp[(8) - (18)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -10634,7 +10637,7 @@ yyreduce:
     break;
 
   case 350:
-#line 4575 "Gmsh.y"
+#line 4578 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (12)].l)) != List_Nbr((yyvsp[(8) - (12)].l))){
         yymsg(0, "Number of master edges (%d) different from number of "
@@ -10662,7 +10665,7 @@ yyreduce:
     break;
 
   case 351:
-#line 4601 "Gmsh.y"
+#line 4604 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (12)].l)) != List_Nbr((yyvsp[(8) - (12)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -10690,7 +10693,7 @@ yyreduce:
     break;
 
   case 352:
-#line 4627 "Gmsh.y"
+#line 4630 "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 "
@@ -10714,7 +10717,7 @@ yyreduce:
     break;
 
   case 353:
-#line 4648 "Gmsh.y"
+#line 4651 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -10745,7 +10748,7 @@ yyreduce:
     break;
 
   case 354:
-#line 4676 "Gmsh.y"
+#line 4679 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -10776,7 +10779,7 @@ yyreduce:
     break;
 
   case 355:
-#line 4704 "Gmsh.y"
+#line 4707 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -10807,7 +10810,7 @@ yyreduce:
     break;
 
   case 356:
-#line 4732 "Gmsh.y"
+#line 4735 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -10838,7 +10841,7 @@ yyreduce:
     break;
 
   case 357:
-#line 4760 "Gmsh.y"
+#line 4763 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -10869,7 +10872,7 @@ yyreduce:
     break;
 
   case 358:
-#line 4788 "Gmsh.y"
+#line 4791 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -10911,7 +10914,7 @@ yyreduce:
     break;
 
   case 359:
-#line 4827 "Gmsh.y"
+#line 4830 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
@@ -10953,7 +10956,7 @@ yyreduce:
     break;
 
   case 360:
-#line 4866 "Gmsh.y"
+#line 4869 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::viter it = GModel::current()->firstVertex();
@@ -10977,7 +10980,7 @@ yyreduce:
     break;
 
   case 361:
-#line 4887 "Gmsh.y"
+#line 4890 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::eiter it = GModel::current()->firstEdge();
@@ -11001,7 +11004,7 @@ yyreduce:
     break;
 
   case 362:
-#line 4908 "Gmsh.y"
+#line 4911 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::fiter it = GModel::current()->firstFace();
@@ -11025,14 +11028,14 @@ yyreduce:
     break;
 
   case 363:
-#line 4935 "Gmsh.y"
+#line 4938 "Gmsh.y"
     {
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 364:
-#line 4939 "Gmsh.y"
+#line 4942 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -11045,7 +11048,7 @@ yyreduce:
     break;
 
   case 365:
-#line 4949 "Gmsh.y"
+#line 4952 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (6)].l)) >= 2){
         double d;
@@ -11078,22 +11081,22 @@ yyreduce:
     break;
 
   case 366:
-#line 4983 "Gmsh.y"
+#line 4986 "Gmsh.y"
     { (yyval.c) = (char*)"Homology"; ;}
     break;
 
   case 367:
-#line 4984 "Gmsh.y"
+#line 4987 "Gmsh.y"
     { (yyval.c) = (char*)"Cohomology"; ;}
     break;
 
   case 368:
-#line 4985 "Gmsh.y"
+#line 4988 "Gmsh.y"
     { (yyval.c) = (char*)"Betti"; ;}
     break;
 
   case 369:
-#line 4990 "Gmsh.y"
+#line 4993 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < 4; i++) dim.push_back(i);
@@ -11102,7 +11105,7 @@ yyreduce:
     break;
 
   case 370:
-#line 4996 "Gmsh.y"
+#line 4999 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@ -11117,7 +11120,7 @@ yyreduce:
     break;
 
   case 371:
-#line 5008 "Gmsh.y"
+#line 5011 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@ -11138,7 +11141,7 @@ yyreduce:
     break;
 
   case 372:
-#line 5026 "Gmsh.y"
+#line 5029 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){
@@ -11164,47 +11167,47 @@ yyreduce:
     break;
 
   case 373:
-#line 5053 "Gmsh.y"
+#line 5056 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 374:
-#line 5054 "Gmsh.y"
+#line 5057 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 375:
-#line 5055 "Gmsh.y"
+#line 5058 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 376:
-#line 5056 "Gmsh.y"
+#line 5059 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 377:
-#line 5057 "Gmsh.y"
+#line 5060 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 378:
-#line 5058 "Gmsh.y"
+#line 5061 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 379:
-#line 5059 "Gmsh.y"
+#line 5062 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 380:
-#line 5060 "Gmsh.y"
+#line 5063 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 381:
-#line 5062 "Gmsh.y"
+#line 5065 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -11214,232 +11217,232 @@ yyreduce:
     break;
 
   case 382:
-#line 5068 "Gmsh.y"
+#line 5071 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 383:
-#line 5069 "Gmsh.y"
+#line 5072 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 384:
-#line 5070 "Gmsh.y"
+#line 5073 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 385:
-#line 5071 "Gmsh.y"
+#line 5074 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 386:
-#line 5072 "Gmsh.y"
+#line 5075 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 387:
-#line 5073 "Gmsh.y"
+#line 5076 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 388:
-#line 5074 "Gmsh.y"
+#line 5077 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 389:
-#line 5075 "Gmsh.y"
+#line 5078 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 390:
-#line 5076 "Gmsh.y"
+#line 5079 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 391:
-#line 5077 "Gmsh.y"
+#line 5080 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 392:
-#line 5078 "Gmsh.y"
+#line 5081 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 393:
-#line 5079 "Gmsh.y"
+#line 5082 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 394:
-#line 5080 "Gmsh.y"
+#line 5083 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 395:
-#line 5081 "Gmsh.y"
+#line 5084 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 396:
-#line 5082 "Gmsh.y"
+#line 5085 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 397:
-#line 5083 "Gmsh.y"
+#line 5086 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 398:
-#line 5084 "Gmsh.y"
+#line 5087 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 399:
-#line 5085 "Gmsh.y"
+#line 5088 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 400:
-#line 5086 "Gmsh.y"
+#line 5089 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 401:
-#line 5087 "Gmsh.y"
+#line 5090 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 402:
-#line 5088 "Gmsh.y"
+#line 5091 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 403:
-#line 5089 "Gmsh.y"
+#line 5092 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 404:
-#line 5090 "Gmsh.y"
+#line 5093 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 405:
-#line 5091 "Gmsh.y"
+#line 5094 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 406:
-#line 5092 "Gmsh.y"
+#line 5095 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 407:
-#line 5093 "Gmsh.y"
+#line 5096 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 408:
-#line 5094 "Gmsh.y"
+#line 5097 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 409:
-#line 5095 "Gmsh.y"
+#line 5098 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 410:
-#line 5096 "Gmsh.y"
+#line 5099 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); ;}
     break;
 
   case 411:
-#line 5097 "Gmsh.y"
+#line 5100 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 412:
-#line 5098 "Gmsh.y"
+#line 5101 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 413:
-#line 5099 "Gmsh.y"
+#line 5102 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 414:
-#line 5100 "Gmsh.y"
+#line 5103 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 415:
-#line 5109 "Gmsh.y"
+#line 5112 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 416:
-#line 5110 "Gmsh.y"
+#line 5113 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 417:
-#line 5111 "Gmsh.y"
+#line 5114 "Gmsh.y"
     { (yyval.d) = (double)ImbricatedTest; ;}
     break;
 
   case 418:
-#line 5112 "Gmsh.y"
+#line 5115 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 419:
-#line 5113 "Gmsh.y"
+#line 5116 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 420:
-#line 5114 "Gmsh.y"
+#line 5117 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 421:
-#line 5115 "Gmsh.y"
+#line 5118 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 422:
-#line 5116 "Gmsh.y"
+#line 5119 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 423:
-#line 5117 "Gmsh.y"
+#line 5120 "Gmsh.y"
     { (yyval.d) = Cpu(); ;}
     break;
 
   case 424:
-#line 5118 "Gmsh.y"
+#line 5121 "Gmsh.y"
     { (yyval.d) = GetMemoryUsage()/1024./1024.; ;}
     break;
 
   case 425:
-#line 5119 "Gmsh.y"
+#line 5122 "Gmsh.y"
     { (yyval.d) = TotalRam(); ;}
     break;
 
   case 426:
-#line 5124 "Gmsh.y"
+#line 5127 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 427:
-#line 5126 "Gmsh.y"
+#line 5129 "Gmsh.y"
     {
       std::vector<double> val(1, (yyvsp[(3) - (6)].d));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -11448,7 +11451,7 @@ yyreduce:
     break;
 
   case 428:
-#line 5132 "Gmsh.y"
+#line 5135 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -11456,7 +11459,7 @@ yyreduce:
     break;
 
   case 429:
-#line 5137 "Gmsh.y"
+#line 5140 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -11464,7 +11467,7 @@ yyreduce:
     break;
 
   case 430:
-#line 5142 "Gmsh.y"
+#line 5145 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -11484,7 +11487,7 @@ yyreduce:
     break;
 
   case 431:
-#line 5159 "Gmsh.y"
+#line 5162 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -11505,7 +11508,7 @@ yyreduce:
     break;
 
   case 432:
-#line 5177 "Gmsh.y"
+#line 5180 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -11526,7 +11529,7 @@ yyreduce:
     break;
 
   case 433:
-#line 5195 "Gmsh.y"
+#line 5198 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -11547,7 +11550,7 @@ yyreduce:
     break;
 
   case 434:
-#line 5213 "Gmsh.y"
+#line 5216 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -11568,7 +11571,7 @@ yyreduce:
     break;
 
   case 435:
-#line 5231 "Gmsh.y"
+#line 5234 "Gmsh.y"
     {
       (yyval.d) = gmsh_yysymbols.count((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -11576,7 +11579,7 @@ yyreduce:
     break;
 
   case 436:
-#line 5236 "Gmsh.y"
+#line 5239 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.d) = !StatFile(tmp);
@@ -11585,7 +11588,7 @@ yyreduce:
     break;
 
   case 437:
-#line 5242 "Gmsh.y"
+#line 5245 "Gmsh.y"
     {
       if(gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
         gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(2) - (4)].c)]);
@@ -11603,7 +11606,7 @@ yyreduce:
     break;
 
   case 438:
-#line 5257 "Gmsh.y"
+#line 5260 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -11625,7 +11628,7 @@ yyreduce:
     break;
 
   case 439:
-#line 5276 "Gmsh.y"
+#line 5279 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -11648,7 +11651,7 @@ yyreduce:
     break;
 
   case 440:
-#line 5296 "Gmsh.y"
+#line 5299 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -11671,7 +11674,7 @@ yyreduce:
     break;
 
   case 441:
-#line 5316 "Gmsh.y"
+#line 5319 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -11694,7 +11697,7 @@ yyreduce:
     break;
 
   case 442:
-#line 5336 "Gmsh.y"
+#line 5339 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -11717,7 +11720,7 @@ yyreduce:
     break;
 
   case 443:
-#line 5359 "Gmsh.y"
+#line 5362 "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));
@@ -11725,7 +11728,7 @@ yyreduce:
     break;
 
   case 444:
-#line 5364 "Gmsh.y"
+#line 5367 "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));
@@ -11733,7 +11736,7 @@ yyreduce:
     break;
 
   case 445:
-#line 5369 "Gmsh.y"
+#line 5372 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -11746,7 +11749,7 @@ yyreduce:
     break;
 
   case 446:
-#line 5379 "Gmsh.y"
+#line 5382 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -11759,7 +11762,7 @@ yyreduce:
     break;
 
   case 447:
-#line 5389 "Gmsh.y"
+#line 5392 "Gmsh.y"
     {
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -11767,7 +11770,7 @@ yyreduce:
     break;
 
   case 448:
-#line 5394 "Gmsh.y"
+#line 5397 "Gmsh.y"
     {
       int matches = 0;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
@@ -11781,7 +11784,7 @@ yyreduce:
     break;
 
   case 449:
-#line 5405 "Gmsh.y"
+#line 5408 "Gmsh.y"
     {
       std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c));
       if(s.find(substr) != std::string::npos)
@@ -11793,7 +11796,7 @@ yyreduce:
     break;
 
   case 450:
-#line 5414 "Gmsh.y"
+#line 5417 "Gmsh.y"
     {
       (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
@@ -11801,7 +11804,7 @@ yyreduce:
     break;
 
   case 451:
-#line 5419 "Gmsh.y"
+#line 5422 "Gmsh.y"
     {
       int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
       if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){
@@ -11828,70 +11831,70 @@ yyreduce:
     break;
 
   case 452:
-#line 5446 "Gmsh.y"
+#line 5449 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 453:
-#line 5450 "Gmsh.y"
+#line 5453 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 454:
-#line 5454 "Gmsh.y"
+#line 5457 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 455:
-#line 5458 "Gmsh.y"
+#line 5461 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 456:
-#line 5462 "Gmsh.y"
+#line 5465 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 457:
-#line 5469 "Gmsh.y"
+#line 5472 "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);
     ;}
     break;
 
   case 458:
-#line 5473 "Gmsh.y"
+#line 5476 "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;
     ;}
     break;
 
   case 459:
-#line 5477 "Gmsh.y"
+#line 5480 "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;
     ;}
     break;
 
   case 460:
-#line 5481 "Gmsh.y"
+#line 5484 "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;
     ;}
     break;
 
   case 461:
-#line 5488 "Gmsh.y"
+#line 5491 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -11899,14 +11902,14 @@ yyreduce:
     break;
 
   case 462:
-#line 5493 "Gmsh.y"
+#line 5496 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 463:
-#line 5500 "Gmsh.y"
+#line 5503 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -11914,14 +11917,14 @@ yyreduce:
     break;
 
   case 464:
-#line 5505 "Gmsh.y"
+#line 5508 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 465:
-#line 5509 "Gmsh.y"
+#line 5512 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -11929,14 +11932,14 @@ yyreduce:
     break;
 
   case 466:
-#line 5514 "Gmsh.y"
+#line 5517 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 467:
-#line 5518 "Gmsh.y"
+#line 5521 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11947,7 +11950,7 @@ yyreduce:
     break;
 
   case 468:
-#line 5526 "Gmsh.y"
+#line 5529 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11958,14 +11961,14 @@ yyreduce:
     break;
 
   case 469:
-#line 5537 "Gmsh.y"
+#line 5540 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 470:
-#line 5541 "Gmsh.y"
+#line 5544 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -11977,7 +11980,7 @@ yyreduce:
     break;
 
   case 471:
-#line 5553 "Gmsh.y"
+#line 5556 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11988,7 +11991,7 @@ yyreduce:
     break;
 
   case 472:
-#line 5561 "Gmsh.y"
+#line 5564 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11999,7 +12002,7 @@ yyreduce:
     break;
 
   case 473:
-#line 5569 "Gmsh.y"
+#line 5572 "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));
@@ -12009,7 +12012,7 @@ yyreduce:
     break;
 
   case 474:
-#line 5576 "Gmsh.y"
+#line 5579 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[(5) - (5)].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@ -12022,7 +12025,7 @@ yyreduce:
     break;
 
   case 475:
-#line 5586 "Gmsh.y"
+#line 5589 "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
@@ -12054,63 +12057,63 @@ yyreduce:
     break;
 
   case 476:
-#line 5615 "Gmsh.y"
+#line 5618 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(0);
     ;}
     break;
 
   case 477:
-#line 5619 "Gmsh.y"
+#line 5622 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(1);
     ;}
     break;
 
   case 478:
-#line 5623 "Gmsh.y"
+#line 5626 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(2);
     ;}
     break;
 
   case 479:
-#line 5627 "Gmsh.y"
+#line 5630 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(3);
     ;}
     break;
 
   case 480:
-#line 5631 "Gmsh.y"
+#line 5634 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(0);
     ;}
     break;
 
   case 481:
-#line 5635 "Gmsh.y"
+#line 5638 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(1);
     ;}
     break;
 
   case 482:
-#line 5639 "Gmsh.y"
+#line 5642 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(2);
     ;}
     break;
 
   case 483:
-#line 5643 "Gmsh.y"
+#line 5646 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(3);
     ;}
     break;
 
   case 484:
-#line 5647 "Gmsh.y"
+#line 5650 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -12142,7 +12145,7 @@ yyreduce:
     break;
 
   case 485:
-#line 5676 "Gmsh.y"
+#line 5679 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -12174,7 +12177,7 @@ yyreduce:
     break;
 
   case 486:
-#line 5705 "Gmsh.y"
+#line 5708 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -12206,7 +12209,7 @@ yyreduce:
     break;
 
   case 487:
-#line 5734 "Gmsh.y"
+#line 5737 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -12238,7 +12241,7 @@ yyreduce:
     break;
 
   case 488:
-#line 5764 "Gmsh.y"
+#line 5767 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -12253,7 +12256,7 @@ yyreduce:
     break;
 
   case 489:
-#line 5777 "Gmsh.y"
+#line 5780 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -12268,7 +12271,7 @@ yyreduce:
     break;
 
   case 490:
-#line 5790 "Gmsh.y"
+#line 5793 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -12283,7 +12286,7 @@ yyreduce:
     break;
 
   case 491:
-#line 5803 "Gmsh.y"
+#line 5806 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -12298,7 +12301,7 @@ yyreduce:
     break;
 
   case 492:
-#line 5815 "Gmsh.y"
+#line 5818 "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++){
@@ -12311,7 +12314,7 @@ yyreduce:
     break;
 
   case 493:
-#line 5825 "Gmsh.y"
+#line 5828 "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++){
@@ -12324,7 +12327,7 @@ yyreduce:
     break;
 
   case 494:
-#line 5835 "Gmsh.y"
+#line 5838 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -12339,7 +12342,7 @@ yyreduce:
     break;
 
   case 495:
-#line 5847 "Gmsh.y"
+#line 5850 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -12354,7 +12357,7 @@ yyreduce:
     break;
 
   case 496:
-#line 5860 "Gmsh.y"
+#line 5863 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@ -12369,35 +12372,35 @@ yyreduce:
     break;
 
   case 497:
-#line 5872 "Gmsh.y"
+#line 5875 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
     ;}
     break;
 
   case 498:
-#line 5876 "Gmsh.y"
+#line 5879 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
     ;}
     break;
 
   case 499:
-#line 5880 "Gmsh.y"
+#line 5883 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (6)].l);
     ;}
     break;
 
   case 500:
-#line 5884 "Gmsh.y"
+#line 5887 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (6)].l);
     ;}
     break;
 
   case 501:
-#line 5888 "Gmsh.y"
+#line 5891 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -12418,7 +12421,7 @@ yyreduce:
     break;
 
   case 502:
-#line 5906 "Gmsh.y"
+#line 5909 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -12439,7 +12442,7 @@ yyreduce:
     break;
 
   case 503:
-#line 5927 "Gmsh.y"
+#line 5930 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -12447,21 +12450,21 @@ yyreduce:
     break;
 
   case 504:
-#line 5932 "Gmsh.y"
+#line 5935 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 505:
-#line 5936 "Gmsh.y"
+#line 5939 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 506:
-#line 5940 "Gmsh.y"
+#line 5943 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -12473,21 +12476,21 @@ yyreduce:
     break;
 
   case 507:
-#line 5952 "Gmsh.y"
+#line 5955 "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));
     ;}
     break;
 
   case 508:
-#line 5956 "Gmsh.y"
+#line 5959 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 509:
-#line 5968 "Gmsh.y"
+#line 5971 "Gmsh.y"
     {
       int flag = 0;
       if(gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
@@ -12507,7 +12510,7 @@ yyreduce:
     break;
 
   case 510:
-#line 5985 "Gmsh.y"
+#line 5988 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -12517,14 +12520,14 @@ yyreduce:
     break;
 
   case 511:
-#line 5995 "Gmsh.y"
+#line 5998 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 512:
-#line 5999 "Gmsh.y"
+#line 6002 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -12539,7 +12542,7 @@ yyreduce:
     break;
 
   case 513:
-#line 6014 "Gmsh.y"
+#line 6017 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -12547,21 +12550,21 @@ yyreduce:
     break;
 
   case 514:
-#line 6019 "Gmsh.y"
+#line 6022 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 515:
-#line 6026 "Gmsh.y"
+#line 6029 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 516:
-#line 6030 "Gmsh.y"
+#line 6033 "Gmsh.y"
     {
       std::string val;
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c)))
@@ -12577,7 +12580,7 @@ yyreduce:
     break;
 
   case 517:
-#line 6043 "Gmsh.y"
+#line 6046 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -12594,7 +12597,7 @@ yyreduce:
     break;
 
   case 518:
-#line 6057 "Gmsh.y"
+#line 6060 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -12611,7 +12614,7 @@ yyreduce:
     break;
 
   case 519:
-#line 6071 "Gmsh.y"
+#line 6074 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -12628,7 +12631,7 @@ yyreduce:
     break;
 
   case 520:
-#line 6085 "Gmsh.y"
+#line 6088 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -12645,7 +12648,7 @@ yyreduce:
     break;
 
   case 521:
-#line 6099 "Gmsh.y"
+#line 6102 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -12656,7 +12659,7 @@ yyreduce:
     break;
 
   case 522:
-#line 6107 "Gmsh.y"
+#line 6110 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -12667,21 +12670,21 @@ yyreduce:
     break;
 
   case 523:
-#line 6118 "Gmsh.y"
+#line 6121 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 524:
-#line 6122 "Gmsh.y"
+#line 6125 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 525:
-#line 6126 "Gmsh.y"
+#line 6129 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -12692,7 +12695,7 @@ yyreduce:
     break;
 
   case 526:
-#line 6134 "Gmsh.y"
+#line 6137 "Gmsh.y"
     {
       std::string exe = Msg::GetExecutableName();
       (yyval.c) = (char *)Malloc(exe.size() + 1);
@@ -12701,7 +12704,7 @@ yyreduce:
     break;
 
   case 527:
-#line 6140 "Gmsh.y"
+#line 6143 "Gmsh.y"
     {
       std::string action = Msg::GetOnelabAction();
       (yyval.c) = (char *)Malloc(action.size() + 1);
@@ -12710,7 +12713,7 @@ yyreduce:
     break;
 
   case 528:
-#line 6146 "Gmsh.y"
+#line 6149 "Gmsh.y"
     {
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -12721,7 +12724,7 @@ yyreduce:
     break;
 
   case 529:
-#line 6154 "Gmsh.y"
+#line 6157 "Gmsh.y"
     {
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -12732,7 +12735,7 @@ yyreduce:
     break;
 
   case 530:
-#line 6162 "Gmsh.y"
+#line 6165 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (4)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -12742,7 +12745,7 @@ yyreduce:
     break;
 
   case 531:
-#line 6169 "Gmsh.y"
+#line 6172 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -12753,7 +12756,7 @@ yyreduce:
     break;
 
   case 532:
-#line 6177 "Gmsh.y"
+#line 6180 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -12771,7 +12774,7 @@ yyreduce:
     break;
 
   case 533:
-#line 6192 "Gmsh.y"
+#line 6195 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -12788,7 +12791,7 @@ yyreduce:
     break;
 
   case 534:
-#line 6206 "Gmsh.y"
+#line 6209 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -12805,7 +12808,7 @@ yyreduce:
     break;
 
   case 535:
-#line 6220 "Gmsh.y"
+#line 6223 "Gmsh.y"
     {
       std::string input = (yyvsp[(3) - (8)].c);
       std::string substr_old = (yyvsp[(5) - (8)].c);
@@ -12820,7 +12823,7 @@ yyreduce:
     break;
 
   case 536:
-#line 6232 "Gmsh.y"
+#line 6235 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -12839,7 +12842,7 @@ yyreduce:
     break;
 
   case 537:
-#line 6248 "Gmsh.y"
+#line 6251 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -12851,7 +12854,7 @@ yyreduce:
     break;
 
   case 538:
-#line 6257 "Gmsh.y"
+#line 6260 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -12863,7 +12866,7 @@ yyreduce:
     break;
 
   case 539:
-#line 6266 "Gmsh.y"
+#line 6269 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -12876,7 +12879,7 @@ yyreduce:
     break;
 
   case 540:
-#line 6276 "Gmsh.y"
+#line 6279 "Gmsh.y"
     {
       if((yyvsp[(3) - (8)].d)){
         (yyval.c) = (yyvsp[(5) - (8)].c);
@@ -12890,14 +12893,14 @@ yyreduce:
     break;
 
   case 541:
-#line 6287 "Gmsh.y"
+#line 6290 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 542:
-#line 6291 "Gmsh.y"
+#line 6294 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -12919,7 +12922,7 @@ yyreduce:
     break;
 
   case 543:
-#line 6310 "Gmsh.y"
+#line 6313 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -12929,7 +12932,7 @@ yyreduce:
     break;
 
   case 544:
-#line 6317 "Gmsh.y"
+#line 6320 "Gmsh.y"
     {
       std::string tmp = SplitFileName(GetAbsolutePath(gmsh_yyname))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -12938,7 +12941,7 @@ yyreduce:
     break;
 
   case 545:
-#line 6323 "Gmsh.y"
+#line 6326 "Gmsh.y"
     {
       std::string tmp = SplitFileName((yyvsp[(3) - (4)].c))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -12948,7 +12951,7 @@ yyreduce:
     break;
 
   case 546:
-#line 6330 "Gmsh.y"
+#line 6333 "Gmsh.y"
     {
       std::string tmp = GetAbsolutePath((yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -12958,12 +12961,12 @@ yyreduce:
     break;
 
   case 547:
-#line 6337 "Gmsh.y"
+#line 6340 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 548:
-#line 6339 "Gmsh.y"
+#line 6342 "Gmsh.y"
     {
       std::string val((yyvsp[(3) - (6)].c));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -12974,7 +12977,7 @@ yyreduce:
     break;
 
   case 549:
-#line 6350 "Gmsh.y"
+#line 6353 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(char*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].c)));
@@ -12982,12 +12985,12 @@ yyreduce:
     break;
 
   case 550:
-#line 6355 "Gmsh.y"
+#line 6358 "Gmsh.y"
     { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); ;}
     break;
 
   case 551:
-#line 6361 "Gmsh.y"
+#line 6364 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -12998,7 +13001,7 @@ yyreduce:
     break;
 
   case 552:
-#line 6370 "Gmsh.y"
+#line 6373 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -13009,23 +13012,23 @@ yyreduce:
     break;
 
   case 553:
-#line 6383 "Gmsh.y"
+#line 6386 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 554:
-#line 6386 "Gmsh.y"
+#line 6389 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 555:
-#line 6390 "Gmsh.y"
+#line 6393 "Gmsh.y"
     { (yyval.c) = (yyvsp[(3) - (4)].c); ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 13029 "Gmsh.tab.cpp"
+#line 13032 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -13239,7 +13242,7 @@ yyreturn:
 }
 
 
-#line 6393 "Gmsh.y"
+#line 6396 "Gmsh.y"
 
 
 void assignVariable(const std::string &name, int index, int assignType,
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index ccbf3103abb1303a10ff0467cbed395f37201c0f..e45e51413ce8fd8558d82272bc62873c2882e511 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -3158,6 +3158,9 @@ Command :
       }
       else if(!strcmp($1, "Merge") || !strcmp($1, "MergeWithBoundingBox")){
 	// MergeWithBoundingBox is deprecated
+        // sync model with new DB here, so that if we e.g. import a STEP file,
+        // we have the correct entity tags and the numberings don't clash
+	GModel::current()->importGEOInternals();
         std::string tmp = FixRelativePath(gmsh_yyname, $2);
 	MergeFile(tmp, true);
       }