diff --git a/DDCore/include/DD4hep/Detector.h b/DDCore/include/DD4hep/Detector.h
index 97f4b609245d5568cee7c63ee717faa93669ff6b..6fdcf6171b6552aad88b945953bb008ce98e3b51 100644
--- a/DDCore/include/DD4hep/Detector.h
+++ b/DDCore/include/DD4hep/Detector.h
@@ -310,12 +310,9 @@ namespace dd4hep {
     }
 
     ///---Factory method-------
-    static Detector& getInstance(void);
+    static Detector& getInstance(const std::string& name="default");
     /// Destroy the singleton instance
-    static void destroyInstance();
-
-    /// Create a new instance of the detector object
-    static Detector* newInstance(void);
+    static void destroyInstance(const std::string& name="default");
   };
 
   /*
diff --git a/DDCore/src/DetectorData.cpp b/DDCore/src/DetectorData.cpp
index 9dc4622b7872ccf88a5bd20cd911752c162889dd..3aa011587986a17f75b83c4d324416138d3f3a0a 100644
--- a/DDCore/src/DetectorData.cpp
+++ b/DDCore/src/DetectorData.cpp
@@ -228,8 +228,11 @@ void DetectorData::destroyData(bool destroy_mgr)   {
   m_materialVacuum.clear();
   m_materialAir.clear();
   m_inhibitConstants = false;
-  if ( destroy_mgr )
+  if ( destroy_mgr )  {
+    gGeoManager = m_manager;
     deletePtr(m_manager);
+    gGeoManager = 0;
+  }
   else  {
     gGeoManager = m_manager;
     m_manager = 0;
@@ -299,7 +302,6 @@ void DetectorData::adoptData(DetectorData& source, bool clr)   {
   m_world.setPlacement(m_manager->GetTopNode());
   // Need to update some global stuff
   if ( gGeoManager != m_manager ) delete gGeoManager;
-  gGeoManager        = m_manager;
-  
+  gGeoManager       = m_manager;
   if ( clr ) source.clearData();
 }
diff --git a/DDCore/src/DetectorImp.cpp b/DDCore/src/DetectorImp.cpp
index 37c89be59e9c2124c0ec3e41b3430651247abdd5..def6f377a62af77ecbff04b608467afe8c95406b 100644
--- a/DDCore/src/DetectorImp.cpp
+++ b/DDCore/src/DetectorImp.cpp
@@ -28,6 +28,7 @@
 #include <iostream>
 #include <stdexcept>
 #include <cerrno>
+#include <mutex>
 
 // ROOT inlcude files
 #include "TGeoCompositeShape.h"
@@ -61,7 +62,32 @@ namespace {
       m_t = BUILD_NONE;
     }
   };
-  static Detector* s_description = 0;
+  struct Instances  {
+    recursive_mutex  lock;
+    map<string, Detector*> detectors;
+    Instances() = default;
+    ~Instances() = default;
+    Detector* get(const string& name)   {
+      auto i = detectors.find(name);
+      return i==detectors.end() ? 0 : (*i).second;
+    }
+    void insert(const string& name, Detector* detector)   {
+      auto i = detectors.find(name);
+      if ( i==detectors.end() )   {
+        detectors.insert(make_pair(name,detector));
+        return;
+      }
+      except("DD4hep","Cannot insert detector instance %s [Already present]",name.c_str());
+    }
+    Detector* remove(const string& name)   {
+      auto i = detectors.find(name);
+      if ( i==detectors.end() )  {
+        detectors.erase(i);
+        return (*i).second;
+      }
+      return 0;
+    }
+  } s_instances;
 
   void description_unexpected()    {
     try  {
@@ -89,38 +115,36 @@ string dd4hep::versionString(){
   return vs;
 }
 
-Detector& Detector::getInstance() {
-  if (!s_description)
-    s_description = new DetectorImp();
-  return *s_description;
-}
-
-Detector* Detector::newInstance() {
-  Detector* description = new DetectorImp();
-  return description;
+Detector& Detector::getInstance(const std::string& name)   {
+  lock_guard<recursive_mutex> lock(s_instances.lock);
+  Detector* description = s_instances.get(name);
+  if ( 0 == description )   {
+    gGeoManager = 0;
+    description = new DetectorImp(name);
+    s_instances.insert(name,description);
+  }
+  return *description;
 }
 
 /// Destroy the instance
-void Detector::destroyInstance() {
-  if (s_description)
-    delete s_description;
-  s_description = 0;
+void Detector::destroyInstance(const std::string& name) {
+  lock_guard<recursive_mutex> lock(s_instances.lock);
+  Detector* description = s_instances.remove(name);
+  if (description)
+    delete description;
 }
 
 /// Default constructor
-DetectorImp::DetectorImp()
+DetectorImp::DetectorImp(const string& name)
   : DetectorData(), DetectorLoad(this), m_buildType(BUILD_NONE)
 {
   set_unexpected( description_unexpected ) ;
   set_terminate( description_unexpected ) ;
-  
   InstanceCount::increment(this);
-  //if (0 == gGeoManager) {
-  if ( gGeoManager ) delete gGeoManager;
-  gGeoManager = new TGeoManager("world", "Detector Geometry");
-  //}
+  //if ( gGeoManager ) delete gGeoManager;
+  m_manager = new TGeoManager(name.c_str(), "Detector Geometry");
   {
-    m_manager = gGeoManager;
+    gGeoManager = m_manager;
 #if 0 //FIXME: eventually this should be set to 1 - needs fixes in examples ...
     TGeoElementTable*	table = m_manager->GetElementTable();
     table->TGeoElementTable::~TGeoElementTable();
@@ -147,8 +171,15 @@ DetectorImp::DetectorImp()
 
 /// Standard destructor
 DetectorImp::~DetectorImp() {
-  if ( m_manager == gGeoManager ) gGeoManager = 0;
-  destroyData(false);
+  if ( m_manager )  {
+    lock_guard<recursive_mutex> lock(s_instances.lock);
+    if ( m_manager == gGeoManager ) gGeoManager = 0;
+    Detector* description = s_instances.get(m_manager->GetName());
+    if ( 0 != description )   {
+      s_instances.remove(m_manager->GetName());
+    }
+  }
+  destroyData(true);
   m_extensions.clear();
   InstanceCount::decrement(this);
 }
diff --git a/DDCore/src/DetectorImp.h b/DDCore/src/DetectorImp.h
index 8be24276a961c4952a494133fc35c5c882f1bc83..c391214259c5b686b719ba9ad0f5a00fd45f2acc 100644
--- a/DDCore/src/DetectorImp.h
+++ b/DDCore/src/DetectorImp.h
@@ -59,7 +59,7 @@ namespace dd4hep {
     void imp_loadVolumeManager();
 
     /// Default constructor
-    DetectorImp();
+    DetectorImp(const std::string& name);
 
     /// Standard destructor
     virtual ~DetectorImp();
diff --git a/DDCore/src/GlobalAlignment.cpp b/DDCore/src/GlobalAlignment.cpp
index 87de532f0b6b8374082e6bc4ba575e74ed57355d..3daa25836c5adeac2f3b01c4f20a18e3d64128dd 100644
--- a/DDCore/src/GlobalAlignment.cpp
+++ b/DDCore/src/GlobalAlignment.cpp
@@ -39,7 +39,6 @@ namespace  {
 /// Initializing constructor to create a new object
 GlobalAlignment::GlobalAlignment(const string& path) {
   //cout << "GlobalAlignment: path=" << path << endl;
-  //m_element = gGeoManager->MakePhysicalNode(path.c_str());
   m_element = new TGeoPhysicalNode(path.c_str());
 }
 
diff --git a/DDCore/src/Shapes.cpp b/DDCore/src/Shapes.cpp
index 841eb97df09573fed703233630e9ce221d830eaf..0b784fc37afd51436fabca5d7e72e4be0b1467a8 100644
--- a/DDCore/src/Shapes.cpp
+++ b/DDCore/src/Shapes.cpp
@@ -623,29 +623,29 @@ void PseudoTrap::make(double x1, double x2, double y1, double y2, double z, doub
   /// calculate the displacement of the tubs w.r.t. to the trap, determine the opening angle of the tubs
   double delta        = std::sqrt( r * r - x * x );
  
-  if( r < 0 && std::abs( r ) >= x )  {
+  if( r < 0 && std::abs(r) >= x )  {
     intersec = true; // intersection solid
     h = y1 < y2 ? y2 : y1; // tubs half height
     h += h/20.; // enlarge a bit - for subtraction solid
     if( atMinusZ )    {
       displacement = - halfZ - delta; 
-      startPhi = 90. - halfOpeningAngle;
+      startPhi     = 270.0 - halfOpeningAngle;
     }
     else    {
       displacement =   halfZ + delta;
-      startPhi = -90.- halfOpeningAngle;
+      startPhi     = 90.0 - halfOpeningAngle;
     }
   }
   else if( r > 0 && std::abs(r) >= x )  {
     if( atMinusZ )    {
       displacement = - halfZ + delta;
-      startPhi = 270.- halfOpeningAngle;
+      startPhi     = 90.0 - halfOpeningAngle;
       h = y1;
     }
     else
     {
       displacement =   halfZ - delta; 
-      startPhi = 90. - halfOpeningAngle;
+      startPhi     = 270.0 - halfOpeningAngle;
       h = y2;
     }    
   }
@@ -655,16 +655,15 @@ void PseudoTrap::make(double x1, double x2, double y1, double y2, double z, doub
  
   Solid trap(new TGeoTrd2(x1, x2, y1, y2, halfZ));
   Solid tubs(new TGeoTubeSeg(0.,std::abs(r),h,startPhi,startPhi + halfOpeningAngle*2.));
-  UnionSolid solid;
+  TGeoCompositeShape* solid = 0;
   if( intersec )  {
-    solid = SubtractionSolid(trap, tubs, Transform3D(RotationX(M_PI/2.), Position(0.,0.,displacement)));
-    return;
+    solid = SubtractionSolid(trap, tubs, Transform3D(RotationX(M_PI/2.), Position(0.,0.,displacement))).ptr();
   }
   else  {
     SubtractionSolid sub(tubs, Box(1.1*x, 1.1*h, std::sqrt(r*r-x*x)), Transform3D(RotationX(M_PI/2.)));
-    solid = UnionSolid(trap, sub, Transform3D(RotationX(M_PI/2.), Position(0,0,displacement)));
+    solid = UnionSolid(trap, sub, Transform3D(RotationX(M_PI/2.), Position(0,0,displacement))).ptr();
   }
-  _assign(solid.ptr(),"","pseudo-trap", true);
+  _assign(solid,"","pseudo-trap", true);
 }
 
 /// Helper function to create poly hedron
diff --git a/DDCore/src/XML/VolumeBuilder.cpp b/DDCore/src/XML/VolumeBuilder.cpp
index 2e71d7d26c4fe6bcd302362ca30f25b02d7a2fe2..37d43138ef1c70868ff8e951bf70516ae4afa632 100644
--- a/DDCore/src/XML/VolumeBuilder.cpp
+++ b/DDCore/src/XML/VolumeBuilder.cpp
@@ -79,7 +79,7 @@ Solid VolumeBuilder::makeShape(xml_h handle)   {
   if ( a )   {
     nam = handle.attr<string>(a);
     auto is = shapes.find(nam);
-    if ( is == shapes.end() )  {
+    if ( is != shapes.end() )  {
       except("VolumeBuilder","+++ The named shape %s is already known to this builder unit. "
              "Cannot be overridded.",nam.c_str());
     }
@@ -87,7 +87,7 @@ Solid VolumeBuilder::makeShape(xml_h handle)   {
   /// Was it veto'ed before ?
   if ( !nam.empty() )   {
     auto iv = shape_veto.find(nam);
-    if ( iv == shape_veto.end() )  {
+    if ( iv != shape_veto.end() )  {
       return Solid();
     }
   }
@@ -190,6 +190,7 @@ size_t VolumeBuilder::buildVolumes(xml_h handle)    {
       if ( c.attr_nothrow(_U(sensitive)) )   {
         vol.setSensitiveDetector(sensitive);
       }
+      printout(ALWAYS,"VolumeBuilder","+++ Building volume %s",nam.c_str());
       continue;
     }
     bool is_assembly = true;
diff --git a/DDCore/src/plugins/Compact2Objects.cpp b/DDCore/src/plugins/Compact2Objects.cpp
index 6e2e317fbb50c32573e0c45af3c4d9b3fb26925b..8bdded2dc80469905cf66123e902f1e47ada05a2 100644
--- a/DDCore/src/plugins/Compact2Objects.cpp
+++ b/DDCore/src/plugins/Compact2Objects.cpp
@@ -97,6 +97,7 @@ namespace {
   bool s_debug_materials    = false;
   bool s_debug_segmentation = false;
   bool s_debug_constants    = false;
+  bool s_debug_include      = false;
 }
 
 static Ref_t create_ConstantField(Detector& /* description */, xml_h e) {
@@ -251,6 +252,7 @@ template <> void Converter<Debug>::operator()(xml_h e) const {
     else if ( nam.substr(0,6) == "limits" ) s_debug_limits       = (0 != val);
     else if ( nam.substr(0,6) == "segmen" ) s_debug_segmentation = (0 != val);
     else if ( nam.substr(0,6) == "consta" ) s_debug_constants    = (0 != val);
+    else if ( nam.substr(0,6) == "includ" ) s_debug_include      = (0 != val);
   }
 }
   
@@ -296,6 +298,9 @@ template <> void Converter<Constant>::operator()(xml_h e) const {
     return;
   }
   xml::DocumentHolder doc(xml::DocumentHandler().load(e, e.attr_value(_U(ref))));
+  if ( s_debug_include )   {
+    printout(ALWAYS, "Compact","++ Processing xml document %s.",doc.uri().c_str());
+  }
   xml_h root = doc.root();
   xml_coll_t(root, _U(define)).for_each(_U(constant), Converter<Constant>(description));
   xml_coll_t(root, _U(constant)).for_each(Converter<Constant>(description));
@@ -1072,6 +1077,9 @@ template <> void Converter<DetElement>::operator()(xml_h element) const {
 template <> void Converter<GdmlFile>::operator()(xml_h element) const   {
   xml::DocumentHolder doc(xml::DocumentHandler().load(element, element.attr_value(_U(ref))));
   xml_h root = doc.root();
+  if ( s_debug_include )   {
+    printout(ALWAYS, "Compact","++ Processing xml document %s.",doc.uri().c_str());
+  }
   if ( root.tag() == "materials" || root.tag() == "elements" )   {
     xml_coll_t(root, _U(isotope)).for_each(Converter<Isotope>(this->description,0,0));
     xml_coll_t(root, _U(element)).for_each(Converter<Atom>(this->description));
@@ -1169,6 +1177,9 @@ template <> void Converter<DetElementInclude>::operator()(xml_h element) const {
   string type = element.hasAttr(_U(type)) ? element.attr<string>(_U(type)) : string("xml");
   if ( type == "xml" )  {
     xml::DocumentHolder doc(xml::DocumentHandler().load(element, element.attr_value(_U(ref))));
+    if ( s_debug_include )   {
+      printout(ALWAYS, "Compact","++ Processing xml document %s.",doc.uri().c_str());
+    }
     xml_h node = doc.root();
     string tag = node.tag();
     if ( tag == "lccdd" )
diff --git a/DDDetectors/compact/materials.xml b/DDDetectors/compact/materials.xml
index cb555a1860b8add9657234aa211d99cdaf3e5768..d6d057c0898bd28f2fb39c47506d2f1c626d77b9 100644
--- a/DDDetectors/compact/materials.xml
+++ b/DDDetectors/compact/materials.xml
@@ -25,7 +25,7 @@
     <D type="density" value="1.3" unit="g/cm3"/>
     <composite n="44" ref="H"/>
     <composite n="15" ref="C"/>
-    <composite n="7" ref="O"/>
+    <composite n="7"  ref="O"/>
   </material>
 
   <material name="Quartz">
@@ -36,7 +36,7 @@
 
   <material name="G10">
     <D type="density" value="1.7" unit="g/cm3"/>
-    <fraction n="0.08" ref="Cl"/>
+    <fraction n="0.08"  ref="Cl"/>
     <fraction n="0.773" ref="Quartz"/>
     <fraction n="0.147" ref="Epoxy"/>
   </material>
@@ -50,7 +50,7 @@
   <material name="Steel235">
     <D value="7.85" unit="g/cm3"/>
     <fraction n="0.998" ref="Fe"/>
-    <fraction n=".002" ref="C"/>
+    <fraction n=".002"  ref="C"/>
   </material>
 
   <material name="SiliconOxide">
diff --git a/DDDetectors/src/VolumeAssembly_geo.cpp b/DDDetectors/src/VolumeAssembly_geo.cpp
index 080eba277d64778ecdd253e550c4167aabb37f75..1f3850dea2dd619148ecf10a77d43de399264bcf 100644
--- a/DDDetectors/src/VolumeAssembly_geo.cpp
+++ b/DDDetectors/src/VolumeAssembly_geo.cpp
@@ -103,11 +103,18 @@ namespace {
         Solid    solid = xml::createShape(description, x_envshape.typeStr(), x_envshape);
         assembly = Volume("lv"+det_name, solid, mat);
       }
-      if ( x_env.hasAttr(_U(name)) ) assembly->SetName(x_env.nameStr().c_str());
+      /// Set generic associations
       assembly.setAttributes(description,x_det.regionStr(),x_det.limitsStr(),x_det.visStr());
+      /// If specified more direct: use these ones.
+      if ( x_env.hasAttr(_U(vis)) )  {
+        assembly.setVisAttributes(description, x_env.visStr());
+      }
       if ( x_det.hasAttr(_U(sensitive)) )  {
         sens.setType(x_det.attr<string>(_U(sensitive)));
       }
+      if ( x_env.hasAttr(_U(name)) )   {
+        assembly->SetName(x_env.nameStr().c_str());
+      }
 
       for(xml_coll_t coll(e,_U(volume)); coll; ++coll)   {
         xml_comp_t x_vol = coll;
diff --git a/DDG4/examples/TEve.C b/DDG4/examples/TEve.C
index ed26e1a17a9101146503e280ce9f654129e58ee1..fc7b505c6fe1e1bf1883e528092894b72a79774f 100644
--- a/DDG4/examples/TEve.C
+++ b/DDG4/examples/TEve.C
@@ -29,18 +29,13 @@ using namespace dd4hep::detail;
 
 void TEve()    {
   Detector& description = Detector::getInstance();
+  TGeoManager* mgr = description.manager();
   const char* fname = "file:../DD4hep/examples/CLICSiD/compact/compact.xml";
   description.apply("DD4hep_CompactLoader",1,(char**)&fname);
 
   TEveManager::Create();
-  //TFile::SetCacheFileDir(".");
-  //gGeoManager = gEve->GetGeometry("LHCb.gdml");
-  //gGeoManager = gEve->GetGeometry("lhcbfull_v1.root");
-
   gEve->fGeometries->Add(new TObjString(fname),&description.manager());
-  //gGeoManager->DefaultColors();
-
-  TEveGeoTopNode* tn = new TEveGeoTopNode(gGeoManager, gGeoManager->GetTopNode());
+  TEveGeoTopNode* tn = new TEveGeoTopNode(mgr, mgr->GetTopNode());
   tn->SetVisLevel(4);
   gEve->AddGlobalElement(tn);
 
diff --git a/DDG4/include/DDG4/Geant4GeometryInfo.h b/DDG4/include/DDG4/Geant4GeometryInfo.h
index b91aa237e1b0a3d11f8bf4d721fa7404aeb9fcd1..af0cde3f3941e61827feb7c10ca2bbbc7aecdecc 100644
--- a/DDG4/include/DDG4/Geant4GeometryInfo.h
+++ b/DDG4/include/DDG4/Geant4GeometryInfo.h
@@ -86,6 +86,7 @@ namespace dd4hep {
     class Geant4GeometryInfo : public TNamed, public detail::GeoHandlerTypes::GeometryInfo {
     public:
       typedef std::vector<const G4VPhysicalVolume*>           Geant4PlacementPath;
+      TGeoManager*                         manager = 0;
       Geant4GeometryMaps::ElementMap       g4Elements;
       Geant4GeometryMaps::MaterialMap      g4Materials;
       Geant4GeometryMaps::SolidMap         g4Solids;
diff --git a/DDG4/src/Geant4Converter.cpp b/DDG4/src/Geant4Converter.cpp
index 21a414341783ff8a404f97afd220df88c9d03817..0d0172ac70a411fd61e16aaf3ffc52cc9d4b86ac 100644
--- a/DDG4/src/Geant4Converter.cpp
+++ b/DDG4/src/Geant4Converter.cpp
@@ -814,7 +814,7 @@ void* Geant4Converter::handlePlacement(const string& name, const TGeoNode* node)
         ass->imprint(info,node,chain,ass,(*volIt).second, transform, copy, checkOverlaps);
         return 0;
       }
-      else if ( node != gGeoManager->GetTopNode() && volIt == info.g4Volumes.end() )  {
+      else if ( node != info.manager->GetTopNode() && volIt == info.g4Volumes.end() )  {
         throw logic_error("Geant4Converter: Invalid mother volume found!");
       }
       G4LogicalVolume* g4vol = info.g4Volumes[vol];
@@ -1116,7 +1116,9 @@ template <typename O, typename C, typename F> void handleRMap(const O* o, const
 /// Create geometry conversion
 Geant4Converter& Geant4Converter::create(DetElement top) {
   Geant4GeometryInfo& geo = this->init();
+  World wrld = top.world();
   m_data->clear();
+  geo.manager = &wrld.detectorDescription().manager();
   collect(top, geo);
   checkOverlaps = false;
   // We do not have to handle defines etc.
diff --git a/examples/ClientTests/CMakeLists.txt b/examples/ClientTests/CMakeLists.txt
index 345a85610cbd7a6ab252685bc0e4e8b42d67aaef..3c86a128002a6293f5abf14494b9fbd6b1915f7d 100644
--- a/examples/ClientTests/CMakeLists.txt
+++ b/examples/ClientTests/CMakeLists.txt
@@ -23,6 +23,11 @@ dd4hep_add_plugin( ClientTests SOURCES src/*.cpp
   OPTIONAL       [BOOST SOURCES src_boost/*.cpp]
   )
 #
+#-----------------------------------------------------------------------------------
+dd4hep_add_executable( multipleGeo   main/MultipleGeometries.cpp )
+#-----------------------------------------------------------------------------------
+#
+#
 set(ClientTestsEx_INSTALL         ${CMAKE_INSTALL_PREFIX}/examples/ClientTests)
 dd4hep_install_dir( compact scripts ref DESTINATION ${ClientTestsEx_INSTALL} )
 #--------------------------------------------------------------------------
@@ -73,6 +78,19 @@ dd4hep_add_test_reg( ClientTests_DumpMaterials
   )
 #
 #  Test readout strings of the form: <id>system:8,barrel:-2</id>
+dd4hep_add_test_reg( ClientTests_MultipleGeometries
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_ClientTests.sh"
+  EXEC_ARGS   multipleGeo
+  -compact file:${ClientTestsEx_INSTALL}/../CLICSiD/compact/compact.xml
+  -compact file:${ClientTestsEx_INSTALL}/compact/MiniTel.xml
+  -compact file:${ClientTestsEx_INSTALL}/compact/NestedDetectors.xml
+  -no-interp
+  REGEX_PASS "DELETE Geometry: .*/NestedDetectors.xml"
+  REGEX_FAIL "Exception"
+  REGEX_FAIL "FAILED"
+  )
+#
+#  Test readout strings of the form: <id>system:8,barrel:-2</id>
 dd4hep_add_test_reg( ClientTests_DumpElements
   COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_ClientTests.sh"
   EXEC_ARGS  geoPluginRun
diff --git a/examples/ClientTests/compact/CheckShape.xml b/examples/ClientTests/compact/CheckShape.xml
index fb2557a348e2edaaf1ed09c47cd491f4463563e4..16dd0793076d4842a2c6abde9e8127d04777a693 100644
--- a/examples/ClientTests/compact/CheckShape.xml
+++ b/examples/ClientTests/compact/CheckShape.xml
@@ -48,7 +48,7 @@
 
   <display>
     <vis name="InvisibleNoDaughters"      showDaughters="false" visible="false"/>
-    <vis name="InvisibleWithDaughters"    showDaughters="true" visible="false"/>
+    <vis name="InvisibleWithDaughters"    showDaughters="true"  visible="false"/>
     <vis name="Shape1_vis" alpha="1.0" r="1" g="0" b="0" showDaughters="true" visible="true"/>
     <vis name="Shape2_vis" alpha="1.0" r="0" g="1" b="0" showDaughters="true" visible="true"/>
     <vis name="Shape3_vis" alpha="1.0" r="0" g="0" b="1" showDaughters="true" visible="true"/>
diff --git a/examples/ClientTests/compact/Check_Shape_PseudoTrap.xml b/examples/ClientTests/compact/Check_Shape_PseudoTrap.xml
index cbb29f5f609994b47d4f8e461b9ab30b72410df5..79ff75fff01821081723343e64558d7ab963f057 100644
--- a/examples/ClientTests/compact/Check_Shape_PseudoTrap.xml
+++ b/examples/ClientTests/compact/Check_Shape_PseudoTrap.xml
@@ -5,20 +5,30 @@
 
   <detectors>
     <detector id="1" name="Shape_PseudoTrap" type="DD4hep_TestShape_Creator">
+      <!-- Union pseudo-trap:          -->
       <check vis="Shape1_vis">
         <shape type="PseudoTrap" z="30*cm" radius="10*cm"
                x1="10*cm" x2="3*cm" y1="30*cm" y2="10*cm" minusZ="false"/>
         <position x="30*cm"  y="30*cm" z="50*cm"/>
         <rotation x="0"      y="0"     z="0"/>
       </check>
-<!-- Creates a different mesh on different platforms.
+      <!-- Intersection pseudo-trap   -->
       <check vis="Shape2_vis">
-        <shape type="PseudoTrap" z="30*cm" radius="5*cm"
+        <shape type="PseudoTrap" z="30*cm" radius="-10*cm"
                x1="3*cm" x2="10*cm" y1="30*cm" y2="10*cm" minusZ="true"/>
         <position x="30*cm"  y="30*cm" z="-50*cm"/>
         <rotation x="0"      y="0"     z="0"/>
       </check>
--->
+
+      <!-- Creates a different mesh on different platforms.
+      <check vis="Shape3_vis">
+         <shape type="PseudoTrap" z="30*cm" radius="5*cm"
+                x1="3*cm" x2="10*cm" y1="30*cm" y2="10*cm" minusZ="true"/>
+         <position x="30*cm"  y="30*cm" z="-50*cm"/>
+         <rotation x="0"      y="0"     z="0"/>
+      </check>
+      -->
+
       <test  type="DD4hep_Mesh_Verifier" ref="${DD4hepExamplesINSTALL}/examples/ClientTests/ref/Ref_PseudoTrap.txt" create="CheckShape_create"/>
     </detector>
   </detectors>
diff --git a/examples/ClientTests/ref/Ref_PseudoTrap.txt b/examples/ClientTests/ref/Ref_PseudoTrap.txt
index 5d5df523ccaba531aab769f1d6a4da182bf1fcf6..3aa70cfc468c6c663e4dc58f3e98bfce8e8e99a6 100644
--- a/examples/ClientTests/ref/Ref_PseudoTrap.txt
+++ b/examples/ClientTests/ref/Ref_PseudoTrap.txt
@@ -1,5 +1,5 @@
-ShapeCheck[0] TGeoCompositeShape 46 Mesh-points:
-TGeoCompositeShape PseudoTrap N(mesh)=46  N(vert)=46  N(seg)=0  N(pols)=0
+ShapeCheck[0] TGeoCompositeShape 8 Mesh-points:
+TGeoCompositeShape PseudoTrap N(mesh)=8  N(vert)=8  N(seg)=0  N(pols)=0
 TGeoCompositeShape 0   Local  ( -10.00,  -30.00,  -30.00) Global (  20.00,    0.00,   20.00)
 TGeoCompositeShape 1   Local  ( -10.00,   30.00,  -30.00) Global (  20.00,   60.00,   20.00)
 TGeoCompositeShape 2   Local  (  10.00,   30.00,  -30.00) Global (  40.00,   60.00,   20.00)
@@ -8,42 +8,15 @@ TGeoCompositeShape 4   Local  (  -3.00,  -10.00,   30.00) Global (  27.00,   20.
 TGeoCompositeShape 5   Local  (  -3.00,   10.00,   30.00) Global (  27.00,   40.00,   80.00)
 TGeoCompositeShape 6   Local  (   3.00,   10.00,   30.00) Global (  33.00,   40.00,   80.00)
 TGeoCompositeShape 7   Local  (   3.00,  -10.00,   30.00) Global (  33.00,   20.00,   80.00)
-TGeoCompositeShape 8   Local  (   2.71,   10.00,   30.09) Global (  32.71,   40.00,   80.09)
-TGeoCompositeShape 9   Local  (   2.41,   10.00,   30.16) Global (  32.41,   40.00,   80.16)
-TGeoCompositeShape 10  Local  (   2.12,   10.00,   30.23) Global (  32.12,   40.00,   80.23)
-TGeoCompositeShape 11  Local  (   1.82,   10.00,   30.29) Global (  31.82,   40.00,   80.29)
-TGeoCompositeShape 12  Local  (   1.52,   10.00,   30.34) Global (  31.52,   40.00,   80.34)
-TGeoCompositeShape 13  Local  (   1.22,   10.00,   30.39) Global (  31.22,   40.00,   80.39)
-TGeoCompositeShape 14  Local  (   0.91,   10.00,   30.42) Global (  30.91,   40.00,   80.42)
-TGeoCompositeShape 15  Local  (   0.61,   10.00,   30.44) Global (  30.61,   40.00,   80.44)
-TGeoCompositeShape 16  Local  (   0.30,   10.00,   30.46) Global (  30.30,   40.00,   80.46)
-TGeoCompositeShape 17  Local  (   0.00,   10.00,   30.46) Global (  30.00,   40.00,   80.46)
-TGeoCompositeShape 18  Local  (  -0.30,   10.00,   30.46) Global (  29.70,   40.00,   80.46)
-TGeoCompositeShape 19  Local  (  -0.61,   10.00,   30.44) Global (  29.39,   40.00,   80.44)
-TGeoCompositeShape 20  Local  (  -0.91,   10.00,   30.42) Global (  29.09,   40.00,   80.42)
-TGeoCompositeShape 21  Local  (  -1.22,   10.00,   30.39) Global (  28.78,   40.00,   80.39)
-TGeoCompositeShape 22  Local  (  -1.52,   10.00,   30.34) Global (  28.48,   40.00,   80.34)
-TGeoCompositeShape 23  Local  (  -1.82,   10.00,   30.29) Global (  28.18,   40.00,   80.29)
-TGeoCompositeShape 24  Local  (  -2.12,   10.00,   30.23) Global (  27.88,   40.00,   80.23)
-TGeoCompositeShape 25  Local  (  -2.41,   10.00,   30.16) Global (  27.59,   40.00,   80.16)
-TGeoCompositeShape 26  Local  (  -2.71,   10.00,   30.09) Global (  27.29,   40.00,   80.09)
-TGeoCompositeShape 27  Local  (   2.71,  -10.00,   30.09) Global (  32.71,   20.00,   80.09)
-TGeoCompositeShape 28  Local  (   2.41,  -10.00,   30.16) Global (  32.41,   20.00,   80.16)
-TGeoCompositeShape 29  Local  (   2.12,  -10.00,   30.23) Global (  32.12,   20.00,   80.23)
-TGeoCompositeShape 30  Local  (   1.82,  -10.00,   30.29) Global (  31.82,   20.00,   80.29)
-TGeoCompositeShape 31  Local  (   1.52,  -10.00,   30.34) Global (  31.52,   20.00,   80.34)
-TGeoCompositeShape 32  Local  (   1.22,  -10.00,   30.39) Global (  31.22,   20.00,   80.39)
-TGeoCompositeShape 33  Local  (   0.91,  -10.00,   30.42) Global (  30.91,   20.00,   80.42)
-TGeoCompositeShape 34  Local  (   0.61,  -10.00,   30.44) Global (  30.61,   20.00,   80.44)
-TGeoCompositeShape 35  Local  (   0.30,  -10.00,   30.46) Global (  30.30,   20.00,   80.46)
-TGeoCompositeShape 36  Local  (   0.00,  -10.00,   30.46) Global (  30.00,   20.00,   80.46)
-TGeoCompositeShape 37  Local  (  -0.30,  -10.00,   30.46) Global (  29.70,   20.00,   80.46)
-TGeoCompositeShape 38  Local  (  -0.61,  -10.00,   30.44) Global (  29.39,   20.00,   80.44)
-TGeoCompositeShape 39  Local  (  -0.91,  -10.00,   30.42) Global (  29.09,   20.00,   80.42)
-TGeoCompositeShape 40  Local  (  -1.22,  -10.00,   30.39) Global (  28.78,   20.00,   80.39)
-TGeoCompositeShape 41  Local  (  -1.52,  -10.00,   30.34) Global (  28.48,   20.00,   80.34)
-TGeoCompositeShape 42  Local  (  -1.82,  -10.00,   30.29) Global (  28.18,   20.00,   80.29)
-TGeoCompositeShape 43  Local  (  -2.12,  -10.00,   30.23) Global (  27.88,   20.00,   80.23)
-TGeoCompositeShape 44  Local  (  -2.41,  -10.00,   30.16) Global (  27.59,   20.00,   80.16)
-TGeoCompositeShape 45  Local  (  -2.71,  -10.00,   30.09) Global (  27.29,   20.00,   80.09)
-TGeoCompositeShape Bounding box:  dx=  10.00 dy=  30.00 dz=  30.23 Origin: x=   0.00 y=   0.00 z=   0.23
+TGeoCompositeShape Bounding box:  dx=  10.00 dy=  30.00 dz=  30.00 Origin: x=   0.00 y=   0.00 z=   0.00
+ShapeCheck[1] TGeoCompositeShape 8 Mesh-points:
+TGeoCompositeShape PseudoTrap N(mesh)=8  N(vert)=8  N(seg)=0  N(pols)=0
+TGeoCompositeShape 0   Local  (  -3.00,  -30.00,  -30.00) Global (  27.00,    0.00,  -80.00)
+TGeoCompositeShape 1   Local  (  -3.00,   30.00,  -30.00) Global (  27.00,   60.00,  -80.00)
+TGeoCompositeShape 2   Local  (   3.00,   30.00,  -30.00) Global (  33.00,   60.00,  -80.00)
+TGeoCompositeShape 3   Local  (   3.00,  -30.00,  -30.00) Global (  33.00,    0.00,  -80.00)
+TGeoCompositeShape 4   Local  ( -10.00,  -10.00,   30.00) Global (  20.00,   20.00,  -20.00)
+TGeoCompositeShape 5   Local  ( -10.00,   10.00,   30.00) Global (  20.00,   40.00,  -20.00)
+TGeoCompositeShape 6   Local  (  10.00,   10.00,   30.00) Global (  40.00,   40.00,  -20.00)
+TGeoCompositeShape 7   Local  (  10.00,  -10.00,   30.00) Global (  40.00,   20.00,  -20.00)
+TGeoCompositeShape Bounding box:  dx=  10.00 dy=  30.00 dz=  30.00 Origin: x=   0.00 y=   0.00 z=   0.00