diff --git a/DDCore/include/DD4hep/GeoHandler.h b/DDCore/include/DD4hep/GeoHandler.h
index 6abb8fd91..b138d2547 100644
--- a/DDCore/include/DD4hep/GeoHandler.h
+++ b/DDCore/include/DD4hep/GeoHandler.h
@@ -59,7 +59,8 @@ namespace dd4hep {
        */
       class GeometryInfo {
       public:
-        std::set<TGeoShape*>   solids;
+        std::vector<TGeoShape*>   solids;
+        std::set<TGeoShape*>   solid_set;
         std::set<Volume>       volumeSet;
         std::vector<Volume>    volumes;
         std::set<VisAttr>      vis;
diff --git a/DDCore/src/GeoHandler.cpp b/DDCore/src/GeoHandler.cpp
index 38a10f5f6..8cd4fee14 100644
--- a/DDCore/src/GeoHandler.cpp
+++ b/DDCore/src/GeoHandler.cpp
@@ -44,7 +44,9 @@ namespace {
       collectSolid(geo, name + "_left", name + "_left", boolean->GetLeftShape(), boolean->GetLeftMatrix());
       collectSolid(geo, name + "_right", name + "_right", boolean->GetRightShape(), boolean->GetRightMatrix());
     }
-    geo.solids.emplace(shape);
+    if(geo.solid_set.emplace(shape).second) {
+      geo.solids.push_back(shape);
+    }
     geo.trafos.emplace_back(node, matrix);
   }
 }