diff --git a/Fltk/Bitmaps.h b/Fltk/Bitmaps.h
index b959cb2bc70a4e0a0cf0724111821de18b140e3b..8f345a44d5494d03680a6707cd4c5fb340307a8c 100644
--- a/Fltk/Bitmaps.h
+++ b/Fltk/Bitmaps.h
@@ -89,4 +89,18 @@ static unsigned char rotate_bits[] = {
    0x02, 0x04, 0x02, 0x00, 0x24, 0x00, 0x68, 0x00, 0xf0, 0x00, 0x60, 0x00,
    0x20, 0x00 };
 
+// 'Step backward button' bitmap
+#define stepbackward_width 12
+#define stepbackward_height 13
+static char stepbackward_bits[] = {
+ 0x00,0xf0,0xc0,0xf6,0x20,0xf5,0x90,0xf4,0x48,0xf4,0x24,0xf4,0x12,0xf4,0x24,
+ 0xf4,0x48,0xf4,0x90,0xf4,0x20,0xf5,0xc0,0xf6,0x00,0xf0};
+
+// 'Step forward button' bitmap
+#define stepforward_width 12
+#define stepforward_height 13
+static char stepforward_bits[] = {
+ 0x00,0xf0,0x36,0xf0,0x4a,0xf0,0x92,0xf0,0x22,0xf1,0x42,0xf2,0x82,0xf4,0x42,
+ 0xf2,0x22,0xf1,0x92,0xf0,0x4a,0xf0,0x36,0xf0,0x00,0xf0};
+
 #endif
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index fdbda4be38ff12eca2d091142e8b5eebb5aefce0..3785df3702b930fa25d0d5ef51b230b228102e3d 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.530 2007-05-13 10:37:01 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.531 2007-05-19 16:40:03 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -571,6 +571,16 @@ void status_rewind_cb(CALLBACK_ARGS)
   Draw();
 }
 
+void status_stepbackward_cb(CALLBACK_ARGS)
+{
+  ManualPlay(!CTX.post.anim_cycle, -1);
+}
+
+void status_stepforward_cb(CALLBACK_ARGS)
+{
+  ManualPlay(!CTX.post.anim_cycle, 1);
+}
+
 // File Menu
 
 void file_new_cb(CALLBACK_ARGS)
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index 0211568188b42224780cef55f2303567ad2ec24c..343b53923cdf4e2f11ccef721e4fb7cc1ddd2684 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -42,6 +42,8 @@ void status_xyz1p_cb(CALLBACK_ARGS);
 void status_play_cb(CALLBACK_ARGS);
 void status_pause_cb(CALLBACK_ARGS);
 void status_rewind_cb(CALLBACK_ARGS);
+void status_stepbackward_cb(CALLBACK_ARGS);
+void status_stepforward_cb(CALLBACK_ARGS);
 
 // File Menu
 
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 38274ddb8df5fe415e180269c6a0ce829952d9b5..43d742f2582a630e7f88f6d045995dc99c112694 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.614 2007-05-07 08:36:36 geuzaine Exp $
+// $Id: GUI.cpp,v 1.615 2007-05-19 16:40:03 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -1381,6 +1381,15 @@ void GUI::create_graphic_window()
   rewind_bmp->label(g_status_butt[6]);
   g_status_butt[6]->deactivate();
 
+  g_status_butt[10] = new Fl_Button(x, glheight + 2, sw, sht);
+  x += sw;
+  g_status_butt[10]->callback(status_stepbackward_cb);
+  g_status_butt[10]->tooltip("Step backward");
+  stepbackward_bmp = new Fl_Bitmap(stepbackward_bits, stepbackward_width,
+                                   stepbackward_height);
+  stepbackward_bmp->label(g_status_butt[10]);
+  g_status_butt[10]->deactivate();
+
   g_status_butt[7] = new Fl_Button(x, glheight + 2, sw, sht);
   x += sw;
   g_status_butt[7]->callback(status_play_cb);
@@ -1390,7 +1399,16 @@ void GUI::create_graphic_window()
   stop_bmp = new Fl_Bitmap(stop_bits, stop_width, stop_height);
   g_status_butt[7]->deactivate();
 
-  for(int i = 0; i < 10; i++) {
+  g_status_butt[11] = new Fl_Button(x, glheight + 2, sw, sht);
+  x += sw;
+  g_status_butt[11]->callback(status_stepforward_cb);
+  g_status_butt[11]->tooltip("Step forward");
+  stepforward_bmp = new Fl_Bitmap(stepforward_bits, stepforward_width,
+                                   stepforward_height);
+  stepforward_bmp->label(g_status_butt[11]);
+  g_status_butt[11]->deactivate();
+
+  for(int i = 0; i < 12; i++) {
     g_status_butt[i]->box(FL_FLAT_BOX);
     g_status_butt[i]->selection_color(FL_WHITE);
     g_status_butt[i]->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
@@ -1467,10 +1485,14 @@ void GUI::check_anim_buttons()
   if(!play) {
     g_status_butt[6]->deactivate();
     g_status_butt[7]->deactivate();
+    g_status_butt[10]->deactivate();
+    g_status_butt[11]->deactivate();
   }
   else {
     g_status_butt[6]->activate();
     g_status_butt[7]->activate();
+    g_status_butt[10]->activate();
+    g_status_butt[11]->activate();
   }
 }
 
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index 94f5002f42270316876b8e1e161133eb51fc41c8..7f29505c6708a14428fea144e8f8924c3763d588 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -127,7 +127,9 @@ class GUI{
   Fl_Scroll *m_scroll;
 
   // Bitmaps
-  Fl_Bitmap  *abort_bmp, *start_bmp, *stop_bmp, *rewind_bmp, *rotate_bmp, *ortho_bmp;
+  Fl_Bitmap  *abort_bmp, *rotate_bmp, *ortho_bmp;
+  Fl_Bitmap  *start_bmp, *stop_bmp, *rewind_bmp, *stepbackward_bmp, *stepforward_bmp;
+
   void add_multiline_in_browser(Fl_Browser *o, char* prefix, char *str);
 
 public:
@@ -150,7 +152,7 @@ public:
   // graphic window
   Fl_Window        *g_window;
   Opengl_Window    *g_opengl_window;
-  Fl_Button        *g_status_butt[10];
+  Fl_Button        *g_status_butt[12];
   Fl_Box           *g_status_label[2];
 
   // Option window