diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index 3865e9d9354c541f7b8d647ef35fb3c1874ef037..c8a9c2016a61df61f7713028d2262e46e514c637 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -1,4 +1,4 @@
-// $Id: GModel.cpp,v 1.51 2008-01-14 21:29:13 remacle Exp $
+// $Id: GModel.cpp,v 1.52 2008-01-16 20:25:39 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -56,28 +56,33 @@ GModel *GModel::current()
 
 void GModel::destroy()
 {
-  std::vector<GFace*> to_keep;
-
   for(riter it = firstRegion(); it != lastRegion(); ++it)
     delete *it;
   regions.clear();
+
+  std::vector<GFace*> to_keep;
   for(fiter it = firstFace(); it != lastFace(); ++it){
     // projection faces are persistent
-    if((*it)->geomType() == GEntity::ProjectionFace)
+    if((*it)->getNativeType() == GEntity::UnknownModel &&
+       (*it)->geomType() == GEntity::ProjectionFace)
       to_keep.push_back(*it);
     else
       delete *it;
   }
   faces.clear();
   faces.insert(to_keep.begin(), to_keep.end());
+
   for(eiter it = firstEdge(); it != lastEdge(); ++it)
     delete *it;
   edges.clear();
+
   for(viter it = firstVertex(); it != lastVertex(); ++it)
     delete *it;
   vertices.clear();
+
   if(normals) delete normals;
   normals = 0;
+
   MVertex::resetGlobalNumber();
   MElement::resetGlobalNumber();
   gmshSurface::reset();
diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp
index b45f37a026c2f47ebb46827f0ecc83e6713d6a58..dfc5960f9e6cada8e182ebfd200ab561c50ec3a4 100644
--- a/Parser/OpenFile.cpp
+++ b/Parser/OpenFile.cpp
@@ -1,4 +1,4 @@
-// $Id: OpenFile.cpp,v 1.165 2008-01-08 12:05:45 geuzaine Exp $
+// $Id: OpenFile.cpp,v 1.166 2008-01-16 20:25:39 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -261,7 +261,8 @@ void SetProjectName(const char *name)
   char no_ext[256], ext[256], base[256];
   SplitFileName(name, no_ext, ext, base);
 
-  strncpy(CTX.filename, name, 255);
+  if(CTX.filename != name) // yes, we mean to compare the pointers
+    strncpy(CTX.filename, name, 255);
   strncpy(CTX.no_ext_filename, no_ext, 255);
   strncpy(CTX.base_filename, base, 255);