diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index afaab071ee8e911eb33a5a445f442ca3bf02a906..6f9d178ae17b1b8a2396a18e9c53b887445d2672 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -243,26 +243,6 @@ bool GModel::empty() const
   return vertices.empty() && edges.empty() && faces.empty() && regions.empty();
 }
 
-std::vector<GRegion*> GModel::bindingsGetRegions()
-{
-  return std::vector<GRegion*> (regions.begin(), regions.end());
-}
-
-std::vector<GFace*> GModel::bindingsGetFaces()
-{
-  return std::vector<GFace*> (faces.begin(), faces.end());
-}
-
-std::vector<GEdge*> GModel::bindingsGetEdges()
-{
-  return std::vector<GEdge*> (edges.begin(), edges.end());
-}
-
-std::vector<GVertex*> GModel::bindingsGetVertices()
-{
-  return std::vector<GVertex*> (vertices.begin(), vertices.end());
-}
-
 GRegion *GModel::getRegionByTag(int n) const
 {
   GEntity tmp((GModel*)this, n);
diff --git a/Geo/GModel.h b/Geo/GModel.h
index 001a5913f7130572c6819450d8ba1e90f33750a1..51a83c641170ac76b8726e46abb9f4665d45276d 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -273,13 +273,6 @@ class GModel
   GVertex *getVertexByTag(int n) const;
   std::vector<int> getEdgesByStringTag(const std::string tag);
 
-  // for python, temporary solution while iterator are not binded
-  std::vector<GRegion*> bindingsGetRegions();
-  std::vector<GFace*> bindingsGetFaces();
-  std::vector<GEdge*> bindingsGetEdges();
-  std::vector<GVertex*> bindingsGetVertices();
-
-
   // add/remove an entity in the model
   void add(GRegion *r) { regions.insert(r); }
   void add(GFace *f) { faces.insert(f); }
diff --git a/Mesh/CenterlineField.cpp b/Mesh/CenterlineField.cpp
index 152e5db5e862f46696d9c2ef9338e2d0af3e5400..259bc3f1532e15f0c80ba58db71dc6aa8cc1a06a 100644
--- a/Mesh/CenterlineField.cpp
+++ b/Mesh/CenterlineField.cpp
@@ -369,7 +369,7 @@ Centerline::~Centerline()
 void Centerline::importFile(std::string fileName)
 {
   current = GModel::current();
-  std::vector<GFace*> currentFaces = current->bindingsGetFaces();
+  std::vector<GFace*> currentFaces(current->firstFace(), current->lastFace());
   for (unsigned int i = 0; i < currentFaces.size(); i++){
     GFace *gf = currentFaces[i];
      if (gf->geomType() == GEntity::DiscreteSurface){
@@ -395,7 +395,7 @@ void Centerline::importFile(std::string fileName)
   current->setVisibility(1);
 
   int maxN = 0.0;
-  std::vector<GEdge*> modEdges = mod->bindingsGetEdges();
+  std::vector<GEdge*> modEdges(mod->firstEdge(), mod->lastEdge());
   MVertex *vin = modEdges[0]->lines[0]->getVertex(0);
   ptin = SPoint3(vin->x(), vin->y(), vin->z());
   for (unsigned int i = 0; i < modEdges.size(); i++){
diff --git a/wrappers/gmshpy/gmshGeo.i b/wrappers/gmshpy/gmshGeo.i
index eaf5b4c9106a8b26e002805fd74430a1d9da3d97..a44493370a3960b88f5dd180a08b6374de714f85 100644
--- a/wrappers/gmshpy/gmshGeo.i
+++ b/wrappers/gmshpy/gmshGeo.i
@@ -114,4 +114,26 @@ namespace std {
     }
     return elements;
   }
+
+  std::vector<GRegion*> bindingsGetRegions()
+  {
+    return std::vector<GRegion*> ($self->firstRegion(), $self->lastRegion());
+  }
+
+  std::vector<GFace*> bindingsGetFaces()
+  {
+    return std::vector<GFace*> ($self->firstFace(), $self->lastFace());
+  }
+
+  std::vector<GEdge*> bindingsGetEdges()
+  {
+    return std::vector<GEdge*> ($self->firstEdge(), $self->lastEdge());
+  }
+
+  std::vector<GVertex*> bindingsGetVertices()
+  {
+    return std::vector<GVertex*> ($self->firstVertex(), $self->lastVertex());
+  }
+
 }
+