diff --git a/DDCore/include/DD4hep/Segmentations.h b/DDCore/include/DD4hep/Segmentations.h
index 9a98c85cf215219e3a2ca2303b7dd550d7f2fe3c..0ae355c389cf4ebecbeb61476c9bb4723365fd8a 100644
--- a/DDCore/include/DD4hep/Segmentations.h
+++ b/DDCore/include/DD4hep/Segmentations.h
@@ -110,16 +110,24 @@ namespace DD4hep {
       /// Standard constructor
       SegmentationImplementation(DDSegmentation::BitField64* decoder);
       /// Default destructor
-      virtual ~SegmentationImplementation() {}
+      virtual ~SegmentationImplementation();
     };
 
+    /// Standard constructor
     template <typename IMP> inline
-    SegmentationImplementation<IMP>::SegmentationImplementation(DDSegmentation::BitField64* decoder)
-      :  SegmentationObject(0), implementation(decoder)
+    SegmentationImplementation<IMP>::SegmentationImplementation(DDSegmentation::BitField64* decode)
+      :  SegmentationObject(0), implementation(decode)
     {
       this->segmentation = &implementation;
     }
     
+    /// Default destructor
+    template <typename IMP> inline
+    SegmentationImplementation<IMP>::~SegmentationImplementation()
+    {
+      this->segmentation = 0; // Prevent deletion! We have the object aggregated!
+    }
+    
     /// Handle class supporting generic Segmentation of sensitive detectors
     /**
      *
diff --git a/DDCore/src/Segmentations.cpp b/DDCore/src/Segmentations.cpp
index 4578eac6a67bdefd065f69189ce7314b59582fa4..d6f9aa67d1160af6d1da151c3680e534688b5417 100644
--- a/DDCore/src/Segmentations.cpp
+++ b/DDCore/src/Segmentations.cpp
@@ -122,24 +122,24 @@ void SegmentationObject::neighbours(const CellID& cell, std::set<CellID>& nb) co
 }
 
 /// Constructor to used when creating a new object
-Segmentation::Segmentation(const string& typ, const string& nam, BitField64* decoder) : Handle<Implementation>()
+Segmentation::Segmentation(const string& typ, const string& nam, BitField64* dec) : Handle<Implementation>()
 {
   string type = "segmentation_constructor__"+typ;
-  SegmentationObject* obj = PluginService::Create<SegmentationObject*>(type, decoder);
+  SegmentationObject* obj = PluginService::Create<SegmentationObject*>(type, dec);
   if ( obj != 0 )  {
     assign(obj, nam, typ);
     if ( !nam.empty() ) obj->setName(nam);
+    return;
   }
 #if 0
   BaseSegmentation* s = DDSegmentation::SegmentationFactory::instance()->create(typ);
   if (s != 0) {
     assign(new Object(s), nam, "");
     if ( !nam.empty() ) s->setName(nam);
+    return;
   }
 #endif
-  else {
-    throw runtime_error("FAILED to create segmentation: " + typ + ". Missing factory method for: " + typ + "!");
-  }
+  except("Segmentation","FAILED to create segmentation: %s. [Missing factory]",typ.c_str());
 }
 
 /// Accessor: Segmentation type