diff --git a/DDCore/CMakeLists.txt b/DDCore/CMakeLists.txt
index c5796fffa2df735000f233d46f8bc803c010de25..5d4e85b3d9bc108572ae63408b7ea5f478aa93e0 100644
--- a/DDCore/CMakeLists.txt
+++ b/DDCore/CMakeLists.txt
@@ -33,13 +33,18 @@ dd4hep_add_dictionary( G__DD4hep
   include/XML/tinystring.h
   LINKDEF include/ROOT/LinkDef.h )
 
+dd4hep_add_package_library ( DDParsers
+  INCLUDE_DIRS  
+  LINK_LIBRARIES
+  OPTIONAL       [BOOST SOURCES src/parsers/*.cpp]
+  )
+
 #---Generate DDCore Library-------------------------------------------------------
 dd4hep_add_package_library ( DDCore
   SOURCES        src/*.cpp src/Evaluator/*.cpp src/XML/*.cpp
   GENERATED      G__DD4hep.cxx 
   INCLUDE_DIRS   ${GaudiPluginService_INCLUDE_DIRS}
-  LINK_LIBRARIES ${GaudiPluginService_LIBRARIES}
-  OPTIONAL       [BOOST SOURCES src/parsers/*.cpp]
+  LINK_LIBRARIES DDParsers ${GaudiPluginService_LIBRARIES}
   )
 
 # Generate DDCore plugins---------------------------------------------------------
diff --git a/DDCore/include/DD4hep/AlignmentData.h b/DDCore/include/DD4hep/AlignmentData.h
index a8e762fcea84fdc140367f4cf159374d3cc7c964..c1d131b4a836d173ef44c2f9ad363ae1ad404138 100644
--- a/DDCore/include/DD4hep/AlignmentData.h
+++ b/DDCore/include/DD4hep/AlignmentData.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/AlignmentTools.h b/DDCore/include/DD4hep/AlignmentTools.h
index 84eb94a9be72350f979b7521eec0f393b63355c3..729bf270066f1621ca2cc9e3eb437425a1b0e659 100644
--- a/DDCore/include/DD4hep/AlignmentTools.h
+++ b/DDCore/include/DD4hep/AlignmentTools.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Alignments.h b/DDCore/include/DD4hep/Alignments.h
index 13950dea1a96e87de621e2d983a8ea4fac5d77a4..e1c4f4f881c0a910e577ec9bbb20f67a2f3f37b2 100644
--- a/DDCore/include/DD4hep/Alignments.h
+++ b/DDCore/include/DD4hep/Alignments.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/BasicGrammar.h b/DDCore/include/DD4hep/BasicGrammar.h
index 20bec995c4f35ea11b75d4d4c8da8eeb5cd5e90c..5bb5ce101b6032a0831f0243af081188d9618a96 100644
--- a/DDCore/include/DD4hep/BasicGrammar.h
+++ b/DDCore/include/DD4hep/BasicGrammar.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/BasicGrammar_inl.h b/DDCore/include/DD4hep/BasicGrammar_inl.h
index e6d2fd580937982a2c27ef4c2ac83326f1ec6502..2080a968c6ef86ae1f47e2c0325822bc0970b05d 100644
--- a/DDCore/include/DD4hep/BasicGrammar_inl.h
+++ b/DDCore/include/DD4hep/BasicGrammar_inl.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Callback.h b/DDCore/include/DD4hep/Callback.h
index eba5ad3db5ca88d3d46f82f5660698b892740162..299c3f572fc167ce4c188c6d9acc35b6c51d4e31 100644
--- a/DDCore/include/DD4hep/Callback.h
+++ b/DDCore/include/DD4hep/Callback.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
@@ -19,9 +18,7 @@
 #include <typeinfo>
 #include <vector>
 
-/*
- *   DD4hep namespace declaration
- */
+/// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
 
 
diff --git a/DDCore/include/DD4hep/CartesianGridXY.h b/DDCore/include/DD4hep/CartesianGridXY.h
index c29e507b9f0922727da80e7cb03256a8b9ba590f..1efcffea4666892b7c942a4315106cf3182668a5 100644
--- a/DDCore/include/DD4hep/CartesianGridXY.h
+++ b/DDCore/include/DD4hep/CartesianGridXY.h
@@ -1,3 +1,4 @@
+//==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
@@ -15,7 +16,7 @@
 #define DD4HEP_DDCORE_CARTESIANGRIDXY_H 1
 
 // Framework include files
-#include "DD4hep/Objects.h"
+#include "DD4hep/Segmentations.h"
 
 /// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
@@ -28,7 +29,8 @@ namespace DD4hep {
 
     // Forward declarations
     class Segmentation;
-
+    template <typename T> class SegmentationWrapper;
+    
     /// We need some abbreviation to make the code more readable.
     typedef Handle<SegmentationWrapper<DDSegmentation::CartesianGridXY> > CartesianGridXYHandle;
 
diff --git a/DDCore/include/DD4hep/CartesianGridXYZ.h b/DDCore/include/DD4hep/CartesianGridXYZ.h
index 1d53c9e466140e9ae4eacf2e0a61c2fb93703e8e..6953184168d568aa22d9c8141fc10f65a74e7ee8 100644
--- a/DDCore/include/DD4hep/CartesianGridXYZ.h
+++ b/DDCore/include/DD4hep/CartesianGridXYZ.h
@@ -1,3 +1,4 @@
+//==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
@@ -15,7 +16,7 @@
 #define DD4HEP_DDCORE_CARTESIANGRIDXYZ_H 1
 
 // Framework include files
-#include "DD4hep/Objects.h"
+#include "DD4hep/Segmentations.h"
 
 /// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
@@ -28,6 +29,7 @@ namespace DD4hep {
 
     // Forward declarations
     class Segmentation;
+    template <typename T> class SegmentationWrapper;
 
     /// We need some abbreviation to make the code more readable.
     typedef Handle<SegmentationWrapper<DDSegmentation::CartesianGridXYZ> > CartesianGridXYZHandle;
diff --git a/DDCore/include/DD4hep/CartesianGridXZ.h b/DDCore/include/DD4hep/CartesianGridXZ.h
index e86f5828e1da9c039e49c26613417190f718470c..df9de68133747d82313673c10f45ec8d1ad8bad2 100644
--- a/DDCore/include/DD4hep/CartesianGridXZ.h
+++ b/DDCore/include/DD4hep/CartesianGridXZ.h
@@ -1,3 +1,4 @@
+//==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
@@ -15,7 +16,7 @@
 #define DD4HEP_DDCORE_CARTESIANGRIDXZ_H 1
 
 // Framework include files
-#include "DD4hep/Objects.h"
+#include "DD4hep/Segmentations.h"
 
 /// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
@@ -28,6 +29,7 @@ namespace DD4hep {
 
     // Forward declarations
     class Segmentation;
+    template <typename T> class SegmentationWrapper;
     
     /// We need some abbreviation to make the code more readable.
     typedef Handle<SegmentationWrapper<DDSegmentation::CartesianGridXZ> > CartesianGridXZHandle;
diff --git a/DDCore/include/DD4hep/CartesianGridYZ.h b/DDCore/include/DD4hep/CartesianGridYZ.h
index 04f46915e4a8b8484d225b3f8d8267eff2ba3698..61c4727fd9102a1786b0f2f81303ca0eb110640b 100644
--- a/DDCore/include/DD4hep/CartesianGridYZ.h
+++ b/DDCore/include/DD4hep/CartesianGridYZ.h
@@ -1,3 +1,4 @@
+//==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
@@ -15,7 +16,7 @@
 #define DD4HEP_DDCORE_CARTESIANGRIDYZ_H 1
 
 // Framework include files
-#include "DD4hep/Objects.h"
+#include "DD4hep/Segmentations.h"
 
 /// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
@@ -28,6 +29,7 @@ namespace DD4hep {
 
     // Forward declarations
     class Segmentation;
+    template <typename T> class SegmentationWrapper;
     
     /// We need some abbreviation to make the code more readable.
     typedef Handle<SegmentationWrapper<DDSegmentation::CartesianGridYZ> > CartesianGridYZHandle;
diff --git a/DDCore/include/DD4hep/ComponentProperties.h b/DDCore/include/DD4hep/ComponentProperties.h
index 8640787ac1556e5847d1bc5abf9d29f8169d5c8d..0545506727dc5f762eefa6e02e91fa8f7f76b3b2 100644
--- a/DDCore/include/DD4hep/ComponentProperties.h
+++ b/DDCore/include/DD4hep/ComponentProperties.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/ComponentProperties_inl.h b/DDCore/include/DD4hep/ComponentProperties_inl.h
index c918c58427b7723663d45a5b26eb390273ad90f0..2a55b02de83bc1e06181db01fa9844339d50b8aa 100644
--- a/DDCore/include/DD4hep/ComponentProperties_inl.h
+++ b/DDCore/include/DD4hep/ComponentProperties_inl.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/ConditionDerived.h b/DDCore/include/DD4hep/ConditionDerived.h
index fb47115a3b22fb501cc8806659d038e45cd57aae..e640f24d9fe0c827f0b7df576a1839c90061df8e 100644
--- a/DDCore/include/DD4hep/ConditionDerived.h
+++ b/DDCore/include/DD4hep/ConditionDerived.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/ConditionTypes.h b/DDCore/include/DD4hep/ConditionTypes.h
index e67a7a0f9fc7930547255dd5c3192b77f0b13fa3..22118b2f0f0dccc2efecac8d4e0c68d0affcb20c 100644
--- a/DDCore/include/DD4hep/ConditionTypes.h
+++ b/DDCore/include/DD4hep/ConditionTypes.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Conditions.h b/DDCore/include/DD4hep/Conditions.h
index 1f9ce3e55b5a8de47ad105556542deabb2c1ffe9..74d962fc5fb7327a0f67d90d97bfc38c34e885fc 100644
--- a/DDCore/include/DD4hep/Conditions.h
+++ b/DDCore/include/DD4hep/Conditions.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/ConditionsData.h b/DDCore/include/DD4hep/ConditionsData.h
index 9d626f79599d324c69dd54258cd7928d8e67dad7..720409964890557cfa342af700dff8f7356fe87a 100644
--- a/DDCore/include/DD4hep/ConditionsData.h
+++ b/DDCore/include/DD4hep/ConditionsData.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/DD4hepRootPersistency.h b/DDCore/include/DD4hep/DD4hepRootPersistency.h
index 7467bcfa32a400bcd8202a44481bd5c39cda11bd..a0907e3fc2cc1c6e80a026d24dd0f043c6fea04f 100644
--- a/DDCore/include/DD4hep/DD4hepRootPersistency.h
+++ b/DDCore/include/DD4hep/DD4hepRootPersistency.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/DD4hepUnits.h b/DDCore/include/DD4hep/DD4hepUnits.h
index e78e70f51e8fe8d5d1e5ef256b46f344bd378926..d6b8a2503f89b9e28001291f89a11baa2b132497 100644
--- a/DDCore/include/DD4hep/DD4hepUnits.h
+++ b/DDCore/include/DD4hep/DD4hepUnits.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/DetAlign.h b/DDCore/include/DD4hep/DetAlign.h
index 3a3b6ccd75f91b67e9141d3f9f07a204be102f26..3bec3f2201c3f5ce26a9b8acdede241f292cf165 100644
--- a/DDCore/include/DD4hep/DetAlign.h
+++ b/DDCore/include/DD4hep/DetAlign.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/DetConditions.h b/DDCore/include/DD4hep/DetConditions.h
index 3184e9ce0ada2fa6d9c7c468c87ae90c4757ec49..9f0d40ddfdfd3b14a100aaa3bd9100babbf92629 100644
--- a/DDCore/include/DD4hep/DetConditions.h
+++ b/DDCore/include/DD4hep/DetConditions.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/DetFactoryHelper.h b/DDCore/include/DD4hep/DetFactoryHelper.h
index 08b2c771a3817428b7aeebc27053dad8be99f436..f08a3c1996dfa39a2fb731be95e74c11a9731a4e 100644
--- a/DDCore/include/DD4hep/DetFactoryHelper.h
+++ b/DDCore/include/DD4hep/DetFactoryHelper.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
@@ -14,6 +13,7 @@
 #ifndef DD4hep_DETECTOR_DETFACTORYHELPER_H
 #define DD4hep_DETECTOR_DETFACTORYHELPER_H
 
+// Framework include files
 #include "XML/XMLDetector.h"
 #include "XML/XMLChildValue.h"
 #include "DD4hep/LCDD.h"
diff --git a/DDCore/include/DD4hep/DetType.h b/DDCore/include/DD4hep/DetType.h
index 8304c15caecd56911047ee41249bc19bec988e3d..fae95081c6e14cf3f80c8f83eb4d6b41e0e07aa7 100644
--- a/DDCore/include/DD4hep/DetType.h
+++ b/DDCore/include/DD4hep/DetType.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Detector.h b/DDCore/include/DD4hep/Detector.h
index b718484c1eae5d4bea1a02ab323a84adce0f8e8a..b2208a6520b077df1eb1957ab967248fcd9492c7 100644
--- a/DDCore/include/DD4hep/Detector.h
+++ b/DDCore/include/DD4hep/Detector.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/DetectorSelector.h b/DDCore/include/DD4hep/DetectorSelector.h
index e8d9221d032e1793305ab5625bfa21c3c68324d3..221838f04ca08c34e3cc8aa5dd2a37946a4e2d26 100644
--- a/DDCore/include/DD4hep/DetectorSelector.h
+++ b/DDCore/include/DD4hep/DetectorSelector.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/DetectorTools.h b/DDCore/include/DD4hep/DetectorTools.h
index 9de15fe7dfddd204a3ac2a1e6ee6aa8d3b42979b..ef78b4893f972352662e52d1bbdc58c58d6e8869 100644
--- a/DDCore/include/DD4hep/DetectorTools.h
+++ b/DDCore/include/DD4hep/DetectorTools.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Dictionary.h b/DDCore/include/DD4hep/Dictionary.h
index 1317d38782f7630d96930a363267b270176d70e0..4bdb718982c149e333bdc90dc3b67917ab1ec7ea 100644
--- a/DDCore/include/DD4hep/Dictionary.h
+++ b/DDCore/include/DD4hep/Dictionary.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
@@ -25,7 +24,7 @@
 #pragma GCC diagnostic ignored "-Wdeprecated"
 #pragma GCC diagnostic ignored "-Wunused"
 #endif
-
+// Framework include files
 #include "XML/Evaluator.h"
 #include "DD4hep/DetAlign.h"
 #include "DD4hep/DD4hepRootPersistency.h"
@@ -41,6 +40,7 @@
 #include "DD4hep/Conditions.h"
 #include "DD4hep/FieldTypes.h"
 
+// C/C++ include files
 #include <vector>
 #include <map>
 #include <string>
diff --git a/DDCore/include/DD4hep/Errors.h b/DDCore/include/DD4hep/Errors.h
index c5efa43d787657dc35585fb95e6226275aa6683c..13db5aac9c173ce42b10abf197d0bac5d0f208a1 100644
--- a/DDCore/include/DD4hep/Errors.h
+++ b/DDCore/include/DD4hep/Errors.h
@@ -1,3 +1,4 @@
+//==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
@@ -11,7 +12,6 @@
 //  \version  1.0
 //
 //==========================================================================
-// $Id$
 #ifndef DD4HEP_ERRORS_H 
 #define DD4HEP_ERRORS_H 1
 
diff --git a/DDCore/include/DD4hep/Exceptions.h b/DDCore/include/DD4hep/Exceptions.h
index c11b61d91c69afffaf836c57a96add8cd3965180..3911efad4fe3aabbfe2bcf755c39d5716daf143e 100644
--- a/DDCore/include/DD4hep/Exceptions.h
+++ b/DDCore/include/DD4hep/Exceptions.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Factories.h b/DDCore/include/DD4hep/Factories.h
index 6f07541dacf3fd3b94897c59b804731092f09dd3..6a252c1c1b515ee65bc750e3fa19b3ed92fee92c 100644
--- a/DDCore/include/DD4hep/Factories.h
+++ b/DDCore/include/DD4hep/Factories.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
@@ -19,6 +18,8 @@
 #include "DD4hep/Detector.h"
 #include "DD4hep/NamedObject.h"
 #include "XML/XMLElements.h"
+
+// C/C++ include files
 #include <cstdarg>
 
 /// Namespace for the AIDA detector description toolkit
diff --git a/DDCore/include/DD4hep/FieldTypes.h b/DDCore/include/DD4hep/FieldTypes.h
index 5dfd65be3172eb452d401163c2d152838a930061..da332ce22a019184f9c0aaf20f27e45c33c72c51 100644
--- a/DDCore/include/DD4hep/FieldTypes.h
+++ b/DDCore/include/DD4hep/FieldTypes.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Fields.h b/DDCore/include/DD4hep/Fields.h
index 6caeb5524d82815ea77b585a108f691c136588d9..e247210db9f8048ec46814a706916d418c27f02b 100644
--- a/DDCore/include/DD4hep/Fields.h
+++ b/DDCore/include/DD4hep/Fields.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/GeoHandler.h b/DDCore/include/DD4hep/GeoHandler.h
index 41b1578325872efedbbd56ce867fda05480c280d..e9223297bb6dc3cf666dd14490ef7b8d080c3e25 100644
--- a/DDCore/include/DD4hep/GeoHandler.h
+++ b/DDCore/include/DD4hep/GeoHandler.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/GlobalAlignment.h b/DDCore/include/DD4hep/GlobalAlignment.h
index 95f065ca8d1f777a352ed65089667d6c01560933..7bbf7fb801ec847e3e7e502aa321ba05cdea17a8 100644
--- a/DDCore/include/DD4hep/GlobalAlignment.h
+++ b/DDCore/include/DD4hep/GlobalAlignment.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Handle.h b/DDCore/include/DD4hep/Handle.h
index 4dde5bd305e79686bef6b2838c440c520bc763bc..b346b27e3304cf33f10f94868d0342c0bfa7f5d6 100644
--- a/DDCore/include/DD4hep/Handle.h
+++ b/DDCore/include/DD4hep/Handle.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Handle.inl b/DDCore/include/DD4hep/Handle.inl
index 023fcebd4e5b5a4b339ed4095c354c5dedf0e8f1..1e2cdf2385441a9ecca3b00f913c8fb502efa71c 100644
--- a/DDCore/include/DD4hep/Handle.inl
+++ b/DDCore/include/DD4hep/Handle.inl
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/IDDescriptor.h b/DDCore/include/DD4hep/IDDescriptor.h
index 6fd8fd8d9e8378d430a4cd6366d2172b79167a55..db785ad497fed471f51b25a5f318dc0db7765534 100644
--- a/DDCore/include/DD4hep/IDDescriptor.h
+++ b/DDCore/include/DD4hep/IDDescriptor.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
@@ -16,21 +15,17 @@
 
 // Framework include files
 #include "DD4hep/Handle.h"
-#include "DDSegmentation/BitField64.h"
+#include "DD4hep/BitField64.h"
 
 // C++ include files
 #include <string>
 #include <vector>
 #include <map>
 
-/*
- *   DD4hep namespace declaration
- */
+/// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
 
-  /*
-   *   Geometry sub-namespace declaration
-   */
+  /// Namespace for the geometry part of the AIDA detector description toolkit
   namespace Geometry {
 
     class IDDescriptorObject;
diff --git a/DDCore/include/DD4hep/IOV.h b/DDCore/include/DD4hep/IOV.h
index 58e80fe964f22cfc1d1c917f9d1f6b88f6132828..7a91ec24ef952be304956095cbc23177a5b3b1bd 100644
--- a/DDCore/include/DD4hep/IOV.h
+++ b/DDCore/include/DD4hep/IOV.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/InstanceCount.h b/DDCore/include/DD4hep/InstanceCount.h
index 9fda7e87ec7e2b078e4f3648ec05619fa2c8ce3b..874c48462cbf6f315635ae4b178c65eadadcaeb9 100644
--- a/DDCore/include/DD4hep/InstanceCount.h
+++ b/DDCore/include/DD4hep/InstanceCount.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/LCDD.h b/DDCore/include/DD4hep/LCDD.h
index 2abdc39dae22a53eb66d8f7a4cf949e4bdf3b186..4aa8676dc72899c0a86ee92494bdad5d855cf649 100644
--- a/DDCore/include/DD4hep/LCDD.h
+++ b/DDCore/include/DD4hep/LCDD.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/LCDDData.h b/DDCore/include/DD4hep/LCDDData.h
index 518f1ded63c1651161b31188723b141b9c3a4475..e5336e778d663b5be93af54576753d268d9bb8b6 100644
--- a/DDCore/include/DD4hep/LCDDData.h
+++ b/DDCore/include/DD4hep/LCDDData.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/LCDDHelper.h b/DDCore/include/DD4hep/LCDDHelper.h
index f150d2cca4e273054d1e93999e99e94874773362..0a50cfe4a6ef2235efcb8bd38c6e807d6d221693 100644
--- a/DDCore/include/DD4hep/LCDDHelper.h
+++ b/DDCore/include/DD4hep/LCDDHelper.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/LCDDLoad.h b/DDCore/include/DD4hep/LCDDLoad.h
index ba0fdbb9765c8bf2fcb304b14312548aaac08f32..56faed60228b3c5069c85b08b44fb742b6fa6107 100644
--- a/DDCore/include/DD4hep/LCDDLoad.h
+++ b/DDCore/include/DD4hep/LCDDLoad.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/MatrixHelpers.h b/DDCore/include/DD4hep/MatrixHelpers.h
index d03d7a7382ab87a4da2109fc3bc31f563391c0a8..dc9da135e9a8f5abab4a88f45e9f7be0d3319500 100644
--- a/DDCore/include/DD4hep/MatrixHelpers.h
+++ b/DDCore/include/DD4hep/MatrixHelpers.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
@@ -31,51 +30,51 @@ namespace DD4hep {
 
     typedef Position XYZAngles;
   
-    /// Access the TGeo identity transformation                \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Access the TGeo identity transformation                                               \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoIdentity*    identityTransform();
-    /// Convert a Position object to a TGeoTranslation         \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a Position object to a TGeoTranslation                                        \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoTranslation* _translation(const Geometry::Position& pos);
-    /// Convert a RotationZYX object to a TGeoRotation         \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a RotationZYX object to a TGeoRotation                                        \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoRotation*    _rotationZYX(const Geometry::RotationZYX& rot);
-    /// Convert a Rotation3D object to a TGeoRotation          \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a Rotation3D object to a TGeoRotation                                         \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoRotation*    _rotation3D(const Geometry::Rotation3D& rot);
-    /// Convert a Transform3D object to a TGeoHMatrix          \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a Transform3D object to a TGeoHMatrix                                         \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoHMatrix*     _transform(const Geometry::Transform3D& trans);
-    /// Convert a Position object to a TGeoHMatrix             \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a Position object to a TGeoHMatrix                                            \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoHMatrix*     _transform(const Geometry::Position& pos);
-    /// Convert a RotationZYX object to a TGeoHMatrix          \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a RotationZYX object to a TGeoHMatrix                                         \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoHMatrix*     _transform(const Geometry::RotationZYX& rot);
-    /// Convert a Rotation3D object to a TGeoHMatrix           \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a Rotation3D object to a TGeoHMatrix                                          \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoHMatrix*     _transform(const Geometry::Rotation3D& rot3D);
-    /// Convert a Position followed by a RotationZYX to a TGeoHMatrix  \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a Position followed by a RotationZYX to a TGeoHMatrix                         \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoHMatrix*     _transform(const Geometry::Position& pos, const Geometry::RotationZYX& rot);
 
-    /// Set a Transform3D object to a TGeoHMatrix            \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Set a Transform3D object to a TGeoHMatrix                                             \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoHMatrix&     _transform(TGeoHMatrix& mat, const Geometry::Transform3D& trans);
-    /// Set a Position object (translation) to a TGeoHMatrix \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Set a Position object (translation) to a TGeoHMatrix                                  \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoHMatrix&     _transform(TGeoHMatrix& mat, const Geometry::Position& pos);
-    /// Set a RotationZYX object to a TGeoHMatrix            \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Set a RotationZYX object to a TGeoHMatrix                                             \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoHMatrix&     _transform(TGeoHMatrix& mat, const Geometry::RotationZYX& rot);
-    /// Set a Rotation3D object to a TGeoHMatrix             \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Set a Rotation3D object to a TGeoHMatrix                                              \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoHMatrix&     _transform(TGeoHMatrix& mat, const Geometry::Rotation3D& rot3D);
-    /// Set a Position followed by a RotationZYX to a TGeoHMatrix  \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Set a Position followed by a RotationZYX to a TGeoHMatrix                             \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     TGeoHMatrix&     _transform(TGeoHMatrix& mat, const Geometry::Position& pos, const Geometry::RotationZYX& rot);
 
-    /// Convert a TGeoMatrix object to a generic Transform3D  \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a TGeoMatrix object to a generic Transform3D                                  \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     Geometry::Transform3D      _transform(const TGeoMatrix* matrix);
 
-    /// Decompose a generic Transform3D into a translation (Position) and a RotationZYX \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Decompose a generic Transform3D into a translation (Position) and a RotationZYX       \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     void _decompose(const Geometry::Transform3D& trafo, Geometry::Position& pos, Geometry::RotationZYX& rot);
     /// Decompose a generic Transform3D into a translation (Geometry::Position) and XYZAngles \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     void _decompose(const Geometry::Transform3D& trafo, Geometry::Position& pos, XYZAngles& rot);
-    /// Decompose a generic Transform3D into a translation (Translation3D) and a RotationZYX \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Decompose a generic Transform3D into a translation (Translation3D) and a RotationZYX  \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     void _decompose(const Geometry::Transform3D& trafo, Geometry::Translation3D& pos, Geometry::RotationZYX& rot);
-    /// Decompose a generic Transform3D into a translation (Translation3D) and XYZAngles \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Decompose a generic Transform3D into a translation (Translation3D) and XYZAngles      \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     void _decompose(const Geometry::Transform3D& trafo, Geometry::Translation3D& pos, XYZAngles& rot);
 
-    /// Convert a 3x3 rotation matrix to XYZAngles  \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a 3x3 rotation matrix to XYZAngles                                            \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     XYZAngles _XYZangles(const double* matrix);
-    /// Convert a the rotation part of a TGeoMatrix to XYZAngles  \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
+    /// Convert a the rotation part of a TGeoMatrix to XYZAngles                              \ingroup DD4HEP \ingroup DD4HEP_GEOMETRY
     XYZAngles _XYZangles(const TGeoMatrix* matrix);
 
   } /* End namespace Geometry        */
diff --git a/DDCore/include/DD4hep/Memory.h b/DDCore/include/DD4hep/Memory.h
index 076724308218744582a4b6d6c45767df598ae3d0..b9a3b293e53c0b7040c4daf3a5472a4a8bcbc2f1 100644
--- a/DDCore/include/DD4hep/Memory.h
+++ b/DDCore/include/DD4hep/Memory.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Mutex.h b/DDCore/include/DD4hep/Mutex.h
index 28c05eed9ec713af41a299b6f265a6b84d918b5a..366d8b0e86d229d48e2ff9b76a4251a82efd674b 100644
--- a/DDCore/include/DD4hep/Mutex.h
+++ b/DDCore/include/DD4hep/Mutex.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/NamedObject.h b/DDCore/include/DD4hep/NamedObject.h
index 43e88d4735280ffed8802a08616841a423662f34..790cf2d0c216e9c5d1badeedfb1f6a24b3905d7f 100644
--- a/DDCore/include/DD4hep/NamedObject.h
+++ b/DDCore/include/DD4hep/NamedObject.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/ObjectExtensions.h b/DDCore/include/DD4hep/ObjectExtensions.h
index e7bbc1c13825c906f9969ac51e4339927e435a84..4936b8d53c9c88496d9032830390e5a24d0a5860 100644
--- a/DDCore/include/DD4hep/ObjectExtensions.h
+++ b/DDCore/include/DD4hep/ObjectExtensions.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Objects.h b/DDCore/include/DD4hep/Objects.h
index da5fa5c3d76facc6793f1165e12ec7a4a099b967..c340516c683655d96c364e05cf5e2d467d08a237 100644
--- a/DDCore/include/DD4hep/Objects.h
+++ b/DDCore/include/DD4hep/Objects.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
@@ -11,7 +10,6 @@
 // Author     : M.Frank
 //
 //==========================================================================
-
 #ifndef DD4HEP_GEOMETRY_OBJECTS_H
 #define DD4HEP_GEOMETRY_OBJECTS_H
 
diff --git a/DDCore/include/DD4hep/OpaqueData.h b/DDCore/include/DD4hep/OpaqueData.h
index aa56800571628f9b409ccd9c05d6508bf75b9052..980341dd6591218dc748322440bf1219f874bb82 100644
--- a/DDCore/include/DD4hep/OpaqueData.h
+++ b/DDCore/include/DD4hep/OpaqueData.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Operators.h b/DDCore/include/DD4hep/Operators.h
index ee4185097b2f20b37089f94ce0c4023e1979aba0..67e8b05c3b547cc1610515e1b5cc210b3f3d0714 100644
--- a/DDCore/include/DD4hep/Operators.h
+++ b/DDCore/include/DD4hep/Operators.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Parsers.h b/DDCore/include/DD4hep/Parsers.h
index b8b4213a4051febcd9119a4797ffb22f09848e8c..e50b45b927dd2cbecf6e1594c8ee766c82476386 100644
--- a/DDCore/include/DD4hep/Parsers.h
+++ b/DDCore/include/DD4hep/Parsers.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Path.h b/DDCore/include/DD4hep/Path.h
index 2a919e7b8cb7fb58769912e295b6c5c390d08354..a89c8aee0b4e4857ec9174bbebc2822a8e142837 100644
--- a/DDCore/include/DD4hep/Path.h
+++ b/DDCore/include/DD4hep/Path.h
@@ -12,7 +12,6 @@
 //  \version 1.0
 //
 //==========================================================================
-// $Id$
 #ifndef DD4HEP_DDCORE_PATH_H
 #define DD4HEP_DDCORE_PATH_H
 
diff --git a/DDCore/include/DD4hep/PluginCreators.h b/DDCore/include/DD4hep/PluginCreators.h
index a925ebc4bf5aac6b6e05479423ce60c0e0b64065..0ed1af10f3d9ee713e14d2bd20d360c0920fcfa5 100644
--- a/DDCore/include/DD4hep/PluginCreators.h
+++ b/DDCore/include/DD4hep/PluginCreators.h
@@ -1,3 +1,4 @@
+//==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
@@ -11,7 +12,6 @@
 //  \version  1.0
 //
 //==========================================================================
-// $Id$
 #ifndef DD4HEP_PLUGINCREATORS_H 
 #define DD4HEP_PLUGINCREATORS_H 1
 
diff --git a/DDCore/include/DD4hep/Plugins.h b/DDCore/include/DD4hep/Plugins.h
index 02173cf274b99062662c99c15058b6398745151b..4da6f87b3d1f35a2a12e6c531fd28ae463d963da 100644
--- a/DDCore/include/DD4hep/Plugins.h
+++ b/DDCore/include/DD4hep/Plugins.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Plugins.inl b/DDCore/include/DD4hep/Plugins.inl
index 8b442ec27e0fed2459cf7bcc59858de48b8e82f1..f23e8a3c54215064e1bee2024244820bf32c7d4b 100644
--- a/DDCore/include/DD4hep/Plugins.inl
+++ b/DDCore/include/DD4hep/Plugins.inl
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/PolarGridRPhi.h b/DDCore/include/DD4hep/PolarGridRPhi.h
index 45a438cea48a650607686435132b49b7e1e6fd14..caf9a0f7ec63ee65dcd96d8a5cd4935775f645db 100644
--- a/DDCore/include/DD4hep/PolarGridRPhi.h
+++ b/DDCore/include/DD4hep/PolarGridRPhi.h
@@ -15,7 +15,7 @@
 #define DD4HEP_DDCORE_POLARGRIDRPHI_H 1
 
 // Framework include files
-#include "DD4hep/Objects.h"
+#include "DD4hep/Segmentations.h"
 
 /// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
@@ -28,6 +28,7 @@ namespace DD4hep {
 
     // Forward declarations
     class Segmentation;
+    template <typename T> class SegmentationWrapper;
     
     /// We need some abbreviation to make the code more readable.
     typedef Handle<SegmentationWrapper<DDSegmentation::PolarGridRPhi> > PolarGridRPhiHandle;
diff --git a/DDCore/include/DD4hep/PolarGridRPhi2.h b/DDCore/include/DD4hep/PolarGridRPhi2.h
index fa18d8e19d9d6c9889a72e23c9c6719160a744f4..5eaa808f0bbdf4aadc073f78e5c1af87ab53e3bd 100644
--- a/DDCore/include/DD4hep/PolarGridRPhi2.h
+++ b/DDCore/include/DD4hep/PolarGridRPhi2.h
@@ -15,7 +15,7 @@
 #define DD4HEP_DDCORE_POLARGRIDRPHI2_H 1
 
 // Framework include files
-#include "DD4hep/Objects.h"
+#include "DD4hep/Segmentations.h"
 
 /// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
@@ -28,6 +28,7 @@ namespace DD4hep {
 
     // Forward declarations
     class Segmentation;
+    template <typename T> class SegmentationWrapper;
     
     /// We need some abbreviation to make the code more readable.
     typedef Handle<SegmentationWrapper<DDSegmentation::PolarGridRPhi2> > PolarGridRPhi2Handle;
diff --git a/DDCore/include/DD4hep/Printout.h b/DDCore/include/DD4hep/Printout.h
index f1d03e19a579f417dec5e28c8d9e0c0feffd4d65..d7aee3e411dcaca5eeedc75cd32cd909e41cbd32 100644
--- a/DDCore/include/DD4hep/Printout.h
+++ b/DDCore/include/DD4hep/Printout.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Readout.h b/DDCore/include/DD4hep/Readout.h
index 376de3da338c412a241ca7522871f143faa216d8..9d18ab142841392b6dd01769b07543c3c29812aa 100644
--- a/DDCore/include/DD4hep/Readout.h
+++ b/DDCore/include/DD4hep/Readout.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Segmentations.h b/DDCore/include/DD4hep/Segmentations.h
index 11012e377a8000c5a0b1e977fe0319d1f9c77ef2..395415df75f8b6cfa79a0e04a1ec2871327716fe 100644
--- a/DDCore/include/DD4hep/Segmentations.h
+++ b/DDCore/include/DD4hep/Segmentations.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
@@ -15,13 +14,13 @@
 #define DD4HEP_GEOMETRY_SEGMENTATIONS_H
 
 // Framework include files
-#include "DD4hep/Objects.h"
 #include "DD4hep/Handle.h"
+#include "DD4hep/Objects.h"
+#include "DD4hep/BitField64.h"
 #include "DDSegmentation/Segmentation.h"
 
 // C/C++ include files
-#include <cmath>
-#include <vector>
+
 
 /// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
@@ -29,101 +28,10 @@ namespace DD4hep {
   /// Namespace for the geometry part of the AIDA detector description toolkit
   namespace Geometry {
 
-    // Forward declarations
+    /// Forward declarations
     class DetElementObject;
+    class SegmentationObject;
     class SensitiveDetectorObject;
-
-    /// Implementation class supporting generic Segmentation of sensitive detectors
-    /**
-     *  The SegmentationObject wraps the functionality of the DDSegmentation base class.
-     *
-     *  \author  M.Frank
-     *  \version 1.0
-     *  \ingroup DD4HEP_GEOMETRY
-     */
-    class SegmentationObject {
-    public:
-      typedef DDSegmentation::Segmentation BaseSegmentation;
-      typedef DDSegmentation::Parameters   Parameters;
-      typedef DDSegmentation::Parameter    Parameter;
-
-    public:
-      /// Standard constructor
-      SegmentationObject(BaseSegmentation* s = 0);
-      /// Default destructor
-      virtual ~SegmentationObject();
-      /// Access the encoding string
-      std::string fieldDescription() const;
-      /// Access the segmentation name
-      const std::string& name() const;
-      /// Set the segmentation name
-      void setName(const std::string& value);
-      /// Access the segmentation type
-      const std::string& type() const;
-      /// Access the description of the segmentation
-      const std::string& description() const;
-      /// Access the underlying decoder
-      BitField64* decoder() const;
-      /// Set the underlying decoder
-      void setDecoder(BitField64* decoder) const;
-      /// Access to parameter by name
-      Parameter  parameter(const std::string& parameterName) const;
-      /// Access to all parameters
-      Parameters parameters() const;
-      /// Set all parameters from an existing set of parameters
-      void setParameters(const Parameters& parameters);
-
-      /** Segmentation interface  */
-      /// Determine the local position based on the cell ID
-      Position position(const CellID& cellID) const;
-      /// Determine the cell ID based on the position
-      CellID cellID(const Position& localPosition,
-                    const Position& globalPosition,
-                    const VolumeID& volumeID) const;
-      /// Determine the volume ID from the full cell ID by removing all local fields
-      VolumeID volumeID(const CellID& cellID) const;
-      /// Calculates the neighbours of the given cell ID and adds them to the list of neighbours
-      void neighbours(const CellID& cellID, std::set<CellID>& neighbours) const;
-
-      /// Magic word to check object integrity
-      unsigned long magic;
-      /// Flag to use segmentation for hit positioning
-      unsigned char useForHitPosition;
-      /// Reference to hosting top level DetElement structure
-      Handle<DetElementObject> detector;      
-      /// Reference to hosting top level sensitve detector structure
-      Handle<SensitiveDetectorObject> sensitive;
-      /// Reference to base segmentation
-      BaseSegmentation* segmentation;      
-    };
-
-    /// Concrete wrapper class for segmentation implementation based on DDSegmentation objects
-    /**
-     * \author  M.Frank
-     * \version 1.0
-     * \ingroup DD4HEP_GEOMETRY
-     */
-    template <typename IMP> class SegmentationWrapper : public SegmentationObject {
-    public:
-      /// DDSegmentation aggregate
-      IMP* implementation;
-    public:
-      /// Standard constructor
-      SegmentationWrapper(DDSegmentation::BitField64* decoder);
-      /// Default destructor
-      virtual ~SegmentationWrapper();
-    };
-
-    /// Standard constructor
-    template <typename IMP> inline
-    SegmentationWrapper<IMP>::SegmentationWrapper(DDSegmentation::BitField64* decode)
-      :  SegmentationObject(implementation=new IMP(decode))
-    {
-    }
-    
-    /// Default destructor
-    template <typename IMP> inline SegmentationWrapper<IMP>::~SegmentationWrapper()  {
-    }
     
     /// Handle class supporting generic Segmentation of sensitive detectors
     /**
@@ -134,7 +42,7 @@ namespace DD4hep {
      */
     class Segmentation: public Handle<SegmentationObject> {
     public:
-      typedef SegmentationObject Object;
+      typedef SegmentationObject           Object;
       typedef DDSegmentation::Segmentation BaseSegmentation;
       typedef DDSegmentation::Parameter    Parameter;
       typedef DDSegmentation::Parameters   Parameters;
@@ -161,6 +69,10 @@ namespace DD4hep {
       std::string type() const;
       /// Access to the parameters
       Parameters parameters() const;
+      /// Access the main detector element using this segmetnation object
+      Handle<DetElementObject> detector() const;
+      /// Access the sensitive detector using this segmetnation object
+      Handle<SensitiveDetectorObject> sensitive() const;
       /// Access the underlying decoder
       BitField64* decoder() const;
       /// Set the underlying decoder
@@ -169,8 +81,10 @@ namespace DD4hep {
       Position position(const long64& cellID) const;
       /// determine the cell ID based on the local position
       long64 cellID(const Position& localPosition, const Position& globalPosition, const long64& volumeID) const;
-      /// Access the concrete underlying segmentation implementation from DDSegmentation
-      template <typename T> static T* get(const Object* object);
+      /// Determine the volume ID from the full cell ID by removing all local fields
+      VolumeID volumeID(const CellID& cellID) const;
+      /// Calculates the neighbours of the given cell ID and adds them to the list of neighbours
+      void neighbours(const CellID& cellID, std::set<CellID>& neighbours) const;
     };
 
   } /* End namespace Geometry              */
diff --git a/DDCore/include/DD4hep/Shapes.h b/DDCore/include/DD4hep/Shapes.h
index 0e0f14aed63edbe77f070549acd875059bcbef58..da1752ebd333b585e92e03502917c18161f4e1f3 100644
--- a/DDCore/include/DD4hep/Shapes.h
+++ b/DDCore/include/DD4hep/Shapes.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/SurfaceInstaller.h b/DDCore/include/DD4hep/SurfaceInstaller.h
index 7c967f304d081bdb67ed0a1be1da84e4f3dae766..4cdc1c897fef2ee3dd34c74bde52756c1f040c88 100644
--- a/DDCore/include/DD4hep/SurfaceInstaller.h
+++ b/DDCore/include/DD4hep/SurfaceInstaller.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/ToStream.h b/DDCore/include/DD4hep/ToStream.h
index 67410f891b5679e97c3f821fefb4c817d9a30eca..46d52d4c0e73ab71dcef336e0b5a37ef8740c2b8 100644
--- a/DDCore/include/DD4hep/ToStream.h
+++ b/DDCore/include/DD4hep/ToStream.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/VolumeManager.h b/DDCore/include/DD4hep/VolumeManager.h
index a1b9c187e1ce289b3ee4475b35326cdd17fdc8cd..25be5c3400a56d0575a146c79393960a1bed7aba 100644
--- a/DDCore/include/DD4hep/VolumeManager.h
+++ b/DDCore/include/DD4hep/VolumeManager.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/Volumes.h b/DDCore/include/DD4hep/Volumes.h
index 33414d7bdfa155b4bcd55fbdc5f58ec028653183..fc7139d7def74d2f63f1d7b36a6c2ece0c55ee48 100644
--- a/DDCore/include/DD4hep/Volumes.h
+++ b/DDCore/include/DD4hep/Volumes.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/WaferGridXY.h b/DDCore/include/DD4hep/WaferGridXY.h
index e189a52338ce29e23c20b473aa9cf64ed2414f6b..52322ddbf4a2579d95049176577b06253eb9c69c 100644
--- a/DDCore/include/DD4hep/WaferGridXY.h
+++ b/DDCore/include/DD4hep/WaferGridXY.h
@@ -15,7 +15,7 @@
 #define DD4HEP_DDCORE_WAFERGRIDZY_H 1
 
 // Framework include files
-#include "DD4hep/Objects.h"
+#include "DD4hep/Segmentations.h"
 
 /// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
@@ -28,6 +28,7 @@ namespace DD4hep {
 
     // Forward declarations
     class Segmentation;
+    template <typename T> class SegmentationWrapper;
     
     /// We need some abbreviation to make the code more readable.
     typedef Handle<SegmentationWrapper<DDSegmentation::WaferGridXY> > WaferGridXYHandle;
diff --git a/DDCore/include/DD4hep/config.h b/DDCore/include/DD4hep/config.h
index 9c26f44ac51306c0cf952607b564a8abe79fc995..8355de9fdea936743e3bf2694d70825b040c518c 100644
--- a/DDCore/include/DD4hep/config.h
+++ b/DDCore/include/DD4hep/config.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/objects/AlignmentsInterna.h b/DDCore/include/DD4hep/objects/AlignmentsInterna.h
index 64ec5eb989fe605f514a59c37ef33e789f9408d5..3ff64ed8234a9faad95f3cf0904e8a5d85b2875e 100644
--- a/DDCore/include/DD4hep/objects/AlignmentsInterna.h
+++ b/DDCore/include/DD4hep/objects/AlignmentsInterna.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/objects/ConditionsInterna.h b/DDCore/include/DD4hep/objects/ConditionsInterna.h
index 03df33e5c7e2d880e3b056f00c10193c2d6dbcc3..628d37b40d8b4a1b994251ffb2b0d6b09eda3c73 100644
--- a/DDCore/include/DD4hep/objects/ConditionsInterna.h
+++ b/DDCore/include/DD4hep/objects/ConditionsInterna.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/objects/DetectorInterna.h b/DDCore/include/DD4hep/objects/DetectorInterna.h
index 35a36bbaa231147d61a1bb7ef2d1c66aa588ab18..c5ca4c79313c7d2a47cce8b723f48ed10e449812 100644
--- a/DDCore/include/DD4hep/objects/DetectorInterna.h
+++ b/DDCore/include/DD4hep/objects/DetectorInterna.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/objects/ObjectsInterna.h b/DDCore/include/DD4hep/objects/ObjectsInterna.h
index f106e98386821fb3ff139d0b8b349fdbdb360f15..d8e900ba39ab7e6e72fb62a6a3a13c392b8b11fc 100644
--- a/DDCore/include/DD4hep/objects/ObjectsInterna.h
+++ b/DDCore/include/DD4hep/objects/ObjectsInterna.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
@@ -11,7 +10,6 @@
 // Author     : M.Frank
 //
 //==========================================================================
-
 #ifndef DD4HEP_GEOMETRY_OBJECTSINTERNA_H
 #define DD4HEP_GEOMETRY_OBJECTSINTERNA_H
 
@@ -20,7 +18,7 @@
 #include "DD4hep/NamedObject.h"
 #include "DD4hep/IDDescriptor.h"
 #include "DD4hep/Segmentations.h"
-#include "DDSegmentation/BitField64.h"
+#include "DD4hep/BitField64.h"
 
 // C/C++ include files
 #include <set>
diff --git a/DDCore/include/DD4hep/objects/OpaqueData_inl.h b/DDCore/include/DD4hep/objects/OpaqueData_inl.h
index bf985da7817814ad5fb99ebe656cb87f51e9ac71..2c76a4aec2230a62dacbdb94df352ebfa23fd1fa 100644
--- a/DDCore/include/DD4hep/objects/OpaqueData_inl.h
+++ b/DDCore/include/DD4hep/objects/OpaqueData_inl.h
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/include/DD4hep/objects/VolumeManagerInterna.h b/DDCore/include/DD4hep/objects/VolumeManagerInterna.h
index 83fdbeab2c19cd91ca133c90cfec02c725b96dd2..7ca1a1c835bdca68cd3bc815ca164c6b01dda783 100644
--- a/DDCore/include/DD4hep/objects/VolumeManagerInterna.h
+++ b/DDCore/include/DD4hep/objects/VolumeManagerInterna.h
@@ -1,4 +1,3 @@
-// $Id: $
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/src/CartesianGridXY.cpp b/DDCore/src/CartesianGridXY.cpp
index b72996f098e1f00d52298110fa1608535c2e9dde..7f75342d22d172563fe8b50223ed65a75dd2edf5 100644
--- a/DDCore/src/CartesianGridXY.cpp
+++ b/DDCore/src/CartesianGridXY.cpp
@@ -12,8 +12,8 @@
 //==========================================================================
 
 // Framework include files
-#include "DD4hep/Segmentations.h"
 #include "DD4hep/CartesianGridXY.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 #include "DDSegmentation/CartesianGridXY.h"
 
 // C/C++ include files
diff --git a/DDCore/src/CartesianGridXYZ.cpp b/DDCore/src/CartesianGridXYZ.cpp
index 396864c41aaddd34336e7ff0568e16fe96231b69..50b9ccb197bf351cfbacc91cf105ae286d5b2e94 100644
--- a/DDCore/src/CartesianGridXYZ.cpp
+++ b/DDCore/src/CartesianGridXYZ.cpp
@@ -12,8 +12,8 @@
 //==========================================================================
 
 // Framework include files
-#include "DD4hep/Segmentations.h"
 #include "DD4hep/CartesianGridXYZ.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 #include "DDSegmentation/CartesianGridXYZ.h"
 
 // C/C++ include files
diff --git a/DDCore/src/CartesianGridXZ.cpp b/DDCore/src/CartesianGridXZ.cpp
index 0d4ee904efdd54d2c3dee38d194c61948060690a..f28a75c0af87c41485d94c08358a69765bfb2490 100644
--- a/DDCore/src/CartesianGridXZ.cpp
+++ b/DDCore/src/CartesianGridXZ.cpp
@@ -12,8 +12,8 @@
 //==========================================================================
 
 // Framework include files
-#include "DD4hep/Segmentations.h"
 #include "DD4hep/CartesianGridXZ.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 #include "DDSegmentation/CartesianGridXZ.h"
 
 // C/C++ include files
diff --git a/DDCore/src/CartesianGridYZ.cpp b/DDCore/src/CartesianGridYZ.cpp
index 2b1176e10e40a917944e3c7e6d0878c4d1b9af50..7e9a590583af9416d21ba1beb823fdbda536a07a 100644
--- a/DDCore/src/CartesianGridYZ.cpp
+++ b/DDCore/src/CartesianGridYZ.cpp
@@ -12,8 +12,8 @@
 //==========================================================================
 
 // Framework include files
-#include "DD4hep/Segmentations.h"
 #include "DD4hep/CartesianGridYZ.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 #include "DDSegmentation/CartesianGridYZ.h"
 
 // C/C++ include files
diff --git a/DDCore/src/ObjectsInterna.cpp b/DDCore/src/ObjectsInterna.cpp
index dc2d3ff2f9a22850ad1798483d135c2e92585205..f20e5babd5c5b957be138b6480392c9844aa9922 100644
--- a/DDCore/src/ObjectsInterna.cpp
+++ b/DDCore/src/ObjectsInterna.cpp
@@ -16,6 +16,7 @@
 #include "DD4hep/InstanceCount.h"
 #include "DD4hep/Objects.h"
 #include "DD4hep/objects/ObjectsInterna.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 
 using namespace std;
 using namespace DD4hep;
diff --git a/DDCore/src/PolarGridRPhi.cpp b/DDCore/src/PolarGridRPhi.cpp
index 56498a0c667712543eae09ffb7d733fba5f49d16..416e372b4c1895c26fe67e9dca0478b4ccf45d74 100644
--- a/DDCore/src/PolarGridRPhi.cpp
+++ b/DDCore/src/PolarGridRPhi.cpp
@@ -12,8 +12,8 @@
 //==========================================================================
 
 // Framework include files
-#include "DD4hep/Segmentations.h"
 #include "DD4hep/PolarGridRPhi.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 #include "DDSegmentation/PolarGridRPhi.h"
 
 // C/C++ include files
diff --git a/DDCore/src/PolarGridRPhi2.cpp b/DDCore/src/PolarGridRPhi2.cpp
index 839f739c3bc3798929d871fe8cd2ba01bf4aa379..47e18d1de2a3328d3b2204405a80f777e3f846fb 100644
--- a/DDCore/src/PolarGridRPhi2.cpp
+++ b/DDCore/src/PolarGridRPhi2.cpp
@@ -12,8 +12,8 @@
 //==========================================================================
 
 // Framework include files
-#include "DD4hep/Segmentations.h"
 #include "DD4hep/PolarGridRPhi2.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 #include "DDSegmentation/PolarGridRPhi2.h"
 
 // C/C++ include files
diff --git a/DDCore/src/Readout.cpp b/DDCore/src/Readout.cpp
index 8297bae803acff15f102523ea4b7adf228947a91..4b487831c9068edd7b4b5860ef104f37fd0693b4 100644
--- a/DDCore/src/Readout.cpp
+++ b/DDCore/src/Readout.cpp
@@ -14,6 +14,7 @@
 
 // Framework include files
 #include "DD4hep/Readout.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 #include "DD4hep/objects/ObjectsInterna.h"
 #include "DD4hep/InstanceCount.h"
 #include "DD4hep/DD4hepUnits.h"
diff --git a/DDCore/src/Segmentations.cpp b/DDCore/src/Segmentations.cpp
index 1e8c625ccaaf0539c4d9d19bad1de85009d0347f..7e2c5ed4c7441e4b0addcedcb8e791605190473b 100644
--- a/DDCore/src/Segmentations.cpp
+++ b/DDCore/src/Segmentations.cpp
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
@@ -18,6 +17,7 @@
 #include "DD4hep/Printout.h"
 #include "DD4hep/Plugins.h"
 #include "DD4hep/Handle.inl"
+#include "DD4hep/objects/SegmentationsInterna.h"
 
 // C/C++ include files
 #include <iostream>
@@ -32,95 +32,6 @@ using DD4hep::DDSegmentation::SegmentationParameter;
 
 DD4HEP_INSTANTIATE_HANDLE_UNNAMED(SegmentationObject);
 
-/// Standard constructor
-SegmentationObject::SegmentationObject(BaseSegmentation* s)
-  : magic(magic_word()), useForHitPosition(0),
-    detector(0), sensitive(0), segmentation(s)
-{
-  //s->backLink = this;
-  //this->backLink = this;
-  InstanceCount::increment(this);
-}
-
-/// Default destructor
-SegmentationObject::~SegmentationObject() {
-  InstanceCount::decrement(this);
-  if (segmentation) {
-    delete segmentation;
-  }
-}
-
-/// Access the encoding string
-string SegmentationObject::fieldDescription() const {
-  return segmentation->fieldDescription();
-}
-
-/// Access the segmentation name
-const string& SegmentationObject::name() const {
-  return segmentation->name();
-}
-/// Set the segmentation name
-void SegmentationObject::setName(const string& value) {
-  segmentation->setName(value);
-}
-
-/// Access the segmentation type
-const string& SegmentationObject::type() const {
-  return segmentation->type();
-}
-
-/// Access the description of the segmentation
-const string& SegmentationObject::description() const {
-  return segmentation->description();
-}
-
-/// Access the underlying decoder
-BitField64* SegmentationObject::decoder() const {
-  return segmentation->decoder();
-}
-
-/// Set the underlying decoder
-void SegmentationObject::setDecoder(BitField64* ptr_decoder) const {
-  segmentation->setDecoder(ptr_decoder);
-}
-
-/// Access to parameter by name
-Parameter SegmentationObject::parameter(const string& parameterName) const {
-  return segmentation->parameter(parameterName);
-}
-
-/// Access to all parameters
-Parameters SegmentationObject::parameters() const {
-  return segmentation->parameters();
-}
-
-/// Set all parameters from an existing set of parameters
-void SegmentationObject::setParameters(const Parameters& params) {
-  segmentation->setParameters(params);
-}
-
-/// Determine the local position based on the cell ID
-Position SegmentationObject::position(const CellID& cell) const  {
-  return Position(segmentation->position(cell));
-}
-
-/// Determine the cell ID based on the position
-CellID SegmentationObject::cellID(const Position& local,
-                                  const Position& global,
-                                  const VolumeID& volID) const  {
-  return segmentation->cellID(local, global, volID);
-}
-
-/// Determine the volume ID from the full cell ID by removing all local fields
-VolumeID SegmentationObject::volumeID(const CellID& cell) const   {
-  return segmentation->volumeID(cell);
-}
-
-/// Calculates the neighbours of the given cell ID and adds them to the list of neighbours
-void SegmentationObject::neighbours(const CellID& cell, std::set<CellID>& nb) const   {
-  segmentation->neighbours(cell, nb);
-}
-
 /// Constructor to used when creating a new object
 Segmentation::Segmentation(const string& typ, const string& nam, BitField64* dec) : Handle<Object>()
 {
@@ -149,11 +60,6 @@ Parameters Segmentation::parameters() const {
   return data<Object>()->parameters();
 }
 
-/// Access segmentation object
-//DDSegmentation::Segmentation* Segmentation::segmentation() const {
-//  return data<Object>()->segmentation;
-//}
-
 /// determine the local position based on the cell ID
 Position Segmentation::position(const long64& cell) const {
   return Position(data<Object>()->segmentation->position(cell));
@@ -164,6 +70,16 @@ long64 Segmentation::cellID(const Position& localPosition, const Position& globa
   return data<Object>()->segmentation->cellID(localPosition, globalPosition, volID);
 }
 
+/// Determine the volume ID from the full cell ID by removing all local fields
+VolumeID Segmentation::volumeID(const CellID& cell) const   {
+  return data<Object>()->segmentation->volumeID(cell);
+}
+
+/// Calculates the neighbours of the given cell ID and adds them to the list of neighbours
+void Segmentation::neighbours(const CellID& cell, std::set<CellID>& nb) const  {
+  data<Object>()->segmentation->neighbours(cell, nb);
+}
+
 /// Access the underlying decoder
 BitField64* Segmentation::decoder()  const {
   return data<Object>()->segmentation->decoder();
@@ -174,34 +90,21 @@ void Segmentation::setDecoder(BitField64* decode) const  {
   data<Object>()->segmentation->setDecoder(decode);
 }
 
-/// Namespace for the AIDA detector description toolkit
-namespace DD4hep {
-  /// Namespace for the geometry part of the AIDA detector description toolkit
-  namespace Geometry {
-
-    /// Access the concrete underlying segmentation implementation from DDSegmentation
-    template <typename T> T*
-    Segmentation::get(const Object* obj)   {
-      if ( obj )  {
-        DDSegmentation::Segmentation* seg = obj->segmentation;
-        T* dd_seg = dynamic_cast<T*>(seg);
-        if ( dd_seg )  {
-          return dd_seg;
-        }
-        except("CartesianGridXY",
-               "Cannot convert segmentation:%s to CartesianGridXY.",
-               obj->name().c_str());
-      }
-      return 0;
-    }
-  } /* End namespace Geometry              */
-} /* End namespace DD4hep                */
+/// Access the main detector element using this segmetnation object
+Handle<DetElementObject> Segmentation::detector() const  {
+  return data<Object>()->detector;
+}
+
+/// Access the sensitive detector using this segmetnation object
+Handle<SensitiveDetectorObject> Segmentation::sensitive() const  {
+  return data<Object>()->sensitive;
+}
 
 #define IMPLEMENT_SEGMENTATION_HANDLE(X)                                \
-  DD4HEP_INSTANTIATE_HANDLE_UNNAMED(SegmentationWrapper<DDSegmentation::X>); \
-  namespace DD4hep { namespace Geometry {                               \
-      template DDSegmentation::X*                                       \
-      Segmentation::get<DDSegmentation::X>(const Object* obj); }}
+  DD4HEP_INSTANTIATE_HANDLE_UNNAMED(SegmentationWrapper<DDSegmentation::X>);
+
+#include "DDSegmentation/CartesianGrid.h"
+IMPLEMENT_SEGMENTATION_HANDLE(CartesianGrid)
 
 #include "DDSegmentation/CartesianGridXY.h"
 IMPLEMENT_SEGMENTATION_HANDLE(CartesianGridXY)
@@ -233,3 +136,5 @@ IMPLEMENT_SEGMENTATION_HANDLE(PolarGridRPhi2)
 #include "DDSegmentation/ProjectiveCylinder.h"
 IMPLEMENT_SEGMENTATION_HANDLE(ProjectiveCylinder)
 
+#include "DDSegmentation/MultiSegmentation.h"
+IMPLEMENT_SEGMENTATION_HANDLE(MultiSegmentation)
diff --git a/DDCore/src/WaferGridXY.cpp b/DDCore/src/WaferGridXY.cpp
index 45aaa4c4d3e2c8b9d3057eafe17531dd9f4751c0..8d73b711af23a81ded486c511cf289967dd9c4d4 100644
--- a/DDCore/src/WaferGridXY.cpp
+++ b/DDCore/src/WaferGridXY.cpp
@@ -12,8 +12,8 @@
 //==========================================================================
 
 // Framework include files
-#include "DD4hep/Segmentations.h"
 #include "DD4hep/WaferGridXY.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 #include "DDSegmentation/WaferGridXY.h"
 
 // C/C++ include files
diff --git a/DDCore/src/World.cpp b/DDCore/src/World.cpp
index f0e42fa8b1cc4ac2ea0f39bd2881878145dd99ff..064774816e50309b5548b4b602cf47285624b09f 100644
--- a/DDCore/src/World.cpp
+++ b/DDCore/src/World.cpp
@@ -1,4 +1,3 @@
-// $Id$
 //==========================================================================
 //  AIDA Detector description implementation for LCD
 //--------------------------------------------------------------------------
diff --git a/DDCore/src/plugins/Compact2Objects.cpp b/DDCore/src/plugins/Compact2Objects.cpp
index 21425c6d3eb0dae8e12babba5a2659b5e04adb3e..424e13be38316ef2964bd13d571f5c7632babf03 100644
--- a/DDCore/src/plugins/Compact2Objects.cpp
+++ b/DDCore/src/plugins/Compact2Objects.cpp
@@ -19,6 +19,7 @@
 #include "DD4hep/FieldTypes.h"
 #include "DD4hep/Printout.h"
 #include "DD4hep/Plugins.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 #include "DD4hep/objects/DetectorInterna.h"
 #include "DD4hep/objects/ObjectsInterna.h"
 
diff --git a/DDCore/src/plugins/LCDDSegmentations.cpp b/DDCore/src/plugins/LCDDSegmentations.cpp
index d1453698715c4b2c2fe99d5e5fca4c50e8f14c60..0a60bc95c28d332d1e845a5b56dc6bcf425271eb 100644
--- a/DDCore/src/plugins/LCDDSegmentations.cpp
+++ b/DDCore/src/plugins/LCDDSegmentations.cpp
@@ -13,63 +13,48 @@
 //==========================================================================
 
 // Framework includes
-#include "DD4hep/Segmentations.h"
+#include "DD4hep/objects/SegmentationsInterna.h"
 #include "DD4hep/Factories.h"
 
 using namespace DD4hep::Geometry;
 using namespace DD4hep::DDSegmentation;
 
+namespace {
+  template<typename T> DD4hep::Geometry::SegmentationObject*
+  create_segmentation(DD4hep::Geometry::BitField64* decoder)  {
+    return new DD4hep::Geometry::SegmentationWrapper<T>(decoder);
+  }
+}
+
 #include "DDSegmentation/CartesianGridXY.h"
-static SegmentationObject* create_CartesianGridXY(BitField64* decoder)
-{  return new SegmentationWrapper<CartesianGridXY>(decoder);    }
-DECLARE_SEGMENTATION(CartesianGridXY,create_CartesianGridXY)
+DECLARE_SEGMENTATION(CartesianGridXY,create_segmentation<DD4hep::DDSegmentation::CartesianGridXY>)
 
 #include "DDSegmentation/CartesianGridXZ.h"
-static SegmentationObject* create_CartesianGridXZ(BitField64* decoder)
-{  return new SegmentationWrapper<CartesianGridXZ>(decoder);    }
-DECLARE_SEGMENTATION(CartesianGridXZ,create_CartesianGridXZ)
+DECLARE_SEGMENTATION(CartesianGridXZ,create_segmentation<DD4hep::DDSegmentation::CartesianGridXZ>)
 
 #include "DDSegmentation/CartesianGridYZ.h"
-static SegmentationObject* create_CartesianGridYZ(BitField64* decoder)
-{  return new SegmentationWrapper<CartesianGridYZ>(decoder);    }
-DECLARE_SEGMENTATION(CartesianGridYZ,create_CartesianGridYZ)
+DECLARE_SEGMENTATION(CartesianGridYZ,create_segmentation<DD4hep::DDSegmentation::CartesianGridYZ>)
 
 #include "DDSegmentation/CartesianGridXYZ.h"
-static SegmentationObject* create_CartesianGridXYZ(BitField64* decoder)
-{  return new SegmentationWrapper<CartesianGridXYZ>(decoder);    }
-DECLARE_SEGMENTATION(CartesianGridXYZ,create_CartesianGridXYZ)
+DECLARE_SEGMENTATION(CartesianGridXYZ,create_segmentation<DD4hep::DDSegmentation::CartesianGridXYZ>)
 
 #include "DDSegmentation/TiledLayerGridXY.h"
-static SegmentationObject* create_TiledLayerGridXY(BitField64* decoder)
-{  return new SegmentationWrapper<TiledLayerGridXY>(decoder);    }
-DECLARE_SEGMENTATION(TiledLayerGridXY,create_TiledLayerGridXY)
+DECLARE_SEGMENTATION(TiledLayerGridXY,create_segmentation<DD4hep::DDSegmentation::TiledLayerGridXY>)
 
 #include "DDSegmentation/MegatileLayerGridXY.h"
-static SegmentationObject* create_MegatileLayerGridXY(BitField64* decoder)
-{  return new SegmentationWrapper<MegatileLayerGridXY>(decoder);    }
-DECLARE_SEGMENTATION(MegatileLayerGridXY,create_MegatileLayerGridXY)
+DECLARE_SEGMENTATION(MegatileLayerGridXY,create_segmentation<DD4hep::DDSegmentation::MegatileLayerGridXY>)
 
 #include "DDSegmentation/WaferGridXY.h"
-static SegmentationObject* create_WaferGridXY(BitField64* decoder)
-{  return new SegmentationWrapper<WaferGridXY>(decoder);    }
-DECLARE_SEGMENTATION(WaferGridXY,create_WaferGridXY)
+DECLARE_SEGMENTATION(WaferGridXY,create_segmentation<DD4hep::DDSegmentation::WaferGridXY>)
 
 #include "DDSegmentation/PolarGridRPhi.h"
-static SegmentationObject* create_PolarGridRPhi(BitField64* decoder)
-{  return new SegmentationWrapper<PolarGridRPhi>(decoder);    }
-DECLARE_SEGMENTATION(PolarGridRPhi,create_PolarGridRPhi)
+DECLARE_SEGMENTATION(PolarGridRPhi,create_segmentation<DD4hep::DDSegmentation::PolarGridRPhi>)
 
 #include "DDSegmentation/PolarGridRPhi2.h"
-static SegmentationObject* create_PolarGridRPhi2(BitField64* decoder)
-{  return new SegmentationWrapper<PolarGridRPhi2>(decoder);    }
-DECLARE_SEGMENTATION(PolarGridRPhi2,create_PolarGridRPhi2)
+DECLARE_SEGMENTATION(PolarGridRPhi2,create_segmentation<DD4hep::DDSegmentation::PolarGridRPhi2>)
 
 #include "DDSegmentation/ProjectiveCylinder.h"
-static SegmentationObject* create_ProjectiveCylinder(BitField64* decoder)
-{  return new SegmentationWrapper<ProjectiveCylinder>(decoder);    }
-DECLARE_SEGMENTATION(ProjectiveCylinder,create_ProjectiveCylinder)
+DECLARE_SEGMENTATION(ProjectiveCylinder,create_segmentation<DD4hep::DDSegmentation::ProjectiveCylinder>)
 
 #include "DDSegmentation/MultiSegmentation.h"
-static SegmentationObject* create_MultiSegmentation(BitField64* decoder)
-{  return new SegmentationWrapper<MultiSegmentation>(decoder);    }
-DECLARE_SEGMENTATION(MultiSegmentation,create_MultiSegmentation)
+DECLARE_SEGMENTATION(MultiSegmentation,create_segmentation<DD4hep::DDSegmentation::MultiSegmentation>)
diff --git a/DDRec/src/IDDecoder.cpp b/DDRec/src/IDDecoder.cpp
index 4ce1186d70093103db6103dfbed4e465f4f90bb6..ef872386a5f090181096b645321b319c3287ba82 100644
--- a/DDRec/src/IDDecoder.cpp
+++ b/DDRec/src/IDDecoder.cpp
@@ -101,7 +101,7 @@ Position IDDecoder::localPosition(const CellID& cell) const {
  */
 VolumeID IDDecoder::volumeID(const CellID& cell) const {
 	DetElement det = this->detectorElement(cell);
-	return this->findReadout(det).segmentation()->volumeID(cell);
+	return this->findReadout(det).segmentation().volumeID(cell);
 }
 
 /*
@@ -177,7 +177,7 @@ Geometry::Readout IDDecoder::readout(const Position& global) const {
  */
 void IDDecoder::neighbours(const CellID& cell, set<CellID>& neighbour_cells) const {
 	DetElement det = this->detectorElement(cell);
-	this->findReadout(det).segmentation()->neighbours(cell, neighbour_cells);
+	this->findReadout(det).segmentation().neighbours(cell, neighbour_cells);
 }
 
 /*
@@ -186,7 +186,7 @@ void IDDecoder::neighbours(const CellID& cell, set<CellID>& neighbour_cells) con
 bool IDDecoder::areNeighbours(const CellID& cell, const CellID& otherCellID) const {
 	set<CellID> neighbour_cells;
 	DetElement det = this->detectorElement(cell);
-	this->findReadout(det).segmentation()->neighbours(cell, neighbour_cells);
+	this->findReadout(det).segmentation().neighbours(cell, neighbour_cells);
 	return neighbour_cells.count(otherCellID) != 0;
 }
 
diff --git a/DDSegmentation/include/DDSegmentation/MultiSegmentation.h b/DDSegmentation/include/DDSegmentation/MultiSegmentation.h
index 24a9f46c40e89357b80b364417d10baab816721a..8ac8bf87457e6f67046f0bde41fba74bbf9deee9 100644
--- a/DDSegmentation/include/DDSegmentation/MultiSegmentation.h
+++ b/DDSegmentation/include/DDSegmentation/MultiSegmentation.h
@@ -28,6 +28,27 @@ namespace DD4hep {
      *  \ingroup DD4HEP_DDSEGMENTATION
      */
     class MultiSegmentation : public Segmentation {
+    public:
+      
+      struct Entry {
+        long key_min, key_max;
+        Segmentation* segmentation;
+      };
+      typedef std::vector<Entry> Segmentations;
+
+    protected:
+      /// Sub-segmentaion container
+      Segmentations  m_segmentations;
+
+      /// the field name used to discriminate sub-segmentations
+      std::string    m_discriminatorId;
+
+      /// Bitfield corresponding to dicriminator identifier
+      BitFieldValue* m_discriminator;
+
+      /// Debug flags
+      int m_debug;
+
     public:
       /// Default constructor passing the encoding string
       MultiSegmentation(const std::string& cellEncoding = "");
@@ -41,6 +62,9 @@ namespace DD4hep {
       /// Add subsegmentation.
       virtual void addSubsegmentation(long key_min, long key_max, Segmentation* entry);
 
+      /// Access subsegmentation by cell identifier
+      const Segmentation& subsegmentation(const CellID& cellID) const;
+
       /// determine the position based on the cell ID
       virtual Vector3D position(const CellID& cellID) const;
 
@@ -64,27 +88,9 @@ namespace DD4hep {
       /// Set the underlying decoder
       virtual void setDecoder(BitField64* decoder);
 
-    protected:
-      struct Entry {
-        long key_min, key_max;
-        Segmentation* segmentation;
-      };
-      typedef std::vector<Entry> Segmentations;
+      /// The underlying sub-segementations
+      const Segmentations& subSegmentations()  const { return m_segmentations;   }
 
-      /// Access subsegmentation by cell identifier
-      const Segmentation& subsegmentation(const CellID& cellID) const;
-
-      /// Sub-segmentaion container
-      Segmentations  m_segmentations;
-
-      /// the field name used to discriminate sub-segmentations
-      std::string    m_discriminatorId;
-
-      /// Bitfield corresponding to dicriminator identifier
-      BitFieldValue* m_discriminator;
-
-      /// Debug flags
-      int m_debug;
     };
 
   } /* namespace DDSegmentation */
diff --git a/DDSegmentation/include/DDSegmentation/Segmentation.h b/DDSegmentation/include/DDSegmentation/Segmentation.h
index 89323900fe02fb947283d2388ad144d274177e50..494201584a35e75f1da3ab7d367a7340774b7ebc 100644
--- a/DDSegmentation/include/DDSegmentation/Segmentation.h
+++ b/DDSegmentation/include/DDSegmentation/Segmentation.h
@@ -161,9 +161,6 @@ protected:
 	mutable BitField64* _decoder;
 	/// Keeps track of the decoder ownership
 	bool _ownsDecoder;
-public:
-  /// DD4hep usage ONLY. Backlink to DD4hep segmentation
-  Segmentation* backLink;
 private:
 	/// No copy constructor allowed
 	Segmentation(const Segmentation&);
diff --git a/DDSegmentation/src/Segmentation.cpp b/DDSegmentation/src/Segmentation.cpp
index ad8b2fd05f03c21f3f4454635107fa49bb29a97f..77b3086d2e228fb549a9162aea18eb3343562554 100644
--- a/DDSegmentation/src/Segmentation.cpp
+++ b/DDSegmentation/src/Segmentation.cpp
@@ -26,13 +26,13 @@ namespace DD4hep {
 
     /// Default constructor used by derived classes passing the encoding string
     Segmentation::Segmentation(const std::string& cellEncoding) :
-      _name("Segmentation"), _type("Segmentation"), _decoder(new BitField64(cellEncoding)), _ownsDecoder(true), backLink(0) {
+      _name("Segmentation"), _type("Segmentation"), _decoder(new BitField64(cellEncoding)), _ownsDecoder(true) {
 
     }
 
     /// Default constructor used by derived classes passing an existing decoder
     Segmentation::Segmentation(BitField64* newDecoder) :
-      _name("Segmentation"), _type("Segmentation"), _decoder(newDecoder), _ownsDecoder(false), backLink(0) {
+      _name("Segmentation"), _type("Segmentation"), _decoder(newDecoder), _ownsDecoder(false) {
     }
 
     /// Destructor