diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index bd163fe78e7bae92704bffbe38a0016b4c6cbf27..ffd45a5b5dfe00fba22557e6acd40c15ba5321be 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -324,7 +324,7 @@
 /* Copy the first part of user declarations.  */
 #line 1 "Gmsh.y"
 
-// $Id: Gmsh.tab.cpp,v 1.361 2008-04-28 10:10:52 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.362 2008-05-01 06:54:05 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -997,28 +997,28 @@ static const yytype_uint16 yyrline[] =
     1521,  1546,  1571,  1587,  1607,  1625,  1642,  1663,  1668,  1673,
     1678,  1683,  1694,  1700,  1709,  1710,  1715,  1718,  1722,  1745,
     1768,  1791,  1819,  1828,  1832,  1847,  1863,  1880,  1894,  1900,
-    1906,  1915,  1929,  1977,  1995,  2010,  2029,  2041,  2065,  2069,
-    2074,  2079,  2091,  2108,  2125,  2152,  2179,  2210,  2218,  2224,
-    2231,  2235,  2244,  2252,  2260,  2269,  2268,  2281,  2280,  2293,
-    2292,  2305,  2304,  2316,  2315,  2331,  2338,  2345,  2352,  2359,
-    2366,  2373,  2380,  2387,  2395,  2394,  2406,  2405,  2417,  2416,
-    2428,  2427,  2439,  2438,  2450,  2449,  2461,  2460,  2472,  2471,
-    2483,  2482,  2497,  2500,  2506,  2515,  2535,  2558,  2562,  2586,
-    2604,  2622,  2640,  2669,  2704,  2709,  2736,  2750,  2763,  2780,
-    2786,  2792,  2795,  2804,  2814,  2815,  2816,  2817,  2818,  2819,
-    2820,  2821,  2822,  2829,  2830,  2831,  2832,  2833,  2834,  2835,
-    2836,  2837,  2838,  2839,  2840,  2841,  2842,  2843,  2844,  2845,
-    2846,  2847,  2848,  2849,  2850,  2851,  2852,  2853,  2854,  2855,
-    2856,  2857,  2858,  2859,  2860,  2862,  2863,  2864,  2865,  2866,
-    2867,  2868,  2869,  2870,  2871,  2872,  2873,  2874,  2875,  2876,
-    2877,  2878,  2879,  2880,  2881,  2882,  2891,  2892,  2893,  2894,
-    2895,  2896,  2897,  2901,  2917,  2932,  2952,  2965,  2978,  3001,
-    3019,  3037,  3055,  3073,  3081,  3085,  3089,  3093,  3097,  3104,
-    3108,  3112,  3116,  3123,  3128,  3136,  3141,  3145,  3150,  3154,
-    3162,  3173,  3181,  3189,  3195,  3206,  3226,  3236,  3246,  3263,
-    3290,  3295,  3299,  3303,  3316,  3320,  3332,  3339,  3360,  3364,
-    3379,  3384,  3391,  3395,  3402,  3406,  3414,  3422,  3436,  3450,
-    3454,  3473,  3496
+    1906,  1915,  1929,  1977,  1995,  2010,  2032,  2044,  2068,  2072,
+    2077,  2082,  2094,  2111,  2128,  2155,  2182,  2213,  2221,  2227,
+    2234,  2238,  2247,  2255,  2263,  2272,  2271,  2284,  2283,  2296,
+    2295,  2308,  2307,  2319,  2318,  2334,  2341,  2348,  2355,  2362,
+    2369,  2376,  2383,  2390,  2398,  2397,  2409,  2408,  2420,  2419,
+    2431,  2430,  2442,  2441,  2453,  2452,  2464,  2463,  2475,  2474,
+    2486,  2485,  2500,  2503,  2509,  2518,  2538,  2561,  2565,  2589,
+    2607,  2625,  2643,  2672,  2707,  2712,  2739,  2753,  2766,  2783,
+    2789,  2795,  2798,  2807,  2817,  2818,  2819,  2820,  2821,  2822,
+    2823,  2824,  2825,  2832,  2833,  2834,  2835,  2836,  2837,  2838,
+    2839,  2840,  2841,  2842,  2843,  2844,  2845,  2846,  2847,  2848,
+    2849,  2850,  2851,  2852,  2853,  2854,  2855,  2856,  2857,  2858,
+    2859,  2860,  2861,  2862,  2863,  2865,  2866,  2867,  2868,  2869,
+    2870,  2871,  2872,  2873,  2874,  2875,  2876,  2877,  2878,  2879,
+    2880,  2881,  2882,  2883,  2884,  2885,  2894,  2895,  2896,  2897,
+    2898,  2899,  2900,  2904,  2920,  2935,  2955,  2968,  2981,  3004,
+    3022,  3040,  3058,  3076,  3084,  3088,  3092,  3096,  3100,  3107,
+    3111,  3115,  3119,  3126,  3131,  3139,  3144,  3148,  3153,  3157,
+    3165,  3176,  3184,  3192,  3198,  3209,  3229,  3239,  3249,  3266,
+    3293,  3298,  3302,  3306,  3319,  3323,  3335,  3342,  3363,  3367,
+    3382,  3387,  3394,  3398,  3405,  3409,  3417,  3425,  3439,  3453,
+    3457,  3476,  3499
 };
 #endif
 
@@ -5807,10 +5807,13 @@ yyreduce:
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Remesh")){
 	Msg(GERROR, "Surface ReMeshing must be reinterfaced");
-	//	ReMesh();
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Mesh")){
-	yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");
+	int lock = CTX.threads_lock;
+	CTX.threads_lock = 0;
+	GModel::current()->importGEOInternals();
+	GModel::current()->mesh((int)(yyvsp[(2) - (3)].d));
+	CTX.threads_lock = lock;
       }
       else if(!strcmp((yyvsp[(1) - (3)].c), "Status")){
 	yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");
@@ -5822,7 +5825,7 @@ yyreduce:
     break;
 
   case 146:
-#line 2030 "Gmsh.y"
+#line 2033 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
        try {
@@ -5837,7 +5840,7 @@ yyreduce:
     break;
 
   case 147:
-#line 2042 "Gmsh.y"
+#line 2045 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -5864,14 +5867,14 @@ yyreduce:
     break;
 
   case 148:
-#line 2066 "Gmsh.y"
+#line 2069 "Gmsh.y"
     {
       exit(0);
     ;}
     break;
 
   case 149:
-#line 2070 "Gmsh.y"
+#line 2073 "Gmsh.y"
     {
       CTX.forced_bbox = 0;
       SetBoundingBox();
@@ -5879,7 +5882,7 @@ yyreduce:
     break;
 
   case 150:
-#line 2075 "Gmsh.y"
+#line 2078 "Gmsh.y"
     {
       CTX.forced_bbox = 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));
@@ -5887,7 +5890,7 @@ yyreduce:
     break;
 
   case 151:
-#line 2080 "Gmsh.y"
+#line 2083 "Gmsh.y"
     {
 #if defined(HAVE_FLTK)
       Draw();
@@ -5896,7 +5899,7 @@ yyreduce:
     break;
 
   case 152:
-#line 2092 "Gmsh.y"
+#line 2095 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -5916,7 +5919,7 @@ yyreduce:
     break;
 
   case 153:
-#line 2109 "Gmsh.y"
+#line 2112 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -5936,7 +5939,7 @@ yyreduce:
     break;
 
   case 154:
-#line 2126 "Gmsh.y"
+#line 2129 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -5966,7 +5969,7 @@ yyreduce:
     break;
 
   case 155:
-#line 2153 "Gmsh.y"
+#line 2156 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -5996,7 +5999,7 @@ yyreduce:
     break;
 
   case 156:
-#line 2180 "Gmsh.y"
+#line 2183 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(GERROR, "Invalid For/EndFor loop");
@@ -6030,7 +6033,7 @@ yyreduce:
     break;
 
   case 157:
-#line 2211 "Gmsh.y"
+#line 2214 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname,
 						      gmsh_yylineno))
@@ -6041,7 +6044,7 @@ yyreduce:
     break;
 
   case 158:
-#line 2219 "Gmsh.y"
+#line 2222 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction(&gmsh_yyin, gmsh_yyname,
 						     gmsh_yylineno))
@@ -6050,7 +6053,7 @@ yyreduce:
     break;
 
   case 159:
-#line 2225 "Gmsh.y"
+#line 2228 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname,
 						     gmsh_yylineno))
@@ -6060,20 +6063,20 @@ yyreduce:
     break;
 
   case 160:
-#line 2232 "Gmsh.y"
+#line 2235 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
     break;
 
   case 161:
-#line 2236 "Gmsh.y"
+#line 2239 "Gmsh.y"
     {
     ;}
     break;
 
   case 162:
-#line 2245 "Gmsh.y"
+#line 2248 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
@@ -6084,7 +6087,7 @@ yyreduce:
     break;
 
   case 163:
-#line 2253 "Gmsh.y"
+#line 2256 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
@@ -6095,7 +6098,7 @@ yyreduce:
     break;
 
   case 164:
-#line 2261 "Gmsh.y"
+#line 2264 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
@@ -6106,14 +6109,14 @@ yyreduce:
     break;
 
   case 165:
-#line 2269 "Gmsh.y"
+#line 2272 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 166:
-#line 2273 "Gmsh.y"
+#line 2276 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
@@ -6124,14 +6127,14 @@ yyreduce:
     break;
 
   case 167:
-#line 2281 "Gmsh.y"
+#line 2284 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 168:
-#line 2285 "Gmsh.y"
+#line 2288 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
@@ -6142,14 +6145,14 @@ yyreduce:
     break;
 
   case 169:
-#line 2293 "Gmsh.y"
+#line 2296 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 170:
-#line 2297 "Gmsh.y"
+#line 2300 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
@@ -6160,14 +6163,14 @@ yyreduce:
     break;
 
   case 171:
-#line 2305 "Gmsh.y"
+#line 2308 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 172:
-#line 2309 "Gmsh.y"
+#line 2312 "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.,
@@ -6177,14 +6180,14 @@ yyreduce:
     break;
 
   case 173:
-#line 2316 "Gmsh.y"
+#line 2319 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 174:
-#line 2320 "Gmsh.y"
+#line 2323 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       extr.mesh.ViewIndex = (int)(yyvsp[(4) - (10)].d);
@@ -6197,7 +6200,7 @@ yyreduce:
     break;
 
   case 175:
-#line 2332 "Gmsh.y"
+#line 2335 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
@@ -6207,7 +6210,7 @@ yyreduce:
     break;
 
   case 176:
-#line 2339 "Gmsh.y"
+#line 2342 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
@@ -6217,7 +6220,7 @@ yyreduce:
     break;
 
   case 177:
-#line 2346 "Gmsh.y"
+#line 2349 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
@@ -6227,7 +6230,7 @@ yyreduce:
     break;
 
   case 178:
-#line 2353 "Gmsh.y"
+#line 2356 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6237,7 +6240,7 @@ yyreduce:
     break;
 
   case 179:
-#line 2360 "Gmsh.y"
+#line 2363 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6247,7 +6250,7 @@ yyreduce:
     break;
 
   case 180:
-#line 2367 "Gmsh.y"
+#line 2370 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6257,7 +6260,7 @@ yyreduce:
     break;
 
   case 181:
-#line 2374 "Gmsh.y"
+#line 2377 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
@@ -6267,7 +6270,7 @@ yyreduce:
     break;
 
   case 182:
-#line 2381 "Gmsh.y"
+#line 2384 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
@@ -6277,7 +6280,7 @@ yyreduce:
     break;
 
   case 183:
-#line 2388 "Gmsh.y"
+#line 2391 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
@@ -6287,14 +6290,14 @@ yyreduce:
     break;
 
   case 184:
-#line 2395 "Gmsh.y"
+#line 2398 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 185:
-#line 2399 "Gmsh.y"
+#line 2402 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6304,14 +6307,14 @@ yyreduce:
     break;
 
   case 186:
-#line 2406 "Gmsh.y"
+#line 2409 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 187:
-#line 2410 "Gmsh.y"
+#line 2413 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6321,14 +6324,14 @@ yyreduce:
     break;
 
   case 188:
-#line 2417 "Gmsh.y"
+#line 2420 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 189:
-#line 2421 "Gmsh.y"
+#line 2424 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6338,14 +6341,14 @@ yyreduce:
     break;
 
   case 190:
-#line 2428 "Gmsh.y"
+#line 2431 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 191:
-#line 2432 "Gmsh.y"
+#line 2435 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
@@ -6355,14 +6358,14 @@ yyreduce:
     break;
 
   case 192:
-#line 2439 "Gmsh.y"
+#line 2442 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 193:
-#line 2443 "Gmsh.y"
+#line 2446 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
@@ -6372,14 +6375,14 @@ yyreduce:
     break;
 
   case 194:
-#line 2450 "Gmsh.y"
+#line 2453 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 195:
-#line 2454 "Gmsh.y"
+#line 2457 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
@@ -6389,14 +6392,14 @@ yyreduce:
     break;
 
   case 196:
-#line 2461 "Gmsh.y"
+#line 2464 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 197:
-#line 2465 "Gmsh.y"
+#line 2468 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
@@ -6406,14 +6409,14 @@ yyreduce:
     break;
 
   case 198:
-#line 2472 "Gmsh.y"
+#line 2475 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 199:
-#line 2476 "Gmsh.y"
+#line 2479 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
@@ -6423,14 +6426,14 @@ yyreduce:
     break;
 
   case 200:
-#line 2483 "Gmsh.y"
+#line 2486 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 201:
-#line 2487 "Gmsh.y"
+#line 2490 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
@@ -6440,19 +6443,19 @@ yyreduce:
     break;
 
   case 202:
-#line 2498 "Gmsh.y"
+#line 2501 "Gmsh.y"
     {
     ;}
     break;
 
   case 203:
-#line 2501 "Gmsh.y"
+#line 2504 "Gmsh.y"
     {
     ;}
     break;
 
   case 204:
-#line 2507 "Gmsh.y"
+#line 2510 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -6464,7 +6467,7 @@ yyreduce:
     break;
 
   case 205:
-#line 2516 "Gmsh.y"
+#line 2519 "Gmsh.y"
     {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -6487,7 +6490,7 @@ yyreduce:
     break;
 
   case 206:
-#line 2536 "Gmsh.y"
+#line 2539 "Gmsh.y"
     {
       yymsg(GERROR, "Explicit region numbers in layers are deprecated");
       double d;
@@ -6513,14 +6516,14 @@ yyreduce:
     break;
 
   case 207:
-#line 2559 "Gmsh.y"
+#line 2562 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 208:
-#line 2563 "Gmsh.y"
+#line 2566 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -6542,7 +6545,7 @@ yyreduce:
     break;
 
   case 209:
-#line 2587 "Gmsh.y"
+#line 2590 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6563,7 +6566,7 @@ yyreduce:
     break;
 
   case 210:
-#line 2605 "Gmsh.y"
+#line 2608 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
 	double d;
@@ -6584,7 +6587,7 @@ yyreduce:
     break;
 
   case 211:
-#line 2623 "Gmsh.y"
+#line 2626 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (9)].l)); i++){
 	double d;
@@ -6605,7 +6608,7 @@ yyreduce:
     break;
 
   case 212:
-#line 2641 "Gmsh.y"
+#line 2644 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(4) - (8)].d));
       if(!s)
@@ -6637,7 +6640,7 @@ yyreduce:
     break;
 
   case 213:
-#line 2670 "Gmsh.y"
+#line 2673 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(4) - (9)].d));
       if(!s)
@@ -6675,7 +6678,7 @@ yyreduce:
     break;
 
   case 214:
-#line 2705 "Gmsh.y"
+#line 2708 "Gmsh.y"
     {
       yymsg(WARNING, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -6683,7 +6686,7 @@ yyreduce:
     break;
 
   case 215:
-#line 2710 "Gmsh.y"
+#line 2713 "Gmsh.y"
     {
       Volume *v = FindVolume((int)(yyvsp[(4) - (8)].d));
       if(!v)
@@ -6713,7 +6716,7 @@ yyreduce:
     break;
 
   case 216:
-#line 2737 "Gmsh.y"
+#line 2740 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6730,7 +6733,7 @@ yyreduce:
     break;
 
   case 217:
-#line 2751 "Gmsh.y"
+#line 2754 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	double d;
@@ -6746,7 +6749,7 @@ yyreduce:
     break;
 
   case 218:
-#line 2764 "Gmsh.y"
+#line 2767 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -6760,7 +6763,7 @@ yyreduce:
     break;
 
   case 219:
-#line 2781 "Gmsh.y"
+#line 2784 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s)
@@ -6769,7 +6772,7 @@ yyreduce:
     break;
 
   case 220:
-#line 2787 "Gmsh.y"
+#line 2790 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s)
@@ -6778,66 +6781,66 @@ yyreduce:
     break;
 
   case 221:
-#line 2793 "Gmsh.y"
+#line 2796 "Gmsh.y"
     {
     ;}
     break;
 
   case 222:
-#line 2796 "Gmsh.y"
+#line 2799 "Gmsh.y"
     {
     ;}
     break;
 
   case 223:
-#line 2805 "Gmsh.y"
+#line 2808 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 224:
-#line 2814 "Gmsh.y"
+#line 2817 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 225:
-#line 2815 "Gmsh.y"
+#line 2818 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 226:
-#line 2816 "Gmsh.y"
+#line 2819 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 227:
-#line 2817 "Gmsh.y"
+#line 2820 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 228:
-#line 2818 "Gmsh.y"
+#line 2821 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 229:
-#line 2819 "Gmsh.y"
+#line 2822 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 230:
-#line 2820 "Gmsh.y"
+#line 2823 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 231:
-#line 2821 "Gmsh.y"
+#line 2824 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 232:
-#line 2823 "Gmsh.y"
+#line 2826 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(GERROR, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -6847,307 +6850,307 @@ yyreduce:
     break;
 
   case 233:
-#line 2829 "Gmsh.y"
+#line 2832 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 234:
-#line 2830 "Gmsh.y"
+#line 2833 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 235:
-#line 2831 "Gmsh.y"
+#line 2834 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 236:
-#line 2832 "Gmsh.y"
+#line 2835 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 237:
-#line 2833 "Gmsh.y"
+#line 2836 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 238:
-#line 2834 "Gmsh.y"
+#line 2837 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 239:
-#line 2835 "Gmsh.y"
+#line 2838 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 240:
-#line 2836 "Gmsh.y"
+#line 2839 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 241:
-#line 2837 "Gmsh.y"
+#line 2840 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 242:
-#line 2838 "Gmsh.y"
+#line 2841 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 243:
-#line 2839 "Gmsh.y"
+#line 2842 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d)? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d);  ;}
     break;
 
   case 244:
-#line 2840 "Gmsh.y"
+#line 2843 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 245:
-#line 2841 "Gmsh.y"
+#line 2844 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 246:
-#line 2842 "Gmsh.y"
+#line 2845 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 247:
-#line 2843 "Gmsh.y"
+#line 2846 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 248:
-#line 2844 "Gmsh.y"
+#line 2847 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 249:
-#line 2845 "Gmsh.y"
+#line 2848 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 250:
-#line 2846 "Gmsh.y"
+#line 2849 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 251:
-#line 2847 "Gmsh.y"
+#line 2850 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 252:
-#line 2848 "Gmsh.y"
+#line 2851 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 253:
-#line 2849 "Gmsh.y"
+#line 2852 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 254:
-#line 2850 "Gmsh.y"
+#line 2853 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 255:
-#line 2851 "Gmsh.y"
+#line 2854 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 256:
-#line 2852 "Gmsh.y"
+#line 2855 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 257:
-#line 2853 "Gmsh.y"
+#line 2856 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 258:
-#line 2854 "Gmsh.y"
+#line 2857 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 259:
-#line 2855 "Gmsh.y"
+#line 2858 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 260:
-#line 2856 "Gmsh.y"
+#line 2859 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 261:
-#line 2857 "Gmsh.y"
+#line 2860 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 262:
-#line 2858 "Gmsh.y"
+#line 2861 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 263:
-#line 2859 "Gmsh.y"
+#line 2862 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d)*(yyvsp[(3) - (6)].d)+(yyvsp[(5) - (6)].d)*(yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 264:
-#line 2860 "Gmsh.y"
+#line 2863 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d)*(double)rand()/(double)RAND_MAX; ;}
     break;
 
   case 265:
-#line 2862 "Gmsh.y"
+#line 2865 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 266:
-#line 2863 "Gmsh.y"
+#line 2866 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 267:
-#line 2864 "Gmsh.y"
+#line 2867 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 268:
-#line 2865 "Gmsh.y"
+#line 2868 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 269:
-#line 2866 "Gmsh.y"
+#line 2869 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 270:
-#line 2867 "Gmsh.y"
+#line 2870 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 271:
-#line 2868 "Gmsh.y"
+#line 2871 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 272:
-#line 2869 "Gmsh.y"
+#line 2872 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 273:
-#line 2870 "Gmsh.y"
+#line 2873 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 274:
-#line 2871 "Gmsh.y"
+#line 2874 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 275:
-#line 2872 "Gmsh.y"
+#line 2875 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 276:
-#line 2873 "Gmsh.y"
+#line 2876 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 277:
-#line 2874 "Gmsh.y"
+#line 2877 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 278:
-#line 2875 "Gmsh.y"
+#line 2878 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 279:
-#line 2876 "Gmsh.y"
+#line 2879 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 280:
-#line 2877 "Gmsh.y"
+#line 2880 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 281:
-#line 2878 "Gmsh.y"
+#line 2881 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 282:
-#line 2879 "Gmsh.y"
+#line 2882 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 283:
-#line 2880 "Gmsh.y"
+#line 2883 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 284:
-#line 2881 "Gmsh.y"
+#line 2884 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d)*(yyvsp[(3) - (6)].d)+(yyvsp[(5) - (6)].d)*(yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 285:
-#line 2882 "Gmsh.y"
+#line 2885 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d)*(double)rand()/(double)RAND_MAX; ;}
     break;
 
   case 286:
-#line 2891 "Gmsh.y"
+#line 2894 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 287:
-#line 2892 "Gmsh.y"
+#line 2895 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 288:
-#line 2893 "Gmsh.y"
+#line 2896 "Gmsh.y"
     { (yyval.d) = ParUtil::Instance()->rank(); ;}
     break;
 
   case 289:
-#line 2894 "Gmsh.y"
+#line 2897 "Gmsh.y"
     { (yyval.d) = ParUtil::Instance()->size(); ;}
     break;
 
   case 290:
-#line 2895 "Gmsh.y"
+#line 2898 "Gmsh.y"
     { (yyval.d) = Get_GmshMajorVersion(); ;}
     break;
 
   case 291:
-#line 2896 "Gmsh.y"
+#line 2899 "Gmsh.y"
     { (yyval.d) = Get_GmshMinorVersion(); ;}
     break;
 
   case 292:
-#line 2897 "Gmsh.y"
+#line 2900 "Gmsh.y"
     { (yyval.d) = Get_GmshPatchVersion(); ;}
     break;
 
   case 293:
-#line 2902 "Gmsh.y"
+#line 2905 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (1)].c);
@@ -7163,7 +7166,7 @@ yyreduce:
     break;
 
   case 294:
-#line 2918 "Gmsh.y"
+#line 2921 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -7181,7 +7184,7 @@ yyreduce:
     break;
 
   case 295:
-#line 2933 "Gmsh.y"
+#line 2936 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (4)].c);
@@ -7204,7 +7207,7 @@ yyreduce:
     break;
 
   case 296:
-#line 2953 "Gmsh.y"
+#line 2956 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(2) - (4)].c);
@@ -7220,7 +7223,7 @@ yyreduce:
     break;
 
   case 297:
-#line 2966 "Gmsh.y"
+#line 2969 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (2)].c);
@@ -7236,7 +7239,7 @@ yyreduce:
     break;
 
   case 298:
-#line 2979 "Gmsh.y"
+#line 2982 "Gmsh.y"
     {
       Symbol TheSymbol;
       TheSymbol.Name = (yyvsp[(1) - (5)].c);
@@ -7259,7 +7262,7 @@ yyreduce:
     break;
 
   case 299:
-#line 3002 "Gmsh.y"
+#line 3005 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7280,7 +7283,7 @@ yyreduce:
     break;
 
   case 300:
-#line 3020 "Gmsh.y"
+#line 3023 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7301,7 +7304,7 @@ yyreduce:
     break;
 
   case 301:
-#line 3038 "Gmsh.y"
+#line 3041 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7322,7 +7325,7 @@ yyreduce:
     break;
 
   case 302:
-#line 3056 "Gmsh.y"
+#line 3059 "Gmsh.y"
     {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -7343,7 +7346,7 @@ yyreduce:
     break;
 
   case 303:
-#line 3074 "Gmsh.y"
+#line 3077 "Gmsh.y"
     { 
       (yyval.d) = GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -7351,70 +7354,70 @@ yyreduce:
     break;
 
   case 304:
-#line 3082 "Gmsh.y"
+#line 3085 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 305:
-#line 3086 "Gmsh.y"
+#line 3089 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 306:
-#line 3090 "Gmsh.y"
+#line 3093 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 307:
-#line 3094 "Gmsh.y"
+#line 3097 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 308:
-#line 3098 "Gmsh.y"
+#line 3101 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 309:
-#line 3105 "Gmsh.y"
+#line 3108 "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 310:
-#line 3109 "Gmsh.y"
+#line 3112 "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 311:
-#line 3113 "Gmsh.y"
+#line 3116 "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 312:
-#line 3117 "Gmsh.y"
+#line 3120 "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 313:
-#line 3124 "Gmsh.y"
+#line 3127 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -7422,14 +7425,14 @@ yyreduce:
     break;
 
   case 314:
-#line 3129 "Gmsh.y"
+#line 3132 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 315:
-#line 3137 "Gmsh.y"
+#line 3140 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -7437,14 +7440,14 @@ yyreduce:
     break;
 
   case 316:
-#line 3142 "Gmsh.y"
+#line 3145 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 317:
-#line 3146 "Gmsh.y"
+#line 3149 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -7452,14 +7455,14 @@ yyreduce:
     break;
 
   case 318:
-#line 3151 "Gmsh.y"
+#line 3154 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 319:
-#line 3155 "Gmsh.y"
+#line 3158 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7470,7 +7473,7 @@ yyreduce:
     break;
 
   case 320:
-#line 3163 "Gmsh.y"
+#line 3166 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7481,7 +7484,7 @@ yyreduce:
     break;
 
   case 321:
-#line 3174 "Gmsh.y"
+#line 3177 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7492,7 +7495,7 @@ yyreduce:
     break;
 
   case 322:
-#line 3182 "Gmsh.y"
+#line 3185 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -7503,7 +7506,7 @@ yyreduce:
     break;
 
   case 323:
-#line 3190 "Gmsh.y"
+#line 3193 "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)); ((yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d)) ? (d += 1.) : (d -= 1.)) 
@@ -7512,7 +7515,7 @@ yyreduce:
     break;
 
   case 324:
-#line 3196 "Gmsh.y"
+#line 3199 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double)); 
       if(!(yyvsp[(5) - (5)].d) || ((yyvsp[(1) - (5)].d) < (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) < 0) || ((yyvsp[(1) - (5)].d) > (yyvsp[(3) - (5)].d) && (yyvsp[(5) - (5)].d) > 0)){
@@ -7526,7 +7529,7 @@ yyreduce:
     break;
 
   case 325:
-#line 3207 "Gmsh.y"
+#line 3210 "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
@@ -7549,7 +7552,7 @@ yyreduce:
     break;
 
   case 326:
-#line 3227 "Gmsh.y"
+#line 3230 "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++){
@@ -7562,7 +7565,7 @@ yyreduce:
     break;
 
   case 327:
-#line 3237 "Gmsh.y"
+#line 3240 "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++){
@@ -7575,7 +7578,7 @@ yyreduce:
     break;
 
   case 328:
-#line 3247 "Gmsh.y"
+#line 3250 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -7595,7 +7598,7 @@ yyreduce:
     break;
 
   case 329:
-#line 3264 "Gmsh.y"
+#line 3267 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -7622,7 +7625,7 @@ yyreduce:
     break;
 
   case 330:
-#line 3291 "Gmsh.y"
+#line 3294 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -7630,21 +7633,21 @@ yyreduce:
     break;
 
   case 331:
-#line 3296 "Gmsh.y"
+#line 3299 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 332:
-#line 3300 "Gmsh.y"
+#line 3303 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 333:
-#line 3304 "Gmsh.y"
+#line 3307 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -7656,21 +7659,21 @@ yyreduce:
     break;
 
   case 334:
-#line 3317 "Gmsh.y"
+#line 3320 "Gmsh.y"
     {
       (yyval.u) = CTX.PACK_COLOR((int)(yyvsp[(2) - (9)].d), (int)(yyvsp[(4) - (9)].d), (int)(yyvsp[(6) - (9)].d), (int)(yyvsp[(8) - (9)].d));
     ;}
     break;
 
   case 335:
-#line 3321 "Gmsh.y"
+#line 3324 "Gmsh.y"
     {
       (yyval.u) = CTX.PACK_COLOR((int)(yyvsp[(2) - (7)].d), (int)(yyvsp[(4) - (7)].d), (int)(yyvsp[(6) - (7)].d), 255);
     ;}
     break;
 
   case 336:
-#line 3333 "Gmsh.y"
+#line 3336 "Gmsh.y"
     {
       int flag;
       (yyval.u) = Get_ColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -7680,7 +7683,7 @@ yyreduce:
     break;
 
   case 337:
-#line 3340 "Gmsh.y"
+#line 3343 "Gmsh.y"
     {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -7701,14 +7704,14 @@ yyreduce:
     break;
 
   case 338:
-#line 3361 "Gmsh.y"
+#line 3364 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 339:
-#line 3365 "Gmsh.y"
+#line 3368 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)(yyvsp[(3) - (6)].d));
@@ -7723,7 +7726,7 @@ yyreduce:
     break;
 
   case 340:
-#line 3380 "Gmsh.y"
+#line 3383 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -7731,35 +7734,35 @@ yyreduce:
     break;
 
   case 341:
-#line 3385 "Gmsh.y"
+#line 3388 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 342:
-#line 3392 "Gmsh.y"
+#line 3395 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 343:
-#line 3396 "Gmsh.y"
+#line 3399 "Gmsh.y"
     {
       Msg(WARNING, "Named string expressions not implemented yet");
     ;}
     break;
 
   case 344:
-#line 3403 "Gmsh.y"
+#line 3406 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 345:
-#line 3407 "Gmsh.y"
+#line 3410 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32*sizeof(char));
       time_t now;
@@ -7770,7 +7773,7 @@ yyreduce:
     break;
 
   case 346:
-#line 3415 "Gmsh.y"
+#line 3418 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (6)].c))+strlen((yyvsp[(5) - (6)].c))+1)*sizeof(char));
       strcpy((yyval.c), (yyvsp[(3) - (6)].c));
@@ -7781,7 +7784,7 @@ yyreduce:
     break;
 
   case 347:
-#line 3423 "Gmsh.y"
+#line 3426 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c))+1)*sizeof(char));
       int i;
@@ -7798,7 +7801,7 @@ yyreduce:
     break;
 
   case 348:
-#line 3437 "Gmsh.y"
+#line 3440 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c))+1)*sizeof(char));
       int i;
@@ -7815,14 +7818,14 @@ yyreduce:
     break;
 
   case 349:
-#line 3451 "Gmsh.y"
+#line 3454 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 350:
-#line 3455 "Gmsh.y"
+#line 3458 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -7844,7 +7847,7 @@ yyreduce:
     break;
 
   case 351:
-#line 3474 "Gmsh.y"
+#line 3477 "Gmsh.y"
     { 
       const char* (*pStrOpt)(int num, int action, const char *value);
       StringXString *pStrCat;
@@ -7870,7 +7873,7 @@ yyreduce:
     break;
 
   case 352:
-#line 3497 "Gmsh.y"
+#line 3500 "Gmsh.y"
     { 
       const char* (*pStrOpt)(int num, int action, const char *value);
       StringXString *pStrCat;
@@ -7897,7 +7900,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 7901 "Gmsh.tab.cpp"
+#line 7904 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -8111,7 +8114,7 @@ yyreturn:
 }
 
 
-#line 3521 "Gmsh.y"
+#line 3524 "Gmsh.y"
 
 
 void DeleteSymbol(void *a, void *b)
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index a90a6a1545604b8a5ac2cfff2611b2589b5b82cb..9d9ea7700e68d9483931599fb83a52da138b03ae 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.y,v 1.311 2008-04-28 10:10:59 geuzaine Exp $
+// $Id: Gmsh.y,v 1.312 2008-05-01 06:54:09 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -2014,10 +2014,13 @@ Command :
       }
       else if(!strcmp($1, "Remesh")){
 	Msg(GERROR, "Surface ReMeshing must be reinterfaced");
-	//	ReMesh();
       }
       else if(!strcmp($1, "Mesh")){
-	yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");
+	int lock = CTX.threads_lock;
+	CTX.threads_lock = 0;
+	GModel::current()->importGEOInternals();
+	GModel::current()->mesh((int)$2);
+	CTX.threads_lock = lock;
       }
       else if(!strcmp($1, "Status")){
 	yymsg(GERROR, "Mesh directives are not (yet) allowed in scripts");
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index ba526cf2fc4b39fe904f205b6beeb8c38d780857..3331891e7b30d3048f4a80c3991754eb072bd03a 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -835,7 +835,7 @@ int gmsh_yy_flex_debug = 0;
 char *gmsh_yytext;
 #line 1 "Gmsh.l"
 #line 2 "Gmsh.l"
-// $Id: Gmsh.yy.cpp,v 1.361 2008-04-28 10:10:59 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.362 2008-05-01 06:54:09 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //