diff --git a/Geo/GRegion.cpp b/Geo/GRegion.cpp
index afd6772670a5dddb4bba6b6bcaa301618dbf5b80..ca448ed04218e14be331b5e0125d66171e9d08cd 100644
--- a/Geo/GRegion.cpp
+++ b/Geo/GRegion.cpp
@@ -265,11 +265,20 @@ std::list<GEdge*> GRegion::edges() const
   std::list<GFace*>::const_iterator it = l_faces.begin();
   while(it != l_faces.end()){
     std::list<GEdge*> e2;
+
     e2 = (*it)->edges();
     std::list<GEdge*>::const_iterator it2 = e2.begin();
     while (it2 != e2.end()){
-      if(std::find(e.begin(), e.end(), *it2) == e.end())
-        e.push_back(*it2);
+      GEdge *edge = *it2;
+
+      // FIXME: we need to fix the compound design and decide what to do; same
+      // thing for faces() (either store or compute the entities, either use
+      // original or compound entities, etc.)
+      if(edge->getCompound())
+        edge = (GEdge*)edge->getCompound();
+
+      if(std::find(e.begin(), e.end(), edge) == e.end())
+        e.push_back(edge);
       ++it2;
     }
     ++it;