diff --git a/Graphics/drawScales.cpp b/Graphics/drawScales.cpp
index 3c133781cea69d1d32c74b39d385db4cf10cd0fc..07663b4ab8f686b214ff08ef378aa97c65ba3a9b 100644
--- a/Graphics/drawScales.cpp
+++ b/Graphics/drawScales.cpp
@@ -172,57 +172,61 @@ static void drawScaleLabel(drawContext *ctx, PView *p, double xmin, double ymin,
   char label[1024];
 
   int nt = data->getNumTimeSteps();
+  int n0 = data->getFirstNonEmptyTimeStep();
+  int n = (nt - n0 > 0) ? nt - n0 : 1;
   char time[256];
   sprintf(time, opt->format.c_str(), data->getTime(opt->timeStep));
   int choice = opt->showTime;
   if(choice == 3){ // automatic
-    if(nt == 1) choice = 0; // nothing
-    else if(nt == 2) choice = 2; // harmonic
+    if(n == 1) choice = 0; // nothing
+    else if(n == 2) choice = 2; // harmonic
     else choice = 4; // multi-step data
   }
   switch(choice){
   case 1: // time series
-    if(nt == 1)
+    if(n == 1)
       sprintf(label, "%s - time %s", data->getName().c_str(), time);
     else
-      sprintf(label, "%s - time %s (%d/%d)", data->getName().c_str(),
-              time, opt->timeStep + 1, data->getNumTimeSteps());
+      sprintf(label, "%s - time %s (step %d in [0,%d])", data->getName().c_str(),
+              time, opt->timeStep, data->getNumTimeSteps() - 1);
     break;
   case 2: // harmonic data
-    if(nt <= 2)
+    if(n <= 2)
       sprintf(label, "%s - %s part", data->getName().c_str(),
-              (opt->timeStep % 2) ? "imaginary" : "real");
+              ((opt->timeStep - n0) % 2) ? "imaginary" : "real");
     else
-      sprintf(label, "%s - harmonic %s (%d/%d, %s part)", data->getName().c_str(),
-              time, opt->timeStep / 2 + 1, data->getNumTimeSteps() / 2,
-              (opt->timeStep % 2) ? "imaginary" : "real");
+      sprintf(label, "%s - harmonic %s (%s part, step %d in [0,%d])",
+              data->getName().c_str(), time,
+              ((opt->timeStep - n0) % 2) ? "imaginary" : "real",
+              opt->timeStep, data->getNumTimeSteps() - 1);
     break;
   case 3: // automatic
     // never here
     break;
   case 4: // multi-step data
-    if(nt == 1)
+    if(n == 1)
       sprintf(label, "%s - step %d", data->getName().c_str(), opt->timeStep);
     else
-      sprintf(label, "%s - step %d (%d/%d)", data->getName().c_str(),
-              opt->timeStep, opt->timeStep + 1, data->getNumTimeSteps());
+      sprintf(label, "%s - step %d in [0,%d]", data->getName().c_str(),
+              opt->timeStep, data->getNumTimeSteps() - 1);
     break;
   case 5: // real eigenvalues
-    if(nt == 1)
+    if(n == 1)
       sprintf(label, "%s - eigenvalue %s", data->getName().c_str(),
               time);
     else
-      sprintf(label, "%s - eigenvalue %s (%d/%d)", data->getName().c_str(),
-              time, opt->timeStep + 1, data->getNumTimeSteps());
+      sprintf(label, "%s - eigenvalue %s (step %d in [0,%d])", data->getName().c_str(),
+              time, opt->timeStep, data->getNumTimeSteps() - 1);
     break;
   case 6: // complex eigenvalues
-    if(nt == 1)
+    if(n == 1)
       sprintf(label, "%s - eigenvalue %s (%s part)", data->getName().c_str(),
-              time, (opt->timeStep % 2) ? "imaginary" : "real");
+              time, ((opt->timeStep - n0) % 2) ? "imaginary" : "real");
     else
-      sprintf(label, "%s - eigenvalue %s (%d/%d, %s part)", data->getName().c_str(),
-              time, opt->timeStep / 2 + 1, data->getNumTimeSteps() / 2,
-              (opt->timeStep % 2) ? "imaginary" : "real");
+      sprintf(label, "%s - eigenvalue %s (%s part, step %d in [0,%d])",
+              data->getName().c_str(), time,
+              ((opt->timeStep - n0) % 2) ? "imaginary" : "real",
+              opt->timeStep, data->getNumTimeSteps() - 1);
     break;
   default:
     sprintf(label, "%s", data->getName().c_str());