diff --git a/Graphics/Post.cpp b/Graphics/Post.cpp
index f916d97d3bf3703abb56002914d7825b9f841f48..a7da5420873f1d7defd0d9d71a2983c109a369d8 100644
--- a/Graphics/Post.cpp
+++ b/Graphics/Post.cpp
@@ -1,4 +1,4 @@
-// $Id: Post.cpp,v 1.159 2008-03-29 10:19:36 geuzaine Exp $
+// $Id: Post.cpp,v 1.160 2008-03-29 11:51:37 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -1209,8 +1209,7 @@ class initPView {
     PViewData *data = p->getData();
     PViewOptions *opt = p->getOptions();
 
-    if(data->getDirty() || !p->getChanged()) return;
-
+    if(data->getDirty() || !data->getNumTimeSteps() || !p->getChanged()) return;
     if(!opt->Visible || opt->Type != PViewOptions::Plot3D) return;
 
     if(opt->UseGenRaise) opt->createGeneralRaise();
@@ -1271,10 +1270,9 @@ class drawPView {
     PViewData *data = p->getData();
     PViewOptions *opt = p->getOptions();
 
+    if(data->getDirty() || !data->getNumTimeSteps()) return;
     if(!opt->Visible || opt->Type != PViewOptions::Plot3D) return;
-
-    if(data->getDirty()) return;
-    
+   
     glPointSize(opt->PointSize);
     gl2psPointSize(opt->PointSize * CTX.print.eps_point_size_factor);
     
diff --git a/Post/PViewDataGModel.cpp b/Post/PViewDataGModel.cpp
index 7c72740d5f18148f5344d604ed1348d7ccb46057..4d5fd4a82f81510e11547b59fe330cc8ecc74d12 100644
--- a/Post/PViewDataGModel.cpp
+++ b/Post/PViewDataGModel.cpp
@@ -1,4 +1,4 @@
-// $Id: PViewDataGModel.cpp,v 1.34 2008-03-20 11:44:15 geuzaine Exp $
+// $Id: PViewDataGModel.cpp,v 1.35 2008-03-29 11:51:37 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -53,24 +53,25 @@ int PViewDataGModel::getNumTimeSteps()
 
 double PViewDataGModel::getTime(int step)
 {
+  if(_steps.empty()) return 0.;
   return _steps[step]->getTime();
 }
 
 double PViewDataGModel::getMin(int step)
 {
-  if(step < 0) return _min;
+  if(step < 0 || _steps.empty()) return _min;
   return _steps[step]->getMin();
 }
 
 double PViewDataGModel::getMax(int step)
 {
-  if(step < 0) return _max;
+  if(step < 0 || _steps.empty()) return _max;
   return _steps[step]->getMax();
 }
 
 SBoundingBox3d PViewDataGModel::getBoundingBox(int step)
 { 
-  if(step < 0){
+  if(step < 0 || _steps.empty()){
     SBoundingBox3d tmp;
     for(unsigned int i = 0; i < _steps.size(); i++)
       tmp += _steps[i]->getBoundingBox();
@@ -81,25 +82,28 @@ SBoundingBox3d PViewDataGModel::getBoundingBox(int step)
 
 int PViewDataGModel::getNumScalars(int step)
 {
+  if(_steps.empty()) return 0;
   if(_steps[0]->getNumComp() == 1) return getNumElements(0);
   return 0;
 }
 
 int PViewDataGModel::getNumVectors(int step)
 {
+  if(_steps.empty()) return 0;
   if(_steps[0]->getNumComp() == 3) return getNumElements(0);
   return 0;
 }
 
 int PViewDataGModel::getNumTensors(int step)
 {
+  if(_steps.empty()) return 0;
   if(_steps[0]->getNumComp() == 9) return getNumElements(0);
   return 0;
 }
 
 int PViewDataGModel::getNumEntities(int step)
 {
-  if(step < 0){
+  if(step < 0 || _steps.empty()){
     int num = 0;
     for(unsigned int i = 0; i < _steps.size(); i++)
       num += _steps[i]->getNumEntities();
@@ -110,7 +114,7 @@ int PViewDataGModel::getNumEntities(int step)
 
 int PViewDataGModel::getNumElements(int step, int ent)
 {
-  if(step < 0){
+  if(step < 0 || _steps.empty()){
     int num = 0;
     for(unsigned int i = 0; i < _steps.size(); i++){
       if(ent < 0)
diff --git a/Post/PViewDataGModelIO.cpp b/Post/PViewDataGModelIO.cpp
index 3cf061869739227230fc4b1da3afd2eccdc5c040..a9403f500d5ea3a3b0ed52b5db38deda4efa6e73 100644
--- a/Post/PViewDataGModelIO.cpp
+++ b/Post/PViewDataGModelIO.cpp
@@ -1,4 +1,4 @@
-// $Id: PViewDataGModelIO.cpp,v 1.14 2008-03-29 10:19:43 geuzaine Exp $
+// $Id: PViewDataGModelIO.cpp,v 1.15 2008-03-29 11:51:37 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -189,8 +189,8 @@ bool PViewDataGModel::readMED(std::string fileName, int fileIndex)
   setName(name);
 
   med_int numSteps = MEDnPasdetemps(fid, name, MED_NOEUD, MED_NONE);
-  if(numSteps <= 0){
-    Msg(GERROR, "Invalid umber of steps");
+  if(numSteps < 0){
+    Msg(GERROR, "Could not get number of steps");
     return false;
   }
 
@@ -205,6 +205,7 @@ bool PViewDataGModel::readMED(std::string fileName, int fileIndex)
       Msg(GERROR, "Could not get step info");
       return false;
     }
+
     med_int numNodes = MEDnVal(fid, name, MED_NOEUD, MED_NONE, numdt, numo, 
 			       meshName, MED_COMPACT);
     if(numNodes <= 0) continue;
@@ -218,8 +219,9 @@ bool PViewDataGModel::readMED(std::string fileName, int fileIndex)
       return false;
     }
 
-    stepData<double> *sd = new stepData<double>(GModel::current(), 
-						stepData<double>::NodeData, numComp);
+    int numCompGmsh = (numComp == 2) ? 3 : numComp;
+    stepData<double> *sd = new stepData<double>
+      (GModel::current(), stepData<double>::NodeData, numCompGmsh);
     _steps.push_back(sd);
     sd->setFileName(fileName);
     sd->setFileIndex(fileIndex);
@@ -263,7 +265,9 @@ bool PViewDataGModel::readMED(std::string fileName, int fileIndex)
       double *d = sd->getData(index, true);
       for(int j = 0; j < numComp; j++)
         d[j] = val[numComp * i + j];
-      double s = ComputeScalarRep(numComp, d);
+      for(int j = numComp; j < numCompGmsh; j++)
+        d[j] = 0.;
+      double s = ComputeScalarRep(numCompGmsh, d);
       sd->setMin(std::min(sd->getMin(), s));
       sd->setMax(std::max(sd->getMax(), s));
     }