diff --git a/Common/Options.cpp b/Common/Options.cpp
index 7fe6ed95682de90556c6e429ec1f2304184e9d07..205da1e1327b2c6b386ad9f9681234f665101f3f 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.70 2002-01-27 20:47:33 geuzaine Exp $
+// $Id: Options.cpp,v 1.71 2002-02-08 17:33:52 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -2091,8 +2091,10 @@ double opt_view_timestep(OPT_ARGS_NUM){
   GET_VIEW(0.) ;
   if(action & GMSH_SET){
     v->TimeStep = (int)val;
-    if(v->TimeStep > v->NbTimeStep-1 || v->TimeStep < 0)
+    if(v->TimeStep > v->NbTimeStep-1)
       v->TimeStep = 0 ;
+    else if(v->TimeStep < 0)
+      v->TimeStep = v->NbTimeStep-1;
     v->Changed = 1;
   }
 #ifdef _FLTK
@@ -2476,7 +2478,7 @@ double opt_view_show_time(OPT_ARGS_NUM){
   }
 #ifdef _FLTK
   if(WID && (action & GMSH_GUI) && (num == WID->view_number))
-    WID->view_butt[50]->value(v->ShowTime);
+    WID->view_butt[8]->value(v->ShowTime);
 #endif
   return v->ShowTime;
 }
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 91b71d76a8bd4da06ddebcc8b2943c489d1e60a6..1ef3d57b854af9c13b6bfb4d3d3e16c9ee9a62e1 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.104 2002-01-27 20:47:33 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.105 2002-02-08 17:33:52 geuzaine Exp $
 
 #include <sys/types.h>
 #include <signal.h>
@@ -1971,6 +1971,17 @@ void view_options_timestep_cb(CALLBACK_ARGS){
   Draw();
 }
 
+void view_options_timestep_decr_cb(CALLBACK_ARGS){
+  int i=(long int)data;
+  opt_view_timestep(i, GMSH_SET|GMSH_GUI, opt_view_timestep(i,GMSH_GET,0)-1);
+  Draw();
+}
+void view_options_timestep_incr_cb(CALLBACK_ARGS){
+  int i=(long int)data;
+  opt_view_timestep(i, GMSH_SET|GMSH_GUI, opt_view_timestep(i,GMSH_GET,0)+1);
+  Draw();
+}
+
 void view_options_ok_cb(CALLBACK_ARGS){
   int i, links, force=0;
 
@@ -2046,8 +2057,8 @@ void view_options_ok_cb(CALLBACK_ARGS){
 	opt_view_auto_position(i, GMSH_SET, 
 			       WID->view_butt[7]->value());
 
-      if(force || WID->view_butt[50]->changed())
-	opt_view_show_time(i, GMSH_SET, WID->view_butt[50]->value());
+      if(force || WID->view_butt[8]->changed())
+	opt_view_show_time(i, GMSH_SET, WID->view_butt[8]->value());
 
       if(force || WID->view_butt[5]->changed())
 	opt_view_draw_strings(i, GMSH_SET, WID->view_butt[5]->value());
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index 2cac29d31adf45435d9d586e1b162246015ce368..600570d4188bf8f0136a4c95269fec393d3c7daf 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -234,6 +234,8 @@ void view_plugin_cb(CALLBACK_ARGS) ;
 void view_options_plugin_cb(CALLBACK_ARGS) ;
 void view_options_custom_cb(CALLBACK_ARGS) ;
 void view_options_timestep_cb(CALLBACK_ARGS) ;
+void view_options_timestep_decr_cb(CALLBACK_ARGS);
+void view_options_timestep_incr_cb(CALLBACK_ARGS);
 void view_options_ok_cb(CALLBACK_ARGS) ;
 
 #endif
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index fc1c51550f2e281ffbc6ddd3d1809206a50ca392..291d3a890cc6e0a6220429b2703fb9f4a1cc7428 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.147 2002-01-27 21:24:50 geuzaine Exp $
+// $Id: GUI.cpp,v 1.148 2002-02-08 17:33:52 geuzaine Exp $
 
 // To make the interface as visually consistent as possible, please:
 // - use the IW, BB, BH, BW and WB values
@@ -2226,9 +2226,9 @@ void GUI::create_view_options_window(int num){
       Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "General");
       o->labelsize(CTX.fontsize);
       
-      view_butt[1] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW/2-WB, BH, "3D view");
-      view_butt[2] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "2D space table");
-      view_butt[3] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW/2-WB, BH, "2D time table");
+      view_butt[1] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW/2-WB, BH, "3D view");
+      view_butt[2] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW/2-WB, BH, "2D space table");
+      view_butt[3] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW/2-WB, BH, "2D time table");
       for(i=1 ; i<=3 ; i++){
 	view_butt[i]->type(FL_RADIO_BUTTON);
 	view_butt[i]->down_box(RADIO_BOX);
@@ -2237,30 +2237,41 @@ void GUI::create_view_options_window(int num){
 	view_butt[i]->callback(set_changed_cb, 0);
       }
       
-      view_input[0] = new Fl_Input(2*WB, 2*WB+1*BH, IW, BH, "Name");
-      view_input[1] = new Fl_Input(2*WB, 2*WB+2*BH, IW, BH, "Format");
+      view_input[0] = new Fl_Input(2*WB, 2*WB+4*BH, IW, BH, "Name");
+      view_input[1] = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Format");
       for(i=0 ; i<=1 ; i++){
 	view_input[i]->labelsize(CTX.fontsize);
 	view_input[i]->textsize(CTX.fontsize);
 	view_input[i]->align(FL_ALIGN_RIGHT);
 	view_input[i]->callback(set_changed_cb, 0);
       }
-      view_butt[4] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW/2-WB, BH, "Show scale");
-      view_butt[5] = new Fl_Check_Button(width/2, 2*WB+4*BH, BW/2-WB, BH, "Show annotations");
-      view_butt[6] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW/2-WB, BH, "Transparent scale");
-      view_butt[7] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW/2-WB, BH, "Auto position");
-      for(i=4 ; i<=7 ; i++){
-	view_butt[i]->type(FL_TOGGLE_BUTTON);
-	view_butt[i]->down_box(TOGGLE_BOX);
-	view_butt[i]->labelsize(CTX.fontsize);
-	view_butt[i]->selection_color(TOGGLE_COLOR);
-	view_butt[i]->callback(set_changed_cb, 0);
-      }
-      
-      view_value[20] = new Fl_Value_Input(2*WB, 2*WB+ 6*BH, IW, BH, "X position");
-      view_value[21] = new Fl_Value_Input(2*WB, 2*WB+ 7*BH, IW, BH, "Y position");
-      view_value[22] = new Fl_Value_Input(2*WB, 2*WB+ 8*BH, IW, BH, "Width");
-      view_value[23] = new Fl_Value_Input(2*WB, 2*WB+ 9*BH, IW, BH, "Height");
+
+      int sw=(int)(1.5*CTX.fontsize);
+      view_butt_rep[0] = new Fl_Repeat_Button(2*WB, 2*WB+6*BH, sw, BH, "-");
+      view_butt_rep[0]->labelsize(CTX.fontsize);
+      //no set_changed since has its own callback
+      view_butt_rep[1] = new Fl_Repeat_Button(2*WB+IW-sw, 2*WB+6*BH, sw, BH, "+");
+      view_butt_rep[1]->labelsize(CTX.fontsize);
+      //no set_changed since has its own callback
+      view_value[50] = new Fl_Value_Input(2*WB+sw, 2*WB+6*BH, IW-2*sw, BH);
+      view_value[50]->labelsize(CTX.fontsize);
+      view_value[50]->textsize(CTX.fontsize);
+      view_value[50]->type(FL_HORIZONTAL);
+      view_value[50]->align(FL_ALIGN_RIGHT);
+      view_value[50]->minimum(0); 
+      view_value[50]->maximum(0); 
+      view_value[50]->step(1);
+      //no set_changed since has its own callback
+      Fl_Box *a = new Fl_Box(2*WB+IW, 2*WB+6*BH, IW/2, BH, "Time Step");
+      a->box(FL_NO_BOX);
+      a->labelsize(CTX.fontsize);
+      a->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+
+
+      view_value[20] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW/2, BH);
+      view_value[21] = new Fl_Value_Input(2*WB+IW/2, 2*WB+7*BH, IW/2, BH, "Position");
+      view_value[22] = new Fl_Value_Input(2*WB, 2*WB+8*BH, IW/2, BH);
+      view_value[23] = new Fl_Value_Input(2*WB+IW/2, 2*WB+8*BH, IW/2, BH, "Size");
       for(i=20 ; i<=23 ; i++){
 	view_value[i]->labelsize(CTX.fontsize);
 	view_value[i]->textsize(CTX.fontsize);
@@ -2268,6 +2279,21 @@ void GUI::create_view_options_window(int num){
 	view_value[i]->align(FL_ALIGN_RIGHT);
 	view_value[i]->callback(set_changed_cb, 0);
       }
+
+
+      view_butt[8] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW/2-WB, BH, "Show time");
+      view_butt[5] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "Show annotations");
+      view_butt[4] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW/2-WB, BH, "Show scale");
+      view_butt[6] = new Fl_Check_Button(width/2, 2*WB+4*BH, BW/2-WB, BH, "Transparent scale");
+      view_butt[7] = new Fl_Check_Button(width/2, 2*WB+5*BH, BW/2-WB, BH, "Auto position");
+      for(i=4 ; i<=8 ; i++){
+	view_butt[i]->type(FL_TOGGLE_BUTTON);
+	view_butt[i]->down_box(TOGGLE_BOX);
+	view_butt[i]->labelsize(CTX.fontsize);
+	view_butt[i]->selection_color(TOGGLE_COLOR);
+	view_butt[i]->callback(set_changed_cb, 0);
+      }
+      
       
       o->end();
     }
@@ -2447,31 +2473,6 @@ void GUI::create_view_options_window(int num){
       }	
       o->end();
     }
-    // Time step
-    { 
-      view_timestep = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Time step");
-      view_timestep->labelsize(CTX.fontsize);
-      view_timestep->hide();
-      
-      view_value[50] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Time step number");
-      view_value[50]->labelsize(CTX.fontsize);
-      view_value[50]->textsize(CTX.fontsize);
-      view_value[50]->type(FL_HORIZONTAL);
-      view_value[50]->align(FL_ALIGN_RIGHT);
-      view_value[50]->minimum(0); 
-      view_value[50]->maximum(0); 
-      view_value[50]->step(1);
-      //no set_changed since timestep has its own callback
-      
-      view_butt[50] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW/2-WB, BH, "Display time");
-      view_butt[50]->type(FL_TOGGLE_BUTTON);
-      view_butt[50]->down_box(TOGGLE_BOX);
-      view_butt[50]->labelsize(CTX.fontsize);
-      view_butt[50]->selection_color(TOGGLE_COLOR);
-      view_butt[50]->callback(set_changed_cb, 0);
-      
-      view_timestep->end();
-    }
     // Aspect
     { 
       Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect");
@@ -2654,10 +2655,22 @@ void GUI::update_view_window(int num){
   }
 
   // timestep
-  if(v->NbTimeStep==1) view_timestep->deactivate();
-  else view_timestep->activate();
+  if(v->NbTimeStep==1){
+    view_value[50]->deactivate();
+    view_butt_rep[0]->deactivate();
+    view_butt_rep[1]->deactivate();
+    view_butt[8]->deactivate();
+  }
+  else{
+    view_value[50]->activate();
+    view_butt_rep[0]->activate();
+    view_butt_rep[1]->activate();
+    view_butt[8]->activate();
+  }
   view_value[50]->callback(view_options_timestep_cb, (void*)num);
   view_value[50]->maximum(v->NbTimeStep-1); 
+  view_butt_rep[0]->callback(view_options_timestep_decr_cb, (void*)num);
+  view_butt_rep[1]->callback(view_options_timestep_incr_cb, (void*)num);
   opt_view_timestep(num, GMSH_GUI, 0);
   opt_view_show_time(num, GMSH_GUI, 0);
 
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index ccfa3b4af6c91a836f32753c555a9d6e783e6efd..3360c63f2a9a840e7fe56908977f0c5d157e8621 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -12,6 +12,7 @@
 #include <FL/Fl_Tabs.H>
 #include <FL/Fl_Button.H>
 #include <FL/Fl_Return_Button.H>
+#include <FL/Fl_Repeat_Button.H>
 #include <FL/Fl_Light_Button.H>
 #include <FL/Fl_Menu_Button.H>
 #include <FL/Fl_Check_Button.H>
@@ -168,11 +169,13 @@ public:
   // view options window
   int view_number ;
   Fl_Window        *view_window ;
-  Fl_Group         *view_3d, *view_2d, *view_range, *view_timestep, *view_vector ;
+  Fl_Group         *view_3d, *view_2d, *view_range, *view_vector ;
 #define VIEW_OPT_BUTT 100
   Fl_Check_Button  *view_butt[VIEW_OPT_BUTT] ;
   Fl_Value_Input   *view_value[VIEW_OPT_BUTT] ;
   Fl_Input         *view_input[VIEW_OPT_BUTT] ;
+  Fl_Repeat_Button *view_butt_rep[VIEW_OPT_BUTT] ;
+
   Colorbar_Window  *view_colorbar_window ;
   Fl_Return_Button *view_ok ;