diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index bc96d1eab25b04e7a2c1bd077e3c2c246841fd4e..475ca38bea58dd507850631f544dd2626f79bbbe 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -642,6 +642,21 @@ int GModel::getNumMeshVertices()
   return n;
 }
 
+void GModel::getMeshVertices(std::vector<MVertex *> &meshVertices)
+{
+	meshVertices.resize(getNumMeshVertices());
+  std::vector<GEntity*> entities;
+  getEntities(entities);
+  int n = -1;
+  for(unsigned int i = 0; i < entities.size(); i++)
+	{
+		GEntity *entity=entities[i];
+		unsigned msh_size=entity->mesh_vertices.size();
+		for(unsigned j=0;j<msh_size;++j)
+			meshVertices[++n]=entity->mesh_vertices[j];
+	}
+}
+
 int GModel::getNumMeshElements()
 {
   std::vector<GEntity*> entities;
diff --git a/Geo/GModel.h b/Geo/GModel.h
index 83d1bf1d2ecd5c5f52f2a62ca0d715ea656301a3..89e324776cd67bf2c476055b676f0b7511ef1a77 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -310,6 +310,9 @@ class GModel
 
   // return the total number of vertices in the mesh
   int getNumMeshVertices();
+	
+	// return all the mesh vertices
+	void getMeshVertices(std::vector<MVertex *> &meshVertices);
 
   // access a mesh vertex by tag, using the vertex cache
   MVertex *getMeshVertexByTag(int n);
diff --git a/Geo/GModelIO_Geo.cpp b/Geo/GModelIO_Geo.cpp
index 8c5d0c15a6665ad62f1786363a1eb2cdcee84573..c15ee550947e94eb54e7268c7e74eac194995a50 100644
--- a/Geo/GModelIO_Geo.cpp
+++ b/Geo/GModelIO_Geo.cpp
@@ -39,7 +39,9 @@ void GModel::_deleteGEOInternals()
 int GModel::readGEO(const std::string &name)
 {
   ParseFile(name, true);
-  return GModel::current()->importGEOInternals();
+	GModel *newModel=GModel::current();
+	newModel->setFileName(name);
+  return newModel->importGEOInternals();
 }
 
 int GModel::exportDiscreteGEOInternals()