diff --git a/Geo/gmshLevelset.h b/Geo/gmshLevelset.h
index 6dfa9987609de0c566eee8a44f6e1ec227180906..cea8a8daf7484cab80ee80eadda468e45f5492c5 100644
--- a/Geo/gmshLevelset.h
+++ b/Geo/gmshLevelset.h
@@ -14,8 +14,6 @@
 
 #include "DILevelset.h"
 #include "mathEvaluator.h"
-#include "PView.h"
-#include "OctreePost.h"
 
 class gLevelsetMathEval: public gLevelsetPrimitive
 {
@@ -43,6 +41,11 @@ public:
   int type() const { return UNKNOWN; }
 };
 
+#if !defined(HAVE_NO_POST)
+
+#include "PView.h"
+#include "OctreePost.h"
+
 class gLevelsetPostView : public gLevelsetPrimitive
 {
   int _viewIndex;
@@ -73,3 +76,5 @@ public:
 #endif
 
 #endif
+
+#endif
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index 4ca57325fcb395cc180d8e1350f7eea736a92987..8f1d548c7db6b2d362ceda97b9ed0fcdb6aaf809 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -1013,30 +1013,30 @@ static const yytype_uint16 yyrline[] =
     1336,  1342,  1348,  1355,  1380,  1405,  1422,  1421,  1441,  1458,
     1486,  1503,  1523,  1541,  1559,  1574,  1573,  1599,  1604,  1609,
     1614,  1619,  1639,  1645,  1656,  1657,  1662,  1665,  1669,  1692,
-    1715,  1738,  1766,  1787,  1808,  1830,  1850,  1944,  1963,  1977,
-    2086,  2095,  2099,  2114,  2141,  2158,  2172,  2178,  2184,  2193,
-    2207,  2255,  2273,  2288,  2307,  2319,  2343,  2347,  2354,  2360,
-    2365,  2371,  2380,  2397,  2414,  2433,  2452,  2480,  2488,  2494,
-    2501,  2505,  2514,  2522,  2530,  2539,  2538,  2551,  2550,  2563,
-    2562,  2575,  2574,  2587,  2594,  2601,  2608,  2615,  2622,  2629,
-    2636,  2643,  2651,  2650,  2662,  2661,  2673,  2672,  2684,  2683,
-    2695,  2694,  2706,  2705,  2717,  2716,  2728,  2727,  2739,  2738,
-    2753,  2756,  2762,  2771,  2791,  2814,  2818,  2842,  2845,  2861,
-    2864,  2877,  2880,  2886,  2889,  2896,  2952,  3022,  3027,  3094,
-    3137,  3163,  3186,  3209,  3212,  3221,  3225,  3241,  3242,  3243,
-    3244,  3245,  3246,  3247,  3248,  3249,  3256,  3257,  3258,  3259,
-    3260,  3261,  3262,  3263,  3264,  3265,  3266,  3267,  3268,  3269,
-    3270,  3271,  3272,  3273,  3274,  3275,  3276,  3277,  3278,  3279,
-    3280,  3281,  3282,  3283,  3284,  3285,  3286,  3287,  3289,  3290,
-    3291,  3292,  3293,  3294,  3295,  3296,  3297,  3298,  3299,  3300,
-    3301,  3302,  3303,  3304,  3305,  3306,  3307,  3308,  3309,  3318,
-    3319,  3320,  3321,  3322,  3323,  3324,  3328,  3341,  3353,  3368,
-    3378,  3388,  3406,  3411,  3416,  3426,  3436,  3444,  3448,  3452,
-    3456,  3460,  3467,  3471,  3475,  3479,  3486,  3491,  3498,  3503,
-    3507,  3512,  3516,  3524,  3535,  3539,  3551,  3559,  3567,  3574,
-    3585,  3605,  3615,  3625,  3635,  3655,  3660,  3664,  3668,  3680,
-    3684,  3696,  3703,  3713,  3717,  3732,  3737,  3744,  3748,  3761,
-    3769,  3780,  3784,  3792,  3800,  3814,  3828,  3832
+    1715,  1738,  1766,  1787,  1808,  1830,  1850,  1946,  1965,  1979,
+    2088,  2097,  2101,  2116,  2143,  2160,  2174,  2180,  2186,  2195,
+    2209,  2257,  2275,  2290,  2309,  2321,  2345,  2349,  2356,  2362,
+    2367,  2373,  2382,  2399,  2416,  2435,  2454,  2482,  2490,  2496,
+    2503,  2507,  2516,  2524,  2532,  2541,  2540,  2553,  2552,  2565,
+    2564,  2577,  2576,  2589,  2596,  2603,  2610,  2617,  2624,  2631,
+    2638,  2645,  2653,  2652,  2664,  2663,  2675,  2674,  2686,  2685,
+    2697,  2696,  2708,  2707,  2719,  2718,  2730,  2729,  2741,  2740,
+    2755,  2758,  2764,  2773,  2793,  2816,  2820,  2844,  2847,  2863,
+    2866,  2879,  2882,  2888,  2891,  2898,  2954,  3024,  3029,  3096,
+    3139,  3165,  3188,  3211,  3214,  3223,  3227,  3243,  3244,  3245,
+    3246,  3247,  3248,  3249,  3250,  3251,  3258,  3259,  3260,  3261,
+    3262,  3263,  3264,  3265,  3266,  3267,  3268,  3269,  3270,  3271,
+    3272,  3273,  3274,  3275,  3276,  3277,  3278,  3279,  3280,  3281,
+    3282,  3283,  3284,  3285,  3286,  3287,  3288,  3289,  3291,  3292,
+    3293,  3294,  3295,  3296,  3297,  3298,  3299,  3300,  3301,  3302,
+    3303,  3304,  3305,  3306,  3307,  3308,  3309,  3310,  3311,  3320,
+    3321,  3322,  3323,  3324,  3325,  3326,  3330,  3343,  3355,  3370,
+    3380,  3390,  3408,  3413,  3418,  3428,  3438,  3446,  3450,  3454,
+    3458,  3462,  3469,  3473,  3477,  3481,  3488,  3493,  3500,  3505,
+    3509,  3514,  3518,  3526,  3537,  3541,  3553,  3561,  3569,  3576,
+    3587,  3607,  3617,  3627,  3637,  3657,  3662,  3666,  3670,  3682,
+    3686,  3698,  3705,  3715,  3719,  3734,  3739,  3746,  3750,  3763,
+    3771,  3782,  3786,  3794,  3802,  3816,  3830,  3834
 };
 #endif
 
@@ -5927,6 +5927,7 @@ yyreduce:
           Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
         }
       }
+#if !defined(HAVE_NO_POST)
       else if(!strcmp((yyvsp[(2) - (8)].c), "PostView")){
         int t = (int)(yyvsp[(4) - (8)].d);
         if(FindLevelSet(t)){
@@ -5941,6 +5942,7 @@ yyreduce:
           }
         }
       }
+#endif
       else
         yymsg(0, "Wrong levelset definition (%d)", (yyvsp[(4) - (8)].d));
       Free((yyvsp[(2) - (8)].c));
@@ -5949,7 +5951,7 @@ yyreduce:
     break;
 
   case 147:
-#line 1945 "Gmsh.y"
+#line 1947 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (8)].c), "MathEval")){
@@ -5971,7 +5973,7 @@ yyreduce:
     break;
 
   case 148:
-#line 1964 "Gmsh.y"
+#line 1966 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (6)].c), "CutMesh")){
@@ -5988,7 +5990,7 @@ yyreduce:
     break;
 
   case 149:
-#line 1979 "Gmsh.y"
+#line 1981 "Gmsh.y"
     {
 #if defined(HAVE_DINTEGRATION)
       if(!strcmp((yyvsp[(2) - (14)].c), "Cylinder") && List_Nbr((yyvsp[(12) - (14)].l)) == 1){
@@ -6094,7 +6096,7 @@ yyreduce:
     break;
 
   case 150:
-#line 2087 "Gmsh.y"
+#line 2089 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -6106,14 +6108,14 @@ yyreduce:
     break;
 
   case 151:
-#line 2096 "Gmsh.y"
+#line 2098 "Gmsh.y"
     {
       GModel::current()->getFields()->deleteField((int)(yyvsp[(4) - (6)].d));
     ;}
     break;
 
   case 152:
-#line 2100 "Gmsh.y"
+#line 2102 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (6)].c), "View")){
@@ -6131,7 +6133,7 @@ yyreduce:
     break;
 
   case 153:
-#line 2115 "Gmsh.y"
+#line 2117 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Meshes") || !strcmp((yyvsp[(2) - (3)].c), "All")){
         for(unsigned int i = 0; i < GModel::list.size(); i++){
@@ -6161,7 +6163,7 @@ yyreduce:
     break;
 
   case 154:
-#line 2142 "Gmsh.y"
+#line 2144 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (4)].c), "Empty") && !strcmp((yyvsp[(3) - (4)].c), "Views")){
@@ -6176,7 +6178,7 @@ yyreduce:
     break;
 
   case 155:
-#line 2159 "Gmsh.y"
+#line 2161 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(4) - (5)].l)); i++){
 	Shape TheShape;
@@ -6188,7 +6190,7 @@ yyreduce:
     break;
 
   case 156:
-#line 2173 "Gmsh.y"
+#line 2175 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 1);
@@ -6197,7 +6199,7 @@ yyreduce:
     break;
 
   case 157:
-#line 2179 "Gmsh.y"
+#line 2181 "Gmsh.y"
     {
       for(int i = 0; i < 4; i++)
 	VisibilityShape((yyvsp[(2) - (3)].c), i, 0);
@@ -6206,7 +6208,7 @@ yyreduce:
     break;
 
   case 158:
-#line 2185 "Gmsh.y"
+#line 2187 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -6218,7 +6220,7 @@ yyreduce:
     break;
 
   case 159:
-#line 2194 "Gmsh.y"
+#line 2196 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (4)].l)); i++){
 	Shape TheShape;
@@ -6230,7 +6232,7 @@ yyreduce:
     break;
 
   case 160:
-#line 2208 "Gmsh.y"
+#line 2210 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Include")){
 	char tmpstring[1024];
@@ -6281,7 +6283,7 @@ yyreduce:
     break;
 
   case 161:
-#line 2256 "Gmsh.y"
+#line 2258 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Save") && !strcmp((yyvsp[(2) - (7)].c), "View")){
@@ -6302,7 +6304,7 @@ yyreduce:
     break;
 
   case 162:
-#line 2274 "Gmsh.y"
+#line 2276 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(1) - (7)].c), "Background") && !strcmp((yyvsp[(2) - (7)].c), "Mesh")  && !strcmp((yyvsp[(3) - (7)].c), "View")){
@@ -6320,7 +6322,7 @@ yyreduce:
     break;
 
   case 163:
-#line 2289 "Gmsh.y"
+#line 2291 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (3)].c), "Sleep")){
 	SleepInSeconds((yyvsp[(2) - (3)].d));
@@ -6342,7 +6344,7 @@ yyreduce:
     break;
 
   case 164:
-#line 2308 "Gmsh.y"
+#line 2310 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
        try {
@@ -6357,7 +6359,7 @@ yyreduce:
     break;
 
   case 165:
-#line 2320 "Gmsh.y"
+#line 2322 "Gmsh.y"
     {
 #if !defined(HAVE_NO_POST)
       if(!strcmp((yyvsp[(2) - (3)].c), "ElementsFromAllViews"))
@@ -6384,14 +6386,14 @@ yyreduce:
     break;
 
   case 166:
-#line 2344 "Gmsh.y"
+#line 2346 "Gmsh.y"
     {
       exit(0);
     ;}
     break;
 
   case 167:
-#line 2348 "Gmsh.y"
+#line 2350 "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 
@@ -6401,7 +6403,7 @@ yyreduce:
     break;
 
   case 168:
-#line 2355 "Gmsh.y"
+#line 2357 "Gmsh.y"
     {
       CTX::instance()->forcedBBox = 0;
       GModel::current()->importGEOInternals();
@@ -6410,7 +6412,7 @@ yyreduce:
     break;
 
   case 169:
-#line 2361 "Gmsh.y"
+#line 2363 "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));
@@ -6418,7 +6420,7 @@ yyreduce:
     break;
 
   case 170:
-#line 2366 "Gmsh.y"
+#line 2368 "Gmsh.y"
     {
 #if defined(HAVE_FLTK)
       drawContext::global()->draw();
@@ -6427,14 +6429,14 @@ yyreduce:
     break;
 
   case 171:
-#line 2372 "Gmsh.y"
+#line 2374 "Gmsh.y"
     {
        GModel::current()->createTopologyFromMesh();
     ;}
     break;
 
   case 172:
-#line 2381 "Gmsh.y"
+#line 2383 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (6)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (6)].d);
@@ -6454,7 +6456,7 @@ yyreduce:
     break;
 
   case 173:
-#line 2398 "Gmsh.y"
+#line 2400 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(3) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(5) - (8)].d);
@@ -6474,7 +6476,7 @@ yyreduce:
     break;
 
   case 174:
-#line 2415 "Gmsh.y"
+#line 2417 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (8)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (8)].d);
@@ -6496,7 +6498,7 @@ yyreduce:
     break;
 
   case 175:
-#line 2434 "Gmsh.y"
+#line 2436 "Gmsh.y"
     {
       LoopControlVariablesTab[ImbricatedLoop][0] = (yyvsp[(5) - (10)].d);
       LoopControlVariablesTab[ImbricatedLoop][1] = (yyvsp[(7) - (10)].d);
@@ -6518,7 +6520,7 @@ yyreduce:
     break;
 
   case 176:
-#line 2453 "Gmsh.y"
+#line 2455 "Gmsh.y"
     {
       if(ImbricatedLoop <= 0){
 	yymsg(0, "Invalid For/EndFor loop");
@@ -6549,7 +6551,7 @@ yyreduce:
     break;
 
   case 177:
-#line 2481 "Gmsh.y"
+#line 2483 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->createFunction
          ((yyvsp[(2) - (2)].c), gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -6560,7 +6562,7 @@ yyreduce:
     break;
 
   case 178:
-#line 2489 "Gmsh.y"
+#line 2491 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->leaveFunction
          (&gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -6569,7 +6571,7 @@ yyreduce:
     break;
 
   case 179:
-#line 2495 "Gmsh.y"
+#line 2497 "Gmsh.y"
     {
       if(!FunctionManager::Instance()->enterFunction
          ((yyvsp[(2) - (3)].c), &gmsh_yyin, gmsh_yyname, gmsh_yylineno))
@@ -6579,20 +6581,20 @@ yyreduce:
     break;
 
   case 180:
-#line 2502 "Gmsh.y"
+#line 2504 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (4)].d)) skip_until("If", "EndIf");
     ;}
     break;
 
   case 181:
-#line 2506 "Gmsh.y"
+#line 2508 "Gmsh.y"
     {
     ;}
     break;
 
   case 182:
-#line 2515 "Gmsh.y"
+#line 2517 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (5)].l), 
@@ -6603,7 +6605,7 @@ yyreduce:
     break;
 
   case 183:
-#line 2523 "Gmsh.y"
+#line 2525 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (11)].l), 
@@ -6614,7 +6616,7 @@ yyreduce:
     break;
 
   case 184:
-#line 2531 "Gmsh.y"
+#line 2533 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (13)].l), 
@@ -6625,14 +6627,14 @@ yyreduce:
     break;
 
   case 185:
-#line 2539 "Gmsh.y"
+#line 2541 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 186:
-#line 2543 "Gmsh.y"
+#line 2545 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE, (yyvsp[(4) - (7)].l), 
@@ -6643,14 +6645,14 @@ yyreduce:
     break;
 
   case 187:
-#line 2551 "Gmsh.y"
+#line 2553 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 188:
-#line 2555 "Gmsh.y"
+#line 2557 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(ROTATE, (yyvsp[(10) - (13)].l), 
@@ -6661,14 +6663,14 @@ yyreduce:
     break;
 
   case 189:
-#line 2563 "Gmsh.y"
+#line 2565 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 190:
-#line 2567 "Gmsh.y"
+#line 2569 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShapes(TRANSLATE_ROTATE, (yyvsp[(12) - (15)].l), 
@@ -6679,14 +6681,14 @@ yyreduce:
     break;
 
   case 191:
-#line 2575 "Gmsh.y"
+#line 2577 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 192:
-#line 2579 "Gmsh.y"
+#line 2581 "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.,
@@ -6696,7 +6698,7 @@ yyreduce:
     break;
 
   case 193:
-#line 2588 "Gmsh.y"
+#line 2590 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (8)].d), 
@@ -6706,7 +6708,7 @@ yyreduce:
     break;
 
   case 194:
-#line 2595 "Gmsh.y"
+#line 2597 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (8)].d), 
@@ -6716,7 +6718,7 @@ yyreduce:
     break;
 
   case 195:
-#line 2602 "Gmsh.y"
+#line 2604 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (8)].d), 
@@ -6726,7 +6728,7 @@ yyreduce:
     break;
 
   case 196:
-#line 2609 "Gmsh.y"
+#line 2611 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6736,7 +6738,7 @@ yyreduce:
     break;
 
   case 197:
-#line 2616 "Gmsh.y"
+#line 2618 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6746,7 +6748,7 @@ yyreduce:
     break;
 
   case 198:
-#line 2623 "Gmsh.y"
+#line 2625 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6756,7 +6758,7 @@ yyreduce:
     break;
 
   case 199:
-#line 2630 "Gmsh.y"
+#line 2632 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (14)].d), 
@@ -6766,7 +6768,7 @@ yyreduce:
     break;
 
   case 200:
-#line 2637 "Gmsh.y"
+#line 2639 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (14)].d), 
@@ -6776,7 +6778,7 @@ yyreduce:
     break;
 
   case 201:
-#line 2644 "Gmsh.y"
+#line 2646 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (14)].d), 
@@ -6786,14 +6788,14 @@ yyreduce:
     break;
 
   case 202:
-#line 2651 "Gmsh.y"
+#line 2653 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 203:
-#line 2655 "Gmsh.y"
+#line 2657 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_POINT, (int)(yyvsp[(4) - (12)].d), 
@@ -6803,14 +6805,14 @@ yyreduce:
     break;
 
   case 204:
-#line 2662 "Gmsh.y"
+#line 2664 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 205:
-#line 2666 "Gmsh.y"
+#line 2668 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (12)].d), 
@@ -6820,14 +6822,14 @@ yyreduce:
     break;
 
   case 206:
-#line 2673 "Gmsh.y"
+#line 2675 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 207:
-#line 2677 "Gmsh.y"
+#line 2679 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (12)].d), 
@@ -6837,14 +6839,14 @@ yyreduce:
     break;
 
   case 208:
-#line 2684 "Gmsh.y"
+#line 2686 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 209:
-#line 2688 "Gmsh.y"
+#line 2690 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_POINT, (int)(yyvsp[(4) - (16)].d), 
@@ -6854,14 +6856,14 @@ yyreduce:
     break;
 
   case 210:
-#line 2695 "Gmsh.y"
+#line 2697 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 211:
-#line 2699 "Gmsh.y"
+#line 2701 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (16)].d), 
@@ -6871,14 +6873,14 @@ yyreduce:
     break;
 
   case 212:
-#line 2706 "Gmsh.y"
+#line 2708 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 213:
-#line 2710 "Gmsh.y"
+#line 2712 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (16)].d), 
@@ -6888,14 +6890,14 @@ yyreduce:
     break;
 
   case 214:
-#line 2717 "Gmsh.y"
+#line 2719 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 215:
-#line 2721 "Gmsh.y"
+#line 2723 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_POINT, (int)(yyvsp[(4) - (18)].d), 
@@ -6905,14 +6907,14 @@ yyreduce:
     break;
 
   case 216:
-#line 2728 "Gmsh.y"
+#line 2730 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 217:
-#line 2732 "Gmsh.y"
+#line 2734 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SEGM_LINE, (int)(yyvsp[(4) - (18)].d), 
@@ -6922,14 +6924,14 @@ yyreduce:
     break;
 
   case 218:
-#line 2739 "Gmsh.y"
+#line 2741 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = extr.mesh.Recombine = false;
     ;}
     break;
 
   case 219:
-#line 2743 "Gmsh.y"
+#line 2745 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(Shape));
       ExtrudeShape(TRANSLATE_ROTATE, MSH_SURF_PLAN, (int)(yyvsp[(4) - (18)].d), 
@@ -6939,19 +6941,19 @@ yyreduce:
     break;
 
   case 220:
-#line 2754 "Gmsh.y"
+#line 2756 "Gmsh.y"
     {
     ;}
     break;
 
   case 221:
-#line 2757 "Gmsh.y"
+#line 2759 "Gmsh.y"
     {
     ;}
     break;
 
   case 222:
-#line 2763 "Gmsh.y"
+#line 2765 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = 1;
@@ -6963,7 +6965,7 @@ yyreduce:
     break;
 
   case 223:
-#line 2772 "Gmsh.y"
+#line 2774 "Gmsh.y"
     {
       extr.mesh.ExtrudeMesh = true;
       extr.mesh.NbLayer = List_Nbr((yyvsp[(3) - (7)].l));
@@ -6986,7 +6988,7 @@ yyreduce:
     break;
 
   case 224:
-#line 2792 "Gmsh.y"
+#line 2794 "Gmsh.y"
     {
       yymsg(0, "Explicit region numbers in layers are deprecated");
       extr.mesh.ExtrudeMesh = true;
@@ -7012,14 +7014,14 @@ yyreduce:
     break;
 
   case 225:
-#line 2815 "Gmsh.y"
+#line 2817 "Gmsh.y"
     {
       extr.mesh.Recombine = true;
     ;}
     break;
 
   case 226:
-#line 2819 "Gmsh.y"
+#line 2821 "Gmsh.y"
     {
       int num = (int)(yyvsp[(3) - (9)].d);
       if(FindSurface(num)){
@@ -7041,14 +7043,14 @@ yyreduce:
     break;
 
   case 227:
-#line 2842 "Gmsh.y"
+#line 2844 "Gmsh.y"
     {
       (yyval.v)[0] = (yyval.v)[1] = 1.;
     ;}
     break;
 
   case 228:
-#line 2846 "Gmsh.y"
+#line 2848 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(2) - (3)].c), "Progression") || !strcmp((yyvsp[(2) - (3)].c), "Power"))
         (yyval.v)[0] = 1.;
@@ -7064,14 +7066,14 @@ yyreduce:
     break;
 
   case 229:
-#line 2861 "Gmsh.y"
+#line 2863 "Gmsh.y"
     {
       (yyval.i) = -1; // left
     ;}
     break;
 
   case 230:
-#line 2865 "Gmsh.y"
+#line 2867 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "Right"))
         (yyval.i) = 1;
@@ -7084,35 +7086,35 @@ yyreduce:
     break;
 
   case 231:
-#line 2877 "Gmsh.y"
+#line 2879 "Gmsh.y"
     {
      (yyval.l) = List_Create(1, 1, sizeof(double));
    ;}
     break;
 
   case 232:
-#line 2881 "Gmsh.y"
+#line 2883 "Gmsh.y"
     {
      (yyval.l) = (yyvsp[(2) - (2)].l);
    ;}
     break;
 
   case 233:
-#line 2886 "Gmsh.y"
+#line 2888 "Gmsh.y"
     {
       (yyval.i) = 45;
     ;}
     break;
 
   case 234:
-#line 2890 "Gmsh.y"
+#line 2892 "Gmsh.y"
     {
       (yyval.i) = (int)(yyvsp[(2) - (2)].d);
     ;}
     break;
 
   case 235:
-#line 2897 "Gmsh.y"
+#line 2899 "Gmsh.y"
     {
       int type = (int)(yyvsp[(6) - (7)].v)[0];
       double coef = fabs((yyvsp[(6) - (7)].v)[1]);
@@ -7171,7 +7173,7 @@ yyreduce:
     break;
 
   case 236:
-#line 2953 "Gmsh.y"
+#line 2955 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (6)].l));
       if(k != 0 && k != 3 && k != 4){
@@ -7244,7 +7246,7 @@ yyreduce:
     break;
 
   case 237:
-#line 3023 "Gmsh.y"
+#line 3025 "Gmsh.y"
     {
       yymsg(1, "Elliptic Surface is deprecated: use Transfinite instead (with smoothing)");
       List_Delete((yyvsp[(7) - (8)].l));
@@ -7252,7 +7254,7 @@ yyreduce:
     break;
 
   case 238:
-#line 3028 "Gmsh.y"
+#line 3030 "Gmsh.y"
     {
       int k = List_Nbr((yyvsp[(4) - (5)].l));
       if(k != 0 && k != 6 && k != 8){
@@ -7322,7 +7324,7 @@ yyreduce:
     break;
 
   case 239:
-#line 3095 "Gmsh.y"
+#line 3097 "Gmsh.y"
     {
       if(!(yyvsp[(3) - (5)].l)){
 	List_T *tmp = Tree2List(GModel::current()->getGEOInternals()->Surfaces);
@@ -7368,7 +7370,7 @@ yyreduce:
     break;
 
   case 240:
-#line 3138 "Gmsh.y"
+#line 3140 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (6)].l)); i++){
 	double d;
@@ -7391,7 +7393,7 @@ yyreduce:
     break;
 
   case 241:
-#line 3164 "Gmsh.y"
+#line 3166 "Gmsh.y"
     { 
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -7417,7 +7419,7 @@ yyreduce:
     break;
 
   case 242:
-#line 3187 "Gmsh.y"
+#line 3189 "Gmsh.y"
     {
       Surface *s = FindSurface((int)(yyvsp[(8) - (10)].d));
       if(s){
@@ -7443,26 +7445,26 @@ yyreduce:
     break;
 
   case 243:
-#line 3210 "Gmsh.y"
+#line 3212 "Gmsh.y"
     {
     ;}
     break;
 
   case 244:
-#line 3213 "Gmsh.y"
+#line 3215 "Gmsh.y"
     {
     ;}
     break;
 
   case 245:
-#line 3222 "Gmsh.y"
+#line 3224 "Gmsh.y"
     { 
       ReplaceAllDuplicates();
     ;}
     break;
 
   case 246:
-#line 3226 "Gmsh.y"
+#line 3228 "Gmsh.y"
     { 
       if(!strcmp((yyvsp[(2) - (3)].c), "Geometry"))
         ReplaceAllDuplicates();
@@ -7475,47 +7477,47 @@ yyreduce:
     break;
 
   case 247:
-#line 3241 "Gmsh.y"
+#line 3243 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d);           ;}
     break;
 
   case 248:
-#line 3242 "Gmsh.y"
+#line 3244 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (3)].d);           ;}
     break;
 
   case 249:
-#line 3243 "Gmsh.y"
+#line 3245 "Gmsh.y"
     { (yyval.d) = -(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 250:
-#line 3244 "Gmsh.y"
+#line 3246 "Gmsh.y"
     { (yyval.d) = (yyvsp[(2) - (2)].d);           ;}
     break;
 
   case 251:
-#line 3245 "Gmsh.y"
+#line 3247 "Gmsh.y"
     { (yyval.d) = !(yyvsp[(2) - (2)].d);          ;}
     break;
 
   case 252:
-#line 3246 "Gmsh.y"
+#line 3248 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) - (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 253:
-#line 3247 "Gmsh.y"
+#line 3249 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) + (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 254:
-#line 3248 "Gmsh.y"
+#line 3250 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) * (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 255:
-#line 3250 "Gmsh.y"
+#line 3252 "Gmsh.y"
     { 
       if(!(yyvsp[(3) - (3)].d))
 	yymsg(0, "Division by zero in '%g / %g'", (yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));
@@ -7525,307 +7527,307 @@ yyreduce:
     break;
 
   case 256:
-#line 3256 "Gmsh.y"
+#line 3258 "Gmsh.y"
     { (yyval.d) = (int)(yyvsp[(1) - (3)].d) % (int)(yyvsp[(3) - (3)].d);  ;}
     break;
 
   case 257:
-#line 3257 "Gmsh.y"
+#line 3259 "Gmsh.y"
     { (yyval.d) = pow((yyvsp[(1) - (3)].d), (yyvsp[(3) - (3)].d));  ;}
     break;
 
   case 258:
-#line 3258 "Gmsh.y"
+#line 3260 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) < (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 259:
-#line 3259 "Gmsh.y"
+#line 3261 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) > (yyvsp[(3) - (3)].d);      ;}
     break;
 
   case 260:
-#line 3260 "Gmsh.y"
+#line 3262 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) <= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 261:
-#line 3261 "Gmsh.y"
+#line 3263 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) >= (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 262:
-#line 3262 "Gmsh.y"
+#line 3264 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) == (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 263:
-#line 3263 "Gmsh.y"
+#line 3265 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) != (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 264:
-#line 3264 "Gmsh.y"
+#line 3266 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) && (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 265:
-#line 3265 "Gmsh.y"
+#line 3267 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (3)].d) || (yyvsp[(3) - (3)].d);     ;}
     break;
 
   case 266:
-#line 3266 "Gmsh.y"
+#line 3268 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (5)].d) ? (yyvsp[(3) - (5)].d) : (yyvsp[(5) - (5)].d); ;}
     break;
 
   case 267:
-#line 3267 "Gmsh.y"
+#line 3269 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 268:
-#line 3268 "Gmsh.y"
+#line 3270 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 269:
-#line 3269 "Gmsh.y"
+#line 3271 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 270:
-#line 3270 "Gmsh.y"
+#line 3272 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 271:
-#line 3271 "Gmsh.y"
+#line 3273 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 272:
-#line 3272 "Gmsh.y"
+#line 3274 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 273:
-#line 3273 "Gmsh.y"
+#line 3275 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 274:
-#line 3274 "Gmsh.y"
+#line 3276 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 275:
-#line 3275 "Gmsh.y"
+#line 3277 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 276:
-#line 3276 "Gmsh.y"
+#line 3278 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 277:
-#line 3277 "Gmsh.y"
+#line 3279 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 278:
-#line 3278 "Gmsh.y"
+#line 3280 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 279:
-#line 3279 "Gmsh.y"
+#line 3281 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 280:
-#line 3280 "Gmsh.y"
+#line 3282 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 281:
-#line 3281 "Gmsh.y"
+#line 3283 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 282:
-#line 3282 "Gmsh.y"
+#line 3284 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 283:
-#line 3283 "Gmsh.y"
+#line 3285 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 284:
-#line 3284 "Gmsh.y"
+#line 3286 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 285:
-#line 3285 "Gmsh.y"
+#line 3287 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 286:
-#line 3286 "Gmsh.y"
+#line 3288 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 287:
-#line 3287 "Gmsh.y"
+#line 3289 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 288:
-#line 3289 "Gmsh.y"
+#line 3291 "Gmsh.y"
     { (yyval.d) = exp((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 289:
-#line 3290 "Gmsh.y"
+#line 3292 "Gmsh.y"
     { (yyval.d) = log((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 290:
-#line 3291 "Gmsh.y"
+#line 3293 "Gmsh.y"
     { (yyval.d) = log10((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 291:
-#line 3292 "Gmsh.y"
+#line 3294 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 292:
-#line 3293 "Gmsh.y"
+#line 3295 "Gmsh.y"
     { (yyval.d) = sin((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 293:
-#line 3294 "Gmsh.y"
+#line 3296 "Gmsh.y"
     { (yyval.d) = asin((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 294:
-#line 3295 "Gmsh.y"
+#line 3297 "Gmsh.y"
     { (yyval.d) = cos((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 295:
-#line 3296 "Gmsh.y"
+#line 3298 "Gmsh.y"
     { (yyval.d) = acos((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 296:
-#line 3297 "Gmsh.y"
+#line 3299 "Gmsh.y"
     { (yyval.d) = tan((yyvsp[(3) - (4)].d));      ;}
     break;
 
   case 297:
-#line 3298 "Gmsh.y"
+#line 3300 "Gmsh.y"
     { (yyval.d) = atan((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 298:
-#line 3299 "Gmsh.y"
+#line 3301 "Gmsh.y"
     { (yyval.d) = atan2((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d));;}
     break;
 
   case 299:
-#line 3300 "Gmsh.y"
+#line 3302 "Gmsh.y"
     { (yyval.d) = sinh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 300:
-#line 3301 "Gmsh.y"
+#line 3303 "Gmsh.y"
     { (yyval.d) = cosh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 301:
-#line 3302 "Gmsh.y"
+#line 3304 "Gmsh.y"
     { (yyval.d) = tanh((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 302:
-#line 3303 "Gmsh.y"
+#line 3305 "Gmsh.y"
     { (yyval.d) = fabs((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 303:
-#line 3304 "Gmsh.y"
+#line 3306 "Gmsh.y"
     { (yyval.d) = floor((yyvsp[(3) - (4)].d));    ;}
     break;
 
   case 304:
-#line 3305 "Gmsh.y"
+#line 3307 "Gmsh.y"
     { (yyval.d) = ceil((yyvsp[(3) - (4)].d));     ;}
     break;
 
   case 305:
-#line 3306 "Gmsh.y"
+#line 3308 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 306:
-#line 3307 "Gmsh.y"
+#line 3309 "Gmsh.y"
     { (yyval.d) = fmod((yyvsp[(3) - (6)].d), (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 307:
-#line 3308 "Gmsh.y"
+#line 3310 "Gmsh.y"
     { (yyval.d) = sqrt((yyvsp[(3) - (6)].d) * (yyvsp[(3) - (6)].d) + (yyvsp[(5) - (6)].d) * (yyvsp[(5) - (6)].d)); ;}
     break;
 
   case 308:
-#line 3309 "Gmsh.y"
+#line 3311 "Gmsh.y"
     { (yyval.d) = (yyvsp[(3) - (4)].d) * (double)rand() / (double)RAND_MAX; ;}
     break;
 
   case 309:
-#line 3318 "Gmsh.y"
+#line 3320 "Gmsh.y"
     { (yyval.d) = (yyvsp[(1) - (1)].d); ;}
     break;
 
   case 310:
-#line 3319 "Gmsh.y"
+#line 3321 "Gmsh.y"
     { (yyval.d) = 3.141592653589793; ;}
     break;
 
   case 311:
-#line 3320 "Gmsh.y"
+#line 3322 "Gmsh.y"
     { (yyval.d) = Msg::GetCommRank(); ;}
     break;
 
   case 312:
-#line 3321 "Gmsh.y"
+#line 3323 "Gmsh.y"
     { (yyval.d) = Msg::GetCommSize(); ;}
     break;
 
   case 313:
-#line 3322 "Gmsh.y"
+#line 3324 "Gmsh.y"
     { (yyval.d) = GetGmshMajorVersion(); ;}
     break;
 
   case 314:
-#line 3323 "Gmsh.y"
+#line 3325 "Gmsh.y"
     { (yyval.d) = GetGmshMinorVersion(); ;}
     break;
 
   case 315:
-#line 3324 "Gmsh.y"
+#line 3326 "Gmsh.y"
     { (yyval.d) = GetGmshPatchVersion(); ;}
     break;
 
   case 316:
-#line 3329 "Gmsh.y"
+#line 3331 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (1)].c));
@@ -7838,7 +7840,7 @@ yyreduce:
     break;
 
   case 317:
-#line 3342 "Gmsh.y"
+#line 3344 "Gmsh.y"
     {
       char tmpstring[1024];
       sprintf(tmpstring, "%s_%d", (yyvsp[(1) - (5)].c), (int)(yyvsp[(4) - (5)].d)) ;
@@ -7853,7 +7855,7 @@ yyreduce:
     break;
 
   case 318:
-#line 3354 "Gmsh.y"
+#line 3356 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (4)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (4)].c))){
@@ -7871,7 +7873,7 @@ yyreduce:
     break;
 
   case 319:
-#line 3369 "Gmsh.y"
+#line 3371 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(2) - (4)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(2) - (4)].c));
@@ -7884,7 +7886,7 @@ yyreduce:
     break;
 
   case 320:
-#line 3379 "Gmsh.y"
+#line 3381 "Gmsh.y"
     {
       if(!gmsh_yysymbols.count((yyvsp[(1) - (2)].c))){
 	yymsg(0, "Unknown variable '%s'", (yyvsp[(1) - (2)].c));
@@ -7897,7 +7899,7 @@ yyreduce:
     break;
 
   case 321:
-#line 3389 "Gmsh.y"
+#line 3391 "Gmsh.y"
     {
       int index = (int)(yyvsp[(3) - (5)].d);
       if(!gmsh_yysymbols.count((yyvsp[(1) - (5)].c))){
@@ -7915,7 +7917,7 @@ yyreduce:
     break;
 
   case 322:
-#line 3407 "Gmsh.y"
+#line 3409 "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));
@@ -7923,7 +7925,7 @@ yyreduce:
     break;
 
   case 323:
-#line 3412 "Gmsh.y"
+#line 3414 "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));
@@ -7931,7 +7933,7 @@ yyreduce:
     break;
 
   case 324:
-#line 3417 "Gmsh.y"
+#line 3419 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (4)].c), 0, (yyvsp[(3) - (4)].c), d)){
@@ -7944,7 +7946,7 @@ yyreduce:
     break;
 
   case 325:
-#line 3427 "Gmsh.y"
+#line 3429 "Gmsh.y"
     {
       double d = 0.;
       if(NumberOption(GMSH_GET, (yyvsp[(1) - (7)].c), (int)(yyvsp[(3) - (7)].d), (yyvsp[(6) - (7)].c), d)){
@@ -7957,7 +7959,7 @@ yyreduce:
     break;
 
   case 326:
-#line 3437 "Gmsh.y"
+#line 3439 "Gmsh.y"
     { 
       (yyval.d) = Msg::GetValue((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].d));
       Free((yyvsp[(3) - (6)].c));
@@ -7965,70 +7967,70 @@ yyreduce:
     break;
 
   case 327:
-#line 3445 "Gmsh.y"
+#line 3447 "Gmsh.y"
     {
       memcpy((yyval.v), (yyvsp[(1) - (1)].v), 5*sizeof(double));
     ;}
     break;
 
   case 328:
-#line 3449 "Gmsh.y"
+#line 3451 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = -(yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 329:
-#line 3453 "Gmsh.y"
+#line 3455 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(2) - (2)].v)[i];
     ;}
     break;
 
   case 330:
-#line 3457 "Gmsh.y"
+#line 3459 "Gmsh.y"
     { 
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] - (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 331:
-#line 3461 "Gmsh.y"
+#line 3463 "Gmsh.y"
     {
       for(int i = 0; i < 5; i++) (yyval.v)[i] = (yyvsp[(1) - (3)].v)[i] + (yyvsp[(3) - (3)].v)[i];
     ;}
     break;
 
   case 332:
-#line 3468 "Gmsh.y"
+#line 3470 "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 333:
-#line 3472 "Gmsh.y"
+#line 3474 "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 334:
-#line 3476 "Gmsh.y"
+#line 3478 "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 335:
-#line 3480 "Gmsh.y"
+#line 3482 "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 336:
-#line 3487 "Gmsh.y"
+#line 3489 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(List_T*));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].l)));
@@ -8036,14 +8038,14 @@ yyreduce:
     break;
 
   case 337:
-#line 3492 "Gmsh.y"
+#line 3494 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].l)));
     ;}
     break;
 
   case 338:
-#line 3499 "Gmsh.y"
+#line 3501 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8051,14 +8053,14 @@ yyreduce:
     break;
 
   case 339:
-#line 3504 "Gmsh.y"
+#line 3506 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 340:
-#line 3508 "Gmsh.y"
+#line 3510 "Gmsh.y"
     {
       // creates an empty list
       (yyval.l) = List_Create(2, 1, sizeof(double));
@@ -8066,14 +8068,14 @@ yyreduce:
     break;
 
   case 341:
-#line 3513 "Gmsh.y"
+#line 3515 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 342:
-#line 3517 "Gmsh.y"
+#line 3519 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (4)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8084,7 +8086,7 @@ yyreduce:
     break;
 
   case 343:
-#line 3525 "Gmsh.y"
+#line 3527 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(4) - (5)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8095,14 +8097,14 @@ yyreduce:
     break;
 
   case 344:
-#line 3536 "Gmsh.y"
+#line 3538 "Gmsh.y"
     { 
       (yyval.l) = (yyvsp[(1) - (1)].l); 
     ;}
     break;
 
   case 345:
-#line 3540 "Gmsh.y"
+#line 3542 "Gmsh.y"
     {
       if(!strcmp((yyvsp[(1) - (1)].c), "*") || !strcmp((yyvsp[(1) - (1)].c), "all"))
         (yyval.l) = 0;
@@ -8114,7 +8116,7 @@ yyreduce:
     break;
 
   case 346:
-#line 3552 "Gmsh.y"
+#line 3554 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (2)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8125,7 +8127,7 @@ yyreduce:
     break;
 
   case 347:
-#line 3560 "Gmsh.y"
+#line 3562 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(3) - (3)].l);
       for(int i = 0; i < List_Nbr((yyval.l)); i++){
@@ -8136,7 +8138,7 @@ yyreduce:
     break;
 
   case 348:
-#line 3568 "Gmsh.y"
+#line 3570 "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)); 
@@ -8146,7 +8148,7 @@ yyreduce:
     break;
 
   case 349:
-#line 3575 "Gmsh.y"
+#line 3577 "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)){
@@ -8160,7 +8162,7 @@ yyreduce:
     break;
 
   case 350:
-#line 3586 "Gmsh.y"
+#line 3588 "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
@@ -8183,7 +8185,7 @@ yyreduce:
     break;
 
   case 351:
-#line 3606 "Gmsh.y"
+#line 3608 "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++){
@@ -8196,7 +8198,7 @@ yyreduce:
     break;
 
   case 352:
-#line 3616 "Gmsh.y"
+#line 3618 "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++){
@@ -8209,7 +8211,7 @@ yyreduce:
     break;
 
   case 353:
-#line 3626 "Gmsh.y"
+#line 3628 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (3)].c)))
@@ -8222,7 +8224,7 @@ yyreduce:
     break;
 
   case 354:
-#line 3636 "Gmsh.y"
+#line 3638 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       if(!gmsh_yysymbols.count((yyvsp[(1) - (6)].c)))
@@ -8242,7 +8244,7 @@ yyreduce:
     break;
 
   case 355:
-#line 3656 "Gmsh.y"
+#line 3658 "Gmsh.y"
     {
       (yyval.l) = List_Create(2, 1, sizeof(double));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].d)));
@@ -8250,21 +8252,21 @@ yyreduce:
     break;
 
   case 356:
-#line 3661 "Gmsh.y"
+#line 3663 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(1) - (1)].l);
     ;}
     break;
 
   case 357:
-#line 3665 "Gmsh.y"
+#line 3667 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].d)));
     ;}
     break;
 
   case 358:
-#line 3669 "Gmsh.y"
+#line 3671 "Gmsh.y"
     {
       for(int i = 0; i < List_Nbr((yyvsp[(3) - (3)].l)); i++){
 	double d;
@@ -8276,21 +8278,21 @@ yyreduce:
     break;
 
   case 359:
-#line 3681 "Gmsh.y"
+#line 3683 "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 360:
-#line 3685 "Gmsh.y"
+#line 3687 "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 361:
-#line 3697 "Gmsh.y"
+#line 3699 "Gmsh.y"
     {
       int flag;
       (yyval.u) = GetColorForString(ColorString, -1, (yyvsp[(1) - (1)].c), &flag);
@@ -8300,7 +8302,7 @@ yyreduce:
     break;
 
   case 362:
-#line 3704 "Gmsh.y"
+#line 3706 "Gmsh.y"
     {
       unsigned int val = 0;
       ColorOption(GMSH_GET, (yyvsp[(1) - (5)].c), 0, (yyvsp[(5) - (5)].c), val);
@@ -8310,14 +8312,14 @@ yyreduce:
     break;
 
   case 363:
-#line 3714 "Gmsh.y"
+#line 3716 "Gmsh.y"
     {
       (yyval.l) = (yyvsp[(2) - (3)].l);
     ;}
     break;
 
   case 364:
-#line 3718 "Gmsh.y"
+#line 3720 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = GetColorTable((int)(yyvsp[(3) - (6)].d));
@@ -8332,7 +8334,7 @@ yyreduce:
     break;
 
   case 365:
-#line 3733 "Gmsh.y"
+#line 3735 "Gmsh.y"
     {
       (yyval.l) = List_Create(256, 10, sizeof(unsigned int));
       List_Add((yyval.l), &((yyvsp[(1) - (1)].u)));
@@ -8340,21 +8342,21 @@ yyreduce:
     break;
 
   case 366:
-#line 3738 "Gmsh.y"
+#line 3740 "Gmsh.y"
     {
       List_Add((yyval.l), &((yyvsp[(3) - (3)].u)));
     ;}
     break;
 
   case 367:
-#line 3745 "Gmsh.y"
+#line 3747 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 368:
-#line 3749 "Gmsh.y"
+#line 3751 "Gmsh.y"
     {
       if(!gmsh_yystringsymbols.count((yyvsp[(1) - (1)].c))){
 	yymsg(0, "Unknown string variable '%s'", (yyvsp[(1) - (1)].c));
@@ -8370,7 +8372,7 @@ yyreduce:
     break;
 
   case 369:
-#line 3762 "Gmsh.y"
+#line 3764 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (3)].c), 0, (yyvsp[(3) - (3)].c), out);
@@ -8381,7 +8383,7 @@ yyreduce:
     break;
 
   case 370:
-#line 3770 "Gmsh.y"
+#line 3772 "Gmsh.y"
     { 
       std::string out;
       StringOption(GMSH_GET, (yyvsp[(1) - (6)].c), (int)(yyvsp[(3) - (6)].d), (yyvsp[(6) - (6)].c), out);
@@ -8392,14 +8394,14 @@ yyreduce:
     break;
 
   case 371:
-#line 3781 "Gmsh.y"
+#line 3783 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(1) - (1)].c);
     ;}
     break;
 
   case 372:
-#line 3785 "Gmsh.y"
+#line 3787 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc(32 * sizeof(char));
       time_t now;
@@ -8410,7 +8412,7 @@ yyreduce:
     break;
 
   case 373:
-#line 3793 "Gmsh.y"
+#line 3795 "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));
@@ -8421,7 +8423,7 @@ yyreduce:
     break;
 
   case 374:
-#line 3801 "Gmsh.y"
+#line 3803 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -8438,7 +8440,7 @@ yyreduce:
     break;
 
   case 375:
-#line 3815 "Gmsh.y"
+#line 3817 "Gmsh.y"
     {
       (yyval.c) = (char *)Malloc((strlen((yyvsp[(3) - (4)].c)) + 1) * sizeof(char));
       int i;
@@ -8455,14 +8457,14 @@ yyreduce:
     break;
 
   case 376:
-#line 3829 "Gmsh.y"
+#line 3831 "Gmsh.y"
     {
       (yyval.c) = (yyvsp[(3) - (4)].c);
     ;}
     break;
 
   case 377:
-#line 3833 "Gmsh.y"
+#line 3835 "Gmsh.y"
     {
       char tmpstring[1024];
       int i = PrintListOfDouble((yyvsp[(3) - (6)].c), (yyvsp[(5) - (6)].l), tmpstring);
@@ -8485,7 +8487,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 8489 "Gmsh.tab.cpp"
+#line 8491 "Gmsh.tab.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -8699,7 +8701,7 @@ yyreturn:
 }
 
 
-#line 3853 "Gmsh.y"
+#line 3855 "Gmsh.y"
 
 
 int PrintListOfDouble(char *format, List_T *list, char *buffer)
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index b64a2f63021fbd2011a0ee10a42efb093d3cc161..5a467fe5afb420a66092c7b6ee77d4f348f6ecce 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1922,6 +1922,7 @@ LevelSet :
           Tree_Add(GModel::current()->getGEOInternals()->LevelSets, &l);
         }
       }
+#if !defined(HAVE_NO_POST)
       else if(!strcmp($2, "PostView")){
         int t = (int)$4;
         if(FindLevelSet(t)){
@@ -1936,6 +1937,7 @@ LevelSet :
           }
         }
       }
+#endif
       else
         yymsg(0, "Wrong levelset definition (%d)", $4);
       Free($2);