diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index c1eee6bab5f80392b526755854f85316b4ba6a12..921c8ad454553c2f8c2124c64e7336324a8559c4 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1057,20 +1057,20 @@ static const yytype_uint16 yyrline[] =
     2781,  2796,  2799,  2805,  2814,  2834,  2857,  2861,  2880,  2893,
     2896,  2912,  2915,  2928,  2931,  2937,  2940,  2947,  3003,  3073,
     3078,  3145,  3188,  3213,  3240,  3284,  3307,  3330,  3333,  3342,
-    3346,  3356,  3390,  3427,  3463,  3498,  3538,  3539,  3540,  3541,
-    3542,  3543,  3544,  3545,  3546,  3553,  3554,  3555,  3556,  3557,
-    3558,  3559,  3560,  3561,  3562,  3563,  3564,  3565,  3566,  3567,
-    3568,  3569,  3570,  3571,  3572,  3573,  3574,  3575,  3576,  3577,
-    3578,  3579,  3580,  3581,  3582,  3583,  3584,  3586,  3587,  3588,
-    3589,  3590,  3591,  3592,  3593,  3594,  3595,  3596,  3597,  3598,
-    3599,  3600,  3601,  3602,  3603,  3604,  3605,  3606,  3615,  3616,
-    3617,  3618,  3619,  3620,  3621,  3625,  3644,  3662,  3677,  3687,
-    3703,  3721,  3726,  3731,  3741,  3751,  3759,  3763,  3767,  3771,
-    3775,  3782,  3786,  3790,  3794,  3801,  3806,  3813,  3818,  3822,
-    3827,  3831,  3839,  3850,  3854,  3866,  3874,  3882,  3889,  3900,
-    3920,  3930,  3940,  3950,  3970,  3975,  3979,  3983,  3995,  3999,
-    4011,  4018,  4028,  4032,  4047,  4052,  4059,  4063,  4076,  4084,
-    4095,  4099,  4107,  4115,  4123,  4131,  4145,  4159,  4163
+    3346,  3356,  3393,  3430,  3466,  3501,  3541,  3542,  3543,  3544,
+    3545,  3546,  3547,  3548,  3549,  3556,  3557,  3558,  3559,  3560,
+    3561,  3562,  3563,  3564,  3565,  3566,  3567,  3568,  3569,  3570,
+    3571,  3572,  3573,  3574,  3575,  3576,  3577,  3578,  3579,  3580,
+    3581,  3582,  3583,  3584,  3585,  3586,  3587,  3589,  3590,  3591,
+    3592,  3593,  3594,  3595,  3596,  3597,  3598,  3599,  3600,  3601,
+    3602,  3603,  3604,  3605,  3606,  3607,  3608,  3609,  3618,  3619,
+    3620,  3621,  3622,  3623,  3624,  3628,  3647,  3665,  3680,  3690,
+    3706,  3724,  3729,  3734,  3744,  3754,  3762,  3766,  3770,  3774,
+    3778,  3785,  3789,  3793,  3797,  3804,  3809,  3816,  3821,  3825,
+    3830,  3834,  3842,  3853,  3857,  3869,  3877,  3885,  3892,  3903,
+    3923,  3933,  3943,  3953,  3973,  3978,  3982,  3986,  3998,  4002,
+    4014,  4021,  4031,  4035,  4050,  4055,  4062,  4066,  4079,  4087,
+    4098,  4102,  4110,  4118,  4126,  4134,  4148,  4162,  4166
 };
 #endif
 
@@ -7663,21 +7663,24 @@ yyreduce:
         double d;
         List_Read((yyvsp[(4) - (6)].l), 0, &d);
         Vertex *target = FindPoint((int)d);
-        if(!target) yymsg(0, "Could not find Point %d", (int)d);
-        double x = target->Pos.X, y = target->Pos.Y, z = target->Pos.Z;
-        for(int i = 1; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
-          List_Read((yyvsp[(4) - (6)].l), i, &d);
-          Vertex *source = FindPoint((int)d);
-          if(!source) yymsg(0, "Could not find Point %d", (int)d);
-          if(target && source){
-            source->Typ = target->Typ;
-            source->Pos.X = x;
-            source->Pos.Y = y;
-            source->Pos.Z = z;
-            source->boundaryLayerIndex = target->boundaryLayerIndex;
+        if(!target)
+          yymsg(0, "Could not find Point %d", (int)d);
+        else{
+          double x = target->Pos.X, y = target->Pos.Y, z = target->Pos.Z;
+          for(int i = 1; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
+            List_Read((yyvsp[(4) - (6)].l), i, &d);
+            Vertex *source = FindPoint((int)d);
+            if(!source) yymsg(0, "Could not find Point %d", (int)d);
+            if(target && source){
+              source->Typ = target->Typ;
+              source->Pos.X = x;
+              source->Pos.Y = y;
+              source->Pos.Z = z;
+              source->boundaryLayerIndex = target->boundaryLayerIndex;
+            }
           }
+          ExtrudeParams::normalsCoherence.push_back(SPoint3(x, y, z));
         }
-        ExtrudeParams::normalsCoherence.push_back(SPoint3(x, y, z));
       }
       else
         yymsg(0, "Need at least two points to merge");
@@ -7687,7 +7690,7 @@ yyreduce:
     break;
 
   case 252:
-#line 3391 "Gmsh.y"
+#line 3394 "Gmsh.y"
     {
     
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
@@ -7726,7 +7729,7 @@ yyreduce:
     break;
 
   case 253:
-#line 3428 "Gmsh.y"
+#line 3431 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7764,7 +7767,7 @@ yyreduce:
     break;
 
   case 254:
-#line 3464 "Gmsh.y"
+#line 3467 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7802,7 +7805,7 @@ yyreduce:
     break;
 
   case 255:
-#line 3499 "Gmsh.y"
+#line 3502 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7840,47 +7843,47 @@ yyreduce:
     break;
 
   case 256:
-#line 3538 "Gmsh.y"
+#line 3541 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 257:
-#line 3539 "Gmsh.y"
+#line 3542 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 258:
-#line 3540 "Gmsh.y"
+#line 3543 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 259:
-#line 3541 "Gmsh.y"
+#line 3544 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 260:
-#line 3542 "Gmsh.y"
+#line 3545 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 261:
-#line 3543 "Gmsh.y"
+#line 3546 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 262:
-#line 3544 "Gmsh.y"
+#line 3547 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 263:
-#line 3545 "Gmsh.y"
+#line 3548 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 264:
-#line 3547 "Gmsh.y"
+#line 3550 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -7890,307 +7893,307 @@ yyreduce:
     break;
 
   case 265:
-#line 3553 "Gmsh.y"
+#line 3556 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 266:
-#line 3554 "Gmsh.y"
+#line 3557 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 267:
-#line 3555 "Gmsh.y"
+#line 3558 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 268:
-#line 3556 "Gmsh.y"
+#line 3559 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 269:
-#line 3557 "Gmsh.y"
+#line 3560 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 270:
-#line 3558 "Gmsh.y"
+#line 3561 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 271:
-#line 3559 "Gmsh.y"
+#line 3562 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 272:
-#line 3560 "Gmsh.y"
+#line 3563 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 273:
-#line 3561 "Gmsh.y"
+#line 3564 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 274:
-#line 3562 "Gmsh.y"
+#line 3565 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 275:
-#line 3563 "Gmsh.y"
+#line 3566 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 276:
-#line 3564 "Gmsh.y"
+#line 3567 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 277:
-#line 3565 "Gmsh.y"
+#line 3568 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 278:
-#line 3566 "Gmsh.y"
+#line 3569 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 279:
-#line 3567 "Gmsh.y"
+#line 3570 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 280:
-#line 3568 "Gmsh.y"
+#line 3571 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 281:
-#line 3569 "Gmsh.y"
+#line 3572 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 282:
-#line 3570 "Gmsh.y"
+#line 3573 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 283:
-#line 3571 "Gmsh.y"
+#line 3574 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 284:
-#line 3572 "Gmsh.y"
+#line 3575 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 285:
-#line 3573 "Gmsh.y"
+#line 3576 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 286:
-#line 3574 "Gmsh.y"
+#line 3577 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 287:
-#line 3575 "Gmsh.y"
+#line 3578 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 288:
-#line 3576 "Gmsh.y"
+#line 3579 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 289:
-#line 3577 "Gmsh.y"
+#line 3580 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 290:
-#line 3578 "Gmsh.y"
+#line 3581 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 291:
-#line 3579 "Gmsh.y"
+#line 3582 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 292:
-#line 3580 "Gmsh.y"
+#line 3583 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 293:
-#line 3581 "Gmsh.y"
+#line 3584 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 294:
-#line 3582 "Gmsh.y"
+#line 3585 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 295:
-#line 3583 "Gmsh.y"
+#line 3586 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 296:
-#line 3584 "Gmsh.y"
+#line 3587 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 297:
-#line 3586 "Gmsh.y"
+#line 3589 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 298:
-#line 3587 "Gmsh.y"
+#line 3590 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 299:
-#line 3588 "Gmsh.y"
+#line 3591 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 300:
-#line 3589 "Gmsh.y"
+#line 3592 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 301:
-#line 3590 "Gmsh.y"
+#line 3593 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 302:
-#line 3591 "Gmsh.y"
+#line 3594 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 303:
-#line 3592 "Gmsh.y"
+#line 3595 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 304:
-#line 3593 "Gmsh.y"
+#line 3596 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 305:
-#line 3594 "Gmsh.y"
+#line 3597 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 306:
-#line 3595 "Gmsh.y"
+#line 3598 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 307:
-#line 3596 "Gmsh.y"
+#line 3599 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 308:
-#line 3597 "Gmsh.y"
+#line 3600 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 309:
-#line 3598 "Gmsh.y"
+#line 3601 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 310:
-#line 3599 "Gmsh.y"
+#line 3602 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 311:
-#line 3600 "Gmsh.y"
+#line 3603 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 312:
-#line 3601 "Gmsh.y"
+#line 3604 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 313:
-#line 3602 "Gmsh.y"
+#line 3605 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 314:
-#line 3603 "Gmsh.y"
+#line 3606 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 315:
-#line 3604 "Gmsh.y"
+#line 3607 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 316:
-#line 3605 "Gmsh.y"
+#line 3608 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 317:
-#line 3606 "Gmsh.y"
+#line 3609 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 318:
-#line 3615 "Gmsh.y"
+#line 3618 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 319:
-#line 3616 "Gmsh.y"
+#line 3619 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 320:
-#line 3617 "Gmsh.y"
+#line 3620 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 321:
-#line 3618 "Gmsh.y"
+#line 3621 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 322:
-#line 3619 "Gmsh.y"
+#line 3622 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 323:
-#line 3620 "Gmsh.y"
+#line 3623 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 324:
-#line 3621 "Gmsh.y"
+#line 3624 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 325:
-#line 3626 "Gmsh.y"
+#line 3629 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -8209,7 +8212,7 @@ yyreduce:
     break;
 
   case 326:
-#line 3645 "Gmsh.y"
+#line 3648 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -8230,7 +8233,7 @@ yyreduce:
     break;
 
   case 327:
-#line 3663 "Gmsh.y"
+#line 3666 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -8248,7 +8251,7 @@ yyreduce:
     break;
 
   case 328:
-#line 3678 "Gmsh.y"
+#line 3681 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -8261,7 +8264,7 @@ yyreduce:
     break;
 
   case 329:
-#line 3688 "Gmsh.y"
+#line 3691 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -8280,7 +8283,7 @@ yyreduce:
     break;
 
   case 330:
-#line 3704 "Gmsh.y"
+#line 3707 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -8298,7 +8301,7 @@ yyreduce:
     break;
 
   case 331:
-#line 3722 "Gmsh.y"
+#line 3725 "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));
@@ -8306,7 +8309,7 @@ yyreduce:
     break;
 
   case 332:
-#line 3727 "Gmsh.y"
+#line 3730 "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));
@@ -8314,7 +8317,7 @@ yyreduce:
     break;
 
   case 333:
-#line 3732 "Gmsh.y"
+#line 3735 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -8327,7 +8330,7 @@ yyreduce:
     break;
 
   case 334:
-#line 3742 "Gmsh.y"
+#line 3745 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -8340,7 +8343,7 @@ yyreduce:
     break;
 
   case 335:
-#line 3752 "Gmsh.y"
+#line 3755 "Gmsh.y"
     { 
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -8348,70 +8351,70 @@ yyreduce:
     break;
 
   case 336:
-#line 3760 "Gmsh.y"
+#line 3763 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 337:
-#line 3764 "Gmsh.y"
+#line 3767 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 338:
-#line 3768 "Gmsh.y"
+#line 3771 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 339:
-#line 3772 "Gmsh.y"
+#line 3775 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 340:
-#line 3776 "Gmsh.y"
+#line 3779 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 341:
-#line 3783 "Gmsh.y"
+#line 3786 "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 342:
-#line 3787 "Gmsh.y"
+#line 3790 "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 343:
-#line 3791 "Gmsh.y"
+#line 3794 "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 344:
-#line 3795 "Gmsh.y"
+#line 3798 "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 345:
-#line 3802 "Gmsh.y"
+#line 3805 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -8419,14 +8422,14 @@ yyreduce:
     break;
 
   case 346:
-#line 3807 "Gmsh.y"
+#line 3810 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 347:
-#line 3814 "Gmsh.y"
+#line 3817 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8434,14 +8437,14 @@ yyreduce:
     break;
 
   case 348:
-#line 3819 "Gmsh.y"
+#line 3822 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 349:
-#line 3823 "Gmsh.y"
+#line 3826 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -8449,14 +8452,14 @@ yyreduce:
     break;
 
   case 350:
-#line 3828 "Gmsh.y"
+#line 3831 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 351:
-#line 3832 "Gmsh.y"
+#line 3835 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8467,7 +8470,7 @@ yyreduce:
     break;
 
   case 352:
-#line 3840 "Gmsh.y"
+#line 3843 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8478,14 +8481,14 @@ yyreduce:
     break;
 
   case 353:
-#line 3851 "Gmsh.y"
+#line 3854 "Gmsh.y"
     { 
       (yyval.l) = (yyvsp[(1) - (1)].l); 
     ;}
     break;
 
   case 354:
-#line 3855 "Gmsh.y"
+#line 3858 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -8497,7 +8500,7 @@ yyreduce:
     break;
 
   case 355:
-#line 3867 "Gmsh.y"
+#line 3870 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8508,7 +8511,7 @@ yyreduce:
     break;
 
   case 356:
-#line 3875 "Gmsh.y"
+#line 3878 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8519,7 +8522,7 @@ yyreduce:
     break;
 
   case 357:
-#line 3883 "Gmsh.y"
+#line 3886 "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)); 
@@ -8529,7 +8532,7 @@ yyreduce:
     break;
 
   case 358:
-#line 3890 "Gmsh.y"
+#line 3893 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
@@ -8543,7 +8546,7 @@ yyreduce:
     break;
 
   case 359:
-#line 3901 "Gmsh.y"
+#line 3904 "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
@@ -8566,7 +8569,7 @@ yyreduce:
     break;
 
   case 360:
-#line 3921 "Gmsh.y"
+#line 3924 "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++){
@@ -8579,7 +8582,7 @@ yyreduce:
     break;
 
   case 361:
-#line 3931 "Gmsh.y"
+#line 3934 "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++){
@@ -8592,7 +8595,7 @@ yyreduce:
     break;
 
   case 362:
-#line 3941 "Gmsh.y"
+#line 3944 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -8605,7 +8608,7 @@ yyreduce:
     break;
 
   case 363:
-#line 3951 "Gmsh.y"
+#line 3954 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -8625,7 +8628,7 @@ yyreduce:
     break;
 
   case 364:
-#line 3971 "Gmsh.y"
+#line 3974 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8633,21 +8636,21 @@ yyreduce:
     break;
 
   case 365:
-#line 3976 "Gmsh.y"
+#line 3979 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 366:
-#line 3980 "Gmsh.y"
+#line 3983 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 367:
-#line 3984 "Gmsh.y"
+#line 3987 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -8659,21 +8662,21 @@ yyreduce:
     break;
 
   case 368:
-#line 3996 "Gmsh.y"
+#line 3999 "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 369:
-#line 4000 "Gmsh.y"
+#line 4003 "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 370:
-#line 4012 "Gmsh.y"
+#line 4015 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -8683,7 +8686,7 @@ yyreduce:
     break;
 
   case 371:
-#line 4019 "Gmsh.y"
+#line 4022 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -8693,14 +8696,14 @@ yyreduce:
     break;
 
   case 372:
-#line 4029 "Gmsh.y"
+#line 4032 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 373:
-#line 4033 "Gmsh.y"
+#line 4036 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -8715,7 +8718,7 @@ yyreduce:
     break;
 
   case 374:
-#line 4048 "Gmsh.y"
+#line 4051 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -8723,21 +8726,21 @@ yyreduce:
     break;
 
   case 375:
-#line 4053 "Gmsh.y"
+#line 4056 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 376:
-#line 4060 "Gmsh.y"
+#line 4063 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 377:
-#line 4064 "Gmsh.y"
+#line 4067 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -8753,7 +8756,7 @@ yyreduce:
     break;
 
   case 378:
-#line 4077 "Gmsh.y"
+#line 4080 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -8764,7 +8767,7 @@ yyreduce:
     break;
 
   case 379:
-#line 4085 "Gmsh.y"
+#line 4088 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -8775,14 +8778,14 @@ yyreduce:
     break;
 
   case 380:
-#line 4096 "Gmsh.y"
+#line 4099 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 381:
-#line 4100 "Gmsh.y"
+#line 4103 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -8793,7 +8796,7 @@ yyreduce:
     break;
 
   case 382:
-#line 4108 "Gmsh.y"
+#line 4111 "Gmsh.y"
     { 
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -8804,7 +8807,7 @@ yyreduce:
     break;
 
   case 383:
-#line 4116 "Gmsh.y"
+#line 4119 "Gmsh.y"
     { 
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -8815,7 +8818,7 @@ yyreduce:
     break;
 
   case 384:
-#line 4124 "Gmsh.y"
+#line 4127 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c)) + strlen((yyvsp[(5) - (6)].c)) + 1) * sizeof(char));
       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
@@ -8826,7 +8829,7 @@ yyreduce:
     break;
 
   case 385:
-#line 4132 "Gmsh.y"
+#line 4135 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -8843,7 +8846,7 @@ yyreduce:
     break;
 
   case 386:
-#line 4146 "Gmsh.y"
+#line 4149 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -8860,14 +8863,14 @@ yyreduce:
     break;
 
   case 387:
-#line 4160 "Gmsh.y"
+#line 4163 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 388:
-#line 4164 "Gmsh.y"
+#line 4167 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -8890,7 +8893,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 8894 "Gmsh.tab.cpp"
+#line 8897 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -9104,7 +9107,7 @@ yyreturn:
 }
 
 
-#line 4184 "Gmsh.y"
+#line 4187 "Gmsh.y"
 
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index d2c8f51bdcbb6ad660fbf912517591512162eb07..125353f9c4de6d9784cf19f8e31919be71a1d444 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -3359,21 +3359,24 @@ Coherence :
         double d;
         List_Read($4, 0, &d);
         Vertex *target = FindPoint((int)d);
-        if(!target) yymsg(0, "Could not find Point %d", (int)d);
-        double x = target->Pos.X, y = target->Pos.Y, z = target->Pos.Z;
-        for(int i = 1; i < List_Nbr($4); i++){
-          List_Read($4, i, &d);
-          Vertex *source = FindPoint((int)d);
-          if(!source) yymsg(0, "Could not find Point %d", (int)d);
-          if(target && source){
-            source->Typ = target->Typ;
-            source->Pos.X = x;
-            source->Pos.Y = y;
-            source->Pos.Z = z;
-            source->boundaryLayerIndex = target->boundaryLayerIndex;
+        if(!target)
+          yymsg(0, "Could not find Point %d", (int)d);
+        else{
+          double x = target->Pos.X, y = target->Pos.Y, z = target->Pos.Z;
+          for(int i = 1; i < List_Nbr($4); i++){
+            List_Read($4, i, &d);
+            Vertex *source = FindPoint((int)d);
+            if(!source) yymsg(0, "Could not find Point %d", (int)d);
+            if(target && source){
+              source->Typ = target->Typ;
+              source->Pos.X = x;
+              source->Pos.Y = y;
+              source->Pos.Z = z;
+              source->boundaryLayerIndex = target->boundaryLayerIndex;
+            }
           }
+          ExtrudeParams::normalsCoherence.push_back(SPoint3(x, y, z));
         }
-        ExtrudeParams::normalsCoherence.push_back(SPoint3(x, y, z));
       }
       else
         yymsg(0, "Need at least two points to merge");