diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp
index a2642fb3dfbf0ba97ef82506080a940f8a0c318a..867ebbae9b6c03d5704789244690c768c1ffc131 100644
--- a/Fltk/graphicWindow.cpp
+++ b/Fltk/graphicWindow.cpp
@@ -235,11 +235,13 @@ void status_play_manual(int time, int step)
         // skip any empty steps (useful when merging only some steps)
         int newStep = (int)opt_view_timestep(i, GMSH_GET, 0) + step;
         int totalSteps = (int)opt_view_nb_timestep(i, GMSH_GET, 0);
-        while(newStep < totalSteps){
+        for(int j = 0; j < totalSteps; j++){
           if(PView::list[i]->getData()->hasTimeStep(newStep))
             break;
           else
             newStep += step;
+          if(newStep < 0) newStep = totalSteps - 1;
+          if(newStep > totalSteps - 1) newStep = 0;
         }
         opt_view_timestep(i, GMSH_SET | GMSH_GUI, newStep);
       }
diff --git a/Post/PViewDataGModel.cpp b/Post/PViewDataGModel.cpp
index e39342e480beec0be353bb968ddc7a34083af38a..d915edf87e218596d318393ebf1951da3e897367 100644
--- a/Post/PViewDataGModel.cpp
+++ b/Post/PViewDataGModel.cpp
@@ -489,7 +489,8 @@ bool PViewDataGModel::skipElement(int step, int ent, int ele, bool checkVisibili
 
 bool PViewDataGModel::hasTimeStep(int step)
 {
-  if(step < getNumTimeSteps() && _steps[step]->getNumData()) return true;
+  if(step >= 0 && step < getNumTimeSteps() && _steps[step]->getNumData())
+    return true;
   return false;
 }