diff --git a/Common/Options.cpp b/Common/Options.cpp
index 60482a477291d9e14002a3da863d93df09985a39..be05873b73856a06eb19232a726226da11d0ed46 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -426,7 +426,11 @@ void ReInitOptions(int num)
 #if defined(HAVE_POST)
   std::vector<PView*> tmp = PView::list;
   PView::list.clear(); 
+#endif
+
   InitOptions(num);
+
+#if defined(HAVE_POST)
   PView::list = tmp; 
   for(unsigned int i = 0; i < PView::list.size(); i++)
     PView::list[i]->setOptions();
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 934ae1b84430641dbe233d205a898f6077908e14..b6337219f4b6d535b54881a538d66881ade9b982 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1033,30 +1033,30 @@ static const yytype_uint16 yyrline[] =
     1476,  1504,  1521,  1541,  1559,  1577,  1592,  1591,  1617,  1622,
     1627,  1632,  1637,  1657,  1663,  1674,  1675,  1680,  1683,  1687,
     1710,  1733,  1756,  1784,  1805,  1826,  1848,  1868,  1980,  1999,
-    2013,  2122,  2131,  2137,  2152,  2176,  2193,  2207,  2213,  2219,
-    2228,  2242,  2282,  2299,  2314,  2333,  2345,  2369,  2373,  2380,
-    2386,  2391,  2397,  2407,  2424,  2441,  2460,  2479,  2509,  2517,
-    2523,  2530,  2534,  2543,  2551,  2559,  2568,  2567,  2580,  2579,
-    2592,  2591,  2604,  2603,  2616,  2623,  2630,  2637,  2644,  2651,
-    2658,  2665,  2672,  2680,  2679,  2691,  2690,  2702,  2701,  2713,
-    2712,  2724,  2723,  2735,  2734,  2746,  2745,  2757,  2756,  2768,
-    2767,  2782,  2785,  2791,  2800,  2820,  2843,  2847,  2871,  2874,
-    2890,  2893,  2906,  2909,  2915,  2918,  2925,  2981,  3051,  3056,
-    3123,  3166,  3192,  3215,  3238,  3241,  3250,  3254,  3271,  3304,
-    3338,  3376,  3377,  3378,  3379,  3380,  3381,  3382,  3383,  3384,
-    3391,  3392,  3393,  3394,  3395,  3396,  3397,  3398,  3399,  3400,
-    3401,  3402,  3403,  3404,  3405,  3406,  3407,  3408,  3409,  3410,
-    3411,  3412,  3413,  3414,  3415,  3416,  3417,  3418,  3419,  3420,
-    3421,  3422,  3424,  3425,  3426,  3427,  3428,  3429,  3430,  3431,
-    3432,  3433,  3434,  3435,  3436,  3437,  3438,  3439,  3440,  3441,
-    3442,  3443,  3444,  3453,  3454,  3455,  3456,  3457,  3458,  3459,
-    3463,  3476,  3488,  3503,  3513,  3523,  3541,  3546,  3551,  3561,
-    3571,  3579,  3583,  3587,  3591,  3595,  3602,  3606,  3610,  3614,
-    3621,  3626,  3633,  3638,  3642,  3647,  3651,  3659,  3670,  3674,
-    3686,  3694,  3702,  3709,  3720,  3740,  3750,  3760,  3770,  3790,
-    3795,  3799,  3803,  3815,  3819,  3831,  3838,  3848,  3852,  3867,
-    3872,  3879,  3883,  3896,  3904,  3915,  3919,  3927,  3935,  3949,
-    3963,  3967
+    2013,  2122,  2131,  2137,  2152,  2180,  2197,  2211,  2217,  2223,
+    2232,  2246,  2286,  2303,  2318,  2337,  2349,  2373,  2377,  2384,
+    2390,  2395,  2401,  2411,  2428,  2445,  2464,  2483,  2513,  2521,
+    2527,  2534,  2538,  2547,  2555,  2563,  2572,  2571,  2584,  2583,
+    2596,  2595,  2608,  2607,  2620,  2627,  2634,  2641,  2648,  2655,
+    2662,  2669,  2676,  2684,  2683,  2695,  2694,  2706,  2705,  2717,
+    2716,  2728,  2727,  2739,  2738,  2750,  2749,  2761,  2760,  2772,
+    2771,  2786,  2789,  2795,  2804,  2824,  2847,  2851,  2875,  2878,
+    2894,  2897,  2910,  2913,  2919,  2922,  2929,  2985,  3055,  3060,
+    3127,  3170,  3196,  3219,  3242,  3245,  3254,  3258,  3275,  3308,
+    3342,  3380,  3381,  3382,  3383,  3384,  3385,  3386,  3387,  3388,
+    3395,  3396,  3397,  3398,  3399,  3400,  3401,  3402,  3403,  3404,
+    3405,  3406,  3407,  3408,  3409,  3410,  3411,  3412,  3413,  3414,
+    3415,  3416,  3417,  3418,  3419,  3420,  3421,  3422,  3423,  3424,
+    3425,  3426,  3428,  3429,  3430,  3431,  3432,  3433,  3434,  3435,
+    3436,  3437,  3438,  3439,  3440,  3441,  3442,  3443,  3444,  3445,
+    3446,  3447,  3448,  3457,  3458,  3459,  3460,  3461,  3462,  3463,
+    3467,  3480,  3492,  3507,  3517,  3527,  3545,  3550,  3555,  3565,
+    3575,  3583,  3587,  3591,  3595,  3599,  3606,  3610,  3614,  3618,
+    3625,  3630,  3637,  3642,  3646,  3651,  3655,  3663,  3674,  3678,
+    3690,  3698,  3706,  3713,  3724,  3744,  3754,  3764,  3774,  3794,
+    3799,  3803,  3807,  3819,  3823,  3835,  3842,  3852,  3856,  3871,
+    3876,  3883,  3887,  3900,  3908,  3919,  3923,  3931,  3939,  3953,
+    3967,  3971
 };
 #endif
 
@@ -6155,6 +6155,10 @@ yyreduce:
       else if(!strcmp((yyvsp[(2) - (3)].c), "Variables")){
 	gmsh_yysymbols.clear();
       }
+      else if(!strcmp((yyvsp[(2) - (3)].c), "Options")){
+        ReInitOptions(0);
+        InitOptionsGUI(0);
+      }
       else{
 	if(gmsh_yysymbols.count((yyvsp[(2) - (3)].c)))
 	  gmsh_yysymbols.erase((yyvsp[(2) - (3)].c));
@@ -6166,7 +6170,7 @@ yyreduce:
     break;
 
   case 155:
-#line 2177 "Gmsh.y"
+#line 2181 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -6181,7 +6185,7 @@ yyreduce:
     break;
 
   case 156:
-#line 2194 "Gmsh.y"
+#line 2198 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -6193,7 +6197,7 @@ yyreduce:
     break;
 
   case 157:
-#line 2208 "Gmsh.y"
+#line 2212 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
@@ -6202,7 +6206,7 @@ yyreduce:
     break;
 
   case 158:
-#line 2214 "Gmsh.y"
+#line 2218 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
@@ -6211,7 +6215,7 @@ yyreduce:
     break;
 
   case 159:
-#line 2220 "Gmsh.y"
+#line 2224 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -6223,7 +6227,7 @@ yyreduce:
     break;
 
   case 160:
-#line 2229 "Gmsh.y"
+#line 2233 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -6235,7 +6239,7 @@ yyreduce:
     break;
 
   case 161:
-#line 2243 "Gmsh.y"
+#line 2247 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
         std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c));
@@ -6278,7 +6282,7 @@ yyreduce:
     break;
 
   case 162:
-#line 2283 "Gmsh.y"
+#line 2287 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -6298,7 +6302,7 @@ yyreduce:
     break;
 
   case 163:
-#line 2300 "Gmsh.y"
+#line 2304 "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")){
@@ -6316,7 +6320,7 @@ yyreduce:
     break;
 
   case 164:
-#line 2315 "Gmsh.y"
+#line 2319 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -6338,7 +6342,7 @@ yyreduce:
     break;
 
   case 165:
-#line 2334 "Gmsh.y"
+#line 2338 "Gmsh.y"
     {
 #if defined(HAVE_POST)
        try {
@@ -6353,7 +6357,7 @@ yyreduce:
     break;
 
   case 166:
-#line 2346 "Gmsh.y"
+#line 2350 "Gmsh.y"
     {
 #if defined(HAVE_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -6380,14 +6384,14 @@ yyreduce:
     break;
 
   case 167:
-#line 2370 "Gmsh.y"
+#line 2374 "Gmsh.y"
     {
       exit(0);
     ;}
     break;
 
   case 168:
-#line 2374 "Gmsh.y"
+#line 2378 "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 
@@ -6397,7 +6401,7 @@ yyreduce:
     break;
 
   case 169:
-#line 2381 "Gmsh.y"
+#line 2385 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
@@ -6406,7 +6410,7 @@ yyreduce:
     break;
 
   case 170:
-#line 2387 "Gmsh.y"
+#line 2391 "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));
@@ -6414,7 +6418,7 @@ yyreduce:
     break;
 
   case 171:
-#line 2392 "Gmsh.y"
+#line 2396 "Gmsh.y"
     {
 #if defined(HAVE_OPENGL)
       drawContext::global()->draw();
@@ -6423,14 +6427,14 @@ yyreduce:
     break;
 
   case 172:
-#line 2398 "Gmsh.y"
+#line 2402 "Gmsh.y"
     {
        GModel::current()->createTopologyFromMesh();
     ;}
     break;
 
   case 173:
-#line 2408 "Gmsh.y"
+#line 2412 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -6450,7 +6454,7 @@ yyreduce:
     break;
 
   case 174:
-#line 2425 "Gmsh.y"
+#line 2429 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -6470,7 +6474,7 @@ yyreduce:
     break;
 
   case 175:
-#line 2442 "Gmsh.y"
+#line 2446 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -6492,7 +6496,7 @@ yyreduce:
     break;
 
   case 176:
-#line 2461 "Gmsh.y"
+#line 2465 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -6514,7 +6518,7 @@ yyreduce:
     break;
 
   case 177:
-#line 2480 "Gmsh.y"
+#line 2484 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -6547,7 +6551,7 @@ yyreduce:
     break;
 
   case 178:
-#line 2510 "Gmsh.y"
+#line 2514 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          ((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -6558,7 +6562,7 @@ yyreduce:
     break;
 
   case 179:
-#line 2518 "Gmsh.y"
+#line 2522 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -6567,7 +6571,7 @@ yyreduce:
     break;
 
   case 180:
-#line 2524 "Gmsh.y"
+#line 2528 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          ((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -6577,20 +6581,20 @@ yyreduce:
     break;
 
   case 181:
-#line 2531 "Gmsh.y"
+#line 2535 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
     break;
 
   case 182:
-#line 2535 "Gmsh.y"
+#line 2539 "Gmsh.y"
     {
     ;}
     break;
 
   case 183:
-#line 2544 "Gmsh.y"
+#line 2548 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
@@ -6601,7 +6605,7 @@ yyreduce:
     break;
 
   case 184:
-#line 2552 "Gmsh.y"
+#line 2556 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
@@ -6612,7 +6616,7 @@ yyreduce:
     break;
 
   case 185:
-#line 2560 "Gmsh.y"
+#line 2564 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
@@ -6623,14 +6627,14 @@ yyreduce:
     break;
 
   case 186:
-#line 2568 "Gmsh.y"
+#line 2572 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 187:
-#line 2572 "Gmsh.y"
+#line 2576 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
@@ -6641,14 +6645,14 @@ yyreduce:
     break;
 
   case 188:
-#line 2580 "Gmsh.y"
+#line 2584 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 189:
-#line 2584 "Gmsh.y"
+#line 2588 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
@@ -6659,14 +6663,14 @@ yyreduce:
     break;
 
   case 190:
-#line 2592 "Gmsh.y"
+#line 2596 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 191:
-#line 2596 "Gmsh.y"
+#line 2600 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
@@ -6677,14 +6681,14 @@ yyreduce:
     break;
 
   case 192:
-#line 2604 "Gmsh.y"
+#line 2608 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 193:
-#line 2608 "Gmsh.y"
+#line 2612 "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.,
@@ -6694,7 +6698,7 @@ yyreduce:
     break;
 
   case 194:
-#line 2617 "Gmsh.y"
+#line 2621 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
@@ -6704,7 +6708,7 @@ yyreduce:
     break;
 
   case 195:
-#line 2624 "Gmsh.y"
+#line 2628 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
@@ -6714,7 +6718,7 @@ yyreduce:
     break;
 
   case 196:
-#line 2631 "Gmsh.y"
+#line 2635 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
@@ -6724,7 +6728,7 @@ yyreduce:
     break;
 
   case 197:
-#line 2638 "Gmsh.y"
+#line 2642 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6734,7 +6738,7 @@ yyreduce:
     break;
 
   case 198:
-#line 2645 "Gmsh.y"
+#line 2649 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6744,7 +6748,7 @@ yyreduce:
     break;
 
   case 199:
-#line 2652 "Gmsh.y"
+#line 2656 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6754,7 +6758,7 @@ yyreduce:
     break;
 
   case 200:
-#line 2659 "Gmsh.y"
+#line 2663 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
@@ -6764,7 +6768,7 @@ yyreduce:
     break;
 
   case 201:
-#line 2666 "Gmsh.y"
+#line 2670 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
@@ -6774,7 +6778,7 @@ yyreduce:
     break;
 
   case 202:
-#line 2673 "Gmsh.y"
+#line 2677 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
@@ -6784,14 +6788,14 @@ yyreduce:
     break;
 
   case 203:
-#line 2680 "Gmsh.y"
+#line 2684 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 204:
-#line 2684 "Gmsh.y"
+#line 2688 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6801,14 +6805,14 @@ yyreduce:
     break;
 
   case 205:
-#line 2691 "Gmsh.y"
+#line 2695 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 206:
-#line 2695 "Gmsh.y"
+#line 2699 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6818,14 +6822,14 @@ yyreduce:
     break;
 
   case 207:
-#line 2702 "Gmsh.y"
+#line 2706 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 208:
-#line 2706 "Gmsh.y"
+#line 2710 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6835,14 +6839,14 @@ yyreduce:
     break;
 
   case 209:
-#line 2713 "Gmsh.y"
+#line 2717 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 210:
-#line 2717 "Gmsh.y"
+#line 2721 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
@@ -6852,14 +6856,14 @@ yyreduce:
     break;
 
   case 211:
-#line 2724 "Gmsh.y"
+#line 2728 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 212:
-#line 2728 "Gmsh.y"
+#line 2732 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
@@ -6869,14 +6873,14 @@ yyreduce:
     break;
 
   case 213:
-#line 2735 "Gmsh.y"
+#line 2739 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 214:
-#line 2739 "Gmsh.y"
+#line 2743 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
@@ -6886,14 +6890,14 @@ yyreduce:
     break;
 
   case 215:
-#line 2746 "Gmsh.y"
+#line 2750 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 216:
-#line 2750 "Gmsh.y"
+#line 2754 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
@@ -6903,14 +6907,14 @@ yyreduce:
     break;
 
   case 217:
-#line 2757 "Gmsh.y"
+#line 2761 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 218:
-#line 2761 "Gmsh.y"
+#line 2765 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
@@ -6920,14 +6924,14 @@ yyreduce:
     break;
 
   case 219:
-#line 2768 "Gmsh.y"
+#line 2772 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 220:
-#line 2772 "Gmsh.y"
+#line 2776 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
@@ -6937,19 +6941,19 @@ yyreduce:
     break;
 
   case 221:
-#line 2783 "Gmsh.y"
+#line 2787 "Gmsh.y"
     {
     ;}
     break;
 
   case 222:
-#line 2786 "Gmsh.y"
+#line 2790 "Gmsh.y"
     {
     ;}
     break;
 
   case 223:
-#line 2792 "Gmsh.y"
+#line 2796 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -6961,7 +6965,7 @@ yyreduce:
     break;
 
   case 224:
-#line 2801 "Gmsh.y"
+#line 2805 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -6984,7 +6988,7 @@ yyreduce:
     break;
 
   case 225:
-#line 2821 "Gmsh.y"
+#line 2825 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -7010,14 +7014,14 @@ yyreduce:
     break;
 
   case 226:
-#line 2844 "Gmsh.y"
+#line 2848 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 227:
-#line 2848 "Gmsh.y"
+#line 2852 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -7039,14 +7043,14 @@ yyreduce:
     break;
 
   case 228:
-#line 2871 "Gmsh.y"
+#line 2875 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
     break;
 
   case 229:
-#line 2875 "Gmsh.y"
+#line 2879 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -7062,14 +7066,14 @@ yyreduce:
     break;
 
   case 230:
-#line 2890 "Gmsh.y"
+#line 2894 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
     break;
 
   case 231:
-#line 2894 "Gmsh.y"
+#line 2898 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -7082,35 +7086,35 @@ yyreduce:
     break;
 
   case 232:
-#line 2906 "Gmsh.y"
+#line 2910 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
     break;
 
   case 233:
-#line 2910 "Gmsh.y"
+#line 2914 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
     break;
 
   case 234:
-#line 2915 "Gmsh.y"
+#line 2919 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
     break;
 
   case 235:
-#line 2919 "Gmsh.y"
+#line 2923 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
     break;
 
   case 236:
-#line 2926 "Gmsh.y"
+#line 2930 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -7169,7 +7173,7 @@ yyreduce:
     break;
 
   case 237:
-#line 2982 "Gmsh.y"
+#line 2986 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -7242,7 +7246,7 @@ yyreduce:
     break;
 
   case 238:
-#line 3052 "Gmsh.y"
+#line 3056 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -7250,7 +7254,7 @@ yyreduce:
     break;
 
   case 239:
-#line 3057 "Gmsh.y"
+#line 3061 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -7320,7 +7324,7 @@ yyreduce:
     break;
 
   case 240:
-#line 3124 "Gmsh.y"
+#line 3128 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -7366,7 +7370,7 @@ yyreduce:
     break;
 
   case 241:
-#line 3167 "Gmsh.y"
+#line 3171 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -7389,7 +7393,7 @@ yyreduce:
     break;
 
   case 242:
-#line 3193 "Gmsh.y"
+#line 3197 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -7415,7 +7419,7 @@ yyreduce:
     break;
 
   case 243:
-#line 3216 "Gmsh.y"
+#line 3220 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -7441,26 +7445,26 @@ yyreduce:
     break;
 
   case 244:
-#line 3239 "Gmsh.y"
+#line 3243 "Gmsh.y"
     {
     ;}
     break;
 
   case 245:
-#line 3242 "Gmsh.y"
+#line 3246 "Gmsh.y"
     {
     ;}
     break;
 
   case 246:
-#line 3251 "Gmsh.y"
+#line 3255 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 247:
-#line 3255 "Gmsh.y"
+#line 3259 "Gmsh.y"
     { 
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -7473,7 +7477,7 @@ yyreduce:
     break;
 
   case 248:
-#line 3272 "Gmsh.y"
+#line 3276 "Gmsh.y"
     {
     
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(3) - (7)].l));
@@ -7508,7 +7512,7 @@ yyreduce:
     break;
 
   case 249:
-#line 3305 "Gmsh.y"
+#line 3309 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7544,7 +7548,7 @@ yyreduce:
     break;
 
   case 250:
-#line 3339 "Gmsh.y"
+#line 3343 "Gmsh.y"
     {
     List_T *temp = ListOfDouble2ListOfInt((yyvsp[(7) - (11)].l));
     std::vector<int> domain;
@@ -7580,47 +7584,47 @@ yyreduce:
     break;
 
   case 251:
-#line 3376 "Gmsh.y"
+#line 3380 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 252:
-#line 3377 "Gmsh.y"
+#line 3381 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 253:
-#line 3378 "Gmsh.y"
+#line 3382 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 254:
-#line 3379 "Gmsh.y"
+#line 3383 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 255:
-#line 3380 "Gmsh.y"
+#line 3384 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 256:
-#line 3381 "Gmsh.y"
+#line 3385 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 257:
-#line 3382 "Gmsh.y"
+#line 3386 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 258:
-#line 3383 "Gmsh.y"
+#line 3387 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 259:
-#line 3385 "Gmsh.y"
+#line 3389 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -7630,307 +7634,307 @@ yyreduce:
     break;
 
   case 260:
-#line 3391 "Gmsh.y"
+#line 3395 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 261:
-#line 3392 "Gmsh.y"
+#line 3396 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 262:
-#line 3393 "Gmsh.y"
+#line 3397 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 263:
-#line 3394 "Gmsh.y"
+#line 3398 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 264:
-#line 3395 "Gmsh.y"
+#line 3399 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 265:
-#line 3396 "Gmsh.y"
+#line 3400 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 266:
-#line 3397 "Gmsh.y"
+#line 3401 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 267:
-#line 3398 "Gmsh.y"
+#line 3402 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 268:
-#line 3399 "Gmsh.y"
+#line 3403 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 269:
-#line 3400 "Gmsh.y"
+#line 3404 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 270:
-#line 3401 "Gmsh.y"
+#line 3405 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 271:
-#line 3402 "Gmsh.y"
+#line 3406 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 272:
-#line 3403 "Gmsh.y"
+#line 3407 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 273:
-#line 3404 "Gmsh.y"
+#line 3408 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 274:
-#line 3405 "Gmsh.y"
+#line 3409 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 275:
-#line 3406 "Gmsh.y"
+#line 3410 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 276:
-#line 3407 "Gmsh.y"
+#line 3411 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 277:
-#line 3408 "Gmsh.y"
+#line 3412 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 278:
-#line 3409 "Gmsh.y"
+#line 3413 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 279:
-#line 3410 "Gmsh.y"
+#line 3414 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 280:
-#line 3411 "Gmsh.y"
+#line 3415 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 281:
-#line 3412 "Gmsh.y"
+#line 3416 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 282:
-#line 3413 "Gmsh.y"
+#line 3417 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 283:
-#line 3414 "Gmsh.y"
+#line 3418 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 284:
-#line 3415 "Gmsh.y"
+#line 3419 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 285:
-#line 3416 "Gmsh.y"
+#line 3420 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 286:
-#line 3417 "Gmsh.y"
+#line 3421 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 287:
-#line 3418 "Gmsh.y"
+#line 3422 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 288:
-#line 3419 "Gmsh.y"
+#line 3423 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 289:
-#line 3420 "Gmsh.y"
+#line 3424 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 290:
-#line 3421 "Gmsh.y"
+#line 3425 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 291:
-#line 3422 "Gmsh.y"
+#line 3426 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 292:
-#line 3424 "Gmsh.y"
+#line 3428 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 293:
-#line 3425 "Gmsh.y"
+#line 3429 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 294:
-#line 3426 "Gmsh.y"
+#line 3430 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 295:
-#line 3427 "Gmsh.y"
+#line 3431 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 296:
-#line 3428 "Gmsh.y"
+#line 3432 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 297:
-#line 3429 "Gmsh.y"
+#line 3433 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 298:
-#line 3430 "Gmsh.y"
+#line 3434 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 299:
-#line 3431 "Gmsh.y"
+#line 3435 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 300:
-#line 3432 "Gmsh.y"
+#line 3436 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 301:
-#line 3433 "Gmsh.y"
+#line 3437 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 302:
-#line 3434 "Gmsh.y"
+#line 3438 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 303:
-#line 3435 "Gmsh.y"
+#line 3439 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 304:
-#line 3436 "Gmsh.y"
+#line 3440 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 305:
-#line 3437 "Gmsh.y"
+#line 3441 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 306:
-#line 3438 "Gmsh.y"
+#line 3442 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 307:
-#line 3439 "Gmsh.y"
+#line 3443 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 308:
-#line 3440 "Gmsh.y"
+#line 3444 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 309:
-#line 3441 "Gmsh.y"
+#line 3445 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 310:
-#line 3442 "Gmsh.y"
+#line 3446 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 311:
-#line 3443 "Gmsh.y"
+#line 3447 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 312:
-#line 3444 "Gmsh.y"
+#line 3448 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 313:
-#line 3453 "Gmsh.y"
+#line 3457 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 314:
-#line 3454 "Gmsh.y"
+#line 3458 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 315:
-#line 3455 "Gmsh.y"
+#line 3459 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 316:
-#line 3456 "Gmsh.y"
+#line 3460 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 317:
-#line 3457 "Gmsh.y"
+#line 3461 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 318:
-#line 3458 "Gmsh.y"
+#line 3462 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 319:
-#line 3459 "Gmsh.y"
+#line 3463 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 320:
-#line 3464 "Gmsh.y"
+#line 3468 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -7943,7 +7947,7 @@ yyreduce:
     break;
 
   case 321:
-#line 3477 "Gmsh.y"
+#line 3481 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -7958,7 +7962,7 @@ yyreduce:
     break;
 
   case 322:
-#line 3489 "Gmsh.y"
+#line 3493 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -7976,7 +7980,7 @@ yyreduce:
     break;
 
   case 323:
-#line 3504 "Gmsh.y"
+#line 3508 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -7989,7 +7993,7 @@ yyreduce:
     break;
 
   case 324:
-#line 3514 "Gmsh.y"
+#line 3518 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -8002,7 +8006,7 @@ yyreduce:
     break;
 
   case 325:
-#line 3524 "Gmsh.y"
+#line 3528 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -8020,7 +8024,7 @@ yyreduce:
     break;
 
   case 326:
-#line 3542 "Gmsh.y"
+#line 3546 "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));
@@ -8028,7 +8032,7 @@ yyreduce:
     break;
 
   case 327:
-#line 3547 "Gmsh.y"
+#line 3551 "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));
@@ -8036,7 +8040,7 @@ yyreduce:
     break;
 
   case 328:
-#line 3552 "Gmsh.y"
+#line 3556 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -8049,7 +8053,7 @@ yyreduce:
     break;
 
   case 329:
-#line 3562 "Gmsh.y"
+#line 3566 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -8062,7 +8066,7 @@ yyreduce:
     break;
 
   case 330:
-#line 3572 "Gmsh.y"
+#line 3576 "Gmsh.y"
     { 
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -8070,70 +8074,70 @@ yyreduce:
     break;
 
   case 331:
-#line 3580 "Gmsh.y"
+#line 3584 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 332:
-#line 3584 "Gmsh.y"
+#line 3588 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 333:
-#line 3588 "Gmsh.y"
+#line 3592 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 334:
-#line 3592 "Gmsh.y"
+#line 3596 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 335:
-#line 3596 "Gmsh.y"
+#line 3600 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 336:
-#line 3603 "Gmsh.y"
+#line 3607 "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 337:
-#line 3607 "Gmsh.y"
+#line 3611 "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 338:
-#line 3611 "Gmsh.y"
+#line 3615 "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 339:
-#line 3615 "Gmsh.y"
+#line 3619 "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 340:
-#line 3622 "Gmsh.y"
+#line 3626 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -8141,14 +8145,14 @@ yyreduce:
     break;
 
   case 341:
-#line 3627 "Gmsh.y"
+#line 3631 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 342:
-#line 3634 "Gmsh.y"
+#line 3638 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8156,14 +8160,14 @@ yyreduce:
     break;
 
   case 343:
-#line 3639 "Gmsh.y"
+#line 3643 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 344:
-#line 3643 "Gmsh.y"
+#line 3647 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -8171,14 +8175,14 @@ yyreduce:
     break;
 
   case 345:
-#line 3648 "Gmsh.y"
+#line 3652 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 346:
-#line 3652 "Gmsh.y"
+#line 3656 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8189,7 +8193,7 @@ yyreduce:
     break;
 
   case 347:
-#line 3660 "Gmsh.y"
+#line 3664 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8200,14 +8204,14 @@ yyreduce:
     break;
 
   case 348:
-#line 3671 "Gmsh.y"
+#line 3675 "Gmsh.y"
     { 
       (yyval.l) = (yyvsp[(1) - (1)].l); 
     ;}
     break;
 
   case 349:
-#line 3675 "Gmsh.y"
+#line 3679 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -8219,7 +8223,7 @@ yyreduce:
     break;
 
   case 350:
-#line 3687 "Gmsh.y"
+#line 3691 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8230,7 +8234,7 @@ yyreduce:
     break;
 
   case 351:
-#line 3695 "Gmsh.y"
+#line 3699 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8241,7 +8245,7 @@ yyreduce:
     break;
 
   case 352:
-#line 3703 "Gmsh.y"
+#line 3707 "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)); 
@@ -8251,7 +8255,7 @@ yyreduce:
     break;
 
   case 353:
-#line 3710 "Gmsh.y"
+#line 3714 "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)){
@@ -8265,7 +8269,7 @@ yyreduce:
     break;
 
   case 354:
-#line 3721 "Gmsh.y"
+#line 3725 "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
@@ -8288,7 +8292,7 @@ yyreduce:
     break;
 
   case 355:
-#line 3741 "Gmsh.y"
+#line 3745 "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++){
@@ -8301,7 +8305,7 @@ yyreduce:
     break;
 
   case 356:
-#line 3751 "Gmsh.y"
+#line 3755 "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++){
@@ -8314,7 +8318,7 @@ yyreduce:
     break;
 
   case 357:
-#line 3761 "Gmsh.y"
+#line 3765 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -8327,7 +8331,7 @@ yyreduce:
     break;
 
   case 358:
-#line 3771 "Gmsh.y"
+#line 3775 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -8347,7 +8351,7 @@ yyreduce:
     break;
 
   case 359:
-#line 3791 "Gmsh.y"
+#line 3795 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8355,21 +8359,21 @@ yyreduce:
     break;
 
   case 360:
-#line 3796 "Gmsh.y"
+#line 3800 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 361:
-#line 3800 "Gmsh.y"
+#line 3804 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 362:
-#line 3804 "Gmsh.y"
+#line 3808 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -8381,21 +8385,21 @@ yyreduce:
     break;
 
   case 363:
-#line 3816 "Gmsh.y"
+#line 3820 "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 364:
-#line 3820 "Gmsh.y"
+#line 3824 "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 365:
-#line 3832 "Gmsh.y"
+#line 3836 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -8405,7 +8409,7 @@ yyreduce:
     break;
 
   case 366:
-#line 3839 "Gmsh.y"
+#line 3843 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -8415,14 +8419,14 @@ yyreduce:
     break;
 
   case 367:
-#line 3849 "Gmsh.y"
+#line 3853 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 368:
-#line 3853 "Gmsh.y"
+#line 3857 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -8437,7 +8441,7 @@ yyreduce:
     break;
 
   case 369:
-#line 3868 "Gmsh.y"
+#line 3872 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -8445,21 +8449,21 @@ yyreduce:
     break;
 
   case 370:
-#line 3873 "Gmsh.y"
+#line 3877 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 371:
-#line 3880 "Gmsh.y"
+#line 3884 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 372:
-#line 3884 "Gmsh.y"
+#line 3888 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -8475,7 +8479,7 @@ yyreduce:
     break;
 
   case 373:
-#line 3897 "Gmsh.y"
+#line 3901 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -8486,7 +8490,7 @@ yyreduce:
     break;
 
   case 374:
-#line 3905 "Gmsh.y"
+#line 3909 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -8497,14 +8501,14 @@ yyreduce:
     break;
 
   case 375:
-#line 3916 "Gmsh.y"
+#line 3920 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 376:
-#line 3920 "Gmsh.y"
+#line 3924 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -8515,7 +8519,7 @@ yyreduce:
     break;
 
   case 377:
-#line 3928 "Gmsh.y"
+#line 3932 "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));
@@ -8526,7 +8530,7 @@ yyreduce:
     break;
 
   case 378:
-#line 3936 "Gmsh.y"
+#line 3940 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -8543,7 +8547,7 @@ yyreduce:
     break;
 
   case 379:
-#line 3950 "Gmsh.y"
+#line 3954 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -8560,14 +8564,14 @@ yyreduce:
     break;
 
   case 380:
-#line 3964 "Gmsh.y"
+#line 3968 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 381:
-#line 3968 "Gmsh.y"
+#line 3972 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -8590,7 +8594,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 8594 "Gmsh.tab.cpp"
+#line 8598 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -8804,7 +8808,7 @@ yyreturn:
 }
 
 
-#line 3988 "Gmsh.y"
+#line 3992 "Gmsh.y"
 
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index c549d60f8d4c15794973eded5e94906b3be57768..46b25cfb0b8d3435aa47fd3ff3384884ec620c76 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -2165,6 +2165,10 @@ Delete :
       else if(!strcmp($2, "Variables")){
 	gmsh_yysymbols.clear();
       }
+      else if(!strcmp($2, "Options")){
+        ReInitOptions(0);
+        InitOptionsGUI(0);
+      }
       else{
 	if(gmsh_yysymbols.count($2))
 	  gmsh_yysymbols.erase($2);