diff --git a/Post/OctreePost.cpp b/Post/OctreePost.cpp
index fb37f0bbe5cd9a0c15649b737cc67d3bb3b73698..9ff74cfa7898cbede8c799d443e0b353052b399f 100644
--- a/Post/OctreePost.cpp
+++ b/Post/OctreePost.cpp
@@ -1,4 +1,4 @@
-// $Id: OctreePost.cpp,v 1.10 2008-03-30 15:37:42 geuzaine Exp $
+// $Id: OctreePost.cpp,v 1.11 2008-04-02 16:30:29 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -435,7 +435,7 @@ bool OctreePost::_getValue(void *in, int nbComp, double P[3], int timestep, doub
     if(timestep < 0 || step == timestep){
       for(int nod = 0; nod < e->getNumVertices(); nod++){
         for(int comp = 0; comp < nbComp; comp++){
-          if(!_theViewDataGModel->getValue(step, dataIndex[nod], comp, 
+          if(!_theViewDataGModel->getValue(step, dataIndex[nod], nod, comp, 
                                            nodeval[nod * nbComp + comp]))
             return false;
         }
diff --git a/Post/PViewDataGModel.cpp b/Post/PViewDataGModel.cpp
index de305b16252f211a7fa0dc6e5aef3f8b14350eb1..34a152b29556f2dd61573f68afec5ced446cb145 100644
--- a/Post/PViewDataGModel.cpp
+++ b/Post/PViewDataGModel.cpp
@@ -1,4 +1,4 @@
-// $Id: PViewDataGModel.cpp,v 1.45 2008-04-01 18:20:02 geuzaine Exp $
+// $Id: PViewDataGModel.cpp,v 1.46 2008-04-02 16:30:29 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -193,27 +193,19 @@ void PViewDataGModel::getValue(int step, int ent, int ele, int nod, int comp, do
 {
   // no sanity checks (assumed to be guarded by skipElement)
   stepData<double> *sd = _steps[step];
+  MElement *e = sd->getEntity(ent)->getMeshElement(ele);
   switch(_type){
   case NodeData: 
-    {
-      MVertex *v = sd->getEntity(ent)->getMeshElement(ele)->getVertex(nod);
-      val = sd->getData(v->getNum())[comp];
-      break;
-    }
+    val = sd->getData(e->getVertex(nod)->getNum())[comp];
+    break;
   case ElementNodeData:
   case GaussPointData: 
-    {
-      MElement *e = sd->getEntity(ent)->getMeshElement(ele);
-      val = sd->getData(e->getNum())[sd->getNumComponents() * nod + comp];
-      break;
-    }
+    val = sd->getData(e->getNum())[sd->getNumComponents() * nod + comp];
+    break;
   case ElementData: 
   default: 
-    {
-      MElement *e = sd->getEntity(ent)->getMeshElement(ele);
-      val = sd->getData(e->getNum())[comp];
-      break;
-    }
+    val = sd->getData(e->getNum())[comp];
+    break;
   }
 }
 
@@ -225,7 +217,7 @@ int PViewDataGModel::getNumEdges(int step, int ent, int ele)
 
 void PViewDataGModel::smooth()
 {
-  if(_type == NodeData) return;
+  if(_type == NodeData || _type == GaussPointData) return;
   std::vector<stepData<double>*> _steps2;
   for(unsigned int step = 0; step < _steps.size(); step++){
     GModel *m = _steps[step]->getModel();
@@ -237,7 +229,7 @@ void PViewDataGModel::smooth()
       for(int ele = 0; ele < getNumElements(step, ent); ele++){
 	MElement *e = _steps[step]->getEntity(ent)->getMeshElement(ele);
 	double val;
-	if(!getValue(step, e->getNum(), 0, val)) continue;
+	if(!getValue(step, e->getNum(), 0, 0, val)) continue;
 	for(int nod = 0; nod < e->getNumVertices(); nod++){
 	  MVertex *v = e->getVertex(nod);
 	  if(nodeConnect.count(v->getNum()))
@@ -246,7 +238,7 @@ void PViewDataGModel::smooth()
 	    nodeConnect[v->getNum()] = 1;
 	  double *d = _steps2.back()->getData(v->getNum(), true);
 	  for(int j = 0; j < numComp; j++)
-	    if(getValue(step, e->getNum(), j, val)) d[j] += val;
+	    if(getValue(step, e->getNum(), nod, j, val)) d[j] += val;
 	}
       }
     }
@@ -275,16 +267,16 @@ bool PViewDataGModel::skipEntity(int step, int ent)
 bool PViewDataGModel::skipElement(int step, int ent, int ele)
 {
   if(step >= getNumTimeSteps()) return true;
-  stepData<double> *data = _steps[step];
+  stepData<double> *sd = _steps[step];
   if(!_steps[step]->getNumData()) return true;
-  MElement *e = data->getEntity(ent)->getMeshElement(ele);
+  MElement *e = sd->getEntity(ent)->getMeshElement(ele);
   if(!e->getVisibility()) return true;
   if(_type == NodeData){
     for(int i = 0; i < e->getNumVertices(); i++)
-      if(!data->getData(e->getVertex(i)->getNum())) return true;
+      if(!sd->getData(e->getVertex(i)->getNum())) return true;
   }
   else{
-    if(!data->getData(e->getNum())) return true;
+    if(!sd->getData(e->getNum())) return true;
   }
   return false;
 }
@@ -314,10 +306,14 @@ GEntity *PViewDataGModel::getEntity(int step, int ent)
   return _steps[step]->getEntity(ent);
 }
 
-bool PViewDataGModel::getValue(int step, int dataIndex, int comp, double &val)
+bool PViewDataGModel::getValue(int step, int dataIndex, int nod, int comp, double &val)
 {
   double *d = _steps[step]->getData(dataIndex);
   if(!d) return false;
-  val = d[comp];
+
+  if(_type == NodeData || _type == ElementData)
+    val = d[comp];
+  else
+    val = d[_steps[step]->getNumComponents() * nod + comp];
   return true;
 }
diff --git a/Post/PViewDataGModel.h b/Post/PViewDataGModel.h
index d467a61739428e3161356cc0a96e7804d284a31c..ae962c4ae3b32f2e37dd2b0fe1752b5d95697213 100644
--- a/Post/PViewDataGModel.h
+++ b/Post/PViewDataGModel.h
@@ -176,7 +176,7 @@ class PViewDataGModel : public PViewData {
   // direct access to GModel entities
   GEntity *getEntity(int step, int ent);
   // direct access to value by index
-  bool getValue(int step, int dataIndex, int comp, double &val);
+  bool getValue(int step, int dataIndex, int node, int comp, double &val);
 
   // I/O routines
   bool readMSH(std::string fileName, int fileIndex, FILE *fp, bool binary,