diff --git a/Post/PView.cpp b/Post/PView.cpp
index b8e7bb534647198d11958ecdd8fe76e9c188860c..b188cbcaef35ec91148a23c038c8f3c57df62d00 100644
--- a/Post/PView.cpp
+++ b/Post/PView.cpp
@@ -1,4 +1,4 @@
-// $Id: PView.cpp,v 1.5 2007-09-01 16:05:43 geuzaine Exp $
+// $Id: PView.cpp,v 1.6 2007-09-03 06:21:08 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -73,26 +73,28 @@ PView::~PView()
 
   std::vector<PView*>::iterator it = std::find(list.begin(), list.end(), this);
   if(it != list.end()) list.erase(it);
+  for(unsigned int i = 0; i < list.size(); i++) list[i]->setIndex(i);
 
   if(!_data || _links > 0) return;
 
   if(_aliasOf){
     for(unsigned int i = 0; i < list.size(); i++){
       if(list[i]->getNum() == _aliasOf){
-	// original data still exists so we can safely delete
-	delete _data;
+	// original data still exists, decrement ref counter
 	list[i]->getLinks()--;
 	return;
       }
     }
-    // original is gone
-    int numAliases = 0;
-    for(unsigned int i = 0; i < list.size(); i++)
-      if(list[i]->getAliasOf() == _aliasOf)
-	numAliases++;
-    if(numAliases == 1) // no others aliases so safe to delete
-      delete _data;
+    for(unsigned int i = 0; i < list.size(); i++){
+      if(list[i]->getAliasOf() == _aliasOf){
+	// original is gone, but other aliases exist
+	return;
+      }
+    }
   }
+
+  Msg(DEBUG, "Deleting data in ex-View[%d] (unique num = %d)", _index, _num);
+  delete _data;
 }
 
 void PView::setChanged(bool val)