diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp
index 8c257fc0fca5cfbe18291b1f8a136032537d6dcb..33ae381c18dee31af95c9754752bb0db1f216cb1 100644
--- a/Graphics/Mesh.cpp
+++ b/Graphics/Mesh.cpp
@@ -1,4 +1,4 @@
-// $Id: Mesh.cpp,v 1.219 2008-03-20 11:44:07 geuzaine Exp $
+// $Id: Mesh.cpp,v 1.220 2008-04-17 05:58:09 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -819,8 +819,19 @@ class drawMeshGRegion {
 
 // Main drawing routine
 
+#include "PView.h"
+
 void Draw_Mesh()
 {
+  GModel *m = GModel::current();
+
+  // make sure to flag any model-dependent post-processing view as
+  // changed if the underlying mesh has, before resetting the changed
+  // flag
+  for(unsigned int i = 0; i < PView::list.size(); i++)
+    if(PView::list[i]->getData()->hasModel(m) && CTX.mesh.changed)
+      PView::list[i]->setChanged(true);
+  
   if(!CTX.mesh.draw) return;
   
   glPointSize(CTX.mesh.point_size);
@@ -843,7 +854,6 @@ void Draw_Mesh()
   static bool busy = false;
   if(!busy){
     busy = true;
-    GModel *m = GModel::current();
     int status = m->getMeshStatus();
     if(CTX.mesh.changed) {
       Msg(DEBUG, "Mesh has changed: reinitializing drawing data", CTX.mesh.changed);
diff --git a/Post/PViewData.h b/Post/PViewData.h
index 9566fa294d979257d4f23041da03b982f2196281..6b37975f03f5141b3fa9d40a0c1754de37815e47 100644
--- a/Post/PViewData.h
+++ b/Post/PViewData.h
@@ -26,6 +26,7 @@
 
 #define VAL_INF 1.e200
 
+class GModel;
 class nameData;
 
 // abstract interface to post-processing view data
@@ -119,6 +120,7 @@ class PViewData {
   virtual bool hasTimeStep(int step){ return step < getNumTimeSteps(); }
   virtual bool hasPartition(int part){ return false; }
   virtual bool hasMultipleMeshes(){ return false; }
+  virtual bool hasModel(GModel *model, int step=-1){ return false; }
   virtual bool useGaussPoints(){ return false; }
 
   // I/O routines
diff --git a/Post/PViewDataGModel.cpp b/Post/PViewDataGModel.cpp
index a93446da813078b1b2528b1ef75b961929b47c50..d06a10f202c68bfe3dde7a658ab9701fc7f34dc3 100644
--- a/Post/PViewDataGModel.cpp
+++ b/Post/PViewDataGModel.cpp
@@ -1,4 +1,4 @@
-// $Id: PViewDataGModel.cpp,v 1.50 2008-04-16 22:10:53 geuzaine Exp $
+// $Id: PViewDataGModel.cpp,v 1.51 2008-04-17 05:58:09 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -420,6 +420,16 @@ bool PViewDataGModel::hasMultipleMeshes()
   return false;
 }
 
+bool PViewDataGModel::hasModel(GModel *model, int step)
+{
+  if(step < 0){
+    for(unsigned int i = 0; i < _steps.size(); i++)
+      if(model == _steps[i]->getModel()) return true;
+    return false;
+  }
+  return (model == _steps[step]->getModel());
+}
+
 GEntity *PViewDataGModel::getEntity(int step, int ent)
 {
   return _steps[step]->getEntity(ent);
diff --git a/Post/PViewDataGModel.h b/Post/PViewDataGModel.h
index d8dce39d9fd58b099a8d0b1f2730c2eb77e92c07..407adc77d9c6d4edbbdf9a0c083d1957a5cbc1e8 100644
--- a/Post/PViewDataGModel.h
+++ b/Post/PViewDataGModel.h
@@ -180,6 +180,7 @@ class PViewDataGModel : public PViewData {
   bool hasTimeStep(int step);
   bool hasPartition(int part);
   bool hasMultipleMeshes();
+  bool hasModel(GModel *model, int step=-1);
   bool useGaussPoints(){ return _type == GaussPointData; }
 
   // get the data type