diff --git a/Plugin/CMakeLists.txt b/Plugin/CMakeLists.txt
index bd3c5e262259855ea9b14dd44277bc7f907b8f9b..dee3492d33561881700381a2e9eda4a855dfa3a0 100644
--- a/Plugin/CMakeLists.txt
+++ b/Plugin/CMakeLists.txt
@@ -20,7 +20,7 @@ set(SRC
   MakeSimplex.cpp
   Integrate.cpp Gradient.cpp Curl.cpp Divergence.cpp
   Annotate.cpp Remove.cpp
-  Probe.cpp
+  Probe.cpp MinMax.cpp
   HarmonicToTime.cpp ModulusPhase.cpp
   HomologyComputation.cpp
   Distance.cpp ExtractEdges.cpp
diff --git a/Plugin/MinMax.cpp b/Plugin/MinMax.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1825393bcb6200219b3f713bba18c25fe80aca70
--- /dev/null
+++ b/Plugin/MinMax.cpp
@@ -0,0 +1,79 @@
+// Gmsh - Copyright (C) 1997-2010 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// bugs and problems to <gmsh@geuz.org>.
+
+#include "MinMax.h"
+#include "shapeFunctions.h"
+#include "PViewOptions.h"
+
+StringXNumber MinMaxOptions_Number[] = {
+  {GMSH_FULLRC, "View", NULL, -1.}
+};
+
+extern "C"
+{
+  GMSH_Plugin *GMSH_RegisterMinMaxPlugin()
+  {
+    return new GMSH_MinMaxPlugin();
+  }
+}
+
+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"
+    "Plugin(MinMax) creates one new view.";
+}
+
+int GMSH_MinMaxPlugin::getNbOptions() const
+{
+  return sizeof(MinMaxOptions_Number) / sizeof(StringXNumber);
+}
+
+StringXNumber *GMSH_MinMaxPlugin::getOption(int iopt)
+{
+  return &MinMaxOptions_Number[iopt];
+}
+
+PView *GMSH_MinMaxPlugin::execute(PView * v)
+{
+  int iView = (int)MinMaxOptions_Number[0].def;
+  
+  PView *v1 = getView(iView, v);
+  if(!v1) return v;
+
+  PViewData *data1 = v1->getData();
+  PView *vMin = new PView();
+  PView *vMax = new PView();
+  PViewDataList *dataMin = getDataList(vMin);
+  PViewDataList *dataMax = getDataList(vMax);
+  
+  double x = data1->getBoundingBox().center().x();
+  double y = data1->getBoundingBox().center().y();
+  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);
+  for(int step = 0; step < data1->getNumTimeSteps(); step++){
+    dataMin->SP.push_back(data1->getMin(step));
+    dataMax->SP.push_back(data1->getMax(step));
+  }
+  dataMin->NbSP = 1;
+  dataMax->NbSP = 1;
+  vMin->getOptions()->intervalsType = PViewOptions::Numeric;
+  vMax->getOptions()->intervalsType = PViewOptions::Numeric;
+  
+  for(int i = 0; i < data1->getNumTimeSteps(); i++){
+    double time = data1->getTime(i);
+    dataMin->Time.push_back(time);
+    dataMax->Time.push_back(time);
+  }
+  dataMin->setName(data1->getName() + "_Min");
+  dataMin->setFileName(data1->getName() + "_Min.pos");
+  dataMin->finalize();
+  dataMax->setName(data1->getName() + "_Max");
+  dataMax->setFileName(data1->getName() + "_Max.pos");
+  dataMax->finalize();
+  
+  return 0;
+}
diff --git a/Plugin/MinMax.h b/Plugin/MinMax.h
new file mode 100644
index 0000000000000000000000000000000000000000..ae37f205d8937cf49e1b492049bcedbced22127a
--- /dev/null
+++ b/Plugin/MinMax.h
@@ -0,0 +1,31 @@
+// Gmsh - Copyright (C) 1997-2010 C. Geuzaine, J.-F. Remacle
+//
+// See the LICENSE.txt file for license information. Please report all
+// bugs and problems to <gmsh@geuz.org>.
+
+#ifndef _MIN_MAX_H_
+#define _MIN_MAX_H_
+
+#include "Plugin.h"
+
+extern "C"
+{
+  GMSH_Plugin *GMSH_RegisterMinMaxPlugin();
+}
+
+class GMSH_MinMaxPlugin : public GMSH_PostPlugin
+{
+ public:
+  GMSH_MinMaxPlugin(){}
+  std::string getName() const { return "MinMax"; }
+  std::string getShortHelp() const
+  {
+    return "Get the min/max of a dataset";
+  }
+  std::string getHelp() const;
+  int getNbOptions() const;
+  StringXNumber* getOption(int iopt);  
+  PView *execute(PView *);
+};
+
+#endif
diff --git a/Plugin/PluginManager.cpp b/Plugin/PluginManager.cpp
index 592f1eb8ef8536364d93e8ebd72e5e1a2afb3bea..073486e699a4436c0502196346f17e439cf33bdd 100644
--- a/Plugin/PluginManager.cpp
+++ b/Plugin/PluginManager.cpp
@@ -23,6 +23,7 @@
 #include "HarmonicToTime.h"
 #include "ModulusPhase.h"
 #include "Integrate.h"
+#include "MinMax.h"
 #include "Gradient.h"
 #include "Curl.h"
 #include "Divergence.h"
@@ -186,6 +187,8 @@ void PluginManager::registerDefaultPlugins()
                       ("ModulusPhase", GMSH_RegisterModulusPhasePlugin()));
     allPlugins.insert(std::pair<std::string, GMSH_Plugin*>
                       ("Integrate", GMSH_RegisterIntegratePlugin()));
+    allPlugins.insert(std::pair<std::string, GMSH_Plugin*>
+                      ("MinMax", GMSH_RegisterMinMaxPlugin()));
     allPlugins.insert(std::pair<std::string, GMSH_Plugin*>
                       ("Gradient", GMSH_RegisterGradientPlugin()));
     allPlugins.insert(std::pair<std::string, GMSH_Plugin*>