diff --git a/Plugin/MinMax.cpp b/Plugin/MinMax.cpp
index fb3948f527723448f2cbf5439e604ad4a688f103..0a4d9122339e42db8ddfab777638b3140987d4de 100644
--- a/Plugin/MinMax.cpp
+++ b/Plugin/MinMax.cpp
@@ -7,7 +7,8 @@
 #include "PViewOptions.h"
 
 StringXNumber MinMaxOptions_Number[] = {
-  {GMSH_FULLRC, "View", NULL, -1.}
+  {GMSH_FULLRC, "View", NULL, -1.},
+  {GMSH_FULLRC, "OverTime", NULL, 0}
 };
 
 extern "C"
@@ -22,6 +23,7 @@ std::string GMSH_MinMaxPlugin::getHelp() const
 {
   return "Plugin(MinMax) computes the min/max of a view.\n\n"
     "If `View' < 0, the plugin is run on the current view.\n\n"
+    "If `OverTime' = 1, calculates the min-max over space AND time\n\n"
     "Plugin(MinMax) creates two new views.";
 }
 
@@ -38,6 +40,7 @@ StringXNumber *GMSH_MinMaxPlugin::getOption(int iopt)
 PView *GMSH_MinMaxPlugin::execute(PView * v)
 {
   int iView = (int)MinMaxOptions_Number[0].def;
+  int overTime = (int)MinMaxOptions_Number[1].def;
   
   PView *v1 = getView(iView, v);
   if(!v1) return v;
@@ -53,24 +56,51 @@ PView *GMSH_MinMaxPlugin::execute(PView * v)
   double z = data1->getBoundingBox().center().z();
   dataMin->SP.push_back(x); dataMin->SP.push_back(y); dataMin->SP.push_back(z);
   dataMax->SP.push_back(x); dataMax->SP.push_back(y); dataMax->SP.push_back(z);
+
+  double minView, maxView, min=1E200, max=-1E200, timeMin=0, timeMax=0;
   for(int step = 0; step < data1->getNumTimeSteps(); step++){
     if(data1->hasTimeStep(step)){
-      dataMin->SP.push_back(data1->getMin(step));
-      dataMax->SP.push_back(data1->getMax(step));
+      minView=data1->getMin(step);
+      maxView=data1->getMax(step);
+      if(minView<min){
+	min=minView;
+	timeMin = data1->getTime(step);
+      }
+      if(maxView>max){ 
+	max=maxView;
+	timeMax = data1->getTime(step);
+      }
+      if(!overTime){
+	dataMin->SP.push_back(data1->getMin(step));
+	dataMax->SP.push_back(data1->getMax(step));
+      }
     }
   }
+  if(overTime){
+    dataMin->SP.push_back(min);
+    dataMax->SP.push_back(max);
+  }
+
   dataMin->NbSP = 1;
   dataMax->NbSP = 1;
+
   vMin->getOptions()->intervalsType = PViewOptions::Numeric;
   vMax->getOptions()->intervalsType = PViewOptions::Numeric;
   
   for(int step = 0; step < data1->getNumTimeSteps(); step++){
     if(data1->hasTimeStep(step)){
-      double time = data1->getTime(step);
-      dataMin->Time.push_back(time);
-      dataMax->Time.push_back(time);
+      if(overTime){
+	dataMin->Time.push_back(timeMin);
+	dataMax->Time.push_back(timeMax);
+      }
+      else{
+	double time = data1->getTime(step);
+	dataMin->Time.push_back(time);
+	dataMax->Time.push_back(time);
+      }
     }
   }
+
   dataMin->setName(data1->getName() + "_Min");
   dataMin->setFileName(data1->getName() + "_Min.pos");
   dataMin->finalize();