diff --git a/Common/GmshMessage.cpp b/Common/GmshMessage.cpp
index 22e0d5b4cae914361346598019a9d59ff5443a55..bb58e4b61a71dce6d0edba68e1b3c4f3744482d8 100644
--- a/Common/GmshMessage.cpp
+++ b/Common/GmshMessage.cpp
@@ -1171,6 +1171,11 @@ void Msg::ImportPhysicalGroupsInOnelab()
 {
 #if defined(HAVE_ONELAB)
   if(_onelabClient){
+    std::vector<onelab::number> oldn;
+    _onelabClient->get(oldn, "Gmsh/Number of physical groups");
+    int oldsize = 0;
+    if(oldn.size()) oldsize = (int)oldn[0].getValue();
+
     std::map<int, std::vector<GEntity*> > groups[4];
     GModel::current()->getPhysicalGroups(groups);
     int size = 0;
@@ -1222,6 +1227,22 @@ void Msg::ImportPhysicalGroupsInOnelab()
         index++;
       }
     }
+
+    // remove old ones
+    for(int index = size + 1; index < oldsize + 1; index++){
+      char tmp[256];
+      sprintf(tmp, "Gmsh/Physical group %d/Dimension", index);
+      _onelabClient->clear(tmp);
+      sprintf(tmp, "Gmsh/Physical group %d/Number", index);
+      _onelabClient->clear(tmp);
+      sprintf(tmp, "Gmsh/Physical group %d/Name", index);
+      _onelabClient->clear(tmp);
+    }
+
+    if(FlGui::available()){
+      FlGui::instance()->resetVisibility();
+      FlGui::instance()->rebuildTree(true);
+    }
   }
 #endif
 }
diff --git a/Geo/Geo.cpp b/Geo/Geo.cpp
index ff97645d514d66811bb8bfeb4c8b13bdbc3c8ddc..16567d63de86a8a2f1f01ae72a2497352f839409 100644
--- a/Geo/Geo.cpp
+++ b/Geo/Geo.cpp
@@ -1325,6 +1325,50 @@ static void DeleteVolume(int iv)
   Free_Volume(&v, NULL);
 }
 
+void DeletePhysicalPoint(int num)
+{
+  PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_POINT);
+  if(p){
+    List_Suppress(GModel::current()->getGEOInternals()->PhysicalGroups, &p,
+                  comparePhysicalGroup);
+    Free_PhysicalGroup(&p, NULL);
+  }
+  GModel::current()->deletePhysicalGroup(0, num);
+}
+
+void DeletePhysicalLine(int num)
+{
+  PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_LINE);
+  if(p){
+    List_Suppress(GModel::current()->getGEOInternals()->PhysicalGroups, &p,
+                  comparePhysicalGroup);
+    Free_PhysicalGroup(&p, NULL);
+  }
+  GModel::current()->deletePhysicalGroup(1, num);
+}
+
+void DeletePhysicalSurface(int num)
+{
+  PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_SURFACE);
+  if(p){
+    List_Suppress(GModel::current()->getGEOInternals()->PhysicalGroups, &p,
+                  comparePhysicalGroup);
+    Free_PhysicalGroup(&p, NULL);
+  }
+  GModel::current()->deletePhysicalGroup(2, num);
+}
+
+void DeletePhysicalVolume(int num)
+{
+  PhysicalGroup *p = FindPhysicalGroup(num, MSH_PHYSICAL_VOLUME);
+  if(p){
+    List_Suppress(GModel::current()->getGEOInternals()->PhysicalGroups, &p,
+                  comparePhysicalGroup);
+    Free_PhysicalGroup(&p, NULL);
+  }
+  GModel::current()->deletePhysicalGroup(30, num);
+}
+
 void DeleteShape(int Type, int Num)
 {
   switch (Type) {
diff --git a/Geo/Geo.h b/Geo/Geo.h
index 97367b003df2124da147156861a960da7bf0ac68..7202d5058c6578f45505191ee48a385ac7615033 100644
--- a/Geo/Geo.h
+++ b/Geo/Geo.h
@@ -384,6 +384,10 @@ void SymmetryShapes(double A,double B,double C, double D, List_T *shapes);
 void BoundaryShapes(List_T *shapes, List_T *shapesBoundary, bool combined);
 void CopyShape(int Type, int Num, int *New);
 void DeleteShape(int Type, int Num);
+void DeletePhysicalPoint(int Num);
+void DeletePhysicalLine(int Num);
+void DeletePhysicalSurface(int Num);
+void DeletePhysicalVolume(int Num);
 void ColorShape(int Type, int Num, unsigned int Color, bool Recursive);
 void SetPartition(int Type, int Num, int Partition);
 void VisibilityShape(int Type, int Num, int Mode, bool Recursive);
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 056350cdd0cc450c3ab7cea8633cfde6ae49b5f3..3464d47cacbd9e27fd161cffbd4f6b81b387f44b 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -766,45 +766,45 @@ static const yytype_uint16 yyrline[] =
     1402,  1416,  1418,  1426,  1432,  1439,  1440,  1444,  1455,  1470,
     1480,  1481,  1486,  1494,  1503,  1511,  1529,  1533,  1539,  1547,
     1551,  1557,  1565,  1569,  1575,  1583,  1587,  1593,  1602,  1605,
-    1618,  1621,  1631,  1654,  1694,  1717,  1735,  1756,  1774,  1804,
-    1834,  1852,  1870,  1897,  1915,  1933,  1976,  1994,  2033,  2039,
-    2045,  2052,  2077,  2102,  2119,  2138,  2172,  2216,  2234,  2251,
-    2267,  2312,  2317,  2322,  2327,  2332,  2337,  2360,  2366,  2377,
-    2378,  2383,  2386,  2390,  2413,  2436,  2459,  2487,  2508,  2534,
-    2555,  2577,  2597,  2709,  2728,  2766,  2875,  2884,  2890,  2905,
-    2933,  2950,  2959,  2973,  2987,  2993,  2999,  3008,  3017,  3026,
-    3040,  3099,  3117,  3134,  3149,  3175,  3187,  3211,  3215,  3220,
-    3227,  3232,  3238,  3243,  3249,  3257,  3261,  3265,  3270,  3330,
-    3347,  3364,  3386,  3408,  3443,  3451,  3459,  3465,  3472,  3479,
-    3499,  3525,  3537,  3549,  3557,  3565,  3574,  3573,  3588,  3587,
-    3602,  3601,  3616,  3615,  3629,  3636,  3643,  3650,  3657,  3664,
-    3671,  3678,  3685,  3693,  3692,  3706,  3705,  3719,  3718,  3732,
-    3731,  3745,  3744,  3758,  3757,  3771,  3770,  3784,  3783,  3797,
-    3796,  3813,  3816,  3822,  3834,  3854,  3878,  3882,  3886,  3890,
-    3894,  3900,  3906,  3910,  3914,  3918,  3922,  3941,  3954,  3957,
-    3973,  3976,  3993,  3996,  4002,  4005,  4012,  4015,  4022,  4078,
-    4148,  4153,  4220,  4256,  4264,  4307,  4346,  4366,  4398,  4425,
-    4451,  4477,  4503,  4529,  4551,  4579,  4607,  4611,  4615,  4643,
-    4682,  4721,  4742,  4763,  4790,  4794,  4804,  4839,  4840,  4841,
-    4845,  4851,  4863,  4881,  4909,  4910,  4911,  4912,  4913,  4914,
-    4915,  4916,  4917,  4924,  4925,  4926,  4927,  4928,  4929,  4930,
-    4931,  4932,  4933,  4934,  4935,  4936,  4937,  4938,  4939,  4940,
-    4941,  4942,  4943,  4944,  4945,  4946,  4947,  4948,  4949,  4950,
-    4951,  4952,  4953,  4954,  4955,  4956,  4965,  4966,  4967,  4968,
-    4969,  4970,  4971,  4972,  4973,  4974,  4975,  4980,  4979,  4987,
-    4992,  4997,  5014,  5032,  5050,  5068,  5086,  5091,  5097,  5112,
-    5129,  5147,  5165,  5183,  5204,  5209,  5214,  5224,  5234,  5239,
-    5250,  5259,  5264,  5291,  5295,  5299,  5303,  5307,  5314,  5318,
-    5322,  5326,  5333,  5338,  5345,  5350,  5354,  5359,  5363,  5371,
-    5382,  5386,  5398,  5406,  5414,  5421,  5431,  5460,  5464,  5468,
-    5472,  5476,  5480,  5484,  5488,  5492,  5521,  5550,  5579,  5608,
-    5621,  5634,  5647,  5660,  5670,  5680,  5692,  5705,  5717,  5735,
-    5756,  5761,  5765,  5769,  5781,  5785,  5797,  5814,  5824,  5828,
-    5843,  5848,  5855,  5859,  5872,  5886,  5889,  5892,  5895,  5903,
-    5914,  5918,  5922,  5930,  5936,  5942,  5950,  5958,  5965,  5973,
-    5988,  6002,  6016,  6028,  6044,  6053,  6062,  6072,  6083,  6087,
-    6106,  6113,  6119,  6126,  6134,  6133,  6146,  6151,  6157,  6166,
-    6179,  6182,  6186
+    1618,  1621,  1631,  1654,  1697,  1720,  1738,  1759,  1777,  1807,
+    1837,  1855,  1873,  1900,  1918,  1936,  1982,  2000,  2039,  2045,
+    2051,  2058,  2083,  2108,  2125,  2144,  2178,  2225,  2243,  2260,
+    2276,  2324,  2329,  2334,  2339,  2344,  2349,  2372,  2378,  2389,
+    2390,  2395,  2398,  2402,  2425,  2448,  2471,  2499,  2520,  2546,
+    2567,  2589,  2609,  2721,  2740,  2778,  2887,  2896,  2902,  2917,
+    2945,  2962,  2971,  2985,  2999,  3005,  3011,  3020,  3029,  3038,
+    3052,  3111,  3129,  3146,  3161,  3187,  3199,  3223,  3227,  3232,
+    3239,  3244,  3250,  3255,  3261,  3269,  3273,  3277,  3282,  3342,
+    3359,  3376,  3398,  3420,  3455,  3463,  3471,  3477,  3484,  3491,
+    3511,  3537,  3549,  3561,  3569,  3577,  3586,  3585,  3600,  3599,
+    3614,  3613,  3628,  3627,  3641,  3648,  3655,  3662,  3669,  3676,
+    3683,  3690,  3697,  3705,  3704,  3718,  3717,  3731,  3730,  3744,
+    3743,  3757,  3756,  3770,  3769,  3783,  3782,  3796,  3795,  3809,
+    3808,  3825,  3828,  3834,  3846,  3866,  3890,  3894,  3898,  3902,
+    3906,  3912,  3918,  3922,  3926,  3930,  3934,  3953,  3966,  3969,
+    3985,  3988,  4005,  4008,  4014,  4017,  4024,  4027,  4034,  4090,
+    4160,  4165,  4232,  4268,  4276,  4319,  4358,  4378,  4410,  4437,
+    4463,  4489,  4515,  4541,  4563,  4591,  4619,  4623,  4627,  4655,
+    4694,  4733,  4754,  4775,  4802,  4806,  4816,  4851,  4852,  4853,
+    4857,  4863,  4875,  4893,  4921,  4922,  4923,  4924,  4925,  4926,
+    4927,  4928,  4929,  4936,  4937,  4938,  4939,  4940,  4941,  4942,
+    4943,  4944,  4945,  4946,  4947,  4948,  4949,  4950,  4951,  4952,
+    4953,  4954,  4955,  4956,  4957,  4958,  4959,  4960,  4961,  4962,
+    4963,  4964,  4965,  4966,  4967,  4968,  4977,  4978,  4979,  4980,
+    4981,  4982,  4983,  4984,  4985,  4986,  4987,  4992,  4991,  4999,
+    5004,  5009,  5026,  5044,  5062,  5080,  5098,  5103,  5109,  5124,
+    5141,  5159,  5177,  5195,  5216,  5221,  5226,  5236,  5246,  5251,
+    5262,  5271,  5276,  5303,  5307,  5311,  5315,  5319,  5326,  5330,
+    5334,  5338,  5345,  5350,  5357,  5362,  5366,  5371,  5375,  5383,
+    5394,  5398,  5410,  5418,  5426,  5433,  5443,  5472,  5476,  5480,
+    5484,  5488,  5492,  5496,  5500,  5504,  5533,  5562,  5591,  5620,
+    5633,  5646,  5659,  5672,  5682,  5692,  5704,  5717,  5729,  5747,
+    5768,  5773,  5777,  5781,  5793,  5797,  5809,  5826,  5836,  5840,
+    5855,  5860,  5867,  5871,  5884,  5898,  5901,  5904,  5907,  5915,
+    5926,  5930,  5934,  5942,  5948,  5954,  5962,  5970,  5977,  5985,
+    6000,  6014,  6028,  6040,  6056,  6065,  6074,  6084,  6095,  6099,
+    6118,  6125,  6131,  6138,  6146,  6145,  6158,  6163,  6169,  6178,
+    6191,  6194,  6198
 };
 #endif
 
@@ -6561,6 +6561,9 @@ yyreduce:
           int j = (int)d;
           List_Suppress(p->Entities, &j, fcmp_int);
         }
+        if(!List_Nbr(p->Entities)){
+          DeletePhysicalPoint(num);
+        }
       }
       else{
 	yymsg(0, "Unsupported operation on physical point %d", num);
@@ -6569,11 +6572,11 @@ yyreduce:
       (yyval.s).Type = MSH_PHYSICAL_POINT;
       (yyval.s).Num = num;
     }
-#line 6573 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6576 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 164:
-#line 1695 "Gmsh.y" /* yacc.c:1646  */
+#line 1698 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-3].l)); i++){
 	double d;
@@ -6593,11 +6596,11 @@ yyreduce:
       (yyval.s).Type = 0;
       (yyval.s).Num = 0;
     }
-#line 6597 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6600 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 165:
-#line 1718 "Gmsh.y" /* yacc.c:1646  */
+#line 1721 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindCurve(num)){
@@ -6615,11 +6618,11 @@ yyreduce:
       (yyval.s).Type = MSH_SEGM_LINE;
       (yyval.s).Num = num;
     }
-#line 6619 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6622 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 166:
-#line 1736 "Gmsh.y" /* yacc.c:1646  */
+#line 1739 "Gmsh.y" /* yacc.c:1646  */
     {
       for (int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
 	double dnum;
@@ -6640,11 +6643,11 @@ yyreduce:
 	}
       }
     }
-#line 6644 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6647 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 167:
-#line 1757 "Gmsh.y" /* yacc.c:1646  */
+#line 1760 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindCurve(num)){
@@ -6662,11 +6665,11 @@ yyreduce:
       (yyval.s).Type = MSH_SEGM_SPLN;
       (yyval.s).Num = num;
     }
-#line 6666 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6669 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 168:
-#line 1775 "Gmsh.y" /* yacc.c:1646  */
+#line 1778 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-5].d);
       if(FindCurve(num)){
@@ -6696,11 +6699,11 @@ yyreduce:
       (yyval.s).Type = MSH_SEGM_CIRC;
       (yyval.s).Num = num;
     }
-#line 6700 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6703 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 169:
-#line 1805 "Gmsh.y" /* yacc.c:1646  */
+#line 1808 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-5].d);
       if(FindCurve(num)){
@@ -6730,11 +6733,11 @@ yyreduce:
       (yyval.s).Type = MSH_SEGM_ELLI;
       (yyval.s).Num = num;
     }
-#line 6734 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6737 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 170:
-#line 1835 "Gmsh.y" /* yacc.c:1646  */
+#line 1838 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindCurve(num)){
@@ -6752,11 +6755,11 @@ yyreduce:
       (yyval.s).Type = MSH_SEGM_BSPLN;
       (yyval.s).Num = num;
     }
-#line 6756 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6759 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 171:
-#line 1853 "Gmsh.y" /* yacc.c:1646  */
+#line 1856 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindCurve(num)){
@@ -6774,11 +6777,11 @@ yyreduce:
       (yyval.s).Type = MSH_SEGM_BEZIER;
       (yyval.s).Num = num;
     }
-#line 6778 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6781 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 172:
-#line 1872 "Gmsh.y" /* yacc.c:1646  */
+#line 1875 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-8].d);
       if(List_Nbr((yyvsp[-5].l)) + (int)(yyvsp[-1].d) + 1 != List_Nbr((yyvsp[-3].l))){
@@ -6804,11 +6807,11 @@ yyreduce:
       (yyval.s).Type = MSH_SEGM_NURBS;
       (yyval.s).Num = num;
     }
-#line 6808 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6811 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 173:
-#line 1898 "Gmsh.y" /* yacc.c:1646  */
+#line 1901 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindEdgeLoop(num)){
@@ -6826,11 +6829,11 @@ yyreduce:
       (yyval.s).Type = MSH_SEGM_LOOP;
       (yyval.s).Num = num;
     }
-#line 6830 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6833 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 174:
-#line 1916 "Gmsh.y" /* yacc.c:1646  */
+#line 1919 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindCurve(num)){
@@ -6848,11 +6851,11 @@ yyreduce:
       (yyval.s).Type = MSH_SEGM_COMPOUND;
       (yyval.s).Num = num;
     }
-#line 6852 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6855 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 175:
-#line 1934 "Gmsh.y" /* yacc.c:1646  */
+#line 1937 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].i);
       int op = (yyvsp[-2].i);
@@ -6884,6 +6887,9 @@ yyreduce:
           int j = (int)d;
           List_Suppress(p->Entities, &j, fcmp_int);
         }
+        if(!List_Nbr(p->Entities)){
+          DeletePhysicalLine(num);
+        }
       }
       else{
 	yymsg(0, "Unsupported operation on physical line %d", num);
@@ -6892,11 +6898,11 @@ yyreduce:
       (yyval.s).Type = MSH_PHYSICAL_LINE;
       (yyval.s).Num = num;
     }
-#line 6896 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6902 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 176:
-#line 1977 "Gmsh.y" /* yacc.c:1646  */
+#line 1983 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindSurface(num)){
@@ -6914,11 +6920,11 @@ yyreduce:
       (yyval.s).Type = MSH_SURF_PLAN;
       (yyval.s).Num = num;
     }
-#line 6918 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6924 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 177:
-#line 1995 "Gmsh.y" /* yacc.c:1646  */
+#line 2001 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-5].d), type = 0;
       if(FindSurface(num)){
@@ -6957,42 +6963,42 @@ yyreduce:
       (yyval.s).Type = type;
       (yyval.s).Num = num;
     }
-#line 6961 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6967 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 178:
-#line 2034 "Gmsh.y" /* yacc.c:1646  */
+#line 2040 "Gmsh.y" /* yacc.c:1646  */
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
       (yyval.s).Num = 0;
     }
-#line 6971 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6977 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 179:
-#line 2040 "Gmsh.y" /* yacc.c:1646  */
+#line 2046 "Gmsh.y" /* yacc.c:1646  */
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[-1].d));
       (yyval.s).Type = 0;
       (yyval.s).Num = 0;
     }
-#line 6981 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6987 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 180:
-#line 2046 "Gmsh.y" /* yacc.c:1646  */
+#line 2052 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-6].d);
       myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[-3].c), (yyvsp[-2].c), (yyvsp[-1].c));
       (yyval.s).Type = 0;
       (yyval.s).Num = num;
     }
-#line 6992 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 6998 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 181:
-#line 2053 "Gmsh.y" /* yacc.c:1646  */
+#line 2059 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if (List_Nbr((yyvsp[-1].l)) != 2){
@@ -7017,11 +7023,11 @@ yyreduce:
       (yyval.s).Type = 0;
       (yyval.s).Num = num;
     }
-#line 7021 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7027 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 182:
-#line 2078 "Gmsh.y" /* yacc.c:1646  */
+#line 2084 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if (List_Nbr((yyvsp[-1].l)) != 2){
@@ -7046,11 +7052,11 @@ yyreduce:
       (yyval.s).Type = 0;
       (yyval.s).Num = num;
     }
-#line 7050 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7056 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 183:
-#line 2103 "Gmsh.y" /* yacc.c:1646  */
+#line 2109 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindSurfaceLoop(num)){
@@ -7067,11 +7073,11 @@ yyreduce:
       (yyval.s).Type = MSH_SURF_LOOP;
       (yyval.s).Num = num;
     }
-#line 7071 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7077 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 184:
-#line 2120 "Gmsh.y" /* yacc.c:1646  */
+#line 2126 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindSurface(num)){
@@ -7090,11 +7096,11 @@ yyreduce:
       (yyval.s).Type = MSH_SURF_COMPOUND;
       (yyval.s).Num = num;
     }
-#line 7094 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7100 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 185:
-#line 2140 "Gmsh.y" /* yacc.c:1646  */
+#line 2146 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-8].d);
       if(FindSurface(num)){
@@ -7127,11 +7133,11 @@ yyreduce:
       (yyval.s).Type = MSH_SURF_COMPOUND;
       (yyval.s).Num = num;
     }
-#line 7131 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7137 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 186:
-#line 2173 "Gmsh.y" /* yacc.c:1646  */
+#line 2179 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].i);
       int op = (yyvsp[-2].i);
@@ -7163,6 +7169,9 @@ yyreduce:
           int j = (int)d;
           List_Suppress(p->Entities, &j, fcmp_int);
         }
+        if(!List_Nbr(p->Entities)){
+          DeletePhysicalSurface(num);
+        }
       }
       else{
 	yymsg(0, "Unsupported operation on physical surface %d", num);
@@ -7171,11 +7180,11 @@ yyreduce:
       (yyval.s).Type = MSH_PHYSICAL_SURFACE;
       (yyval.s).Num = num;
     }
-#line 7175 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7184 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 187:
-#line 2217 "Gmsh.y" /* yacc.c:1646  */
+#line 2226 "Gmsh.y" /* yacc.c:1646  */
     {
       yymsg(0, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[-4].d);
@@ -7193,11 +7202,11 @@ yyreduce:
       (yyval.s).Type = MSH_VOLUME;
       (yyval.s).Num = num;
     }
-#line 7197 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7206 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 188:
-#line 2235 "Gmsh.y" /* yacc.c:1646  */
+#line 2244 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindVolume(num)){
@@ -7214,11 +7223,11 @@ yyreduce:
       (yyval.s).Type = MSH_VOLUME;
       (yyval.s).Num = num;
     }
-#line 7218 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7227 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 189:
-#line 2252 "Gmsh.y" /* yacc.c:1646  */
+#line 2261 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].d);
       if(FindVolume(num)){
@@ -7234,11 +7243,11 @@ yyreduce:
       (yyval.s).Type = MSH_VOLUME_COMPOUND;
       (yyval.s).Num = num;
     }
-#line 7238 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7247 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 190:
-#line 2268 "Gmsh.y" /* yacc.c:1646  */
+#line 2277 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-4].i);
       int op = (yyvsp[-2].i);
@@ -7270,6 +7279,9 @@ yyreduce:
           int j = (int)d;
           List_Suppress(p->Entities, &j, fcmp_int);
         }
+        if(!List_Nbr(p->Entities)){
+          DeletePhysicalVolume(num);
+        }
       }
       else{
 	yymsg(0, "Unsupported operation on physical volume %d", num);
@@ -7278,56 +7290,56 @@ yyreduce:
       (yyval.s).Type = MSH_PHYSICAL_VOLUME;
       (yyval.s).Num = num;
     }
-#line 7282 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7294 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 191:
-#line 2313 "Gmsh.y" /* yacc.c:1646  */
+#line 2325 "Gmsh.y" /* yacc.c:1646  */
     {
       TranslateShapes((yyvsp[-3].v)[0], (yyvsp[-3].v)[1], (yyvsp[-3].v)[2], (yyvsp[-1].l));
       (yyval.l) = (yyvsp[-1].l);
     }
-#line 7291 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7303 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 192:
-#line 2318 "Gmsh.y" /* yacc.c:1646  */
+#line 2330 "Gmsh.y" /* yacc.c:1646  */
     {
       RotateShapes((yyvsp[-8].v)[0], (yyvsp[-8].v)[1], (yyvsp[-8].v)[2], (yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], (yyvsp[-4].d), (yyvsp[-1].l));
       (yyval.l) = (yyvsp[-1].l);
     }
-#line 7300 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7312 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 193:
-#line 2323 "Gmsh.y" /* yacc.c:1646  */
+#line 2335 "Gmsh.y" /* yacc.c:1646  */
     {
       SymmetryShapes((yyvsp[-3].v)[0], (yyvsp[-3].v)[1], (yyvsp[-3].v)[2], (yyvsp[-3].v)[3], (yyvsp[-1].l));
       (yyval.l) = (yyvsp[-1].l);
     }
-#line 7309 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7321 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 194:
-#line 2328 "Gmsh.y" /* yacc.c:1646  */
+#line 2340 "Gmsh.y" /* yacc.c:1646  */
     {
       DilatShapes((yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], (yyvsp[-4].d), (yyvsp[-4].d), (yyvsp[-4].d), (yyvsp[-1].l));
       (yyval.l) = (yyvsp[-1].l);
     }
-#line 7318 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7330 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 195:
-#line 2333 "Gmsh.y" /* yacc.c:1646  */
+#line 2345 "Gmsh.y" /* yacc.c:1646  */
     {
       DilatShapes((yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], (yyvsp[-4].v)[0], (yyvsp[-4].v)[1], (yyvsp[-4].v)[2], (yyvsp[-1].l));
       (yyval.l) = (yyvsp[-1].l);
     }
-#line 7327 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7339 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 196:
-#line 2338 "Gmsh.y" /* yacc.c:1646  */
+#line 2350 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       if(!strcmp((yyvsp[-3].c), "Duplicata")){
@@ -7350,21 +7362,21 @@ yyreduce:
       Free((yyvsp[-3].c));
       List_Delete((yyvsp[-1].l));
     }
-#line 7354 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7366 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 2361 "Gmsh.y" /* yacc.c:1646  */
+#line 2373 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       IntersectCurvesWithSurface((yyvsp[-5].l), (int)(yyvsp[-1].d), (yyval.l));
       List_Delete((yyvsp[-5].l));
     }
-#line 7364 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7376 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 198:
-#line 2367 "Gmsh.y" /* yacc.c:1646  */
+#line 2379 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape*));
       List_T *tmp = ListOfDouble2ListOfInt((yyvsp[-2].l));
@@ -7372,39 +7384,39 @@ yyreduce:
       SplitCurve((int)(yyvsp[-5].d), tmp, (yyval.l));
       List_Delete(tmp);
     }
-#line 7376 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7388 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 199:
-#line 2377 "Gmsh.y" /* yacc.c:1646  */
+#line 2389 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.l) = (yyvsp[0].l); }
-#line 7382 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7394 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 200:
-#line 2378 "Gmsh.y" /* yacc.c:1646  */
+#line 2390 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.l) = (yyvsp[0].l); }
-#line 7388 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7400 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 201:
-#line 2383 "Gmsh.y" /* yacc.c:1646  */
+#line 2395 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     }
-#line 7396 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7408 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 202:
-#line 2387 "Gmsh.y" /* yacc.c:1646  */
+#line 2399 "Gmsh.y" /* yacc.c:1646  */
     {
       List_Add((yyval.l), &(yyvsp[0].s));
     }
-#line 7404 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7416 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 203:
-#line 2391 "Gmsh.y" /* yacc.c:1646  */
+#line 2403 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-2].l)); i++){
 	double d;
@@ -7427,11 +7439,11 @@ yyreduce:
 	}
       }
     }
-#line 7431 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7443 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 204:
-#line 2414 "Gmsh.y" /* yacc.c:1646  */
+#line 2426 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-2].l)); i++){
 	double d;
@@ -7454,11 +7466,11 @@ yyreduce:
 	}
       }
     }
-#line 7458 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7470 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 205:
-#line 2437 "Gmsh.y" /* yacc.c:1646  */
+#line 2449 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-2].l)); i++){
 	double d;
@@ -7481,11 +7493,11 @@ yyreduce:
 	}
       }
     }
-#line 7485 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7497 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 2460 "Gmsh.y" /* yacc.c:1646  */
+#line 2472 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-2].l)); i++){
 	double d;
@@ -7508,11 +7520,11 @@ yyreduce:
 	}
       }
     }
-#line 7512 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7524 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 207:
-#line 2488 "Gmsh.y" /* yacc.c:1646  */
+#line 2500 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[-1].l)) == 4){
@@ -7533,11 +7545,11 @@ yyreduce:
         yymsg(0, "Wrong levelset definition (%d)", (yyvsp[-4].d));
 #endif
     }
-#line 7537 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7549 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 208:
-#line 2509 "Gmsh.y" /* yacc.c:1646  */
+#line 2521 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_DINTEGRATION)
       int t = (int)(yyvsp[-6].d);
@@ -7563,11 +7575,11 @@ yyreduce:
       List_Delete((yyvsp[-2].l));
 #endif
     }
-#line 7567 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7579 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 209:
-#line 2536 "Gmsh.y" /* yacc.c:1646  */
+#line 2548 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[-2].l)) == 0){
@@ -7587,11 +7599,11 @@ yyreduce:
         yymsg(0, "Wrong levelset definition (%d)", (yyvsp[-10].d));
 #endif
     }
-#line 7591 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7603 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 210:
-#line 2557 "Gmsh.y" /* yacc.c:1646  */
+#line 2569 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[-2].l)) == 0){
@@ -7612,11 +7624,11 @@ yyreduce:
         yymsg(0, "Wrong levelset definition (%d)", (yyvsp[-12].d));
 #endif
     }
-#line 7616 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7628 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 211:
-#line 2578 "Gmsh.y" /* yacc.c:1646  */
+#line 2590 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[-2].l)) == 1){
@@ -7636,11 +7648,11 @@ yyreduce:
         yymsg(0, "Wrong levelset definition (%d)", (yyvsp[-8].d));
 #endif
     }
-#line 7640 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7652 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 212:
-#line 2598 "Gmsh.y" /* yacc.c:1646  */
+#line 2610 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[-6].c), "Union")){
@@ -7752,11 +7764,11 @@ yyreduce:
       Free((yyvsp[-6].c));
 #endif
     }
-#line 7756 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7768 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 213:
-#line 2710 "Gmsh.y" /* yacc.c:1646  */
+#line 2722 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[-6].c), "MathEval")){
@@ -7775,11 +7787,11 @@ yyreduce:
       Free((yyvsp[-6].c)); Free((yyvsp[-1].c));
 #endif
     }
-#line 7779 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7791 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 214:
-#line 2729 "Gmsh.y" /* yacc.c:1646  */
+#line 2741 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[-4].c), "CutMesh")){
@@ -7817,11 +7829,11 @@ yyreduce:
       Free((yyvsp[-4].c));
 #endif
     }
-#line 7821 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7833 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 215:
-#line 2768 "Gmsh.y" /* yacc.c:1646  */
+#line 2780 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[-12].c), "Cylinder") && List_Nbr((yyvsp[-2].l)) == 1){
@@ -7924,11 +7936,11 @@ yyreduce:
       Free((yyvsp[-12].c));
 #endif
     }
-#line 7928 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7940 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 216:
-#line 2876 "Gmsh.y" /* yacc.c:1646  */
+#line 2888 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
 	Shape TheShape;
@@ -7937,21 +7949,21 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 7941 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7953 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 217:
-#line 2885 "Gmsh.y" /* yacc.c:1646  */
+#line 2897 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_MESH)
       GModel::current()->getFields()->deleteField((int)(yyvsp[-2].d));
 #endif
     }
-#line 7951 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7963 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 218:
-#line 2891 "Gmsh.y" /* yacc.c:1646  */
+#line 2903 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[-4].c), "View")){
@@ -7966,11 +7978,11 @@ yyreduce:
 #endif
       Free((yyvsp[-4].c));
     }
-#line 7970 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 7982 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 219:
-#line 2906 "Gmsh.y" /* yacc.c:1646  */
+#line 2918 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!strcmp((yyvsp[-1].c), "Meshes") || !strcmp((yyvsp[-1].c), "All")){
         ClearProject();
@@ -7998,11 +8010,11 @@ yyreduce:
       }
       Free((yyvsp[-1].c));
     }
-#line 8002 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8014 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 220:
-#line 2934 "Gmsh.y" /* yacc.c:1646  */
+#line 2946 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[-2].c), "Empty") && !strcmp((yyvsp[-1].c), "Views")){
@@ -8014,11 +8026,11 @@ yyreduce:
 #endif
       Free((yyvsp[-2].c)); Free((yyvsp[-1].c));
     }
-#line 8018 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8030 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 221:
-#line 2951 "Gmsh.y" /* yacc.c:1646  */
+#line 2963 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
 	Shape TheShape;
@@ -8027,11 +8039,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 8031 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8043 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 222:
-#line 2960 "Gmsh.y" /* yacc.c:1646  */
+#line 2972 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
 	Shape TheShape;
@@ -8040,11 +8052,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 8044 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8056 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 223:
-#line 2974 "Gmsh.y" /* yacc.c:1646  */
+#line 2986 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
 	Shape TheShape;
@@ -8053,31 +8065,31 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 8057 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8069 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 224:
-#line 2988 "Gmsh.y" /* yacc.c:1646  */
+#line 3000 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[-1].c), i, 1, false);
       Free((yyvsp[-1].c));
     }
-#line 8067 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8079 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 225:
-#line 2994 "Gmsh.y" /* yacc.c:1646  */
+#line 3006 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[-1].c), i, 0, false);
       Free((yyvsp[-1].c));
     }
-#line 8077 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8089 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 226:
-#line 3000 "Gmsh.y" /* yacc.c:1646  */
+#line 3012 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
 	Shape TheShape;
@@ -8086,11 +8098,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 8090 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8102 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 227:
-#line 3009 "Gmsh.y" /* yacc.c:1646  */
+#line 3021 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
 	Shape TheShape;
@@ -8099,11 +8111,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 8103 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8115 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 228:
-#line 3018 "Gmsh.y" /* yacc.c:1646  */
+#line 3030 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
 	Shape TheShape;
@@ -8112,11 +8124,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 8116 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8128 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 229:
-#line 3027 "Gmsh.y" /* yacc.c:1646  */
+#line 3039 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
 	Shape TheShape;
@@ -8125,11 +8137,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 8129 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8141 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 230:
-#line 3041 "Gmsh.y" /* yacc.c:1646  */
+#line 3053 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!strcmp((yyvsp[-2].c), "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[-1].c));
@@ -8188,11 +8200,11 @@ yyreduce:
       }
       Free((yyvsp[-2].c)); Free((yyvsp[-1].c));
     }
-#line 8192 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8204 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 231:
-#line 3100 "Gmsh.y" /* yacc.c:1646  */
+#line 3112 "Gmsh.y" /* yacc.c:1646  */
     {
       int n = List_Nbr((yyvsp[-2].l));
       if(n == 1){
@@ -8210,11 +8222,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-2].l));
     }
-#line 8214 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8226 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 232:
-#line 3118 "Gmsh.y" /* yacc.c:1646  */
+#line 3130 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[-6].c), "Save") && !strcmp((yyvsp[-5].c), "View")){
@@ -8231,11 +8243,11 @@ yyreduce:
 #endif
       Free((yyvsp[-6].c)); Free((yyvsp[-5].c)); Free((yyvsp[-1].c));
     }
-#line 8235 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8247 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 233:
-#line 3135 "Gmsh.y" /* yacc.c:1646  */
+#line 3147 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_POST) && defined(HAVE_MESH)
       if(!strcmp((yyvsp[-6].c), "Background") && !strcmp((yyvsp[-5].c), "Mesh")  && !strcmp((yyvsp[-4].c), "View")){
@@ -8250,11 +8262,11 @@ yyreduce:
 #endif
       Free((yyvsp[-6].c)); Free((yyvsp[-5].c)); Free((yyvsp[-4].c));
     }
-#line 8254 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8266 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 234:
-#line 3150 "Gmsh.y" /* yacc.c:1646  */
+#line 3162 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!strcmp((yyvsp[-2].c), "Sleep")){
 	SleepInSeconds((yyvsp[-1].d));
@@ -8280,11 +8292,11 @@ yyreduce:
 	yymsg(0, "Unknown command '%s'", (yyvsp[-2].c));
       Free((yyvsp[-2].c));
     }
-#line 8284 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8296 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 235:
-#line 3176 "Gmsh.y" /* yacc.c:1646  */
+#line 3188 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_PLUGINS)
        try {
@@ -8296,11 +8308,11 @@ yyreduce:
 #endif
        Free((yyvsp[-4].c)); Free((yyvsp[-1].c));
      }
-#line 8300 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8312 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 236:
-#line 3188 "Gmsh.y" /* yacc.c:1646  */
+#line 3200 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[-1].c), "ElementsFromAllViews"))
@@ -8324,77 +8336,77 @@ yyreduce:
 #endif
       Free((yyvsp[-1].c));
     }
-#line 8328 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8340 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 237:
-#line 3212 "Gmsh.y" /* yacc.c:1646  */
+#line 3224 "Gmsh.y" /* yacc.c:1646  */
     {
       Msg::Exit(0);
     }
-#line 8336 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8348 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 238:
-#line 3216 "Gmsh.y" /* yacc.c:1646  */
+#line 3228 "Gmsh.y" /* yacc.c:1646  */
     {
       gmsh_yyerrorstate = 999; // this will be checked when yyparse returns
       YYABORT;
     }
-#line 8345 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8357 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 239:
-#line 3221 "Gmsh.y" /* yacc.c:1646  */
+#line 3233 "Gmsh.y" /* yacc.c:1646  */
     {
       // 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
       // GModel directly during parsing.
       GModel::current()->importGEOInternals();
     }
-#line 8356 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8368 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 240:
-#line 3228 "Gmsh.y" /* yacc.c:1646  */
+#line 3240 "Gmsh.y" /* yacc.c:1646  */
     {
       new GModel();
       GModel::current(GModel::list.size() - 1);
     }
-#line 8365 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8377 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 241:
-#line 3233 "Gmsh.y" /* yacc.c:1646  */
+#line 3245 "Gmsh.y" /* yacc.c:1646  */
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
       SetBoundingBox();
     }
-#line 8375 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8387 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 242:
-#line 3239 "Gmsh.y" /* yacc.c:1646  */
+#line 3251 "Gmsh.y" /* yacc.c:1646  */
     {
       CTX::instance()->forcedBBox = 1;
       SetBoundingBox((yyvsp[-12].d), (yyvsp[-10].d), (yyvsp[-8].d), (yyvsp[-6].d), (yyvsp[-4].d), (yyvsp[-2].d));
     }
-#line 8384 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8396 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 243:
-#line 3244 "Gmsh.y" /* yacc.c:1646  */
+#line 3256 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
 #endif
     }
-#line 8394 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8406 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 244:
-#line 3250 "Gmsh.y" /* yacc.c:1646  */
+#line 3262 "Gmsh.y" /* yacc.c:1646  */
     {
 #if defined(HAVE_OPENGL)
      CTX::instance()->mesh.changed = ENT_ALL;
@@ -8402,36 +8414,36 @@ yyreduce:
        PView::list[index]->setChanged(true);
 #endif
     }
-#line 8406 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8418 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 245:
-#line 3258 "Gmsh.y" /* yacc.c:1646  */
+#line 3270 "Gmsh.y" /* yacc.c:1646  */
     {
       GModel::current()->createTopologyFromMesh();
     }
-#line 8414 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8426 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 246:
-#line 3262 "Gmsh.y" /* yacc.c:1646  */
+#line 3274 "Gmsh.y" /* yacc.c:1646  */
     {
       GModel::current()->createTopologyFromMesh(1);
     }
-#line 8422 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8434 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 247:
-#line 3266 "Gmsh.y" /* yacc.c:1646  */
+#line 3278 "Gmsh.y" /* yacc.c:1646  */
     {
       GModel::current()->importGEOInternals();
       GModel::current()->refineMesh(CTX::instance()->mesh.secondOrderLinear);
     }
-#line 8431 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8443 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 248:
-#line 3272 "Gmsh.y" /* yacc.c:1646  */
+#line 3284 "Gmsh.y" /* yacc.c:1646  */
     {
       int lock = CTX::instance()->lock;
       CTX::instance()->lock = 0;
@@ -8485,11 +8497,11 @@ yyreduce:
       List_Delete((yyvsp[-7].l));
       CTX::instance()->lock = lock;
     }
-#line 8489 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8501 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 249:
-#line 3331 "Gmsh.y" /* yacc.c:1646  */
+#line 3343 "Gmsh.y" /* yacc.c:1646  */
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[-3].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[-1].d);
@@ -8506,11 +8518,11 @@ yyreduce:
 	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     }
-#line 8510 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8522 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 250:
-#line 3348 "Gmsh.y" /* yacc.c:1646  */
+#line 3360 "Gmsh.y" /* yacc.c:1646  */
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[-5].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[-3].d);
@@ -8527,11 +8539,11 @@ yyreduce:
 	ImbricatedLoop = MAX_RECUR_LOOPS - 1;
       }
     }
-#line 8531 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8543 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 251:
-#line 3365 "Gmsh.y" /* yacc.c:1646  */
+#line 3377 "Gmsh.y" /* yacc.c:1646  */
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[-3].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[-1].d);
@@ -8553,11 +8565,11 @@ yyreduce:
       }
       Free((yyvsp[-6].c));
     }
-#line 8557 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8569 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 252:
-#line 3387 "Gmsh.y" /* yacc.c:1646  */
+#line 3399 "Gmsh.y" /* yacc.c:1646  */
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[-5].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[-3].d);
@@ -8579,11 +8591,11 @@ yyreduce:
       }
       Free((yyvsp[-8].c));
     }
-#line 8583 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8595 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 253:
-#line 3409 "Gmsh.y" /* yacc.c:1646  */
+#line 3421 "Gmsh.y" /* yacc.c:1646  */
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -8618,11 +8630,11 @@ yyreduce:
 	  ImbricatedLoop--;
       }
     }
-#line 8622 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8634 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 254:
-#line 3444 "Gmsh.y" /* yacc.c:1646  */
+#line 3456 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[0].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -8630,11 +8642,11 @@ yyreduce:
       skip_until(NULL, "Return");
       Free((yyvsp[0].c));
     }
-#line 8634 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8646 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 255:
-#line 3452 "Gmsh.y" /* yacc.c:1646  */
+#line 3464 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[0].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -8642,43 +8654,43 @@ yyreduce:
       skip_until(NULL, "Return");
       Free((yyvsp[0].c));
     }
-#line 8646 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8658 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 3460 "Gmsh.y" /* yacc.c:1646  */
+#line 3472 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
 	yymsg(0, "Error while exiting function");
     }
-#line 8656 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8668 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 257:
-#line 3466 "Gmsh.y" /* yacc.c:1646  */
+#line 3478 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[-1].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
 	yymsg(0, "Unknown function %s", (yyvsp[-1].c));
       Free((yyvsp[-1].c));
     }
-#line 8667 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8679 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 258:
-#line 3473 "Gmsh.y" /* yacc.c:1646  */
+#line 3485 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[-1].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
 	yymsg(0, "Unknown function %s", (yyvsp[-1].c));
       Free((yyvsp[-1].c));
     }
-#line 8678 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8690 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 259:
-#line 3480 "Gmsh.y" /* yacc.c:1646  */
+#line 3492 "Gmsh.y" /* yacc.c:1646  */
     {
       ImbricatedTest++;
       if(ImbricatedTest > MAX_RECUR_TESTS-1){
@@ -8698,11 +8710,11 @@ yyreduce:
         if(!type_until2) ImbricatedTest--; // EndIf reached
       }
     }
-#line 8702 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8714 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 260:
-#line 3500 "Gmsh.y" /* yacc.c:1646  */
+#line 3512 "Gmsh.y" /* yacc.c:1646  */
     {
       if(ImbricatedTest > 0){
         if (statusImbricatedTests[ImbricatedTest]){
@@ -8728,11 +8740,11 @@ yyreduce:
 	yymsg(0, "Orphan ElseIf");
       }
     }
-#line 8732 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8744 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 261:
-#line 3526 "Gmsh.y" /* yacc.c:1646  */
+#line 3538 "Gmsh.y" /* yacc.c:1646  */
     {
       if(ImbricatedTest > 0){
         if(statusImbricatedTests[ImbricatedTest]){
@@ -8744,21 +8756,21 @@ yyreduce:
 	yymsg(0, "Orphan Else");
       }
     }
-#line 8748 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8760 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 262:
-#line 3538 "Gmsh.y" /* yacc.c:1646  */
+#line 3550 "Gmsh.y" /* yacc.c:1646  */
     {
       ImbricatedTest--;
       if(ImbricatedTest < 0)
         yymsg(1, "Orphan EndIf");
     }
-#line 8758 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8770 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 263:
-#line 3550 "Gmsh.y" /* yacc.c:1646  */
+#line 3562 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[-1].l),
@@ -8766,11 +8778,11 @@ yyreduce:
 		    NULL, (yyval.l));
       List_Delete((yyvsp[-1].l));
     }
-#line 8770 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8782 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 264:
-#line 3558 "Gmsh.y" /* yacc.c:1646  */
+#line 3570 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[-1].l),
@@ -8778,11 +8790,11 @@ yyreduce:
 		    NULL, (yyval.l));
       List_Delete((yyvsp[-1].l));
     }
-#line 8782 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8794 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 265:
-#line 3566 "Gmsh.y" /* yacc.c:1646  */
+#line 3578 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[-1].l),
@@ -8790,21 +8802,21 @@ yyreduce:
 		    NULL, (yyval.l));
       List_Delete((yyvsp[-1].l));
     }
-#line 8794 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8806 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 266:
-#line 3574 "Gmsh.y" /* yacc.c:1646  */
+#line 3586 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 8804 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8816 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 267:
-#line 3580 "Gmsh.y" /* yacc.c:1646  */
+#line 3592 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[-3].l),
@@ -8812,21 +8824,21 @@ yyreduce:
 		    &extr, (yyval.l));
       List_Delete((yyvsp[-3].l));
     }
-#line 8816 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8828 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 268:
-#line 3588 "Gmsh.y" /* yacc.c:1646  */
+#line 3600 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 8826 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8838 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 269:
-#line 3594 "Gmsh.y" /* yacc.c:1646  */
+#line 3606 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[-3].l),
@@ -8834,21 +8846,21 @@ yyreduce:
 		    &extr, (yyval.l));
       List_Delete((yyvsp[-3].l));
     }
-#line 8838 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8850 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 270:
-#line 3602 "Gmsh.y" /* yacc.c:1646  */
+#line 3614 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 8848 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8860 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 271:
-#line 3608 "Gmsh.y" /* yacc.c:1646  */
+#line 3620 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[-3].l),
@@ -8856,334 +8868,334 @@ yyreduce:
 		    &extr, (yyval.l));
       List_Delete((yyvsp[-3].l));
     }
-#line 8860 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8872 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 272:
-#line 3616 "Gmsh.y" /* yacc.c:1646  */
+#line 3628 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 8870 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8882 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 273:
-#line 3622 "Gmsh.y" /* yacc.c:1646  */
+#line 3634 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[-3].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
 		    &extr, (yyval.l));
       List_Delete((yyvsp[-3].l));
     }
-#line 8881 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8893 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 274:
-#line 3630 "Gmsh.y" /* yacc.c:1646  */
+#line 3642 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[-4].d),
 		   (yyvsp[-2].v)[0], (yyvsp[-2].v)[1], (yyvsp[-2].v)[2], 0., 0., 0., 0., 0., 0., 0.,
 		   NULL, (yyval.l));
     }
-#line 8892 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8904 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 275:
-#line 3637 "Gmsh.y" /* yacc.c:1646  */
+#line 3649 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[-4].d),
 		   (yyvsp[-2].v)[0], (yyvsp[-2].v)[1], (yyvsp[-2].v)[2], 0., 0., 0., 0., 0., 0., 0.,
 		   NULL, (yyval.l));
     }
-#line 8903 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8915 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 276:
-#line 3644 "Gmsh.y" /* yacc.c:1646  */
+#line 3656 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[-4].d),
 		   (yyvsp[-2].v)[0], (yyvsp[-2].v)[1], (yyvsp[-2].v)[2], 0., 0., 0., 0., 0., 0., 0.,
 		   NULL, (yyval.l));
     }
-#line 8914 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8926 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 277:
-#line 3651 "Gmsh.y" /* yacc.c:1646  */
+#line 3663 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[-8].d),
 		   0., 0., 0., (yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], (yyvsp[-4].v)[0], (yyvsp[-4].v)[1], (yyvsp[-4].v)[2], (yyvsp[-2].d),
 		   NULL, (yyval.l));
     }
-#line 8925 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8937 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 278:
-#line 3658 "Gmsh.y" /* yacc.c:1646  */
+#line 3670 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[-8].d),
 		   0., 0., 0., (yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], (yyvsp[-4].v)[0], (yyvsp[-4].v)[1], (yyvsp[-4].v)[2], (yyvsp[-2].d),
 		   NULL, (yyval.l));
     }
-#line 8936 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8948 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 279:
-#line 3665 "Gmsh.y" /* yacc.c:1646  */
+#line 3677 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[-8].d),
 		   0., 0., 0., (yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], (yyvsp[-4].v)[0], (yyvsp[-4].v)[1], (yyvsp[-4].v)[2], (yyvsp[-2].d),
 		   NULL, (yyval.l));
     }
-#line 8947 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8959 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 280:
-#line 3672 "Gmsh.y" /* yacc.c:1646  */
+#line 3684 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[-10].d),
 		   (yyvsp[-8].v)[0], (yyvsp[-8].v)[1], (yyvsp[-8].v)[2], (yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], (yyvsp[-4].v)[0], (yyvsp[-4].v)[1], (yyvsp[-4].v)[2], (yyvsp[-2].d),
 		   NULL, (yyval.l));
     }
-#line 8958 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8970 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 281:
-#line 3679 "Gmsh.y" /* yacc.c:1646  */
+#line 3691 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[-10].d),
 		   (yyvsp[-8].v)[0], (yyvsp[-8].v)[1], (yyvsp[-8].v)[2], (yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], (yyvsp[-4].v)[0], (yyvsp[-4].v)[1], (yyvsp[-4].v)[2], (yyvsp[-2].d),
 		   NULL, (yyval.l));
     }
-#line 8969 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8981 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 282:
-#line 3686 "Gmsh.y" /* yacc.c:1646  */
+#line 3698 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[-10].d),
 		   (yyvsp[-8].v)[0], (yyvsp[-8].v)[1], (yyvsp[-8].v)[2], (yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], (yyvsp[-4].v)[0], (yyvsp[-4].v)[1], (yyvsp[-4].v)[2], (yyvsp[-2].d),
 		   NULL, (yyval.l));
     }
-#line 8980 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 8992 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 3693 "Gmsh.y" /* yacc.c:1646  */
+#line 3705 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 8990 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9002 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 284:
-#line 3699 "Gmsh.y" /* yacc.c:1646  */
+#line 3711 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[-8].d),
 		   (yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], 0., 0., 0., 0., 0., 0., 0.,
 		   &extr, (yyval.l));
     }
-#line 9001 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9013 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 285:
-#line 3706 "Gmsh.y" /* yacc.c:1646  */
+#line 3718 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 9011 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9023 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 286:
-#line 3712 "Gmsh.y" /* yacc.c:1646  */
+#line 3724 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[-8].d),
 		   (yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], 0., 0., 0., 0., 0., 0., 0.,
 		   &extr, (yyval.l));
     }
-#line 9022 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9034 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 287:
-#line 3719 "Gmsh.y" /* yacc.c:1646  */
+#line 3731 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 9032 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9044 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 288:
-#line 3725 "Gmsh.y" /* yacc.c:1646  */
+#line 3737 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[-8].d),
 		   (yyvsp[-6].v)[0], (yyvsp[-6].v)[1], (yyvsp[-6].v)[2], 0., 0., 0., 0., 0., 0., 0.,
 		   &extr, (yyval.l));
     }
-#line 9043 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9055 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 289:
-#line 3732 "Gmsh.y" /* yacc.c:1646  */
+#line 3744 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 9053 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9065 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 290:
-#line 3738 "Gmsh.y" /* yacc.c:1646  */
+#line 3750 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[-12].d),
 		   0., 0., 0., (yyvsp[-10].v)[0], (yyvsp[-10].v)[1], (yyvsp[-10].v)[2], (yyvsp[-8].v)[0], (yyvsp[-8].v)[1], (yyvsp[-8].v)[2], (yyvsp[-6].d),
 		   &extr, (yyval.l));
     }
-#line 9064 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9076 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 291:
-#line 3745 "Gmsh.y" /* yacc.c:1646  */
+#line 3757 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 9074 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9086 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 292:
-#line 3751 "Gmsh.y" /* yacc.c:1646  */
+#line 3763 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[-12].d),
 		   0., 0., 0., (yyvsp[-10].v)[0], (yyvsp[-10].v)[1], (yyvsp[-10].v)[2], (yyvsp[-8].v)[0], (yyvsp[-8].v)[1], (yyvsp[-8].v)[2], (yyvsp[-6].d),
 		   &extr, (yyval.l));
     }
-#line 9085 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9097 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 293:
-#line 3758 "Gmsh.y" /* yacc.c:1646  */
+#line 3770 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 9095 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9107 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 294:
-#line 3764 "Gmsh.y" /* yacc.c:1646  */
+#line 3776 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[-12].d),
 		   0., 0., 0., (yyvsp[-10].v)[0], (yyvsp[-10].v)[1], (yyvsp[-10].v)[2], (yyvsp[-8].v)[0], (yyvsp[-8].v)[1], (yyvsp[-8].v)[2], (yyvsp[-6].d),
 		   &extr, (yyval.l));
     }
-#line 9106 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9118 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 295:
-#line 3771 "Gmsh.y" /* yacc.c:1646  */
+#line 3783 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 9116 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9128 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 296:
-#line 3777 "Gmsh.y" /* yacc.c:1646  */
+#line 3789 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[-14].d),
 		   (yyvsp[-12].v)[0], (yyvsp[-12].v)[1], (yyvsp[-12].v)[2], (yyvsp[-10].v)[0], (yyvsp[-10].v)[1], (yyvsp[-10].v)[2], (yyvsp[-8].v)[0], (yyvsp[-8].v)[1], (yyvsp[-8].v)[2], (yyvsp[-6].d),
 		   &extr, (yyval.l));
     }
-#line 9127 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9139 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 297:
-#line 3784 "Gmsh.y" /* yacc.c:1646  */
+#line 3796 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 9137 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9149 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 298:
-#line 3790 "Gmsh.y" /* yacc.c:1646  */
+#line 3802 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[-14].d),
 		   (yyvsp[-12].v)[0], (yyvsp[-12].v)[1], (yyvsp[-12].v)[2], (yyvsp[-10].v)[0], (yyvsp[-10].v)[1], (yyvsp[-10].v)[2], (yyvsp[-8].v)[0], (yyvsp[-8].v)[1], (yyvsp[-8].v)[2], (yyvsp[-6].d),
 		   &extr, (yyval.l));
     }
-#line 9148 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9160 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 299:
-#line 3797 "Gmsh.y" /* yacc.c:1646  */
+#line 3809 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
       extr.mesh.ScaleLast = false;
     }
-#line 9158 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9170 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 300:
-#line 3803 "Gmsh.y" /* yacc.c:1646  */
+#line 3815 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[-14].d),
 		   (yyvsp[-12].v)[0], (yyvsp[-12].v)[1], (yyvsp[-12].v)[2], (yyvsp[-10].v)[0], (yyvsp[-10].v)[1], (yyvsp[-10].v)[2], (yyvsp[-8].v)[0], (yyvsp[-8].v)[1], (yyvsp[-8].v)[2], (yyvsp[-6].d),
 		   &extr, (yyval.l));
     }
-#line 9169 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9181 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 301:
-#line 3814 "Gmsh.y" /* yacc.c:1646  */
+#line 3826 "Gmsh.y" /* yacc.c:1646  */
     {
     }
-#line 9176 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9188 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 302:
-#line 3817 "Gmsh.y" /* yacc.c:1646  */
+#line 3829 "Gmsh.y" /* yacc.c:1646  */
     {
     }
-#line 9183 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9195 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 303:
-#line 3823 "Gmsh.y" /* yacc.c:1646  */
+#line 3835 "Gmsh.y" /* yacc.c:1646  */
     {
       int n = (int)fabs((yyvsp[-2].d));
       if(n){ // we accept n==0 to easily disable layers
@@ -9195,11 +9207,11 @@ yyreduce:
         extr.mesh.hLayer.push_back(1.);
       }
     }
-#line 9199 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9211 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 304:
-#line 3835 "Gmsh.y" /* yacc.c:1646  */
+#line 3847 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[-4].l));
@@ -9219,11 +9231,11 @@ yyreduce:
       List_Delete((yyvsp[-4].l));
       List_Delete((yyvsp[-2].l));
     }
-#line 9223 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9235 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 305:
-#line 3855 "Gmsh.y" /* yacc.c:1646  */
+#line 3867 "Gmsh.y" /* yacc.c:1646  */
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -9246,95 +9258,95 @@ yyreduce:
       List_Delete((yyvsp[-4].l));
       List_Delete((yyvsp[-2].l));
     }
-#line 9250 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9262 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 306:
-#line 3879 "Gmsh.y" /* yacc.c:1646  */
+#line 3891 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.ScaleLast = true;
     }
-#line 9258 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9270 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 307:
-#line 3883 "Gmsh.y" /* yacc.c:1646  */
+#line 3895 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.Recombine = true;
     }
-#line 9266 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9278 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 308:
-#line 3887 "Gmsh.y" /* yacc.c:1646  */
+#line 3899 "Gmsh.y" /* yacc.c:1646  */
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     }
-#line 9274 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9286 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 309:
-#line 3891 "Gmsh.y" /* yacc.c:1646  */
+#line 3903 "Gmsh.y" /* yacc.c:1646  */
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     }
-#line 9282 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9294 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 310:
-#line 3895 "Gmsh.y" /* yacc.c:1646  */
+#line 3907 "Gmsh.y" /* yacc.c:1646  */
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
             "with body-centered vertices.");
     }
-#line 9292 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9304 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 311:
-#line 3901 "Gmsh.y" /* yacc.c:1646  */
+#line 3913 "Gmsh.y" /* yacc.c:1646  */
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
             "with body-centered vertices.");
     }
-#line 9302 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9314 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 312:
-#line 3907 "Gmsh.y" /* yacc.c:1646  */
+#line 3919 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
     }
-#line 9310 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9322 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 313:
-#line 3911 "Gmsh.y" /* yacc.c:1646  */
+#line 3923 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
     }
-#line 9318 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9330 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 314:
-#line 3915 "Gmsh.y" /* yacc.c:1646  */
+#line 3927 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
     }
-#line 9326 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9338 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 315:
-#line 3919 "Gmsh.y" /* yacc.c:1646  */
+#line 3931 "Gmsh.y" /* yacc.c:1646  */
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
     }
-#line 9334 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9346 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 316:
-#line 3923 "Gmsh.y" /* yacc.c:1646  */
+#line 3935 "Gmsh.y" /* yacc.c:1646  */
     {
       int num = (int)(yyvsp[-6].d);
       if(FindSurface(num)){
@@ -9353,11 +9365,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-3].l));
     }
-#line 9357 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9369 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 317:
-#line 3942 "Gmsh.y" /* yacc.c:1646  */
+#line 3954 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!strcmp((yyvsp[-4].c), "Index"))
         extr.mesh.BoundaryLayerIndex = (yyvsp[-2].d);
@@ -9365,19 +9377,19 @@ yyreduce:
         extr.mesh.ViewIndex = (yyvsp[-2].d);
       Free((yyvsp[-4].c));
     }
-#line 9369 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9381 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 318:
-#line 3954 "Gmsh.y" /* yacc.c:1646  */
+#line 3966 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     }
-#line 9377 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9389 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 319:
-#line 3958 "Gmsh.y" /* yacc.c:1646  */
+#line 3970 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!strcmp((yyvsp[-1].c), "Progression") || !strcmp((yyvsp[-1].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -9390,19 +9402,19 @@ yyreduce:
       (yyval.v)[1] = (yyvsp[0].d);
       Free((yyvsp[-1].c));
     }
-#line 9394 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9406 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 320:
-#line 3973 "Gmsh.y" /* yacc.c:1646  */
+#line 3985 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.i) = -1; // left
     }
-#line 9402 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9414 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 321:
-#line 3977 "Gmsh.y" /* yacc.c:1646  */
+#line 3989 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!strcmp((yyvsp[0].c), "Right"))
         (yyval.i) = 1;
@@ -9416,59 +9428,59 @@ yyreduce:
 	(yyval.i) = 2;
       Free((yyvsp[0].c));
     }
-#line 9420 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9432 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 322:
-#line 3993 "Gmsh.y" /* yacc.c:1646  */
+#line 4005 "Gmsh.y" /* yacc.c:1646  */
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    }
-#line 9428 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9440 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 323:
-#line 3997 "Gmsh.y" /* yacc.c:1646  */
+#line 4009 "Gmsh.y" /* yacc.c:1646  */
     {
      (yyval.l) = (yyvsp[0].l);
    }
-#line 9436 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9448 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 324:
-#line 4002 "Gmsh.y" /* yacc.c:1646  */
+#line 4014 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.i) = 45;
     }
-#line 9444 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9456 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 325:
-#line 4006 "Gmsh.y" /* yacc.c:1646  */
+#line 4018 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.i) = (int)(yyvsp[0].d);
     }
-#line 9452 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9464 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 326:
-#line 4012 "Gmsh.y" /* yacc.c:1646  */
+#line 4024 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(1, 1, sizeof(double));
     }
-#line 9460 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9472 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 327:
-#line 4016 "Gmsh.y" /* yacc.c:1646  */
+#line 4028 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = (yyvsp[0].l);
     }
-#line 9468 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9480 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 328:
-#line 4023 "Gmsh.y" /* yacc.c:1646  */
+#line 4035 "Gmsh.y" /* yacc.c:1646  */
     {
       int type = (int)(yyvsp[-1].v)[0];
       double coef = fabs((yyvsp[-1].v)[1]);
@@ -9524,11 +9536,11 @@ yyreduce:
         List_Delete((yyvsp[-4].l));
       }
     }
-#line 9528 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9540 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 329:
-#line 4079 "Gmsh.y" /* yacc.c:1646  */
+#line 4091 "Gmsh.y" /* yacc.c:1646  */
     {
       int k = List_Nbr((yyvsp[-2].l));
       if(k != 0 && k != 3 && k != 4){
@@ -9598,20 +9610,20 @@ yyreduce:
       }
       List_Delete((yyvsp[-2].l));
     }
-#line 9602 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9614 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 330:
-#line 4149 "Gmsh.y" /* yacc.c:1646  */
+#line 4161 "Gmsh.y" /* yacc.c:1646  */
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[-1].l));
     }
-#line 9611 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9623 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 331:
-#line 4154 "Gmsh.y" /* yacc.c:1646  */
+#line 4166 "Gmsh.y" /* yacc.c:1646  */
     {
       int k = List_Nbr((yyvsp[-1].l));
       if(k != 0 && k != 6 && k != 8){
@@ -9678,11 +9690,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 9682 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9694 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 332:
-#line 4221 "Gmsh.y" /* yacc.c:1646  */
+#line 4233 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!(yyvsp[-1].l)){
   	  List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -9718,11 +9730,11 @@ yyreduce:
         List_Delete((yyvsp[-1].l));
       }
     }
-#line 9722 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9734 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 333:
-#line 4257 "Gmsh.y" /* yacc.c:1646  */
+#line 4269 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-4].l)); i++){
 	double d;
@@ -9730,11 +9742,11 @@ yyreduce:
 	CTX::instance()->mesh.algo2d_per_face[(int)d] = (int)(yyvsp[-1].d);
       }
     }
-#line 9734 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9746 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 334:
-#line 4265 "Gmsh.y" /* yacc.c:1646  */
+#line 4277 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!(yyvsp[-2].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -9777,11 +9789,11 @@ yyreduce:
         List_Delete((yyvsp[-2].l));
       }
     }
-#line 9781 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9793 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 335:
-#line 4308 "Gmsh.y" /* yacc.c:1646  */
+#line 4320 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!(yyvsp[-1].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -9820,11 +9832,11 @@ yyreduce:
         List_Delete((yyvsp[-1].l));
       }
     }
-#line 9824 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9836 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 336:
-#line 4347 "Gmsh.y" /* yacc.c:1646  */
+#line 4359 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[-3].l)); i++){
         double d;
@@ -9844,11 +9856,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-3].l));
     }
-#line 9848 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9860 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 337:
-#line 4368 "Gmsh.y" /* yacc.c:1646  */
+#line 4380 "Gmsh.y" /* yacc.c:1646  */
     {
       if (List_Nbr((yyvsp[-7].l)) != List_Nbr((yyvsp[-3].l))){
         yymsg(0, "Number of master lines (%d) different from number of "
@@ -9879,11 +9891,11 @@ yyreduce:
       List_Delete((yyvsp[-7].l));
       List_Delete((yyvsp[-3].l));
     }
-#line 9883 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9895 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 338:
-#line 4400 "Gmsh.y" /* yacc.c:1646  */
+#line 4412 "Gmsh.y" /* yacc.c:1646  */
     {
       if (List_Nbr((yyvsp[-7].l)) != List_Nbr((yyvsp[-3].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -9909,11 +9921,11 @@ yyreduce:
       List_Delete((yyvsp[-7].l));
       List_Delete((yyvsp[-3].l));
     }
-#line 9913 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9925 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 339:
-#line 4427 "Gmsh.y" /* yacc.c:1646  */
+#line 4439 "Gmsh.y" /* yacc.c:1646  */
     {
       if (List_Nbr((yyvsp[-14].l)) != List_Nbr((yyvsp[-10].l))){
         yymsg(0, "Number of master edges (%d) different from number of "
@@ -9938,11 +9950,11 @@ yyreduce:
       List_Delete((yyvsp[-14].l));
       List_Delete((yyvsp[-10].l));
     }
-#line 9942 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9954 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 340:
-#line 4453 "Gmsh.y" /* yacc.c:1646  */
+#line 4465 "Gmsh.y" /* yacc.c:1646  */
     {
       if (List_Nbr((yyvsp[-14].l)) != List_Nbr((yyvsp[-10].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -9967,11 +9979,11 @@ yyreduce:
       List_Delete((yyvsp[-14].l));
       List_Delete((yyvsp[-10].l));
     }
-#line 9971 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 9983 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 341:
-#line 4479 "Gmsh.y" /* yacc.c:1646  */
+#line 4491 "Gmsh.y" /* yacc.c:1646  */
     {
       if (List_Nbr((yyvsp[-8].l)) != List_Nbr((yyvsp[-4].l))){
         yymsg(0, "Number of master edges (%d) different from number of "
@@ -9996,11 +10008,11 @@ yyreduce:
       List_Delete((yyvsp[-8].l));
       List_Delete((yyvsp[-4].l));
     }
-#line 10000 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10012 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 342:
-#line 4505 "Gmsh.y" /* yacc.c:1646  */
+#line 4517 "Gmsh.y" /* yacc.c:1646  */
     {
       if (List_Nbr((yyvsp[-8].l)) != List_Nbr((yyvsp[-4].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -10025,11 +10037,11 @@ yyreduce:
       List_Delete((yyvsp[-8].l));
       List_Delete((yyvsp[-4].l));
     }
-#line 10029 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10041 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 343:
-#line 4531 "Gmsh.y" /* yacc.c:1646  */
+#line 4543 "Gmsh.y" /* yacc.c:1646  */
     {
       if (List_Nbr((yyvsp[-7].l)) != List_Nbr((yyvsp[-2].l))){
         yymsg(0, "Number of master surface edges (%d) different from number of "
@@ -10050,11 +10062,11 @@ yyreduce:
       List_Delete((yyvsp[-7].l));
       List_Delete((yyvsp[-2].l));
     }
-#line 10054 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10066 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 344:
-#line 4552 "Gmsh.y" /* yacc.c:1646  */
+#line 4564 "Gmsh.y" /* yacc.c:1646  */
     {
       Surface *s = FindSurface((int)(yyvsp[-2].d));
       if(s){
@@ -10082,11 +10094,11 @@ yyreduce:
           yymsg(0, "Unknown surface %d", (int)(yyvsp[-2].d));
       }
     }
-#line 10086 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10098 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 345:
-#line 4580 "Gmsh.y" /* yacc.c:1646  */
+#line 4592 "Gmsh.y" /* yacc.c:1646  */
     {
       Surface *s = FindSurface((int)(yyvsp[-2].d));
       if(s){
@@ -10114,27 +10126,27 @@ yyreduce:
           yymsg(0, "Unknown surface %d", (int)(yyvsp[-2].d));
       }
     }
-#line 10118 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10130 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 346:
-#line 4608 "Gmsh.y" /* yacc.c:1646  */
+#line 4620 "Gmsh.y" /* yacc.c:1646  */
     {
       Msg::Error("Point in Volume not implemented yet");
     }
-#line 10126 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10138 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 347:
-#line 4612 "Gmsh.y" /* yacc.c:1646  */
+#line 4624 "Gmsh.y" /* yacc.c:1646  */
     {
       Msg::Error("Line in Volume not implemented yet");
     }
-#line 10134 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10146 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 348:
-#line 4616 "Gmsh.y" /* yacc.c:1646  */
+#line 4628 "Gmsh.y" /* yacc.c:1646  */
     {
       Volume *v = FindVolume((int)(yyvsp[-2].d));
       if(v){
@@ -10162,11 +10174,11 @@ yyreduce:
           yymsg(0, "Unknown volume %d", (int)(yyvsp[-2].d));
       }
     }
-#line 10166 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10178 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 349:
-#line 4644 "Gmsh.y" /* yacc.c:1646  */
+#line 4656 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!(yyvsp[-1].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -10205,11 +10217,11 @@ yyreduce:
         List_Delete((yyvsp[-1].l));
       }
     }
-#line 10209 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10221 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 350:
-#line 4683 "Gmsh.y" /* yacc.c:1646  */
+#line 4695 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!(yyvsp[-1].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
@@ -10248,11 +10260,11 @@ yyreduce:
         List_Delete((yyvsp[-1].l));
       }
     }
-#line 10252 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10264 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 351:
-#line 4722 "Gmsh.y" /* yacc.c:1646  */
+#line 4734 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!(yyvsp[-1].l)){
         for(GModel::viter it = GModel::current()->firstVertex();
@@ -10273,11 +10285,11 @@ yyreduce:
         List_Delete((yyvsp[-1].l));
       }
     }
-#line 10277 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10289 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 352:
-#line 4743 "Gmsh.y" /* yacc.c:1646  */
+#line 4755 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!(yyvsp[-1].l)){
         for(GModel::eiter it = GModel::current()->firstEdge();
@@ -10298,11 +10310,11 @@ yyreduce:
         List_Delete((yyvsp[-1].l));
       }
     }
-#line 10302 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10314 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 353:
-#line 4764 "Gmsh.y" /* yacc.c:1646  */
+#line 4776 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!(yyvsp[-1].l)){
         for(GModel::fiter it = GModel::current()->firstFace();
@@ -10323,19 +10335,19 @@ yyreduce:
         List_Delete((yyvsp[-1].l));
       }
     }
-#line 10327 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10339 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 354:
-#line 4791 "Gmsh.y" /* yacc.c:1646  */
+#line 4803 "Gmsh.y" /* yacc.c:1646  */
     {
       ReplaceAllDuplicates();
     }
-#line 10335 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10347 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 355:
-#line 4795 "Gmsh.y" /* yacc.c:1646  */
+#line 4807 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!strcmp((yyvsp[-1].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -10345,11 +10357,11 @@ yyreduce:
         yymsg(0, "Unknown coherence command");
       Free((yyvsp[-1].c));
     }
-#line 10349 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10361 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 356:
-#line 4805 "Gmsh.y" /* yacc.c:1646  */
+#line 4817 "Gmsh.y" /* yacc.c:1646  */
     {
       if(List_Nbr((yyvsp[-2].l)) >= 2){
         double d;
@@ -10379,39 +10391,39 @@ yyreduce:
       ReplaceAllDuplicates();
       List_Delete((yyvsp[-2].l));
     }
-#line 10383 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10395 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 357:
-#line 4839 "Gmsh.y" /* yacc.c:1646  */
+#line 4851 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.c) = (char*)"Homology"; }
-#line 10389 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10401 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 358:
-#line 4840 "Gmsh.y" /* yacc.c:1646  */
+#line 4852 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.c) = (char*)"Cohomology"; }
-#line 10395 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10407 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 359:
-#line 4841 "Gmsh.y" /* yacc.c:1646  */
+#line 4853 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.c) = (char*)"Betti"; }
-#line 10401 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10413 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 360:
-#line 4846 "Gmsh.y" /* yacc.c:1646  */
+#line 4858 "Gmsh.y" /* yacc.c:1646  */
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < 4; i++) dim.push_back(i);
       GModel::current()->addHomologyRequest((yyvsp[-1].c), domain, subdomain, dim);
     }
-#line 10411 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10423 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 361:
-#line 4852 "Gmsh.y" /* yacc.c:1646  */
+#line 4864 "Gmsh.y" /* yacc.c:1646  */
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[-2].l)); i++){
@@ -10423,11 +10435,11 @@ yyreduce:
       GModel::current()->addHomologyRequest((yyvsp[-4].c), domain, subdomain, dim);
       List_Delete((yyvsp[-2].l));
     }
-#line 10427 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10439 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 362:
-#line 4864 "Gmsh.y" /* yacc.c:1646  */
+#line 4876 "Gmsh.y" /* yacc.c:1646  */
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[-4].l)); i++){
@@ -10445,11 +10457,11 @@ yyreduce:
       List_Delete((yyvsp[-4].l));
       List_Delete((yyvsp[-2].l));
     }
-#line 10449 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10461 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 363:
-#line 4882 "Gmsh.y" /* yacc.c:1646  */
+#line 4894 "Gmsh.y" /* yacc.c:1646  */
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[-4].l)); i++){
@@ -10472,368 +10484,368 @@ yyreduce:
       List_Delete((yyvsp[-2].l));
       List_Delete((yyvsp[-7].l));
     }
-#line 10476 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10488 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 364:
-#line 4909 "Gmsh.y" /* yacc.c:1646  */
+#line 4921 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[0].d);           }
-#line 10482 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10494 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 365:
-#line 4910 "Gmsh.y" /* yacc.c:1646  */
+#line 4922 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-1].d);           }
-#line 10488 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10500 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 366:
-#line 4911 "Gmsh.y" /* yacc.c:1646  */
+#line 4923 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = -(yyvsp[0].d);          }
-#line 10494 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10506 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 367:
-#line 4912 "Gmsh.y" /* yacc.c:1646  */
+#line 4924 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[0].d);           }
-#line 10500 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10512 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 368:
-#line 4913 "Gmsh.y" /* yacc.c:1646  */
+#line 4925 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = !(yyvsp[0].d);          }
-#line 10506 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10518 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 369:
-#line 4914 "Gmsh.y" /* yacc.c:1646  */
+#line 4926 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) - (yyvsp[0].d);      }
-#line 10512 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10524 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 370:
-#line 4915 "Gmsh.y" /* yacc.c:1646  */
+#line 4927 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) + (yyvsp[0].d);      }
-#line 10518 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10530 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 371:
-#line 4916 "Gmsh.y" /* yacc.c:1646  */
+#line 4928 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) * (yyvsp[0].d);      }
-#line 10524 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10536 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 372:
-#line 4918 "Gmsh.y" /* yacc.c:1646  */
+#line 4930 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!(yyvsp[0].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[-2].d), (yyvsp[0].d));
       else
 	(yyval.d) = (yyvsp[-2].d) / (yyvsp[0].d);
     }
-#line 10535 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10547 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 373:
-#line 4924 "Gmsh.y" /* yacc.c:1646  */
+#line 4936 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (int)(yyvsp[-2].d) % (int)(yyvsp[0].d);  }
-#line 10541 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10553 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 374:
-#line 4925 "Gmsh.y" /* yacc.c:1646  */
+#line 4937 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = pow((yyvsp[-2].d), (yyvsp[0].d));  }
-#line 10547 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10559 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 375:
-#line 4926 "Gmsh.y" /* yacc.c:1646  */
+#line 4938 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) < (yyvsp[0].d);      }
-#line 10553 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10565 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 376:
-#line 4927 "Gmsh.y" /* yacc.c:1646  */
+#line 4939 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) > (yyvsp[0].d);      }
-#line 10559 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10571 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 377:
-#line 4928 "Gmsh.y" /* yacc.c:1646  */
+#line 4940 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) <= (yyvsp[0].d);     }
-#line 10565 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10577 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 378:
-#line 4929 "Gmsh.y" /* yacc.c:1646  */
+#line 4941 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) >= (yyvsp[0].d);     }
-#line 10571 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10583 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 379:
-#line 4930 "Gmsh.y" /* yacc.c:1646  */
+#line 4942 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) == (yyvsp[0].d);     }
-#line 10577 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10589 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 380:
-#line 4931 "Gmsh.y" /* yacc.c:1646  */
+#line 4943 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) != (yyvsp[0].d);     }
-#line 10583 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10595 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 381:
-#line 4932 "Gmsh.y" /* yacc.c:1646  */
+#line 4944 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) && (yyvsp[0].d);     }
-#line 10589 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10601 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 382:
-#line 4933 "Gmsh.y" /* yacc.c:1646  */
+#line 4945 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-2].d) || (yyvsp[0].d);     }
-#line 10595 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10607 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 383:
-#line 4934 "Gmsh.y" /* yacc.c:1646  */
+#line 4946 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-4].d) ? (yyvsp[-2].d) : (yyvsp[0].d); }
-#line 10601 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10613 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 384:
-#line 4935 "Gmsh.y" /* yacc.c:1646  */
+#line 4947 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = exp((yyvsp[-1].d));      }
-#line 10607 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10619 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 385:
-#line 4936 "Gmsh.y" /* yacc.c:1646  */
+#line 4948 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = log((yyvsp[-1].d));      }
-#line 10613 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10625 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 386:
-#line 4937 "Gmsh.y" /* yacc.c:1646  */
+#line 4949 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = log10((yyvsp[-1].d));    }
-#line 10619 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10631 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 387:
-#line 4938 "Gmsh.y" /* yacc.c:1646  */
+#line 4950 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = sqrt((yyvsp[-1].d));     }
-#line 10625 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10637 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 388:
-#line 4939 "Gmsh.y" /* yacc.c:1646  */
+#line 4951 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = sin((yyvsp[-1].d));      }
-#line 10631 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10643 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 389:
-#line 4940 "Gmsh.y" /* yacc.c:1646  */
+#line 4952 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = asin((yyvsp[-1].d));     }
-#line 10637 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10649 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 390:
-#line 4941 "Gmsh.y" /* yacc.c:1646  */
+#line 4953 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = cos((yyvsp[-1].d));      }
-#line 10643 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10655 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 391:
-#line 4942 "Gmsh.y" /* yacc.c:1646  */
+#line 4954 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = acos((yyvsp[-1].d));     }
-#line 10649 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10661 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 392:
-#line 4943 "Gmsh.y" /* yacc.c:1646  */
+#line 4955 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = tan((yyvsp[-1].d));      }
-#line 10655 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10667 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 393:
-#line 4944 "Gmsh.y" /* yacc.c:1646  */
+#line 4956 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = atan((yyvsp[-1].d));     }
-#line 10661 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10673 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 394:
-#line 4945 "Gmsh.y" /* yacc.c:1646  */
+#line 4957 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = atan2((yyvsp[-3].d), (yyvsp[-1].d));}
-#line 10667 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10679 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 395:
-#line 4946 "Gmsh.y" /* yacc.c:1646  */
+#line 4958 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = sinh((yyvsp[-1].d));     }
-#line 10673 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10685 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 396:
-#line 4947 "Gmsh.y" /* yacc.c:1646  */
+#line 4959 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = cosh((yyvsp[-1].d));     }
-#line 10679 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10691 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 397:
-#line 4948 "Gmsh.y" /* yacc.c:1646  */
+#line 4960 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = tanh((yyvsp[-1].d));     }
-#line 10685 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10697 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 398:
-#line 4949 "Gmsh.y" /* yacc.c:1646  */
+#line 4961 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = fabs((yyvsp[-1].d));     }
-#line 10691 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10703 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 399:
-#line 4950 "Gmsh.y" /* yacc.c:1646  */
+#line 4962 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = floor((yyvsp[-1].d));    }
-#line 10697 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10709 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 400:
-#line 4951 "Gmsh.y" /* yacc.c:1646  */
+#line 4963 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = ceil((yyvsp[-1].d));     }
-#line 10703 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10715 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 401:
-#line 4952 "Gmsh.y" /* yacc.c:1646  */
+#line 4964 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = floor((yyvsp[-1].d) + 0.5); }
-#line 10709 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10721 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 402:
-#line 4953 "Gmsh.y" /* yacc.c:1646  */
+#line 4965 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = fmod((yyvsp[-3].d), (yyvsp[-1].d)); }
-#line 10715 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10727 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 403:
-#line 4954 "Gmsh.y" /* yacc.c:1646  */
+#line 4966 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = fmod((yyvsp[-3].d), (yyvsp[-1].d)); }
-#line 10721 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10733 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 404:
-#line 4955 "Gmsh.y" /* yacc.c:1646  */
+#line 4967 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = sqrt((yyvsp[-3].d) * (yyvsp[-3].d) + (yyvsp[-1].d) * (yyvsp[-1].d)); }
-#line 10727 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10739 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 405:
-#line 4956 "Gmsh.y" /* yacc.c:1646  */
+#line 4968 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[-1].d) * (double)rand() / (double)RAND_MAX; }
-#line 10733 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10745 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 406:
-#line 4965 "Gmsh.y" /* yacc.c:1646  */
+#line 4977 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (yyvsp[0].d); }
-#line 10739 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10751 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 407:
-#line 4966 "Gmsh.y" /* yacc.c:1646  */
+#line 4978 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = 3.141592653589793; }
-#line 10745 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10757 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 408:
-#line 4967 "Gmsh.y" /* yacc.c:1646  */
+#line 4979 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = (double)ImbricatedTest; }
-#line 10751 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10763 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 409:
-#line 4968 "Gmsh.y" /* yacc.c:1646  */
+#line 4980 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = Msg::GetCommRank(); }
-#line 10757 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10769 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 410:
-#line 4969 "Gmsh.y" /* yacc.c:1646  */
+#line 4981 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = Msg::GetCommSize(); }
-#line 10763 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10775 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 411:
-#line 4970 "Gmsh.y" /* yacc.c:1646  */
+#line 4982 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = GetGmshMajorVersion(); }
-#line 10769 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10781 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 412:
-#line 4971 "Gmsh.y" /* yacc.c:1646  */
+#line 4983 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = GetGmshMinorVersion(); }
-#line 10775 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10787 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 413:
-#line 4972 "Gmsh.y" /* yacc.c:1646  */
+#line 4984 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = GetGmshPatchVersion(); }
-#line 10781 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10793 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 414:
-#line 4973 "Gmsh.y" /* yacc.c:1646  */
+#line 4985 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = Cpu(); }
-#line 10787 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10799 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 415:
-#line 4974 "Gmsh.y" /* yacc.c:1646  */
+#line 4986 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = GetMemoryUsage()/1024./1024.; }
-#line 10793 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10805 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 416:
-#line 4975 "Gmsh.y" /* yacc.c:1646  */
+#line 4987 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.d) = TotalRam(); }
-#line 10799 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10811 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 417:
-#line 4980 "Gmsh.y" /* yacc.c:1646  */
+#line 4992 "Gmsh.y" /* yacc.c:1646  */
     { floatOptions.clear(); charOptions.clear(); }
-#line 10805 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10817 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 418:
-#line 4982 "Gmsh.y" /* yacc.c:1646  */
+#line 4994 "Gmsh.y" /* yacc.c:1646  */
     {
       std::vector<double> val(1, (yyvsp[-3].d));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
       (yyval.d) = val[0];
     }
-#line 10815 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10827 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 419:
-#line 4988 "Gmsh.y" /* yacc.c:1646  */
+#line 5000 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[-1].c));
       Free((yyvsp[-1].c));
     }
-#line 10824 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10836 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 420:
-#line 4993 "Gmsh.y" /* yacc.c:1646  */
+#line 5005 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[-3].c), (yyvsp[-1].d));
       Free((yyvsp[-3].c));
     }
-#line 10833 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10845 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 421:
-#line 4998 "Gmsh.y" /* yacc.c:1646  */
+#line 5010 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!gmsh_yysymbols.count((yyvsp[0].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[0].c));
@@ -10850,11 +10862,11 @@ yyreduce:
       }
       Free((yyvsp[0].c));
     }
-#line 10854 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10866 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 422:
-#line 5015 "Gmsh.y" /* yacc.c:1646  */
+#line 5027 "Gmsh.y" /* yacc.c:1646  */
     {
       int index = (int)(yyvsp[-1].d);
       if(!gmsh_yysymbols.count((yyvsp[-3].c))){
@@ -10872,11 +10884,11 @@ yyreduce:
       }
       Free((yyvsp[-3].c));
     }
-#line 10876 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10888 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 423:
-#line 5033 "Gmsh.y" /* yacc.c:1646  */
+#line 5045 "Gmsh.y" /* yacc.c:1646  */
     {
       int index = (int)(yyvsp[-1].d);
       if(!gmsh_yysymbols.count((yyvsp[-3].c))){
@@ -10894,11 +10906,11 @@ yyreduce:
       }
       Free((yyvsp[-3].c));
     }
-#line 10898 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10910 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 424:
-#line 5051 "Gmsh.y" /* yacc.c:1646  */
+#line 5063 "Gmsh.y" /* yacc.c:1646  */
     {
       int index = (int)(yyvsp[-1].d);
       if(!gmsh_yysymbols.count((yyvsp[-3].c))){
@@ -10916,11 +10928,11 @@ yyreduce:
       }
       Free((yyvsp[-3].c));
     }
-#line 10920 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10932 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 425:
-#line 5069 "Gmsh.y" /* yacc.c:1646  */
+#line 5081 "Gmsh.y" /* yacc.c:1646  */
     {
       int index = (int)(yyvsp[-1].d);
       if(!gmsh_yysymbols.count((yyvsp[-3].c))){
@@ -10938,30 +10950,30 @@ yyreduce:
       }
       Free((yyvsp[-3].c));
     }
-#line 10942 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10954 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 426:
-#line 5087 "Gmsh.y" /* yacc.c:1646  */
+#line 5099 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.d) = gmsh_yysymbols.count((yyvsp[-1].c));
       Free((yyvsp[-1].c));
     }
-#line 10951 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10963 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 427:
-#line 5092 "Gmsh.y" /* yacc.c:1646  */
+#line 5104 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[-1].c));
       (yyval.d) = !StatFile(tmp);
       Free((yyvsp[-1].c));
     }
-#line 10961 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10973 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 428:
-#line 5098 "Gmsh.y" /* yacc.c:1646  */
+#line 5110 "Gmsh.y" /* yacc.c:1646  */
     {
       if(gmsh_yysymbols.count((yyvsp[-2].c))){
         gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[-2].c)]);
@@ -10976,11 +10988,11 @@ yyreduce:
       }
       Free((yyvsp[-2].c));
     }
-#line 10980 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 10992 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 429:
-#line 5113 "Gmsh.y" /* yacc.c:1646  */
+#line 5125 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!gmsh_yysymbols.count((yyvsp[-1].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[-1].c));
@@ -10997,11 +11009,11 @@ yyreduce:
       }
       Free((yyvsp[-1].c));
     }
-#line 11001 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11013 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 430:
-#line 5130 "Gmsh.y" /* yacc.c:1646  */
+#line 5142 "Gmsh.y" /* yacc.c:1646  */
     {
       int index = (int)(yyvsp[-2].d);
       if(!gmsh_yysymbols.count((yyvsp[-4].c))){
@@ -11019,11 +11031,11 @@ yyreduce:
       }
       Free((yyvsp[-4].c));
     }
-#line 11023 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11035 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 431:
-#line 5148 "Gmsh.y" /* yacc.c:1646  */
+#line 5160 "Gmsh.y" /* yacc.c:1646  */
     {
       int index = (int)(yyvsp[-2].d);
       if(!gmsh_yysymbols.count((yyvsp[-4].c))){
@@ -11041,11 +11053,11 @@ yyreduce:
       }
       Free((yyvsp[-4].c));
     }
-#line 11045 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11057 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 432:
-#line 5166 "Gmsh.y" /* yacc.c:1646  */
+#line 5178 "Gmsh.y" /* yacc.c:1646  */
     {
       int index = (int)(yyvsp[-2].d);
       if(!gmsh_yysymbols.count((yyvsp[-4].c))){
@@ -11063,11 +11075,11 @@ yyreduce:
       }
       Free((yyvsp[-4].c));
     }
-#line 11067 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11079 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 433:
-#line 5184 "Gmsh.y" /* yacc.c:1646  */
+#line 5196 "Gmsh.y" /* yacc.c:1646  */
     {
       int index = (int)(yyvsp[-2].d);
       if(!gmsh_yysymbols.count((yyvsp[-4].c))){
@@ -11085,29 +11097,29 @@ yyreduce:
       }
       Free((yyvsp[-4].c));
     }
-#line 11089 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11101 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 434:
-#line 5205 "Gmsh.y" /* yacc.c:1646  */
+#line 5217 "Gmsh.y" /* yacc.c:1646  */
     {
       NumberOption(GMSH_GET, (yyvsp[-2].c), 0, (yyvsp[0].c), (yyval.d));
       Free((yyvsp[-2].c)); Free((yyvsp[0].c));
     }
-#line 11098 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11110 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 435:
-#line 5210 "Gmsh.y" /* yacc.c:1646  */
+#line 5222 "Gmsh.y" /* yacc.c:1646  */
     {
       NumberOption(GMSH_GET, (yyvsp[-5].c), (int)(yyvsp[-3].d), (yyvsp[0].c), (yyval.d));
       Free((yyvsp[-5].c)); Free((yyvsp[0].c));
     }
-#line 11107 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11119 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 436:
-#line 5215 "Gmsh.y" /* yacc.c:1646  */
+#line 5227 "Gmsh.y" /* yacc.c:1646  */
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[-3].c), 0, (yyvsp[-1].c), d)){
@@ -11117,11 +11129,11 @@ yyreduce:
       }
       Free((yyvsp[-3].c)); Free((yyvsp[-1].c));
     }
-#line 11121 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11133 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 437:
-#line 5225 "Gmsh.y" /* yacc.c:1646  */
+#line 5237 "Gmsh.y" /* yacc.c:1646  */
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[-6].c), (int)(yyvsp[-4].d), (yyvsp[-1].c), d)){
@@ -11131,20 +11143,20 @@ yyreduce:
       }
       Free((yyvsp[-6].c)); Free((yyvsp[-1].c));
     }
-#line 11135 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11147 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 438:
-#line 5235 "Gmsh.y" /* yacc.c:1646  */
+#line 5247 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.d) = Msg::GetValue((yyvsp[-3].c), (yyvsp[-1].d));
       Free((yyvsp[-3].c));
     }
-#line 11144 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11156 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 439:
-#line 5240 "Gmsh.y" /* yacc.c:1646  */
+#line 5252 "Gmsh.y" /* yacc.c:1646  */
     {
       int matches = 0;
       for(int i = 0; i < List_Nbr((yyvsp[-3].l)); i++){
@@ -11155,11 +11167,11 @@ yyreduce:
       (yyval.d) = matches;
       Free((yyvsp[-3].l)); Free((yyvsp[-1].l));
     }
-#line 11159 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11171 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 440:
-#line 5251 "Gmsh.y" /* yacc.c:1646  */
+#line 5263 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string s((yyvsp[-3].c)), substr((yyvsp[-1].c));
       if(s.find(substr) != std::string::npos)
@@ -11168,20 +11180,20 @@ yyreduce:
         (yyval.d) = 0.;
       Free((yyvsp[-3].c)); Free((yyvsp[-1].c));
     }
-#line 11172 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11184 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 441:
-#line 5260 "Gmsh.y" /* yacc.c:1646  */
+#line 5272 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.d) = strcmp((yyvsp[-3].c), (yyvsp[-1].c));
       Free((yyvsp[-3].c)); Free((yyvsp[-1].c));
     }
-#line 11181 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11193 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 442:
-#line 5265 "Gmsh.y" /* yacc.c:1646  */
+#line 5277 "Gmsh.y" /* yacc.c:1646  */
     {
       int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
       if(List_Nbr((yyvsp[-1].l)) % 2){
@@ -11205,134 +11217,134 @@ yyreduce:
       List_Delete((yyvsp[-1].l));
       (yyval.d) = (double)((align<<16)|(font<<8)|(fontsize));
     }
-#line 11209 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11221 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 443:
-#line 5292 "Gmsh.y" /* yacc.c:1646  */
+#line 5304 "Gmsh.y" /* yacc.c:1646  */
     {
       memcpy((yyval.v), (yyvsp[0].v), 5*sizeof(double));
     }
-#line 11217 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11229 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 444:
-#line 5296 "Gmsh.y" /* yacc.c:1646  */
+#line 5308 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[0].v)[i];
     }
-#line 11225 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11237 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 445:
-#line 5300 "Gmsh.y" /* yacc.c:1646  */
+#line 5312 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[0].v)[i];
     }
-#line 11233 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11245 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 446:
-#line 5304 "Gmsh.y" /* yacc.c:1646  */
+#line 5316 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[-2].v)[i] - (yyvsp[0].v)[i];
     }
-#line 11241 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11253 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 447:
-#line 5308 "Gmsh.y" /* yacc.c:1646  */
+#line 5320 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[-2].v)[i] + (yyvsp[0].v)[i];
     }
-#line 11249 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11261 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 448:
-#line 5315 "Gmsh.y" /* yacc.c:1646  */
+#line 5327 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.v)[0] = (yyvsp[-9].d);  (yyval.v)[1] = (yyvsp[-7].d);  (yyval.v)[2] = (yyvsp[-5].d);  (yyval.v)[3] = (yyvsp[-3].d); (yyval.v)[4] = (yyvsp[-1].d);
     }
-#line 11257 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11269 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 449:
-#line 5319 "Gmsh.y" /* yacc.c:1646  */
+#line 5331 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.v)[0] = (yyvsp[-7].d);  (yyval.v)[1] = (yyvsp[-5].d);  (yyval.v)[2] = (yyvsp[-3].d);  (yyval.v)[3] = (yyvsp[-1].d); (yyval.v)[4] = 1.0;
     }
-#line 11265 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11277 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 450:
-#line 5323 "Gmsh.y" /* yacc.c:1646  */
+#line 5335 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.v)[0] = (yyvsp[-5].d);  (yyval.v)[1] = (yyvsp[-3].d);  (yyval.v)[2] = (yyvsp[-1].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     }
-#line 11273 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11285 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 451:
-#line 5327 "Gmsh.y" /* yacc.c:1646  */
+#line 5339 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.v)[0] = (yyvsp[-5].d);  (yyval.v)[1] = (yyvsp[-3].d);  (yyval.v)[2] = (yyvsp[-1].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     }
-#line 11281 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11293 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 452:
-#line 5334 "Gmsh.y" /* yacc.c:1646  */
+#line 5346 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[0].l)));
     }
-#line 11290 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11302 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 453:
-#line 5339 "Gmsh.y" /* yacc.c:1646  */
+#line 5351 "Gmsh.y" /* yacc.c:1646  */
     {
       List_Add((yyval.l), &((yyvsp[0].l)));
     }
-#line 11298 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11310 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 454:
-#line 5346 "Gmsh.y" /* yacc.c:1646  */
+#line 5358 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[0].d)));
     }
-#line 11307 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11319 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 455:
-#line 5351 "Gmsh.y" /* yacc.c:1646  */
+#line 5363 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = (yyvsp[0].l);
     }
-#line 11315 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11327 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 456:
-#line 5355 "Gmsh.y" /* yacc.c:1646  */
+#line 5367 "Gmsh.y" /* yacc.c:1646  */
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
     }
-#line 11324 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11336 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 457:
-#line 5360 "Gmsh.y" /* yacc.c:1646  */
+#line 5372 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = (yyvsp[-1].l);
     }
-#line 11332 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11344 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 458:
-#line 5364 "Gmsh.y" /* yacc.c:1646  */
+#line 5376 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = (yyvsp[-1].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11340,11 +11352,11 @@ yyreduce:
 	(*pd) = - (*pd);
       }
     }
-#line 11344 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11356 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 459:
-#line 5372 "Gmsh.y" /* yacc.c:1646  */
+#line 5384 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = (yyvsp[-1].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11352,19 +11364,19 @@ yyreduce:
 	(*pd) *= (yyvsp[-4].d);
       }
     }
-#line 11356 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11368 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 460:
-#line 5383 "Gmsh.y" /* yacc.c:1646  */
+#line 5395 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = (yyvsp[0].l);
     }
-#line 11364 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11376 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 461:
-#line 5387 "Gmsh.y" /* yacc.c:1646  */
+#line 5399 "Gmsh.y" /* yacc.c:1646  */
     {
       if(!strcmp((yyvsp[0].c), "*") || !strcmp((yyvsp[0].c), "all"))
         (yyval.l) = 0;
@@ -11373,11 +11385,11 @@ yyreduce:
         (yyval.l) = List_Create(2, 1, sizeof(double));
       }
     }
-#line 11377 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11389 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 462:
-#line 5399 "Gmsh.y" /* yacc.c:1646  */
+#line 5411 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = (yyvsp[0].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11385,11 +11397,11 @@ yyreduce:
 	(*pd) = - (*pd);
       }
     }
-#line 11389 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11401 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 463:
-#line 5407 "Gmsh.y" /* yacc.c:1646  */
+#line 5419 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = (yyvsp[0].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -11397,22 +11409,22 @@ yyreduce:
 	(*pd) *= (yyvsp[-2].d);
       }
     }
-#line 11401 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11413 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 464:
-#line 5415 "Gmsh.y" /* yacc.c:1646  */
+#line 5427 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       for(double d = (yyvsp[-2].d); ((yyvsp[-2].d) < (yyvsp[0].d)) ? (d <= (yyvsp[0].d)) : (d >= (yyvsp[0].d));
           ((yyvsp[-2].d) < (yyvsp[0].d)) ? (d += 1.) : (d -= 1.))
 	List_Add((yyval.l), &d);
     }
-#line 11412 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11424 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 465:
-#line 5422 "Gmsh.y" /* yacc.c:1646  */
+#line 5434 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[0].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@ -11422,11 +11434,11 @@ yyreduce:
 	for(double d = (yyvsp[-4].d); ((yyvsp[0].d) > 0) ? (d <= (yyvsp[-2].d)) : (d >= (yyvsp[-2].d)); d += (yyvsp[0].d))
 	  List_Add((yyval.l), &d);
    }
-#line 11426 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11438 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 466:
-#line 5432 "Gmsh.y" /* yacc.c:1646  */
+#line 5444 "Gmsh.y" /* yacc.c:1646  */
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -11455,75 +11467,75 @@ yyreduce:
 	List_Add((yyval.l), &v->Pos.Z);
       }
     }
-#line 11459 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11471 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 467:
-#line 5461 "Gmsh.y" /* yacc.c:1646  */
+#line 5473 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = GetAllElementaryEntityNumbers(0);
     }
-#line 11467 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11479 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 468:
-#line 5465 "Gmsh.y" /* yacc.c:1646  */
+#line 5477 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = GetAllElementaryEntityNumbers(1);
     }
-#line 11475 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11487 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 469:
-#line 5469 "Gmsh.y" /* yacc.c:1646  */
+#line 5481 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = GetAllElementaryEntityNumbers(2);
     }
-#line 11483 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11495 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 470:
-#line 5473 "Gmsh.y" /* yacc.c:1646  */
+#line 5485 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = GetAllElementaryEntityNumbers(3);
     }
-#line 11491 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11503 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 471:
-#line 5477 "Gmsh.y" /* yacc.c:1646  */
+#line 5489 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(0);
     }
-#line 11499 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11511 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 472:
-#line 5481 "Gmsh.y" /* yacc.c:1646  */
+#line 5493 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(1);
     }
-#line 11507 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11519 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 473:
-#line 5485 "Gmsh.y" /* yacc.c:1646  */
+#line 5497 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(2);
     }
-#line 11515 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11527 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 474:
-#line 5489 "Gmsh.y" /* yacc.c:1646  */
+#line 5501 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(3);
     }
-#line 11523 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11535 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 475:
-#line 5493 "Gmsh.y" /* yacc.c:1646  */
+#line 5505 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
@@ -11552,11 +11564,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 11556 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11568 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 476:
-#line 5522 "Gmsh.y" /* yacc.c:1646  */
+#line 5534 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
@@ -11585,11 +11597,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 11589 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11601 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 477:
-#line 5551 "Gmsh.y" /* yacc.c:1646  */
+#line 5563 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
@@ -11618,11 +11630,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 11622 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11634 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 478:
-#line 5580 "Gmsh.y" /* yacc.c:1646  */
+#line 5592 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++){
@@ -11651,11 +11663,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 11655 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11667 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 479:
-#line 5610 "Gmsh.y" /* yacc.c:1646  */
+#line 5622 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -11667,11 +11679,11 @@ yyreduce:
 	List_Add((yyval.l), &d);
       }
     }
-#line 11671 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11683 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 480:
-#line 5623 "Gmsh.y" /* yacc.c:1646  */
+#line 5635 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -11683,11 +11695,11 @@ yyreduce:
 	List_Add((yyval.l), &d);
       }
     }
-#line 11687 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11699 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 481:
-#line 5636 "Gmsh.y" /* yacc.c:1646  */
+#line 5648 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -11699,11 +11711,11 @@ yyreduce:
 	List_Add((yyval.l), &d);
       }
     }
-#line 11703 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11715 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 482:
-#line 5649 "Gmsh.y" /* yacc.c:1646  */
+#line 5661 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -11715,11 +11727,11 @@ yyreduce:
 	List_Add((yyval.l), &d);
       }
     }
-#line 11719 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11731 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 483:
-#line 5661 "Gmsh.y" /* yacc.c:1646  */
+#line 5673 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[0].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[0].l)); i++){
@@ -11729,11 +11741,11 @@ yyreduce:
       }
       List_Delete((yyvsp[0].l));
     }
-#line 11733 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11745 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 484:
-#line 5671 "Gmsh.y" /* yacc.c:1646  */
+#line 5683 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[0].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[0].l)); i++){
@@ -11743,11 +11755,11 @@ yyreduce:
       }
       List_Delete((yyvsp[0].l));
     }
-#line 11747 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11759 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 485:
-#line 5681 "Gmsh.y" /* yacc.c:1646  */
+#line 5693 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[-2].c)))
@@ -11759,11 +11771,11 @@ yyreduce:
       }
       Free((yyvsp[-2].c));
     }
-#line 11763 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11775 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 486:
-#line 5693 "Gmsh.y" /* yacc.c:1646  */
+#line 5705 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[-2].c)))
@@ -11775,11 +11787,11 @@ yyreduce:
       }
       Free((yyvsp[-2].c));
     }
-#line 11779 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11791 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 487:
-#line 5706 "Gmsh.y" /* yacc.c:1646  */
+#line 5718 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[-1].c)))
@@ -11791,11 +11803,11 @@ yyreduce:
       }
       Free((yyvsp[-1].c));
     }
-#line 11795 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11807 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 488:
-#line 5718 "Gmsh.y" /* yacc.c:1646  */
+#line 5730 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[-5].c)))
@@ -11813,11 +11825,11 @@ yyreduce:
       Free((yyvsp[-5].c));
       List_Delete((yyvsp[-2].l));
     }
-#line 11817 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11829 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 489:
-#line 5736 "Gmsh.y" /* yacc.c:1646  */
+#line 5748 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[-5].c)))
@@ -11835,36 +11847,36 @@ yyreduce:
       Free((yyvsp[-5].c));
       List_Delete((yyvsp[-2].l));
     }
-#line 11839 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11851 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 490:
-#line 5757 "Gmsh.y" /* yacc.c:1646  */
+#line 5769 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[0].d)));
     }
-#line 11848 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11860 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 491:
-#line 5762 "Gmsh.y" /* yacc.c:1646  */
+#line 5774 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = (yyvsp[0].l);
     }
-#line 11856 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11868 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 492:
-#line 5766 "Gmsh.y" /* yacc.c:1646  */
+#line 5778 "Gmsh.y" /* yacc.c:1646  */
     {
       List_Add((yyval.l), &((yyvsp[0].d)));
     }
-#line 11864 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11876 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 493:
-#line 5770 "Gmsh.y" /* yacc.c:1646  */
+#line 5782 "Gmsh.y" /* yacc.c:1646  */
     {
       for(int i = 0; i < List_Nbr((yyvsp[0].l)); i++){
 	double d;
@@ -11873,27 +11885,27 @@ yyreduce:
       }
       List_Delete((yyvsp[0].l));
     }
-#line 11877 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11889 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 494:
-#line 5782 "Gmsh.y" /* yacc.c:1646  */
+#line 5794 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[-7].d), (int)(yyvsp[-5].d), (int)(yyvsp[-3].d), (int)(yyvsp[-1].d));
     }
-#line 11885 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11897 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 495:
-#line 5786 "Gmsh.y" /* yacc.c:1646  */
+#line 5798 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[-5].d), (int)(yyvsp[-3].d), (int)(yyvsp[-1].d), 255);
     }
-#line 11893 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11905 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 496:
-#line 5798 "Gmsh.y" /* yacc.c:1646  */
+#line 5810 "Gmsh.y" /* yacc.c:1646  */
     {
       int flag = 0;
       if(gmsh_yystringsymbols.count((yyvsp[0].c))){
@@ -11910,30 +11922,30 @@ yyreduce:
       if(flag) yymsg(0, "Unknown color '%s'", (yyvsp[0].c));
       Free((yyvsp[0].c));
     }
-#line 11914 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11926 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 497:
-#line 5815 "Gmsh.y" /* yacc.c:1646  */
+#line 5827 "Gmsh.y" /* yacc.c:1646  */
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[-4].c), 0, (yyvsp[0].c), val);
       (yyval.u) = val;
       Free((yyvsp[-4].c)); Free((yyvsp[0].c));
     }
-#line 11925 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11937 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 498:
-#line 5825 "Gmsh.y" /* yacc.c:1646  */
+#line 5837 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = (yyvsp[-1].l);
     }
-#line 11933 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11945 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 499:
-#line 5829 "Gmsh.y" /* yacc.c:1646  */
+#line 5841 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[-3].d));
@@ -11945,36 +11957,36 @@ yyreduce:
       }
       Free((yyvsp[-5].c));
     }
-#line 11949 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11961 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 500:
-#line 5844 "Gmsh.y" /* yacc.c:1646  */
+#line 5856 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[0].u)));
     }
-#line 11958 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11970 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 501:
-#line 5849 "Gmsh.y" /* yacc.c:1646  */
+#line 5861 "Gmsh.y" /* yacc.c:1646  */
     {
       List_Add((yyval.l), &((yyvsp[0].u)));
     }
-#line 11966 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11978 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 502:
-#line 5856 "Gmsh.y" /* yacc.c:1646  */
+#line 5868 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.c) = (yyvsp[0].c);
     }
-#line 11974 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 11986 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 503:
-#line 5860 "Gmsh.y" /* yacc.c:1646  */
+#line 5872 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string val;
       if(!gmsh_yystringsymbols.count((yyvsp[0].c)))
@@ -11987,11 +11999,11 @@ yyreduce:
       strcpy((yyval.c), val.c_str());
       Free((yyvsp[0].c));
     }
-#line 11991 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12003 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 504:
-#line 5873 "Gmsh.y" /* yacc.c:1646  */
+#line 5885 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string val;
       int j = (int)(yyvsp[-1].d);
@@ -12005,32 +12017,32 @@ yyreduce:
       strcpy((yyval.c), val.c_str());
       Free((yyvsp[-3].c));
     }
-#line 12009 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12021 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 505:
-#line 5887 "Gmsh.y" /* yacc.c:1646  */
+#line 5899 "Gmsh.y" /* yacc.c:1646  */
     {      //FIXME
     }
-#line 12016 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12028 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 506:
-#line 5890 "Gmsh.y" /* yacc.c:1646  */
+#line 5902 "Gmsh.y" /* yacc.c:1646  */
     {      //FIXME
     }
-#line 12023 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12035 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 507:
-#line 5893 "Gmsh.y" /* yacc.c:1646  */
+#line 5905 "Gmsh.y" /* yacc.c:1646  */
     {      //FIXME
     }
-#line 12030 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12042 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 508:
-#line 5896 "Gmsh.y" /* yacc.c:1646  */
+#line 5908 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[-2].c), 0, (yyvsp[0].c), out);
@@ -12038,11 +12050,11 @@ yyreduce:
       strcpy((yyval.c), out.c_str());
       Free((yyvsp[-2].c)); Free((yyvsp[0].c));
     }
-#line 12042 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12054 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 509:
-#line 5904 "Gmsh.y" /* yacc.c:1646  */
+#line 5916 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[-5].c), (int)(yyvsp[-3].d), (yyvsp[0].c), out);
@@ -12050,27 +12062,27 @@ yyreduce:
       strcpy((yyval.c), out.c_str());
       Free((yyvsp[-5].c)); Free((yyvsp[0].c));
     }
-#line 12054 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12066 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 510:
-#line 5915 "Gmsh.y" /* yacc.c:1646  */
+#line 5927 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.c) = (yyvsp[0].c);
     }
-#line 12062 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12074 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 511:
-#line 5919 "Gmsh.y" /* yacc.c:1646  */
+#line 5931 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.c) = (yyvsp[-1].c);
     }
-#line 12070 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12082 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 512:
-#line 5923 "Gmsh.y" /* yacc.c:1646  */
+#line 5935 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -12078,31 +12090,31 @@ yyreduce:
       strcpy((yyval.c), ctime(&now));
       (yyval.c)[strlen((yyval.c)) - 1] = '\0';
     }
-#line 12082 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12094 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 513:
-#line 5931 "Gmsh.y" /* yacc.c:1646  */
+#line 5943 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string exe = Msg::GetExecutableName();
       (yyval.c) = (char *)Malloc(exe.size() + 1);
       strcpy((yyval.c), exe.c_str());
     }
-#line 12092 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12104 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 514:
-#line 5937 "Gmsh.y" /* yacc.c:1646  */
+#line 5949 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string action = Msg::GetOnelabAction();
       (yyval.c) = (char *)Malloc(action.size() + 1);
       strcpy((yyval.c), action.c_str());
     }
-#line 12102 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12114 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 515:
-#line 5943 "Gmsh.y" /* yacc.c:1646  */
+#line 5955 "Gmsh.y" /* yacc.c:1646  */
     {
       const char *env = GetEnvironmentVar((yyvsp[-1].c));
       if(!env) env = "";
@@ -12110,11 +12122,11 @@ yyreduce:
       strcpy((yyval.c), env);
       Free((yyvsp[-1].c));
     }
-#line 12114 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12126 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 516:
-#line 5951 "Gmsh.y" /* yacc.c:1646  */
+#line 5963 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string s = Msg::GetString((yyvsp[-3].c), (yyvsp[-1].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -12122,22 +12134,22 @@ yyreduce:
       Free((yyvsp[-3].c));
       Free((yyvsp[-1].c));
     }
-#line 12126 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12138 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 517:
-#line 5959 "Gmsh.y" /* yacc.c:1646  */
+#line 5971 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string s = Msg::GetOnelabString((yyvsp[-1].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
       strcpy((yyval.c), s.c_str());
       Free((yyvsp[-1].c));
     }
-#line 12137 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12149 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 518:
-#line 5966 "Gmsh.y" /* yacc.c:1646  */
+#line 5978 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string s = Msg::GetOnelabString((yyvsp[-3].c), (yyvsp[-1].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -12145,11 +12157,11 @@ yyreduce:
       Free((yyvsp[-3].c));
       Free((yyvsp[-1].c));
     }
-#line 12149 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12161 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 519:
-#line 5974 "Gmsh.y" /* yacc.c:1646  */
+#line 5986 "Gmsh.y" /* yacc.c:1646  */
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++)
@@ -12164,11 +12176,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 12168 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12180 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 520:
-#line 5989 "Gmsh.y" /* yacc.c:1646  */
+#line 6001 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[-1].c)) + 1) * sizeof(char));
       int i;
@@ -12182,11 +12194,11 @@ yyreduce:
       if(i <= 0) strcpy((yyval.c), (yyvsp[-1].c));
       Free((yyvsp[-1].c));
     }
-#line 12186 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12198 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 521:
-#line 6003 "Gmsh.y" /* yacc.c:1646  */
+#line 6015 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[-1].c)) + 1) * sizeof(char));
       int i;
@@ -12200,11 +12212,11 @@ yyreduce:
 	strcpy((yyval.c), &(yyvsp[-1].c)[i+1]);
       Free((yyvsp[-1].c));
     }
-#line 12204 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12216 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 522:
-#line 6017 "Gmsh.y" /* yacc.c:1646  */
+#line 6029 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string input = (yyvsp[-5].c);
       std::string substr_old = (yyvsp[-3].c);
@@ -12216,11 +12228,11 @@ yyreduce:
       Free((yyvsp[-3].c));
       Free((yyvsp[-1].c));
     }
-#line 12220 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12232 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 523:
-#line 6029 "Gmsh.y" /* yacc.c:1646  */
+#line 6041 "Gmsh.y" /* yacc.c:1646  */
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[-1].l)); i++)
@@ -12236,11 +12248,11 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 12240 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12252 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 524:
-#line 6045 "Gmsh.y" /* yacc.c:1646  */
+#line 6057 "Gmsh.y" /* yacc.c:1646  */
     {
       int i = 0;
       while ((yyvsp[-1].c)[i]) {
@@ -12249,11 +12261,11 @@ yyreduce:
       }
       (yyval.c) = (yyvsp[-1].c);
     }
-#line 12253 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12265 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 525:
-#line 6054 "Gmsh.y" /* yacc.c:1646  */
+#line 6066 "Gmsh.y" /* yacc.c:1646  */
     {
       int i = 0;
       while ((yyvsp[-1].c)[i]) {
@@ -12262,11 +12274,11 @@ yyreduce:
       }
       (yyval.c) = (yyvsp[-1].c);
     }
-#line 12266 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12278 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 526:
-#line 6063 "Gmsh.y" /* yacc.c:1646  */
+#line 6075 "Gmsh.y" /* yacc.c:1646  */
     {
       int i = 0;
       while ((yyvsp[-1].c)[i]) {
@@ -12276,11 +12288,11 @@ yyreduce:
       }
       (yyval.c) = (yyvsp[-1].c);
     }
-#line 12280 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12292 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 527:
-#line 6073 "Gmsh.y" /* yacc.c:1646  */
+#line 6085 "Gmsh.y" /* yacc.c:1646  */
     {
       if((yyvsp[-5].d)){
         (yyval.c) = (yyvsp[-3].c);
@@ -12291,19 +12303,19 @@ yyreduce:
         Free((yyvsp[-3].c));
       }
     }
-#line 12295 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12307 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 528:
-#line 6084 "Gmsh.y" /* yacc.c:1646  */
+#line 6096 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.c) = (yyvsp[-1].c);
     }
-#line 12303 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12315 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 529:
-#line 6088 "Gmsh.y" /* yacc.c:1646  */
+#line 6100 "Gmsh.y" /* yacc.c:1646  */
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[-3].c), (yyvsp[-1].l), tmpstring);
@@ -12322,60 +12334,60 @@ yyreduce:
       }
       List_Delete((yyvsp[-1].l));
     }
-#line 12326 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12338 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 530:
-#line 6107 "Gmsh.y" /* yacc.c:1646  */
+#line 6119 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[-1].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
       strcpy((yyval.c), tmp.c_str());
       Free((yyvsp[-1].c));
     }
-#line 12337 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12349 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 531:
-#line 6114 "Gmsh.y" /* yacc.c:1646  */
+#line 6126 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string tmp = SplitFileName(GetAbsolutePath(gmsh_yyname))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
       strcpy((yyval.c), tmp.c_str());
     }
-#line 12347 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12359 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 532:
-#line 6120 "Gmsh.y" /* yacc.c:1646  */
+#line 6132 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string tmp = SplitFileName((yyvsp[-1].c))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
       strcpy((yyval.c), tmp.c_str());
       Free((yyvsp[-1].c));
     }
-#line 12358 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12370 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 533:
-#line 6127 "Gmsh.y" /* yacc.c:1646  */
+#line 6139 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string tmp = GetAbsolutePath((yyvsp[-1].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
       strcpy((yyval.c), tmp.c_str());
       Free((yyvsp[-1].c));
     }
-#line 12369 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12381 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 534:
-#line 6134 "Gmsh.y" /* yacc.c:1646  */
+#line 6146 "Gmsh.y" /* yacc.c:1646  */
     { floatOptions.clear(); charOptions.clear(); }
-#line 12375 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12387 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 535:
-#line 6136 "Gmsh.y" /* yacc.c:1646  */
+#line 6148 "Gmsh.y" /* yacc.c:1646  */
     {
       std::string val((yyvsp[-3].c));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -12383,26 +12395,26 @@ yyreduce:
       strcpy((yyval.c), val.c_str());
       Free((yyvsp[-3].c));
     }
-#line 12387 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12399 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 536:
-#line 6147 "Gmsh.y" /* yacc.c:1646  */
+#line 6159 "Gmsh.y" /* yacc.c:1646  */
     {
       (yyval.l) = List_Create(20,20,sizeof(char*));
       List_Add((yyval.l), &((yyvsp[0].c)));
     }
-#line 12396 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12408 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 537:
-#line 6152 "Gmsh.y" /* yacc.c:1646  */
+#line 6164 "Gmsh.y" /* yacc.c:1646  */
     { List_Add((yyval.l), &((yyvsp[0].c))); }
-#line 12402 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12414 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 538:
-#line 6158 "Gmsh.y" /* yacc.c:1646  */
+#line 6170 "Gmsh.y" /* yacc.c:1646  */
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[-1].d));
@@ -12410,11 +12422,11 @@ yyreduce:
       strcpy((yyval.c), (yyvsp[-4].c)); strcat((yyval.c), tmpstr);
       Free((yyvsp[-4].c));
     }
-#line 12414 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12426 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 539:
-#line 6167 "Gmsh.y" /* yacc.c:1646  */
+#line 6179 "Gmsh.y" /* yacc.c:1646  */
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[-1].d));
@@ -12422,29 +12434,29 @@ yyreduce:
       strcpy((yyval.c), (yyvsp[-4].c)) ; strcat((yyval.c), tmpstr) ;
       Free((yyvsp[-4].c));
     }
-#line 12426 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12438 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 540:
-#line 6180 "Gmsh.y" /* yacc.c:1646  */
+#line 6192 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.c) = (yyvsp[0].c); }
-#line 12432 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12444 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 541:
-#line 6183 "Gmsh.y" /* yacc.c:1646  */
+#line 6195 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.c) = (yyvsp[0].c); }
-#line 12438 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12450 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
   case 542:
-#line 6187 "Gmsh.y" /* yacc.c:1646  */
+#line 6199 "Gmsh.y" /* yacc.c:1646  */
     { (yyval.c) = (yyvsp[-1].c); }
-#line 12444 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12456 "Gmsh.tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 12448 "Gmsh.tab.cpp" /* yacc.c:1646  */
+#line 12460 "Gmsh.tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -12672,7 +12684,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 6190 "Gmsh.y" /* yacc.c:1906  */
+#line 6202 "Gmsh.y" /* yacc.c:1906  */
 
 
 void assignVariable(const std::string &name, int index, int assignType,
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 950ed4b3024b4bc49cc218ca692cd6983c7738d5..4bb824aed4f4fa7d4e51d5960b6b1ce3de37734d 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1683,6 +1683,9 @@ Shape :
           int j = (int)d;
           List_Suppress(p->Entities, &j, fcmp_int);
         }
+        if(!List_Nbr(p->Entities)){
+          DeletePhysicalPoint(num);
+        }
       }
       else{
 	yymsg(0, "Unsupported operation on physical point %d", num);
@@ -1962,6 +1965,9 @@ Shape :
           int j = (int)d;
           List_Suppress(p->Entities, &j, fcmp_int);
         }
+        if(!List_Nbr(p->Entities)){
+          DeletePhysicalLine(num);
+        }
       }
       else{
 	yymsg(0, "Unsupported operation on physical line %d", num);
@@ -2201,6 +2207,9 @@ Shape :
           int j = (int)d;
           List_Suppress(p->Entities, &j, fcmp_int);
         }
+        if(!List_Nbr(p->Entities)){
+          DeletePhysicalSurface(num);
+        }
       }
       else{
 	yymsg(0, "Unsupported operation on physical surface %d", num);
@@ -2296,6 +2305,9 @@ Shape :
           int j = (int)d;
           List_Suppress(p->Entities, &j, fcmp_int);
         }
+        if(!List_Nbr(p->Entities)){
+          DeletePhysicalVolume(num);
+        }
       }
       else{
 	yymsg(0, "Unsupported operation on physical volume %d", num);