diff --git a/Common/OpenFile.cpp b/Common/OpenFile.cpp
index bbfd091acbac739af4a191efcaeb40ba53522e0e..f311029c36435ca903cf14b055739691377af39c 100644
--- a/Common/OpenFile.cpp
+++ b/Common/OpenFile.cpp
@@ -157,6 +157,22 @@ void AddToTemporaryBoundingBox(double x, double y, double z)
   for(int i = 0; i < 3; i++) CTX::instance()->cg[i] = temp_bb.center()[i];
 }
 
+static void ComputeMaxEntityNum()
+{
+  GModel::current()->getGEOInternals()->MaxPointNum =
+    std::max(GModel::current()->getGEOInternals()->MaxPointNum,
+             GModel::current()->getMaxElementaryNumber(0));
+  GModel::current()->getGEOInternals()->MaxLineNum =
+    std::max(GModel::current()->getGEOInternals()->MaxLineNum,
+             GModel::current()->getMaxElementaryNumber(1));
+  GModel::current()->getGEOInternals()->MaxSurfaceNum =
+    std::max(GModel::current()->getGEOInternals()->MaxSurfaceNum,
+             GModel::current()->getMaxElementaryNumber(2));
+  GModel::current()->getGEOInternals()->MaxVolumeNum =
+    std::max(GModel::current()->getGEOInternals()->MaxVolumeNum,
+             GModel::current()->getMaxElementaryNumber(3));
+}
+
 static std::vector<FILE*> openedFiles;
 
 int ParseFile(const std::string &fileName, bool close, bool warnIfMissing)
@@ -444,6 +460,7 @@ int MergeFile(const std::string &fileName, bool warnIfMissing)
     }
   }
 
+  ComputeMaxEntityNum();
   SetBoundingBox();
 
   CTX::instance()->geom.draw = 1;
diff --git a/Geo/GModelIO_GEO.cpp b/Geo/GModelIO_GEO.cpp
index a226150bc5afc251bd56305052a6ad8af1775687..86b079158d4d00e2fdc4fb51ef3882577d2b9737 100644
--- a/Geo/GModelIO_GEO.cpp
+++ b/Geo/GModelIO_GEO.cpp
@@ -47,7 +47,6 @@ int GModel::readGEO(const std::string &name)
 
 int GModel::exportDiscreteGEOInternals()
 {
-
   if(_geo_internals) delete _geo_internals;
   _geo_internals = new GEO_Internals;
 
@@ -81,6 +80,7 @@ int GModel::exportDiscreteGEOInternals()
       End_Curve(c);
       Tree_Add(this->getGEOInternals()->Curves, &c);
       CreateReversedCurve(c);
+      List_Delete(points);
     }
   }
 
@@ -100,25 +100,22 @@ int GModel::exportDiscreteGEOInternals()
         }
       }
       Tree_Add(this->getGEOInternals()->Surfaces, &s);
+      List_Delete(curves);
     }
   }
 
   // TODO: create Volumes from discreteRegions
 
   Msg::Debug("Geo internal model has:");
-  List_T *points = Tree2List(_geo_internals->Points);
-  List_T *curves = Tree2List(_geo_internals->Curves);
-  List_T *surfaces = Tree2List(_geo_internals->Surfaces);
-  Msg::Debug("%d Vertices", List_Nbr(points));
-  Msg::Debug("%d Edges", List_Nbr(curves));
-  Msg::Debug("%d Faces", List_Nbr(surfaces));
+  Msg::Debug("%d Vertices", Tree_Nbr(_geo_internals->Points));
+  Msg::Debug("%d Edges", Tree_Nbr(_geo_internals->Curves));
+  Msg::Debug("%d Faces", Tree_Nbr(_geo_internals->Surfaces));
 
   return 1;
 }
 
 int GModel::importGEOInternals()
 {
-
   if(Tree_Nbr(_geo_internals->Points)) {
     List_T *points = Tree2List(_geo_internals->Points);
     for(int i = 0; i < List_Nbr(points); i++){