diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp
index c78cb27e98e7755686fc8019862f830d9974e706..69ae4106583ba3465b4401412f9f665f407a87ca 100644
--- a/Geo/GFace.cpp
+++ b/Geo/GFace.cpp
@@ -75,11 +75,11 @@ int GFace::getMeshSizeFromBoundary() const
 
 int GFace::delEdge(GEdge *edge)
 {
-  const auto found = std::find(begin(l_edges), end(l_edges), edge);
+  const auto found = std::find(l_edges.begin(), l_edges.end(), edge);
 
-  if(found != end(l_edges)) { l_edges.erase(found); }
+  if(found != l_edges.end()) { l_edges.erase(found); }
 
-  const auto pos = std::distance(begin(l_edges), found);
+  const auto pos = std::distance(l_edges.begin(), found);
 
   if(l_dirs.empty()) { return 0; }
 
@@ -89,16 +89,14 @@ int GFace::delEdge(GEdge *edge)
   }
 
   const auto orientation = l_dirs.at(pos);
-
   l_dirs.erase(std::next(begin(l_dirs), pos));
-
   return orientation;
 }
 
 void GFace::setBoundEdges(const std::vector<int> &tagEdges)
 {
   std::vector<GEdge *> e;
-  for(std::size_t i = 0; i != tagEdges.size(); i++) {
+  for(std::size_t i = 0; i < tagEdges.size(); i++) {
     GEdge *ge = model()->getEdgeByTag(tagEdges[i]);
     if(ge) {
       e.push_back(ge);
@@ -120,12 +118,14 @@ void GFace::setBoundEdges(const std::vector<int> &tagEdges,
     Msg::Error("Wrong number of curve signs in surface %d", tag());
     setBoundEdges(tagEdges);
   }
-  for(std::vector<int>::size_type i = 0; i != tagEdges.size(); i++) {
+  for(std::vector<int>::size_type i = 0; i < tagEdges.size(); i++) {
     GEdge *ge = model()->getEdgeByTag(tagEdges[i]);
     if(ge) {
-      l_edges.push_back(ge);
-      l_dirs.push_back(signEdges[i]);
-      ge->addFace(this);
+      if(std::find(l_edges.begin(), l_edges.end(), ge) == l_edges.end()) {
+        l_edges.push_back(ge);
+        l_dirs.push_back(signEdges[i]);
+        ge->addFace(this);
+      }
     }
     else {
       Msg::Error("Unknown curve %d in surface %d", tagEdges[i], tag());
diff --git a/Geo/GRegion.cpp b/Geo/GRegion.cpp
index 399fe4a25cc2eed8c5e82c3d297b77fb7fb3e454..19dc6a17ddf2264fc5fbc1930dda85241fb3ded1 100644
--- a/Geo/GRegion.cpp
+++ b/Geo/GRegion.cpp
@@ -268,11 +268,11 @@ void GRegion::setColor(unsigned int val, bool recursive)
 
 int GRegion::delFace(GFace *face)
 {
-  const auto found = std::find(begin(l_faces), end(l_faces), face);
+  const auto found = std::find(l_faces.begin(), l_faces.end(), face);
 
-  if(found != end(l_faces)) { l_faces.erase(found); }
+  if(found != l_faces.end()) { l_faces.erase(found); }
 
-  const auto pos = std::distance(begin(l_faces), found);
+  const auto pos = std::distance(l_faces.begin(), found);
 
   if(l_dirs.empty()) { return 0; }
 
@@ -283,7 +283,7 @@ int GRegion::delFace(GFace *face)
 
   const auto orientation = l_dirs.at(pos);
 
-  l_dirs.erase(std::next(begin(l_dirs), pos));
+  l_dirs.erase(std::next(l_dirs.begin(), pos));
 
   return orientation;
 }
@@ -291,10 +291,12 @@ int GRegion::delFace(GFace *face)
 void GRegion::setBoundFaces(const std::set<int> &tagFaces)
 {
   for(auto it = tagFaces.begin(); it != tagFaces.end(); ++it) {
-    GFace *face = model()->getFaceByTag(*it);
-    if(face) {
-      l_faces.push_back(face);
-      face->addRegion(this);
+    GFace *gf = model()->getFaceByTag(*it);
+    if(gf) {
+      if(std::find(l_faces.begin(), l_faces.end(), gf) == l_faces.end()) {
+        l_faces.push_back(gf);
+        gf->addRegion(this);
+      }
     }
     else {
       Msg::Error("Unknown surface %d in volume %d", *it, tag());
@@ -312,11 +314,13 @@ void GRegion::setBoundFaces(const std::vector<int> &tagFaces,
     setBoundFaces(tags);
   }
   for(std::size_t i = 0; i != tagFaces.size(); i++) {
-    GFace *face = model()->getFaceByTag(tagFaces[i]);
-    if(face) {
-      l_faces.push_back(face);
-      face->addRegion(this);
-      l_dirs.push_back(signFaces[i]);
+    GFace *gf = model()->getFaceByTag(tagFaces[i]);
+    if(gf) {
+      if(std::find(l_faces.begin(), l_faces.end(), gf) == l_faces.end()) {
+        l_faces.push_back(gf);
+        gf->addRegion(this);
+        l_dirs.push_back(signFaces[i]);
+      }
     }
     else {
       Msg::Error("Unknown surface %d in volume %d", tagFaces[i], tag());