diff --git a/DDCore/include/XML/XMLChildValue.h b/DDCore/include/XML/XMLChildValue.h
index d204fe08ac936a27ac5756a3ddd7fc5430774cda..84e27066cfb2b2e8162a71279eac1571ba29db7d 100644
--- a/DDCore/include/XML/XMLChildValue.h
+++ b/DDCore/include/XML/XMLChildValue.h
@@ -11,8 +11,8 @@
 //
 //==========================================================================
 
-#ifndef DD4HEP_XMLCHILDVALUE_H
-#define DD4HEP_XMLCHILDVALUE_H
+#ifndef DD4HEP_XML_XMLCHILDVALUE_H
+#define DD4HEP_XML_XMLCHILDVALUE_H
 
 // Framework include files
 #include "XML/XMLTags.h"
@@ -23,350 +23,8 @@ namespace DD4hep {
   /// Namespace for the AIDA detector description toolkit supporting XML utilities
   namespace XML {
 
-    /// XML Handle to xml elements with predefined child access
-    /**
-     *  Helper class to access any field in a xml tag in a
-     *  very easy way.
-     *  - You may assign any xml handle to a childvalue object
-     *  - Any child with the name and the value attribute set may then be accessed
-     *    by it's natural way. All possible child names are
-     *    reflected by the object's member functions.
-     *
-     *    IMPORTANT NOTE:
-     *    to be understood, the child elements MUST have structure like:
-     *    <inner_r value="76*cm" ....other attributes...../>
-     *    Other attributes may e.g. be a comment describing the variable.
-     *    The 'other attributes' are ignored. The 'value' attribute
-     *    is mandatory.
-     *
-     *  - If an child is requested and not present, a exception
-     *    is thrown.
-     *  - Functions, which accept a default value do NOT throw
-     *    an exception if the child is not present. These
-     *    rather return the default value.
-     *  - If a often used function is not present - the
-     *    implementation thereof is simple.
-     *
-     *  Such helper classes may be defined locally by any user
-     *  since XML element handles may easily be transferred.
-     *  Run-time exceptions occur however, if non-exiting child elements
-     *  are accessed.
-     *
-     *  \author  M.Frank
-     *  \version 1.0
-     *  \ingroup DD4HEP_XML
-     */
-    struct ChildValue: public Element {
-      /// Default constructor
-      ChildValue()
-        : Element(Handle_t(0)) {
-      }
-      /// Constructor from Handle
-      ChildValue(Handle_t e)
-        : Element(e) {
-      }
-      /// Constructor from Element
-      ChildValue(const Element& e)
-        : Element(e) {
-      }
-
-      /// Access parameters: id
-      int id() const;
-      /// Access parameters: id, if not present returns default
-      int id(int default_value) const;
-
-      /// Access parameters: type
-      int type() const;
-      /// Access rotation constants: combineHits
-      bool combineHits() const;
-
-      /// Access rotation constants: angle
-      double angle() const;
-      /// Access rotation constants: angle
-      double alpha() const;
-      /// Access rotation constants: angle
-      double beta() const;
-      /// Access rotation constants: angle
-      double gamma() const;
-      /// Access rotation constants: angle
-      double delta() const;
-      /// Access rotation constants: angle
-      double epsilon() const;
-      /// Access rotation constants: theta
-      double theta() const;
-      /// Access rotation constants: thetaBins
-      int thetaBins() const;
-
-      /// Access rotation constants: phi
-      double phi() const;
-      /// Access rotation constants: phiBins
-      int phiBins() const;
-      /// Access rotation constants: phi0
-      double phi0() const;
-      /// Access parameters: phi0, if not present returns default
-      double phi0(double default_value) const;
-      /// Access rotation constants: phi0_offset
-      double phi0_offset() const;
-      /// Access parameters: phi0_offset, if not present returns default
-      double phi0_offset(double default_value) const;
-      /// Access rotation constants: phi1
-      double phi1() const;
-      /// Access parameters: phi1, if not present returns default
-      double phi1(double default_value) const;
-      /// Access rotation constants: psi
-      double psi() const;
-
-      /// Access Tube parameters: zhalf
-      double zhalf() const;
-      /// Access Tube parameters: deltaphi
-      double deltaphi() const;
-
-      /// Access parameters: b
-      double b() const;
-      /// Access parameters: B
-      double B() const;
-      /// Access parameters: g
-      double g() const;
-      /// Access parameters: G
-      double G() const;
-
-      /// Access parameters: r
-      double r() const;
-      /// Access parameters: r, if not present returns default
-      double r(double default_value) const;
-      /// Access parameters: R
-      double R() const;
-      /// Access parameters: dr
-      double dr() const;
-      /// Access parameters: r0
-      double r0() const;
-      /// Access parameters: dr, if not present returns default
-      double dr(double default_value) const;
-      /// Access min/max parameters: rmin
-      double rmin() const;
-      /// Access min/max parameters: rmax
-      double rmax() const;
-      /// Access min/max parameters: rmin1
-      double rmin1() const;
-      /// Access min/max parameters: rmax1
-      double rmax1() const;
-      /// Access min/max parameters: rmin2
-      double rmin2() const;
-      /// Access min/max parameters: rmax2
-      double rmax2() const;
-      /// Access parameters: radius
-      double radius() const;
-      /// Access attribute values: distance
-      double distance() const;
-      /// Access attribute values: outer_radius
-      double outer_radius() const;
-      /// Access attribute values: outer_r
-      double outer_r() const;
-      /// Access attribute values: inner_radius
-      double inner_radius() const;
-      /// Access attribute values: inner_r
-      double inner_r() const;
-
-      /// Access parameters: x
-      double x() const;
-      /// Access parameters: x, if not present returns default
-      double x(double default_val) const;
-      /// Access parameters: X
-      double X() const;
-      /// Access parameters: x0
-      double x0() const;
-      /// Access parameters: x1
-      double x1() const;
-      /// Access parameters: x2
-      double x2() const;
-      /// Access parameters: dx
-      double dx() const;
-      /// Access parameters: dx, if not present returns default
-      double dx(double default_value) const;
-      /// Access min/max parameters: xmax
-      double xmin() const;
-      /// Access min/max parameters: xmax
-      double xmax() const;
-      /// Access min/max parameters: x_offset
-      double x_offset() const;
-      /// Access min/max parameters: dim_x
-      double dim_x() const;
-
-      /// Access parameters: y
-      double y() const;
-      /// Access parameters: y, if not present returns default
-      double y(double default_val) const;
-      /// Access parameters: Y
-      double Y() const;
-      /// Access parameters: y0
-      double y0() const;
-      /// Access parameters: y1
-      double y1() const;
-      /// Access parameters: y2
-      double y2() const;
-      /// Access parameters: dy
-      double dy() const;
-      /// Access parameters: dz, if not present returns default
-      double dy(double default_value) const;
-      /// Access min/max parameters: ymax
-      double ymin() const;
-      /// Access min/max parameters: ymax
-      double ymax() const;
-      /// Access min/max parameters: y_offset
-      double y_offset() const;
-      /// Access min/max parameters: dim_y
-      double dim_y() const;
-
-      /// Access parameters: z
-      double z() const;
-      /// Access parameters: z, if not present returns default
-      double z(double default_val) const;
-      /// Access parameters: Z
-      double Z() const;
-      /// Access parameters: z0
-      double z0() const;
-      /// Access parameters: z1
-      double z1() const;
-      /// Access parameters: z2
-      double z2() const;
-      /// Access parameters: dz
-      double dz() const;
-      /// Access parameters: dz, if not present returns default
-      double dz(double default_value) const;
-      /// Access min/max parameters: zmax
-      double zmin() const;
-      /// Access min/max parameters: zmax
-      double zmax() const;
-      /// Access attribute values: outer_z
-      double outer_z() const;
-      /// Access attribute values: inner_z
-      double inner_z() const;
-      /// Access min/max parameters: z_offset
-      double z_offset() const;
-      /// Access min/max parameters: dim_z
-      double dim_z() const;
-
-      /// Access attribute values: length
-      double length() const;
-      /// Access attribute values: width
-      double width() const;
-      /// Access attribute values: height
-      double height() const;
-      /// Access attribute values: depth
-      double depth() const;
-      /// Access attribute values: thickness
-      double thickness() const;
-
-      /// Access attribute values: z_length
-      double z_length() const;
-      /// Access attribute values: gap
-      double gap() const;
-      /// Access attribute values: r_size
-      double r_size() const;
-      /// Access attribute values: phi_size_max
-      double phi_size_max() const;
-      /// Access attribute values: reflect
-      bool reflect() const;
-      /// Access attribute values: reflect
-      bool reflect(bool default_value) const;
-      /// Access attribute values: crossing_angle
-      double crossing_angle() const;
-      /// Access attribute values: repeat
-      int repeat() const;
-
-      /// Access attribute values: outgoing_r
-      double outgoing_r() const;
-      /// Access attribute values: incoming_r
-      double incoming_r() const;
-      /// Access attribute values: offset
-      double offset() const;
-      /// Access attribute values: offset
-      double offset(double default_value) const;
-      /// Access attribute values: number
-      int number() const;
-
-      /// Access attribute values: nmodules
-      int nmodules() const;
-      /// Access attribute values: nModules
-      int nModules() const;
-      /// Access attribute values: RowID
-      int RowID() const;
-      /// Access attribute values: moduleHeight
-      double moduleHeight() const;
-      /// Access attribute values: moduleWidth
-      double moduleWidth() const;
-      /// Access attribute values: modulePitch
-      double modulePitch() const;
-      /// Access attribute values: modulePosX
-      double modulePosX() const;
-      /// Access attribute values: modulePosY
-      double modulePosY() const;
-
-      /// Access attribute values: nPads
-      int nPads() const;
-      /// Access attribute values: rowPitch
-      double rowPitch() const;
-      /// Access attribute values: padPitch
-      double padPitch() const;
-      /// Access attribute values: rowHeight
-      double rowHeight() const;
-      /// Access attribute values: padType
-      std::string padType() const;
-
-      /// Access attribute values: numsides
-      int numsides() const;
-      /// Access attribute values: nsides
-      int nsides() const;
-      /// Access attribute values: nsides_inner
-      int nsides_inner() const;
-      /// Access attribute values: nsides_outer
-      int nsides_outer() const;
-
-      /// Access attribute values: phi_tilt
-      double phi_tilt() const;
-      /// Access attribute values: nphi
-      int nphi() const;
-      /// Access attribute values: rc
-      double rc() const;
-
-      /// Access attribute values: zstart
-      double zstart() const;
-      /// Access attribute values: nz
-      int nz() const;
-
-      /// Access attribute values: start
-      double start() const;
-      /// Access attribute values: end
-      double end() const;
-      /// Access attribute values: inner_field
-      double inner_field() const;
-      /// Access attribute values: outer_field
-      double outer_field() const;
-
-      /// Access attribute values: visible
-      bool visible() const;
-      /// Access attribute values: show_daughters
-      bool show_daughters() const;
-
-      /// Access "name" attribute as STL string
-      std::string nameStr() const;
-      /// Access "ref" attribute as a string
-      std::string refStr() const;
-      /// Access "type" attribute as STL string
-      std::string typeStr() const;
-      /// Access "value" attribute as STL string
-      std::string valueStr() const;
-      /// Access "module" attribute as STL string
-      std::string moduleStr() const;
-      /// Access "readout" attribute as STL string
-      std::string readoutStr() const;
-      /// Access vis attribute as STL string. If not present empty return empty string
-      std::string visStr() const;
-      /// Access region attribute as STL string. If not present empty return empty string
-      std::string regionStr() const;
-      /// Access limits attribute as STL string. If not present empty return empty string
-      std::string limitsStr() const;
-    };
-  } /* End namespace XML       */
-} /* End namespace DD4hep    */
-#endif    /* DD4HEP_XMLCHILDVALUE_H   */
+#include "XML/detail/ChildValue.h"
+    
+  }       /* End namespace XML            */
+}         /* End namespace DD4hep         */
+#endif    /* DD4HEP_XML_XMLCHILDVALUE_H   */
diff --git a/DDCore/src/JSON/Detector.cpp b/DDCore/include/XML/XMLChildValue.inl
similarity index 55%
rename from DDCore/src/JSON/Detector.cpp
rename to DDCore/include/XML/XMLChildValue.inl
index 8216e7b7ea7b87e9acf907cc9babee0abe4ad8bb..201a90eb148ab62113e472bfcccc0e25647d5603 100644
--- a/DDCore/src/JSON/Detector.cpp
+++ b/DDCore/include/XML/XMLChildValue.inl
@@ -11,9 +11,20 @@
 //
 //==========================================================================
 
+#ifndef DD4HEP_XML_XMLCHILDVALUE_INL
+#define DD4HEP_XML_XMLCHILDVALUE_INL
+
 // Framework include files
-#include "JSON/Detector.h"
+#include "XML/XMLChildValue.h"
+
+/// Namespace for the AIDA detector description toolkit
+namespace DD4hep {
 
-using namespace DD4hep::JSON;
-#include "XML/detail/Detector.imp"
+  /// Namespace for the AIDA detector description toolkit supporting XML utilities
+  namespace XML {
 
+#include "XML/detail/ChildValue.inl"
+    
+  }       /* End namespace XML            */
+}         /* End namespace DD4hep         */
+#endif    /* DD4HEP_XML_XMLCHILDVALUE_INL */
diff --git a/DDCore/include/XML/detail/ChildValue.h b/DDCore/include/XML/detail/ChildValue.h
new file mode 100644
index 0000000000000000000000000000000000000000..e7ae23ad504a4019bb96eb2b12dd7c6bef8edce6
--- /dev/null
+++ b/DDCore/include/XML/detail/ChildValue.h
@@ -0,0 +1,365 @@
+//==========================================================================
+//  AIDA Detector description implementation for LCD
+//--------------------------------------------------------------------------
+// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
+// All rights reserved.
+//
+// For the licensing terms see $DD4hepINSTALL/LICENSE.
+// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
+//
+// Author     : M.Frank
+//
+//==========================================================================
+
+/** 
+ *  Note: Do NEVER include this file directly!
+ *
+ *  Use the specific include files in the XML or JSON directory!
+ *  Also NO header guards!
+ */
+
+
+/// XML Handle to xml elements with predefined child access
+/**
+ *  Helper class to access any field in a xml tag in a
+ *  very easy way.
+ *  - You may assign any xml handle to a childvalue object
+ *  - Any child with the name and the value attribute set may then be accessed
+ *    by it's natural way. All possible child names are
+ *    reflected by the object's member functions.
+ *
+ *    IMPORTANT NOTE:
+ *    to be understood, the child elements MUST have structure like:
+ *    <inner_r value="76*cm" ....other attributes...../>
+ *    Other attributes may e.g. be a comment describing the variable.
+ *    The 'other attributes' are ignored. The 'value' attribute
+ *    is mandatory.
+ *
+ *  - If an child is requested and not present, a exception
+ *    is thrown.
+ *  - Functions, which accept a default value do NOT throw
+ *    an exception if the child is not present. These
+ *    rather return the default value.
+ *  - If a often used function is not present - the
+ *    implementation thereof is simple.
+ *
+ *  Such helper classes may be defined locally by any user
+ *  since XML element handles may easily be transferred.
+ *  Run-time exceptions occur however, if non-exiting child elements
+ *  are accessed.
+ *
+ *  \author  M.Frank
+ *  \version 1.0
+ *  \ingroup DD4HEP_XML
+ */
+struct ChildValue: public Element {
+  /// Default constructor
+  ChildValue()
+    : Element(Handle_t(0)) {
+  }
+  /// Constructor from Handle
+  ChildValue(Handle_t e)
+    : Element(e) {
+  }
+  /// Constructor from Element
+  ChildValue(const Element& e)
+    : Element(e) {
+  }
+
+  /// Access parameters: id
+  int id() const;
+  /// Access parameters: id, if not present returns default
+  int id(int default_value) const;
+
+  /// Access parameters: type
+  int type() const;
+  /// Access rotation constants: combineHits
+  bool combineHits() const;
+
+  /// Access rotation constants: angle
+  double angle() const;
+  /// Access rotation constants: angle
+  double alpha() const;
+  /// Access rotation constants: angle
+  double beta() const;
+  /// Access rotation constants: angle
+  double gamma() const;
+  /// Access rotation constants: angle
+  double delta() const;
+  /// Access rotation constants: angle
+  double epsilon() const;
+  /// Access rotation constants: theta
+  double theta() const;
+  /// Access rotation constants: thetaBins
+  int thetaBins() const;
+
+  /// Access rotation constants: phi
+  double phi() const;
+  /// Access rotation constants: phiBins
+  int phiBins() const;
+  /// Access rotation constants: phi0
+  double phi0() const;
+  /// Access parameters: phi0, if not present returns default
+  double phi0(double default_value) const;
+  /// Access rotation constants: phi0_offset
+  double phi0_offset() const;
+  /// Access parameters: phi0_offset, if not present returns default
+  double phi0_offset(double default_value) const;
+  /// Access rotation constants: phi1
+  double phi1() const;
+  /// Access parameters: phi1, if not present returns default
+  double phi1(double default_value) const;
+  /// Access rotation constants: psi
+  double psi() const;
+
+  /// Access Tube parameters: zhalf
+  double zhalf() const;
+  /// Access Tube parameters: deltaphi
+  double deltaphi() const;
+
+  /// Access parameters: b
+  double b() const;
+  /// Access parameters: B
+  double B() const;
+  /// Access parameters: g
+  double g() const;
+  /// Access parameters: G
+  double G() const;
+
+  /// Access parameters: r
+  double r() const;
+  /// Access parameters: r, if not present returns default
+  double r(double default_value) const;
+  /// Access parameters: R
+  double R() const;
+  /// Access parameters: dr
+  double dr() const;
+  /// Access parameters: r0
+  double r0() const;
+  /// Access parameters: dr, if not present returns default
+  double dr(double default_value) const;
+  /// Access min/max parameters: rmin
+  double rmin() const;
+  /// Access min/max parameters: rmax
+  double rmax() const;
+  /// Access min/max parameters: rmin1
+  double rmin1() const;
+  /// Access min/max parameters: rmax1
+  double rmax1() const;
+  /// Access min/max parameters: rmin2
+  double rmin2() const;
+  /// Access min/max parameters: rmax2
+  double rmax2() const;
+  /// Access parameters: radius
+  double radius() const;
+  /// Access attribute values: distance
+  double distance() const;
+  /// Access attribute values: outer_radius
+  double outer_radius() const;
+  /// Access attribute values: outer_r
+  double outer_r() const;
+  /// Access attribute values: inner_radius
+  double inner_radius() const;
+  /// Access attribute values: inner_r
+  double inner_r() const;
+
+  /// Access parameters: x
+  double x() const;
+  /// Access parameters: x, if not present returns default
+  double x(double default_val) const;
+  /// Access parameters: X
+  double X() const;
+  /// Access parameters: x0
+  double x0() const;
+  /// Access parameters: x1
+  double x1() const;
+  /// Access parameters: x2
+  double x2() const;
+  /// Access parameters: dx
+  double dx() const;
+  /// Access parameters: dx, if not present returns default
+  double dx(double default_value) const;
+  /// Access min/max parameters: xmax
+  double xmin() const;
+  /// Access min/max parameters: xmax
+  double xmax() const;
+  /// Access min/max parameters: x_offset
+  double x_offset() const;
+  /// Access min/max parameters: dim_x
+  double dim_x() const;
+
+  /// Access parameters: y
+  double y() const;
+  /// Access parameters: y, if not present returns default
+  double y(double default_val) const;
+  /// Access parameters: Y
+  double Y() const;
+  /// Access parameters: y0
+  double y0() const;
+  /// Access parameters: y1
+  double y1() const;
+  /// Access parameters: y2
+  double y2() const;
+  /// Access parameters: dy
+  double dy() const;
+  /// Access parameters: dz, if not present returns default
+  double dy(double default_value) const;
+  /// Access min/max parameters: ymax
+  double ymin() const;
+  /// Access min/max parameters: ymax
+  double ymax() const;
+  /// Access min/max parameters: y_offset
+  double y_offset() const;
+  /// Access min/max parameters: dim_y
+  double dim_y() const;
+
+  /// Access parameters: z
+  double z() const;
+  /// Access parameters: z, if not present returns default
+  double z(double default_val) const;
+  /// Access parameters: Z
+  double Z() const;
+  /// Access parameters: z0
+  double z0() const;
+  /// Access parameters: z1
+  double z1() const;
+  /// Access parameters: z2
+  double z2() const;
+  /// Access parameters: dz
+  double dz() const;
+  /// Access parameters: dz, if not present returns default
+  double dz(double default_value) const;
+  /// Access min/max parameters: zmax
+  double zmin() const;
+  /// Access min/max parameters: zmax
+  double zmax() const;
+  /// Access attribute values: outer_z
+  double outer_z() const;
+  /// Access attribute values: inner_z
+  double inner_z() const;
+  /// Access min/max parameters: z_offset
+  double z_offset() const;
+  /// Access min/max parameters: dim_z
+  double dim_z() const;
+
+  /// Access attribute values: length
+  double length() const;
+  /// Access attribute values: width
+  double width() const;
+  /// Access attribute values: height
+  double height() const;
+  /// Access attribute values: depth
+  double depth() const;
+  /// Access attribute values: thickness
+  double thickness() const;
+
+  /// Access attribute values: z_length
+  double z_length() const;
+  /// Access attribute values: gap
+  double gap() const;
+  /// Access attribute values: r_size
+  double r_size() const;
+  /// Access attribute values: phi_size_max
+  double phi_size_max() const;
+  /// Access attribute values: reflect
+  bool reflect() const;
+  /// Access attribute values: reflect
+  bool reflect(bool default_value) const;
+  /// Access attribute values: crossing_angle
+  double crossing_angle() const;
+  /// Access attribute values: repeat
+  int repeat() const;
+
+  /// Access attribute values: outgoing_r
+  double outgoing_r() const;
+  /// Access attribute values: incoming_r
+  double incoming_r() const;
+  /// Access attribute values: offset
+  double offset() const;
+  /// Access attribute values: offset
+  double offset(double default_value) const;
+  /// Access attribute values: number
+  int number() const;
+
+  /// Access attribute values: nmodules
+  int nmodules() const;
+  /// Access attribute values: nModules
+  int nModules() const;
+  /// Access attribute values: RowID
+  int RowID() const;
+  /// Access attribute values: moduleHeight
+  double moduleHeight() const;
+  /// Access attribute values: moduleWidth
+  double moduleWidth() const;
+  /// Access attribute values: modulePitch
+  double modulePitch() const;
+  /// Access attribute values: modulePosX
+  double modulePosX() const;
+  /// Access attribute values: modulePosY
+  double modulePosY() const;
+
+  /// Access attribute values: nPads
+  int nPads() const;
+  /// Access attribute values: rowPitch
+  double rowPitch() const;
+  /// Access attribute values: padPitch
+  double padPitch() const;
+  /// Access attribute values: rowHeight
+  double rowHeight() const;
+  /// Access attribute values: padType
+  std::string padType() const;
+
+  /// Access attribute values: numsides
+  int numsides() const;
+  /// Access attribute values: nsides
+  int nsides() const;
+  /// Access attribute values: nsides_inner
+  int nsides_inner() const;
+  /// Access attribute values: nsides_outer
+  int nsides_outer() const;
+
+  /// Access attribute values: phi_tilt
+  double phi_tilt() const;
+  /// Access attribute values: nphi
+  int nphi() const;
+  /// Access attribute values: rc
+  double rc() const;
+
+  /// Access attribute values: zstart
+  double zstart() const;
+  /// Access attribute values: nz
+  int nz() const;
+
+  /// Access attribute values: start
+  double start() const;
+  /// Access attribute values: end
+  double end() const;
+  /// Access attribute values: inner_field
+  double inner_field() const;
+  /// Access attribute values: outer_field
+  double outer_field() const;
+
+  /// Access attribute values: visible
+  bool visible() const;
+  /// Access attribute values: show_daughters
+  bool show_daughters() const;
+
+  /// Access "name" attribute as STL string
+  std::string nameStr() const;
+  /// Access "ref" attribute as a string
+  std::string refStr() const;
+  /// Access "type" attribute as STL string
+  std::string typeStr() const;
+  /// Access "value" attribute as STL string
+  std::string valueStr() const;
+  /// Access "module" attribute as STL string
+  std::string moduleStr() const;
+  /// Access "readout" attribute as STL string
+  std::string readoutStr() const;
+  /// Access vis attribute as STL string. If not present empty return empty string
+  std::string visStr() const;
+  /// Access region attribute as STL string. If not present empty return empty string
+  std::string regionStr() const;
+  /// Access limits attribute as STL string. If not present empty return empty string
+  std::string limitsStr() const;
+};
diff --git a/DDCore/include/XML/detail/ChildValue.imp b/DDCore/include/XML/detail/ChildValue.imp
new file mode 100644
index 0000000000000000000000000000000000000000..8d96518fd130d50a354d621b1e661489abf70d25
--- /dev/null
+++ b/DDCore/include/XML/detail/ChildValue.imp
@@ -0,0 +1,195 @@
+//==========================================================================
+//  AIDA Detector description implementation for LCD
+//--------------------------------------------------------------------------
+// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
+// All rights reserved.
+//
+// For the licensing terms see $DD4hepINSTALL/LICENSE.
+// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
+//
+// Author     : M.Frank
+//
+//==========================================================================
+
+XML_CHILDVALUE_ACCESSOR(int, id)
+XML_CHILDVALUE_ACCESSOR_INT(id)
+XML_CHILDVALUE_ACCESSOR(bool, combineHits)
+
+XML_CHILDVALUE_ACCESSOR(double, x)
+XML_CHILDVALUE_ACCESSOR_DOUBLE(x)
+XML_CHILDVALUE_ACCESSOR(double, X)
+XML_CHILDVALUE_ACCESSOR(double, dx)
+XML_CHILDVALUE_ACCESSOR_DOUBLE(dx)
+XML_CHILDVALUE_ACCESSOR(double, x0)
+XML_CHILDVALUE_ACCESSOR(double, x1)
+XML_CHILDVALUE_ACCESSOR(double, x2)
+XML_CHILDVALUE_ACCESSOR(double, xmin)
+XML_CHILDVALUE_ACCESSOR(double, xmax)
+XML_CHILDVALUE_ACCESSOR(double, x_offset)
+XML_CHILDVALUE_ACCESSOR(double, dim_x)
+
+XML_CHILDVALUE_ACCESSOR(double, y)
+XML_CHILDVALUE_ACCESSOR_DOUBLE(y)
+XML_CHILDVALUE_ACCESSOR(double, Y)
+XML_CHILDVALUE_ACCESSOR(double, dy)
+XML_CHILDVALUE_ACCESSOR_DOUBLE(dy)
+XML_CHILDVALUE_ACCESSOR(double, y0)
+XML_CHILDVALUE_ACCESSOR(double, y1)
+XML_CHILDVALUE_ACCESSOR(double, y2)
+XML_CHILDVALUE_ACCESSOR(double, ymin)
+XML_CHILDVALUE_ACCESSOR(double, ymax)
+XML_CHILDVALUE_ACCESSOR(double, y_offset)
+XML_CHILDVALUE_ACCESSOR(double, dim_y)
+
+XML_CHILDVALUE_ACCESSOR(double, z)
+XML_CHILDVALUE_ACCESSOR_DOUBLE(z)
+XML_CHILDVALUE_ACCESSOR(double, Z)
+XML_CHILDVALUE_ACCESSOR(double, dz)
+XML_CHILDVALUE_ACCESSOR_DOUBLE(dz)
+XML_CHILDVALUE_ACCESSOR(double, z0)
+XML_CHILDVALUE_ACCESSOR(double, z1)
+XML_CHILDVALUE_ACCESSOR(double, z2)
+XML_CHILDVALUE_ACCESSOR(double, zmin)
+XML_CHILDVALUE_ACCESSOR(double, zmax)
+XML_CHILDVALUE_ACCESSOR(double, z_offset)
+XML_CHILDVALUE_ACCESSOR(double, dim_z)
+XML_CHILDVALUE_ACCESSOR(double, outer_z)
+XML_CHILDVALUE_ACCESSOR(double, inner_z)
+
+XML_CHILDVALUE_ACCESSOR(double, b)
+XML_CHILDVALUE_ACCESSOR(double, g)
+XML_CHILDVALUE_ACCESSOR(double, B)
+XML_CHILDVALUE_ACCESSOR(double, G)
+XML_CHILDVALUE_ACCESSOR(double, r)
+XML_CHILDVALUE_ACCESSOR_DOUBLE(r)
+XML_CHILDVALUE_ACCESSOR(double, R)
+XML_CHILDVALUE_ACCESSOR(double, dr)
+XML_CHILDVALUE_ACCESSOR(double, rmin)
+XML_CHILDVALUE_ACCESSOR(double, rmax)
+XML_CHILDVALUE_ACCESSOR(double, rmin1)
+XML_CHILDVALUE_ACCESSOR(double, rmax1)
+XML_CHILDVALUE_ACCESSOR(double, rmin2)
+XML_CHILDVALUE_ACCESSOR(double, rmax2)
+XML_CHILDVALUE_ACCESSOR(double, radius)
+XML_CHILDVALUE_ACCESSOR(double, outer_r)
+XML_CHILDVALUE_ACCESSOR(double, distance)
+XML_CHILDVALUE_ACCESSOR(double, outer_radius)
+XML_CHILDVALUE_ACCESSOR(double, inner_r)
+XML_CHILDVALUE_ACCESSOR(double, inner_radius)
+
+XML_CHILDVALUE_ACCESSOR(double, angle)
+XML_CHILDVALUE_ACCESSOR(double, alpha)
+XML_CHILDVALUE_ACCESSOR(double, beta)
+XML_CHILDVALUE_ACCESSOR(double, gamma)
+XML_CHILDVALUE_ACCESSOR(double, delta)
+XML_CHILDVALUE_ACCESSOR(double, epsilon)
+XML_CHILDVALUE_ACCESSOR(double, theta)
+XML_CHILDVALUE_ACCESSOR(int, thetaBins)
+XML_CHILDVALUE_ACCESSOR(double, psi)
+XML_CHILDVALUE_ACCESSOR(double, phi)
+XML_CHILDVALUE_ACCESSOR(int, phiBins)
+XML_CHILDVALUE_ACCESSOR(double, phi0)
+XML_CHILDVALUE_ACCESSOR(double, phi0_offset)
+XML_CHILDVALUE_ACCESSOR_DOUBLE(phi0)
+XML_CHILDVALUE_ACCESSOR(double, phi1)
+XML_CHILDVALUE_ACCESSOR_DOUBLE(phi1)
+XML_CHILDVALUE_ACCESSOR(double, deltaphi)
+
+XML_CHILDVALUE_ACCESSOR(double, length)
+XML_CHILDVALUE_ACCESSOR(double, width)
+XML_CHILDVALUE_ACCESSOR(double, height)
+XML_CHILDVALUE_ACCESSOR(double, depth)
+XML_CHILDVALUE_ACCESSOR(double, offset)
+XML_CHILDVALUE_ACCESSOR_DOUBLE(offset)
+XML_CHILDVALUE_ACCESSOR(double, crossing_angle)
+XML_CHILDVALUE_ACCESSOR(double, incoming_r)
+XML_CHILDVALUE_ACCESSOR(double, outgoing_r)
+XML_CHILDVALUE_ACCESSOR(double, phi_size_max)
+XML_CHILDVALUE_ACCESSOR(double, r_size)
+
+XML_CHILDVALUE_ACCESSOR(double, gap)
+XML_CHILDVALUE_ACCESSOR(double, z_length)
+XML_CHILDVALUE_ACCESSOR(double, zhalf)
+XML_CHILDVALUE_ACCESSOR(double, phi_tilt)
+XML_CHILDVALUE_ACCESSOR(int, nphi)
+XML_CHILDVALUE_ACCESSOR(double, rc)
+XML_CHILDVALUE_ACCESSOR(int, nz)
+XML_CHILDVALUE_ACCESSOR(double, zstart)
+XML_CHILDVALUE_ACCESSOR(double, start)
+XML_CHILDVALUE_ACCESSOR(double, end)
+XML_CHILDVALUE_ACCESSOR(double, thickness)
+XML_CHILDVALUE_ACCESSOR(int, numsides)
+XML_CHILDVALUE_ACCESSOR(int, nsides)
+XML_CHILDVALUE_ACCESSOR(int, nsides_inner)
+XML_CHILDVALUE_ACCESSOR(int, nsides_outer)
+XML_CHILDVALUE_ACCESSOR(int, number)
+XML_CHILDVALUE_ACCESSOR(int, repeat)
+XML_CHILDVALUE_ACCESSOR(bool, reflect)
+XML_CHILDVALUE_ACCESSOR_BOOL(reflect)
+
+XML_CHILDVALUE_ACCESSOR(int, nmodules)
+XML_CHILDVALUE_ACCESSOR(int, nModules)
+XML_CHILDVALUE_ACCESSOR(int, RowID)
+XML_CHILDVALUE_ACCESSOR(int, nPads)
+XML_CHILDVALUE_ACCESSOR(double, moduleHeight)
+XML_CHILDVALUE_ACCESSOR(double, moduleWidth)
+XML_CHILDVALUE_ACCESSOR(double, modulePosX)
+XML_CHILDVALUE_ACCESSOR(double, modulePosY)
+XML_CHILDVALUE_ACCESSOR(double, modulePitch)
+XML_CHILDVALUE_ACCESSOR(double, rowPitch)
+XML_CHILDVALUE_ACCESSOR(double, padPitch)
+XML_CHILDVALUE_ACCESSOR(double, rowHeight)
+XML_CHILDVALUE_ACCESSOR(double, inner_field)
+XML_CHILDVALUE_ACCESSOR(double, outer_field)
+XML_CHILDVALUE_ACCESSOR(int, type)
+
+XML_CHILDVALUE_ACCESSOR(bool, visible)
+XML_CHILDVALUE_ACCESSOR(bool, show_daughters)
+#if 0
+XML_CHILDVALUE_ACCESSOR(double,)
+XML_CHILDVALUE_ACCESSOR(double,)
+XML_CHILDVALUE_ACCESSOR(double,)
+XML_CHILDVALUE_ACCESSOR(double,)
+#endif
+
+
+std::string ChildValue::padType() const {
+  return XML_CHILDVALUE_childValue(pads,std::string);
+}
+
+std::string ChildValue::nameStr() const {
+  return XML_CHILDVALUE_childValue(name,std::string);
+}
+
+std::string ChildValue::refStr() const {
+  return XML_CHILDVALUE_childValue(ref,std::string);
+}
+
+std::string ChildValue::typeStr() const {
+  return XML_CHILDVALUE_childValue(type,std::string);
+}
+
+/// Access "value" attribute as STL std::string
+std::string ChildValue::valueStr() const   {
+  return XML_CHILDVALUE_childValue(value,std::string);
+}
+
+std::string ChildValue::regionStr() const {
+  XML_CHILDVALUE_childValueDefault(region,std::string,std::string());
+}
+
+std::string ChildValue::limitsStr() const {
+  XML_CHILDVALUE_childValueDefault(limits,std::string,std::string());
+}
+
+std::string ChildValue::visStr() const {
+  XML_CHILDVALUE_childValueDefault(vis,std::string,std::string());
+}
+
+std::string ChildValue::readoutStr() const {
+  XML_CHILDVALUE_childValueDefault(readout,std::string,std::string());
+}
+
+std::string ChildValue::moduleStr() const {
+  XML_CHILDVALUE_childValueDefault(module,std::string,std::string());
+}
diff --git a/DDCore/include/XML/detail/ChildValue.inl b/DDCore/include/XML/detail/ChildValue.inl
new file mode 100644
index 0000000000000000000000000000000000000000..2c674ddbd50578bc12f6617da5490ca8f3d41e51
--- /dev/null
+++ b/DDCore/include/XML/detail/ChildValue.inl
@@ -0,0 +1,43 @@
+//==========================================================================
+//  AIDA Detector description implementation for LCD
+//--------------------------------------------------------------------------
+// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
+// All rights reserved.
+//
+// For the licensing terms see $DD4hepINSTALL/LICENSE.
+// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
+//
+// Author     : M.Frank
+//
+//==========================================================================
+
+
+/** 
+ *  Note: Do NEVER include this file directly!
+ *
+ *  Use the specific include files in the XML or JSON directory!
+ *  Also NO header guards!
+ */
+
+
+#define XML_CHILDVALUE_childValue(name,type)   m_element.child(Unicode_##name).attr<type>(_DD4hep_Unicode_Item(value))
+
+#define XML_CHILDVALUE_childValueDefault(name,type,def)                 \
+  Handle_t __h = m_element.child(Unicode_##name,false);                 \
+  if ( __h.ptr() && __h.hasAttr(_DD4hep_Unicode_Item(value)) ) return __h.attr < type > (_DD4hep_Unicode_Item(value)); \
+  return def;
+
+#define XML_CHILDVALUE_ACCESSOR(type,name)                              \
+  type ChildValue::name() const { return XML_CHILDVALUE_childValue(name,type); }
+
+#define XML_CHILDVALUE_ACCESSOR_DEFAULT(name,type,dressing)             \
+  type ChildValue::name(type default_val) const {                       \
+    Handle_t __h = m_element.child(Unicode_##name,false);               \
+    if ( __h.ptr() )  {                                                 \
+      const XmlChar* val = __h.attr_value_nothrow(_DD4hep_Unicode_Item(value)); \
+      return val ? dressing(val) : default_val; }                       \
+    return default_val; }
+
+#define XML_CHILDVALUE_ACCESSOR_DOUBLE(name) XML_CHILDVALUE_ACCESSOR_DEFAULT(name,double,_toDouble)
+#define XML_CHILDVALUE_ACCESSOR_INT(name)    XML_CHILDVALUE_ACCESSOR_DEFAULT(name,int,_toInt)
+#define XML_CHILDVALUE_ACCESSOR_BOOL(name)   XML_CHILDVALUE_ACCESSOR_DEFAULT(name,bool,_toBool)
diff --git a/DDCore/src/JSON/Dimension.cpp b/DDCore/src/JSON/Helpers.cpp
similarity index 87%
rename from DDCore/src/JSON/Dimension.cpp
rename to DDCore/src/JSON/Helpers.cpp
index 356f1277c376e25be741631c03b1808ee8462273..d6f197354a991e999405b2e24dad1bbecffb2f22 100644
--- a/DDCore/src/JSON/Dimension.cpp
+++ b/DDCore/src/JSON/Helpers.cpp
@@ -12,6 +12,11 @@
 //==========================================================================
 
 // Framework include files
+#include "JSON/Detector.h"
 #include "JSON/Dimension.inl"
+
+using namespace DD4hep::JSON;
+
 // Instantiate here the concrete implementations
 #include "XML/detail/Dimension.imp"
+#include "XML/detail/Detector.imp"
diff --git a/DDCore/src/XML/XMLChildValue.cpp b/DDCore/src/XML/XMLChildValue.cpp
deleted file mode 100644
index a7f09060875d2a1926982c2a092925d23d00e796..0000000000000000000000000000000000000000
--- a/DDCore/src/XML/XMLChildValue.cpp
+++ /dev/null
@@ -1,221 +0,0 @@
-//==========================================================================
-//  AIDA Detector description implementation for LCD
-//--------------------------------------------------------------------------
-// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
-// All rights reserved.
-//
-// For the licensing terms see $DD4hepINSTALL/LICENSE.
-// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
-//
-// Author     : M.Frank
-//
-//==========================================================================
-
-// Framework include files
-#include "XML/XMLChildValue.h"
-
-using namespace std;
-using namespace DD4hep::XML;
-
-#define childValue(name,type)   m_element.child(Unicode_##name).attr<type>(Unicode_value)
-
-#define childValueDefault(name,type,def)                                \
-  Handle_t __h = m_element.child(Unicode_##name,false);                 \
-  if ( __h.ptr() && __h.hasAttr(Unicode_value) ) return __h.attr < type > (Unicode_value); \
-  return def;
-
-#define XML_ATTR_ACCESSOR(type,name)  type ChildValue::name() const { return childValue(name,type); }
-#define XML_ATTR_ACCESSOR_DEFAULT(name,type,dressing)             \
-  type ChildValue::name(type default_val) const {                 \
-    Handle_t __h = m_element.child(Unicode_##name,false);         \
-    if ( __h.ptr() )  {                                           \
-      const XmlChar* val = __h.attr_value_nothrow(Unicode_value); \
-      return val ? dressing(val) : default_val; }                 \
-    return default_val; }
-
-#define XML_ATTR_ACCESSOR_DOUBLE(name) XML_ATTR_ACCESSOR_DEFAULT(name,double,_toDouble)
-#define XML_ATTR_ACCESSOR_INT(name)    XML_ATTR_ACCESSOR_DEFAULT(name,int,_toInt)
-#define XML_ATTR_ACCESSOR_BOOL(name)   XML_ATTR_ACCESSOR_DEFAULT(name,bool,_toBool)
-
-XML_ATTR_ACCESSOR(int, id)
-XML_ATTR_ACCESSOR_INT(id)
-XML_ATTR_ACCESSOR(bool, combineHits)
-
-XML_ATTR_ACCESSOR(double, x)
-XML_ATTR_ACCESSOR_DOUBLE(x)
-XML_ATTR_ACCESSOR(double, X)
-XML_ATTR_ACCESSOR(double, dx)
-XML_ATTR_ACCESSOR_DOUBLE(dx)
-XML_ATTR_ACCESSOR(double, x0)
-XML_ATTR_ACCESSOR(double, x1)
-XML_ATTR_ACCESSOR(double, x2)
-XML_ATTR_ACCESSOR(double, xmin)
-XML_ATTR_ACCESSOR(double, xmax)
-XML_ATTR_ACCESSOR(double, x_offset)
-XML_ATTR_ACCESSOR(double, dim_x)
-
-XML_ATTR_ACCESSOR(double, y)
-XML_ATTR_ACCESSOR_DOUBLE(y)
-XML_ATTR_ACCESSOR(double, Y)
-XML_ATTR_ACCESSOR(double, dy)
-XML_ATTR_ACCESSOR_DOUBLE(dy)
-XML_ATTR_ACCESSOR(double, y0)
-XML_ATTR_ACCESSOR(double, y1)
-XML_ATTR_ACCESSOR(double, y2)
-XML_ATTR_ACCESSOR(double, ymin)
-XML_ATTR_ACCESSOR(double, ymax)
-XML_ATTR_ACCESSOR(double, y_offset)
-XML_ATTR_ACCESSOR(double, dim_y)
-
-XML_ATTR_ACCESSOR(double, z)
-XML_ATTR_ACCESSOR_DOUBLE(z)
-XML_ATTR_ACCESSOR(double, Z)
-XML_ATTR_ACCESSOR(double, dz)
-XML_ATTR_ACCESSOR_DOUBLE(dz)
-XML_ATTR_ACCESSOR(double, z0)
-XML_ATTR_ACCESSOR(double, z1)
-XML_ATTR_ACCESSOR(double, z2)
-XML_ATTR_ACCESSOR(double, zmin)
-XML_ATTR_ACCESSOR(double, zmax)
-XML_ATTR_ACCESSOR(double, z_offset)
-XML_ATTR_ACCESSOR(double, dim_z)
-XML_ATTR_ACCESSOR(double, outer_z)
-XML_ATTR_ACCESSOR(double, inner_z)
-
-XML_ATTR_ACCESSOR(double, b)
-XML_ATTR_ACCESSOR(double, g)
-XML_ATTR_ACCESSOR(double, B)
-XML_ATTR_ACCESSOR(double, G)
-XML_ATTR_ACCESSOR(double, r)
-XML_ATTR_ACCESSOR_DOUBLE(r)
-XML_ATTR_ACCESSOR(double, R)
-XML_ATTR_ACCESSOR(double, dr)
-XML_ATTR_ACCESSOR(double, rmin)
-XML_ATTR_ACCESSOR(double, rmax)
-XML_ATTR_ACCESSOR(double, rmin1)
-XML_ATTR_ACCESSOR(double, rmax1)
-XML_ATTR_ACCESSOR(double, rmin2)
-XML_ATTR_ACCESSOR(double, rmax2)
-XML_ATTR_ACCESSOR(double, radius)
-XML_ATTR_ACCESSOR(double, outer_r)
-XML_ATTR_ACCESSOR(double, distance)
-XML_ATTR_ACCESSOR(double, outer_radius)
-XML_ATTR_ACCESSOR(double, inner_r)
-XML_ATTR_ACCESSOR(double, inner_radius)
-
-XML_ATTR_ACCESSOR(double, angle)
-XML_ATTR_ACCESSOR(double, alpha)
-XML_ATTR_ACCESSOR(double, beta)
-XML_ATTR_ACCESSOR(double, gamma)
-XML_ATTR_ACCESSOR(double, delta)
-XML_ATTR_ACCESSOR(double, epsilon)
-XML_ATTR_ACCESSOR(double, theta)
-XML_ATTR_ACCESSOR(int, thetaBins)
-XML_ATTR_ACCESSOR(double, psi)
-XML_ATTR_ACCESSOR(double, phi)
-XML_ATTR_ACCESSOR(int, phiBins)
-XML_ATTR_ACCESSOR(double, phi0)
-XML_ATTR_ACCESSOR(double, phi0_offset)
-XML_ATTR_ACCESSOR_DOUBLE(phi0)
-XML_ATTR_ACCESSOR(double, phi1)
-XML_ATTR_ACCESSOR_DOUBLE(phi1)
-XML_ATTR_ACCESSOR(double, deltaphi)
-
-XML_ATTR_ACCESSOR(double, length)
-XML_ATTR_ACCESSOR(double, width)
-XML_ATTR_ACCESSOR(double, height)
-XML_ATTR_ACCESSOR(double, depth)
-XML_ATTR_ACCESSOR(double, offset)
-XML_ATTR_ACCESSOR_DOUBLE(offset)
-XML_ATTR_ACCESSOR(double, crossing_angle)
-XML_ATTR_ACCESSOR(double, incoming_r)
-XML_ATTR_ACCESSOR(double, outgoing_r)
-XML_ATTR_ACCESSOR(double, phi_size_max)
-XML_ATTR_ACCESSOR(double, r_size)
-
-XML_ATTR_ACCESSOR(double, gap)
-XML_ATTR_ACCESSOR(double, z_length)
-XML_ATTR_ACCESSOR(double, zhalf)
-XML_ATTR_ACCESSOR(double, phi_tilt)
-XML_ATTR_ACCESSOR(int, nphi)
-XML_ATTR_ACCESSOR(double, rc)
-XML_ATTR_ACCESSOR(int, nz)
-XML_ATTR_ACCESSOR(double, zstart)
-XML_ATTR_ACCESSOR(double, start)
-XML_ATTR_ACCESSOR(double, end)
-XML_ATTR_ACCESSOR(double, thickness)
-XML_ATTR_ACCESSOR(int, numsides)
-XML_ATTR_ACCESSOR(int, nsides)
-XML_ATTR_ACCESSOR(int, nsides_inner)
-XML_ATTR_ACCESSOR(int, nsides_outer)
-XML_ATTR_ACCESSOR(int, number)
-XML_ATTR_ACCESSOR(int, repeat)
-XML_ATTR_ACCESSOR(bool, reflect)
-XML_ATTR_ACCESSOR_BOOL(reflect)
-
-XML_ATTR_ACCESSOR(int, nmodules)
-XML_ATTR_ACCESSOR(int, nModules)
-XML_ATTR_ACCESSOR(int, RowID)
-XML_ATTR_ACCESSOR(int, nPads)
-XML_ATTR_ACCESSOR(double, moduleHeight)
-XML_ATTR_ACCESSOR(double, moduleWidth)
-XML_ATTR_ACCESSOR(double, modulePosX)
-XML_ATTR_ACCESSOR(double, modulePosY)
-XML_ATTR_ACCESSOR(double, modulePitch)
-XML_ATTR_ACCESSOR(double, rowPitch)
-XML_ATTR_ACCESSOR(double, padPitch)
-XML_ATTR_ACCESSOR(double, rowHeight)
-XML_ATTR_ACCESSOR(double, inner_field)
-XML_ATTR_ACCESSOR(double, outer_field)
-XML_ATTR_ACCESSOR(int, type)
-
-XML_ATTR_ACCESSOR(bool, visible)
-XML_ATTR_ACCESSOR(bool, show_daughters)
-#if 0
-XML_ATTR_ACCESSOR(double,)
-XML_ATTR_ACCESSOR(double,)
-XML_ATTR_ACCESSOR(double,)
-XML_ATTR_ACCESSOR(double,)
-#endif
-
-
-string ChildValue::padType() const {
-  return childValue(pads,string);
-}
-
-string ChildValue::nameStr() const {
-  return childValue(name,string);
-}
-
-string ChildValue::refStr() const {
-  return childValue(ref,string);
-}
-
-string ChildValue::typeStr() const {
-  return childValue(type,string);
-}
-
-/// Access "value" attribute as STL string
-std::string ChildValue::valueStr() const   {
-  return childValue(value,string);
-}
-
-string ChildValue::regionStr() const {
-  childValueDefault(region,string,string());
-}
-
-string ChildValue::limitsStr() const {
-  childValueDefault(limits,string,string());
-}
-
-string ChildValue::visStr() const {
-  childValueDefault(vis,string,string());
-}
-
-string ChildValue::readoutStr() const {
-  childValueDefault(readout,string,string());
-}
-
-string ChildValue::moduleStr() const {
-  childValueDefault(module,string,string());
-}
diff --git a/DDCore/src/XML/XMLDimension.cpp b/DDCore/src/XML/XMLDimension.cpp
deleted file mode 100644
index c02dfd9f80b2ec2d8f861f2f3b19023148b3e2d6..0000000000000000000000000000000000000000
--- a/DDCore/src/XML/XMLDimension.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-//==========================================================================
-//  AIDA Detector description implementation for LCD
-//--------------------------------------------------------------------------
-// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
-// All rights reserved.
-//
-// For the licensing terms see $DD4hepINSTALL/LICENSE.
-// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
-//
-// Author     : M.Frank
-//
-//==========================================================================
-
-// Framework include files
-#include "XML/XMLDimension.inl"
-
-// Instantiate here the concrete implementations
-#include "XML/detail/Dimension.imp"
diff --git a/DDCore/src/XML/XMLDetector.cpp b/DDCore/src/XML/XMLHelpers.cpp
similarity index 82%
rename from DDCore/src/XML/XMLDetector.cpp
rename to DDCore/src/XML/XMLHelpers.cpp
index 339b624ae93338bbef0367f95cd3556ba5d0e13f..387911b463e50da5daf553e2b8f3ccfc092be782 100644
--- a/DDCore/src/XML/XMLDetector.cpp
+++ b/DDCore/src/XML/XMLHelpers.cpp
@@ -13,6 +13,10 @@
 
 // Framework include files
 #include "XML/XMLDetector.h"
+#include "XML/XMLDimension.inl"
+#include "XML/XMLChildValue.inl"
 
 using namespace DD4hep::XML;
 #include "XML/detail/Detector.imp"
+#include "XML/detail/Dimension.imp"
+#include "XML/detail/ChildValue.imp"