diff --git a/Post/PViewDataListIO.cpp b/Post/PViewDataListIO.cpp
index 6292094e40cf8f0e62232371b6bbf029dda955d9..f174dc91189370105d4fa9a08da3283a298d91bf 100644
--- a/Post/PViewDataListIO.cpp
+++ b/Post/PViewDataListIO.cpp
@@ -572,7 +572,11 @@ bool PViewDataList::writeMSH(const std::string &fileName, double version, bool b
     createVertices(*list, *numEle, numNodes, vertices);
   }
   MVertexRTree pos(eps);
-  pos.insert(vertices);
+  std::vector<MVertex*> unique;
+  for(unsigned int i = 0; i < vertices.size(); i++){
+    if(!pos.insert(vertices[i]))
+      unique.push_back(vertices[i]);
+  }
 
   std::map<MVertex *, nodeData> vertexData;
 
@@ -584,20 +588,18 @@ bool PViewDataList::writeMSH(const std::string &fileName, double version, bool b
                    forceNodeData ? &vertexData : 0);
   }
 
-  int globalNumNodes = 0;
-  for(unsigned int i = 0; i < vertices.size(); i++)
-    if(vertices[i]->getIndex() < 0)
-      vertices[i]->setIndex(++globalNumNodes);
+  int num = 0;
+  for(unsigned int i = 0; i < unique.size(); i++)
+    unique[i]->setIndex(++num);
 
   fprintf(fp, "$MeshFormat\n2.2 0 8\n$EndMeshFormat\n");
 
   if(saveMesh){
     fprintf(fp, "$Nodes\n");
-    fprintf(fp, "%d\n", globalNumNodes);
-    for(unsigned int i = 0; i < vertices.size(); i++){
-      MVertex *v = vertices[i];
-      if(v->getIndex() > 0)
-        fprintf(fp, "%d %.16g %.16g %.16g\n", v->getIndex(), v->x(), v->y(), v->z());
+    fprintf(fp, "%d\n", (int)unique.size());
+    for(unsigned int i = 0; i < unique.size(); i++){
+      MVertex *v = unique[i];
+      fprintf(fp, "%d %.16g %.16g %.16g\n", v->getIndex(), v->x(), v->y(), v->z());
     }
     fprintf(fp, "$EndNodes\n");
 
@@ -644,7 +646,7 @@ bool PViewDataList::writeMSH(const std::string &fileName, double version, bool b
     else
       fprintf(fp, "1\n\"%s\"\n", getName().c_str());
     fprintf(fp, "1\n%.16g\n", getTime(ts));
-    int size = forceNodeData ? globalNumNodes : (int)elements.size();
+    int size = forceNodeData ? (int)unique.size() : (int)elements.size();
     if(partitionNum)
       fprintf(fp, "4\n%d\n%d\n%d\n%d\n", ts, numComponents, size,
               partitionNum);
@@ -668,7 +670,7 @@ bool PViewDataList::writeMSH(const std::string &fileName, double version, bool b
       fprintf(fp, "$EndNodeData\n");
     }
     else{
-      int num = 0;
+      int n = 0;
       for(int i = 0; i < 24; i++){
         std::vector<double> *list = 0;
         int *numEle = 0, numComp, numNodes;
@@ -680,7 +682,7 @@ bool PViewDataList::writeMSH(const std::string &fileName, double version, bool b
           int nb = list->size() / *numEle;
           for(unsigned int i = 0; i < list->size(); i += nb){
             double *v = &(*list)[i + 3 * numNodes];
-            fprintf(fp, "%d %d", ++num, mult);
+            fprintf(fp, "%d %d", ++n, mult);
             for(int j = 0; j < numComponents * mult; j++)
               fprintf(fp, " %.16g", v[numComponents * mult * ts + j]);
             fprintf(fp, "\n");