diff --git a/Plugin/Curl.cpp b/Plugin/Curl.cpp
index c09d3e5b2e070d7a614d1f6e79695e04e95d072f..bec30666b9dbd5736d9613eb4fbd2279e4db3553 100644
--- a/Plugin/Curl.cpp
+++ b/Plugin/Curl.cpp
@@ -40,7 +40,7 @@ StringXNumber *GMSH_CurlPlugin::getOption(int iopt)
 PView *GMSH_CurlPlugin::execute(PView *v)
 {
   int iView = (int)CurlOptions_Number[0].def;
-  
+
   PView *v1 = getView(iView, v);
   if(!v1) return v;
 
@@ -52,20 +52,21 @@ PView *GMSH_CurlPlugin::execute(PView *v)
 
   PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
+  int firstNonEmptyStep =  data1->getFirstNonEmptyTimeStep();
 
-  for(int ent = 0; ent < data1->getNumEntities(0); ent++){
-    for(int ele = 0; ele < data1->getNumElements(0, ent); ele++){
-      if(data1->skipElement(0, ent, ele)) continue;
-      int numComp = data1->getNumComponents(0, ent, ele);
+  for(int ent = 0; ent < data1->getNumEntities(firstNonEmptyStep); ent++){
+    for(int ele = 0; ele < data1->getNumElements(firstNonEmptyStep, ent); ele++){
+      if(data1->skipElement(firstNonEmptyStep, ent, ele)) continue;
+      int numComp = data1->getNumComponents(firstNonEmptyStep, ent, ele);
       if(numComp != 3) continue;
-      int type = data1->getType(0, ent, ele);
+      int type = data1->getType(firstNonEmptyStep, ent, ele);
       std::vector<double> *out = data2->incrementList(3, type);
       if(!out) continue;
-      int numNodes = data1->getNumNodes(0, ent, ele);
+      int numNodes = data1->getNumNodes(firstNonEmptyStep, ent, ele);
       double x[8], y[8], z[8], val[8 * 3];
       for(int nod = 0; nod < numNodes; nod++)
-        data1->getNode(0, ent, ele, nod, x[nod], y[nod], z[nod]);
-      int dim = data1->getDimension(0, ent, ele);
+        data1->getNode(firstNonEmptyStep, ent, ele, nod, x[nod], y[nod], z[nod]);
+      int dim = data1->getDimension(firstNonEmptyStep, ent, ele);
       elementFactory factory;
       element *element = factory.create(numNodes, dim, x, y, z);
       if(!element) continue;
@@ -73,6 +74,7 @@ PView *GMSH_CurlPlugin::execute(PView *v)
       for(int nod = 0; nod < numNodes; nod++) out->push_back(y[nod]);
       for(int nod = 0; nod < numNodes; nod++) out->push_back(z[nod]);
       for(int step = 0; step < data1->getNumTimeSteps(); step++){
+        if(!data1->hasTimeStep(step)) continue;
         for(int nod = 0; nod < numNodes; nod++)
           for(int comp = 0; comp < numComp; comp++)
             data1->getValue(step, ent, ele, nod, comp, val[numComp * nod + comp]);
@@ -90,12 +92,13 @@ PView *GMSH_CurlPlugin::execute(PView *v)
   }
 
   for(int i = 0; i < data1->getNumTimeSteps(); i++){
+    if(!data1->hasTimeStep(i)) continue;
     double time = data1->getTime(i);
     data2->Time.push_back(time);
   }
   data2->setName(data1->getName() + "_Curl");
   data2->setFileName(data1->getName() + "_Curl.pos");
   data2->finalize();
-  
+
   return v2;
 }
diff --git a/Plugin/Divergence.cpp b/Plugin/Divergence.cpp
index 6b87dee4c61b0e986962424e790b074c0e3c152b..ffabf5a367b97227a25f7d7f6307665f4a7dc131 100644
--- a/Plugin/Divergence.cpp
+++ b/Plugin/Divergence.cpp
@@ -40,7 +40,7 @@ StringXNumber *GMSH_DivergencePlugin::getOption(int iopt)
 PView *GMSH_DivergencePlugin::execute(PView *v)
 {
   int iView = (int)DivergenceOptions_Number[0].def;
-  
+
   PView *v1 = getView(iView, v);
   if(!v1) return v;
 
@@ -52,20 +52,21 @@ PView *GMSH_DivergencePlugin::execute(PView *v)
 
   PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
+  int firstNonEmptyStep =  data1->getFirstNonEmptyTimeStep();
 
-  for(int ent = 0; ent < data1->getNumEntities(0); ent++){
-    for(int ele = 0; ele < data1->getNumElements(0, ent); ele++){
-      if(data1->skipElement(0, ent, ele)) continue;
-      int numComp = data1->getNumComponents(0, ent, ele);
+  for(int ent = 0; ent < data1->getNumEntities(firstNonEmptyStep); ent++){
+    for(int ele = 0; ele < data1->getNumElements(firstNonEmptyStep, ent); ele++){
+      if(data1->skipElement(firstNonEmptyStep, ent, ele)) continue;
+      int numComp = data1->getNumComponents(firstNonEmptyStep, ent, ele);
       if(numComp != 3) continue;
-      int type = data1->getType(0, ent, ele);
+      int type = data1->getType(firstNonEmptyStep, ent, ele);
       std::vector<double> *out = data2->incrementList(1, type);
       if(!out) continue;
-      int numNodes = data1->getNumNodes(0, ent, ele);
+      int numNodes = data1->getNumNodes(firstNonEmptyStep, ent, ele);
       double x[8], y[8], z[8], val[8 * 3];
       for(int nod = 0; nod < numNodes; nod++)
-        data1->getNode(0, ent, ele, nod, x[nod], y[nod], z[nod]);
-      int dim = data1->getDimension(0, ent, ele);
+        data1->getNode(firstNonEmptyStep, ent, ele, nod, x[nod], y[nod], z[nod]);
+      int dim = data1->getDimension(firstNonEmptyStep, ent, ele);
       elementFactory factory;
       element *element = factory.create(numNodes, dim, x, y, z);
       if(!element) continue;
@@ -73,6 +74,7 @@ PView *GMSH_DivergencePlugin::execute(PView *v)
       for(int nod = 0; nod < numNodes; nod++) out->push_back(y[nod]);
       for(int nod = 0; nod < numNodes; nod++) out->push_back(z[nod]);
       for(int step = 0; step < data1->getNumTimeSteps(); step++){
+        if(!data1->hasTimeStep(step)) continue;
         for(int nod = 0; nod < numNodes; nod++)
           for(int comp = 0; comp < numComp; comp++)
             data1->getValue(step, ent, ele, nod, comp, val[numComp * nod + comp]);
@@ -88,6 +90,7 @@ PView *GMSH_DivergencePlugin::execute(PView *v)
   }
 
   for(int i = 0; i < data1->getNumTimeSteps(); i++){
+    if(!data1->hasTimeStep(i)) continue;
     double time = data1->getTime(i);
     data2->Time.push_back(time);
   }
diff --git a/Plugin/Gradient.cpp b/Plugin/Gradient.cpp
index 4f954ed03d7e819ac5d5042a7a17462d578821a8..98fe67a2985aca278c06d95099032f29be3428b7 100644
--- a/Plugin/Gradient.cpp
+++ b/Plugin/Gradient.cpp
@@ -40,7 +40,7 @@ StringXNumber *GMSH_GradientPlugin::getOption(int iopt)
 PView *GMSH_GradientPlugin::execute(PView *v)
 {
   int iView = (int)GradientOptions_Number[0].def;
-  
+
   PView *v1 = getView(iView, v);
   if(!v1) return v;
 
@@ -52,20 +52,21 @@ PView *GMSH_GradientPlugin::execute(PView *v)
 
   PView *v2 = new PView();
   PViewDataList *data2 = getDataList(v2);
+  int firstNonEmptyStep =  data1->getFirstNonEmptyTimeStep();
 
-  for(int ent = 0; ent < data1->getNumEntities(0); ent++){
-    for(int ele = 0; ele < data1->getNumElements(0, ent); ele++){
-      if(data1->skipElement(0, ent, ele)) continue;
-      int numComp = data1->getNumComponents(0, ent, ele);
+  for(int ent = 0; ent < data1->getNumEntities(firstNonEmptyStep); ent++){
+    for(int ele = 0; ele < data1->getNumElements(firstNonEmptyStep, ent); ele++){
+      if(data1->skipElement(firstNonEmptyStep, ent, ele)) continue;
+      int numComp = data1->getNumComponents(firstNonEmptyStep, ent, ele);
       if(numComp != 1 && numComp != 3) continue;
-      int type = data1->getType(0, ent, ele);
+      int type = data1->getType(firstNonEmptyStep, ent, ele);
       std::vector<double> *out = data2->incrementList((numComp == 1) ? 3 : 9, type);
       if(!out) continue;
-      int numNodes = data1->getNumNodes(0, ent, ele);
+      int numNodes = data1->getNumNodes(firstNonEmptyStep, ent, ele);
       double x[8], y[8], z[8], val[8 * 3];
       for(int nod = 0; nod < numNodes; nod++)
-        data1->getNode(0, ent, ele, nod, x[nod], y[nod], z[nod]);
-      int dim = data1->getDimension(0, ent, ele);
+        data1->getNode(firstNonEmptyStep, ent, ele, nod, x[nod], y[nod], z[nod]);
+      int dim = data1->getDimension(firstNonEmptyStep, ent, ele);
       elementFactory factory;
       element *element = factory.create(numNodes, dim, x, y, z);
       if(!element) continue;
@@ -73,6 +74,7 @@ PView *GMSH_GradientPlugin::execute(PView *v)
       for(int nod = 0; nod < numNodes; nod++) out->push_back(y[nod]);
       for(int nod = 0; nod < numNodes; nod++) out->push_back(z[nod]);
       for(int step = 0; step < data1->getNumTimeSteps(); step++){
+        if(!data1->hasTimeStep(step)) continue;
         for(int nod = 0; nod < numNodes; nod++)
           for(int comp = 0; comp < numComp; comp++)
             data1->getValue(step, ent, ele, nod, comp, val[numComp * nod + comp]);
@@ -92,12 +94,13 @@ PView *GMSH_GradientPlugin::execute(PView *v)
   }
 
   for(int i = 0; i < data1->getNumTimeSteps(); i++){
+    if(!data1->hasTimeStep(i)) continue;
     double time = data1->getTime(i);
     data2->Time.push_back(time);
   }
   data2->setName(data1->getName() + "_Gradient");
   data2->setFileName(data1->getName() + "_Gradient.pos");
   data2->finalize();
-  
+
   return v2;
 }