diff --git a/Numeric/gmshElasticity.cpp b/Numeric/gmshElasticity.cpp
index 15da29b6d7c93430654336fba879852a15acdcb0..fa1a54e7183ecd89c5e6cc2c15d6542a300dbc2a 100644
--- a/Numeric/gmshElasticity.cpp
+++ b/Numeric/gmshElasticity.cpp
@@ -74,3 +74,8 @@ void gmshElasticityTerm::elementMatrix(MElement *e, Double_Matrix & m) const
     m.blas_dgemm(BTH, B, weight * detJ, 1.);
   } 
 }
+
+
+
+
+
diff --git a/Post/PViewDataGModelIO.cpp b/Post/PViewDataGModelIO.cpp
index f39f2de6dd5b53fb4a29ecbf296428d2d7fdcfb3..9a0344dd5b7f7208bd5726b20f4b6f55faae5a88 100644
--- a/Post/PViewDataGModelIO.cpp
+++ b/Post/PViewDataGModelIO.cpp
@@ -112,10 +112,10 @@ bool PViewDataGModel::writeMSH(std::string fileName, bool binary)
     return false;
   }
 
-  if(_type != NodeData){
-    Msg::Error("Can only export node-based datasets for now");
-    return false;
-  }
+  //  if(_type != NodeData){
+  //    Msg::Error("Can only export node-based datasets for now");
+  //    return false;
+  //  }
 
   GModel *model = _steps[0]->getModel();
 
@@ -135,32 +135,56 @@ bool PViewDataGModel::writeMSH(std::string fileName, bool binary)
     for(int i = 0; i < _steps[step]->getNumData(); i++)
       if(_steps[step]->getData(i)) numNodes++;
     if(numNodes){
-      fprintf(fp, "$NodeData\n");
-      fprintf(fp, "1\n\"%s\"\n", getName().c_str());
-      fprintf(fp, "1\n%.16g\n", _steps[step]->getTime());
-      fprintf(fp, "3\n%d\n%d\n%d\n", step, numComp, numNodes);
-      for(int i = 0; i < _steps[step]->getNumData(); i++){
-        if(_steps[step]->getData(i)){
-          MVertex *v = _steps[step]->getModel()->getMeshVertexByTag(i);
-          if(!v){
-            Msg::Error("Unknown vertex %d in data", i);
-            return false;
-          }
-          int num = v->getIndex();
-          if(binary){
-            fwrite(&num, sizeof(int), 1, fp);
-            fwrite(_steps[step]->getData(i), sizeof(double), numComp, fp);
-          }
-          else{
-            fprintf(fp, "%d", num);
-            for(int k = 0; k < numComp; k++)
-              fprintf(fp, " %.16g", _steps[step]->getData(i)[k]);
-            fprintf(fp, "\n");
-          }
-        }
+      if (_type == NodeData){
+	fprintf(fp, "$NodeData\n");
+	fprintf(fp, "1\n\"%s\"\n", getName().c_str());
+	fprintf(fp, "1\n%.16g\n", _steps[step]->getTime());
+	fprintf(fp, "3\n%d\n%d\n%d\n", step, numComp, numNodes);
+	for(int i = 0; i < _steps[step]->getNumData(); i++){
+	  if(_steps[step]->getData(i)){
+	    MVertex *v = _steps[step]->getModel()->getMeshVertexByTag(i);
+	    if(!v){
+	      Msg::Error("Unknown vertex %d in data", i);
+	      return false;
+	    }
+	    int num = v->getIndex();
+	    if(binary){
+	      fwrite(&num, sizeof(int), 1, fp);
+	      fwrite(_steps[step]->getData(i), sizeof(double), numComp, fp);
+	    }
+	    else{
+	      fprintf(fp, "%d", num);
+	      for(int k = 0; k < numComp; k++)
+		fprintf(fp, " %.16g", _steps[step]->getData(i)[k]);
+	      fprintf(fp, "\n");
+	    }
+	  }
+	}
+	if(binary) fprintf(fp, "\n");
+	fprintf(fp, "$EndNodeData\n");
+      }
+      else{
+    	fprintf(fp, "$ElementData\n");
+	fprintf(fp, "1\n\"%s\"\n", getName().c_str());
+	fprintf(fp, "1\n%.16g\n", _steps[step]->getTime());
+	fprintf(fp, "3\n%d\n%d\n%d\n", step, numComp, numNodes);
+	for(int i = 0; i < _steps[step]->getNumData(); i++){
+	  if(_steps[step]->getData(i)){
+	    if(binary){
+	      fwrite(&i, sizeof(int), 1, fp);
+	      fwrite(_steps[step]->getData(i), sizeof(double), numComp, fp);
+	    }
+	    else{
+	      fprintf(fp, "%d", i);
+	      for(int k = 0; k < numComp; k++)
+		fprintf(fp, " %.16g", _steps[step]->getData(i)[k]);
+	      fprintf(fp, "\n");
+	    }
+	  }
+	}
+	if(binary) fprintf(fp, "\n");
+	fprintf(fp, "$EndElementData\n");
       }
-      if(binary) fprintf(fp, "\n");
-      fprintf(fp, "$EndNodeData\n");
     }
   }