diff --git a/Geo/GModelIO_GEO.cpp b/Geo/GModelIO_GEO.cpp
index d2165d24075961c750b59aad4253c48dafb97ba8..210a55e761f17a5bbbdc26d2a3dadbc05832ccc4 100644
--- a/Geo/GModelIO_GEO.cpp
+++ b/Geo/GModelIO_GEO.cpp
@@ -27,27 +27,7 @@
 #include "Parser.h"
 #endif
 
-// GEO_Internals routines
-
-int compareVertex(const void *a, const void *b);
-int compareSurfaceLoop(const void *a, const void *b);
-int compareEdgeLoop(const void *a, const void *b);
-int compareCurve(const void *a, const void *b);
-int compareSurface(const void *a, const void *b);
-int compareVolume(const void *a, const void *b);
-int compareLevelSet(const void *a, const void *b);
-int comparePhysicalGroup(const void *a, const void *b);
-
-void Free_Vertex(void *a, void *b);
-void Free_PhysicalGroup(void *a, void *b);
-void Free_EdgeLoop(void *a, void *b);
-void Free_SurfaceLoop(void *a, void *b);
-void Free_Curve(void *a, void *b);
-void Free_Surface(void *a, void *b);
-void Free_Volume(void *a, void *b);
-void Free_LevelSet(void *a, void *b);
-
-void GEO_Internals::alloc_all()
+void GEO_Internals::_allocateAll()
 {
   MaxPointNum = MaxLineNum = MaxLineLoopNum = MaxSurfaceNum = 0;
   MaxSurfaceLoopNum = MaxVolumeNum = MaxPhysicalNum = 0;
@@ -61,7 +41,7 @@ void GEO_Internals::alloc_all()
   PhysicalGroups = List_Create(5, 5, sizeof(PhysicalGroup *));
 }
 
-void GEO_Internals::free_all()
+void GEO_Internals::_freeAll()
 {
   MaxPointNum = MaxLineNum = MaxLineLoopNum = MaxSurfaceNum = 0;
   MaxSurfaceLoopNum = MaxVolumeNum = MaxPhysicalNum = 0;
@@ -75,12 +55,25 @@ void GEO_Internals::free_all()
   List_Action(PhysicalGroups, Free_PhysicalGroup); List_Delete(PhysicalGroups);
 }
 
-void GEO_Internals::reset_physicals()
+void GEO_Internals::resetPhysicalGroups()
 {
   List_Action(PhysicalGroups, Free_PhysicalGroup);
   List_Reset(PhysicalGroups);
 }
 
+void GEO_Internals::addVertex(int num, double x, double y, double z, double lc)
+{
+  Vertex *v = Create_Vertex(num, x, y, z, lc, 1.0);
+  Tree_Add(Points, &v);
+}
+
+void GEO_Internals::addVertex(int num, double x, double y, gmshSurface *surface,
+                              double lc)
+{
+  Vertex *v = Create_Vertex(num, x, y, surface, lc);
+  Tree_Add(Points, &v);
+}
+
 // GModel interface
 
 void GModel::_createGEOInternals()
diff --git a/Geo/GModelIO_GEO.h b/Geo/GModelIO_GEO.h
index 1aefae0b633b3e0888803cf524da4bfb6cf4cb45..86b65120fe48add6adcb5988c6e7e68bb9a8a716 100644
--- a/Geo/GModelIO_GEO.h
+++ b/Geo/GModelIO_GEO.h
@@ -10,8 +10,8 @@
 
 class GEO_Internals{
  private:
-  void alloc_all();
-  void free_all();
+  void _allocateAll();
+  void _freeAll();
  public:
   // FIXME: all this must (will) become private ; and all the direct calls in
   // Gmsh.y should (will) go through an integer-based API similar to the one in
@@ -45,18 +45,19 @@ class GEO_Internals{
   std::map<int, MasterFace> periodicFaces;
 
  public:
-  GEO_Internals(){ alloc_all(); }
-  ~GEO_Internals(){ free_all(); }
-  void destroy(){ free_all(); alloc_all(); }
-  void reset_physicals();
+  GEO_Internals(){ _allocateAll(); }
+  ~GEO_Internals(){ _freeAll(); }
+  void destroy(){ _freeAll(); _allocateAll(); }
+  void resetPhysicalGroups();
   void addCompoundMesh(int dim, List_T *_list)
   {
     std::vector<int> compound;
     for(int i = 0; i < List_Nbr(_list); i++)
       compound.push_back((int)*(double*)List_Pointer(_list, i));
-    meshCompounds.insert(std::make_pair(dim,compound));
+    meshCompounds.insert(std::make_pair(dim, compound));
   }
-
+  void addVertex(int num, double x, double y, double z, double lc);
+  void addVertex(int num, double x, double y, gmshSurface *s, double lc);
 };
 
 #endif
diff --git a/Geo/Geo.h b/Geo/Geo.h
index f943058ed27d297831c5931d1427eb6a92ed6740..6bb018e514b2992e68f12119bda65ffcac11a3e2 100644
--- a/Geo/Geo.h
+++ b/Geo/Geo.h
@@ -306,7 +306,22 @@ int NEWFIELD(void);
 int NEWPHYSICAL(void);
 
 int compareVertex(const void *a, const void *b);
+int compareSurfaceLoop(const void *a, const void *b);
+int compareEdgeLoop(const void *a, const void *b);
 int compareCurve(const void *a, const void *b);
+int compareSurface(const void *a, const void *b);
+int compareVolume(const void *a, const void *b);
+int compareLevelSet(const void *a, const void *b);
+int comparePhysicalGroup(const void *a, const void *b);
+
+void Free_Vertex(void *a, void *b);
+void Free_PhysicalGroup(void *a, void *b);
+void Free_EdgeLoop(void *a, void *b);
+void Free_SurfaceLoop(void *a, void *b);
+void Free_Curve(void *a, void *b);
+void Free_Surface(void *a, void *b);
+void Free_Volume(void *a, void *b);
+void Free_LevelSet(void *a, void *b);
 
 void Projette(Vertex *v, double mat[3][3]);
 
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 1277e9954a127a6d4ff5d0a7037d38c4c3fff58b..745be79784027ff5003b47404f5225774caa9c08 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1404,49 +1404,49 @@ static const yytype_uint16 yyrline[] =
     1491,  1497,  1502,  1528,  1529,  1533,  1544,  1559,  1569,  1570,
     1575,  1583,  1592,  1600,  1618,  1622,  1628,  1636,  1640,  1646,
     1654,  1658,  1664,  1672,  1676,  1682,  1691,  1694,  1707,  1710,
-    1718,  1728,  1756,  1799,  1822,  1851,  1872,  1890,  1947,  2012,
-    2039,  2066,  2093,  2121,  2140,  2145,  2163,  2209,  2237,  2295,
-    2340,  2346,  2352,  2359,  2401,  2427,  2451,  2475,  2501,  2524,
-    2551,  2579,  2604,  2627,  2654,  2658,  2677,  2711,  2758,  2776,
-    2803,  2822,  2841,  2845,  2861,  2909,  2926,  2944,  2954,  2964,
-    2974,  3037,  3048,  3064,  3065,  3070,  3073,  3077,  3106,  3135,
-    3164,  3198,  3220,  3246,  3268,  3291,  3312,  3368,  3392,  3417,
-    3443,  3556,  3575,  3618,  3639,  3645,  3660,  3688,  3705,  3714,
-    3728,  3742,  3748,  3754,  3763,  3772,  3781,  3795,  3857,  3875,
-    3892,  3907,  3936,  3948,  3972,  3976,  3981,  3989,  3994,  4000,
-    4005,  4011,  4019,  4023,  4027,  4032,  4092,  4108,  4125,  4142,
-    4164,  4186,  4221,  4229,  4237,  4243,  4250,  4257,  4277,  4303,
-    4315,  4327,  4357,  4388,  4397,  4396,  4411,  4410,  4425,  4424,
-    4439,  4438,  4451,  4478,  4501,  4524,  4555,  4562,  4569,  4576,
-    4583,  4590,  4597,  4604,  4611,  4619,  4618,  4632,  4631,  4645,
-    4644,  4658,  4657,  4671,  4670,  4684,  4683,  4697,  4696,  4710,
-    4709,  4723,  4722,  4739,  4742,  4748,  4760,  4780,  4804,  4808,
-    4812,  4816,  4820,  4824,  4830,  4836,  4840,  4844,  4848,  4852,
-    4871,  4884,  4885,  4886,  4887,  4888,  4892,  4893,  4894,  4897,
-    4931,  4957,  4981,  4984,  5000,  5003,  5020,  5023,  5029,  5032,
-    5039,  5042,  5049,  5105,  5175,  5180,  5247,  5283,  5291,  5334,
-    5373,  5393,  5425,  5452,  5478,  5504,  5530,  5556,  5578,  5606,
-    5634,  5662,  5690,  5718,  5757,  5796,  5817,  5838,  5865,  5869,
-    5879,  5914,  5915,  5916,  5920,  5926,  5938,  5956,  5984,  5985,
-    5986,  5987,  5988,  5989,  5990,  5991,  5992,  5999,  6000,  6001,
-    6002,  6003,  6004,  6005,  6006,  6007,  6008,  6009,  6010,  6011,
-    6012,  6013,  6014,  6015,  6016,  6017,  6018,  6019,  6020,  6021,
-    6022,  6023,  6024,  6025,  6026,  6027,  6028,  6029,  6030,  6031,
-    6040,  6041,  6042,  6043,  6044,  6045,  6046,  6047,  6048,  6049,
-    6050,  6055,  6054,  6062,  6067,  6072,  6089,  6107,  6125,  6143,
-    6161,  6166,  6172,  6187,  6206,  6226,  6246,  6266,  6289,  6294,
-    6299,  6309,  6319,  6324,  6335,  6344,  6349,  6354,  6381,  6385,
-    6389,  6393,  6397,  6404,  6408,  6412,  6416,  6423,  6428,  6435,
-    6440,  6444,  6449,  6453,  6461,  6472,  6476,  6488,  6496,  6504,
-    6511,  6521,  6550,  6554,  6558,  6562,  6566,  6570,  6574,  6578,
-    6582,  6611,  6640,  6669,  6698,  6711,  6724,  6737,  6750,  6760,
-    6770,  6780,  6792,  6805,  6817,  6821,  6825,  6829,  6833,  6851,
-    6869,  6877,  6885,  6914,  6924,  6943,  6948,  6952,  6956,  6968,
-    6972,  6984,  7001,  7011,  7015,  7030,  7035,  7042,  7046,  7059,
-    7073,  7087,  7101,  7115,  7123,  7134,  7138,  7142,  7150,  7156,
-    7162,  7170,  7178,  7185,  7193,  7208,  7222,  7236,  7248,  7264,
-    7273,  7282,  7292,  7303,  7311,  7319,  7323,  7342,  7349,  7355,
-    7362,  7370,  7369,  7382,  7387,  7393,  7402,  7415,  7418,  7422
+    1718,  1728,  1754,  1797,  1820,  1849,  1870,  1888,  1945,  2010,
+    2037,  2064,  2091,  2119,  2138,  2143,  2161,  2207,  2235,  2293,
+    2338,  2344,  2350,  2357,  2399,  2425,  2449,  2473,  2499,  2522,
+    2549,  2577,  2602,  2625,  2652,  2656,  2675,  2709,  2756,  2774,
+    2801,  2820,  2839,  2843,  2859,  2907,  2924,  2942,  2952,  2962,
+    2972,  3035,  3046,  3062,  3063,  3068,  3071,  3075,  3104,  3133,
+    3162,  3196,  3218,  3244,  3266,  3289,  3310,  3366,  3390,  3415,
+    3441,  3554,  3573,  3616,  3637,  3643,  3658,  3686,  3703,  3712,
+    3726,  3740,  3746,  3752,  3761,  3770,  3779,  3793,  3855,  3873,
+    3890,  3905,  3934,  3946,  3970,  3974,  3979,  3987,  3992,  3998,
+    4003,  4009,  4017,  4021,  4025,  4030,  4090,  4106,  4123,  4140,
+    4162,  4184,  4219,  4227,  4235,  4241,  4248,  4255,  4275,  4301,
+    4313,  4325,  4355,  4386,  4395,  4394,  4409,  4408,  4423,  4422,
+    4437,  4436,  4449,  4476,  4499,  4522,  4553,  4560,  4567,  4574,
+    4581,  4588,  4595,  4602,  4609,  4617,  4616,  4630,  4629,  4643,
+    4642,  4656,  4655,  4669,  4668,  4682,  4681,  4695,  4694,  4708,
+    4707,  4721,  4720,  4737,  4740,  4746,  4758,  4778,  4802,  4806,
+    4810,  4814,  4818,  4822,  4828,  4834,  4838,  4842,  4846,  4850,
+    4869,  4882,  4883,  4884,  4885,  4886,  4890,  4891,  4892,  4895,
+    4929,  4955,  4979,  4982,  4998,  5001,  5018,  5021,  5027,  5030,
+    5037,  5040,  5047,  5103,  5173,  5178,  5245,  5281,  5289,  5332,
+    5371,  5391,  5423,  5450,  5476,  5502,  5528,  5554,  5576,  5604,
+    5632,  5660,  5688,  5716,  5755,  5794,  5815,  5836,  5863,  5867,
+    5877,  5912,  5913,  5914,  5918,  5924,  5936,  5954,  5982,  5983,
+    5984,  5985,  5986,  5987,  5988,  5989,  5990,  5997,  5998,  5999,
+    6000,  6001,  6002,  6003,  6004,  6005,  6006,  6007,  6008,  6009,
+    6010,  6011,  6012,  6013,  6014,  6015,  6016,  6017,  6018,  6019,
+    6020,  6021,  6022,  6023,  6024,  6025,  6026,  6027,  6028,  6029,
+    6038,  6039,  6040,  6041,  6042,  6043,  6044,  6045,  6046,  6047,
+    6048,  6053,  6052,  6060,  6065,  6070,  6087,  6105,  6123,  6141,
+    6159,  6164,  6170,  6185,  6204,  6224,  6244,  6264,  6287,  6292,
+    6297,  6307,  6317,  6322,  6333,  6342,  6347,  6352,  6379,  6383,
+    6387,  6391,  6395,  6402,  6406,  6410,  6414,  6421,  6426,  6433,
+    6438,  6442,  6447,  6451,  6459,  6470,  6474,  6486,  6494,  6502,
+    6509,  6519,  6548,  6552,  6556,  6560,  6564,  6568,  6572,  6576,
+    6580,  6609,  6638,  6667,  6696,  6709,  6722,  6735,  6748,  6758,
+    6768,  6778,  6790,  6803,  6815,  6819,  6823,  6827,  6831,  6849,
+    6867,  6875,  6883,  6912,  6922,  6941,  6946,  6950,  6954,  6966,
+    6970,  6982,  6999,  7009,  7013,  7028,  7033,  7040,  7044,  7057,
+    7071,  7085,  7099,  7113,  7121,  7132,  7136,  7140,  7148,  7154,
+    7160,  7168,  7176,  7183,  7191,  7206,  7220,  7234,  7246,  7262,
+    7271,  7280,  7290,  7301,  7309,  7317,  7321,  7340,  7347,  7353,
+    7360,  7368,  7367,  7380,  7385,  7391,  7400,  7413,  7416,  7420
 };
 #endif
 
@@ -8064,17 +8064,15 @@ yyreduce:
         double y = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[1];
         double z = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[2];
         double lc = CTX::instance()->geom.scalingFactor * (yyvsp[(6) - (7)].v)[3];
+        if(lc == 0.) lc = MAX_LC; // no mesh size given at the point
         if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
           GModel::current()->getOCCInternals()->addVertex(num, x, y, z, lc);
         }
         else{
-          if(lc == 0.) lc = MAX_LC; // no mesh size given at the point
-          Vertex *v;
           if(!myGmshSurface)
-            v = Create_Vertex(num, x, y, z, lc, 1.0);
+            GModel::current()->getGEOInternals()->addVertex(num, x, y, z, lc);
           else
-            v = Create_Vertex(num, x, y, myGmshSurface, lc);
-          Tree_Add(GModel::current()->getGEOInternals()->Points, &v);
+            GModel::current()->getGEOInternals()->addVertex(num, x, y, myGmshSurface, lc);
         }
         AddToTemporaryBoundingBox(x, y, z);
       }
@@ -8084,7 +8082,7 @@ yyreduce:
     break;
 
   case 172:
-#line 1757 "Gmsh.y"
+#line 1755 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -8130,7 +8128,7 @@ yyreduce:
     break;
 
   case 173:
-#line 1800 "Gmsh.y"
+#line 1798 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -8153,7 +8151,7 @@ yyreduce:
     break;
 
   case 174:
-#line 1823 "Gmsh.y"
+#line 1821 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -8185,7 +8183,7 @@ yyreduce:
     break;
 
   case 175:
-#line 1852 "Gmsh.y"
+#line 1850 "Gmsh.y"
     {
       for (int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	double dnum;
@@ -8209,7 +8207,7 @@ yyreduce:
     break;
 
   case 176:
-#line 1873 "Gmsh.y"
+#line 1871 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -8230,7 +8228,7 @@ yyreduce:
     break;
 
   case 177:
-#line 1891 "Gmsh.y"
+#line 1889 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       if(FindCurve(num)){
@@ -8290,7 +8288,7 @@ yyreduce:
     break;
 
   case 178:
-#line 1948 "Gmsh.y"
+#line 1946 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d);
       if(FindCurve(num)){
@@ -8358,7 +8356,7 @@ yyreduce:
     break;
 
   case 179:
-#line 2013 "Gmsh.y"
+#line 2011 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -8388,7 +8386,7 @@ yyreduce:
     break;
 
   case 180:
-#line 2040 "Gmsh.y"
+#line 2038 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindCurve(num)){
@@ -8418,7 +8416,7 @@ yyreduce:
     break;
 
   case 181:
-#line 2068 "Gmsh.y"
+#line 2066 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (11)].d);
       if(List_Nbr((yyvsp[(6) - (11)].l)) + (int)(yyvsp[(10) - (11)].d) + 1 != List_Nbr((yyvsp[(8) - (11)].l))){
@@ -8447,7 +8445,7 @@ yyreduce:
     break;
 
   case 182:
-#line 2094 "Gmsh.y"
+#line 2092 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -8478,7 +8476,7 @@ yyreduce:
     break;
 
   case 183:
-#line 2122 "Gmsh.y"
+#line 2120 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -8499,14 +8497,14 @@ yyreduce:
     break;
 
   case 184:
-#line 2141 "Gmsh.y"
+#line 2139 "Gmsh.y"
     {
      GModel::current()->getGEOInternals()->addCompoundMesh ( 1 , (yyvsp[(3) - (4)].l) );
    ;}
     break;
 
   case 185:
-#line 2146 "Gmsh.y"
+#line 2144 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindCurve(num)){
@@ -8527,7 +8525,7 @@ yyreduce:
     break;
 
   case 186:
-#line 2164 "Gmsh.y"
+#line 2162 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -8573,7 +8571,7 @@ yyreduce:
     break;
 
   case 187:
-#line 2210 "Gmsh.y"
+#line 2208 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -8604,7 +8602,7 @@ yyreduce:
     break;
 
   case 188:
-#line 2238 "Gmsh.y"
+#line 2236 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (8)].d), type = 0;
       if(FindSurface(num)){
@@ -8664,7 +8662,7 @@ yyreduce:
     break;
 
   case 189:
-#line 2296 "Gmsh.y"
+#line 2294 "Gmsh.y"
     {
       yymsg(1, "'Ruled Surface' command is deprecated: use 'Surface' instead");
       int num = (int)(yyvsp[(4) - (9)].d), type = 0;
@@ -8712,7 +8710,7 @@ yyreduce:
     break;
 
   case 190:
-#line 2341 "Gmsh.y"
+#line 2339 "Gmsh.y"
     {
       myGmshSurface = 0;
       (yyval.s).Type = 0;
@@ -8721,7 +8719,7 @@ yyreduce:
     break;
 
   case 191:
-#line 2347 "Gmsh.y"
+#line 2345 "Gmsh.y"
     {
       myGmshSurface = gmshSurface::getSurface((int)(yyvsp[(3) - (4)].d));
       (yyval.s).Type = 0;
@@ -8730,7 +8728,7 @@ yyreduce:
     break;
 
   case 192:
-#line 2353 "Gmsh.y"
+#line 2351 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (10)].d);
       myGmshSurface = gmshParametricSurface::NewParametricSurface(num, (yyvsp[(7) - (10)].c), (yyvsp[(8) - (10)].c), (yyvsp[(9) - (10)].c));
@@ -8740,7 +8738,7 @@ yyreduce:
     break;
 
   case 193:
-#line 2360 "Gmsh.y"
+#line 2358 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 4 || List_Nbr((yyvsp[(6) - (7)].l)) == 5){
@@ -8785,7 +8783,7 @@ yyreduce:
     break;
 
   case 194:
-#line 2402 "Gmsh.y"
+#line 2400 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if (List_Nbr((yyvsp[(6) - (7)].l)) != 2){
@@ -8814,7 +8812,7 @@ yyreduce:
     break;
 
   case 195:
-#line 2428 "Gmsh.y"
+#line 2426 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 6){
@@ -8841,7 +8839,7 @@ yyreduce:
     break;
 
   case 196:
-#line 2452 "Gmsh.y"
+#line 2450 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 5 || List_Nbr((yyvsp[(6) - (7)].l)) == 6){
@@ -8868,7 +8866,7 @@ yyreduce:
     break;
 
   case 197:
-#line 2476 "Gmsh.y"
+#line 2474 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 6 || List_Nbr((yyvsp[(6) - (7)].l)) == 7){
@@ -8897,7 +8895,7 @@ yyreduce:
     break;
 
   case 198:
-#line 2502 "Gmsh.y"
+#line 2500 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 4 || List_Nbr((yyvsp[(6) - (7)].l)) == 5){
@@ -8923,7 +8921,7 @@ yyreduce:
     break;
 
   case 199:
-#line 2525 "Gmsh.y"
+#line 2523 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 7 || List_Nbr((yyvsp[(6) - (7)].l)) == 8){
@@ -8953,7 +8951,7 @@ yyreduce:
     break;
 
   case 200:
-#line 2552 "Gmsh.y"
+#line 2550 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 8 || List_Nbr((yyvsp[(6) - (7)].l)) == 9){
@@ -8984,7 +8982,7 @@ yyreduce:
     break;
 
   case 201:
-#line 2580 "Gmsh.y"
+#line 2578 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(List_Nbr((yyvsp[(6) - (7)].l)) == 7){
@@ -9012,7 +9010,7 @@ yyreduce:
     break;
 
   case 202:
-#line 2605 "Gmsh.y"
+#line 2603 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -9038,7 +9036,7 @@ yyreduce:
     break;
 
   case 203:
-#line 2628 "Gmsh.y"
+#line 2626 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -9068,14 +9066,14 @@ yyreduce:
     break;
 
   case 204:
-#line 2655 "Gmsh.y"
+#line 2653 "Gmsh.y"
     {
       GModel::current()->getGEOInternals()->addCompoundMesh ( 2 , (yyvsp[(3) - (4)].l) );
     ;}
     break;
 
   case 205:
-#line 2659 "Gmsh.y"
+#line 2657 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindSurface(num)){
@@ -9097,7 +9095,7 @@ yyreduce:
     break;
 
   case 206:
-#line 2679 "Gmsh.y"
+#line 2677 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (12)].d);
       if(FindSurface(num)){
@@ -9133,7 +9131,7 @@ yyreduce:
     break;
 
   case 207:
-#line 2712 "Gmsh.y"
+#line 2710 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -9179,7 +9177,7 @@ yyreduce:
     break;
 
   case 208:
-#line 2759 "Gmsh.y"
+#line 2757 "Gmsh.y"
     {
       yymsg(1, "'Complex Volume' command is deprecated: use 'Volume' instead");
       int num = (int)(yyvsp[(4) - (8)].d);
@@ -9200,7 +9198,7 @@ yyreduce:
     break;
 
   case 209:
-#line 2777 "Gmsh.y"
+#line 2775 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(FindVolume(num)){
@@ -9230,7 +9228,7 @@ yyreduce:
     break;
 
   case 210:
-#line 2804 "Gmsh.y"
+#line 2802 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (7)].d);
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -9252,7 +9250,7 @@ yyreduce:
     break;
 
   case 211:
-#line 2823 "Gmsh.y"
+#line 2821 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -9274,14 +9272,14 @@ yyreduce:
     break;
 
   case 212:
-#line 2842 "Gmsh.y"
+#line 2840 "Gmsh.y"
     {
       GModel::current()->getGEOInternals()->addCompoundMesh(3, (yyvsp[(3) - (4)].l));
     ;}
     break;
 
   case 213:
-#line 2846 "Gmsh.y"
+#line 2844 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].d);
       if(FindVolume(num)){
@@ -9300,7 +9298,7 @@ yyreduce:
     break;
 
   case 214:
-#line 2862 "Gmsh.y"
+#line 2860 "Gmsh.y"
     {
       int num = (int)(yyvsp[(4) - (8)].i);
       int op = (yyvsp[(6) - (8)].i);
@@ -9346,7 +9344,7 @@ yyreduce:
     break;
 
   case 215:
-#line 2910 "Gmsh.y"
+#line 2908 "Gmsh.y"
     {
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
         std::vector<int> in[4];
@@ -9366,7 +9364,7 @@ yyreduce:
     break;
 
   case 216:
-#line 2927 "Gmsh.y"
+#line 2925 "Gmsh.y"
     {
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
         std::vector<int> in[4];
@@ -9387,7 +9385,7 @@ yyreduce:
     break;
 
   case 217:
-#line 2945 "Gmsh.y"
+#line 2943 "Gmsh.y"
     {
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
         Msg::Error("TODO OCC Symmetry");
@@ -9400,7 +9398,7 @@ yyreduce:
     break;
 
   case 218:
-#line 2955 "Gmsh.y"
+#line 2953 "Gmsh.y"
     {
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
         Msg::Error("TODO OCC Dilate");
@@ -9413,7 +9411,7 @@ yyreduce:
     break;
 
   case 219:
-#line 2965 "Gmsh.y"
+#line 2963 "Gmsh.y"
     {
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
         Msg::Error("TODO OCC Dilate");
@@ -9426,7 +9424,7 @@ yyreduce:
     break;
 
   case 220:
-#line 2975 "Gmsh.y"
+#line 2973 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
       if(!strcmp((yyvsp[(1) - (4)].c), "Duplicata")){
@@ -9492,7 +9490,7 @@ yyreduce:
     break;
 
   case 221:
-#line 3038 "Gmsh.y"
+#line 3036 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -9506,7 +9504,7 @@ yyreduce:
     break;
 
   case 222:
-#line 3049 "Gmsh.y"
+#line 3047 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape*));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -9522,31 +9520,31 @@ yyreduce:
     break;
 
   case 223:
-#line 3064 "Gmsh.y"
+#line 3062 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 224:
-#line 3065 "Gmsh.y"
+#line 3063 "Gmsh.y"
     { (yyval.l) = (yyvsp[(1) - (1)].l); ;}
     break;
 
   case 225:
-#line 3070 "Gmsh.y"
+#line 3068 "Gmsh.y"
     {
       (yyval.l) = List_Create(3, 3, sizeof(Shape));
     ;}
     break;
 
   case 226:
-#line 3074 "Gmsh.y"
+#line 3072 "Gmsh.y"
     {
       List_Add((yyval.l), &(yyvsp[(2) - (2)].s));
     ;}
     break;
 
   case 227:
-#line 3078 "Gmsh.y"
+#line 3076 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -9578,7 +9576,7 @@ yyreduce:
     break;
 
   case 228:
-#line 3107 "Gmsh.y"
+#line 3105 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -9610,7 +9608,7 @@ yyreduce:
     break;
 
   case 229:
-#line 3136 "Gmsh.y"
+#line 3134 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -9642,7 +9640,7 @@ yyreduce:
     break;
 
   case 230:
-#line 3165 "Gmsh.y"
+#line 3163 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (6)].l)); i++){
 	double d;
@@ -9674,7 +9672,7 @@ yyreduce:
     break;
 
   case 231:
-#line 3199 "Gmsh.y"
+#line 3197 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(7) - (8)].l)) == 4){
@@ -9699,7 +9697,7 @@ yyreduce:
     break;
 
   case 232:
-#line 3221 "Gmsh.y"
+#line 3219 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       int t = (int)(yyvsp[(4) - (10)].d);
@@ -9728,7 +9726,7 @@ yyreduce:
     break;
 
   case 233:
-#line 3248 "Gmsh.y"
+#line 3246 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 0){
@@ -9752,7 +9750,7 @@ yyreduce:
     break;
 
   case 234:
-#line 3270 "Gmsh.y"
+#line 3268 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(14) - (16)].l)) == 0){
@@ -9777,7 +9775,7 @@ yyreduce:
     break;
 
   case 235:
-#line 3292 "Gmsh.y"
+#line 3290 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(10) - (12)].l)) == 1){
@@ -9801,7 +9799,7 @@ yyreduce:
     break;
 
   case 236:
-#line 3314 "Gmsh.y"
+#line 3312 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 1){
@@ -9859,7 +9857,7 @@ yyreduce:
     break;
 
   case 237:
-#line 3370 "Gmsh.y"
+#line 3368 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 1){
@@ -9885,7 +9883,7 @@ yyreduce:
     break;
 
   case 238:
-#line 3394 "Gmsh.y"
+#line 3392 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 3){
@@ -9912,7 +9910,7 @@ yyreduce:
     break;
 
   case 239:
-#line 3419 "Gmsh.y"
+#line 3417 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(List_Nbr((yyvsp[(12) - (14)].l)) == 5){
@@ -9940,7 +9938,7 @@ yyreduce:
     break;
 
   case 240:
-#line 3444 "Gmsh.y"
+#line 3442 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "Union")){
@@ -10056,7 +10054,7 @@ yyreduce:
     break;
 
   case 241:
-#line 3557 "Gmsh.y"
+#line 3555 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
@@ -10078,7 +10076,7 @@ yyreduce:
     break;
 
   case 242:
-#line 3576 "Gmsh.y"
+#line 3574 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
@@ -10119,7 +10117,7 @@ yyreduce:
     break;
 
   case 243:
-#line 3619 "Gmsh.y"
+#line 3617 "Gmsh.y"
     {
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
         std::vector<int> in[4];
@@ -10143,7 +10141,7 @@ yyreduce:
     break;
 
   case 244:
-#line 3640 "Gmsh.y"
+#line 3638 "Gmsh.y"
     {
 #if defined(HAVE_MESH)
       GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
@@ -10152,7 +10150,7 @@ yyreduce:
     break;
 
   case 245:
-#line 3646 "Gmsh.y"
+#line 3644 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -10170,7 +10168,7 @@ yyreduce:
     break;
 
   case 246:
-#line 3661 "Gmsh.y"
+#line 3659 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
         ClearProject();
@@ -10180,7 +10178,7 @@ yyreduce:
 	GModel::current()->getGEOInternals()->destroy();
       }
       else if(!strcmp((yyvsp[(2) - (3)].c), "Physicals")){
-	GModel::current()->getGEOInternals()->reset_physicals();
+	GModel::current()->getGEOInternals()->resetPhysicalGroups();
 	GModel::current()->deletePhysicalGroups();
       }
       else if(!strcmp((yyvsp[(2) - (3)].c), "Variables")){
@@ -10201,7 +10199,7 @@ yyreduce:
     break;
 
   case 247:
-#line 3689 "Gmsh.y"
+#line 3687 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -10216,7 +10214,7 @@ yyreduce:
     break;
 
   case 248:
-#line 3706 "Gmsh.y"
+#line 3704 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -10228,7 +10226,7 @@ yyreduce:
     break;
 
   case 249:
-#line 3715 "Gmsh.y"
+#line 3713 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(5) - (6)].l)); i++){
 	Shape TheShape;
@@ -10240,7 +10238,7 @@ yyreduce:
     break;
 
   case 250:
-#line 3729 "Gmsh.y"
+#line 3727 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -10252,7 +10250,7 @@ yyreduce:
     break;
 
   case 251:
-#line 3743 "Gmsh.y"
+#line 3741 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1, false);
@@ -10261,7 +10259,7 @@ yyreduce:
     break;
 
   case 252:
-#line 3749 "Gmsh.y"
+#line 3747 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0, false);
@@ -10270,7 +10268,7 @@ yyreduce:
     break;
 
   case 253:
-#line 3755 "Gmsh.y"
+#line 3753 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -10282,7 +10280,7 @@ yyreduce:
     break;
 
   case 254:
-#line 3764 "Gmsh.y"
+#line 3762 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -10294,7 +10292,7 @@ yyreduce:
     break;
 
   case 255:
-#line 3773 "Gmsh.y"
+#line 3771 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -10306,7 +10304,7 @@ yyreduce:
     break;
 
   case 256:
-#line 3782 "Gmsh.y"
+#line 3780 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -10318,7 +10316,7 @@ yyreduce:
     break;
 
   case 257:
-#line 3796 "Gmsh.y"
+#line 3794 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
@@ -10383,7 +10381,7 @@ yyreduce:
     break;
 
   case 258:
-#line 3858 "Gmsh.y"
+#line 3856 "Gmsh.y"
     {
       int n = List_Nbr((yyvsp[(3) - (5)].l));
       if(n == 1){
@@ -10404,7 +10402,7 @@ yyreduce:
     break;
 
   case 259:
-#line 3876 "Gmsh.y"
+#line 3874 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -10424,7 +10422,7 @@ yyreduce:
     break;
 
   case 260:
-#line 3893 "Gmsh.y"
+#line 3891 "Gmsh.y"
     {
 #if defined(HAVE_POST) && defined(HAVE_MESH)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -10442,7 +10440,7 @@ yyreduce:
     break;
 
   case 261:
-#line 3908 "Gmsh.y"
+#line 3906 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -10474,7 +10472,7 @@ yyreduce:
     break;
 
   case 262:
-#line 3937 "Gmsh.y"
+#line 3935 "Gmsh.y"
     {
 #if defined(HAVE_PLUGINS)
        try {
@@ -10489,7 +10487,7 @@ yyreduce:
     break;
 
   case 263:
-#line 3949 "Gmsh.y"
+#line 3947 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -10516,14 +10514,14 @@ yyreduce:
     break;
 
   case 264:
-#line 3973 "Gmsh.y"
+#line 3971 "Gmsh.y"
     {
       Msg::Exit(0);
     ;}
     break;
 
   case 265:
-#line 3977 "Gmsh.y"
+#line 3975 "Gmsh.y"
     {
       gmsh_yyerrorstate = 999; // this will be checked when yyparse returns
       YYABORT;
@@ -10531,7 +10529,7 @@ yyreduce:
     break;
 
   case 266:
-#line 3982 "Gmsh.y"
+#line 3980 "Gmsh.y"
     {
       // FIXME: this is a hack to force a transfer from the old DB to
       // the new DB. This will become unnecessary if/when we fill the
@@ -10542,7 +10540,7 @@ yyreduce:
     break;
 
   case 267:
-#line 3990 "Gmsh.y"
+#line 3988 "Gmsh.y"
     {
       new GModel();
       GModel::current(GModel::list.size() - 1);
@@ -10550,7 +10548,7 @@ yyreduce:
     break;
 
   case 268:
-#line 3995 "Gmsh.y"
+#line 3993 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
@@ -10559,7 +10557,7 @@ yyreduce:
     break;
 
   case 269:
-#line 4001 "Gmsh.y"
+#line 3999 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 1;
       SetBoundingBox((yyvsp[(3) - (15)].d), (yyvsp[(5) - (15)].d), (yyvsp[(7) - (15)].d), (yyvsp[(9) - (15)].d), (yyvsp[(11) - (15)].d), (yyvsp[(13) - (15)].d));
@@ -10567,7 +10565,7 @@ yyreduce:
     break;
 
   case 270:
-#line 4006 "Gmsh.y"
+#line 4004 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -10576,7 +10574,7 @@ yyreduce:
     break;
 
   case 271:
-#line 4012 "Gmsh.y"
+#line 4010 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
      CTX::instance()->mesh.changed = ENT_ALL;
@@ -10587,21 +10585,21 @@ yyreduce:
     break;
 
   case 272:
-#line 4020 "Gmsh.y"
+#line 4018 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh();
     ;}
     break;
 
   case 273:
-#line 4024 "Gmsh.y"
+#line 4022 "Gmsh.y"
     {
       GModel::current()->createTopologyFromMesh(1);
     ;}
     break;
 
   case 274:
-#line 4028 "Gmsh.y"
+#line 4026 "Gmsh.y"
     {
       GModel::current()->importGEOInternals();
       GModel::current()->refineMesh(CTX::instance()->mesh.secondOrderLinear);
@@ -10609,7 +10607,7 @@ yyreduce:
     break;
 
   case 275:
-#line 4034 "Gmsh.y"
+#line 4032 "Gmsh.y"
     {
       int lock = CTX::instance()->lock;
       CTX::instance()->lock = 0;
@@ -10666,7 +10664,7 @@ yyreduce:
     break;
 
   case 276:
-#line 4093 "Gmsh.y"
+#line 4091 "Gmsh.y"
     {
 #if defined(HAVE_POPPLER)
        std::vector<int> is;
@@ -10681,7 +10679,7 @@ yyreduce:
     break;
 
   case 277:
-#line 4109 "Gmsh.y"
+#line 4107 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -10701,7 +10699,7 @@ yyreduce:
     break;
 
   case 278:
-#line 4126 "Gmsh.y"
+#line 4124 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -10721,7 +10719,7 @@ yyreduce:
     break;
 
   case 279:
-#line 4143 "Gmsh.y"
+#line 4141 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -10746,7 +10744,7 @@ yyreduce:
     break;
 
   case 280:
-#line 4165 "Gmsh.y"
+#line 4163 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -10771,7 +10769,7 @@ yyreduce:
     break;
 
   case 281:
-#line 4187 "Gmsh.y"
+#line 4185 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -10809,7 +10807,7 @@ yyreduce:
     break;
 
   case 282:
-#line 4222 "Gmsh.y"
+#line 4220 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -10820,7 +10818,7 @@ yyreduce:
     break;
 
   case 283:
-#line 4230 "Gmsh.y"
+#line 4228 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          (std::string((yyvsp[(2) - (2)].c)), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -10831,7 +10829,7 @@ yyreduce:
     break;
 
   case 284:
-#line 4238 "Gmsh.y"
+#line 4236 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -10840,7 +10838,7 @@ yyreduce:
     break;
 
   case 285:
-#line 4244 "Gmsh.y"
+#line 4242 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -10850,7 +10848,7 @@ yyreduce:
     break;
 
   case 286:
-#line 4251 "Gmsh.y"
+#line 4249 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          (std::string((yyvsp[(2) - (3)].c)), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -10860,7 +10858,7 @@ yyreduce:
     break;
 
   case 287:
-#line 4258 "Gmsh.y"
+#line 4256 "Gmsh.y"
     {
       ImbricatedTest++;
       if(ImbricatedTest > MAX_RECUR_TESTS-1){
@@ -10883,7 +10881,7 @@ yyreduce:
     break;
 
   case 288:
-#line 4278 "Gmsh.y"
+#line 4276 "Gmsh.y"
     {
       if(ImbricatedTest > 0){
         if (statusImbricatedTests[ImbricatedTest]){
@@ -10912,7 +10910,7 @@ yyreduce:
     break;
 
   case 289:
-#line 4304 "Gmsh.y"
+#line 4302 "Gmsh.y"
     {
       if(ImbricatedTest > 0){
         if(statusImbricatedTests[ImbricatedTest]){
@@ -10927,7 +10925,7 @@ yyreduce:
     break;
 
   case 290:
-#line 4316 "Gmsh.y"
+#line 4314 "Gmsh.y"
     {
       ImbricatedTest--;
       if(ImbricatedTest < 0)
@@ -10936,7 +10934,7 @@ yyreduce:
     break;
 
   case 291:
-#line 4328 "Gmsh.y"
+#line 4326 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -10969,7 +10967,7 @@ yyreduce:
     break;
 
   case 292:
-#line 4358 "Gmsh.y"
+#line 4356 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -11003,7 +11001,7 @@ yyreduce:
     break;
 
   case 293:
-#line 4389 "Gmsh.y"
+#line 4387 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l),
@@ -11014,7 +11012,7 @@ yyreduce:
     break;
 
   case 294:
-#line 4397 "Gmsh.y"
+#line 4395 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11023,7 +11021,7 @@ yyreduce:
     break;
 
   case 295:
-#line 4403 "Gmsh.y"
+#line 4401 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l),
@@ -11034,7 +11032,7 @@ yyreduce:
     break;
 
   case 296:
-#line 4411 "Gmsh.y"
+#line 4409 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11043,7 +11041,7 @@ yyreduce:
     break;
 
   case 297:
-#line 4417 "Gmsh.y"
+#line 4415 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l),
@@ -11054,7 +11052,7 @@ yyreduce:
     break;
 
   case 298:
-#line 4425 "Gmsh.y"
+#line 4423 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11063,7 +11061,7 @@ yyreduce:
     break;
 
   case 299:
-#line 4431 "Gmsh.y"
+#line 4429 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l),
@@ -11074,7 +11072,7 @@ yyreduce:
     break;
 
   case 300:
-#line 4439 "Gmsh.y"
+#line 4437 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11083,7 +11081,7 @@ yyreduce:
     break;
 
   case 301:
-#line 4445 "Gmsh.y"
+#line 4443 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(BOUNDARY_LAYER, (yyvsp[(3) - (6)].l), 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
@@ -11093,7 +11091,7 @@ yyreduce:
     break;
 
   case 302:
-#line 4452 "Gmsh.y"
+#line 4450 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -11123,7 +11121,7 @@ yyreduce:
     break;
 
   case 303:
-#line 4479 "Gmsh.y"
+#line 4477 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -11149,7 +11147,7 @@ yyreduce:
     break;
 
   case 304:
-#line 4502 "Gmsh.y"
+#line 4500 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -11175,7 +11173,7 @@ yyreduce:
     break;
 
   case 305:
-#line 4525 "Gmsh.y"
+#line 4523 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -11208,7 +11206,7 @@ yyreduce:
     break;
 
   case 306:
-#line 4556 "Gmsh.y"
+#line 4554 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d),
@@ -11218,7 +11216,7 @@ yyreduce:
     break;
 
   case 307:
-#line 4563 "Gmsh.y"
+#line 4561 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d),
@@ -11228,7 +11226,7 @@ yyreduce:
     break;
 
   case 308:
-#line 4570 "Gmsh.y"
+#line 4568 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d),
@@ -11238,7 +11236,7 @@ yyreduce:
     break;
 
   case 309:
-#line 4577 "Gmsh.y"
+#line 4575 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -11248,7 +11246,7 @@ yyreduce:
     break;
 
   case 310:
-#line 4584 "Gmsh.y"
+#line 4582 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -11258,7 +11256,7 @@ yyreduce:
     break;
 
   case 311:
-#line 4591 "Gmsh.y"
+#line 4589 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -11268,7 +11266,7 @@ yyreduce:
     break;
 
   case 312:
-#line 4598 "Gmsh.y"
+#line 4596 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d),
@@ -11278,7 +11276,7 @@ yyreduce:
     break;
 
   case 313:
-#line 4605 "Gmsh.y"
+#line 4603 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d),
@@ -11288,7 +11286,7 @@ yyreduce:
     break;
 
   case 314:
-#line 4612 "Gmsh.y"
+#line 4610 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d),
@@ -11298,7 +11296,7 @@ yyreduce:
     break;
 
   case 315:
-#line 4619 "Gmsh.y"
+#line 4617 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11307,7 +11305,7 @@ yyreduce:
     break;
 
   case 316:
-#line 4625 "Gmsh.y"
+#line 4623 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d),
@@ -11317,7 +11315,7 @@ yyreduce:
     break;
 
   case 317:
-#line 4632 "Gmsh.y"
+#line 4630 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11326,7 +11324,7 @@ yyreduce:
     break;
 
   case 318:
-#line 4638 "Gmsh.y"
+#line 4636 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d),
@@ -11336,7 +11334,7 @@ yyreduce:
     break;
 
   case 319:
-#line 4645 "Gmsh.y"
+#line 4643 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11345,7 +11343,7 @@ yyreduce:
     break;
 
   case 320:
-#line 4651 "Gmsh.y"
+#line 4649 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d),
@@ -11355,7 +11353,7 @@ yyreduce:
     break;
 
   case 321:
-#line 4658 "Gmsh.y"
+#line 4656 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11364,7 +11362,7 @@ yyreduce:
     break;
 
   case 322:
-#line 4664 "Gmsh.y"
+#line 4662 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d),
@@ -11374,7 +11372,7 @@ yyreduce:
     break;
 
   case 323:
-#line 4671 "Gmsh.y"
+#line 4669 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11383,7 +11381,7 @@ yyreduce:
     break;
 
   case 324:
-#line 4677 "Gmsh.y"
+#line 4675 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d),
@@ -11393,7 +11391,7 @@ yyreduce:
     break;
 
   case 325:
-#line 4684 "Gmsh.y"
+#line 4682 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11402,7 +11400,7 @@ yyreduce:
     break;
 
   case 326:
-#line 4690 "Gmsh.y"
+#line 4688 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d),
@@ -11412,7 +11410,7 @@ yyreduce:
     break;
 
   case 327:
-#line 4697 "Gmsh.y"
+#line 4695 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11421,7 +11419,7 @@ yyreduce:
     break;
 
   case 328:
-#line 4703 "Gmsh.y"
+#line 4701 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d),
@@ -11431,7 +11429,7 @@ yyreduce:
     break;
 
   case 329:
-#line 4710 "Gmsh.y"
+#line 4708 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11440,7 +11438,7 @@ yyreduce:
     break;
 
   case 330:
-#line 4716 "Gmsh.y"
+#line 4714 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d),
@@ -11450,7 +11448,7 @@ yyreduce:
     break;
 
   case 331:
-#line 4723 "Gmsh.y"
+#line 4721 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
       extr.mesh.QuadToTri = NO_QUADTRI;
@@ -11459,7 +11457,7 @@ yyreduce:
     break;
 
   case 332:
-#line 4729 "Gmsh.y"
+#line 4727 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d),
@@ -11469,19 +11467,19 @@ yyreduce:
     break;
 
   case 333:
-#line 4740 "Gmsh.y"
+#line 4738 "Gmsh.y"
     {
     ;}
     break;
 
   case 334:
-#line 4743 "Gmsh.y"
+#line 4741 "Gmsh.y"
     {
     ;}
     break;
 
   case 335:
-#line 4749 "Gmsh.y"
+#line 4747 "Gmsh.y"
     {
       int n = (int)fabs((yyvsp[(3) - (5)].d));
       if(n){ // we accept n==0 to easily disable layers
@@ -11496,7 +11494,7 @@ yyreduce:
     break;
 
   case 336:
-#line 4761 "Gmsh.y"
+#line 4759 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -11519,7 +11517,7 @@ yyreduce:
     break;
 
   case 337:
-#line 4781 "Gmsh.y"
+#line 4779 "Gmsh.y"
     {
       yymsg(1, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -11545,42 +11543,42 @@ yyreduce:
     break;
 
   case 338:
-#line 4805 "Gmsh.y"
+#line 4803 "Gmsh.y"
     {
       extr.mesh.ScaleLast = true;
     ;}
     break;
 
   case 339:
-#line 4809 "Gmsh.y"
+#line 4807 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 340:
-#line 4813 "Gmsh.y"
+#line 4811 "Gmsh.y"
     {
       extr.mesh.Recombine = (yyvsp[(2) - (3)].d) ? true : false;
     ;}
     break;
 
   case 341:
-#line 4817 "Gmsh.y"
+#line 4815 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     ;}
     break;
 
   case 342:
-#line 4821 "Gmsh.y"
+#line 4819 "Gmsh.y"
     {
       yymsg(0, "Keyword 'QuadTriSngl' deprecated. Use 'QuadTriNoNewVerts' instead.");
     ;}
     break;
 
   case 343:
-#line 4825 "Gmsh.y"
+#line 4823 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -11589,7 +11587,7 @@ yyreduce:
     break;
 
   case 344:
-#line 4831 "Gmsh.y"
+#line 4829 "Gmsh.y"
     {
       yymsg(0, "Method 'QuadTriDbl' deprecated. Use 'QuadTriAddVerts' instead, "
             "which has no requirement for the number of extrusion layers and meshes "
@@ -11598,35 +11596,35 @@ yyreduce:
     break;
 
   case 345:
-#line 4837 "Gmsh.y"
+#line 4835 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1;
     ;}
     break;
 
   case 346:
-#line 4841 "Gmsh.y"
+#line 4839 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_ADDVERTS_1_RECOMB;
     ;}
     break;
 
   case 347:
-#line 4845 "Gmsh.y"
+#line 4843 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1;
     ;}
     break;
 
   case 348:
-#line 4849 "Gmsh.y"
+#line 4847 "Gmsh.y"
     {
       extr.mesh.QuadToTri = QUADTRI_NOVERTS_1_RECOMB;
     ;}
     break;
 
   case 349:
-#line 4853 "Gmsh.y"
+#line 4851 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -11648,7 +11646,7 @@ yyreduce:
     break;
 
   case 350:
-#line 4872 "Gmsh.y"
+#line 4870 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (6)].c), "Index"))
         extr.mesh.BoundaryLayerIndex = (yyvsp[(4) - (6)].d);
@@ -11659,47 +11657,47 @@ yyreduce:
     break;
 
   case 351:
-#line 4884 "Gmsh.y"
+#line 4882 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Union; ;}
     break;
 
   case 352:
-#line 4885 "Gmsh.y"
+#line 4883 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Intersection; ;}
     break;
 
   case 353:
-#line 4886 "Gmsh.y"
+#line 4884 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Difference; ;}
     break;
 
   case 354:
-#line 4887 "Gmsh.y"
+#line 4885 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Section; ;}
     break;
 
   case 355:
-#line 4888 "Gmsh.y"
+#line 4886 "Gmsh.y"
     { (yyval.i) = OCC_Internals::Fragments; ;}
     break;
 
   case 356:
-#line 4892 "Gmsh.y"
+#line 4890 "Gmsh.y"
     { (yyval.i) = 0; ;}
     break;
 
   case 357:
-#line 4893 "Gmsh.y"
+#line 4891 "Gmsh.y"
     { (yyval.i) = 1; ;}
     break;
 
   case 358:
-#line 4894 "Gmsh.y"
+#line 4892 "Gmsh.y"
     { (yyval.i) = (yyvsp[(2) - (3)].d); ;}
     break;
 
   case 359:
-#line 4899 "Gmsh.y"
+#line 4897 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -11735,7 +11733,7 @@ yyreduce:
     break;
 
   case 360:
-#line 4932 "Gmsh.y"
+#line 4930 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
@@ -11761,7 +11759,7 @@ yyreduce:
     break;
 
   case 361:
-#line 4959 "Gmsh.y"
+#line 4957 "Gmsh.y"
     {
       if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
         std::vector<int> shape[4], tool[4];
@@ -11783,14 +11781,14 @@ yyreduce:
     break;
 
   case 362:
-#line 4981 "Gmsh.y"
+#line 4979 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
     break;
 
   case 363:
-#line 4985 "Gmsh.y"
+#line 4983 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -11806,14 +11804,14 @@ yyreduce:
     break;
 
   case 364:
-#line 5000 "Gmsh.y"
+#line 4998 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
     break;
 
   case 365:
-#line 5004 "Gmsh.y"
+#line 5002 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -11830,49 +11828,49 @@ yyreduce:
     break;
 
   case 366:
-#line 5020 "Gmsh.y"
+#line 5018 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
     break;
 
   case 367:
-#line 5024 "Gmsh.y"
+#line 5022 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
     break;
 
   case 368:
-#line 5029 "Gmsh.y"
+#line 5027 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
     break;
 
   case 369:
-#line 5033 "Gmsh.y"
+#line 5031 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
     break;
 
   case 370:
-#line 5039 "Gmsh.y"
+#line 5037 "Gmsh.y"
     {
       (yyval.l) = List_Create(1, 1, sizeof(double));
     ;}
     break;
 
   case 371:
-#line 5043 "Gmsh.y"
+#line 5041 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
     ;}
     break;
 
   case 372:
-#line 5050 "Gmsh.y"
+#line 5048 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -11931,7 +11929,7 @@ yyreduce:
     break;
 
   case 373:
-#line 5106 "Gmsh.y"
+#line 5104 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -12004,7 +12002,7 @@ yyreduce:
     break;
 
   case 374:
-#line 5176 "Gmsh.y"
+#line 5174 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -12012,7 +12010,7 @@ yyreduce:
     break;
 
   case 375:
-#line 5181 "Gmsh.y"
+#line 5179 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -12082,7 +12080,7 @@ yyreduce:
     break;
 
   case 376:
-#line 5248 "Gmsh.y"
+#line 5246 "Gmsh.y"
     {
       if(!(yyvsp[(2) - (3)].l)){
   	  List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -12121,7 +12119,7 @@ yyreduce:
     break;
 
   case 377:
-#line 5284 "Gmsh.y"
+#line 5282 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (8)].l)); i++){
 	double d;
@@ -12132,7 +12130,7 @@ yyreduce:
     break;
 
   case 378:
-#line 5292 "Gmsh.y"
+#line 5290 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -12178,7 +12176,7 @@ yyreduce:
     break;
 
   case 379:
-#line 5335 "Gmsh.y"
+#line 5333 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Volumes);
@@ -12220,7 +12218,7 @@ yyreduce:
     break;
 
   case 380:
-#line 5374 "Gmsh.y"
+#line 5372 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
         double d;
@@ -12243,7 +12241,7 @@ yyreduce:
     break;
 
   case 381:
-#line 5395 "Gmsh.y"
+#line 5393 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (11)].l)) != List_Nbr((yyvsp[(8) - (11)].l))){
         yymsg(0, "Number of master lines (%d) different from number of "
@@ -12277,7 +12275,7 @@ yyreduce:
     break;
 
   case 382:
-#line 5427 "Gmsh.y"
+#line 5425 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (11)].l)) != List_Nbr((yyvsp[(8) - (11)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -12306,7 +12304,7 @@ yyreduce:
     break;
 
   case 383:
-#line 5454 "Gmsh.y"
+#line 5452 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (18)].l)) != List_Nbr((yyvsp[(8) - (18)].l))){
         yymsg(0, "Number of master edges (%d) different from number of "
@@ -12334,7 +12332,7 @@ yyreduce:
     break;
 
   case 384:
-#line 5480 "Gmsh.y"
+#line 5478 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (18)].l)) != List_Nbr((yyvsp[(8) - (18)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -12362,7 +12360,7 @@ yyreduce:
     break;
 
   case 385:
-#line 5506 "Gmsh.y"
+#line 5504 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (12)].l)) != List_Nbr((yyvsp[(8) - (12)].l))){
         yymsg(0, "Number of master edges (%d) different from number of "
@@ -12390,7 +12388,7 @@ yyreduce:
     break;
 
   case 386:
-#line 5532 "Gmsh.y"
+#line 5530 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(4) - (12)].l)) != List_Nbr((yyvsp[(8) - (12)].l))){
         yymsg(0, "Number of master faces (%d) different from number of "
@@ -12418,7 +12416,7 @@ yyreduce:
     break;
 
   case 387:
-#line 5558 "Gmsh.y"
+#line 5556 "Gmsh.y"
     {
       if (List_Nbr((yyvsp[(5) - (12)].l)) != List_Nbr((yyvsp[(10) - (12)].l))){
         yymsg(0, "Number of master surface edges (%d) different from number of "
@@ -12442,7 +12440,7 @@ yyreduce:
     break;
 
   case 388:
-#line 5579 "Gmsh.y"
+#line 5577 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -12473,7 +12471,7 @@ yyreduce:
     break;
 
   case 389:
-#line 5607 "Gmsh.y"
+#line 5605 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -12504,7 +12502,7 @@ yyreduce:
     break;
 
   case 390:
-#line 5635 "Gmsh.y"
+#line 5633 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -12535,7 +12533,7 @@ yyreduce:
     break;
 
   case 391:
-#line 5663 "Gmsh.y"
+#line 5661 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -12566,7 +12564,7 @@ yyreduce:
     break;
 
   case 392:
-#line 5691 "Gmsh.y"
+#line 5689 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(8) - (10)].d));
       if(v){
@@ -12597,7 +12595,7 @@ yyreduce:
     break;
 
   case 393:
-#line 5719 "Gmsh.y"
+#line 5717 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -12639,7 +12637,7 @@ yyreduce:
     break;
 
   case 394:
-#line 5758 "Gmsh.y"
+#line 5756 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Curves);
@@ -12681,7 +12679,7 @@ yyreduce:
     break;
 
   case 395:
-#line 5797 "Gmsh.y"
+#line 5795 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::viter it = GModel::current()->firstVertex();
@@ -12705,7 +12703,7 @@ yyreduce:
     break;
 
   case 396:
-#line 5818 "Gmsh.y"
+#line 5816 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::eiter it = GModel::current()->firstEdge();
@@ -12729,7 +12727,7 @@ yyreduce:
     break;
 
   case 397:
-#line 5839 "Gmsh.y"
+#line 5837 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].l)){
         for(GModel::fiter it = GModel::current()->firstFace();
@@ -12753,14 +12751,14 @@ yyreduce:
     break;
 
   case 398:
-#line 5866 "Gmsh.y"
+#line 5864 "Gmsh.y"
     {
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 399:
-#line 5870 "Gmsh.y"
+#line 5868 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -12773,7 +12771,7 @@ yyreduce:
     break;
 
   case 400:
-#line 5880 "Gmsh.y"
+#line 5878 "Gmsh.y"
     {
       if(List_Nbr((yyvsp[(4) - (6)].l)) >= 2){
         double d;
@@ -12806,22 +12804,22 @@ yyreduce:
     break;
 
   case 401:
-#line 5914 "Gmsh.y"
+#line 5912 "Gmsh.y"
     { (yyval.c) = (char*)"Homology"; ;}
     break;
 
   case 402:
-#line 5915 "Gmsh.y"
+#line 5913 "Gmsh.y"
     { (yyval.c) = (char*)"Cohomology"; ;}
     break;
 
   case 403:
-#line 5916 "Gmsh.y"
+#line 5914 "Gmsh.y"
     { (yyval.c) = (char*)"Betti"; ;}
     break;
 
   case 404:
-#line 5921 "Gmsh.y"
+#line 5919 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < 4; i++) dim.push_back(i);
@@ -12830,7 +12828,7 @@ yyreduce:
     break;
 
   case 405:
-#line 5927 "Gmsh.y"
+#line 5925 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (5)].l)); i++){
@@ -12845,7 +12843,7 @@ yyreduce:
     break;
 
   case 406:
-#line 5939 "Gmsh.y"
+#line 5937 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (7)].l)); i++){
@@ -12866,7 +12864,7 @@ yyreduce:
     break;
 
   case 407:
-#line 5957 "Gmsh.y"
+#line 5955 "Gmsh.y"
     {
       std::vector<int> domain, subdomain, dim;
       for(int i = 0; i < List_Nbr((yyvsp[(6) - (10)].l)); i++){
@@ -12892,47 +12890,47 @@ yyreduce:
     break;
 
   case 408:
-#line 5984 "Gmsh.y"
+#line 5982 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 409:
-#line 5985 "Gmsh.y"
+#line 5983 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 410:
-#line 5986 "Gmsh.y"
+#line 5984 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 411:
-#line 5987 "Gmsh.y"
+#line 5985 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 412:
-#line 5988 "Gmsh.y"
+#line 5986 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 413:
-#line 5989 "Gmsh.y"
+#line 5987 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 414:
-#line 5990 "Gmsh.y"
+#line 5988 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 415:
-#line 5991 "Gmsh.y"
+#line 5989 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 416:
-#line 5993 "Gmsh.y"
+#line 5991 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -12942,232 +12940,232 @@ yyreduce:
     break;
 
   case 417:
-#line 5999 "Gmsh.y"
+#line 5997 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 418:
-#line 6000 "Gmsh.y"
+#line 5998 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 419:
-#line 6001 "Gmsh.y"
+#line 5999 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 420:
-#line 6002 "Gmsh.y"
+#line 6000 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 421:
-#line 6003 "Gmsh.y"
+#line 6001 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 422:
-#line 6004 "Gmsh.y"
+#line 6002 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 423:
-#line 6005 "Gmsh.y"
+#line 6003 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 424:
-#line 6006 "Gmsh.y"
+#line 6004 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 425:
-#line 6007 "Gmsh.y"
+#line 6005 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 426:
-#line 6008 "Gmsh.y"
+#line 6006 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 427:
-#line 6009 "Gmsh.y"
+#line 6007 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 428:
-#line 6010 "Gmsh.y"
+#line 6008 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 429:
-#line 6011 "Gmsh.y"
+#line 6009 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 430:
-#line 6012 "Gmsh.y"
+#line 6010 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 431:
-#line 6013 "Gmsh.y"
+#line 6011 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 432:
-#line 6014 "Gmsh.y"
+#line 6012 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 433:
-#line 6015 "Gmsh.y"
+#line 6013 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 434:
-#line 6016 "Gmsh.y"
+#line 6014 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 435:
-#line 6017 "Gmsh.y"
+#line 6015 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 436:
-#line 6018 "Gmsh.y"
+#line 6016 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 437:
-#line 6019 "Gmsh.y"
+#line 6017 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 438:
-#line 6020 "Gmsh.y"
+#line 6018 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 439:
-#line 6021 "Gmsh.y"
+#line 6019 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 440:
-#line 6022 "Gmsh.y"
+#line 6020 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 441:
-#line 6023 "Gmsh.y"
+#line 6021 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 442:
-#line 6024 "Gmsh.y"
+#line 6022 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 443:
-#line 6025 "Gmsh.y"
+#line 6023 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 444:
-#line 6026 "Gmsh.y"
+#line 6024 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 445:
-#line 6027 "Gmsh.y"
+#line 6025 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d) + 0.5); ;}
     break;
 
   case 446:
-#line 6028 "Gmsh.y"
+#line 6026 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 447:
-#line 6029 "Gmsh.y"
+#line 6027 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 448:
-#line 6030 "Gmsh.y"
+#line 6028 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 449:
-#line 6031 "Gmsh.y"
+#line 6029 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 450:
-#line 6040 "Gmsh.y"
+#line 6038 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 451:
-#line 6041 "Gmsh.y"
+#line 6039 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 452:
-#line 6042 "Gmsh.y"
+#line 6040 "Gmsh.y"
     { (yyval.d) = (double)ImbricatedTest; ;}
     break;
 
   case 453:
-#line 6043 "Gmsh.y"
+#line 6041 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 454:
-#line 6044 "Gmsh.y"
+#line 6042 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 455:
-#line 6045 "Gmsh.y"
+#line 6043 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 456:
-#line 6046 "Gmsh.y"
+#line 6044 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 457:
-#line 6047 "Gmsh.y"
+#line 6045 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 458:
-#line 6048 "Gmsh.y"
+#line 6046 "Gmsh.y"
     { (yyval.d) = Cpu(); ;}
     break;
 
   case 459:
-#line 6049 "Gmsh.y"
+#line 6047 "Gmsh.y"
     { (yyval.d) = GetMemoryUsage()/1024./1024.; ;}
     break;
 
   case 460:
-#line 6050 "Gmsh.y"
+#line 6048 "Gmsh.y"
     { (yyval.d) = TotalRam(); ;}
     break;
 
   case 461:
-#line 6055 "Gmsh.y"
+#line 6053 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 462:
-#line 6057 "Gmsh.y"
+#line 6055 "Gmsh.y"
     {
       std::vector<double> val(1, (yyvsp[(3) - (6)].d));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -13176,7 +13174,7 @@ yyreduce:
     break;
 
   case 463:
-#line 6063 "Gmsh.y"
+#line 6061 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -13184,7 +13182,7 @@ yyreduce:
     break;
 
   case 464:
-#line 6068 "Gmsh.y"
+#line 6066 "Gmsh.y"
     {
       (yyval.d) = Msg::GetOnelabNumber((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -13192,7 +13190,7 @@ yyreduce:
     break;
 
   case 465:
-#line 6073 "Gmsh.y"
+#line 6071 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -13212,7 +13210,7 @@ yyreduce:
     break;
 
   case 466:
-#line 6090 "Gmsh.y"
+#line 6088 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -13233,7 +13231,7 @@ yyreduce:
     break;
 
   case 467:
-#line 6108 "Gmsh.y"
+#line 6106 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -13254,7 +13252,7 @@ yyreduce:
     break;
 
   case 468:
-#line 6126 "Gmsh.y"
+#line 6124 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -13275,7 +13273,7 @@ yyreduce:
     break;
 
   case 469:
-#line 6144 "Gmsh.y"
+#line 6142 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -13296,7 +13294,7 @@ yyreduce:
     break;
 
   case 470:
-#line 6162 "Gmsh.y"
+#line 6160 "Gmsh.y"
     {
       (yyval.d) = gmsh_yysymbols.count((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -13304,7 +13302,7 @@ yyreduce:
     break;
 
   case 471:
-#line 6167 "Gmsh.y"
+#line 6165 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.d) = !StatFile(tmp);
@@ -13313,7 +13311,7 @@ yyreduce:
     break;
 
   case 472:
-#line 6173 "Gmsh.y"
+#line 6171 "Gmsh.y"
     {
       if(gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
         gmsh_yysymbol &s(gmsh_yysymbols[(yyvsp[(2) - (4)].c)]);
@@ -13331,7 +13329,7 @@ yyreduce:
     break;
 
   case 473:
-#line 6188 "Gmsh.y"
+#line 6186 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -13353,7 +13351,7 @@ yyreduce:
     break;
 
   case 474:
-#line 6207 "Gmsh.y"
+#line 6205 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -13376,7 +13374,7 @@ yyreduce:
     break;
 
   case 475:
-#line 6227 "Gmsh.y"
+#line 6225 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -13399,7 +13397,7 @@ yyreduce:
     break;
 
   case 476:
-#line 6247 "Gmsh.y"
+#line 6245 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -13422,7 +13420,7 @@ yyreduce:
     break;
 
   case 477:
-#line 6267 "Gmsh.y"
+#line 6265 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -13445,7 +13443,7 @@ yyreduce:
     break;
 
   case 478:
-#line 6290 "Gmsh.y"
+#line 6288 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), (yyval.d));
       Free((yyvsp[(1) - (3)].c)); Free((yyvsp[(3) - (3)].c));
@@ -13453,7 +13451,7 @@ yyreduce:
     break;
 
   case 479:
-#line 6295 "Gmsh.y"
+#line 6293 "Gmsh.y"
     {
       NumberOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), (yyval.d));
       Free((yyvsp[(1) - (6)].c)); Free((yyvsp[(6) - (6)].c));
@@ -13461,7 +13459,7 @@ yyreduce:
     break;
 
   case 480:
-#line 6300 "Gmsh.y"
+#line 6298 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -13474,7 +13472,7 @@ yyreduce:
     break;
 
   case 481:
-#line 6310 "Gmsh.y"
+#line 6308 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -13487,7 +13485,7 @@ yyreduce:
     break;
 
   case 482:
-#line 6320 "Gmsh.y"
+#line 6318 "Gmsh.y"
     {
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -13495,7 +13493,7 @@ yyreduce:
     break;
 
   case 483:
-#line 6325 "Gmsh.y"
+#line 6323 "Gmsh.y"
     {
       int matches = 0;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
@@ -13509,7 +13507,7 @@ yyreduce:
     break;
 
   case 484:
-#line 6336 "Gmsh.y"
+#line 6334 "Gmsh.y"
     {
       std::string s((yyvsp[(3) - (6)].c)), substr((yyvsp[(5) - (6)].c));
       if(s.find(substr) != std::string::npos)
@@ -13521,7 +13519,7 @@ yyreduce:
     break;
 
   case 485:
-#line 6345 "Gmsh.y"
+#line 6343 "Gmsh.y"
     {
       (yyval.d) = strlen((yyvsp[(3) - (4)].c));
       Free((yyvsp[(3) - (4)].c));
@@ -13529,7 +13527,7 @@ yyreduce:
     break;
 
   case 486:
-#line 6350 "Gmsh.y"
+#line 6348 "Gmsh.y"
     {
       (yyval.d) = strcmp((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       Free((yyvsp[(3) - (6)].c)); Free((yyvsp[(5) - (6)].c));
@@ -13537,7 +13535,7 @@ yyreduce:
     break;
 
   case 487:
-#line 6355 "Gmsh.y"
+#line 6353 "Gmsh.y"
     {
       int align = 0, font = 0, fontsize = CTX::instance()->glFontSize;
       if(List_Nbr((yyvsp[(3) - (4)].l)) % 2){
@@ -13564,70 +13562,70 @@ yyreduce:
     break;
 
   case 488:
-#line 6382 "Gmsh.y"
+#line 6380 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 489:
-#line 6386 "Gmsh.y"
+#line 6384 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 490:
-#line 6390 "Gmsh.y"
+#line 6388 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 491:
-#line 6394 "Gmsh.y"
+#line 6392 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 492:
-#line 6398 "Gmsh.y"
+#line 6396 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 493:
-#line 6405 "Gmsh.y"
+#line 6403 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (11)].d);  (yyval.v)[1] = (yyvsp[(4) - (11)].d);  (yyval.v)[2] = (yyvsp[(6) - (11)].d);  (yyval.v)[3] = (yyvsp[(8) - (11)].d); (yyval.v)[4] = (yyvsp[(10) - (11)].d);
     ;}
     break;
 
   case 494:
-#line 6409 "Gmsh.y"
+#line 6407 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (9)].d);  (yyval.v)[1] = (yyvsp[(4) - (9)].d);  (yyval.v)[2] = (yyvsp[(6) - (9)].d);  (yyval.v)[3] = (yyvsp[(8) - (9)].d); (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 495:
-#line 6413 "Gmsh.y"
+#line 6411 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 496:
-#line 6417 "Gmsh.y"
+#line 6415 "Gmsh.y"
     {
       (yyval.v)[0] = (yyvsp[(2) - (7)].d);  (yyval.v)[1] = (yyvsp[(4) - (7)].d);  (yyval.v)[2] = (yyvsp[(6) - (7)].d);  (yyval.v)[3] = 0.0; (yyval.v)[4] = 1.0;
     ;}
     break;
 
   case 497:
-#line 6424 "Gmsh.y"
+#line 6422 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -13635,14 +13633,14 @@ yyreduce:
     break;
 
   case 498:
-#line 6429 "Gmsh.y"
+#line 6427 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 499:
-#line 6436 "Gmsh.y"
+#line 6434 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -13650,14 +13648,14 @@ yyreduce:
     break;
 
   case 500:
-#line 6441 "Gmsh.y"
+#line 6439 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 501:
-#line 6445 "Gmsh.y"
+#line 6443 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -13665,14 +13663,14 @@ yyreduce:
     break;
 
   case 502:
-#line 6450 "Gmsh.y"
+#line 6448 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 503:
-#line 6454 "Gmsh.y"
+#line 6452 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -13683,7 +13681,7 @@ yyreduce:
     break;
 
   case 504:
-#line 6462 "Gmsh.y"
+#line 6460 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -13694,14 +13692,14 @@ yyreduce:
     break;
 
   case 505:
-#line 6473 "Gmsh.y"
+#line 6471 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 506:
-#line 6477 "Gmsh.y"
+#line 6475 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -13713,7 +13711,7 @@ yyreduce:
     break;
 
   case 507:
-#line 6489 "Gmsh.y"
+#line 6487 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -13724,7 +13722,7 @@ yyreduce:
     break;
 
   case 508:
-#line 6497 "Gmsh.y"
+#line 6495 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -13735,7 +13733,7 @@ yyreduce:
     break;
 
   case 509:
-#line 6505 "Gmsh.y"
+#line 6503 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       for(double d = (yyvsp[(1) - (3)].d); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d <= (yyvsp[(3) - (3)].d)) : (d >= (yyvsp[(3) - (3)].d));
@@ -13745,7 +13743,7 @@ yyreduce:
     break;
 
   case 510:
-#line 6512 "Gmsh.y"
+#line 6510 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!(yyvsp[(5) - (5)].d)){  //|| ($1 < $3 && $5 < 0) || ($1 > $3 && $5 > 0)
@@ -13758,7 +13756,7 @@ yyreduce:
     break;
 
   case 511:
-#line 6522 "Gmsh.y"
+#line 6520 "Gmsh.y"
     {
       // Returns the coordinates of a point and fills a list with it.
       // This allows to ensure e.g. that relative point positions are
@@ -13790,63 +13788,63 @@ yyreduce:
     break;
 
   case 512:
-#line 6551 "Gmsh.y"
+#line 6549 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(0);
     ;}
     break;
 
   case 513:
-#line 6555 "Gmsh.y"
+#line 6553 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(1);
     ;}
     break;
 
   case 514:
-#line 6559 "Gmsh.y"
+#line 6557 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(2);
     ;}
     break;
 
   case 515:
-#line 6563 "Gmsh.y"
+#line 6561 "Gmsh.y"
     {
       (yyval.l) = GetAllElementaryEntityNumbers(3);
     ;}
     break;
 
   case 516:
-#line 6567 "Gmsh.y"
+#line 6565 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(0);
     ;}
     break;
 
   case 517:
-#line 6571 "Gmsh.y"
+#line 6569 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(1);
     ;}
     break;
 
   case 518:
-#line 6575 "Gmsh.y"
+#line 6573 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(2);
     ;}
     break;
 
   case 519:
-#line 6579 "Gmsh.y"
+#line 6577 "Gmsh.y"
     {
       (yyval.l) = GetAllPhysicalEntityNumbers(3);
     ;}
     break;
 
   case 520:
-#line 6583 "Gmsh.y"
+#line 6581 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -13878,7 +13876,7 @@ yyreduce:
     break;
 
   case 521:
-#line 6612 "Gmsh.y"
+#line 6610 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -13910,7 +13908,7 @@ yyreduce:
     break;
 
   case 522:
-#line 6641 "Gmsh.y"
+#line 6639 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -13942,7 +13940,7 @@ yyreduce:
     break;
 
   case 523:
-#line 6670 "Gmsh.y"
+#line 6668 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
@@ -13974,7 +13972,7 @@ yyreduce:
     break;
 
   case 524:
-#line 6700 "Gmsh.y"
+#line 6698 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -13989,7 +13987,7 @@ yyreduce:
     break;
 
   case 525:
-#line 6713 "Gmsh.y"
+#line 6711 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -14004,7 +14002,7 @@ yyreduce:
     break;
 
   case 526:
-#line 6726 "Gmsh.y"
+#line 6724 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -14019,7 +14017,7 @@ yyreduce:
     break;
 
   case 527:
-#line 6739 "Gmsh.y"
+#line 6737 "Gmsh.y"
     {
       (yyval.l) = List_Create(10, 1, sizeof(double));
       GModel::current()->importGEOInternals();
@@ -14034,7 +14032,7 @@ yyreduce:
     break;
 
   case 528:
-#line 6751 "Gmsh.y"
+#line 6749 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -14047,7 +14045,7 @@ yyreduce:
     break;
 
   case 529:
-#line 6761 "Gmsh.y"
+#line 6759 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -14060,7 +14058,7 @@ yyreduce:
     break;
 
   case 530:
-#line 6771 "Gmsh.y"
+#line 6769 "Gmsh.y"
     {
       (yyval.l) = List_Create(List_Nbr((yyvsp[(1) - (1)].l)), 1, sizeof(double));
       for(int i = 0; i < List_Nbr((yyvsp[(1) - (1)].l)); i++){
@@ -14073,7 +14071,7 @@ yyreduce:
     break;
 
   case 531:
-#line 6781 "Gmsh.y"
+#line 6779 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -14088,7 +14086,7 @@ yyreduce:
     break;
 
   case 532:
-#line 6793 "Gmsh.y"
+#line 6791 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -14103,7 +14101,7 @@ yyreduce:
     break;
 
   case 533:
-#line 6806 "Gmsh.y"
+#line 6804 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(3) - (4)].c)))
@@ -14118,35 +14116,35 @@ yyreduce:
     break;
 
   case 534:
-#line 6818 "Gmsh.y"
+#line 6816 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
     ;}
     break;
 
   case 535:
-#line 6822 "Gmsh.y"
+#line 6820 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
     ;}
     break;
 
   case 536:
-#line 6826 "Gmsh.y"
+#line 6824 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (6)].l);
     ;}
     break;
 
   case 537:
-#line 6830 "Gmsh.y"
+#line 6828 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (6)].l);
     ;}
     break;
 
   case 538:
-#line 6834 "Gmsh.y"
+#line 6832 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -14167,7 +14165,7 @@ yyreduce:
     break;
 
   case 539:
-#line 6852 "Gmsh.y"
+#line 6850 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -14188,7 +14186,7 @@ yyreduce:
     break;
 
   case 540:
-#line 6870 "Gmsh.y"
+#line 6868 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(double));
       for(int i = 0; i < (int)(yyvsp[(7) - (8)].d); i++) {
@@ -14199,7 +14197,7 @@ yyreduce:
     break;
 
   case 541:
-#line 6878 "Gmsh.y"
+#line 6876 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(double));
       for(int i = 0; i < (int)(yyvsp[(7) - (8)].d); i++) {
@@ -14210,7 +14208,7 @@ yyreduce:
     break;
 
   case 542:
-#line 6886 "Gmsh.y"
+#line 6884 "Gmsh.y"
     {
       Msg::Barrier();
       FILE *File;
@@ -14242,7 +14240,7 @@ yyreduce:
     break;
 
   case 543:
-#line 6915 "Gmsh.y"
+#line 6913 "Gmsh.y"
     {
       double x0 = (yyvsp[(3) - (14)].d), x1 = (yyvsp[(5) - (14)].d), y0 = (yyvsp[(7) - (14)].d), y1 = (yyvsp[(9) - (14)].d), ys = (yyvsp[(11) - (14)].d);
       int N = (int)(yyvsp[(13) - (14)].d);
@@ -14255,7 +14253,7 @@ yyreduce:
     break;
 
   case 544:
-#line 6925 "Gmsh.y"
+#line 6923 "Gmsh.y"
     {
       std::vector<double> tmp;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
@@ -14274,7 +14272,7 @@ yyreduce:
     break;
 
   case 545:
-#line 6944 "Gmsh.y"
+#line 6942 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -14282,21 +14280,21 @@ yyreduce:
     break;
 
   case 546:
-#line 6949 "Gmsh.y"
+#line 6947 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 547:
-#line 6953 "Gmsh.y"
+#line 6951 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 548:
-#line 6957 "Gmsh.y"
+#line 6955 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -14308,21 +14306,21 @@ yyreduce:
     break;
 
   case 549:
-#line 6969 "Gmsh.y"
+#line 6967 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
   case 550:
-#line 6973 "Gmsh.y"
+#line 6971 "Gmsh.y"
     {
       (yyval.u) = CTX::instance()->packColor((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 551:
-#line 6985 "Gmsh.y"
+#line 6983 "Gmsh.y"
     {
       int flag = 0;
       if(gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
@@ -14342,7 +14340,7 @@ yyreduce:
     break;
 
   case 552:
-#line 7002 "Gmsh.y"
+#line 7000 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -14352,14 +14350,14 @@ yyreduce:
     break;
 
   case 553:
-#line 7012 "Gmsh.y"
+#line 7010 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 554:
-#line 7016 "Gmsh.y"
+#line 7014 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -14374,7 +14372,7 @@ yyreduce:
     break;
 
   case 555:
-#line 7031 "Gmsh.y"
+#line 7029 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -14382,21 +14380,21 @@ yyreduce:
     break;
 
   case 556:
-#line 7036 "Gmsh.y"
+#line 7034 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 557:
-#line 7043 "Gmsh.y"
+#line 7041 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 558:
-#line 7047 "Gmsh.y"
+#line 7045 "Gmsh.y"
     {
       std::string val;
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c)))
@@ -14412,7 +14410,7 @@ yyreduce:
     break;
 
   case 559:
-#line 7060 "Gmsh.y"
+#line 7058 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -14429,7 +14427,7 @@ yyreduce:
     break;
 
   case 560:
-#line 7074 "Gmsh.y"
+#line 7072 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -14446,7 +14444,7 @@ yyreduce:
     break;
 
   case 561:
-#line 7088 "Gmsh.y"
+#line 7086 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -14463,7 +14461,7 @@ yyreduce:
     break;
 
   case 562:
-#line 7102 "Gmsh.y"
+#line 7100 "Gmsh.y"
     {
       std::string val;
       int j = (int)(yyvsp[(3) - (4)].d);
@@ -14480,7 +14478,7 @@ yyreduce:
     break;
 
   case 563:
-#line 7116 "Gmsh.y"
+#line 7114 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -14491,7 +14489,7 @@ yyreduce:
     break;
 
   case 564:
-#line 7124 "Gmsh.y"
+#line 7122 "Gmsh.y"
     {
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -14502,21 +14500,21 @@ yyreduce:
     break;
 
   case 565:
-#line 7135 "Gmsh.y"
+#line 7133 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 566:
-#line 7139 "Gmsh.y"
+#line 7137 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 567:
-#line 7143 "Gmsh.y"
+#line 7141 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -14527,7 +14525,7 @@ yyreduce:
     break;
 
   case 568:
-#line 7151 "Gmsh.y"
+#line 7149 "Gmsh.y"
     {
       std::string exe = Msg::GetExecutableName();
       (yyval.c) = (char *)Malloc(exe.size() + 1);
@@ -14536,7 +14534,7 @@ yyreduce:
     break;
 
   case 569:
-#line 7157 "Gmsh.y"
+#line 7155 "Gmsh.y"
     {
       std::string action = Msg::GetOnelabAction();
       (yyval.c) = (char *)Malloc(action.size() + 1);
@@ -14545,7 +14543,7 @@ yyreduce:
     break;
 
   case 570:
-#line 7163 "Gmsh.y"
+#line 7161 "Gmsh.y"
     {
       const char *env = GetEnvironmentVar((yyvsp[(3) - (4)].c));
       if(!env) env = "";
@@ -14556,7 +14554,7 @@ yyreduce:
     break;
 
   case 571:
-#line 7171 "Gmsh.y"
+#line 7169 "Gmsh.y"
     {
       std::string s = Msg::GetString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -14567,7 +14565,7 @@ yyreduce:
     break;
 
   case 572:
-#line 7179 "Gmsh.y"
+#line 7177 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (4)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -14577,7 +14575,7 @@ yyreduce:
     break;
 
   case 573:
-#line 7186 "Gmsh.y"
+#line 7184 "Gmsh.y"
     {
       std::string s = Msg::GetOnelabString((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].c));
       (yyval.c) = (char *)Malloc((s.size() + 1) * sizeof(char));
@@ -14588,7 +14586,7 @@ yyreduce:
     break;
 
   case 574:
-#line 7194 "Gmsh.y"
+#line 7192 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -14606,7 +14604,7 @@ yyreduce:
     break;
 
   case 575:
-#line 7209 "Gmsh.y"
+#line 7207 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -14623,7 +14621,7 @@ yyreduce:
     break;
 
   case 576:
-#line 7223 "Gmsh.y"
+#line 7221 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -14640,7 +14638,7 @@ yyreduce:
     break;
 
   case 577:
-#line 7237 "Gmsh.y"
+#line 7235 "Gmsh.y"
     {
       std::string input = (yyvsp[(3) - (8)].c);
       std::string substr_old = (yyvsp[(5) - (8)].c);
@@ -14655,7 +14653,7 @@ yyreduce:
     break;
 
   case 578:
-#line 7249 "Gmsh.y"
+#line 7247 "Gmsh.y"
     {
       int size = 1;
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++)
@@ -14674,7 +14672,7 @@ yyreduce:
     break;
 
   case 579:
-#line 7265 "Gmsh.y"
+#line 7263 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -14686,7 +14684,7 @@ yyreduce:
     break;
 
   case 580:
-#line 7274 "Gmsh.y"
+#line 7272 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -14698,7 +14696,7 @@ yyreduce:
     break;
 
   case 581:
-#line 7283 "Gmsh.y"
+#line 7281 "Gmsh.y"
     {
       int i = 0;
       while ((yyvsp[(3) - (4)].c)[i]) {
@@ -14711,7 +14709,7 @@ yyreduce:
     break;
 
   case 582:
-#line 7293 "Gmsh.y"
+#line 7291 "Gmsh.y"
     {
       if((yyvsp[(3) - (8)].d)){
         (yyval.c) = (yyvsp[(5) - (8)].c);
@@ -14725,7 +14723,7 @@ yyreduce:
     break;
 
   case 583:
-#line 7304 "Gmsh.y"
+#line 7302 "Gmsh.y"
     {
       std::string in = (yyvsp[(3) - (8)].c);
       std::string out = in.substr((int)(yyvsp[(5) - (8)].d), (int)(yyvsp[(7) - (8)].d));
@@ -14736,7 +14734,7 @@ yyreduce:
     break;
 
   case 584:
-#line 7312 "Gmsh.y"
+#line 7310 "Gmsh.y"
     {
       std::string in = (yyvsp[(3) - (6)].c);
       std::string out = in.substr((int)(yyvsp[(5) - (6)].d), std::string::npos);
@@ -14747,14 +14745,14 @@ yyreduce:
     break;
 
   case 585:
-#line 7320 "Gmsh.y"
+#line 7318 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 586:
-#line 7324 "Gmsh.y"
+#line 7322 "Gmsh.y"
     {
       char tmpstring[5000];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -14776,7 +14774,7 @@ yyreduce:
     break;
 
   case 587:
-#line 7343 "Gmsh.y"
+#line 7341 "Gmsh.y"
     {
       std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -14786,7 +14784,7 @@ yyreduce:
     break;
 
   case 588:
-#line 7350 "Gmsh.y"
+#line 7348 "Gmsh.y"
     {
       std::string tmp = SplitFileName(GetAbsolutePath(gmsh_yyname))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -14795,7 +14793,7 @@ yyreduce:
     break;
 
   case 589:
-#line 7356 "Gmsh.y"
+#line 7354 "Gmsh.y"
     {
       std::string tmp = SplitFileName((yyvsp[(3) - (4)].c))[0];
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -14805,7 +14803,7 @@ yyreduce:
     break;
 
   case 590:
-#line 7363 "Gmsh.y"
+#line 7361 "Gmsh.y"
     {
       std::string tmp = GetAbsolutePath((yyvsp[(3) - (4)].c));
       (yyval.c) = (char*)Malloc((tmp.size() + 1) * sizeof(char));
@@ -14815,12 +14813,12 @@ yyreduce:
     break;
 
   case 591:
-#line 7370 "Gmsh.y"
+#line 7368 "Gmsh.y"
     { floatOptions.clear(); charOptions.clear(); ;}
     break;
 
   case 592:
-#line 7372 "Gmsh.y"
+#line 7370 "Gmsh.y"
     {
       std::string val((yyvsp[(3) - (6)].c));
       Msg::ExchangeOnelabParameter("", val, floatOptions, charOptions);
@@ -14831,7 +14829,7 @@ yyreduce:
     break;
 
   case 593:
-#line 7383 "Gmsh.y"
+#line 7381 "Gmsh.y"
     {
       (yyval.l) = List_Create(20,20,sizeof(char*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].c)));
@@ -14839,12 +14837,12 @@ yyreduce:
     break;
 
   case 594:
-#line 7388 "Gmsh.y"
+#line 7386 "Gmsh.y"
     { List_Add((yyval.l), &((yyvsp[(3) - (3)].c))); ;}
     break;
 
   case 595:
-#line 7394 "Gmsh.y"
+#line 7392 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -14855,7 +14853,7 @@ yyreduce:
     break;
 
   case 596:
-#line 7403 "Gmsh.y"
+#line 7401 "Gmsh.y"
     {
       char tmpstr[256];
       sprintf(tmpstr, "_%d", (int)(yyvsp[(4) - (5)].d));
@@ -14866,23 +14864,23 @@ yyreduce:
     break;
 
   case 597:
-#line 7416 "Gmsh.y"
+#line 7414 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 598:
-#line 7419 "Gmsh.y"
+#line 7417 "Gmsh.y"
     { (yyval.c) = (yyvsp[(1) - (1)].c); ;}
     break;
 
   case 599:
-#line 7423 "Gmsh.y"
+#line 7421 "Gmsh.y"
     { (yyval.c) = (yyvsp[(3) - (4)].c); ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 14886 "Gmsh.tab.cpp"
+#line 14884 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -15096,7 +15094,7 @@ yyreturn:
 }
 
 
-#line 7426 "Gmsh.y"
+#line 7424 "Gmsh.y"
 
 
 void assignVariable(const std::string &name, int index, int assignType,
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 83f1952052e8b810ef54045f0b88eaa8e4a30d02..8c21cf5af4adaeed598b3884590def50937f6a9b 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1736,17 +1736,15 @@ Shape :
         double y = CTX::instance()->geom.scalingFactor * $6[1];
         double z = CTX::instance()->geom.scalingFactor * $6[2];
         double lc = CTX::instance()->geom.scalingFactor * $6[3];
+        if(lc == 0.) lc = MAX_LC; // no mesh size given at the point
         if(factory == "OpenCASCADE" && GModel::current()->getOCCInternals()){
           GModel::current()->getOCCInternals()->addVertex(num, x, y, z, lc);
         }
         else{
-          if(lc == 0.) lc = MAX_LC; // no mesh size given at the point
-          Vertex *v;
           if(!myGmshSurface)
-            v = Create_Vertex(num, x, y, z, lc, 1.0);
+            GModel::current()->getGEOInternals()->addVertex(num, x, y, z, lc);
           else
-            v = Create_Vertex(num, x, y, myGmshSurface, lc);
-          Tree_Add(GModel::current()->getGEOInternals()->Points, &v);
+            GModel::current()->getGEOInternals()->addVertex(num, x, y, myGmshSurface, lc);
         }
         AddToTemporaryBoundingBox(x, y, z);
       }
@@ -3667,7 +3665,7 @@ Delete :
 	GModel::current()->getGEOInternals()->destroy();
       }
       else if(!strcmp($2, "Physicals")){
-	GModel::current()->getGEOInternals()->reset_physicals();
+	GModel::current()->getGEOInternals()->resetPhysicalGroups();
 	GModel::current()->deletePhysicalGroups();
       }
       else if(!strcmp($2, "Variables")){