diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index df7b22e99a2c024973df4e6ffd049d631a252e04..3a00394b27fe3d69bb0304c76c8bd55ea05ecdf0 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -171,10 +171,12 @@ GModel *GModel::findByName(const std::string &name, const std::string &fileName)
   return 0;
 }
 
-void GModel::destroy()
+void GModel::destroy(bool keepName)
 {
-  _name.clear();
-  _fileNames.clear();
+  if(!keepName){
+    _name.clear();
+    _fileNames.clear();
+  }
 
   _maxVertexNum = _maxElementNum = 0;
   _checkPointedMaxVertexNum = _checkPointedMaxElementNum = 0;
diff --git a/Geo/GModel.h b/Geo/GModel.h
index acfc1c8db59de05090fb251f3c366fca5d17d2fb..e1a6f3148c7737c6b960e38c44b5de37dceb642d 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -178,8 +178,8 @@ class GModel
   // *not* have a link to the fileName
   static GModel *findByName(const std::string &name, const std::string &fileName="");
 
-  // delete everything in a GModel
-  void destroy();
+  // delete everything in a GModel (optionally keep name and fileName)
+  void destroy(bool keepName=false);
 
   // get/set global vertex/element num
   int getMaxVertexNumber(){ return _maxVertexNum; }
diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp
index cdc4c1fa21a180b7a197134c8fa117813ad63ef2..fdc453021cc3042f91bb4bc75a5330decc1e73fa 100644
--- a/Parser/Gmsh.tab.cpp
+++ b/Parser/Gmsh.tab.cpp
@@ -7028,7 +7028,7 @@ yyreduce:
         ClearProject();
       }
       else if(!strcmp((yyvsp[(2) - (3)].c), "Model")){
-	GModel::current()->destroy();
+	GModel::current()->destroy(true); // destroy, but keep name/filename
 	GModel::current()->getGEOInternals()->destroy();
       }
       else if(!strcmp((yyvsp[(2) - (3)].c), "Physicals")){
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index c1d43b6980a3235c9e4084386aac862d80ca4667..e557d106d527661120bd4d7b83e89059b5051422 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -2477,7 +2477,7 @@ Delete :
         ClearProject();
       }
       else if(!strcmp($2, "Model")){
-	GModel::current()->destroy();
+	GModel::current()->destroy(true); // destroy, but keep name/filename
 	GModel::current()->getGEOInternals()->destroy();
       }
       else if(!strcmp($2, "Physicals")){