diff --git a/Common/Views.cpp b/Common/Views.cpp
index 4aa53f9df1379ded88d8c7a66f2781c5b0a83693..4a5360a654c5846d9021978fcfa3056224a4a789 100644
--- a/Common/Views.cpp
+++ b/Common/Views.cpp
@@ -1,4 +1,4 @@
-// $Id: Views.cpp,v 1.130 2004-09-17 22:06:45 geuzaine Exp $
+// $Id: Views.cpp,v 1.131 2004-09-18 01:51:56 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -1213,7 +1213,18 @@ void Post_View::transform(double mat[3][3])
   Changed = 1;
 }
 
-// Combine views (spatially)
+// Combine views (merge elements or merge time steps)
+
+struct nameidx{
+  char name[256];
+  List_T *indices;
+};
+
+static int fcmp_name(const void *a, const void *b){
+  char *name1 = ((struct nameidx*)a)->name;
+  char *name2 = ((struct nameidx*)b)->name;
+  return strcmp(name1, name2);
+}
 
 static void combine(List_T * a, List_T * b)
 {
@@ -1224,96 +1235,71 @@ static void combine(List_T * a, List_T * b)
   }
 }
 
-void CombineViews(int all, int remove)
+static void combine_space(struct nameidx *id, List_T *to_remove)
 {
+  int index;
+
   // sanity check
-  int first = 1, nbt = 0;
-  for(int i = 0; i < List_Nbr(CTX.post.list); i++) {
-    Post_View *v = (Post_View *) List_Pointer(CTX.post.list, i);
-    if(all || v->Visible) {
-      if(first){
-	nbt = v->NbTimeStep;
-	first = 0;
-      }
-      else{
-	if(v->NbTimeStep != nbt){
-	  Msg(GERROR, "Cannot combine views having different number of time steps");
-	  return;
-	}
+  int nbt = 0;
+  for(int i = 0; i < List_Nbr(id->indices); i++) {
+    List_Read(id->indices, i, &index);
+    Post_View *v = (Post_View*)List_Pointer(CTX.post.list, index);
+    if(!i){
+      nbt = v->NbTimeStep;
+    }
+    else{
+      if(v->NbTimeStep != nbt){
+	Msg(GERROR, "Cannot combine views having different number of time steps");
+	return;
       }
     }
   }
 
-  List_T *to_remove = List_Create(10, 10, sizeof(int));
-
   Post_View *vm = BeginView(1);
-  for(int i = 0; i < List_Nbr(CTX.post.list) - 1; i++) {
-    Post_View *v = (Post_View *) List_Pointer(CTX.post.list, i);
-    if(all || v->Visible) {
-      List_Insert(to_remove, &v->Num, fcmp_int);
-      combine(v->SP,vm->SP); vm->NbSP += v->NbSP;
-      combine(v->VP,vm->VP); vm->NbVP += v->NbVP; 
-      combine(v->TP,vm->TP); vm->NbTP += v->NbTP;
-      combine(v->SL,vm->SL); vm->NbSL += v->NbSL;
-      combine(v->VL,vm->VL); vm->NbVL += v->NbVL;
-      combine(v->TL,vm->TL); vm->NbTL += v->NbTL;
-      combine(v->ST,vm->ST); vm->NbST += v->NbST;
-      combine(v->VT,vm->VT); vm->NbVT += v->NbVT;
-      combine(v->TT,vm->TT); vm->NbTT += v->NbTT;
-      combine(v->SQ,vm->SQ); vm->NbSQ += v->NbSQ;
-      combine(v->VQ,vm->VQ); vm->NbVQ += v->NbVQ;
-      combine(v->TQ,vm->TQ); vm->NbTQ += v->NbTQ;
-      combine(v->SS,vm->SS); vm->NbSS += v->NbSS;
-      combine(v->VS,vm->VS); vm->NbVS += v->NbVS;
-      combine(v->TS,vm->TS); vm->NbTS += v->NbTS;
-      combine(v->SH,vm->SH); vm->NbSH += v->NbSH;
-      combine(v->VH,vm->VH); vm->NbVH += v->NbVH;
-      combine(v->TH,vm->TH); vm->NbTH += v->NbTH;
-      combine(v->SI,vm->SI); vm->NbSI += v->NbSI;
-      combine(v->VI,vm->VI); vm->NbVI += v->NbVI;
-      combine(v->TI,vm->TI); vm->NbTI += v->NbTI;
-      combine(v->SY,vm->SY); vm->NbSY += v->NbSY;
-      combine(v->VY,vm->VY); vm->NbVY += v->NbVY;
-      combine(v->TY,vm->TY); vm->NbTY += v->NbTY;
-      /* this more complicated: we have to recompute the indices
-         combine(v->T2D,vm->T2D);
-         combine(v->T2C,vm->T2C); v->NbT2 += vm->NbT2;
-         combine(v->T3D,vm->T3D);
-         combine(v->T3C,vm->T3C); v->NbT2 += vm->NbT2;
-       */
-    }
-  }
-  EndView(vm, 0, "Combine.pos", "Combine");
-
-  // remove original views?
-  if(remove){
-    for(int i = 0; i < List_Nbr(to_remove); i++) {
-      int num;
-      List_Read(to_remove, i, &num);
-      RemoveViewByNumber(num);
-    }
+  for(int i = 0; i < List_Nbr(id->indices); i++) {
+    List_Read(id->indices, i, &index);
+    Post_View *v = (Post_View*)List_Pointer(CTX.post.list, index);
+    List_Insert(to_remove, &v->Num, fcmp_int);
+    combine(v->SP,vm->SP); vm->NbSP += v->NbSP;
+    combine(v->VP,vm->VP); vm->NbVP += v->NbVP; 
+    combine(v->TP,vm->TP); vm->NbTP += v->NbTP;
+    combine(v->SL,vm->SL); vm->NbSL += v->NbSL;
+    combine(v->VL,vm->VL); vm->NbVL += v->NbVL;
+    combine(v->TL,vm->TL); vm->NbTL += v->NbTL;
+    combine(v->ST,vm->ST); vm->NbST += v->NbST;
+    combine(v->VT,vm->VT); vm->NbVT += v->NbVT;
+    combine(v->TT,vm->TT); vm->NbTT += v->NbTT;
+    combine(v->SQ,vm->SQ); vm->NbSQ += v->NbSQ;
+    combine(v->VQ,vm->VQ); vm->NbVQ += v->NbVQ;
+    combine(v->TQ,vm->TQ); vm->NbTQ += v->NbTQ;
+    combine(v->SS,vm->SS); vm->NbSS += v->NbSS;
+    combine(v->VS,vm->VS); vm->NbVS += v->NbVS;
+    combine(v->TS,vm->TS); vm->NbTS += v->NbTS;
+    combine(v->SH,vm->SH); vm->NbSH += v->NbSH;
+    combine(v->VH,vm->VH); vm->NbVH += v->NbVH;
+    combine(v->TH,vm->TH); vm->NbTH += v->NbTH;
+    combine(v->SI,vm->SI); vm->NbSI += v->NbSI;
+    combine(v->VI,vm->VI); vm->NbVI += v->NbVI;
+    combine(v->TI,vm->TI); vm->NbTI += v->NbTI;
+    combine(v->SY,vm->SY); vm->NbSY += v->NbSY;
+    combine(v->VY,vm->VY); vm->NbVY += v->NbVY;
+    combine(v->TY,vm->TY); vm->NbTY += v->NbTY;
+    /* this more complicated: we have to recompute the indices
+       combine(v->T2D,vm->T2D);
+       combine(v->T2C,vm->T2C); v->NbT2 += vm->NbT2;
+       combine(v->T3D,vm->T3D);
+       combine(v->T3C,vm->T3C); v->NbT2 += vm->NbT2;
+    */
   }
-  List_Delete(to_remove);
-
-#if defined(HAVE_FLTK)
-  UpdateViewsInGUI();
-#endif
-}
-
-// Combine views (merge time steps)
-
-struct nameidx{
-  char name[256];
-  List_T *indices;
-};
 
-int fcmp_name(const void *a, const void *b){
-  char *name1 = ((struct nameidx*)a)->name;
-  char *name2 = ((struct nameidx*)b)->name;
-  return strcmp(name1, name2);
+  // finalize
+  char name[256], filename[256];
+  sprintf(name, "%s_Combine", id->name);
+  sprintf(filename, "%s_Combine.pos", id->name);
+  EndView(vm, 0, filename, name);
 }
 
-void combine_time(struct nameidx *id, List_T *to_remove)
+static void combine_time(struct nameidx *id, List_T *to_remove)
 {
   int index, *nbe=0, *nbe2=0, nbn, nbn2, nbc, nbc2;
   List_T *list=0, *list2=0;
@@ -1393,8 +1379,11 @@ void combine_time(struct nameidx *id, List_T *to_remove)
   EndView(vm, 0, filename, name);
 }
 
-void CombineViews_Time(int how, int remove)
+void CombineViews(int time, int how, int remove)
 {
+  // time==0: combine the elements
+  // time==1: combine the timesteps
+
   // how==0: try to combine all visible views
   // how==1: try to combine all views
   // how==2: try to combine all views having identical names
@@ -1424,7 +1413,10 @@ void CombineViews_Time(int how, int remove)
 
   for(int i = 0; i < List_Nbr(ids); i++){
     pid = (struct nameidx*)List_Pointer(ids, i);
-    combine_time(pid, to_remove);
+    if(time)
+      combine_time(pid, to_remove);
+    else
+      combine_space(pid, to_remove);
     List_Delete(pid->indices);
   }
   List_Delete(ids);
diff --git a/Common/Views.h b/Common/Views.h
index 659d51e6f77211e0a1c3f235e9eaefdae7cd6955..95aa9b175b5796fb28a8eeb27058e9a563a81b25 100644
--- a/Common/Views.h
+++ b/Common/Views.h
@@ -159,8 +159,7 @@ bool RemoveViewByNumber(int num);
 void ReadView(FILE *file, char *filename);
 void WriteView(Post_View *v, char *filename, int binary, int append);
 void CopyViewOptions(Post_View *src, Post_View *dest);
-void CombineViews(int all, int remove);
-void CombineViews_Time(int how, int remove);
+void CombineViews(int time, int how, int remove);
 
 int BGMWithView (Post_View *ErrView);
 double ErrorInView(Post_View * ErrView, int *n);
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 5816c30363bc719b546fc045254970b06502f3ad..61c240d4bd500f848484991cea09f815349725f6 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.271 2004-09-18 01:12:07 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.272 2004-09-18 01:51:56 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -3176,33 +3176,39 @@ void view_duplicate_with_options_cb(CALLBACK_ARGS)
   Draw();
 }
 
-void view_combine_all_cb(CALLBACK_ARGS)
+void view_combine_space_all_cb(CALLBACK_ARGS)
 {
-  CombineViews(1, CTX.post.combine_remove_orig);
+  CombineViews(0, 1, CTX.post.combine_remove_orig);
   Draw();
 }
 
-void view_combine_visible_cb(CALLBACK_ARGS)
+void view_combine_space_visible_cb(CALLBACK_ARGS)
 {
-  CombineViews(0, CTX.post.combine_remove_orig);
+  CombineViews(0, 0, CTX.post.combine_remove_orig);
+  Draw();
+}
+
+void view_combine_space_by_name_cb(CALLBACK_ARGS)
+{
+  CombineViews(0, 2, CTX.post.combine_remove_orig);
   Draw();
 }
 
 void view_combine_time_all_cb(CALLBACK_ARGS)
 {
-  CombineViews_Time(1, CTX.post.combine_remove_orig);
+  CombineViews(1, 1, CTX.post.combine_remove_orig);
   Draw();
 }
 
 void view_combine_time_visible_cb(CALLBACK_ARGS)
 {
-  CombineViews_Time(0, CTX.post.combine_remove_orig);
+  CombineViews(1, 0, CTX.post.combine_remove_orig);
   Draw();
 }
 
 void view_combine_time_by_name_cb(CALLBACK_ARGS)
 {
-  CombineViews_Time(2, CTX.post.combine_remove_orig);
+  CombineViews(1, 2, CTX.post.combine_remove_orig);
   Draw();
 }
 
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index a3dd23e0af69e895ef87ca52737a8726e5939fb0..1537602f0e2be4c5af33fd4d035183c2cf01614c 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -112,8 +112,9 @@ void view_save_ascii_cb(CALLBACK_ARGS) ;
 void view_save_binary_cb(CALLBACK_ARGS) ;
 void view_duplicate_cb(CALLBACK_ARGS) ;
 void view_duplicate_with_options_cb(CALLBACK_ARGS) ;
-void view_combine_all_cb(CALLBACK_ARGS) ;
-void view_combine_visible_cb(CALLBACK_ARGS) ;
+void view_combine_space_all_cb(CALLBACK_ARGS) ;
+void view_combine_space_visible_cb(CALLBACK_ARGS) ;
+void view_combine_space_by_name_cb(CALLBACK_ARGS) ;
 void view_combine_time_all_cb(CALLBACK_ARGS) ;
 void view_combine_time_visible_cb(CALLBACK_ARGS) ;
 void view_combine_time_by_name_cb(CALLBACK_ARGS) ;
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 5a261a47a6472ece1b75b705d8d3f30abc0d007b..8672b52a686143cce417a135bf53c4261a5c0da4 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.345 2004-09-18 01:12:07 geuzaine Exp $
+// $Id: GUI.cpp,v 1.346 2004-09-18 01:51:56 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -1063,9 +1063,11 @@ void GUI::set_context(Context_Item * menu_asked, int flag)
 	p[j]->add("Duplicate/View with options", 0, 
 		  (Fl_Callback *) view_duplicate_with_options_cb, (void *)nb, 0);
 	p[j]->add("Combine/Elements/From all views", 0, 
-		  (Fl_Callback *) view_combine_all_cb, (void *)nb, 0);
+		  (Fl_Callback *) view_combine_space_all_cb, (void *)nb, 0);
 	p[j]->add("Combine/Elements/From visible views", 0, 
-		  (Fl_Callback *) view_combine_visible_cb, (void *)nb, 0);
+		  (Fl_Callback *) view_combine_space_visible_cb, (void *)nb, 0);
+	p[j]->add("Combine/Elements/By view name", 0, 
+		  (Fl_Callback *) view_combine_space_by_name_cb, (void *)nb, 0);
 	p[j]->add("Combine/Time steps/From all views", 0, 
 		  (Fl_Callback *) view_combine_time_all_cb, (void *)nb, 0);
 	p[j]->add("Combine/Time steps/From visible views", 0, 
diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp
index f8a504e65c32c1312ce808a0b45a2c00d8d5b435..df71aa48f668640cf1dbfd0527715bf92bd20fa2 100644
--- a/Fltk/Main.cpp
+++ b/Fltk/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.70 2004-09-18 01:12:08 geuzaine Exp $
+// $Id: Main.cpp,v 1.71 2004-09-18 01:51:56 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -126,7 +126,7 @@ int main(int argc, char *argv[])
       for(i = 1; i < nbf; i++)
         MergeProblem(TheFileNameTab[i]);
       if(CTX.post.combine_time)
-	CombineViews_Time(2, CTX.post.combine_remove_orig);
+	CombineViews(1, 2, CTX.post.combine_remove_orig);
       if(TheBgmFileName) {
         MergeProblem(TheBgmFileName);
         if(List_Nbr(CTX.post.list))
@@ -202,7 +202,7 @@ int main(int argc, char *argv[])
   for(i = 1; i < nbf; i++)
     MergeProblem(TheFileNameTab[i]);
   if(CTX.post.combine_time)
-    CombineViews_Time(2, CTX.post.combine_remove_orig);
+    CombineViews(1, 2, CTX.post.combine_remove_orig);
   
   // Init first context
 
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index af33060a3f0ab4a315dea94cdea03b1c4f76316b..0ed6b0e6097ee3ff694fa28f9450a3fd7dcfe5de 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -192,7 +192,7 @@
 
 #line 1 "Gmsh.y"
 
-// $Id: Gmsh.tab.cpp,v 1.202 2004-09-18 01:12:08 geuzaine Exp $
+// $Id: Gmsh.tab.cpp,v 1.203 2004-09-18 01:51:56 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -761,26 +761,26 @@ static const short yyrline[] = { 0,
   2077,  2099,  2115,  2134,  2153,  2169,  2188,  2205,  2222,  2242,
   2248,  2253,  2258,  2265,  2267,  2268,  2271,  2276,  2280,  2296,
   2312,  2328,  2348,  2362,  2372,  2382,  2392,  2401,  2415,  2423,
-  2428,  2439,  2452,  2496,  2510,  2525,  2534,  2543,  2547,  2551,
-  2555,  2566,  2582,  2596,  2621,  2646,  2673,  2679,  2684,  2689,
-  2693,  2701,  2720,  2736,  2752,  2757,  2773,  2778,  2794,  2799,
-  2817,  2840,  2863,  2886,  2891,  2914,  2919,  2942,  2947,  2973,
-  2996,  3019,  3042,  3047,  3070,  3076,  3099,  3105,  3130,  3134,
-  3139,  3166,  3190,  3198,  3217,  3235,  3253,  3280,  3306,  3332,
-  3346,  3364,  3369,  3378,  3380,  3381,  3382,  3383,  3386,  3388,
-  3389,  3390,  3391,  3392,  3393,  3394,  3395,  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,  3427,  3428,  3429,  3430,  3431,  3432,  3433,  3435,
-  3436,  3437,  3438,  3439,  3440,  3441,  3442,  3443,  3444,  3445,
-  3446,  3447,  3448,  3449,  3450,  3451,  3452,  3453,  3454,  3455,
-  3460,  3465,  3466,  3467,  3471,  3483,  3502,  3515,  3527,  3549,
-  3566,  3583,  3600,  3619,  3624,  3628,  3632,  3636,  3642,  3647,
-  3651,  3655,  3661,  3665,  3670,  3674,  3679,  3683,  3687,  3693,
-  3699,  3706,  3712,  3716,  3720,  3731,  3738,  3749,  3769,  3779,
-  3789,  3801,  3817,  3835,  3858,  3885,  3891,  3895,  3899,  3911,
-  3916,  3928,  3934,  3954,  3959,  3972,  3978,  3984,  3989,  3997,
-  4011,  4015,  4034,  4050
+  2428,  2439,  2452,  2496,  2510,  2525,  2534,  2544,  2548,  2552,
+  2556,  2567,  2583,  2597,  2622,  2647,  2674,  2680,  2685,  2690,
+  2694,  2702,  2721,  2737,  2753,  2758,  2774,  2779,  2795,  2800,
+  2818,  2841,  2864,  2887,  2892,  2915,  2920,  2943,  2948,  2974,
+  2997,  3020,  3043,  3048,  3071,  3077,  3100,  3106,  3131,  3135,
+  3140,  3167,  3191,  3199,  3218,  3236,  3254,  3281,  3307,  3333,
+  3347,  3365,  3370,  3379,  3381,  3382,  3383,  3384,  3387,  3389,
+  3390,  3391,  3392,  3393,  3394,  3395,  3396,  3403,  3404,  3405,
+  3406,  3407,  3408,  3409,  3410,  3411,  3412,  3413,  3414,  3415,
+  3416,  3417,  3418,  3419,  3420,  3421,  3422,  3423,  3424,  3425,
+  3426,  3427,  3428,  3429,  3430,  3431,  3432,  3433,  3434,  3436,
+  3437,  3438,  3439,  3440,  3441,  3442,  3443,  3444,  3445,  3446,
+  3447,  3448,  3449,  3450,  3451,  3452,  3453,  3454,  3455,  3456,
+  3461,  3466,  3467,  3468,  3472,  3484,  3503,  3516,  3528,  3550,
+  3567,  3584,  3601,  3620,  3625,  3629,  3633,  3637,  3643,  3648,
+  3652,  3656,  3662,  3666,  3671,  3675,  3680,  3684,  3688,  3694,
+  3700,  3707,  3713,  3717,  3721,  3732,  3739,  3750,  3770,  3780,
+  3790,  3802,  3818,  3836,  3859,  3886,  3892,  3896,  3900,  3912,
+  3917,  3929,  3935,  3955,  3960,  3973,  3979,  3985,  3990,  3998,
+  4012,  4016,  4035,  4051
 };
 #endif
 
@@ -7155,34 +7155,35 @@ case 286:
 case 287:
 #line 2535 "Gmsh.y"
 {
+      // for backward compatibility
       if(!strcmp(yyvsp[-1].c, "Views"))
-	CombineViews(1, CTX.post.combine_remove_orig);
+	CombineViews(0, 1, CTX.post.combine_remove_orig);
       else if(!strcmp(yyvsp[-1].c, "TimeSteps"))
-	CombineViews_Time(2, CTX.post.combine_remove_orig);
+	CombineViews(1, 2, CTX.post.combine_remove_orig);
       else
 	yymsg(GERROR, "Unknown 'Combine' command");
     ;
     break;}
 case 288:
-#line 2544 "Gmsh.y"
+#line 2545 "Gmsh.y"
 {
       exit(0);
     ;
     break;}
 case 289:
-#line 2548 "Gmsh.y"
+#line 2549 "Gmsh.y"
 {
       SetBoundingBox();
     ;
     break;}
 case 290:
-#line 2552 "Gmsh.y"
+#line 2553 "Gmsh.y"
 {
       SetBoundingBox(yyvsp[-12].d, yyvsp[-10].d, yyvsp[-8].d, yyvsp[-6].d, yyvsp[-4].d, yyvsp[-2].d);
     ;
     break;}
 case 291:
-#line 2556 "Gmsh.y"
+#line 2557 "Gmsh.y"
 {
 #if defined(HAVE_FLTK)
       if(!CTX.batch) // we're in interactive mode
@@ -7191,7 +7192,7 @@ case 291:
     ;
     break;}
 case 292:
-#line 2569 "Gmsh.y"
+#line 2570 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d;
@@ -7207,7 +7208,7 @@ case 292:
     ;
     break;}
 case 293:
-#line 2583 "Gmsh.y"
+#line 2584 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d;
@@ -7223,7 +7224,7 @@ case 293:
     ;
     break;}
 case 294:
-#line 2597 "Gmsh.y"
+#line 2598 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-3].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-1].d;
@@ -7250,7 +7251,7 @@ case 294:
     ;
     break;}
 case 295:
-#line 2622 "Gmsh.y"
+#line 2623 "Gmsh.y"
 {
       LoopControlVariablesTab[ImbricatedLoop][0] = yyvsp[-5].d;
       LoopControlVariablesTab[ImbricatedLoop][1] = yyvsp[-3].d;
@@ -7277,7 +7278,7 @@ case 295:
     ;
     break;}
 case 296:
-#line 2647 "Gmsh.y"
+#line 2648 "Gmsh.y"
 {
       if(LoopControlVariablesTab[ImbricatedLoop-1][1] >  
 	 LoopControlVariablesTab[ImbricatedLoop-1][0]){
@@ -7306,7 +7307,7 @@ case 296:
     ;
     break;}
 case 297:
-#line 2674 "Gmsh.y"
+#line 2675 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->createFunction(yyvsp[0].c, yyin, yyname, yylineno))
 	yymsg(GERROR, "Redefinition of function %s", yyvsp[0].c);
@@ -7314,32 +7315,32 @@ case 297:
     ;
     break;}
 case 298:
-#line 2680 "Gmsh.y"
+#line 2681 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->leaveFunction(&yyin, yyname, yylineno))
 	yymsg(GERROR, "Error while exiting function");
     ;
     break;}
 case 299:
-#line 2685 "Gmsh.y"
+#line 2686 "Gmsh.y"
 {
       if(!FunctionManager::Instance()->enterFunction(yyvsp[-1].c, &yyin, yyname, yylineno))
 	yymsg(GERROR, "Unknown function %s", yyvsp[-1].c);
     ;
     break;}
 case 300:
-#line 2690 "Gmsh.y"
+#line 2691 "Gmsh.y"
 {
       if(!yyvsp[-1].d) skip_until("If", "EndIf");
     ;
     break;}
 case 301:
-#line 2694 "Gmsh.y"
+#line 2695 "Gmsh.y"
 {
     ;
     break;}
 case 302:
-#line 2705 "Gmsh.y"
+#line 2706 "Gmsh.y"
 {
       Curve *pc, *prc;
       Shape TheShape;
@@ -7357,7 +7358,7 @@ case 302:
     ;
     break;}
 case 303:
-#line 2721 "Gmsh.y"
+#line 2722 "Gmsh.y"
 {
       Curve *pc, *prc;
       Shape TheShape;
@@ -7375,7 +7376,7 @@ case 303:
     ;
     break;}
 case 304:
-#line 2737 "Gmsh.y"
+#line 2738 "Gmsh.y"
 {
       Curve *pc, *prc;
       Shape TheShape;
@@ -7393,14 +7394,14 @@ case 304:
     ;
     break;}
 case 305:
-#line 2753 "Gmsh.y"
+#line 2754 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 306:
-#line 2758 "Gmsh.y"
+#line 2759 "Gmsh.y"
 {
       Curve *pc, *prc;
       Shape TheShape;
@@ -7418,14 +7419,14 @@ case 306:
     ;
     break;}
 case 307:
-#line 2774 "Gmsh.y"
+#line 2775 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 308:
-#line 2779 "Gmsh.y"
+#line 2780 "Gmsh.y"
 {
       Curve *pc, *prc;
       Shape TheShape;
@@ -7443,14 +7444,14 @@ case 308:
     ;
     break;}
 case 309:
-#line 2795 "Gmsh.y"
+#line 2796 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 310:
-#line 2800 "Gmsh.y"
+#line 2801 "Gmsh.y"
 {
       Curve *pc, *prc;
       Shape TheShape;
@@ -7468,7 +7469,7 @@ case 310:
     ;
     break;}
 case 311:
-#line 2818 "Gmsh.y"
+#line 2819 "Gmsh.y"
 {
       Surface *ps;
       Shape TheShape;
@@ -7493,7 +7494,7 @@ case 311:
     ;
     break;}
 case 312:
-#line 2841 "Gmsh.y"
+#line 2842 "Gmsh.y"
 {
       Surface *ps;
       Shape TheShape;
@@ -7518,7 +7519,7 @@ case 312:
     ;
     break;}
 case 313:
-#line 2864 "Gmsh.y"
+#line 2865 "Gmsh.y"
 {
       Surface *ps;
       Shape TheShape;
@@ -7543,14 +7544,14 @@ case 313:
     ;
     break;}
 case 314:
-#line 2887 "Gmsh.y"
+#line 2888 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 315:
-#line 2892 "Gmsh.y"
+#line 2893 "Gmsh.y"
 {
       Surface *ps;
       Shape TheShape;
@@ -7575,14 +7576,14 @@ case 315:
     ;
     break;}
 case 316:
-#line 2915 "Gmsh.y"
+#line 2916 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 317:
-#line 2920 "Gmsh.y"
+#line 2921 "Gmsh.y"
 {
       Surface *ps;
       Shape TheShape;
@@ -7607,14 +7608,14 @@ case 317:
     ;
     break;}
 case 318:
-#line 2943 "Gmsh.y"
+#line 2944 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 319:
-#line 2948 "Gmsh.y"
+#line 2949 "Gmsh.y"
 {
       Surface *ps;
       Shape TheShape;
@@ -7639,7 +7640,7 @@ case 319:
     ;
     break;}
 case 320:
-#line 2974 "Gmsh.y"
+#line 2975 "Gmsh.y"
 {
       Volume *pv;
       Shape TheShape;
@@ -7664,7 +7665,7 @@ case 320:
     ;
     break;}
 case 321:
-#line 2997 "Gmsh.y"
+#line 2998 "Gmsh.y"
 {
       Volume *pv;
       Shape TheShape;
@@ -7689,7 +7690,7 @@ case 321:
     ;
     break;}
 case 322:
-#line 3020 "Gmsh.y"
+#line 3021 "Gmsh.y"
 {
       Volume *pv;
       Shape TheShape;
@@ -7714,14 +7715,14 @@ case 322:
     ;
     break;}
 case 323:
-#line 3043 "Gmsh.y"
+#line 3044 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 324:
-#line 3048 "Gmsh.y"
+#line 3049 "Gmsh.y"
 {
       Volume *pv;
       Shape TheShape;
@@ -7746,14 +7747,14 @@ case 324:
     ;
     break;}
 case 325:
-#line 3071 "Gmsh.y"
+#line 3072 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 326:
-#line 3077 "Gmsh.y"
+#line 3078 "Gmsh.y"
 {
       Volume *pv;
       Shape TheShape;
@@ -7778,14 +7779,14 @@ case 326:
     ;
     break;}
 case 327:
-#line 3100 "Gmsh.y"
+#line 3101 "Gmsh.y"
 {
       extr.mesh.ExtrudeMesh = false;
       extr.mesh.Recombine = false;
     ;
     break;}
 case 328:
-#line 3106 "Gmsh.y"
+#line 3107 "Gmsh.y"
 {
       Volume *pv;
       Shape TheShape;
@@ -7810,17 +7811,17 @@ case 328:
     ;
     break;}
 case 329:
-#line 3132 "Gmsh.y"
+#line 3133 "Gmsh.y"
 {
     ;
     break;}
 case 330:
-#line 3135 "Gmsh.y"
+#line 3136 "Gmsh.y"
 {
     ;
     break;}
 case 331:
-#line 3141 "Gmsh.y"
+#line 3142 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -7848,7 +7849,7 @@ case 331:
     ;
     break;}
 case 332:
-#line 3167 "Gmsh.y"
+#line 3168 "Gmsh.y"
 {
       double d;
       extr.mesh.ExtrudeMesh = true;
@@ -7874,13 +7875,13 @@ case 332:
     ;
     break;}
 case 333:
-#line 3191 "Gmsh.y"
+#line 3192 "Gmsh.y"
 {
       extr.mesh.Recombine = true;
     ;
     break;}
 case 334:
-#line 3200 "Gmsh.y"
+#line 3201 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	double d;
@@ -7900,7 +7901,7 @@ case 334:
     ;
     break;}
 case 335:
-#line 3218 "Gmsh.y"
+#line 3219 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
 	double d;
@@ -7920,7 +7921,7 @@ case 335:
     ;
     break;}
 case 336:
-#line 3236 "Gmsh.y"
+#line 3237 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-6].l); i++){
 	double d;
@@ -7940,7 +7941,7 @@ case 336:
     ;
     break;}
 case 337:
-#line 3254 "Gmsh.y"
+#line 3255 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d, THEM);
       if(!s)
@@ -7969,7 +7970,7 @@ case 337:
     ;
     break;}
 case 338:
-#line 3281 "Gmsh.y"
+#line 3282 "Gmsh.y"
 {
       Surface *s = FindSurface((int)yyvsp[-4].d, THEM);
       if(!s)
@@ -7997,7 +7998,7 @@ case 338:
     ;
     break;}
 case 339:
-#line 3307 "Gmsh.y"
+#line 3308 "Gmsh.y"
 {
       Volume *v = FindVolume((int)yyvsp[-4].d, THEM);
       if(!v)
@@ -8025,7 +8026,7 @@ case 339:
     ;
     break;}
 case 340:
-#line 3333 "Gmsh.y"
+#line 3334 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-3].l); i++){
 	double d;
@@ -8041,7 +8042,7 @@ case 340:
     ;
     break;}
 case 341:
-#line 3347 "Gmsh.y"
+#line 3348 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[-1].l); i++){
 	double d;
@@ -8056,71 +8057,71 @@ case 341:
     ;
     break;}
 case 342:
-#line 3366 "Gmsh.y"
+#line 3367 "Gmsh.y"
 { 
       ReplaceAllDuplicates(THEM);
     ;
     break;}
 case 343:
-#line 3370 "Gmsh.y"
+#line 3371 "Gmsh.y"
 { 
       IntersectAllSegmentsTogether();
     ;
     break;}
 case 344:
-#line 3379 "Gmsh.y"
+#line 3380 "Gmsh.y"
 {yyval.i = 1;;
     break;}
 case 345:
-#line 3380 "Gmsh.y"
+#line 3381 "Gmsh.y"
 {yyval.i = 0;;
     break;}
 case 346:
-#line 3381 "Gmsh.y"
+#line 3382 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 347:
-#line 3382 "Gmsh.y"
+#line 3383 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 348:
-#line 3383 "Gmsh.y"
+#line 3384 "Gmsh.y"
 {yyval.i = -1;;
     break;}
 case 349:
-#line 3387 "Gmsh.y"
+#line 3388 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 350:
-#line 3388 "Gmsh.y"
+#line 3389 "Gmsh.y"
 { yyval.d = yyvsp[-1].d;           ;
     break;}
 case 351:
-#line 3389 "Gmsh.y"
+#line 3390 "Gmsh.y"
 { yyval.d = -yyvsp[0].d;          ;
     break;}
 case 352:
-#line 3390 "Gmsh.y"
+#line 3391 "Gmsh.y"
 { yyval.d = yyvsp[0].d;           ;
     break;}
 case 353:
-#line 3391 "Gmsh.y"
+#line 3392 "Gmsh.y"
 { yyval.d = !yyvsp[0].d;          ;
     break;}
 case 354:
-#line 3392 "Gmsh.y"
+#line 3393 "Gmsh.y"
 { yyval.d = yyvsp[-2].d - yyvsp[0].d;      ;
     break;}
 case 355:
-#line 3393 "Gmsh.y"
+#line 3394 "Gmsh.y"
 { yyval.d = yyvsp[-2].d + yyvsp[0].d;      ;
     break;}
 case 356:
-#line 3394 "Gmsh.y"
+#line 3395 "Gmsh.y"
 { yyval.d = yyvsp[-2].d * yyvsp[0].d;      ;
     break;}
 case 357:
-#line 3396 "Gmsh.y"
+#line 3397 "Gmsh.y"
 { 
       if(!yyvsp[0].d)
 	yymsg(GERROR, "Division by zero in '%g / %g'", yyvsp[-2].d, yyvsp[0].d);
@@ -8129,235 +8130,235 @@ case 357:
     ;
     break;}
 case 358:
-#line 3402 "Gmsh.y"
+#line 3403 "Gmsh.y"
 { yyval.d = (int)yyvsp[-2].d % (int)yyvsp[0].d;  ;
     break;}
 case 359:
-#line 3403 "Gmsh.y"
+#line 3404 "Gmsh.y"
 { yyval.d = pow(yyvsp[-2].d, yyvsp[0].d);  ;
     break;}
 case 360:
-#line 3404 "Gmsh.y"
+#line 3405 "Gmsh.y"
 { yyval.d = yyvsp[-2].d < yyvsp[0].d;      ;
     break;}
 case 361:
-#line 3405 "Gmsh.y"
+#line 3406 "Gmsh.y"
 { yyval.d = yyvsp[-2].d > yyvsp[0].d;      ;
     break;}
 case 362:
-#line 3406 "Gmsh.y"
+#line 3407 "Gmsh.y"
 { yyval.d = yyvsp[-2].d <= yyvsp[0].d;     ;
     break;}
 case 363:
-#line 3407 "Gmsh.y"
+#line 3408 "Gmsh.y"
 { yyval.d = yyvsp[-2].d >= yyvsp[0].d;     ;
     break;}
 case 364:
-#line 3408 "Gmsh.y"
+#line 3409 "Gmsh.y"
 { yyval.d = yyvsp[-2].d == yyvsp[0].d;     ;
     break;}
 case 365:
-#line 3409 "Gmsh.y"
+#line 3410 "Gmsh.y"
 { yyval.d = yyvsp[-2].d != yyvsp[0].d;     ;
     break;}
 case 366:
-#line 3410 "Gmsh.y"
+#line 3411 "Gmsh.y"
 { yyval.d = yyvsp[-2].d && yyvsp[0].d;     ;
     break;}
 case 367:
-#line 3411 "Gmsh.y"
+#line 3412 "Gmsh.y"
 { yyval.d = yyvsp[-2].d || yyvsp[0].d;     ;
     break;}
 case 368:
-#line 3412 "Gmsh.y"
+#line 3413 "Gmsh.y"
 { yyval.d = yyvsp[-4].d? yyvsp[-2].d : yyvsp[0].d;  ;
     break;}
 case 369:
-#line 3413 "Gmsh.y"
+#line 3414 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 370:
-#line 3414 "Gmsh.y"
+#line 3415 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 371:
-#line 3415 "Gmsh.y"
+#line 3416 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 372:
-#line 3416 "Gmsh.y"
+#line 3417 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 373:
-#line 3417 "Gmsh.y"
+#line 3418 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 374:
-#line 3418 "Gmsh.y"
+#line 3419 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 375:
-#line 3419 "Gmsh.y"
+#line 3420 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 376:
-#line 3420 "Gmsh.y"
+#line 3421 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 377:
-#line 3421 "Gmsh.y"
+#line 3422 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 378:
-#line 3422 "Gmsh.y"
+#line 3423 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 379:
-#line 3423 "Gmsh.y"
+#line 3424 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
 case 380:
-#line 3424 "Gmsh.y"
+#line 3425 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 381:
-#line 3425 "Gmsh.y"
+#line 3426 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 382:
-#line 3426 "Gmsh.y"
+#line 3427 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 383:
-#line 3427 "Gmsh.y"
+#line 3428 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 384:
-#line 3428 "Gmsh.y"
+#line 3429 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 385:
-#line 3429 "Gmsh.y"
+#line 3430 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 386:
-#line 3430 "Gmsh.y"
+#line 3431 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 387:
-#line 3431 "Gmsh.y"
+#line 3432 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 388:
-#line 3432 "Gmsh.y"
+#line 3433 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 389:
-#line 3433 "Gmsh.y"
+#line 3434 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 390:
-#line 3435 "Gmsh.y"
+#line 3436 "Gmsh.y"
 { yyval.d = exp(yyvsp[-1].d);      ;
     break;}
 case 391:
-#line 3436 "Gmsh.y"
+#line 3437 "Gmsh.y"
 { yyval.d = log(yyvsp[-1].d);      ;
     break;}
 case 392:
-#line 3437 "Gmsh.y"
+#line 3438 "Gmsh.y"
 { yyval.d = log10(yyvsp[-1].d);    ;
     break;}
 case 393:
-#line 3438 "Gmsh.y"
+#line 3439 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-1].d);     ;
     break;}
 case 394:
-#line 3439 "Gmsh.y"
+#line 3440 "Gmsh.y"
 { yyval.d = sin(yyvsp[-1].d);      ;
     break;}
 case 395:
-#line 3440 "Gmsh.y"
+#line 3441 "Gmsh.y"
 { yyval.d = asin(yyvsp[-1].d);     ;
     break;}
 case 396:
-#line 3441 "Gmsh.y"
+#line 3442 "Gmsh.y"
 { yyval.d = cos(yyvsp[-1].d);      ;
     break;}
 case 397:
-#line 3442 "Gmsh.y"
+#line 3443 "Gmsh.y"
 { yyval.d = acos(yyvsp[-1].d);     ;
     break;}
 case 398:
-#line 3443 "Gmsh.y"
+#line 3444 "Gmsh.y"
 { yyval.d = tan(yyvsp[-1].d);      ;
     break;}
 case 399:
-#line 3444 "Gmsh.y"
+#line 3445 "Gmsh.y"
 { yyval.d = atan(yyvsp[-1].d);     ;
     break;}
 case 400:
-#line 3445 "Gmsh.y"
+#line 3446 "Gmsh.y"
 { yyval.d = atan2(yyvsp[-3].d, yyvsp[-1].d);;
     break;}
 case 401:
-#line 3446 "Gmsh.y"
+#line 3447 "Gmsh.y"
 { yyval.d = sinh(yyvsp[-1].d);     ;
     break;}
 case 402:
-#line 3447 "Gmsh.y"
+#line 3448 "Gmsh.y"
 { yyval.d = cosh(yyvsp[-1].d);     ;
     break;}
 case 403:
-#line 3448 "Gmsh.y"
+#line 3449 "Gmsh.y"
 { yyval.d = tanh(yyvsp[-1].d);     ;
     break;}
 case 404:
-#line 3449 "Gmsh.y"
+#line 3450 "Gmsh.y"
 { yyval.d = fabs(yyvsp[-1].d);     ;
     break;}
 case 405:
-#line 3450 "Gmsh.y"
+#line 3451 "Gmsh.y"
 { yyval.d = floor(yyvsp[-1].d);    ;
     break;}
 case 406:
-#line 3451 "Gmsh.y"
+#line 3452 "Gmsh.y"
 { yyval.d = ceil(yyvsp[-1].d);     ;
     break;}
 case 407:
-#line 3452 "Gmsh.y"
+#line 3453 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 408:
-#line 3453 "Gmsh.y"
+#line 3454 "Gmsh.y"
 { yyval.d = fmod(yyvsp[-3].d, yyvsp[-1].d); ;
     break;}
 case 409:
-#line 3454 "Gmsh.y"
+#line 3455 "Gmsh.y"
 { yyval.d = sqrt(yyvsp[-3].d*yyvsp[-3].d+yyvsp[-1].d*yyvsp[-1].d); ;
     break;}
 case 410:
-#line 3455 "Gmsh.y"
+#line 3456 "Gmsh.y"
 { yyval.d = yyvsp[-1].d*(double)rand()/(double)RAND_MAX; ;
     break;}
 case 411:
-#line 3464 "Gmsh.y"
+#line 3465 "Gmsh.y"
 { yyval.d = yyvsp[0].d; ;
     break;}
 case 412:
-#line 3465 "Gmsh.y"
+#line 3466 "Gmsh.y"
 { yyval.d = 3.141592653589793; ;
     break;}
 case 413:
-#line 3466 "Gmsh.y"
+#line 3467 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->rank(); ;
     break;}
 case 414:
-#line 3467 "Gmsh.y"
+#line 3468 "Gmsh.y"
 { yyval.d = ParUtil::Instance()->size(); ;
     break;}
 case 415:
-#line 3472 "Gmsh.y"
+#line 3473 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[0].c;
@@ -8371,7 +8372,7 @@ case 415:
     ;
     break;}
 case 416:
-#line 3484 "Gmsh.y"
+#line 3485 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-3].c;
@@ -8392,7 +8393,7 @@ case 416:
     ;
     break;}
 case 417:
-#line 3503 "Gmsh.y"
+#line 3504 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-2].c;
@@ -8407,7 +8408,7 @@ case 417:
     ;
     break;}
 case 418:
-#line 3516 "Gmsh.y"
+#line 3517 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-1].c;
@@ -8421,7 +8422,7 @@ case 418:
     ;
     break;}
 case 419:
-#line 3528 "Gmsh.y"
+#line 3529 "Gmsh.y"
 {
       Symbol TheSymbol;
       TheSymbol.Name = yyvsp[-4].c;
@@ -8442,7 +8443,7 @@ case 419:
     ;
     break;}
 case 420:
-#line 3550 "Gmsh.y"
+#line 3551 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -8461,7 +8462,7 @@ case 420:
     ;
     break;}
 case 421:
-#line 3567 "Gmsh.y"
+#line 3568 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -8480,7 +8481,7 @@ case 421:
     ;
     break;}
 case 422:
-#line 3584 "Gmsh.y"
+#line 3585 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -8499,7 +8500,7 @@ case 422:
     ;
     break;}
 case 423:
-#line 3601 "Gmsh.y"
+#line 3602 "Gmsh.y"
 {
       double (*pNumOpt)(int num, int action, double value);
       StringXNumber *pNumCat;
@@ -8518,130 +8519,130 @@ case 423:
     ;
     break;}
 case 424:
-#line 3621 "Gmsh.y"
+#line 3622 "Gmsh.y"
 {
       memcpy(yyval.v, yyvsp[0].v, 5*sizeof(double));
     ;
     break;}
 case 425:
-#line 3625 "Gmsh.y"
+#line 3626 "Gmsh.y"
 {
       for(int i = 0; i < 5; i++) yyval.v[i] = -yyvsp[0].v[i];
     ;
     break;}
 case 426:
-#line 3629 "Gmsh.y"
+#line 3630 "Gmsh.y"
 { 
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[0].v[i];
     ;
     break;}
 case 427:
-#line 3633 "Gmsh.y"
+#line 3634 "Gmsh.y"
 { 
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] - yyvsp[0].v[i];
     ;
     break;}
 case 428:
-#line 3637 "Gmsh.y"
+#line 3638 "Gmsh.y"
 {
       for(int i = 0; i < 5; i++) yyval.v[i] = yyvsp[-2].v[i] + yyvsp[0].v[i];
     ;
     break;}
 case 429:
-#line 3644 "Gmsh.y"
+#line 3645 "Gmsh.y"
 { 
       yyval.v[0] = yyvsp[-9].d;  yyval.v[1] = yyvsp[-7].d;  yyval.v[2] = yyvsp[-5].d;  yyval.v[3] = yyvsp[-3].d; yyval.v[4] = yyvsp[-1].d;
     ;
     break;}
 case 430:
-#line 3648 "Gmsh.y"
+#line 3649 "Gmsh.y"
 { 
       yyval.v[0] = yyvsp[-7].d;  yyval.v[1] = yyvsp[-5].d;  yyval.v[2] = yyvsp[-3].d;  yyval.v[3] = yyvsp[-1].d; yyval.v[4] = 1.0;
     ;
     break;}
 case 431:
-#line 3652 "Gmsh.y"
+#line 3653 "Gmsh.y"
 {
       yyval.v[0] = yyvsp[-5].d;  yyval.v[1] = yyvsp[-3].d;  yyval.v[2] = yyvsp[-1].d;  yyval.v[3] = 0.0; yyval.v[4] = 1.0;
     ;
     break;}
 case 432:
-#line 3656 "Gmsh.y"
+#line 3657 "Gmsh.y"
 {
       yyval.v[0] = yyvsp[-5].d;  yyval.v[1] = yyvsp[-3].d;  yyval.v[2] = yyvsp[-1].d;  yyval.v[3] = 0.0; yyval.v[4] = 1.0;
     ;
     break;}
 case 433:
-#line 3663 "Gmsh.y"
+#line 3664 "Gmsh.y"
 {
     ;
     break;}
 case 434:
-#line 3666 "Gmsh.y"
+#line 3667 "Gmsh.y"
 {
     ;
     break;}
 case 435:
-#line 3672 "Gmsh.y"
+#line 3673 "Gmsh.y"
 {
     ;
     break;}
 case 436:
-#line 3675 "Gmsh.y"
+#line 3676 "Gmsh.y"
 {
     ;
     break;}
 case 437:
-#line 3681 "Gmsh.y"
+#line 3682 "Gmsh.y"
 {
     ;
     break;}
 case 438:
-#line 3684 "Gmsh.y"
+#line 3685 "Gmsh.y"
 {
        yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 439:
-#line 3688 "Gmsh.y"
+#line 3689 "Gmsh.y"
 {
        yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 440:
-#line 3695 "Gmsh.y"
+#line 3696 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(List_T*));
       List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
 case 441:
-#line 3700 "Gmsh.y"
+#line 3701 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].l));
     ;
     break;}
 case 442:
-#line 3708 "Gmsh.y"
+#line 3709 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 443:
-#line 3713 "Gmsh.y"
+#line 3714 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
     ;
     break;}
 case 444:
-#line 3717 "Gmsh.y"
+#line 3718 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 445:
-#line 3721 "Gmsh.y"
+#line 3722 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
       double *pd;
@@ -8652,7 +8653,7 @@ case 445:
     ;
     break;}
 case 446:
-#line 3733 "Gmsh.y"
+#line 3734 "Gmsh.y"
 { 
       yyval.l = List_Create(2, 1, sizeof(double)); 
       for(double d = yyvsp[-2].d; (yyvsp[-2].d < yyvsp[0].d) ? (d <= yyvsp[0].d) : (d >= yyvsp[0].d); (yyvsp[-2].d < yyvsp[0].d) ? (d += 1.) : (d -= 1.)) 
@@ -8660,7 +8661,7 @@ case 446:
     ;
     break;}
 case 447:
-#line 3739 "Gmsh.y"
+#line 3740 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double)); 
       if(!yyvsp[0].d || (yyvsp[-4].d < yyvsp[-2].d && yyvsp[0].d < 0) || (yyvsp[-4].d > yyvsp[-2].d && yyvsp[0].d > 0)){
@@ -8673,7 +8674,7 @@ case 447:
    ;
     break;}
 case 448:
-#line 3750 "Gmsh.y"
+#line 3751 "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
@@ -8695,7 +8696,7 @@ case 448:
     ;
     break;}
 case 449:
-#line 3770 "Gmsh.y"
+#line 3771 "Gmsh.y"
 {
       yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
@@ -8707,7 +8708,7 @@ case 449:
     ;
     break;}
 case 450:
-#line 3780 "Gmsh.y"
+#line 3781 "Gmsh.y"
 {
       yyval.l = List_Create(List_Nbr(yyvsp[0].l), 1, sizeof(double));
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
@@ -8719,7 +8720,7 @@ case 450:
     ;
     break;}
 case 451:
-#line 3790 "Gmsh.y"
+#line 3791 "Gmsh.y"
 {
       // FIXME: The syntax for this is ugly: we get double semi-colons
       // at the end of the line
@@ -8733,7 +8734,7 @@ case 451:
     ;
     break;}
 case 452:
-#line 3802 "Gmsh.y"
+#line 3803 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -8751,7 +8752,7 @@ case 452:
     ;
     break;}
 case 453:
-#line 3818 "Gmsh.y"
+#line 3819 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -8771,7 +8772,7 @@ case 453:
     ;
     break;}
 case 454:
-#line 3836 "Gmsh.y"
+#line 3837 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -8796,7 +8797,7 @@ case 454:
     ;
     break;}
 case 455:
-#line 3859 "Gmsh.y"
+#line 3860 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       Symbol TheSymbol;
@@ -8823,26 +8824,26 @@ case 455:
     ;
     break;}
 case 456:
-#line 3887 "Gmsh.y"
+#line 3888 "Gmsh.y"
 {
       yyval.l = List_Create(2, 1, sizeof(double));
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 457:
-#line 3892 "Gmsh.y"
+#line 3893 "Gmsh.y"
 {
       yyval.l = yyvsp[0].l;
     ;
     break;}
 case 458:
-#line 3896 "Gmsh.y"
+#line 3897 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].d));
     ;
     break;}
 case 459:
-#line 3900 "Gmsh.y"
+#line 3901 "Gmsh.y"
 {
       for(int i = 0; i < List_Nbr(yyvsp[0].l); i++){
 	double d;
@@ -8853,19 +8854,19 @@ case 459:
     ;
     break;}
 case 460:
-#line 3913 "Gmsh.y"
+#line 3914 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-7].d, (int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d);
     ;
     break;}
 case 461:
-#line 3917 "Gmsh.y"
+#line 3918 "Gmsh.y"
 {
       yyval.u = PACK_COLOR((int)yyvsp[-5].d, (int)yyvsp[-3].d, (int)yyvsp[-1].d, 255);
     ;
     break;}
 case 462:
-#line 3929 "Gmsh.y"
+#line 3930 "Gmsh.y"
 {
       int flag;
       yyval.u = Get_ColorForString(ColorString, -1, yyvsp[0].c, &flag);
@@ -8873,7 +8874,7 @@ case 462:
     ;
     break;}
 case 463:
-#line 3935 "Gmsh.y"
+#line 3936 "Gmsh.y"
 {
       unsigned int (*pColOpt)(int num, int action, unsigned int value);
       StringXColor *pColCat;
@@ -8893,13 +8894,13 @@ case 463:
     ;
     break;}
 case 464:
-#line 3956 "Gmsh.y"
+#line 3957 "Gmsh.y"
 {
       yyval.l = yyvsp[-1].l;
     ;
     break;}
 case 465:
-#line 3960 "Gmsh.y"
+#line 3961 "Gmsh.y"
 {
       yyval.l = List_Create(256, 10, sizeof(unsigned int));
       GmshColorTable *ct = Get_ColorTable((int)yyvsp[-3].d);
@@ -8912,26 +8913,26 @@ case 465:
     ;
     break;}
 case 466:
-#line 3974 "Gmsh.y"
+#line 3975 "Gmsh.y"
 {
       yyval.l = List_Create(256, 10, sizeof(unsigned int));
       List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
 case 467:
-#line 3979 "Gmsh.y"
+#line 3980 "Gmsh.y"
 {
       List_Add(yyval.l, &(yyvsp[0].u));
     ;
     break;}
 case 468:
-#line 3986 "Gmsh.y"
+#line 3987 "Gmsh.y"
 {
       yyval.c = yyvsp[0].c;
     ;
     break;}
 case 469:
-#line 3990 "Gmsh.y"
+#line 3991 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-3].c)+strlen(yyvsp[-1].c)+1)*sizeof(char));
       strcpy(yyval.c, yyvsp[-3].c);  
@@ -8941,7 +8942,7 @@ case 469:
     ;
     break;}
 case 470:
-#line 3998 "Gmsh.y"
+#line 3999 "Gmsh.y"
 {
       yyval.c = (char *)Malloc((strlen(yyvsp[-1].c)+1)*sizeof(char));
       int i;
@@ -8957,13 +8958,13 @@ case 470:
     ;
     break;}
 case 471:
-#line 4012 "Gmsh.y"
+#line 4013 "Gmsh.y"
 {
       yyval.c = yyvsp[-1].c;
     ;
     break;}
 case 472:
-#line 4016 "Gmsh.y"
+#line 4017 "Gmsh.y"
 {
       char tmpstring[1024];
       int i = PrintListOfDouble(yyvsp[-3].c, yyvsp[-1].l, tmpstring);
@@ -8984,7 +8985,7 @@ case 472:
     ;
     break;}
 case 473:
-#line 4035 "Gmsh.y"
+#line 4036 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -9002,7 +9003,7 @@ case 473:
     ;
     break;}
 case 474:
-#line 4051 "Gmsh.y"
+#line 4052 "Gmsh.y"
 { 
       char* (*pStrOpt)(int num, int action, char *value);
       StringXString *pStrCat;
@@ -9241,7 +9242,7 @@ yyerrhandle:
     }
   return 1;
 }
-#line 4068 "Gmsh.y"
+#line 4069 "Gmsh.y"
 
 
 void DeleteSymbol(void *a, void *b){
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 8317ec709d7783432e8bf6b4ff9e8a1226ba53ec..7d7e6b6e3ee9e6fabb8c4db67c6677d0a661deae 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -1,5 +1,5 @@
 %{
-// $Id: Gmsh.y,v 1.177 2004-09-18 01:12:15 geuzaine Exp $
+// $Id: Gmsh.y,v 1.178 2004-09-18 01:51:56 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -2533,10 +2533,11 @@ Command :
    }
    | tCombine tSTRING tEND
     {
+      // for backward compatibility
       if(!strcmp($2, "Views"))
-	CombineViews(1, CTX.post.combine_remove_orig);
+	CombineViews(0, 1, CTX.post.combine_remove_orig);
       else if(!strcmp($2, "TimeSteps"))
-	CombineViews_Time(2, CTX.post.combine_remove_orig);
+	CombineViews(1, 2, CTX.post.combine_remove_orig);
       else
 	yymsg(GERROR, "Unknown 'Combine' command");
     } 
diff --git a/Parser/Gmsh.yy.cpp b/Parser/Gmsh.yy.cpp
index 81e43d6d6a0ea2f2adba9d4529036704478904e5..a396059f7e6d67602150875f1c623080afca9da4 100644
--- a/Parser/Gmsh.yy.cpp
+++ b/Parser/Gmsh.yy.cpp
@@ -2,7 +2,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.201 2004-09-18 01:12:16 geuzaine Exp $
+ * $Header: /cvsroot/gmsh/Parser/Gmsh.yy.cpp,v 1.202 2004-09-18 01:51:56 geuzaine Exp $
  */
 
 #define FLEX_SCANNER
@@ -1019,7 +1019,7 @@ char *yytext;
 #line 1 "Gmsh.l"
 #define INITIAL 0
 #line 2 "Gmsh.l"
-// $Id: Gmsh.yy.cpp,v 1.201 2004-09-18 01:12:16 geuzaine Exp $
+// $Id: Gmsh.yy.cpp,v 1.202 2004-09-18 01:51:56 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //