diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index ecb4c7554e1e198155ad450830285dca73becd9b..86fa28bfc04ae1af60f5db78715f32a3358a5cb3 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -1925,6 +1925,10 @@ void GModel::glue(double eps)
     glueFacesInRegions(this, Unique2Duplicates, Duplicates2Unique);
   }    
 }
+void GModel::insertRegion(GRegion *r)
+{
+  regions.insert(r);
+}
 
 #include "Bindings.h"
 
@@ -1976,6 +1980,9 @@ void GModel::registerBindings(binding *b)
   cm->setDescription("access a geometrical region by tag");
   cm->setArgNames("tag", NULL);
 
+  cm = cb->addMethod("insertRegion", &GModel::insertRegion);
+  cm->setDescription("insert an existing region to the model list");
+  cm->setArgNames("region", NULL);
   cm = cb->addMethod("getRegions", &GModel::bindingsGetRegions);
   cm->setDescription("return a vector of the regions");
   cm = cb->addMethod("getFaces", &GModel::bindingsGetFaces);
diff --git a/Geo/GModel.h b/Geo/GModel.h
index 5327353a1e02314df9896064b62c14453c2c3cc9..6ed3ac83eb6cd030b2512f745666fc3c73d029ba 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -118,6 +118,8 @@ class GModel
   std::set<GEdge*, GEntityLessThan> edges;
   std::set<GVertex*, GEntityLessThan> vertices;
 
+  void insertRegion (GRegion*);
+
   // map between the pair <dimension, elementary or physical number>
   // and an optional associated name
   std::map<std::pair<int, int>, std::string> physicalNames, elementaryNames;