diff --git a/DDCMS/src/plugins/DDDefinitions2Objects.cpp b/DDCMS/src/plugins/DDDefinitions2Objects.cpp
index a8c4e48b3d5c79497722b13ee0e88c423855feef..7fff4a4b9c4a42967d50c8c458b17b1204efaeff 100644
--- a/DDCMS/src/plugins/DDDefinitions2Objects.cpp
+++ b/DDCMS/src/plugins/DDDefinitions2Objects.cpp
@@ -30,6 +30,7 @@
 #include "DDCMS/DDCMS.h"
 
 // Root/TGeo include files
+#include "TSystem.h"
 #include "TGeoManager.h"
 #include "TGeoMaterial.h"
 
@@ -636,10 +637,16 @@ template <> void Converter<box>::operator()(xml_h element) const {
 
 /// DD4hep specific Converter for <Include/> tags: process only the constants
 template <> void Converter<include_load>::operator()(xml_h element) const   {
-  xml::Document doc = xml::DocumentHandler().load(element, element.attr_value(_U(ref)));
-  string fname = xml::DocumentHandler::system_path(doc.root());
+  TString fname = element.attr<string>(_U(ref)).c_str();
+  const char* path = gSystem->Getenv("DDCMS_XML_PATH");
+  xml::Document doc;
+  if ( path && gSystem->FindFile(path,fname) )
+    doc = xml::DocumentHandler().load(fname.Data());
+  else
+    doc = xml::DocumentHandler().load(element, element.attr_value(_U(ref)));
+  fname = xml::DocumentHandler::system_path(doc.root());
   printout(_param<ParsingContext>()->debug_includes ? ALWAYS : DEBUG,
-           "DDCMS","+++ Processing the CMS detector description %s",fname.c_str());
+           "DDCMS","+++ Processing the CMS detector description %s",fname.Data());
   _option<resolve>()->includes.push_back(doc);
 }
 
diff --git a/DDCore/CMakeLists.txt b/DDCore/CMakeLists.txt
index be14e7eb044f0d514e37e5181a2e10c8ef47b3f7..0f322b2613c629332a7634e33f93c31dae7168de 100644
--- a/DDCore/CMakeLists.txt
+++ b/DDCore/CMakeLists.txt
@@ -12,16 +12,17 @@
 dd4hep_package(    DDCore
   USES             [ROOT REQUIRED COMPONENTS Geom GenVector]
                    DDParsers
-  OPTIONAL         XERCESC
+  #OPTIONAL         XERCESC
   INCLUDE_DIRS     include
-  INSTALL_INCLUDES include/DDSegmentation include/DD4hep include/XML include/JSON)
+  INSTALL_INCLUDES include/DDSegmentation include/DD4hep include/Parsers include/XML include/JSON)
 
 #---Generate ROOT dictionary------------------------------------------------------
 dd4hep_add_dictionary( G__DD4hep
   SOURCES include/ROOT/Warnings.h
+  include/XML/Helper.h
+#  include/JSON/Helper.h
   include/DD4hep/*.h
   include/DD4hep/detail/*.h
-  include/XML/*.h
   src/DetectorImp.h
   src/RootDictionary.h
   EXCLUDE include/DD4hep/DetFactoryHelper.h
diff --git a/DDCore/include/DD4hep/BasicGrammar.h b/DDCore/include/DD4hep/BasicGrammar.h
index 561a4c0cbd7070c5b761db80082e9544941870be..b28b1c6fd666bbccc9495cc77f2872ae6a4fb1b4 100644
--- a/DDCore/include/DD4hep/BasicGrammar.h
+++ b/DDCore/include/DD4hep/BasicGrammar.h
@@ -13,6 +13,9 @@
 #ifndef DD4HEP_DDG4_BASICGRAMMAR_H
 #define DD4HEP_DDG4_BASICGRAMMAR_H
 
+// Framework include files
+#include "DD4hep/config.h"
+
 // C/C++ include files
 #include <string>
 #include <typeinfo>
diff --git a/DDCore/include/DD4hep/ComponentProperties.h b/DDCore/include/DD4hep/ComponentProperties.h
index 1d6587e5fa04959be07e3705c7f52ad867484e23..797f23b100220faa4fff5f3b07e8e487c367374b 100644
--- a/DDCore/include/DD4hep/ComponentProperties.h
+++ b/DDCore/include/DD4hep/ComponentProperties.h
@@ -14,6 +14,7 @@
 #define DD4HEP_DDG4_COMPONENTPROPERTIES_H
 
 // Framework include files
+#include "DD4hep/config.h"
 
 // C/C++ include files
 #include <algorithm>
@@ -205,6 +206,10 @@ namespace dd4hep {
     size_t size()  const;
     /// Check for existence
     bool exists(const std::string& name) const;
+    /// Access to the property container
+    Properties& properties()  {  return m_properties;  }
+    /// Access to the property container
+    const Properties& properties()  const  {  return m_properties;  }
     /// Access property by name (CONST)
     const Property& property(const std::string& name) const;
     /// Access property by name
diff --git a/DDCore/include/DD4hep/DD4hepUnits.h b/DDCore/include/DD4hep/DD4hepUnits.h
index a89869a538367e5d710befcb9f048a9319f76796..53258ca2cf2605f65fb9c1b8c414c64c799f26bf 100644
--- a/DDCore/include/DD4hep/DD4hepUnits.h
+++ b/DDCore/include/DD4hep/DD4hepUnits.h
@@ -1 +1 @@
-#include "DDParsers/DD4hepUnits.h"
+#include "Evaluator/DD4hepUnits.h"
diff --git a/DDCore/include/DD4hep/Exceptions.h b/DDCore/include/DD4hep/Exceptions.h
index 50f11ba92c7e44d441d2400b2d6c749f31b4272e..d367779f9b1dea35d100f1d8f9ffb480d8f5c06a 100644
--- a/DDCore/include/DD4hep/Exceptions.h
+++ b/DDCore/include/DD4hep/Exceptions.h
@@ -7,47 +7,18 @@
 // For the licensing terms see $DD4hepINSTALL/LICENSE.
 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 //
-// Author     : M.Frank
+//  \author   Markus Frank
+//  \date     2016-02-02
+//  \version  1.0
 //
 //==========================================================================
-
 #ifndef DD4HEP_DDCORE_EXCEPTIONS_H
 #define DD4HEP_DDCORE_EXCEPTIONS_H
 
-// C/C++ include files
-#include <string>
-#include <typeinfo>
-#include <stdexcept>
-
-/// Namespace for the AIDA detector description toolkit
-namespace dd4hep {
-
-  /// Exception class to signal operations on unrelated classes
-  /**
-   *   \author  M.Frank
-   *   \date    13.08.2013
-   *   \ingroup DD4HEP
-   */
-  struct unrelated_type_error : public std::runtime_error {
-    static std::string msg(const std::type_info& typ1, const std::type_info& typ2, const std::string& text);
-    unrelated_type_error(const std::type_info& typ1, const std::type_info& typ2, const std::string& text = "")
-      : std::runtime_error(msg(typ1, typ2, text)) {
-    }
-  };
+// Forward declaring header for package configuration
 
-  /// Exception class to signal operations on unrelated types of values
-  /**
-   *   \author  M.Frank
-   *   \date    13.08.2013
-   *   \ingroup DD4HEP
-   */
-  struct unrelated_value_error : public std::runtime_error {
-    static std::string msg(const std::type_info& typ, const std::string& text);
-    unrelated_value_error(const std::type_info& typ, const std::string& text = "")
-      : std::runtime_error(msg(typ, text)) {
-    }
-  };
+#include "DD4hep/config.h"
+#include "Parsers/Exceptions.h"
 
-}      // End namespace dd4hep
+#endif // DD4HEP_DDCORE_EXCEPTIONS_H
 
-#endif  /* DD4HEP_DDCORE_EXCEPTIONS_H */
diff --git a/DDCore/include/DD4hep/Plugins.h b/DDCore/include/DD4hep/Plugins.h
index ceb6c62a9c183401e7664f33dbab35db875820b3..5c7acba74c070692a17f44c9b802d4bfaaa9cf22 100644
--- a/DDCore/include/DD4hep/Plugins.h
+++ b/DDCore/include/DD4hep/Plugins.h
@@ -13,6 +13,9 @@
 #ifndef DD4HEP_PLUGINS_H
 #define DD4HEP_PLUGINS_H
 
+// Framework include files
+#include "DD4hep/config.h"
+
 // ROOT include files
 #ifndef __CINT__
 #include <string>
diff --git a/DDCore/include/DD4hep/Primitives.h b/DDCore/include/DD4hep/Primitives.h
index 95900fa7df4ec808bda57f8db8b2d3c3f3f7dd31..42ef39cef10875bf11ff5dab0606152caca977a4 100644
--- a/DDCore/include/DD4hep/Primitives.h
+++ b/DDCore/include/DD4hep/Primitives.h
@@ -7,624 +7,17 @@
 // For the licensing terms see $DD4hepINSTALL/LICENSE.
 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 //
-// Author     : M.Frank
+//  \author   Markus Frank
+//  \date     2016-02-02
+//  \version  1.0
 //
 //==========================================================================
-#ifndef DD4HEP_DD4HEP_PRIMITIVES_H
-#define DD4HEP_DD4HEP_PRIMITIVES_H
+#ifndef DD4HEP_DDCORE_PRIMITIVES_H
+#define DD4HEP_DDCORE_PRIMITIVES_H
 
-// Framework include files
-#include "DD4hep/config.h"
-
-// C/C++ include files
-#include <map>
-#include <list>
-#include <vector>
-#include <string>
-#include <limits>
-
-#include <typeinfo>
-#include <algorithm>
-#include <stdexcept>
-
-/// Namespace for the AIDA detector description toolkit
-namespace dd4hep {
-
-  /// Namespace describing generic detector segmentations
-  namespace DDSegmentation  {
-    class BitFieldCoder;
-    class BitFieldElement;
-    /// Useful typedefs to differentiate cell IDs and volume IDs
-    typedef long long int CellID;
-    typedef long long int VolumeID;
-  }
-
-
-  // Put here global basic type definitions derived from primitive types of the dd4hep namespace
-#ifdef __CINT__
-  typedef DDSegmentation::CellID CellID;
-  typedef DDSegmentation::VolumeID VolumeID;
-  typedef DDSegmentation::BitFieldCoder BitFieldCoder;
-  typedef DDSegmentation::BitFieldElement BitFieldElement;
-#else
-  using DDSegmentation::CellID;
-  using DDSegmentation::VolumeID;
-  using DDSegmentation::BitFieldCoder;
-  using DDSegmentation::BitFieldElement;
-#endif
-
-  /// Specialized exception to be thrown if invalid handles are accessed
-  class invalid_handle_exception : public std::runtime_error  {
-  public:
-    /// Initializing constructor
-    invalid_handle_exception(const char* msg) : std::runtime_error(msg) {}
-    /// Initializing constructor
-    invalid_handle_exception(const std::string& msg) : std::runtime_error(msg) {}
-    /// Generic copy constructor
-    invalid_handle_exception(const std::exception& e) : std::runtime_error(e.what()) {}
-    /// Generic copy constructor
-    invalid_handle_exception(const invalid_handle_exception& e) : std::runtime_error(e.what()) {}
-    /// Default destructor of specialized exception
-    virtual ~invalid_handle_exception() = default;
-  };
-
-  /// Macro for deprecated functions. Prints once only. useage: deprecatedCall(__PRETTY_FUNCTION__);
-#define   DD4HEP_DEPRECATED_CALL(tag,replacement,func)                \
-  { static bool __dd4hep_first=true;                                  \
-    if ( __dd4hep_first ) { __dd4hep_first=false;                     \
-      dd4hep::printout(dd4hep::WARNING,tag,                           \
-                       "Deprecated function: '%s' use '%s' instead.", \
-                       func,replacement);                             \
-    }}
-  
-  /// ABI information about type names
-  std::string typeName(const std::type_info& type);
-  /// Check type infos for equivalence (dynamic casts) using ABI information
-  void typeinfoCheck(const std::type_info& typ1, const std::type_info& typ2, const std::string& text = "");
-  /// Throw exception when handles are check for validity
-  void invalidHandleError(const std::type_info& type);
-  /// Throw exception when handles are badly assigned
-  void invalidHandleAssignmentError(const std::type_info& from, const std::type_info& to);
-
-  /// Throw exception when handles are check for validity
-  template <typename T> void invalidHandleError()  {
-    invalidHandleError(typeid(T));
-  }
-
-  /// Throw exception when handles are check for validity
-  void notImplemented(const std::string& msg);
-
-  /// Class to perform dynamic casts using unknown pointers.
-  /** @class ComponentCast Primitives.h dd4hep/Primitives.h
-   *
-   *  It is mandatory that the pointers referred do actually
-   *  support the asked functionalty.
-   *  Miracles also I cannot do.....
-   *
-   *   @author  M.Frank
-   *   @date    13.08.2013
-   */
-  class ComponentCast {
-  public:
-    typedef void  (*destroy_t)(void*);
-    typedef void* (*cast_t)(const void*);
-#ifdef __CINT__
-    const std::type_info* type;
-#else
-    const std::type_info& type;
-#endif
-    const void* abi_class;
-    destroy_t   destroy;
-    cast_t      cast;
-
-  private:
-    /// Initializing Constructor
-    ComponentCast(const std::type_info& t, destroy_t d, cast_t c);
-    /// Defautl destructor
-    virtual ~ComponentCast();
-
-  public:
-    template <typename TYPE> static void _destroy(void* arg)  {
-      TYPE* ptr = (TYPE*)arg;
-      if (ptr)    delete ptr;
-    }
-    template <typename TYPE> static void* _cast(const void* arg)  {
-      TYPE* ptr = (TYPE*)arg;
-      ptr = dynamic_cast<TYPE*>(ptr);
-      return (void*)ptr;
-    }
-    template <typename TYPE> static ComponentCast& instance() {
-      static ComponentCast c(typeid(TYPE),_destroy<TYPE>,_cast<TYPE>);
-      return c;
-    }
-
-    /// Apply cast using typeinfo instead of dynamic_cast
-    void* apply_dynCast(const ComponentCast& to, const void* ptr) const;
-    /// Apply cast using typeinfo instead of dynamic_cast
-    void* apply_upCast(const ComponentCast& to, const void* ptr) const;
-    /// Apply cast using typeinfo instead of dynamic_cast
-    void* apply_downCast(const ComponentCast& to, const void* ptr) const;
-  };
-
-  /// Convert volumeID to string format (016X)
-  std::string volumeID(VolumeID vid);
-
-  /// DD4hep internal namespace declaration for utilities and implementation details
-  namespace detail  {
-    
-    /// We need it so often: one-at-time 64 bit hash function
-    unsigned long long int hash64(const char* key);
-    unsigned long long int hash64(const std::string& key);
-    template <typename T> unsigned long long int typeHash64()   {
-      static unsigned long long int code = hash64(typeid(T).name());
-      return code;
-    }
-  
-    /// We need it so often: one-at-time 32 bit hash function
-    inline unsigned int hash32(const char* key) {
-      unsigned int hash = 0;
-      const char* k = key;
-      for (; *k; k++) {
-        hash += *k;
-        hash += (hash << 10);
-        hash ^= (hash >> 6);
-      }
-      hash += (hash << 3);
-      hash ^= (hash >> 11); hash += (hash << 15);
-      return hash;
-    }
-    inline unsigned int hash32(const std::string& key) {
-      return hash32(key.c_str());
-    }
-
-    /// Convert date into epoch time (seconds since 1970)
-    long int makeTime(int year, int month, int day,
-                      int hour=0, int minutes=0, int seconds=0);
-  
-    /// Convert date into epoch time (seconds since 1970)
-    long int makeTime(const std::string& date, const char* fmt="%d-%m-%Y %H:%M:%S");
-  
-
-    /// A bit of support for handling and printing primitives
-    /**
-     *
-     * \author  M.Frank
-     * \version 1.0
-     * \ingroup DD4HEP
-     */
-    template<typename T> struct Primitive {
-    public:
-      /// Type decribed by th class
-      typedef T value_t;
-      /// Definition of the vector type
-      typedef std::vector<value_t>              vector_t;
-
-      /// Definition of the short integer mapped type
-      typedef std::pair<short,value_t>          short_pair_t;
-      /// Definition of the unsigned short integer mapped type
-      typedef std::pair<unsigned short,value_t> ushort_pair_t;
-      /// Definition of the integer mapped type
-      typedef std::pair<int,value_t>            int_pair_t;
-      /// Definition of the unsigned integer mapped type
-      typedef std::pair<unsigned int,value_t>   uint_pair_t;
-      /// Definition of the long integer mapped type
-      typedef std::pair<long,value_t>           long_pair_t;
-      /// Definition of the unsigned long integer mapped type
-      typedef std::pair<unsigned long,value_t>  ulong_pair_t;
-      /// Definition of the size_t mapped type
-      typedef std::pair<size_t,value_t>         size_pair_t;
-      /// Definition of the string mapped type
-      typedef std::pair<std::string,value_t>    string_pair_t;
-
-      /// Definition of the short integer mapped type
-      typedef std::map<short,value_t>           short_map_t;
-      /// Definition of the unsigned short integer mapped type
-      typedef std::map<unsigned short,value_t>  ushort_map_t;
-      /// Definition of the integer mapped type
-      typedef std::map<int,value_t>             int_map_t;
-      /// Definition of the unsigned integer mapped type
-      typedef std::map<unsigned int,value_t>    uint_map_t;
-      /// Definition of the long integer mapped type
-      typedef std::map<long,value_t>            long_map_t;
-      /// Definition of the unsigned long integer mapped type
-      typedef std::map<unsigned long,value_t>   ulong_map_t;
-      /// Definition of the size_t mapped type
-      typedef std::map<size_t,value_t>          size_map_t;
-      /// Definition of the string mapped type
-      typedef std::map<std::string,value_t>     string_map_t;
-      /// Definition of the limits
-      typedef std::numeric_limits<value_t>      limits;
-
-      /// Access to default printf format
-      static const char* default_format(); 
-      /// Access to the specific printf format. May be overloaded by users
-      static const char* format()          { return default_format();     }
-      /// Access to the RTTI data type
-      static const std::type_info& type()  { return typeid(value_t);      }
-      /// Access to the RTTI data type
-      static std::string type_name()       { return typeName(type());     }
-      /// Auto conversion to string using the default format
-      static std::string toString(T value);
-      /// Get typed null pointer (for template selctions)
-      static const value_t* null_pointer() { return (value_t*)0;          }
-    };
-
-    /// Safe cast mechanism using pre-linked conversions.
-    /**
-     *
-     * \author  M.Frank
-     * \version 1.0
-     * \ingroup DD4HEP
-     */
-#ifdef DD4HEP_USE_SAFE_CAST
-    template <typename TO> class safe_cast {
-    public:
-      template <typename FROM> static TO* cast(FROM* from);
-      template <typename FROM> static TO* cast(const FROM* from);
-      template <typename FROM> static TO* cast_non_null(FROM* from);
-      template <typename FROM> static TO* cast_non_null(const FROM* from);
-    };
-#else
-    template <typename TO> class safe_cast {
-    public:
-      static TO* cast(TO* from);
-      static TO* cast_non_null(TO* from);
-      template <typename FROM> static TO* cast(FROM* from)                 { return cast((TO*)from; }
-      template <typename FROM> static TO* cast(const FROM* from)           { return cast((TO*)from; }
-      template <typename FROM> static TO* cast_non_null(FROM* from)        { return cast_non_null((TO*)from; }
-      template <typename FROM> static TO* cast_non_null(const FROM* from)  { return cast_non_null((TO*)from; }
-    };
-#endif
-    
-    /// Operator to clear containers when out of scope
-    /**
-     *  \author  M.Frank
-     *  \version 1.0
-     *  \ingroup DD4HEP_CORE
-     */
-    template<typename C> struct ClearOnReturn {
-      C& container;
-      ClearOnReturn(C& c) : container(c) {  }
-      ~ClearOnReturn() { container.clear(); }
-    };
-
-    /// Helper to copy objects.
-    template <typename T> inline void copyObject(void* target,const void* source)  {
-      const T* src = (const T*)source;
-      ::new(target) T(*src);
-    }
-    /// Helper to destruct objects. Note: The memory is NOT released!
-    template <typename T> inline void destructObject(T* ptr) {
-      ptr->~T();
-    }
-    /// Helper to delete objects from heap and reset the pointer. Saves many many lines of code
-    template <typename T> inline void deletePtr(T*& ptr) {
-      if (0 != ptr)
-        delete ptr;
-      ptr = 0;
-    }
-    /// Helper to delete objects from heap and reset the pointer. Saves many many lines of code
-    template <typename T> inline void deleteObject(T* ptr) {
-      if (0 != ptr)
-        delete ptr;
-    }
-    /// Helper to delete objects from heap and reset the pointer
-    template <typename T> inline void destroyObject(T*& ptr) {
-      deletePtr(ptr);
-    }
-    /// Functor to delete objects from heap and reset the pointer
-    template <typename T> class DestroyObject {
-    public:
-      void operator()(T& ptr) const {
-        destroyObject(ptr);
-      }
-    };
-
-    /// Operator to select second element of a pair
-    template <typename T> class Select2nd  {
-    public:
-      typedef T arg_t;
-      typedef typename T::second_type result_t;
-      /// Operator function
-      const result_t& operator()(const arg_t &arg) const { return arg.second; }
-    };
-    /// Generator to create Operator to select value elements of a map
-    template <typename T> Select2nd<typename T::value_type> select2nd(const T&)
-    { return Select2nd<typename T::value_type>(); }
-
-    /// Operator to select the first element of a pair
-    template <typename T> class Select1st  {
-    public:
-      typedef T arg_t;
-      typedef typename T::first_type result_t;
-      /// Operator function
-      const result_t& operator()(const arg_t &arg) const { return arg.first; }
-    };
-    /// Generator to create Operator to select key values of a map
-    template <typename T> Select1st<typename T::value_type> select1st(const T&)
-    { return Select1st<typename T::value_type>(); }
-
-
-    /// map Functor to delete objects from heap
-    template <typename M> class DestroyObjects {
-    public:
-      M& object;
-      DestroyObjects(M& obj) : object(obj) {                    }
-      void operator()(std::pair<typename M::key_type, typename M::mapped_type> arg) const
-      {  DestroyObject<typename M::mapped_type>()(arg.second);    }
-      void operator()() const {
-        if ( !object.empty() ) for_each(object.begin(),object.end(),(*this));
-        object.clear();
-      }
-    };
-    template <typename M> void destroyObjects(M& obj)
-    {  DestroyObjects<M> del(obj); del();                      }
-    template <typename M> DestroyObjects<M> destroy2nd(M& obj)
-    {  DestroyObjects<M> del(obj); del();                      }
+// Forward declaring header for package configuration
 
-    /// map Functor to delete objects from heap
-    template <typename M> class DestroyFirst {
-    public:
-      M& object;
-      DestroyFirst(M& obj) : object(obj) {   }
-      void operator()(std::pair<typename M::key_type, typename M::mapped_type> arg) const
-      {  DestroyObject<typename M::key_type>()(arg.first);     }
-      void operator()() const {
-        if ( !object.empty() ) for_each(object.begin(),object.end(),(*this));
-        object.clear();
-      }
-    };
-    template <typename M> void destroyFirst(M& arg)
-    {   DestroyFirst<M> del(arg); del();           }
-    template <typename M> void destroy1st(M& arg)
-    {   DestroyFirst<M> del(arg); del();           }
-
-    /// Helper to delete objects from heap and reset the pointer. Saves many many lines of code
-    template <typename T> inline void releasePtr(T& arg) {
-      if (0 != arg)
-        arg->release();
-      arg = 0;
-    }
-
-    /// Functor to release objects from heap and reset the pointer
-    template <typename T> class ReleaseObject {
-    public:
-      void operator()(T& arg) const {
-        releasePtr(arg);
-      }
-    };
-    /// Map Functor to release objects from heap
-    template <typename M> class ReleaseObjects {
-    public:
-      M& object;
-      ReleaseObjects(M& arg) : object(arg) {    }
-      void operator()(std::pair<typename M::key_type, typename M::mapped_type> arg) const
-      {  ReleaseObject<typename M::mapped_type>()(arg.second);    }
-      void operator()() const {
-        if ( !object.empty() ) for_each(object.begin(),object.end(),(*this));
-        object.clear();
-      }
-    };
-    template <typename M> ReleaseObject<typename M::value_type> releaseObject(M&) {
-      return ReleaseObject<typename M::value_type>();
-    }
-    template <typename M> void releaseObjects(M& arg) {
-      ReleaseObjects<M> rel(arg); rel();
-    }
-    template <typename M> void release2nd(M& arg) {
-      ReleaseObjects<M> rel(arg); rel();
-    }
-
-    /// Functor to delete objects from heap and reset the pointer
-    template <typename T> class ReferenceObject {
-    public:
-      typedef T arg_t;
-      T operator()(T arg) const {
-        if ( arg ) arg->addRef();
-        return arg;
-      }
-    };
-    /// Functor to delete objects from heap and reset the pointer
-    template <typename M> class ReferenceObjects {
-    public:
-      typedef typename M::second_type result_t;
-      result_t operator()(const M& arg) const {
-        return ReferenceObject<result_t>()(arg.second);
-      }
-    };
-    template <typename M> ReferenceObject<M> referenceObject(M&) {
-      return ReferenceObject<typename M::value_type>();
-    }
-    template <typename M> ReferenceObjects<typename M::value_type> reference2nd(M&) {
-      return ReferenceObjects<typename M::value_type>();
-    }
-
-    /// Member function call-functor with no arguments
-    template <typename R, typename T> struct ApplyMemFunc {
-      typedef R (T::*memfunc_t)();
-      memfunc_t func;
-      ApplyMemFunc(memfunc_t f) : func(f)  {}
-      void operator()(T* arg)  const {  if (arg) { (arg->*func)(); } }
-    };
-
-    /// Member function call-functor with 1 argument
-    template <typename R, typename T, typename A1> struct ApplyMemFunc1 {
-      typedef R (T::*memfunc_t)(A1 a1);
-      memfunc_t func;
-      A1& arg1;
-      ApplyMemFunc1(memfunc_t f, A1& a1) : func(f), arg1(a1)  {}
-      void operator()(T* arg)  const {  if ( arg ) { (arg->*func)(arg1); } }
-    };
-
-    /// Member function call-functor with 2 arguments
-    template <typename R, typename T, typename A1, typename A2> struct ApplyMemFunc2 {
-      typedef R (T::*memfunc_t)(A1 a1, A2 a2);
-      memfunc_t func;
-      A1& arg1;
-      A2& arg2;
-      ApplyMemFunc2(memfunc_t f, A1& a1, A2& a2) : func(f), arg1(a1), arg2(a2)  {}
-      void operator()( T* arg)  const {  if ( arg ) { (arg->*func)(arg1, arg2); } }
-    };
-
-    /// Member function call-functor with no arguments (const version)
-    template <typename R, typename T> struct ApplyMemFuncConst {
-      typedef R (T::*memfunc_t)() const;
-      memfunc_t func;
-      ApplyMemFuncConst(memfunc_t f) : func(f)  {}
-      void operator()(const T* arg)  const {  if ( arg ) { (arg->*func)(); } }
-    };
-
-    /// Member function call-functor with 1 argument (const version)
-    template <typename R, typename T, typename A1> struct ApplyMemFuncConst1 {
-      typedef R (T::*memfunc_t)(A1 a1) const;
-      memfunc_t func;
-      A1& arg1;
-      ApplyMemFuncConst1(memfunc_t f, A1& a1) : func(f), arg1(a1)  {}
-      void operator()(const T* arg)  const {  if ( arg ) { (arg->*func)(arg1); } }
-    };
-
-    /// Member function call-functor with 2 arguments (const version)
-    template <typename R, typename T, typename A1, typename A2> struct ApplyMemFuncConst2 {
-      typedef R (T::*memfunc_t)(A1 a1, A2 a2) const;
-      memfunc_t func;
-      A1& arg1;
-      A2& arg2;
-      ApplyMemFuncConst2(memfunc_t f, A1& a1, A2& a2) : func(f), arg1(a1), arg2(a2)  {}
-      void operator()(const T* arg)  const {  if ( arg ) { (arg->*func)(arg1, arg2); } }
-    };
-
-    template <typename C, typename R, typename T>
-    void call_member_func(C& object, R (T::*pmf)())
-    {   std::for_each(object.begin(),object.end(),ApplyMemFunc<R,T>(pmf));    }
-
-    template <typename C, typename R, typename T>
-    void call_member_func(C& object, R (T::*pmf)() const)
-    {   std::for_each(object.begin(),object.end(),ApplyMemFuncConst<R,T>(pmf));    }
-
-    template <typename C, typename R, typename T, typename A1>
-    void call_member_func(C& object, R (T::*pmf)(A1 a1), A1 a1)
-    {   std::for_each(object.begin(),object.end(),ApplyMemFunc1<R,T,A1>(pmf,a1));    }
-  
-    template <typename C, typename R, typename T, typename A1>
-    void call_member_func(C& object, R (T::*pmf)(A1 a1) const, A1 a1)
-    {   std::for_each(object.begin(),object.end(),ApplyMemFuncConst1<R,T,A1>(pmf,a1));    }
-  
-  
-    template <typename C, typename R, typename T, typename A1, typename A2>
-    void call_member_func(C& object, R (T::*pmf)(A1 a1,A2 a2), A1 a1, A2 a2)
-    {   std::for_each(object.begin(),object.end(),ApplyMemFunc2<R,T,A1,A2>(pmf,a1,a2));    }
-  
-    template <typename C, typename R, typename T, typename A1, typename A2>
-    void call_member_func(C& object, R (T::*pmf)(A1 a1,A2 a2) const, A1 a1, A2 a2)
-    {   std::for_each(object.begin(),object.end(),ApplyMemFuncConst2<R,T,A1,A2>(pmf,a1,a2));    }
-  
-
-    /// Generic map Functor to act on first element (key)
-    template <typename M, typename FCN> class Apply1rst {
-    public:
-      const FCN& func;
-      Apply1rst(const FCN& f) : func(f) {    }
-      void operator()(std::pair<typename M::key_type const, typename M::mapped_type>& arg) const
-      {   (func)(arg.first);    }
-      void operator()(const std::pair<typename M::key_type const, typename M::mapped_type>& arg) const
-      {   (func)(arg.first);    }
-    };
-
-    template <typename C, typename FCN> Apply1rst<C,FCN> apply__1rst_value(C&,const FCN& func)
-    {  return Apply1rst<C,FCN>(func);  }
-
-    template <typename C, typename FCN> void apply1rst(C& object,const FCN& func)
-    {  std::for_each(object.begin(),object.end(),apply__1rst_value(object,func));  }
-
-    template <typename C, typename R, typename T>
-    void apply1rst(C& object, R (T::*pmf)())  
-    {  std::for_each(object.begin(),object.end(),apply__1rst_value(object,ApplyMemFunc<R,T>(pmf)));  }
-
-    template <typename C, typename R, typename T, typename A1>
-    void apply1rst(C object, R (T::*pmf)(A1 a1), A1 a1)
-    {  std::for_each(object.begin(),object.end(),apply__1rst_value(object,ApplyMemFunc1<R,T,A1>(pmf,a1)));  }
-
-    template <typename C, typename R, typename T>
-    void apply1rst(C& object, R (T::*pmf)() const)  
-    {  std::for_each(object.begin(),object.end(),apply__1rst_value(object,ApplyMemFuncConst<R,T>(pmf)));  }
-
-    template <typename C, typename R, typename T, typename A1>
-    void apply1rst(C object, R (T::*pmf)(A1 a1) const, A1 a1)
-    {  std::for_each(object.begin(),object.end(),apply__1rst_value(object,ApplyMemFuncConst1<R,T,A1>(pmf,a1)));  }
-
-    /// Generic map Functor to act on second element (mapped type)
-    template <typename M, typename FCN> class Apply2nd {
-    public:
-      const FCN& func;
-      Apply2nd(const FCN& f) : func(f) {    }
-      void operator()(std::pair<typename M::key_type const, typename M::mapped_type>& arg) const
-      {   (func)(arg.second);    }
-      void operator()(const std::pair<typename M::key_type const, typename M::mapped_type>& arg) const
-      {   (func)(arg.second);    }
-    };
-
-    template <typename C, typename FCN> Apply2nd<C,FCN> apply__2nd_value(C&,const FCN& func)
-    {  return Apply2nd<C,FCN>(func);  }
-
-    template <typename C, typename FCN> void apply2nd(C& object,const FCN& func)
-    {  std::for_each(object.begin(),object.end(),apply__2nd_value(object,func));  }
-
-    template <typename C, typename R, typename T>
-    void apply2nd(C& object, R (T::*pmf)())  
-    {  std::for_each(object.begin(),object.end(),apply__2nd_value(object,ApplyMemFunc<R,T>(pmf)));  }
-
-    template <typename C, typename R, typename T, typename A1>
-    void apply2nd(C object, R (T::*pmf)(A1 a1), A1 a1)
-    {  std::for_each(object.begin(),object.end(),apply__2nd_value(object,ApplyMemFunc1<R,T,A1>(pmf,a1)));  }
-
-    template <typename C, typename R, typename T>
-    void apply2nd(C& object, R (T::*pmf)() const)  
-    {  std::for_each(object.begin(),object.end(),apply__2nd_value(object,ApplyMemFuncConst<R,T>(pmf)));  }
-
-    template <typename C, typename R, typename T, typename A1>
-    void apply2nd(C object, R (T::*pmf)(A1 a1) const, A1 a1)
-    {  std::for_each(object.begin(),object.end(),apply__2nd_value(object,ApplyMemFuncConst1<R,T,A1>(pmf,a1)));  }
-
-    /// Data structure to manipulate a bitmask held by reference and represented by an integer
-    /**
-     * @author  M.Frank
-     * @version 1.0
-     */
-    template <typename T> class ReferenceBitMask  {
-    public:
-      /// Reference to the data
-      T& mask;
-      /// Standard constructor
-      ReferenceBitMask(T& arg);
-      T value() const  {
-        return mask;
-      }
-      void set(const T& arg)   {
-        mask |= arg;
-      }
-      void clear(const T& arg)   {
-        mask &= ~arg;
-      }
-      void clear()   {
-        mask = 0;
-      }
-      bool isSet(const T& arg)  const {
-        return (mask&arg) == arg;
-      }
-      bool anySet(const T& arg)  const {
-        return (mask&arg) != 0;
-      }
-      bool testBit(int bit) const  {
-        T arg = T(1)<<bit;
-        return isSet(arg);
-      }
-      bool isNull() const {
-        return mask == 0;
-      }
-    };
-    /// Standard constructor
-    template <typename T>  ReferenceBitMask<T>::ReferenceBitMask(T& arg) : mask(arg) {}
+#include "DD4hep/config.h"
+#include "Parsers/Primitives.h"
 
-  }    // End namespace detail
-}      // End namespace dd4hep
-#endif // DD4HEP_DD4HEP_PRIMITIVES_H
+#endif // DD4HEP_DDCORE_PRIMITIVES_H
diff --git a/DDCore/include/DD4hep/Printout.h b/DDCore/include/DD4hep/Printout.h
index 2dd9afd8a8e0b63835baa8742ee2572c9fcf6c64..29caac569e517afbefa8b70ca4934c6180127fe2 100644
--- a/DDCore/include/DD4hep/Printout.h
+++ b/DDCore/include/DD4hep/Printout.h
@@ -7,312 +7,17 @@
 // For the licensing terms see $DD4hepINSTALL/LICENSE.
 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 //
-// Author     : M.Frank
+//  \author   Markus Frank
+//  \date     2016-02-02
+//  \version  1.0
 //
 //==========================================================================
-#ifndef DD4HEP_PRINTOUT_H
-#define DD4HEP_PRINTOUT_H
+#ifndef DD4HEP_DDCORE_PRINTOUT_H
+#define DD4HEP_DDCORE_PRINTOUT_H
 
-// Framework include files
+// Forward declaring header for package configuration
 
-// C/C++ include files
-#include <cstdio>
-#include <cstdlib>
-#include <cstdarg>
-#include <map>
-#include <string>
-#include <sstream>
-#include <iostream>
+#include "DD4hep/config.h"
+#include "Parsers/Printout.h"
 
-/// Forward declarations
-class TNamed;
-
-/// Namespace for the AIDA detector description toolkit
-namespace dd4hep {
-
-  // Forward declarations
-  class Detector;
-  class NamedObject;
-  template <typename T> class Handle;
-
-  enum PrintLevel {
-    NOLOG    = 0,
-    VERBOSE  = 1,
-    DEBUG    = 2,
-    INFO     = 3,
-    WARNING  = 4,
-    ERROR    = 5,
-    FATAL    = 6,
-    ALWAYS   = 7
-  };
-
-#ifndef __CINT__
-  typedef size_t (*output_function1_t)(void*, PrintLevel severity, const char*, const char*);
-  typedef size_t (*output_function2_t)(void*, PrintLevel severity, const char*, const char*, va_list& args);
-
-  /// Helper function to serialize argument list to a single string
-  /**
-   *  @arg argc       [int,read-only]      Number of arguments.
-   *  @arg argv       [char**,read-only]   Argument strings
-   *  @return String containing the concatenated arguments
-   */
-  std::string arguments(int argc, char** argv);
-  
-  /// Calls the display action with a given severity level
-  /**
-   *  @arg severity   [int,read-only]      Display severity flag (see enum)
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg str        [stringstream, RW]   string stream containing data to be printed.
-   *                                       Object is reset after use.
-   *  @return Status code indicating success or failure
-   */
-  int printout(PrintLevel severity, const char* src, std::stringstream& str);
-
-  /// Calls the display action with a given severity level
-  /**
-   *  @arg severity   [int,read-only]      Display severity flag (see enum)
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg str        [stringstream, RW]   string stream containing data to be printed.
-   *                                       Object is reset after use.
-   *  @return Status code indicating success or failure
-   */
-  int printout(PrintLevel severity, const std::string& src, std::stringstream& str);
-
-  /// Calls the display action with a given severity level
-  /**
-   *  @arg severity   [int,read-only]      Display severity flag (see enum)
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @return Status code indicating success or failure
-   */
-  int printout(PrintLevel severity, const char* src, const char* fmt, ...);
-
-  /// Calls the display action with a given severity level
-  /**
-   *  @arg severity   [int,read-only]      Display severity flag (see enum)
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @return Status code indicating success or failure
-   */
-  int printout(PrintLevel severity, const std::string& src, const char* fmt, ...);
-
-  /// Calls the display action with a given severity level
-  /**
-   *  @arg severity   [int,read-only]      Display severity flag (see enum)
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @return Status code indicating success or failure
-   */
-  int printout(PrintLevel severity, const std::string& src, const std::string& fmt, ...);
-
-  /// Calls the display action with a given severity level
-  /**
-   *  @arg severity   [int,read-only]      Display severity flag (see enum)
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @return Status code indicating success or failure
-   */
-  int printout(PrintLevel severity, const char* src, const std::string& fmt, ...);
-
-  /// Calls the display action with a given severity level
-  /**
-   *  @arg severity   [int,read-only]      Display severity flag (see enum)
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
-   *  @return Status code indicating success or failure
-   */
-  int printout(PrintLevel severity, const char* src, const char* fmt, va_list& args);
-
-  /// Calls the display action with a given severity level
-  /**
-   *  @arg severity   [int,read-only]      Display severity flag (see enum)
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
-   *  @return Status code indicating success or failure
-   */
-  int printout(PrintLevel severity, const std::string& src, const char* fmt, va_list& args);
-
-  /// Calls the display action with a given severity level
-  /**
-   *  @arg severity   [int,read-only]      Display severity flag (see enum)
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
-   *  @return Status code indicating success or failure
-   */
-  int printout(PrintLevel severity, const std::string& src, const std::string& fmt, va_list& args);
-
-  /// Calls the display action with a given severity level
-  /**
-   *  @arg severity   [int,read-only]      Display severity flag (see enum)
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
-   *  @return Status code indicating success or failure
-   */
-  int printout(PrintLevel severity, const char* src, const std::string& fmt, va_list& args);
-
-  /// Calls the display action with ERROR and throws an std::runtime_error exception
-  /**
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @return Status code indicating success or failure
-   */
-  int except(const std::string& src, const std::string& fmt, ...);
-
-  /// Calls the display action with ERROR and throws an std::runtime_error exception
-  /**
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @return Status code indicating success or failure
-   */
-  int except(const char* src, const char* fmt, ...);
-
-  /// Calls the display action with ERROR and throws an std::runtime_error exception
-  /**
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
-   *  @return Status code indicating success or failure
-   */
-  int except(const std::string& src, const std::string& fmt, va_list& args);
-
-  /// Calls the display action with ERROR and throws an std::runtime_error exception
-  /**
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
-   *  @return Status code indicating success or failure
-   */
-  int except(const char* src, const char* fmt, va_list& args);
-
-  /// Build formatted string
-  /*
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @return Status code indicating success or failure
-   */
-  std::string format(const std::string& src, const std::string& fmt, ...);
-
-  /// Build exception string
-  /**
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @return Status code indicating success or failure
-   */
-  std::string format(const char* src, const char* fmt, ...);
-
-  /// Build formatted string
-  /**
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
-   *  @return Status code indicating success or failure
-   */
-  std::string format(const std::string& src, const std::string& fmt, va_list& args);
-
-  /// Build formatted string
-  /**
-   *  @arg src        [string,read-only]   Information source (component, etc.)
-   *  @arg fmt        [string,read-only]   Format string for ellipsis args
-   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
-   *  @return Status code indicating success or failure
-   */
-  std::string format(const char* src, const char* fmt, va_list& args);
-
-  /// Customize printer function
-  void setPrinter(void* print_arg, output_function1_t fcn);
-
-  /// Customize printer function
-  void setPrinter2(void* print_arg, output_function2_t fcn);
-
-#endif // __CINT__
-
-  /// Set new printout format for the 3 fields: source-level-message. All 3 are strings
-  std::string setPrintFormat(const std::string& new_format);
-
-  /// Set new print level. Returns the old print level
-  PrintLevel setPrintLevel(PrintLevel new_level);
-
-  /// Access the current printer level
-  PrintLevel printLevel();
-
-  /// Translate the printer level from string to value
-  PrintLevel printLevel(const char* value);
-
-  /// Translate the printer level from string to value
-  PrintLevel printLevel(const std::string& value);
-
-  /// Check if this print level would result in some output
-  bool isActivePrintLevel(int severity);
-
-  /// Helper class template to implement ASCII object dumps
-  /** @class Printer Conversions.h  dd4hep/compact/Conversions.h
-   *
-   *  Small helper class to print objects
-   *
-   *  @author   M.Frank
-   *  @version  1.0
-   */
-  template <typename T> struct Printer {
-    /// Reference to the detector description object
-    const Detector* description;
-    /// Reference to the output stream object, the Printer object should write
-    std::ostream& os;
-    /// Optional text prefix when formatting the output
-    std::string prefix;
-    /// Initializing constructor of the functor
-    Printer(const Detector* l, std::ostream& stream, const std::string& p = "")
-      : description(l), os(stream), prefix(p) {
-    }
-    /// Callback operator to be specialized depending on the element type
-    void operator()(const T& value) const;
-  };
-
-  template <typename T> inline std::ostream& print(const T& object, std::ostream& os = std::cout,
-                                                   const std::string& indent = "") {
-    Printer<T>(0, os, indent)(object);
-    return os;
-  }
-
-  /// Helper class template to implement ASCII dumps of named objects maps
-  /** @class PrintMap Conversions.h  dd4hep/compact/Conversions.h
-   *
-   *  Small helper class to print maps of objects
-   *
-   *  @author   M.Frank
-   *  @version  1.0
-   */
-  template <typename T> struct PrintMap {
-    typedef T item_type;
-    typedef const std::map<std::string, Handle<NamedObject> > cont_type;
-
-    /// Reference to the detector description object
-    const Detector* description;
-    /// Reference to the output stream object, the Printer object should write
-    std::ostream& os;
-    /// Optional text prefix when formatting the output
-    std::string text;
-    /// Reference to the container data of the map.
-    cont_type& cont;
-    /// Initializing constructor of the functor
-    PrintMap(const Detector* l, std::ostream& stream, cont_type& c, const std::string& t = "")
-      : description(l), os(stream), text(t), cont(c) {
-    }
-    /// Callback operator to be specialized depending on the element type
-    void operator()() const;
-  };
-
-  /// Helper function to print booleans in format YES/NO
-  inline const char* yes_no(bool value) {
-    return value ? "YES" : "NO ";
-  }
-  /// Helper function to print booleans in format true/false
-  inline const char* true_false(bool value) {
-    return value ? "true " : "false";
-  }
-
-} /* End namespace dd4hep      */
-#endif    /* DD4HEP_PRINTOUT_H         */
+#endif // DD4HEP_DDCORE_PRINTOUT_H
diff --git a/DDCore/include/DD4hep/config.h b/DDCore/include/DD4hep/config.h
index 87e602a26d490d2fc4b1cd4a879d00ef1d6b4e4f..6939acabf62a1f84753e29f8c144cf3cb86391c6 100644
--- a/DDCore/include/DD4hep/config.h
+++ b/DDCore/include/DD4hep/config.h
@@ -10,9 +10,14 @@
 // Author     : M.Frank
 //
 //==========================================================================
-#ifndef DD4HEP_CONFIG_H
-#define DD4HEP_CONFIG_H
+//
+// Setup XML parsing for the use of Apache Xerces-C and TiXml
+//
+//==========================================================================
+#ifndef DD4HEP_DDCORE_CONFIG_H
+#define DD4HEP_DDCORE_CONFIG_H
 
+#include "Parsers/config.h"
 #define DD4HEP_INSTANCE_COUNTS 1
 #define DD4HEP_USE_SAFE_CAST   1
 
@@ -24,12 +29,4 @@
 #define DECREMENT_COUNTER
 #endif
 
-/// Namespace for the AIDA detector description toolkit
-namespace dd4hep {
-
-  /// Namespace for implementation details of the AIDA detector description toolkit
-  namespace detail {
-
-  } /* End namespace detail  */
-} /*   End namespace dd4hep    */
-#endif    /* DD4HEP_CONFIG_H         */
+#endif // DD4HEP_DDCORE_CONFIG_H
diff --git a/DDCore/include/DD4hep/detail/BasicGrammar_inl.h b/DDCore/include/DD4hep/detail/BasicGrammar_inl.h
index 2de0631dc556cda94b15a81a1de3f8892410e293..47d8d834723850196a2d0d11073042a3b68b9d92 100644
--- a/DDCore/include/DD4hep/detail/BasicGrammar_inl.h
+++ b/DDCore/include/DD4hep/detail/BasicGrammar_inl.h
@@ -22,8 +22,12 @@
 #define DD4HEP_DDCORE_BASICGRAMMAR_INL_H
 
 // Framework include files
+#include "DD4hep/config.h"
 #include "DD4hep/Primitives.h"
 #include "DD4hep/detail/Grammar.h"
+#include "Evaluator/Evaluator.h"
+#include "Parsers/spirit/Parsers.h"
+#include "Parsers/spirit/ToStream.h"
 
 #if defined(DD4HEP_PARSER_HEADER)
 
@@ -32,13 +36,9 @@
 // and the dd4hep namespace is renamed!
 #include DD4HEP_PARSER_HEADER
 
-#else
+#endif
 
-#include "DDParsers/Parsers.h"
-#include "DDParsers/ToStream.h"
-#include "DDParsers/Evaluator.h"
 namespace dd4hep { XmlTools::Evaluator& g4Evaluator();  }
-#endif
 namespace {  static XmlTools::Evaluator& s__eval(dd4hep::g4Evaluator());  }
 
 // C/C++ include files
diff --git a/DDCore/include/JSON/ChildValue.h b/DDCore/include/JSON/ChildValue.h
index 80919af73851a3bbecde33f6cdb5b0925d4a191a..a3c6e8c8352a9626caaead7a95a3da5634915756 100644
--- a/DDCore/include/JSON/ChildValue.h
+++ b/DDCore/include/JSON/ChildValue.h
@@ -17,7 +17,7 @@
 #include "JSON/Dimension.h"
 
 #define DD4HEP_DIMENSION_NS json
-#include "XML/detail/ChildValue.h"
+#include "Parsers/detail/ChildValue.h"
 #undef  DD4HEP_DIMENSION_NS
 
 
diff --git a/DDCore/include/JSON/ChildValue.inl b/DDCore/include/JSON/ChildValue.inl
index 7dee274ae8f053f3a6db8bc57de700758e26e35d..aa3785e3bee7318296983615f47bd87379d2dbbb 100644
--- a/DDCore/include/JSON/ChildValue.inl
+++ b/DDCore/include/JSON/ChildValue.inl
@@ -17,7 +17,7 @@
 #include "JSON/ChildValue.h"
 
 #define DD4HEP_DIMENSION_NS json
-#include "XML/detail/ChildValue.inl"
+#include "Parsers/detail/ChildValue.inl"
 #undef  DD4HEP_DIMENSION_NS
 
 #endif /* DD4HEP_JSONCHILDVALUE_INL  */
diff --git a/DDCore/include/JSON/Conversions.h b/DDCore/include/JSON/Conversions.h
index c108665d40fb2645c5f3eafc470a5d340a5a61e9..394907fb889b25fe5a80eb4319c1d152f4da2e77 100644
--- a/DDCore/include/JSON/Conversions.h
+++ b/DDCore/include/JSON/Conversions.h
@@ -14,7 +14,7 @@
 #define DD4HEP_JSON_CONVERSIONS_H
 
 #define DD4HEP_CONVERSION_NS json
-#include "XML/detail/Conversions.h"
+#include "Parsers/detail/Conversions.h"
 #undef  DD4HEP_CONVERSION_NS
 
 #endif /* DD4HEP_JSON_CONVERSIONS_H  */
diff --git a/DDCore/include/JSON/Detector.h b/DDCore/include/JSON/Detector.h
index 662196e304272765f7e3e4e13b59af002fef0345..117762044067336b5be6d6a8686773917b442c84 100644
--- a/DDCore/include/JSON/Detector.h
+++ b/DDCore/include/JSON/Detector.h
@@ -18,7 +18,7 @@
 
 /// Include the implementation in the proper namespace
 #define DD4HEP_DIMENSION_NS json
-#include "XML/detail/Detector.h"
+#include "Parsers/detail/Detector.h"
 #undef DD4HEP_DIMENSION_NS
 
 #endif    /* DD4HEP_JSON_DETECTOR_H   */
diff --git a/DDCore/include/JSON/Dimension.h b/DDCore/include/JSON/Dimension.h
index e92caee8b11ca488c6b387f71536937147ddc976..3143b124be6eb0a9fbb70dbbc7307f156d8d9aff 100644
--- a/DDCore/include/JSON/Dimension.h
+++ b/DDCore/include/JSON/Dimension.h
@@ -18,7 +18,7 @@
 #include "JSON/Tags.h"
 
 #define DD4HEP_DIMENSION_NS json
-#include "XML/detail/Dimension.h"
+#include "Parsers/detail/Dimension.h"
 #undef DD4HEP_DIMENSION_NS
 
 #endif    /* DD4HEP_JSON_DIMENSION_H   */
diff --git a/DDCore/include/JSON/Dimension.inl b/DDCore/include/JSON/Dimension.inl
index 602b86658dd1966bf81ffeee28147c9bf08f8040..2380b8ac53b394ec672bf1e9e276d74e73c79a52 100644
--- a/DDCore/include/JSON/Dimension.inl
+++ b/DDCore/include/JSON/Dimension.inl
@@ -17,7 +17,7 @@
 #include "JSON/Dimension.h"
 
 #define DD4HEP_DIMENSION_NS json
-#include "XML/detail/Dimension.inl"
+#include "Parsers/detail/Dimension.inl"
 #undef DD4HEP_DIMENSION_NS
 
 #endif /* DD4HEP_JSONDIMENSION_INL  */
diff --git a/DDCore/include/JSON/Evaluator.h b/DDCore/include/JSON/Evaluator.h
index 4c3f199154689262b43e45de5b536334c7d74c0e..8e395fb59533e7063a5e4c72dbcd1257c8a6f8e1 100644
--- a/DDCore/include/JSON/Evaluator.h
+++ b/DDCore/include/JSON/Evaluator.h
@@ -19,6 +19,6 @@
  *
  *  See the externalized header in doc/externalize for details.
  */
-#include "DDParsers/Evaluator.h"
+#include "Evaluator/Evaluator.h"
 
 #endif   /* DD4HEP_DDCORE_JSON_EVALUATOR_H  */
diff --git a/DDCore/include/JSON/Printout.h b/DDCore/include/JSON/Printout.h
index 30a81ddd124ee648b04e504aa9b459c69c9424bc..da8c23f56493ddfba2239e5e5667731446373624 100644
--- a/DDCore/include/JSON/Printout.h
+++ b/DDCore/include/JSON/Printout.h
@@ -10,8 +10,8 @@
 // Author     : M.Frank
 //
 //==========================================================================
-#ifndef DD4HEP_DDCORE_JSON_PRINTOUT_H
-#define DD4HEP_DDCORE_JSON_PRINTOUT_H
+#ifndef DD4HEP_JSON_PRINTOUT_H
+#define DD4HEP_JSON_PRINTOUT_H
 
 // Forwarding printout functionality to dd4hep
 /** Note: This is necessary to use the JSON functionality as a standalone 
@@ -19,6 +19,6 @@
  *
  *  See the externalized header in doc/externalize for details.
  */
-#include "DD4hep/Printout.h"
+#include "Parsers/Printout.h"
 
-#endif   /* DD4HEP_DDCORE_JSON_PRINTOUT_H  */
+#endif   /* DD4HEP_JSON_PRINTOUT_H  */
diff --git a/DDCore/include/JSON/config.h b/DDCore/include/JSON/config.h
index c9d657da181539cdc22d0f3578c778b8697f4464..0fea92935319b98abdca4534b785a17d1ee3111b 100644
--- a/DDCore/include/JSON/config.h
+++ b/DDCore/include/JSON/config.h
@@ -13,6 +13,8 @@
 #ifndef DD4HEP_DDCORE_JSON_CONFIG_H
 #define DD4HEP_DDCORE_JSON_CONFIG_H
 
+#include "Parsers/config.h"
+
 #define DD4HEP_USE_BOOST_JSON 1
 
 #include "boost/property_tree/ptree.hpp"
diff --git a/DDCore/include/Parsers/Exceptions.h b/DDCore/include/Parsers/Exceptions.h
new file mode 100644
index 0000000000000000000000000000000000000000..7191969d60331968e745ff8ea2a351f64b39c015
--- /dev/null
+++ b/DDCore/include/Parsers/Exceptions.h
@@ -0,0 +1,55 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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
+//
+//==========================================================================
+#ifndef DD4HEP_PARSERS_EXCEPTIONS_H
+#define DD4HEP_PARSERS_EXCEPTIONS_H
+
+// Framework include files
+#include "Parsers/config.h"
+
+// C/C++ include files
+#include <string>
+#include <typeinfo>
+#include <stdexcept>
+
+/// Namespace for the AIDA detector description toolkit
+namespace dd4hep {
+
+  /// Exception class to signal operations on unrelated classes
+  /**
+   *   \author  M.Frank
+   *   \date    13.08.2013
+   *   \ingroup DD4HEP
+   */
+  struct unrelated_type_error : public std::runtime_error {
+    static std::string msg(const std::type_info& typ1, const std::type_info& typ2, const std::string& text);
+    unrelated_type_error(const std::type_info& typ1, const std::type_info& typ2, const std::string& text = "")
+      : std::runtime_error(msg(typ1, typ2, text)) {
+    }
+  };
+
+  /// Exception class to signal operations on unrelated types of values
+  /**
+   *   \author  M.Frank
+   *   \date    13.08.2013
+   *   \ingroup DD4HEP
+   */
+  struct unrelated_value_error : public std::runtime_error {
+    static std::string msg(const std::type_info& typ, const std::string& text);
+    unrelated_value_error(const std::type_info& typ, const std::string& text = "")
+      : std::runtime_error(msg(typ, text)) {
+    }
+  };
+
+}      // End namespace dd4hep
+
+#endif  /* DD4HEP_PARSERS_EXCEPTIONS_H */
diff --git a/DDCore/include/Parsers/Primitives.h b/DDCore/include/Parsers/Primitives.h
new file mode 100644
index 0000000000000000000000000000000000000000..c4c3b41a6852b71a0e15810662922a5ae809be04
--- /dev/null
+++ b/DDCore/include/Parsers/Primitives.h
@@ -0,0 +1,630 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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
+//
+//==========================================================================
+#ifndef DD4HEP_PARSERS_PRIMITIVES_H
+#define DD4HEP_PARSERS_PRIMITIVES_H
+
+// Framework include files
+#include "Parsers/config.h"
+
+// C/C++ include files
+#include <map>
+#include <list>
+#include <vector>
+#include <string>
+#include <limits>
+
+#include <typeinfo>
+#include <algorithm>
+#include <stdexcept>
+
+/// Namespace for the AIDA detector description toolkit
+namespace dd4hep {
+
+  /// Namespace describing generic detector segmentations
+  namespace DDSegmentation  {
+    class BitFieldCoder;
+    class BitFieldElement;
+    /// Useful typedefs to differentiate cell IDs and volume IDs
+    typedef long long int CellID;
+    typedef long long int VolumeID;
+  }
+
+
+  // Put here global basic type definitions derived from primitive types of the dd4hep namespace
+#ifdef __CINT__
+  typedef DDSegmentation::CellID CellID;
+  typedef DDSegmentation::VolumeID VolumeID;
+  typedef DDSegmentation::BitFieldCoder BitFieldCoder;
+  typedef DDSegmentation::BitFieldElement BitFieldElement;
+#else
+  using DDSegmentation::CellID;
+  using DDSegmentation::VolumeID;
+  using DDSegmentation::BitFieldCoder;
+  using DDSegmentation::BitFieldElement;
+#endif
+
+  /// Specialized exception to be thrown if invalid handles are accessed
+  class invalid_handle_exception : public std::runtime_error  {
+  public:
+    /// Initializing constructor
+    invalid_handle_exception(const char* msg) : std::runtime_error(msg) {}
+    /// Initializing constructor
+    invalid_handle_exception(const std::string& msg) : std::runtime_error(msg) {}
+    /// Generic copy constructor
+    invalid_handle_exception(const std::exception& e) : std::runtime_error(e.what()) {}
+    /// Generic copy constructor
+    invalid_handle_exception(const invalid_handle_exception& e) : std::runtime_error(e.what()) {}
+    /// Default destructor of specialized exception
+    virtual ~invalid_handle_exception() = default;
+  };
+
+  /// Macro for deprecated functions. Prints once only. useage: deprecatedCall(__PRETTY_FUNCTION__);
+#define   DD4HEP_DEPRECATED_CALL(tag,replacement,func)                \
+  { static bool __dd4hep_first=true;                                  \
+    if ( __dd4hep_first ) { __dd4hep_first=false;                     \
+      dd4hep::printout(dd4hep::WARNING,tag,                           \
+                       "Deprecated function: '%s' use '%s' instead.", \
+                       func,replacement);                             \
+    }}
+  
+  /// ABI information about type names
+  std::string typeName(const std::type_info& type);
+  /// Check type infos for equivalence (dynamic casts) using ABI information
+  void typeinfoCheck(const std::type_info& typ1, const std::type_info& typ2, const std::string& text = "");
+  /// Throw exception when handles are check for validity
+  void invalidHandleError(const std::type_info& type);
+  /// Throw exception when handles are badly assigned
+  void invalidHandleAssignmentError(const std::type_info& from, const std::type_info& to);
+
+  /// Throw exception when handles are check for validity
+  template <typename T> void invalidHandleError()  {
+    invalidHandleError(typeid(T));
+  }
+
+  /// Throw exception when handles are check for validity
+  void notImplemented(const std::string& msg);
+
+  /// Class to perform dynamic casts using unknown pointers.
+  /** @class ComponentCast Primitives.h dd4hep/Primitives.h
+   *
+   *  It is mandatory that the pointers referred do actually
+   *  support the asked functionalty.
+   *  Miracles also I cannot do.....
+   *
+   *   @author  M.Frank
+   *   @date    13.08.2013
+   */
+  class ComponentCast {
+  public:
+    typedef void  (*destroy_t)(void*);
+    typedef void* (*cast_t)(const void*);
+#ifdef __CINT__
+    const std::type_info* type;
+#else
+    const std::type_info& type;
+#endif
+    const void* abi_class;
+    destroy_t   destroy;
+    cast_t      cast;
+
+  private:
+    /// Initializing Constructor
+    ComponentCast(const std::type_info& t, destroy_t d, cast_t c);
+    /// Defautl destructor
+    virtual ~ComponentCast();
+
+  public:
+    template <typename TYPE> static void _destroy(void* arg)  {
+      TYPE* ptr = (TYPE*)arg;
+      if (ptr)    delete ptr;
+    }
+    template <typename TYPE> static void* _cast(const void* arg)  {
+      TYPE* ptr = (TYPE*)arg;
+      ptr = dynamic_cast<TYPE*>(ptr);
+      return (void*)ptr;
+    }
+    template <typename TYPE> static ComponentCast& instance() {
+      static ComponentCast c(typeid(TYPE),_destroy<TYPE>,_cast<TYPE>);
+      return c;
+    }
+
+    /// Apply cast using typeinfo instead of dynamic_cast
+    void* apply_dynCast(const ComponentCast& to, const void* ptr) const;
+    /// Apply cast using typeinfo instead of dynamic_cast
+    void* apply_upCast(const ComponentCast& to, const void* ptr) const;
+    /// Apply cast using typeinfo instead of dynamic_cast
+    void* apply_downCast(const ComponentCast& to, const void* ptr) const;
+  };
+
+  /// Convert volumeID to string format (016X)
+  std::string volumeID(VolumeID vid);
+
+  /// DD4hep internal namespace declaration for utilities and implementation details
+  namespace detail  {
+    
+    /// We need it so often: one-at-time 64 bit hash function
+    unsigned long long int hash64(const char* key);
+    unsigned long long int hash64(const std::string& key);
+    template <typename T> unsigned long long int typeHash64()   {
+      static unsigned long long int code = hash64(typeid(T).name());
+      return code;
+    }
+  
+    /// We need it so often: one-at-time 32 bit hash function
+    inline unsigned int hash32(const char* key) {
+      unsigned int hash = 0;
+      const char* k = key;
+      for (; *k; k++) {
+        hash += *k;
+        hash += (hash << 10);
+        hash ^= (hash >> 6);
+      }
+      hash += (hash << 3);
+      hash ^= (hash >> 11); hash += (hash << 15);
+      return hash;
+    }
+    inline unsigned int hash32(const std::string& key) {
+      return hash32(key.c_str());
+    }
+
+    /// Convert date into epoch time (seconds since 1970)
+    long int makeTime(int year, int month, int day,
+                      int hour=0, int minutes=0, int seconds=0);
+  
+    /// Convert date into epoch time (seconds since 1970)
+    long int makeTime(const std::string& date, const char* fmt="%d-%m-%Y %H:%M:%S");
+  
+
+    /// A bit of support for handling and printing primitives
+    /**
+     *
+     * \author  M.Frank
+     * \version 1.0
+     * \ingroup DD4HEP
+     */
+    template<typename T> struct Primitive {
+    public:
+      /// Type decribed by th class
+      typedef T value_t;
+      /// Definition of the vector type
+      typedef std::vector<value_t>              vector_t;
+
+      /// Definition of the short integer mapped type
+      typedef std::pair<short,value_t>          short_pair_t;
+      /// Definition of the unsigned short integer mapped type
+      typedef std::pair<unsigned short,value_t> ushort_pair_t;
+      /// Definition of the integer mapped type
+      typedef std::pair<int,value_t>            int_pair_t;
+      /// Definition of the unsigned integer mapped type
+      typedef std::pair<unsigned int,value_t>   uint_pair_t;
+      /// Definition of the long integer mapped type
+      typedef std::pair<long,value_t>           long_pair_t;
+      /// Definition of the unsigned long integer mapped type
+      typedef std::pair<unsigned long,value_t>  ulong_pair_t;
+      /// Definition of the size_t mapped type
+      typedef std::pair<size_t,value_t>         size_pair_t;
+      /// Definition of the string mapped type
+      typedef std::pair<std::string,value_t>    string_pair_t;
+
+      /// Definition of the short integer mapped type
+      typedef std::map<short,value_t>           short_map_t;
+      /// Definition of the unsigned short integer mapped type
+      typedef std::map<unsigned short,value_t>  ushort_map_t;
+      /// Definition of the integer mapped type
+      typedef std::map<int,value_t>             int_map_t;
+      /// Definition of the unsigned integer mapped type
+      typedef std::map<unsigned int,value_t>    uint_map_t;
+      /// Definition of the long integer mapped type
+      typedef std::map<long,value_t>            long_map_t;
+      /// Definition of the unsigned long integer mapped type
+      typedef std::map<unsigned long,value_t>   ulong_map_t;
+      /// Definition of the size_t mapped type
+      typedef std::map<size_t,value_t>          size_map_t;
+      /// Definition of the string mapped type
+      typedef std::map<std::string,value_t>     string_map_t;
+      /// Definition of the limits
+      typedef std::numeric_limits<value_t>      limits;
+
+      /// Access to default printf format
+      static const char* default_format(); 
+      /// Access to the specific printf format. May be overloaded by users
+      static const char* format()          { return default_format();     }
+      /// Access to the RTTI data type
+      static const std::type_info& type()  { return typeid(value_t);      }
+      /// Access to the RTTI data type
+      static std::string type_name()       { return typeName(type());     }
+      /// Auto conversion to string using the default format
+      static std::string toString(T value);
+      /// Get typed null pointer (for template selctions)
+      static const value_t* null_pointer() { return (value_t*)0;          }
+    };
+
+    /// Safe cast mechanism using pre-linked conversions.
+    /**
+     *
+     * \author  M.Frank
+     * \version 1.0
+     * \ingroup DD4HEP
+     */
+#ifdef DD4HEP_USE_SAFE_CAST
+    template <typename TO> class safe_cast {
+    public:
+      template <typename FROM> static TO* cast(FROM* from);
+      template <typename FROM> static TO* cast(const FROM* from);
+      template <typename FROM> static TO* cast_non_null(FROM* from);
+      template <typename FROM> static TO* cast_non_null(const FROM* from);
+    };
+#else
+    template <typename TO> class safe_cast {
+    public:
+      static TO* cast(TO* from);
+      static TO* cast_non_null(TO* from);
+      template <typename FROM> static TO* cast(FROM* from)                 { return cast((TO*)from); }
+      template <typename FROM> static TO* cast(const FROM* from)           { return cast((TO*)from); }
+      template <typename FROM> static TO* cast_non_null(FROM* from)        { return cast_non_null((TO*)from); }
+      template <typename FROM> static TO* cast_non_null(const FROM* from)  { return cast_non_null((TO*)from); }
+    };
+#endif
+    
+    /// Operator to clear containers when out of scope
+    /**
+     *  \author  M.Frank
+     *  \version 1.0
+     *  \ingroup DD4HEP_CORE
+     */
+    template<typename C> struct ClearOnReturn {
+      C& container;
+      ClearOnReturn(C& c) : container(c) {  }
+      ~ClearOnReturn() { container.clear(); }
+    };
+
+    /// Helper to copy objects.
+    template <typename T> inline void copyObject(void* target,const void* source)  {
+      const T* src = (const T*)source;
+      ::new(target) T(*src);
+    }
+    /// Helper to destruct objects. Note: The memory is NOT released!
+    template <typename T> inline void destructObject(T* ptr) {
+      ptr->~T();
+    }
+    /// Helper to delete objects from heap and reset the pointer. Saves many many lines of code
+    template <typename T> inline void deletePtr(T*& ptr) {
+      if (0 != ptr)
+        delete ptr;
+      ptr = 0;
+    }
+    /// Helper to delete objects from heap and reset the pointer. Saves many many lines of code
+    template <typename T> inline void deleteObject(T* ptr) {
+      if (0 != ptr)
+        delete ptr;
+    }
+    /// Helper to delete objects from heap and reset the pointer
+    template <typename T> inline void destroyObject(T*& ptr) {
+      deletePtr(ptr);
+    }
+    /// Functor to delete objects from heap and reset the pointer
+    template <typename T> class DestroyObject {
+    public:
+      void operator()(T& ptr) const {
+        destroyObject(ptr);
+      }
+    };
+
+    /// Operator to select second element of a pair
+    template <typename T> class Select2nd  {
+    public:
+      typedef T arg_t;
+      typedef typename T::second_type result_t;
+      /// Operator function
+      const result_t& operator()(const arg_t &arg) const { return arg.second; }
+    };
+    /// Generator to create Operator to select value elements of a map
+    template <typename T> Select2nd<typename T::value_type> select2nd(const T&)
+    { return Select2nd<typename T::value_type>(); }
+
+    /// Operator to select the first element of a pair
+    template <typename T> class Select1st  {
+    public:
+      typedef T arg_t;
+      typedef typename T::first_type result_t;
+      /// Operator function
+      const result_t& operator()(const arg_t &arg) const { return arg.first; }
+    };
+    /// Generator to create Operator to select key values of a map
+    template <typename T> Select1st<typename T::value_type> select1st(const T&)
+    { return Select1st<typename T::value_type>(); }
+
+
+    /// map Functor to delete objects from heap
+    template <typename M> class DestroyObjects {
+    public:
+      M& object;
+      DestroyObjects(M& obj) : object(obj) {                    }
+      void operator()(std::pair<typename M::key_type, typename M::mapped_type> arg) const
+      {  DestroyObject<typename M::mapped_type>()(arg.second);    }
+      void operator()() const {
+        if ( !object.empty() ) for_each(object.begin(),object.end(),(*this));
+        object.clear();
+      }
+    };
+    template <typename M> void destroyObjects(M& obj)
+    {  DestroyObjects<M> del(obj); del();                      }
+    template <typename M> DestroyObjects<M> destroy2nd(M& obj)
+    {  DestroyObjects<M> del(obj); del();                      }
+
+    /// map Functor to delete objects from heap
+    template <typename M> class DestroyFirst {
+    public:
+      M& object;
+      DestroyFirst(M& obj) : object(obj) {   }
+      void operator()(std::pair<typename M::key_type, typename M::mapped_type> arg) const
+      {  DestroyObject<typename M::key_type>()(arg.first);     }
+      void operator()() const {
+        if ( !object.empty() ) for_each(object.begin(),object.end(),(*this));
+        object.clear();
+      }
+    };
+    template <typename M> void destroyFirst(M& arg)
+    {   DestroyFirst<M> del(arg); del();           }
+    template <typename M> void destroy1st(M& arg)
+    {   DestroyFirst<M> del(arg); del();           }
+
+    /// Helper to delete objects from heap and reset the pointer. Saves many many lines of code
+    template <typename T> inline void releasePtr(T& arg) {
+      if (0 != arg)
+        arg->release();
+      arg = 0;
+    }
+
+    /// Functor to release objects from heap and reset the pointer
+    template <typename T> class ReleaseObject {
+    public:
+      void operator()(T& arg) const {
+        releasePtr(arg);
+      }
+    };
+    /// Map Functor to release objects from heap
+    template <typename M> class ReleaseObjects {
+    public:
+      M& object;
+      ReleaseObjects(M& arg) : object(arg) {    }
+      void operator()(std::pair<typename M::key_type, typename M::mapped_type> arg) const
+      {  ReleaseObject<typename M::mapped_type>()(arg.second);    }
+      void operator()() const {
+        if ( !object.empty() ) for_each(object.begin(),object.end(),(*this));
+        object.clear();
+      }
+    };
+    template <typename M> ReleaseObject<typename M::value_type> releaseObject(M&) {
+      return ReleaseObject<typename M::value_type>();
+    }
+    template <typename M> void releaseObjects(M& arg) {
+      ReleaseObjects<M> rel(arg); rel();
+    }
+    template <typename M> void release2nd(M& arg) {
+      ReleaseObjects<M> rel(arg); rel();
+    }
+
+    /// Functor to delete objects from heap and reset the pointer
+    template <typename T> class ReferenceObject {
+    public:
+      typedef T arg_t;
+      T operator()(T arg) const {
+        if ( arg ) arg->addRef();
+        return arg;
+      }
+    };
+    /// Functor to delete objects from heap and reset the pointer
+    template <typename M> class ReferenceObjects {
+    public:
+      typedef typename M::second_type result_t;
+      result_t operator()(const M& arg) const {
+        return ReferenceObject<result_t>()(arg.second);
+      }
+    };
+    template <typename M> ReferenceObject<M> referenceObject(M&) {
+      return ReferenceObject<typename M::value_type>();
+    }
+    template <typename M> ReferenceObjects<typename M::value_type> reference2nd(M&) {
+      return ReferenceObjects<typename M::value_type>();
+    }
+
+    /// Member function call-functor with no arguments
+    template <typename R, typename T> struct ApplyMemFunc {
+      typedef R (T::*memfunc_t)();
+      memfunc_t func;
+      ApplyMemFunc(memfunc_t f) : func(f)  {}
+      void operator()(T* arg)  const {  if (arg) { (arg->*func)(); } }
+    };
+
+    /// Member function call-functor with 1 argument
+    template <typename R, typename T, typename A1> struct ApplyMemFunc1 {
+      typedef R (T::*memfunc_t)(A1 a1);
+      memfunc_t func;
+      A1& arg1;
+      ApplyMemFunc1(memfunc_t f, A1& a1) : func(f), arg1(a1)  {}
+      void operator()(T* arg)  const {  if ( arg ) { (arg->*func)(arg1); } }
+    };
+
+    /// Member function call-functor with 2 arguments
+    template <typename R, typename T, typename A1, typename A2> struct ApplyMemFunc2 {
+      typedef R (T::*memfunc_t)(A1 a1, A2 a2);
+      memfunc_t func;
+      A1& arg1;
+      A2& arg2;
+      ApplyMemFunc2(memfunc_t f, A1& a1, A2& a2) : func(f), arg1(a1), arg2(a2)  {}
+      void operator()( T* arg)  const {  if ( arg ) { (arg->*func)(arg1, arg2); } }
+    };
+
+    /// Member function call-functor with no arguments (const version)
+    template <typename R, typename T> struct ApplyMemFuncConst {
+      typedef R (T::*memfunc_t)() const;
+      memfunc_t func;
+      ApplyMemFuncConst(memfunc_t f) : func(f)  {}
+      void operator()(const T* arg)  const {  if ( arg ) { (arg->*func)(); } }
+    };
+
+    /// Member function call-functor with 1 argument (const version)
+    template <typename R, typename T, typename A1> struct ApplyMemFuncConst1 {
+      typedef R (T::*memfunc_t)(A1 a1) const;
+      memfunc_t func;
+      A1& arg1;
+      ApplyMemFuncConst1(memfunc_t f, A1& a1) : func(f), arg1(a1)  {}
+      void operator()(const T* arg)  const {  if ( arg ) { (arg->*func)(arg1); } }
+    };
+
+    /// Member function call-functor with 2 arguments (const version)
+    template <typename R, typename T, typename A1, typename A2> struct ApplyMemFuncConst2 {
+      typedef R (T::*memfunc_t)(A1 a1, A2 a2) const;
+      memfunc_t func;
+      A1& arg1;
+      A2& arg2;
+      ApplyMemFuncConst2(memfunc_t f, A1& a1, A2& a2) : func(f), arg1(a1), arg2(a2)  {}
+      void operator()(const T* arg)  const {  if ( arg ) { (arg->*func)(arg1, arg2); } }
+    };
+
+    template <typename C, typename R, typename T>
+    void call_member_func(C& object, R (T::*pmf)())
+    {   std::for_each(object.begin(),object.end(),ApplyMemFunc<R,T>(pmf));    }
+
+    template <typename C, typename R, typename T>
+    void call_member_func(C& object, R (T::*pmf)() const)
+    {   std::for_each(object.begin(),object.end(),ApplyMemFuncConst<R,T>(pmf));    }
+
+    template <typename C, typename R, typename T, typename A1>
+    void call_member_func(C& object, R (T::*pmf)(A1 a1), A1 a1)
+    {   std::for_each(object.begin(),object.end(),ApplyMemFunc1<R,T,A1>(pmf,a1));    }
+  
+    template <typename C, typename R, typename T, typename A1>
+    void call_member_func(C& object, R (T::*pmf)(A1 a1) const, A1 a1)
+    {   std::for_each(object.begin(),object.end(),ApplyMemFuncConst1<R,T,A1>(pmf,a1));    }
+  
+  
+    template <typename C, typename R, typename T, typename A1, typename A2>
+    void call_member_func(C& object, R (T::*pmf)(A1 a1,A2 a2), A1 a1, A2 a2)
+    {   std::for_each(object.begin(),object.end(),ApplyMemFunc2<R,T,A1,A2>(pmf,a1,a2));    }
+  
+    template <typename C, typename R, typename T, typename A1, typename A2>
+    void call_member_func(C& object, R (T::*pmf)(A1 a1,A2 a2) const, A1 a1, A2 a2)
+    {   std::for_each(object.begin(),object.end(),ApplyMemFuncConst2<R,T,A1,A2>(pmf,a1,a2));    }
+  
+
+    /// Generic map Functor to act on first element (key)
+    template <typename M, typename FCN> class Apply1rst {
+    public:
+      const FCN& func;
+      Apply1rst(const FCN& f) : func(f) {    }
+      void operator()(std::pair<typename M::key_type const, typename M::mapped_type>& arg) const
+      {   (func)(arg.first);    }
+      void operator()(const std::pair<typename M::key_type const, typename M::mapped_type>& arg) const
+      {   (func)(arg.first);    }
+    };
+
+    template <typename C, typename FCN> Apply1rst<C,FCN> apply__1rst_value(C&,const FCN& func)
+    {  return Apply1rst<C,FCN>(func);  }
+
+    template <typename C, typename FCN> void apply1rst(C& object,const FCN& func)
+    {  std::for_each(object.begin(),object.end(),apply__1rst_value(object,func));  }
+
+    template <typename C, typename R, typename T>
+    void apply1rst(C& object, R (T::*pmf)())  
+    {  std::for_each(object.begin(),object.end(),apply__1rst_value(object,ApplyMemFunc<R,T>(pmf)));  }
+
+    template <typename C, typename R, typename T, typename A1>
+    void apply1rst(C object, R (T::*pmf)(A1 a1), A1 a1)
+    {  std::for_each(object.begin(),object.end(),apply__1rst_value(object,ApplyMemFunc1<R,T,A1>(pmf,a1)));  }
+
+    template <typename C, typename R, typename T>
+    void apply1rst(C& object, R (T::*pmf)() const)  
+    {  std::for_each(object.begin(),object.end(),apply__1rst_value(object,ApplyMemFuncConst<R,T>(pmf)));  }
+
+    template <typename C, typename R, typename T, typename A1>
+    void apply1rst(C object, R (T::*pmf)(A1 a1) const, A1 a1)
+    {  std::for_each(object.begin(),object.end(),apply__1rst_value(object,ApplyMemFuncConst1<R,T,A1>(pmf,a1)));  }
+
+    /// Generic map Functor to act on second element (mapped type)
+    template <typename M, typename FCN> class Apply2nd {
+    public:
+      const FCN& func;
+      Apply2nd(const FCN& f) : func(f) {    }
+      void operator()(std::pair<typename M::key_type const, typename M::mapped_type>& arg) const
+      {   (func)(arg.second);    }
+      void operator()(const std::pair<typename M::key_type const, typename M::mapped_type>& arg) const
+      {   (func)(arg.second);    }
+    };
+
+    template <typename C, typename FCN> Apply2nd<C,FCN> apply__2nd_value(C&,const FCN& func)
+    {  return Apply2nd<C,FCN>(func);  }
+
+    template <typename C, typename FCN> void apply2nd(C& object,const FCN& func)
+    {  std::for_each(object.begin(),object.end(),apply__2nd_value(object,func));  }
+
+    template <typename C, typename R, typename T>
+    void apply2nd(C& object, R (T::*pmf)())  
+    {  std::for_each(object.begin(),object.end(),apply__2nd_value(object,ApplyMemFunc<R,T>(pmf)));  }
+
+    template <typename C, typename R, typename T, typename A1>
+    void apply2nd(C object, R (T::*pmf)(A1 a1), A1 a1)
+    {  std::for_each(object.begin(),object.end(),apply__2nd_value(object,ApplyMemFunc1<R,T,A1>(pmf,a1)));  }
+
+    template <typename C, typename R, typename T>
+    void apply2nd(C& object, R (T::*pmf)() const)  
+    {  std::for_each(object.begin(),object.end(),apply__2nd_value(object,ApplyMemFuncConst<R,T>(pmf)));  }
+
+    template <typename C, typename R, typename T, typename A1>
+    void apply2nd(C object, R (T::*pmf)(A1 a1) const, A1 a1)
+    {  std::for_each(object.begin(),object.end(),apply__2nd_value(object,ApplyMemFuncConst1<R,T,A1>(pmf,a1)));  }
+
+    /// Data structure to manipulate a bitmask held by reference and represented by an integer
+    /**
+     * @author  M.Frank
+     * @version 1.0
+     */
+    template <typename T> class ReferenceBitMask  {
+    public:
+      /// Reference to the data
+      T& mask;
+      /// Standard constructor
+      ReferenceBitMask(T& arg);
+      T value() const  {
+        return mask;
+      }
+      void set(const T& arg)   {
+        mask |= arg;
+      }
+      void clear(const T& arg)   {
+        mask &= ~arg;
+      }
+      void clear()   {
+        mask = 0;
+      }
+      bool isSet(const T& arg)  const {
+        return (mask&arg) == arg;
+      }
+      bool anySet(const T& arg)  const {
+        return (mask&arg) != 0;
+      }
+      bool testBit(int bit) const  {
+        T arg = T(1)<<bit;
+        return isSet(arg);
+      }
+      bool isNull() const {
+        return mask == 0;
+      }
+    };
+    /// Standard constructor
+    template <typename T>  ReferenceBitMask<T>::ReferenceBitMask(T& arg) : mask(arg) {}
+
+  }    // End namespace detail
+}      // End namespace dd4hep
+#endif // DD4HEP_PARSERS_PRIMITIVES_H
diff --git a/DDCore/include/Parsers/Printout.h b/DDCore/include/Parsers/Printout.h
new file mode 100644
index 0000000000000000000000000000000000000000..534d7828635b94db2e6072aae06f322ad3ece7fc
--- /dev/null
+++ b/DDCore/include/Parsers/Printout.h
@@ -0,0 +1,319 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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
+//
+//==========================================================================
+#ifndef DD4HEP_PARSERS_PRINTOUT_H
+#define DD4HEP_PARSERS_PRINTOUT_H
+
+// Framework include files
+#include "Parsers/config.h"
+
+// C/C++ include files
+#include <cstdio>
+#include <cstdlib>
+#include <cstdarg>
+#include <map>
+#include <string>
+#include <sstream>
+#include <iostream>
+
+/// Forward declarations
+class TNamed;
+
+/// Namespace for the AIDA detector description toolkit
+namespace dd4hep {
+
+  // Forward declarations
+  class Detector;
+  class NamedObject;
+  template <typename T> class Handle;
+
+  enum PrintLevel {
+    NOLOG    = 0,
+    VERBOSE  = 1,
+    DEBUG    = 2,
+    INFO     = 3,
+    WARNING  = 4,
+    ERROR    = 5,
+    FATAL    = 6,
+    ALWAYS   = 7
+  };
+
+#ifndef __CINT__
+  typedef size_t (*output_function1_t)(void*, PrintLevel severity, const char*, const char*);
+  typedef size_t (*output_function2_t)(void*, PrintLevel severity, const char*, const char*, va_list& args);
+
+  /// Helper function to serialize argument list to a single string
+  /**
+   *  @arg argc       [int,read-only]      Number of arguments.
+   *  @arg argv       [char**,read-only]   Argument strings
+   *  @return String containing the concatenated arguments
+   */
+  std::string arguments(int argc, char** argv);
+  
+  /// Calls the display action with a given severity level
+  /**
+   *  @arg severity   [int,read-only]      Display severity flag (see enum)
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg str        [stringstream, RW]   string stream containing data to be printed.
+   *                                       Object is reset after use.
+   *  @return Status code indicating success or failure
+   */
+  int printout(PrintLevel severity, const char* src, std::stringstream& str);
+
+  /// Calls the display action with a given severity level
+  /**
+   *  @arg severity   [int,read-only]      Display severity flag (see enum)
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg str        [stringstream, RW]   string stream containing data to be printed.
+   *                                       Object is reset after use.
+   *  @return Status code indicating success or failure
+   */
+  int printout(PrintLevel severity, const std::string& src, std::stringstream& str);
+
+  /// Calls the display action with a given severity level
+  /**
+   *  @arg severity   [int,read-only]      Display severity flag (see enum)
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @return Status code indicating success or failure
+   */
+  int printout(PrintLevel severity, const char* src, const char* fmt, ...);
+
+  /// Calls the display action with a given severity level
+  /**
+   *  @arg severity   [int,read-only]      Display severity flag (see enum)
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @return Status code indicating success or failure
+   */
+  int printout(PrintLevel severity, const std::string& src, const char* fmt, ...);
+
+  /// Calls the display action with a given severity level
+  /**
+   *  @arg severity   [int,read-only]      Display severity flag (see enum)
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @return Status code indicating success or failure
+   */
+  int printout(PrintLevel severity, const std::string& src, const std::string& fmt, ...);
+
+  /// Calls the display action with a given severity level
+  /**
+   *  @arg severity   [int,read-only]      Display severity flag (see enum)
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @return Status code indicating success or failure
+   */
+  int printout(PrintLevel severity, const char* src, const std::string& fmt, ...);
+
+  /// Calls the display action with a given severity level
+  /**
+   *  @arg severity   [int,read-only]      Display severity flag (see enum)
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+   *  @return Status code indicating success or failure
+   */
+  int printout(PrintLevel severity, const char* src, const char* fmt, va_list& args);
+
+  /// Calls the display action with a given severity level
+  /**
+   *  @arg severity   [int,read-only]      Display severity flag (see enum)
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+   *  @return Status code indicating success or failure
+   */
+  int printout(PrintLevel severity, const std::string& src, const char* fmt, va_list& args);
+
+  /// Calls the display action with a given severity level
+  /**
+   *  @arg severity   [int,read-only]      Display severity flag (see enum)
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+   *  @return Status code indicating success or failure
+   */
+  int printout(PrintLevel severity, const std::string& src, const std::string& fmt, va_list& args);
+
+  /// Calls the display action with a given severity level
+  /**
+   *  @arg severity   [int,read-only]      Display severity flag (see enum)
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+   *  @return Status code indicating success or failure
+   */
+  int printout(PrintLevel severity, const char* src, const std::string& fmt, va_list& args);
+
+  /// Calls the display action with ERROR and throws an std::runtime_error exception
+  /**
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @return Status code indicating success or failure
+   */
+  int except(const std::string& src, const std::string& fmt, ...);
+
+  /// Calls the display action with ERROR and throws an std::runtime_error exception
+  /**
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @return Status code indicating success or failure
+   */
+  int except(const char* src, const char* fmt, ...);
+
+  /// Calls the display action with ERROR and throws an std::runtime_error exception
+  /**
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+   *  @return Status code indicating success or failure
+   */
+  int except(const std::string& src, const std::string& fmt, va_list& args);
+
+  /// Calls the display action with ERROR and throws an std::runtime_error exception
+  /**
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+   *  @return Status code indicating success or failure
+   */
+  int except(const char* src, const char* fmt, va_list& args);
+
+  /// Build formatted string
+  /*
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @return Status code indicating success or failure
+   */
+  std::string format(const std::string& src, const std::string& fmt, ...);
+
+  /// Build exception string
+  /**
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @return Status code indicating success or failure
+   */
+  std::string format(const char* src, const char* fmt, ...);
+
+  /// Build formatted string
+  /**
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+   *  @return Status code indicating success or failure
+   */
+  std::string format(const std::string& src, const std::string& fmt, va_list& args);
+
+  /// Build formatted string
+  /**
+   *  @arg src        [string,read-only]   Information source (component, etc.)
+   *  @arg fmt        [string,read-only]   Format string for ellipsis args
+   *  @arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+   *  @return Status code indicating success or failure
+   */
+  std::string format(const char* src, const char* fmt, va_list& args);
+
+  /// Customize printer function
+  void setPrinter(void* print_arg, output_function1_t fcn);
+
+  /// Customize printer function
+  void setPrinter2(void* print_arg, output_function2_t fcn);
+
+#endif // __CINT__
+
+  /// Set new printout format for the 3 fields: source-level-message. All 3 are strings
+  std::string setPrintFormat(const std::string& new_format);
+
+  /// Set new print level. Returns the old print level
+  PrintLevel setPrintLevel(PrintLevel new_level);
+
+  /// Access the current printer level
+  PrintLevel printLevel();
+
+  /// Translate the printer level from string to value
+  PrintLevel printLevel(const char* value);
+
+  /// Translate the printer level from string to value
+  PrintLevel printLevel(const std::string& value);
+
+  /// Check if this print level would result in some output
+  bool isActivePrintLevel(int severity);
+
+  /// Helper class template to implement ASCII object dumps
+  /** @class Printer Conversions.h  dd4hep/compact/Conversions.h
+   *
+   *  Small helper class to print objects
+   *
+   *  @author   M.Frank
+   *  @version  1.0
+   */
+  template <typename T> struct Printer {
+    /// Reference to the detector description object
+    const Detector* description;
+    /// Reference to the output stream object, the Printer object should write
+    std::ostream& os;
+    /// Optional text prefix when formatting the output
+    std::string prefix;
+    /// Initializing constructor of the functor
+    Printer(const Detector* l, std::ostream& stream, const std::string& p = "")
+      : description(l), os(stream), prefix(p) {
+    }
+    /// Callback operator to be specialized depending on the element type
+    void operator()(const T& value) const;
+  };
+
+  template <typename T> inline std::ostream& print(const T& object, std::ostream& os = std::cout,
+                                                   const std::string& indent = "") {
+    Printer<T>(0, os, indent)(object);
+    return os;
+  }
+
+  /// Helper class template to implement ASCII dumps of named objects maps
+  /** @class PrintMap Conversions.h  dd4hep/compact/Conversions.h
+   *
+   *  Small helper class to print maps of objects
+   *
+   *  @author   M.Frank
+   *  @version  1.0
+   */
+  template <typename T> struct PrintMap {
+    typedef T item_type;
+    typedef const std::map<std::string, Handle<NamedObject> > cont_type;
+
+    /// Reference to the detector description object
+    const Detector* description;
+    /// Reference to the output stream object, the Printer object should write
+    std::ostream& os;
+    /// Optional text prefix when formatting the output
+    std::string text;
+    /// Reference to the container data of the map.
+    cont_type& cont;
+    /// Initializing constructor of the functor
+    PrintMap(const Detector* l, std::ostream& stream, cont_type& c, const std::string& t = "")
+      : description(l), os(stream), text(t), cont(c) {
+    }
+    /// Callback operator to be specialized depending on the element type
+    void operator()() const;
+  };
+
+  /// Helper function to print booleans in format YES/NO
+  inline const char* yes_no(bool value) {
+    return value ? "YES" : "NO ";
+  }
+  /// Helper function to print booleans in format true/false
+  inline const char* true_false(bool value) {
+    return value ? "true " : "false";
+  }
+
+}         /* End namespace dd4hep              */
+#endif    /* DD4HEP_PARSERS_PRINTOUT_H         */
diff --git a/DDCore/include/XML/detail/ChildValue.h b/DDCore/include/Parsers/detail/ChildValue.h
similarity index 100%
rename from DDCore/include/XML/detail/ChildValue.h
rename to DDCore/include/Parsers/detail/ChildValue.h
diff --git a/DDCore/include/XML/detail/ChildValue.imp b/DDCore/include/Parsers/detail/ChildValue.imp
similarity index 100%
rename from DDCore/include/XML/detail/ChildValue.imp
rename to DDCore/include/Parsers/detail/ChildValue.imp
diff --git a/DDCore/include/XML/detail/ChildValue.inl b/DDCore/include/Parsers/detail/ChildValue.inl
similarity index 100%
rename from DDCore/include/XML/detail/ChildValue.inl
rename to DDCore/include/Parsers/detail/ChildValue.inl
diff --git a/DDCore/include/XML/detail/Conversions.h b/DDCore/include/Parsers/detail/Conversions.h
similarity index 98%
rename from DDCore/include/XML/detail/Conversions.h
rename to DDCore/include/Parsers/detail/Conversions.h
index 7da6ba1ff56a84bb6b11245d7804102202b9ea2b..f764136fc435854787337d1bdaa262e591231d56 100644
--- a/DDCore/include/XML/detail/Conversions.h
+++ b/DDCore/include/Parsers/detail/Conversions.h
@@ -24,11 +24,14 @@
 #include <iostream>
 
 // Framework include files
-#include "DD4hep/Detector.h"
+
 
 /// Namespace for the AIDA detector description toolkit
 namespace dd4hep {
 
+  /// Forward declaration
+  class Detector;
+  
   /// Namespace for the AIDA detector description toolkit supporting XML utilities
   namespace DD4HEP_CONVERSION_NS {
     class Handle_t;
diff --git a/DDCore/include/XML/detail/Detector.h b/DDCore/include/Parsers/detail/Detector.h
similarity index 100%
rename from DDCore/include/XML/detail/Detector.h
rename to DDCore/include/Parsers/detail/Detector.h
diff --git a/DDCore/include/XML/detail/Detector.imp b/DDCore/include/Parsers/detail/Detector.imp
similarity index 100%
rename from DDCore/include/XML/detail/Detector.imp
rename to DDCore/include/Parsers/detail/Detector.imp
diff --git a/DDCore/include/XML/detail/Dimension.h b/DDCore/include/Parsers/detail/Dimension.h
similarity index 100%
rename from DDCore/include/XML/detail/Dimension.h
rename to DDCore/include/Parsers/detail/Dimension.h
diff --git a/DDCore/include/XML/detail/Dimension.imp b/DDCore/include/Parsers/detail/Dimension.imp
similarity index 100%
rename from DDCore/include/XML/detail/Dimension.imp
rename to DDCore/include/Parsers/detail/Dimension.imp
diff --git a/DDCore/include/XML/detail/Dimension.inl b/DDCore/include/Parsers/detail/Dimension.inl
similarity index 100%
rename from DDCore/include/XML/detail/Dimension.inl
rename to DDCore/include/Parsers/detail/Dimension.inl
diff --git a/DDCore/include/XML/detail/README.txt b/DDCore/include/Parsers/detail/README.txt
similarity index 97%
rename from DDCore/include/XML/detail/README.txt
rename to DDCore/include/Parsers/detail/README.txt
index bf32aaf80dadc7240773c844ab1be95bd291724c..9a693c211121ddb1a2130f3cd68e7367aad2f38d 100644
--- a/DDCore/include/XML/detail/README.txt
+++ b/DDCore/include/Parsers/detail/README.txt
@@ -1,4 +1,4 @@
-
+f
 XML/detail
 ----------
 
@@ -25,7 +25,7 @@ underlying implementation is based on:
 -- TinyXML  --> uses the XML branch  (default)
 -- JSON     --> Uses the JSON branch (requires boost presence)
                 with the implementation of boost::property_tree
--- RapitXML --> Not implmented.
+-- RapidXML --> Not implmented.
                 Would be a jiffy to implement using the JSON branch and
                 the implementation of boost::property_tree.
                 Only the document handling is different.
diff --git a/DDCore/include/XML/Conversions.h b/DDCore/include/XML/Conversions.h
index f8901509318cf7a4551ce5f76e0b72224fe1d31d..7ab31e6d369b7213a0efda60d04088fb69930400 100644
--- a/DDCore/include/XML/Conversions.h
+++ b/DDCore/include/XML/Conversions.h
@@ -14,7 +14,7 @@
 #define DD4HEP_COMPACT_CONVERSION_H
 
 #define DD4HEP_CONVERSION_NS xml
-#include "XML/detail/Conversions.h"
+#include "Parsers/detail/Conversions.h"
 #undef  DD4HEP_CONVERSION_NS
 
 #endif    /* DD4HEP_COMPACT_CONVERSION_H    */
diff --git a/DDCore/include/XML/Evaluator.h b/DDCore/include/XML/Evaluator.h
new file mode 100644
index 0000000000000000000000000000000000000000..8e395fb59533e7063a5e4c72dbcd1257c8a6f8e1
--- /dev/null
+++ b/DDCore/include/XML/Evaluator.h
@@ -0,0 +1,24 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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
+//
+//==========================================================================
+#ifndef DD4HEP_DDCORE_JSON_EVALUATOR_H
+#define DD4HEP_DDCORE_JSON_EVALUATOR_H
+
+// Forwarding printout functionality to dd4hep
+/** Note: This is necessary to use the JSON functionality as a standalone 
+ *        utility without the need to externalize the world.
+ *
+ *  See the externalized header in doc/externalize for details.
+ */
+#include "Evaluator/Evaluator.h"
+
+#endif   /* DD4HEP_DDCORE_JSON_EVALUATOR_H  */
diff --git a/DDCore/include/XML/Printout.h b/DDCore/include/XML/Printout.h
index f09259dbb4e23c34cba83f0010a091ac75995919..cfa38a6ae87d5276b176d3d382d0fd218472f1db 100644
--- a/DDCore/include/XML/Printout.h
+++ b/DDCore/include/XML/Printout.h
@@ -10,15 +10,15 @@
 // Author     : M.Frank
 //
 //==========================================================================
-#ifndef DD4HEP_DDCORE_XML_PRINTOUT_H
-#define DD4HEP_DDCORE_XML_PRINTOUT_H
+#ifndef DD4HEP_XML_PRINTOUT_H
+#define DD4HEP_XML_PRINTOUT_H
 
 // Forwarding printout functionality to dd4hep
-/** Note: This is necessary to use the XML functionality as a standalone 
+/** Note: This is necessary to use the JSON functionality as a standalone 
  *        utility without the need to externalize the world.
  *
  *  See the externalized header in doc/externalize for details.
  */
-#include "DD4hep/Printout.h"
+#include "Parsers/Printout.h"
 
-#endif   /* DD4HEP_DDCORE_XML_PRINTOUT_H  */
+#endif   /* DD4HEP_XML_PRINTOUT_H  */
diff --git a/DDCore/include/XML/XMLChildValue.h b/DDCore/include/XML/XMLChildValue.h
index 0013fd183fb15c8a8d0ec6d2a5355eb47f59b2ce..d3af31ed433bc98c2232792444b39bc893898602 100644
--- a/DDCore/include/XML/XMLChildValue.h
+++ b/DDCore/include/XML/XMLChildValue.h
@@ -18,7 +18,7 @@
 #include "XML/XMLTags.h"
 
 #define DD4HEP_DIMENSION_NS xml
-#include "XML/detail/ChildValue.h"
+#include "Parsers/detail/ChildValue.h"
 #undef  DD4HEP_DIMENSION_NS
 
 #endif    /* DD4HEP_XML_XMLCHILDVALUE_H   */
diff --git a/DDCore/include/XML/XMLChildValue.inl b/DDCore/include/XML/XMLChildValue.inl
index 346e197ab4a6a25f4e6a1ca990487c7493865a40..7927acab54d0be0325fbbc1bd6ab745f0cc571b2 100644
--- a/DDCore/include/XML/XMLChildValue.inl
+++ b/DDCore/include/XML/XMLChildValue.inl
@@ -18,7 +18,7 @@
 #include "XML/XMLChildValue.h"
 
 #define DD4HEP_DIMENSION_NS xml
-#include "XML/detail/ChildValue.inl"
+#include "Parsers/detail/ChildValue.inl"
 #undef  DD4HEP_DIMENSION_NS
 
 #endif    /* DD4HEP_XML_XMLCHILDVALUE_INL */
diff --git a/DDCore/include/XML/XMLDetector.h b/DDCore/include/XML/XMLDetector.h
index 6f0b63faefd00b9187761629751080011b355a60..d6212c951f8e11878301c8001a07d9444127d1ae 100644
--- a/DDCore/include/XML/XMLDetector.h
+++ b/DDCore/include/XML/XMLDetector.h
@@ -17,7 +17,7 @@
 #include "XML/XMLDimension.h"
 
 #define DD4HEP_DIMENSION_NS xml
-#include "XML/detail/Detector.h"
+#include "Parsers/detail/Detector.h"
 #undef  DD4HEP_DIMENSION_NS
 
 #endif    /* DD4HEP_XMLDETECTOR_H    */
diff --git a/DDCore/include/XML/XMLDimension.h b/DDCore/include/XML/XMLDimension.h
index 9cdc52b5ad9e4b3495e8e2faf6f72c6efec39e81..8f2a3f434786ae858b5505b246bc942068224737 100644
--- a/DDCore/include/XML/XMLDimension.h
+++ b/DDCore/include/XML/XMLDimension.h
@@ -18,7 +18,7 @@
 #include "XML/XMLTags.h"
 
 #define DD4HEP_DIMENSION_NS xml
-#include "XML/detail/Dimension.h"
+#include "Parsers/detail/Dimension.h"
 #undef  DD4HEP_DIMENSION_NS
 
 #endif    /* DD4HEP_XML_XMLDIMENSION_H   */
diff --git a/DDCore/include/XML/XMLDimension.inl b/DDCore/include/XML/XMLDimension.inl
index a9af04f48448a9094d227e5e20007445321a6669..3c962a7e33cee51bb0245cc6c2cb0069cab95456 100644
--- a/DDCore/include/XML/XMLDimension.inl
+++ b/DDCore/include/XML/XMLDimension.inl
@@ -17,7 +17,7 @@
 #include "XML/XMLDimension.h"
 
 #define DD4HEP_DIMENSION_NS xml
-#include "XML/detail/Dimension.inl"
+#include "Parsers/detail/Dimension.inl"
 #undef  DD4HEP_DIMENSION_NS
 
 #endif /* DD4HEP_XMLDIMENSION_INL  */
diff --git a/DDCore/include/XML/XMLElements.h b/DDCore/include/XML/XMLElements.h
index f7fa8b0847ae9e92b108f44e9d7e45f8f0f943e1..d62cfe03f04775ed2ebe7de08c310d45c24ccf21 100644
--- a/DDCore/include/XML/XMLElements.h
+++ b/DDCore/include/XML/XMLElements.h
@@ -21,7 +21,6 @@
 
 // Framework include files
 #include "XML/config.h"
-//#include "DD4hep/Primitives.h"
 
 #ifndef RAD_2_DEGREE
 #define RAD_2_DEGREE 57.295779513082320876798154814105
diff --git a/DDCore/include/XML/config.h b/DDCore/include/XML/config.h
index 7c828c2fc50186e73cf8546abf54b5c4433c60ad..0f2912facaa8cce827ac9e9f7819090f23848de1 100644
--- a/DDCore/include/XML/config.h
+++ b/DDCore/include/XML/config.h
@@ -17,6 +17,8 @@
 #ifndef DD4HEP_XML_CONFIG_H
 #define DD4HEP_XML_CONFIG_H
 
+#include "Parsers/config.h"
+
 #if      defined(DD4HEP_USE_TINYXML)
 #define  __TIXML__
 #endif
@@ -56,4 +58,4 @@ namespace dd4hep {
 #else   // Xerces-C
 #define XML_IMPLEMENTATION_TYPE " Apache Xerces-C DOM Parser"
 #endif  // __TIXML__
-#endif // DD4HEP_XML_CONFIG_H
+#endif  // DD4HEP_XML_CONFIG_H
diff --git a/DDCore/src/AlignmentData.cpp b/DDCore/src/AlignmentData.cpp
index 40349994b2a5562c535d6aef65a166f34fee47f7..1a8fdff951287c602cf172fce0d80a133f0d96e0 100644
--- a/DDCore/src/AlignmentData.cpp
+++ b/DDCore/src/AlignmentData.cpp
@@ -201,8 +201,7 @@ Alignment AlignmentData::nominal() const   {
   return detector.nominal();
 }
 
-#include "DDParsers/Parsers.h"
-#include "DDParsers/ToStream.h"
+#include "Parsers/Parsers.h"
 DD4HEP_DEFINE_PARSER_DUMMY(Delta)
 DD4HEP_DEFINE_PARSER_DUMMY(AlignmentData)
 
diff --git a/DDCore/src/AlignmentsInterna.cpp b/DDCore/src/AlignmentsInterna.cpp
index 8aa2ffa491995b2c440c84792df50d4c7b654274..db86ff0235938da9a448ceb7eb3ed6b1dd8dce8f 100644
--- a/DDCore/src/AlignmentsInterna.cpp
+++ b/DDCore/src/AlignmentsInterna.cpp
@@ -64,8 +64,7 @@ void AlignmentObject::clear()   {
 }
 
 
-#include "DDParsers/Parsers.h"
-#include "DDParsers/ToStream.h"
+#include "Parsers/Parsers.h"
 DD4HEP_DEFINE_PARSER_DUMMY(AlignmentObject)
 
 #include "DD4hep/detail/BasicGrammar_inl.h"
diff --git a/DDCore/src/AlignmentsPrinter.cpp b/DDCore/src/AlignmentsPrinter.cpp
index 23e95fba841baca792aff6bfd20bb6c63c0ace10..6808a167e820cc1dd25e28695787a9e176b16d58 100644
--- a/DDCore/src/AlignmentsPrinter.cpp
+++ b/DDCore/src/AlignmentsPrinter.cpp
@@ -20,7 +20,7 @@
 // C/C++ include files
 #include <sstream>
 #include "TClass.h"
-#include "DDParsers/ToStream.h"
+#include "Parsers/spirit/ToStream.h"
 
 using namespace std;
 using namespace dd4hep;
diff --git a/DDCore/src/ConditionsData.cpp b/DDCore/src/ConditionsData.cpp
index 9e5bba897d121c0bb025ad037ec06e6b0add4bff..6742827ed0560af26c5dcb828f85edcb3293f894 100644
--- a/DDCore/src/ConditionsData.cpp
+++ b/DDCore/src/ConditionsData.cpp
@@ -77,8 +77,7 @@ AbstractMap& AbstractMap::operator=(const AbstractMap& c)  {
   return *this;
 }
 
-#include "DDParsers/Parsers.h"
-#include "DDParsers/ToStream.h"
+#include "Parsers/Parsers.h"
 DD4HEP_DEFINE_PARSER_DUMMY(AbstractMap)
 #include "DD4hep/detail/BasicGrammar_inl.h"
 #include "DD4hep/detail/ConditionsInterna.h"
diff --git a/DDCore/src/ConditionsPrinter.cpp b/DDCore/src/ConditionsPrinter.cpp
index d7ab23d4075f5aca5b8f7d69852cc2cbb93ec4cf..42a729fd2d4d868de0e6df5b0f1c6e4b8ea66031 100644
--- a/DDCore/src/ConditionsPrinter.cpp
+++ b/DDCore/src/ConditionsPrinter.cpp
@@ -12,7 +12,7 @@
 //==========================================================================
 
 // Framework includes
-#include "DDParsers/ToStream.h"
+#include "Parsers/spirit/ToStream.h"
 #include "DD4hep/Printout.h"
 #include "DD4hep/ConditionsData.h"
 #include "DD4hep/ConditionsPrinter.h"
diff --git a/DDCore/src/Handle.cpp b/DDCore/src/Handle.cpp
index f61c0e0a08b625443be88a73bfbe0c12816a3b53..907e0fae281417fa24e3ca6ba62c6960bd2c5b22 100644
--- a/DDCore/src/Handle.cpp
+++ b/DDCore/src/Handle.cpp
@@ -14,7 +14,7 @@
 #include "DD4hep/InstanceCount.h"
 #include "DD4hep/Printout.h"
 #include "DD4hep/detail/Handle.inl"
-#include "DDParsers/Evaluator.h"
+#include "Evaluator/Evaluator.h"
 #include <iostream>
 #include <iomanip>
 #include <climits>
diff --git a/DDCore/src/JSON/Detector.cpp b/DDCore/src/JSON/Detector.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2d4498fca0505823b1ad67b6a63db5edf6579237
--- /dev/null
+++ b/DDCore/src/JSON/Detector.cpp
@@ -0,0 +1,23 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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
+//
+//==========================================================================
+#ifndef DD4HEP_NONE
+
+// Framework include files
+#include "JSON/Detector.h"
+
+// Instantiate here the concrete implementations
+#define DD4HEP_DIMENSION_NS json
+using namespace dd4hep::DD4HEP_DIMENSION_NS;
+
+#include "Parsers/detail/Detector.imp"
+#endif
diff --git a/DDCore/src/JSON/Elements.cpp b/DDCore/src/JSON/Elements.cpp
index 165dbae0701bf8ae6146ed3b03baa08fa52a6b67..ec56f3ac8180499a95b113aba21e7a8d7ed067e3 100644
--- a/DDCore/src/JSON/Elements.cpp
+++ b/DDCore/src/JSON/Elements.cpp
@@ -15,7 +15,6 @@
 #include "JSON/Printout.h"
 #include "JSON/Evaluator.h"
 #include "JSON/Elements.h"
-//#include "XML/XMLTags.h"
 
 // C/C++ include files
 #include <iostream>
diff --git a/DDCore/src/JSON/Helpers.cpp b/DDCore/src/JSON/Helpers.cpp
index fe2d8e665bdeee2b3b47a83ffae373f3424cbecf..bd8bcbff446b9431482c13a7cfaa0c49a4132714 100644
--- a/DDCore/src/JSON/Helpers.cpp
+++ b/DDCore/src/JSON/Helpers.cpp
@@ -12,7 +12,6 @@
 //==========================================================================
 
 // Framework include files
-#include "JSON/Detector.h"
 #include "JSON/Dimension.inl"
 #include "JSON/ChildValue.inl"
 
@@ -20,6 +19,5 @@
 #define DD4HEP_DIMENSION_NS json
 using namespace dd4hep::DD4HEP_DIMENSION_NS;
 
-#include "XML/detail/Detector.imp"
-#include "XML/detail/Dimension.imp"
-#include "XML/detail/ChildValue.imp"
+#include "Parsers/detail/Dimension.imp"
+#include "Parsers/detail/ChildValue.imp"
diff --git a/DDCore/src/OpaqueData.cpp b/DDCore/src/OpaqueData.cpp
index 9f5543cb9f1dbf3d7ffa74a86a4add034fd7959c..16c2d0701dadcb4e6713a64ddf74b2700f027264 100644
--- a/DDCore/src/OpaqueData.cpp
+++ b/DDCore/src/OpaqueData.cpp
@@ -176,8 +176,8 @@ std::ostream& operator << (std::ostream& s, const OpaqueDataBlock& data)   {
   s << data.str();
   return s;
 }
-#include "DDParsers/Parsers.h"
-#include "DDParsers/ToStream.h"
+
+#include "Parsers/Parsers.h"
 DD4HEP_DEFINE_PARSER_DUMMY(OpaqueDataBlock)
 
 #include "DD4hep/detail/BasicGrammar_inl.h"
diff --git a/DDCore/src/Parsers/Exceptions.cpp b/DDCore/src/Parsers/Exceptions.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..29d1f7397525edc161b871eaa81c345afa08df4f
--- /dev/null
+++ b/DDCore/src/Parsers/Exceptions.cpp
@@ -0,0 +1,29 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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 "Parsers/Exceptions.h"
+#include "Parsers/Primitives.h"
+
+using namespace std;
+using namespace dd4hep;
+
+string unrelated_type_error::msg(const type_info& typ1, const type_info& typ2, const string& text) {
+  string m = "The types " + typeName(typ1) + " and " + typeName(typ2) + " are not related. " + text;
+  return m;
+}
+
+string unrelated_value_error::msg(const type_info& typ, const string& text) {
+  string m = "The type " + typeName(typ) + " cannot be converted: " + text;
+  return m;
+}
diff --git a/DDCore/src/Parsers/Primitives.cpp b/DDCore/src/Parsers/Primitives.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..7af056d34f6021310a1124a45d823314e7dbec65
--- /dev/null
+++ b/DDCore/src/Parsers/Primitives.cpp
@@ -0,0 +1,531 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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 "Parsers/Primitives.h"
+#include "Parsers/Exceptions.h"
+#include "Parsers/Printout.h"
+
+// C/C++ include files
+#include <algorithm>
+#include <functional>
+#include <numeric>
+#include <stdexcept>
+#include <cstdint>
+#include <cstring>
+#include <map>
+
+#if defined(__linux) || defined(__APPLE__)
+#include <cxxabi.h>
+#ifndef __APPLE__
+typedef abi::__class_type_info class_t;
+using   abi::__dynamic_cast;
+#endif
+#endif
+
+/// Local Utilities
+namespace {
+
+#if 0
+//-----------------------------------------------------------------------------
+// MurmurHash2, 64-bit versions, by Austin Appleby
+//
+// The same caveats as 32-bit MurmurHash2 apply here - beware of alignment 
+// and endian-ness issues if used across multiple platforms.
+  inline uint64_t murmur_hash_64 ( const void * key, int len)  {
+#define seed 0xFEEDBABE
+    typedef unsigned long long int uint64;
+
+#if INTPTR_MAX == INT32_MAX
+    const unsigned int * data = (const unsigned int *)key;
+    const unsigned int m = 0x5bd1e995;
+    const int r = 24;
+
+    unsigned int h1 = seed ^ len;
+    unsigned int h2 = 0;
+
+    while(len >= 8)
+    {
+      unsigned int k1 = *data++;
+      k1 *= m; k1 ^= k1 >> r; k1 *= m;
+      h1 *= m; h1 ^= k1;
+      len -= 4;
+
+      unsigned int k2 = *data++;
+      k2 *= m; k2 ^= k2 >> r; k2 *= m;
+      h2 *= m; h2 ^= k2;
+      len -= 4;
+    }
+
+    if(len >= 4)
+    {
+      unsigned int k1 = *data++;
+      k1 *= m; k1 ^= k1 >> r; k1 *= m;
+      h1 *= m; h1 ^= k1;
+      len -= 4;
+    }
+
+    switch(len)
+    {
+    case 3: h2 ^= ((unsigned char*)data)[2] << 16;
+    case 2: h2 ^= ((unsigned char*)data)[1] << 8;
+    case 1: h2 ^= ((unsigned char*)data)[0];
+      h2 *= m;
+    };
+
+    h1 ^= h2 >> 18; h1 *= m;
+    h2 ^= h1 >> 22; h2 *= m;
+    h1 ^= h2 >> 17; h1 *= m;
+    h2 ^= h1 >> 19; h2 *= m;
+
+    uint64 h = h1;
+
+    h = (h << 32) | h2;
+#elif INTPTR_MAX == INT64_MAX
+    const uint64* data = (const uint64*)key;
+    const uint64 m = 0xc6a4a7935bd1e995;
+    const int r = 47;
+
+    uint64 h = seed ^ (len * m);
+
+    const uint64 * end = data + (len/8);
+
+    while(data != end)
+    {
+      uint64 k = *data++;
+
+      k *= m; 
+      k ^= k >> r; 
+      k *= m; 
+		
+      h ^= k;
+      h *= m; 
+    }
+
+    const unsigned char * data2 = (const unsigned char*)data;
+
+    switch(len & 7)
+    {
+    case 7: h ^= uint64(data2[6]) << 48;
+    case 6: h ^= uint64(data2[5]) << 40;
+    case 5: h ^= uint64(data2[4]) << 32;
+    case 4: h ^= uint64(data2[3]) << 24;
+    case 3: h ^= uint64(data2[2]) << 16;
+    case 2: h ^= uint64(data2[1]) << 8;
+    case 1: h ^= uint64(data2[0]);
+      h *= m;
+    };
+ 
+    h ^= h >> r;
+    h *= m;
+    h ^= h >> r;
+
+#else
+#error "Environment not 32 or 64-bit."
+#endif
+    return h;
+  }
+#endif
+
+  struct FNV1a_64 {
+    static const unsigned long long int hashinit = 14695981039346656037ull;
+    static constexpr unsigned long long int doByte(unsigned long long int hash,unsigned char val)
+    { return (hash ^ val) * 1099511628211ull; }
+  };
+}
+
+/// Convert volumeID to string format (016X)
+std::string dd4hep::volumeID(VolumeID vid)   {
+  char text[32];
+  ::snprintf(text,sizeof(text),"%016llx",vid);
+  return text;
+}
+
+/// We need it so often: one-at-time 64 bit hash function
+unsigned long long int dd4hep::detail::hash64(const char* key)   {
+  //return murmur_hash_64(key, strlen(key));
+  unsigned char* str = (unsigned char*)key;
+  unsigned long long int hash = FNV1a_64::hashinit;
+  for ( ; *str; ++str) hash = FNV1a_64::doByte(hash, *str);
+  return hash;
+}
+
+unsigned long long int dd4hep::detail::hash64(const std::string& key)  {
+  //return murmur_hash_64(key.data(), key.length());
+  return std::accumulate(begin(key),end(key),FNV1a_64::hashinit,FNV1a_64::doByte);
+}
+
+long int dd4hep::detail::makeTime(int year, int month, int day,
+                          int hour, int minutes, int seconds)
+{
+  struct tm tm_init;
+  ::memset(&tm_init,0,sizeof(tm_init));
+  tm_init.tm_year  = year > 1900 ? year-1900 : year;
+  tm_init.tm_mon   = month;
+  tm_init.tm_mday  = day;
+  tm_init.tm_hour  = hour;
+  tm_init.tm_min   = minutes;
+  tm_init.tm_sec   = seconds;
+  tm_init.tm_isdst = -1;
+  long int ti = ::mktime(&tm_init);
+  if ( ti >= 0 ) return ti;
+  except("dd4hep","Invalid time data given for conversion to epoch: %d-%d-%d %02d:%02d:%02d",
+         year, month, day, hour, minutes, seconds);
+  return ti;
+}
+
+/// Convert date into epoch time (seconds since 1970)
+long int dd4hep::detail::makeTime(const std::string& date, const char* fmt)  {
+  struct tm tm;
+  char* c = ::strptime(date.c_str(),fmt,&tm);
+  if ( 0 == c )   {
+    except("dd4hep",
+           "Invalid time format given for update:%s should be: %s",
+           date.c_str(), fmt);
+  }
+  long ti = ::mktime(&tm);
+  if ( ti >= 0 ) return ti;
+  except("dd4hep",
+         "Invalid time string given for conversion to epoch: %s (fmt='%s')",
+         date.c_str(), fmt);
+  return ti;
+}
+
+static const std::string __typeinfoName(const std::type_info& tinfo) {
+  const char* class_name = tinfo.name();
+  std::string result;
+#ifdef WIN32
+  std::size_t off = 0;
+  if ( ::strncmp(class_name, "class ", 6) == 0 ) {
+    // The returned name is prefixed with "class "
+    off = 6;
+  }
+  if ( ::strncmp(class_name, "struct ", 7) == 0 ) {
+    // The returned name is prefixed with "struct "
+    off = 7;
+  }
+  if ( off != std::string::npos ) {
+    std::string tmp = class_name + off;
+    size_t loc = 0;
+    while( (loc = tmp.find("class ")) != std::string::npos ) {
+      tmp.erase(loc, 6);
+    }
+    loc = 0;
+    while( (loc = tmp.find("struct ")) != std::string::npos ) {
+      tmp.erase(loc, 7);
+    }
+    result = tmp;
+  }
+  else {
+    result = class_name;
+  }
+  // Change any " *" to "*"
+  while ( (off=result.find(" *")) != std::string::npos ) {
+    result.replace(off, 2, "*");
+  }
+  // Change any " &" to "&"
+  while ( (off=result.find(" &")) != std::string::npos ) {
+    result.replace(off, 2, "&");
+  }
+#elif defined(sun)
+  result = class_name;
+#elif !defined(__ICC)
+  if (::strlen(class_name) == 1) {
+    // See http://www.realitydiluted.com/mirrors/reality.sgi.com/dehnert_engr/cxx/abi.pdf
+    // for details
+    switch (class_name[0]) {
+    case 'v':
+      result = "void";
+      break;
+    case 'w':
+      result = "wchar_t";
+      break;
+    case 'b':
+      result = "bool";
+      break;
+    case 'c':
+      result = "char";
+      break;
+    case 'h':
+      result = "unsigned char";
+      break;
+    case 's':
+      result = "short";
+      break;
+    case 't':
+      result = "unsigned short";
+      break;
+    case 'i':
+      result = "int";
+      break;
+    case 'j':
+      result = "unsigned int";
+      break;
+    case 'l':
+      result = "long";
+      break;
+    case 'm':
+      result = "unsigned long";
+      break;
+    case 'x':
+      result = "long long";
+      break;
+    case 'y':
+      result = "unsigned long long";
+      break;
+    case 'n':
+      result = "__int128";
+      break;
+    case 'o':
+      result = "unsigned __int128";
+      break;
+    case 'f':
+      result = "float";
+      break;
+    case 'd':
+      result = "double";
+      break;
+    case 'e':
+      result = "long double";
+      break;
+    case 'g':
+      result = "__float128";
+      break;
+    case 'z':
+      result = "ellipsis";
+      break;
+    }
+  }
+  else {
+    char buff[16 * 1024];
+    std::size_t len = sizeof(buff);
+    int status = 0;
+    result = __cxxabiv1::__cxa_demangle(class_name, buff, &len, &status);
+  }
+#else
+  result = class_name;
+  throw std::runtime_error("CXXABI is missing for ICC!");
+#endif
+  return result;
+}
+
+std::string dd4hep::typeName(const std::type_info& typ) {
+  return __typeinfoName(typ);
+}
+
+void dd4hep::invalidHandleError(const std::type_info& type)
+{
+  throw invalid_handle_exception("Attempt to access invalid object of type "+typeName(type)+" [Invalid Handle]");
+}
+
+void dd4hep::invalidHandleAssignmentError(const std::type_info& from, 
+                                          const std::type_info& to)
+{
+  std::string msg = "Wrong assingment from ";
+  msg += typeName(from);
+  msg += " to ";
+  msg += typeName(to);
+  msg += " not possible!!";
+  throw invalid_handle_exception(msg);
+}
+
+/// Throw exception when handles are check for validity
+void dd4hep::notImplemented(const std::string& msg)
+{
+  std::string m = "The requested feature " + msg + " is not implemented!";
+  throw std::runtime_error(m);
+}
+
+void dd4hep::typeinfoCheck(const std::type_info& typ1, const std::type_info& typ2, const std::string& text)
+{
+  if (typ1 != typ2) {
+    throw unrelated_type_error(typ1, typ2, text);
+  }
+}
+
+namespace dd4hep   {
+  namespace detail  {
+    template<> const char* Primitive<bool>::default_format()           { return "%d"; }
+    template<> const char* Primitive<char>::default_format()           { return "%c"; }
+    template<> const char* Primitive<unsigned char>::default_format()  { return "%02X"; }
+    template<> const char* Primitive<short>::default_format()          { return "%d"; }
+    template<> const char* Primitive<unsigned short>::default_format() { return "%04X"; }
+    template<> const char* Primitive<int>::default_format()            { return "%d"; }
+    template<> const char* Primitive<unsigned int>::default_format()   { return "%08X"; }
+    template<> const char* Primitive<long>::default_format()           { return "%ld"; }
+    template<> const char* Primitive<unsigned long>::default_format()  { return "%016X"; }
+    template<> const char* Primitive<float>::default_format()          { return "%f"; }
+    template<> const char* Primitive<double>::default_format()         { return "%g"; }
+    template<> const char* Primitive<char*>::default_format()          { return "%s"; }
+    template<> const char* Primitive<const char*>::default_format()    { return "%s"; }
+    template<> const char* Primitive<std::string>::default_format()    { return "%s"; }
+
+    /// Generic function to convert to string
+    template <typename T> std::string Primitive<T>::toString(T value) {
+      char text[1024];
+      ::snprintf(text,sizeof(text),default_format(),value);
+      return text;
+    }
+
+    /// Convert string to string
+    template <> std::string Primitive<const char*>::toString(const char* value) {
+      if ( value )  {
+        return value;
+      }
+      throw std::runtime_error("Failed to convert (char*)NULL to std::string!");
+    }
+    /// Convert string to string
+    template <> std::string Primitive<char*>::toString(char* value) {
+      if ( value )  {
+        return value;
+      }
+      throw std::runtime_error("Failed to convert (char*)NULL to std::string!");
+    }
+    /// Convert string to string
+    template <> std::string Primitive<std::string>::toString(std::string value) {
+      return value;
+    }
+
+    template std::string Primitive<bool>::toString(bool value);
+    template std::string Primitive<char>::toString(char value);
+    template std::string Primitive<unsigned char>::toString(unsigned char value);
+    template std::string Primitive<short>::toString(short value);
+    template std::string Primitive<unsigned short>::toString(unsigned short value);
+    template std::string Primitive<int>::toString(int value);
+    template std::string Primitive<unsigned int>::toString(unsigned int value);
+    template std::string Primitive<long>::toString(long value);
+    template std::string Primitive<unsigned long>::toString(unsigned long value);
+    template std::string Primitive<float>::toString(float value);
+    template std::string Primitive<double>::toString(double value);
+  }
+}
+
+/// Initializing Constructor
+dd4hep::ComponentCast::ComponentCast(const std::type_info& t, destroy_t d, cast_t c)
+  : type(t), destroy(d), cast(c) {
+#ifdef __APPLE__
+  abi_class = 0;
+#else
+  abi_class = dynamic_cast<const class_t*>(&type);
+  if (!abi_class) {
+    throw std::runtime_error("Class type " + typeName(type) + " is not an abi object type!");
+  }
+#endif
+}
+
+/// Defautl destructor
+dd4hep::ComponentCast::~ComponentCast() {
+}
+
+#if 0
+// Dynamic cast runtime.
+// src2dst has the following possible values
+//  >-1: src_type is a unique public non-virtual base of dst_type
+//       dst_ptr + src2dst == src_ptr
+//   -1: unspecified relationship
+//   -2: src_type is not a public base of dst_type
+//   -3: src_type is a multiple public non-virtual base of dst_type
+extern "C" void*
+__dynamic_cast(const void* __src_ptr,// Starting object.
+               const abi::__class_type_info* __src_type,// Static type of object.
+               const abi::__class_type_info* __dst_type,// Desired target type.
+               ptrdiff_t __src2dst);// How src and dst are related.
+#endif
+#if 0
+#ifndef __APPLE__
+static inline void* cast_wrap(const void* p,
+                              const abi::__class_type_info* src,
+                              const abi::__class_type_info* dst,
+                              ptrdiff_t src2dst)
+{
+  return abi::__dynamic_cast(p,src,dst,src2dst);
+}
+#endif
+#endif
+
+/// Apply cast using typeinfo instead of dynamic_cast
+void* dd4hep::ComponentCast::apply_dynCast(const ComponentCast& to, const void* ptr) const
+{
+  if (&to == this) {
+    return (void*) ptr;
+  }
+#ifdef __APPLE__
+  // First try down cast
+  void *r = (*to.cast)(ptr);
+  if (r)
+    return r;
+  // Now try the up-cast
+  r = (*cast)(ptr);
+  if (r)      return r;
+  throw unrelated_type_error(type, to.type, "Failed to apply abi dynamic cast operation!");
+#else
+  void* r = (void*)ptr;
+  if ( to.abi_class )  {
+    bool cast_worked = type.__do_upcast((const class_t*)to.abi_class,&r);
+    if ( cast_worked ) return r;
+    r = (void*)ptr;
+    cast_worked = to.type.__do_upcast((const class_t*)abi_class,&r);
+    if ( cast_worked ) return r;
+#if 0
+    const class_t* src_type = (const class_t*)to.abi_class;
+    if (src_type) {
+      // First try down cast
+      void *r = cast_wrap(ptr, src_type, (const class_t*) abi_class, -1);
+      if ( r ) return r;
+      // Now try the up-cast
+      r = cast_wrap(ptr, (const class_t*) abi_class, src_type, -1);
+      if (r)      return r;
+    }
+#endif
+    throw unrelated_type_error(type, to.type, "Failed to apply abi dynamic cast operation!");
+  }
+  throw unrelated_type_error(type, to.type, "Target type is not an abi class type!");
+#endif
+}
+
+/// Apply cast using typeinfo instead of dynamic_cast
+void* dd4hep::ComponentCast::apply_upCast(const ComponentCast& to, const void* ptr) const
+{
+  if (&to == this) {
+    return (void*) ptr;
+  }
+  return apply_dynCast(to, ptr);
+}
+  
+/// Apply cast using typeinfo instead of dynamic_cast
+void* dd4hep::ComponentCast::apply_downCast(const ComponentCast& to, const void* ptr) const
+{
+  if (&to == this) {
+    return (void*) ptr;
+  }
+#ifdef __APPLE__
+  void *r = (*to.cast)(ptr);
+  if (r) return r;
+  throw unrelated_type_error(type, to.type, "Failed to apply abi dynamic cast operation!");
+#else
+  if ( to.abi_class )  {
+    // Since we have to cast a 'to' pointer up to the real pointer
+    // no virtual inheritance can be supported!
+    void* r = (void*)ptr;
+    bool cast_worked = type.__do_upcast((const class_t*)to.abi_class,&r);
+    if ( cast_worked ) return r;
+#if 0
+    void *r = cast_wrap(ptr, src_type, (const class_t*)abi_class, -1);
+    if (r) return r;
+#endif
+    throw unrelated_type_error(type, to.type, "Failed to apply abi dynamic cast operation!");
+  }
+  throw unrelated_type_error(type, to.type, "Target type is not an abi class type!");
+#endif
+}
+
diff --git a/DDCore/src/Parsers/Printout.cpp b/DDCore/src/Parsers/Printout.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..27ed3b149454d84c7821bff35ca17297c8859a7d
--- /dev/null
+++ b/DDCore/src/Parsers/Printout.cpp
@@ -0,0 +1,414 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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 "Parsers/Printout.h"
+
+// C/C++ include files
+#include <cstring>
+#include <cstdarg>
+#include <sstream>
+#include <stdexcept>
+
+// Disable some diagnostics for ROOT dictionaries
+#ifdef __GNUC__
+#pragma GCC diagnostic ignored "-Wvarargs"
+#endif
+
+using namespace std;
+
+namespace {
+  size_t _the_printer_1(void*, dd4hep::PrintLevel lvl, const char* src, const char* text);
+  size_t _the_printer_2(void* par, dd4hep::PrintLevel lvl, const char* src, const char* fmt, va_list& args);
+
+  std::string print_fmt = "%-16s %5s %s";
+  dd4hep::PrintLevel print_lvl = dd4hep::INFO;
+  void* print_arg = 0;
+  dd4hep::output_function1_t print_func_1 = 0;
+  dd4hep::output_function2_t print_func_2 = _the_printer_2;
+
+  const char* print_level(dd4hep::PrintLevel lvl)   {
+    switch(lvl)   {
+    case dd4hep::NOLOG:     return "NOLOG";
+    case dd4hep::VERBOSE:   return "VERB ";
+    case dd4hep::DEBUG:     return "DEBUG";
+    case dd4hep::INFO:      return "INFO ";
+    case dd4hep::WARNING:   return "WARN ";
+    case dd4hep::ERROR:     return "ERROR";
+    case dd4hep::FATAL:     return "FATAL";
+    case dd4hep::ALWAYS:    return "     ";
+    default:
+      if ( lvl> dd4hep::ALWAYS )
+        return print_level(dd4hep::ALWAYS);
+      return print_level(dd4hep::NOLOG);
+    }
+  }
+
+  size_t _the_printer_1(void*, dd4hep::PrintLevel lvl, const char* src, const char* text) {
+    ::fflush(stdout);
+    ::fflush(stderr);
+    cout << flush;
+    cerr << flush;
+    size_t len = ::fprintf(stdout, print_fmt.c_str(), src, print_level(lvl), text);
+    ::fputc('\n',stdout);
+    return len;
+  }
+
+  size_t _the_printer_2(void* par, dd4hep::PrintLevel lvl, const char* src, const char* fmt, va_list& args) {
+    if ( !print_func_1 )  {
+      char text[4096];
+      ::fflush(stdout);
+      ::fflush(stderr);
+      cout << flush;
+      cerr << flush;
+      ::snprintf(text,sizeof(text),print_fmt.c_str(),src,print_level(lvl),fmt);
+      size_t len = ::vfprintf(stdout, text, args);
+      ::fputc('\n',stdout);
+      return len;
+    }
+    char str[4096];
+    ::vsnprintf(str, sizeof(str), fmt, args);
+    return print_func_1(par, lvl, src, str);
+  }
+
+  string __format(const char* fmt, va_list& args) {
+    char str[4096];
+    ::vsnprintf(str, sizeof(str), fmt, args);
+    return string(str);
+  }
+}
+
+/// Helper function to serialize argument list to a single string
+/**
+ *  \arg argc       [int,read-only]      Number of arguments.
+ *  \arg argv       [char**,read-only]   Argument strings
+ *  \return String containing the concatenated arguments
+ */
+string dd4hep::arguments(int argc, char** argv)   {
+  stringstream str;
+  for(int i=0; i<argc;)  {
+    str << argv[i];
+    if ( ++i < argc ) str << " ";
+  }
+  return str.str();
+}  
+
+/// Calls the display action with a given severity level
+/**
+ *  @arg severity   [int,read-only]      Display severity flag (see enum)
+ *  @arg src        [string,read-only]   Information source (component, etc.)
+ *  @arg str        [stringstream, RW]   string stream containing data to be printed.
+ *                                       Object is reset after use.
+ *  @return Status code indicating success or failure
+ */
+int dd4hep::printout(PrintLevel severity, const char* src, std::stringstream& str)   {
+  int ret = 1;
+  if (severity >= print_lvl) {
+    ret = printout(severity, src, str.str().c_str());
+  }
+  str.str("");
+  return ret;
+}
+
+/// Calls the display action with a given severity level
+/**
+ *  @arg severity   [int,read-only]      Display severity flag (see enum)
+ *  @arg src        [string,read-only]   Information source (component, etc.)
+ *  @arg str        [stringstream, RW]   string stream containing data to be printed.
+ *                                       Object is reset after use.
+ *  @return Status code indicating success or failure
+ */
+int dd4hep::printout(PrintLevel severity, const std::string& src, std::stringstream& str)   {
+  int ret = 1;
+  if (severity >= print_lvl) {
+    ret = printout(severity, src, str.str().c_str());
+  }
+  str.str("");
+  return ret;
+}
+
+/** Calls the display action
+ *  \arg severity   [int,read-only]      Display severity flag
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::printout(PrintLevel severity, const char* src, const char* fmt, ...) {
+  if (severity >= print_lvl) {
+    va_list args;
+    va_start(args, fmt);
+    printout(severity, src, fmt, args);
+    va_end(args);
+  }
+  return 1;
+}
+
+/** Calls the display action
+ *  \arg severity   [int,read-only]      Display severity flag
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::printout(PrintLevel severity, const string& src, const char* fmt, ...) {
+  if (severity >= print_lvl) {
+    va_list args;
+    va_start(args, fmt);
+    printout(severity, src.c_str(), fmt, args);
+    va_end(args);
+  }
+  return 1;
+}
+
+/** Calls the display action
+ *  \arg severity   [int,read-only]      Display severity flag
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::printout(PrintLevel severity, const char* src, const string& fmt, ...) {
+  if (severity >= print_lvl) {
+    va_list args;
+    va_start(args, &fmt);
+    printout(severity, src, fmt.c_str(), args);
+    va_end(args);
+  }
+  return 1;
+}
+
+/** Calls the display action
+ *  \arg severity   [int,read-only]      Display severity flag
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::printout(PrintLevel severity, const string& src, const string& fmt, ...) {
+  if (severity >= print_lvl) {
+    va_list args;
+    va_start(args, &fmt);
+    printout(severity, src.c_str(), fmt.c_str(), args);
+    va_end(args);
+  }
+  return 1;
+}
+
+/** Calls the display action
+ *  \arg severity   [int,read-only]      Display severity flag
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::printout(PrintLevel severity, const char* src, const char* fmt, va_list& args) {
+  if (severity >= print_lvl) {
+    print_func_2(print_arg, severity,src,fmt,args);
+  }
+  return 1;
+}
+
+/** Calls the display action
+ *  \arg severity   [int,read-only]      Display severity flag
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::printout(PrintLevel severity, const string& src, const char* fmt, va_list& args) {
+  return printout(severity, src.c_str(), fmt, args);
+}
+
+/** Calls the display action
+ *  \arg severity   [int,read-only]      Display severity flag
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::printout(PrintLevel severity, const char* src, const string& fmt, va_list& args) {
+  return printout(severity, src, fmt.c_str(), args);
+}
+
+/** Calls the display action
+ *  \arg severity   [int,read-only]      Display severity flag
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::printout(PrintLevel severity, const string& src, const string& fmt, va_list& args) {
+  return printout(severity, src.c_str(), fmt.c_str(), args);
+}
+
+/** Calls the display action with ERROR and throws an std::runtime_error exception
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::except(const string& src, const string& fmt, ...) {
+  va_list args;
+  va_start(args, &fmt);
+  return except(src.c_str(),fmt.c_str(), args);
+}
+
+/** Calls the display action with ERROR and throws an std::runtime_error exception
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::except(const char* src, const char* fmt, ...) {
+  va_list args;
+  va_start(args, fmt);
+  return except(src, fmt, args);
+}
+
+/** Calls the display action with ERROR and throws an std::runtime_error exception
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::except(const string& src, const string& fmt, va_list& args) {
+  string msg = __format(fmt.c_str(), args);
+  va_end(args);
+  printout(ERROR, src.c_str(), "%s", msg.c_str());
+  // No return. Must call va_end here!
+  throw runtime_error((src+": "+msg).c_str());
+}
+
+/** Calls the display action with ERROR and throws an std::runtime_error exception
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+ *  \return Status code indicating success or failure
+ */
+int dd4hep::except(const char* src, const char* fmt, va_list& args) {
+  string msg = __format(fmt, args);
+  va_end(args);
+  printout(ERROR, src, "%s", msg.c_str());
+  // No return. Must call va_end here!
+  throw runtime_error((string(src)+": "+msg).c_str());
+}
+
+/** Build exception string
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+string dd4hep::format(const string& src, const string& fmt, ...) {
+  va_list args;
+  va_start(args, &fmt);
+  string str = format(src, fmt, args);
+  va_end(args);
+  return str;
+}
+
+/** Build exception string
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \return Status code indicating success or failure
+ */
+string dd4hep::format(const char* src, const char* fmt, ...) {
+  va_list args;
+  va_start(args, fmt);
+  string str = format(src, fmt, args);
+  va_end(args);
+  return str;
+}
+
+/** Build exception string and throw std::runtime_error
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+ *  \return Status code indicating success or failure
+ */
+string dd4hep::format(const string& src, const string& fmt, va_list& args) {
+  return format(src.c_str(), fmt.c_str(), args);
+}
+
+/** Build exception string and throw std::runtime_error
+ *  \arg src        [string,read-only]   Information source (component, etc.)
+ *  \arg fmt        [string,read-only]   Format string for ellipsis args
+ *  \arg args       [ap_list,read-only]  List with variable number of arguments to fill format string.
+ *  \return Status code indicating success or failure
+ */
+string dd4hep::format(const char* src, const char* fmt, va_list& args) {
+  char str[4096];
+  size_t len1 = ::snprintf(str, sizeof(str), "%s: ", src);
+  size_t len2 = ::vsnprintf(str + len1, sizeof(str) - len1, fmt, args);
+  if ( len2 > sizeof(str) - len1 )  {
+    len2 = sizeof(str) - len1 - 1;
+    str[sizeof(str)-1] = 0;
+  }
+  return string(str);
+}
+
+/// Set new print level. Returns the old print level
+dd4hep::PrintLevel dd4hep::setPrintLevel(PrintLevel new_level) {
+  PrintLevel old = print_lvl;
+  print_lvl = new_level;
+  return old;
+}
+
+/// Access the current printer level
+dd4hep::PrintLevel dd4hep::printLevel()  {
+  return print_lvl;
+}
+
+/// Translate the printer level from string to value
+dd4hep::PrintLevel dd4hep::printLevel(const char* value)  {
+  if ( !value ) except("Printout","Invalid printlevel requested [EINVAL: Null-pointer argument]");
+  // Explicit values
+  if ( strcmp(value,"NOLOG")   == 0 ) return dd4hep::NOLOG;
+  if ( strcmp(value,"VERBOSE") == 0 ) return dd4hep::VERBOSE;
+  if ( strcmp(value,"DEBUG")   == 0 ) return dd4hep::DEBUG;
+  if ( strcmp(value,"INFO")    == 0 ) return dd4hep::INFO;
+  if ( strcmp(value,"WARNING") == 0 ) return dd4hep::WARNING;
+  if ( strcmp(value,"ERROR")   == 0 ) return dd4hep::ERROR;
+  if ( strcmp(value,"FATAL")   == 0 ) return dd4hep::FATAL;
+  if ( strcmp(value,"ALWAYS")  == 0 ) return dd4hep::ALWAYS;
+  // Numeric values
+  if ( strcmp(value,"0")       == 0 ) return dd4hep::NOLOG;
+  if ( strcmp(value,"1")       == 0 ) return dd4hep::VERBOSE;
+  if ( strcmp(value,"2")       == 0 ) return dd4hep::DEBUG;
+  if ( strcmp(value,"3")       == 0 ) return dd4hep::INFO;
+  if ( strcmp(value,"4")       == 0 ) return dd4hep::WARNING;
+  if ( strcmp(value,"5")       == 0 ) return dd4hep::ERROR;
+  if ( strcmp(value,"6")       == 0 ) return dd4hep::FATAL;
+  if ( strcmp(value,"7")       == 0 ) return dd4hep::ALWAYS;
+  except("Printout","Unknown printlevel requested:%s",value);
+  return dd4hep::ALWAYS;
+}
+
+/// Translate the printer level from string to value
+dd4hep::PrintLevel dd4hep::printLevel(const std::string& value)  {
+  return printLevel(value.c_str());
+}
+
+/// Check if this print level would result in some output
+bool dd4hep::isActivePrintLevel(int severity)   {
+  return severity >= print_lvl;
+}
+
+/// Set new printout format for the 3 fields: source-level-message. All 3 are strings
+string dd4hep::setPrintFormat(const string& new_format) {
+  string old = print_fmt;
+  print_fmt  = new_format;
+  return old;
+}
+
+/// Customize printer function
+void dd4hep::setPrinter(void* arg, output_function1_t fcn) {
+  print_arg  = arg;
+  print_func_1 = fcn ? fcn : _the_printer_1;
+}
+
+/// Customize printer function
+void dd4hep::setPrinter2(void* arg, output_function2_t fcn) {
+  print_arg = arg;
+  print_func_2 = fcn ? fcn : _the_printer_2;
+}
diff --git a/DDCore/src/RootDictionary.h b/DDCore/src/RootDictionary.h
index 3d48c0fed0a23d171f07e9a0b3763039d827ec13..de986c74e6845299b98e653537821e804a2d5948 100644
--- a/DDCore/src/RootDictionary.h
+++ b/DDCore/src/RootDictionary.h
@@ -17,7 +17,7 @@
 #define DD4HEP_DDCORE_ROOTDICTIONARY_H
 
 // Framework include files
-#include "DDParsers/Evaluator.h"
+#include "Evaluator/Evaluator.h"
 #include "DD4hep/DD4hepRootPersistency.h"
 #include "DD4hep/Printout.h"
 #include "DD4hep/detail/Grammar.h"
diff --git a/DDCore/src/XML/Detector.cpp b/DDCore/src/XML/Detector.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..693f390d2ccc1ee5157083ac0d43479ed576b64e
--- /dev/null
+++ b/DDCore/src/XML/Detector.cpp
@@ -0,0 +1,23 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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
+//
+//==========================================================================
+#ifndef DD4HEP_NONE
+
+// Framework include files
+#include "XML/XMLDetector.h"
+
+// Instantiate here the concrete implementations
+#define DD4HEP_DIMENSION_NS xml
+using namespace dd4hep::DD4HEP_DIMENSION_NS;
+
+#include "Parsers/detail/Detector.imp"
+#endif
diff --git a/DDCore/src/XML/Layering.cpp b/DDCore/src/XML/Layering.cpp
index 060cc0c4b9e234a5c1eb79533af61dd1a27d67ab..93dff1bc9343e521b4909c5aebfb3a5bb20db202 100644
--- a/DDCore/src/XML/Layering.cpp
+++ b/DDCore/src/XML/Layering.cpp
@@ -10,6 +10,7 @@
 // Author     : M.Frank
 //
 //==========================================================================
+#ifndef DD4HEP_NONE
 
 // Framework include files
 #include "DD4hep/Primitives.h"
@@ -128,4 +129,4 @@ Layering::~Layering(){
   for_each(layers.begin(), layers.end(), detail::deletePtr<Layer>);
   layers.clear();
 }
-
+#endif
diff --git a/DDCore/src/XML/Utilities.cpp b/DDCore/src/XML/Utilities.cpp
index 7dd5a5fdabf160083774c43249a8b6f6b41c07a0..20b0fcaac2ebbdbd2d2cf88ea59a57c94b02e90c 100644
--- a/DDCore/src/XML/Utilities.cpp
+++ b/DDCore/src/XML/Utilities.cpp
@@ -10,6 +10,7 @@
 // Author     : M.Frank
 //
 //==========================================================================
+#ifndef DD4HEP_NONE
 
 // Framework include files
 #include "XML/Utilities.h"
@@ -130,3 +131,4 @@ void  dd4hep::xml::setDetectorTypeFlag( dd4hep::xml::Handle_t e, dd4hep::DetElem
              det_name.c_str() ) ; 
   }
 }
+#endif
diff --git a/DDCore/src/XML/XMLElements.cpp b/DDCore/src/XML/XMLElements.cpp
index 0283b7e14ba701b69de430db1d9287b2d52efd5a..821a4a43000f8d0d362ecb90db49519cedeed626 100644
--- a/DDCore/src/XML/XMLElements.cpp
+++ b/DDCore/src/XML/XMLElements.cpp
@@ -12,7 +12,7 @@
 //==========================================================================
 
 // Framework include files
-#include "DDParsers/Evaluator.h"
+#include "XML/Evaluator.h"
 #include "XML/XMLElements.h"
 #include "XML/Printout.h"
 #include "XML/XMLTags.h"
diff --git a/DDCore/src/XML/XMLHelpers.cpp b/DDCore/src/XML/XMLHelpers.cpp
index d70e8384af132aeda309bc2f61242c35885999cb..59fa2b888bfded25d34b0b436eade6305b97c63a 100644
--- a/DDCore/src/XML/XMLHelpers.cpp
+++ b/DDCore/src/XML/XMLHelpers.cpp
@@ -12,7 +12,6 @@
 //==========================================================================
 
 // Framework include files
-#include "XML/XMLDetector.h"
 #include "XML/XMLDimension.inl"
 #include "XML/XMLChildValue.inl"
 
@@ -20,6 +19,5 @@
 #define DD4HEP_DIMENSION_NS xml
 using namespace dd4hep::DD4HEP_DIMENSION_NS;
 
-#include "XML/detail/Detector.imp"
-#include "XML/detail/Dimension.imp"
-#include "XML/detail/ChildValue.imp"
+#include "Parsers/detail/Dimension.imp"
+#include "Parsers/detail/ChildValue.imp"
diff --git a/DDCore/src/XML/XMLParsers.cpp b/DDCore/src/XML/XMLParsers.cpp
index 06d68b3c18305f7b726bf63000c51bf0c8539f4d..f3228de0fdecc8a1f477deb4cf67464f05a46b57 100644
--- a/DDCore/src/XML/XMLParsers.cpp
+++ b/DDCore/src/XML/XMLParsers.cpp
@@ -12,6 +12,7 @@
 //  \version  1.0
 //
 //==========================================================================
+#ifndef DD4HEP_NONE
 
 // Framework include files
 #include "DD4hep/Objects.h"
@@ -130,3 +131,5 @@ void dd4hep::xml::parse_sequence(xml_h e, OpaqueDataBlock& block)    {
            "++ Failed to convert unknown sequence conditions type: %s",typ.c_str());
   }
 }
+
+#endif
diff --git a/DDG4/CMakeLists.txt b/DDG4/CMakeLists.txt
index 38687720772dd61ae0169e65e6992ce5ea754a64..df438aa03969f4891bf4a054392bc77e0f74bd22 100644
--- a/DDG4/CMakeLists.txt
+++ b/DDG4/CMakeLists.txt
@@ -10,6 +10,7 @@
 #==========================================================================
 dd4hep_package(    DDG4
   USES            [GEANT4 REQUIRED COMPONENTS gdml ui_all vis_all]
+                  [ROOT   REQUIRED COMPONENTS Geom GenVector RIO]
                    BOOST DDCore
   OPTIONAL         CLHEP [XercesC QUIET]
   INCLUDE_DIRS     include
diff --git a/DDG4/include/DDG4/Geant4InputAction.h b/DDG4/include/DDG4/Geant4InputAction.h
index 7c4be855a74995b1f5f0613a7043c31ed6589c33..8cc13836620da0cd94bbf89b4a7b02b11f63dc36 100644
--- a/DDG4/include/DDG4/Geant4InputAction.h
+++ b/DDG4/include/DDG4/Geant4InputAction.h
@@ -18,7 +18,7 @@
 #include "DDG4/Geant4Vertex.h"
 #include "DDG4/Geant4Particle.h"
 #include "DDG4/Geant4GeneratorAction.h"
-#include "DDParsers/Parsers.h"
+#include "Parsers/Parsers.h"
 
 // C/C++ include files
 #include <vector>
@@ -73,15 +73,15 @@ namespace dd4hep  {
        */
       template <typename T>
       void _getParameterValue( std::map< std::string, std::string > & parameters,
-			       std::string const& parameterName,
-			       T& parameter, T defaultValue ) {
-
-	if( parameters.find( parameterName ) != parameters.end() ) {
-	  dd4hep::Parsers::parse( parameter, parameters.at( parameterName ) );
-	  parameters.erase( parameterName );
-	} else {
-	  parameter = defaultValue;
-	}
+                               std::string const& parameterName,
+                               T& parameter, T defaultValue ) {
+
+        if( parameters.find( parameterName ) != parameters.end() ) {
+          dd4hep::Parsers::parse( parameter, parameters.at( parameterName ) );
+          parameters.erase( parameterName );
+        } else {
+          parameter = defaultValue;
+        }
       }
 
     public:
@@ -158,8 +158,8 @@ namespace dd4hep  {
     public:
       /// Read an event and return a LCCollectionVec of MCParticles.
       int readParticles(int event_number,
-			Vertices&  vertices,
-			Particles& particles);
+                        Vertices&  vertices,
+                        Particles& particles);
       /// helper to report Geant4 exceptions
       std::string issue(int i) const;
 
diff --git a/DDParsers/CMakeLists.txt b/DDParsers/CMakeLists.txt
index 61ae41cafa52f3009209ce7a2f9b089116154fea..9fcb0fc6adf233b72ec5e94bdd6229552bd33895 100644
--- a/DDParsers/CMakeLists.txt
+++ b/DDParsers/CMakeLists.txt
@@ -10,13 +10,15 @@
 #
 #=================================================================================
 dd4hep_package(    DDParsers
-  USES             [ROOT REQUIRED COMPONENTS Geom GenVector]
+  USES             [ROOT REQUIRED]
+  OPTIONAL         XERCESC
   INCLUDE_DIRS     include
-  INSTALL_INCLUDES include/DDParsers )
+  INSTALL_INCLUDES include/Evaluator include/Parsers )
 
 dd4hep_add_package_library ( DDParsers
   INCLUDE_DIRS
   LINK_LIBRARIES
-  SOURCES        src/*.cpp src/Evaluator/*.cpp 
-  OPTIONAL       [BOOST SOURCES src/parsers/*.cpp]
+  SOURCES        src/Parsers/*.cpp src/Evaluator/*.cpp
+  OPTIONAL       [BOOST SOURCES src/Spirit/*.cpp]
   )
+
diff --git a/DDParsers/include/DDParsers/DD4hepUnits.h b/DDParsers/include/Evaluator/DD4hepUnits.h
similarity index 100%
rename from DDParsers/include/DDParsers/DD4hepUnits.h
rename to DDParsers/include/Evaluator/DD4hepUnits.h
diff --git a/DDParsers/include/DDParsers/Evaluator.h b/DDParsers/include/Evaluator/Evaluator.h
similarity index 100%
rename from DDParsers/include/DDParsers/Evaluator.h
rename to DDParsers/include/Evaluator/Evaluator.h
diff --git a/DDParsers/include/Parsers/Parsers.h b/DDParsers/include/Parsers/Parsers.h
new file mode 100644
index 0000000000000000000000000000000000000000..f928f1c5125b8ccd13aa0e2427178492398cbb15
--- /dev/null
+++ b/DDParsers/include/Parsers/Parsers.h
@@ -0,0 +1,24 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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
+//
+//==========================================================================
+//
+// Setup XML parsing for the use of Apache Xerces-C and TiXml
+//
+//==========================================================================
+#ifndef DD4HEP_PARSERS_PARSERS_H
+#define DD4HEP_PARSERS_PARSERS_H
+
+#include "Parsers/config.h"
+#include "Parsers/spirit/Parsers.h"
+#include "Parsers/spirit/ToStream.h"
+
+#endif // DD4HEP_PARSERS_PARSERS_H
diff --git a/DDParsers/include/Parsers/config.h b/DDParsers/include/Parsers/config.h
new file mode 100644
index 0000000000000000000000000000000000000000..8df27f31252644928d6f267ccab79a6a53ef2201
--- /dev/null
+++ b/DDParsers/include/Parsers/config.h
@@ -0,0 +1,22 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// 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
+//
+//==========================================================================
+//
+// Setup XML parsing for the use of Apache Xerces-C and TiXml
+//
+//==========================================================================
+#ifndef DD4HEP_PARSERS_CONFIG_H
+#define DD4HEP_PARSERS_CONFIG_H
+
+//#define dd4hep Online
+
+#endif // DD4HEP_PARSERS_CONFIG_H
diff --git a/DDParsers/src/parsers/GrammarsV2.h b/DDParsers/include/Parsers/spirit/GrammarsV2.h
old mode 100644
new mode 100755
similarity index 100%
rename from DDParsers/src/parsers/GrammarsV2.h
rename to DDParsers/include/Parsers/spirit/GrammarsV2.h
diff --git a/DDParsers/include/DDParsers/Parsers.h b/DDParsers/include/Parsers/spirit/Parsers.h
old mode 100644
new mode 100755
similarity index 99%
rename from DDParsers/include/DDParsers/Parsers.h
rename to DDParsers/include/Parsers/spirit/Parsers.h
index 59df94581f3df6779d243496f9273f07bd0e8c75..82b453403fad56718a78107ebcd9ae50f9e1a077
--- a/DDParsers/include/DDParsers/Parsers.h
+++ b/DDParsers/include/Parsers/spirit/Parsers.h
@@ -14,6 +14,7 @@
 #define DD4HEP_PARSERS_H 1
 // ============================================================================
 // Include files
+#include "Parsers/config.h"
 // ============================================================================
 // STD & STL
 // ============================================================================
diff --git a/DDParsers/src/parsers/ParsersFactory.h b/DDParsers/include/Parsers/spirit/ParsersFactory.h
similarity index 97%
rename from DDParsers/src/parsers/ParsersFactory.h
rename to DDParsers/include/Parsers/spirit/ParsersFactory.h
index f232ce76b8bad000b8996e082624076105750fa4..8fa42bf9163525818896d336cac3994df23d9ff1 100644
--- a/DDParsers/src/parsers/ParsersFactory.h
+++ b/DDParsers/include/Parsers/spirit/ParsersFactory.h
@@ -26,8 +26,9 @@
 // ============================================================================
 // dd4hep
 // ============================================================================
-#include "UsedParser.h"
-#include "GrammarsV2.h"
+#include "Parsers/config.h"
+#include "Parsers/spirit/UsedParser.h"
+#include "Parsers/spirit/GrammarsV2.h"
 // ============================================================================
 /// Namespace for the AIDA detector description toolkit
 namespace dd4hep {
diff --git a/DDParsers/src/parsers/ParsersStandardListCommon.h b/DDParsers/include/Parsers/spirit/ParsersStandardListCommon.h
old mode 100644
new mode 100755
similarity index 95%
rename from DDParsers/src/parsers/ParsersStandardListCommon.h
rename to DDParsers/include/Parsers/spirit/ParsersStandardListCommon.h
index 3271114bd41de256ee206384ad378aa80143b422..36bbfa647f9a5036cfbd6dba950e19fe1e29d0fb
--- a/DDParsers/src/parsers/ParsersStandardListCommon.h
+++ b/DDParsers/include/Parsers/spirit/ParsersStandardListCommon.h
@@ -1,5 +1,5 @@
 //==========================================================================
-//  AIDA Detector description implementation 
+//  AIDA Detector description implementation
 //--------------------------------------------------------------------------
 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
 // All rights reserved.
@@ -13,8 +13,7 @@
 // ============================================================================
 // Include files
 // ============================================================================
-#include "ParsersFactory.h"
-
+#include "Parsers/spirit/ParsersFactory.h"
 
 #define IMPLEMENT_STL_PARSER(x,y)                          \
   int parse(x < y > & result, const std::string&  input)   \
@@ -56,7 +55,7 @@
 
 // ============================================================================
 #define PARSERS_DEF_FOR_LIST(InnerType)                    \
-  namespace dd4hep{ namespace Parsers{                     \
+  namespace DD4hep{ namespace Parsers{                     \
       IMPLEMENT_STL_PARSERS(InnerType)                     \
       IMPLEMENT_MAPPED_PARSERS(pair,InnerType)            }}
 
diff --git a/DDParsers/src/parsers/ParsersStandardMiscCommon.h b/DDParsers/include/Parsers/spirit/ParsersStandardMiscCommon.h
old mode 100644
new mode 100755
similarity index 90%
rename from DDParsers/src/parsers/ParsersStandardMiscCommon.h
rename to DDParsers/include/Parsers/spirit/ParsersStandardMiscCommon.h
index 9df29330cb7cdf7b81957218a9fd85f512e061aa..6717e55bbf5afd1e4b58c4a6ff82f7f90cb00ce2
--- a/DDParsers/src/parsers/ParsersStandardMiscCommon.h
+++ b/DDParsers/include/Parsers/spirit/ParsersStandardMiscCommon.h
@@ -1,5 +1,5 @@
 //==========================================================================
-//  AIDA Detector description implementation 
+//  AIDA Detector description implementation
 //--------------------------------------------------------------------------
 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
 // All rights reserved.
@@ -13,6 +13,6 @@
 // ============================================================================
 // Include files
 // ============================================================================
-#include "ParsersFactory.h"
+#include "Parsers/spirit/ParsersFactory.h"
 // ============================================================================
 #endif /* PARSERS_STANDARD_MISC_COMMON_H */
diff --git a/DDParsers/include/DDParsers/ToStream.h b/DDParsers/include/Parsers/spirit/ToStream.h
similarity index 99%
rename from DDParsers/include/DDParsers/ToStream.h
rename to DDParsers/include/Parsers/spirit/ToStream.h
index bb71c2803cd5385f1d870e3c59153bc00afe8963..de1912fea55d249077002e5af8efc12205e66ffe 100644
--- a/DDParsers/include/DDParsers/ToStream.h
+++ b/DDParsers/include/Parsers/spirit/ToStream.h
@@ -14,6 +14,7 @@
 #define DD4HEPPROPERTYPARSERS_PARSERVALUETOSTREAM_H 1
 // ============================================================================
 // Include files
+#include "Parsers/config.h"
 // ============================================================================
 // STD & STL
 // ============================================================================
diff --git a/DDParsers/src/parsers/UsedParser.h b/DDParsers/include/Parsers/spirit/UsedParser.h
old mode 100644
new mode 100755
similarity index 76%
rename from DDParsers/src/parsers/UsedParser.h
rename to DDParsers/include/Parsers/spirit/UsedParser.h
index 77b639d21dcb59ba30f8153713ad6d05dc4509e1..df3a6302d2710530c0c0dca6f6633f7b132192e0
--- a/DDParsers/src/parsers/UsedParser.h
+++ b/DDParsers/include/Parsers/spirit/UsedParser.h
@@ -1,5 +1,5 @@
 //==========================================================================
-//  AIDA Detector description implementation 
+//  AIDA Detector description implementation
 //--------------------------------------------------------------------------
 // Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
 // All rights reserved.
@@ -11,17 +11,18 @@
 #ifndef DD4HEP_DDCORE_PARSERS_USEDPARSERS_H
 #define DD4HEP_DDCORE_PARSERS_USEDPARSERS_H
 
+#include "Parsers/config.h"
 
 #if defined(DD4HEP_PARSER_HEADER)
 // This is the case, if the parsers are externalized
-// and the dd4hep namespace is renamed!
+// and the DD4hep namespace is renamed!
 #include DD4HEP_PARSER_HEADER
 
 #else
 
-// Standard dd4hep parser handling
-#include "DDParsers/Parsers.h"
-#include "DDParsers/ToStream.h"
+// Standard DD4hep parser handling
+#include "Parsers/spirit/Parsers.h"
+#include "Parsers/spirit/ToStream.h"
 
 #endif
 
diff --git a/DDParsers/src/Evaluator/Evaluator.cpp b/DDParsers/src/Evaluator/Evaluator.cpp
index 831d088efce78000458a4bdee500df7f7012d42a..fcc6d8743455f9255b7218a93024460187072851 100644
--- a/DDParsers/src/Evaluator/Evaluator.cpp
+++ b/DDParsers/src/Evaluator/Evaluator.cpp
@@ -1,7 +1,7 @@
 // -*- C++ -*-
 // ---------------------------------------------------------------------------
 
-#include "DDParsers/Evaluator.h"
+#include "Evaluator/Evaluator.h"
 
 #include <iostream>
 #include <cmath>        // for pow()
diff --git a/DDParsers/src/Evaluator/ExpressionEvaluator.cpp b/DDParsers/src/Evaluator/ExpressionEvaluator.cpp
index c347791accf165588ce464332f3e93164f01923f..4da4bd0f011d9d93257b5fa8be9f205306777d98 100644
--- a/DDParsers/src/Evaluator/ExpressionEvaluator.cpp
+++ b/DDParsers/src/Evaluator/ExpressionEvaluator.cpp
@@ -10,9 +10,9 @@
 // Author     : M.Frank
 //
 //==========================================================================
-
-#include "DDParsers/Evaluator.h"
-#include "DDParsers/DD4hepUnits.h"
+#include "Parsers/config.h"
+#include "Evaluator/Evaluator.h"
+#include "Evaluator/DD4hepUnits.h"
 namespace units = dd4hep;
 
 namespace {
@@ -53,6 +53,7 @@ namespace {
 }
 
 namespace dd4hep {
+
   XmlTools::Evaluator& evaluator() {
     static XmlTools::Evaluator* e = 0;
     if ( !e )   {
diff --git a/DDParsers/src/Evaluator/setStdMath.cpp b/DDParsers/src/Evaluator/setStdMath.cpp
index be047e266f1f1962e02ef26f0089bdb2d378ee9a..e0c097e1bbb31f30272c234811dd179c5eb408f9 100644
--- a/DDParsers/src/Evaluator/setStdMath.cpp
+++ b/DDParsers/src/Evaluator/setStdMath.cpp
@@ -1,7 +1,7 @@
 // -*- C++ -*-
 // ----------------------------------------------------------------------
 
-#include "DDParsers/Evaluator.h"
+#include "Evaluator/Evaluator.h"
 
 #ifdef DD4HEP_NONE
 /// Utility namespace to support TGeo units.
@@ -12,7 +12,7 @@ namespace dd4hep {
   //}
 }
 #else
-#include "DDParsers/DD4hepUnits.h"
+#include "Evaluator/DD4hepUnits.h"
 #endif
 namespace units = dd4hep;
 
diff --git a/DDParsers/src/Evaluator/setSystemOfUnits.cpp b/DDParsers/src/Evaluator/setSystemOfUnits.cpp
index c6156acc9a50648928f0e513e04b18e2ac01dd04..42b9bd6bcfeb4027e827d2ac99c6269a3b4b9bc4 100644
--- a/DDParsers/src/Evaluator/setSystemOfUnits.cpp
+++ b/DDParsers/src/Evaluator/setSystemOfUnits.cpp
@@ -1,7 +1,7 @@
 // -*- C++ -*-
 // ----------------------------------------------------------------------
 
-#include "DDParsers/Evaluator.h"
+#include "Evaluator/Evaluator.h"
 
 namespace XmlTools {
 
diff --git a/DDParsers/src/ParsersDictionary.h b/DDParsers/src/ParsersDictionary.h
new file mode 100644
index 0000000000000000000000000000000000000000..be4b094807b313d03dc6b95ffb219468fb0804bb
--- /dev/null
+++ b/DDParsers/src/ParsersDictionary.h
@@ -0,0 +1,19 @@
+//==========================================================================
+//  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   Markus Frank
+//  \date     2018-02-05
+//  \version  1.0
+//
+//==========================================================================
+#ifndef PARSERDICTIONARY_H 
+#define PARSERDICTIONARY_H 1
+
+
+#endif  // PARSERDICTIONARY_H 
diff --git a/DDParsers/src/parsers/Evaluators.cpp b/DDParsers/src/Spirit/Evaluators.cpp
old mode 100644
new mode 100755
similarity index 94%
rename from DDParsers/src/parsers/Evaluators.cpp
rename to DDParsers/src/Spirit/Evaluators.cpp
index c1009190248ec8eb1564d19819e1ed82c0875f5c..48e153f0ff6b6fa2dd1761933665b2b77be35b85
--- a/DDParsers/src/parsers/Evaluators.cpp
+++ b/DDParsers/src/Spirit/Evaluators.cpp
@@ -11,6 +11,8 @@
 //
 //==========================================================================
 
+#include "Parsers/config.h"
+
 // Framework include files
 #if defined(DD4HEP_PARSER_HEADER)
 
@@ -22,12 +24,13 @@
 #else
 
 // Standard dd4hep parser handling
-#include "DDParsers/ToStream.h"
+#include "Parsers/spirit/ToStream.h"
 
 #endif
-#include "DDParsers/Evaluator.h"
+#include "Evaluator/Evaluator.h"
 
 // C/C++ include files
+#include <iostream>
 #include <stdexcept>
 
 namespace dd4hep {
diff --git a/DDParsers/src/Spirit/ExtraParsers.cpp b/DDParsers/src/Spirit/ExtraParsers.cpp
new file mode 100755
index 0000000000000000000000000000000000000000..8245ad80c5aae1c2a8a620c130201ae15f819f6a
--- /dev/null
+++ b/DDParsers/src/Spirit/ExtraParsers.cpp
@@ -0,0 +1,31 @@
+//==========================================================================
+//  LHCb Online software suite
+//--------------------------------------------------------------------------
+//  Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
+//  All rights reserved.
+//
+//  For the licensing terms see OnlineSys/LICENSE.
+//
+//--------------------------------------------------------------------------
+//  ExtraProperties.cpp
+//--------------------------------------------------------------------------
+//
+//  Package    : Dataflow
+//
+//  Author     : Markus Frank
+//==========================================================================
+// Note:
+//
+// This is an example file, which shows how to instantiate extera parsers,
+// which are not part of DD4hep, but may be interesting for a
+// client application.
+//
+//==========================================================================
+
+/// Framework includes
+#include "Parsers/spirit/ParsersFactory.h"
+
+PARSERS_DEF_FOR_SINGLE(unsigned int)
+PARSERS_DEF_FOR_SINGLE(unsigned long)
+PARSERS_DEF_FOR_SINGLE(long long)
+PARSERS_DEF_FOR_SINGLE(unsigned long long)
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapint_bool.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapint_bool.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_Mapint_bool.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapint_bool.cpp
index 5da178df77ce4e976c7e776d0dac69d4981e0762..613f7a1cc3f273a9834493cf80a47920d50f8b54
--- a/DDParsers/src/parsers/ParserStandardList_Mapint_bool.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapint_bool.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,int,bool)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapint_double.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapint_double.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_Mapint_double.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapint_double.cpp
index 372bcbd724ccc2fff7c78f3831470f3c721d99a9..456a0fdf9c929ce2531d29bf183804e7b00e93d0
--- a/DDParsers/src/parsers/ParserStandardList_Mapint_double.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapint_double.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,int,double)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapint_float.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapint_float.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapint_float.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapint_float.cpp
index 4fc4cabc649eca490aba926a6907a024c66195be..b527885c9fb49bad46b8684d73c5e4e64229dc61
--- a/DDParsers/src/parsers/ParserStandardList_Mapint_float.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapint_float.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,int,float)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapint_int.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapint_int.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapint_int.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapint_int.cpp
index f92fa302c965aa93d90da06debc18466c11ee48b..da317b6bc32174623465e6bece8dab7810b7ed4a
--- a/DDParsers/src/parsers/ParserStandardList_Mapint_int.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapint_int.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,int,int)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapint_long.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapint_long.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapint_long.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapint_long.cpp
index 27e52a9fd70fefff3c1808efb8ad6f69b3e49f75..87a7421cfbcbc02e41b455948d0c30ee3e271937
--- a/DDParsers/src/parsers/ParserStandardList_Mapint_long.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapint_long.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,int,long)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapint_string.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapint_string.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapint_string.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapint_string.cpp
index 62dd72d00b0e03bc6adf6b1e7219366492d2a041..67e07ca289a71e8d6e5829dd7cc9846170fd3136
--- a/DDParsers/src/parsers/ParserStandardList_Mapint_string.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapint_string.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,int,std::string)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapped_bool.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapped_bool.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapped_bool.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapped_bool.cpp
index b3e0f2f0fa61f856d5c51d203ef8b3b41da5b001..af3a8fce4351de86359b962259d62c19d79bb2da
--- a/DDParsers/src/parsers/ParserStandardList_Mapped_bool.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapped_bool.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_MAPPED_PARSERS(pair,bool)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapped_double.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapped_double.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapped_double.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapped_double.cpp
index bd5428f5a9ff7fdb81a5909edd4343f8fef56b4e..364cec9ec88618d22b3f205b526f3baefdaed59a
--- a/DDParsers/src/parsers/ParserStandardList_Mapped_double.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapped_double.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_MAPPED_PARSERS(pair,double)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapped_float.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapped_float.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapped_float.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapped_float.cpp
index 92178bbdc0dad94207b195e5a0f72364c6db03d2..041457bf90b59010eec9a71e8e4520f2540e981c
--- a/DDParsers/src/parsers/ParserStandardList_Mapped_float.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapped_float.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_MAPPED_PARSERS(pair,float)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapped_int.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapped_int.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapped_int.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapped_int.cpp
index 418e7ed2d06de7a07ad0a9faebbae249b6cf8667..0b6dfbe2ca3a612f9e8c5ddb0a836b7402baac72
--- a/DDParsers/src/parsers/ParserStandardList_Mapped_int.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapped_int.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_MAPPED_PARSERS(pair,int)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapped_long.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapped_long.cpp
old mode 100644
new mode 100755
similarity index 75%
rename from DDParsers/src/parsers/ParserStandardList_Mapped_long.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapped_long.cpp
index c1540f7c8347d09fc8b4a6248c6c347a26c33e5e..3a5c0cef8d1023876b82c46723e689cb927c26ab
--- a/DDParsers/src/parsers/ParserStandardList_Mapped_long.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapped_long.cpp
@@ -1,4 +1,3 @@
-// $Id: ParserStandardList_Mapped_long.cpp 2166 2016-03-17 16:37:06Z /DC=ch/DC=cern/OU=Organic Units/OU=Users/CN=sailer/CN=683529/CN=Andre Sailer $
 //==========================================================================
 //  AIDA Detector description implementation 
 //--------------------------------------------------------------------------
@@ -10,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_MAPPED_PARSERS(pair,long)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapped_string.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapped_string.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapped_string.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapped_string.cpp
index 18f703873b34a4348ee349142c428ed10c3764dd..8796edaa882ee72683a7c0112a6332b2bf7a4739
--- a/DDParsers/src/parsers/ParserStandardList_Mapped_string.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapped_string.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_MAPPED_PARSERS(pair,std::string)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapstring_bool.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapstring_bool.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapstring_bool.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapstring_bool.cpp
index 9428191ebd97ab9d8bee7d47b5dc6f0b11c3e103..0af0baf8507771980aa909a25e0d8bbb5ef217f1
--- a/DDParsers/src/parsers/ParserStandardList_Mapstring_bool.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapstring_bool.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,std::string,bool)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapstring_double.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapstring_double.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapstring_double.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapstring_double.cpp
index 8a7e2d0f5d101ebe0b17a4d5a621ab4307577299..c3af32e01a2ceb323433300b48741a6e5dc5c8b6
--- a/DDParsers/src/parsers/ParserStandardList_Mapstring_double.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapstring_double.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,std::string,double)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapstring_float.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapstring_float.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapstring_float.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapstring_float.cpp
index a051593892f612f47ad7547cc21d78def1e3a9cb..d2851664d68496da5118b5101ff89faf3b0f903b
--- a/DDParsers/src/parsers/ParserStandardList_Mapstring_float.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapstring_float.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,std::string,float)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapstring_int.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapstring_int.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapstring_int.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapstring_int.cpp
index 2aa4f24fdcde4371154a162ae349ed1d3a97f9be..950ec339a5dd7b2dc82e28474a00fb12fc74e5db
--- a/DDParsers/src/parsers/ParserStandardList_Mapstring_int.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapstring_int.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,std::string,int)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapstring_long.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapstring_long.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapstring_long.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapstring_long.cpp
index 76051cc4674d58519543dc7f4bbfc3f17c8b0e01..e6358c50a6e73e4cba15715e2b242f14e7a61d9f
--- a/DDParsers/src/parsers/ParserStandardList_Mapstring_long.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapstring_long.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,std::string,long)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_Mapstring_string.cpp b/DDParsers/src/Spirit/ParserStandardList_Mapstring_string.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_Mapstring_string.cpp
rename to DDParsers/src/Spirit/ParserStandardList_Mapstring_string.cpp
index ab2a2734bc4383392edd389668d825d5763c4350..e34ba7560e376cde9c69b5a1771ad52093e669bf
--- a/DDParsers/src/parsers/ParserStandardList_Mapstring_string.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_Mapstring_string.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_MAP_PARSER(std::map,std::string,std::string)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_list_bool.cpp b/DDParsers/src/Spirit/ParserStandardList_list_bool.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_list_bool.cpp
rename to DDParsers/src/Spirit/ParserStandardList_list_bool.cpp
index aae227af3b3cc459da15b873a6b2db923193af03..ce5359778b70b24de4a326c095a07a15c0fa3e55
--- a/DDParsers/src/parsers/ParserStandardList_list_bool.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_list_bool.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::list,bool)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_list_double.cpp b/DDParsers/src/Spirit/ParserStandardList_list_double.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_list_double.cpp
rename to DDParsers/src/Spirit/ParserStandardList_list_double.cpp
index be4659e5d237e7b6c82d5f32e18a5b0757e4530f..549a2f369b1b9e41e2ed52f71fb344622236ce5e
--- a/DDParsers/src/parsers/ParserStandardList_list_double.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_list_double.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::list,double)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_list_float.cpp b/DDParsers/src/Spirit/ParserStandardList_list_float.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_list_float.cpp
rename to DDParsers/src/Spirit/ParserStandardList_list_float.cpp
index 8609a5e80c7340849b704f88bbcf7b02e2332301..0245155cd4ca2c62dbdc4e426025f78a950c5142
--- a/DDParsers/src/parsers/ParserStandardList_list_float.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_list_float.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::list,float)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_list_int.cpp b/DDParsers/src/Spirit/ParserStandardList_list_int.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_list_int.cpp
rename to DDParsers/src/Spirit/ParserStandardList_list_int.cpp
index 5b3c38a947d1e1312ab6e9e8d06cc24b82a7effb..e792e9fe1313081eca3f81199c95ef59b48a6e55
--- a/DDParsers/src/parsers/ParserStandardList_list_int.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_list_int.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::list,int)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_list_long.cpp b/DDParsers/src/Spirit/ParserStandardList_list_long.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_list_long.cpp
rename to DDParsers/src/Spirit/ParserStandardList_list_long.cpp
index 909a28f271b029a2c49898446ad5df688d01b3dc..d8ba02b329ba25d9ce9cdd52e5bae749c4c6786c
--- a/DDParsers/src/parsers/ParserStandardList_list_long.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_list_long.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::list,long)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_list_string.cpp b/DDParsers/src/Spirit/ParserStandardList_list_string.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_list_string.cpp
rename to DDParsers/src/Spirit/ParserStandardList_list_string.cpp
index c102f7767a55e9947f2e09cc1c3717afaf06def6..b9da1e1509a0f0fef95da4d703cf8409255e03dc
--- a/DDParsers/src/parsers/ParserStandardList_list_string.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_list_string.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::list,std::string)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_set_bool.cpp b/DDParsers/src/Spirit/ParserStandardList_set_bool.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_set_bool.cpp
rename to DDParsers/src/Spirit/ParserStandardList_set_bool.cpp
index ef742afde4ed43c27950c7e5a6c50cb1c7c28fc4..c175197c1b2a6061f8a52e6fa6980a7fc833c7d7
--- a/DDParsers/src/parsers/ParserStandardList_set_bool.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_set_bool.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::set,bool)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_set_double.cpp b/DDParsers/src/Spirit/ParserStandardList_set_double.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_set_double.cpp
rename to DDParsers/src/Spirit/ParserStandardList_set_double.cpp
index fc9affd32235318a9e2ec9481c4fb827e7165064..9d1aa393d4d080e88bb7db7647b00dde62995905
--- a/DDParsers/src/parsers/ParserStandardList_set_double.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_set_double.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::set,double)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_set_float.cpp b/DDParsers/src/Spirit/ParserStandardList_set_float.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_set_float.cpp
rename to DDParsers/src/Spirit/ParserStandardList_set_float.cpp
index f5ad768fa49ad15864919821a5bf055f2b5a47fc..922fd06610b5e776ac502260928b49165e357f42
--- a/DDParsers/src/parsers/ParserStandardList_set_float.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_set_float.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::set,float)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_set_int.cpp b/DDParsers/src/Spirit/ParserStandardList_set_int.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_set_int.cpp
rename to DDParsers/src/Spirit/ParserStandardList_set_int.cpp
index 4fdbb48450b9653f01cc25b09aa87191d6d9a4ef..3d8d5cd649ef3ec6fd6088c926de01324ad096b1
--- a/DDParsers/src/parsers/ParserStandardList_set_int.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_set_int.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::set,int)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_set_long.cpp b/DDParsers/src/Spirit/ParserStandardList_set_long.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_set_long.cpp
rename to DDParsers/src/Spirit/ParserStandardList_set_long.cpp
index f6437283beb78214e40a74627f9c1d9d89556129..e2302d1cc9b7e93f49fd109de76d7a1866046cec
--- a/DDParsers/src/parsers/ParserStandardList_set_long.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_set_long.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::set,long)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_set_string.cpp b/DDParsers/src/Spirit/ParserStandardList_set_string.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_set_string.cpp
rename to DDParsers/src/Spirit/ParserStandardList_set_string.cpp
index f0424935c9161313aeb2776c3761fc220b5c8509..b3ec8245425b00257056af9c2c418c23ebbdcb33
--- a/DDParsers/src/parsers/ParserStandardList_set_string.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_set_string.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::set,std::string)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_vector_bool.cpp b/DDParsers/src/Spirit/ParserStandardList_vector_bool.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_vector_bool.cpp
rename to DDParsers/src/Spirit/ParserStandardList_vector_bool.cpp
index a6a015e5fe94826c1c6461cb8651e95dfe1a34fa..3f60c0488d3a071839c621c4865f05884e8f8dea
--- a/DDParsers/src/parsers/ParserStandardList_vector_bool.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_vector_bool.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::vector,bool)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_vector_double.cpp b/DDParsers/src/Spirit/ParserStandardList_vector_double.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_vector_double.cpp
rename to DDParsers/src/Spirit/ParserStandardList_vector_double.cpp
index 3020da1cd52fa1f3f8d888efe86573dd523fe749..ef4e36a9389ba02345d158741ecb5d911cc46cea
--- a/DDParsers/src/parsers/ParserStandardList_vector_double.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_vector_double.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::vector,double)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_vector_float.cpp b/DDParsers/src/Spirit/ParserStandardList_vector_float.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParserStandardList_vector_float.cpp
rename to DDParsers/src/Spirit/ParserStandardList_vector_float.cpp
index 7d887f2d52a10fbe76e8dda85a7ebdc9e54aea47..aefabf66cc360a7f1f8350f61321945184ed6f14
--- a/DDParsers/src/parsers/ParserStandardList_vector_float.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_vector_float.cpp
@@ -10,7 +10,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::vector,float)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_vector_int.cpp b/DDParsers/src/Spirit/ParserStandardList_vector_int.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_vector_int.cpp
rename to DDParsers/src/Spirit/ParserStandardList_vector_int.cpp
index 299141d15e042cd8df4c0ff1005a689d57f90cf3..8ef2d847332824a9115ba83aa9988f4a026c53d9
--- a/DDParsers/src/parsers/ParserStandardList_vector_int.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_vector_int.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::vector,int)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_vector_long.cpp b/DDParsers/src/Spirit/ParserStandardList_vector_long.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_vector_long.cpp
rename to DDParsers/src/Spirit/ParserStandardList_vector_long.cpp
index f401319971a363721dc6639a0fc0448579723c4a..631a248933727226406dd25ab2e45d31aef0b978
--- a/DDParsers/src/parsers/ParserStandardList_vector_long.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_vector_long.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::vector,long)
   }}
diff --git a/DDParsers/src/parsers/ParserStandardList_vector_string.cpp b/DDParsers/src/Spirit/ParserStandardList_vector_string.cpp
old mode 100644
new mode 100755
similarity index 91%
rename from DDParsers/src/parsers/ParserStandardList_vector_string.cpp
rename to DDParsers/src/Spirit/ParserStandardList_vector_string.cpp
index 5a674529a7c332a143fd3c5439864cbdc4c7c4ac..e89818d9f15abbce42291a1a7ad460e2113f2054
--- a/DDParsers/src/parsers/ParserStandardList_vector_string.cpp
+++ b/DDParsers/src/Spirit/ParserStandardList_vector_string.cpp
@@ -9,7 +9,7 @@
 //
 //==========================================================================
 
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 namespace dd4hep{ namespace Parsers{
 IMPLEMENT_STL_PARSER(std::vector,std::string)
   }}
diff --git a/DDParsers/src/parsers/ParsersObjects_PxPyPzEVector.cpp b/DDParsers/src/Spirit/ParsersObjects_PxPyPzEVector.cpp
old mode 100644
new mode 100755
similarity index 97%
rename from DDParsers/src/parsers/ParsersObjects_PxPyPzEVector.cpp
rename to DDParsers/src/Spirit/ParsersObjects_PxPyPzEVector.cpp
index e2747bd23e1b0663ca772497d841743320449252..822fa706be149d9dcb239ae7158421a340cc2962
--- a/DDParsers/src/parsers/ParsersObjects_PxPyPzEVector.cpp
+++ b/DDParsers/src/Spirit/ParsersObjects_PxPyPzEVector.cpp
@@ -12,7 +12,7 @@
 // Include files
 //==========================================================================
 #ifndef DD4HEP_PARSERS_NO_ROOT
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 
 namespace ROOT {  namespace Math {
     bool operator<(const PxPyPzEVector& a, const PxPyPzEVector& b)  {
diff --git a/DDParsers/src/parsers/ParsersObjects_XYZPoint.cpp b/DDParsers/src/Spirit/ParsersObjects_XYZPoint.cpp
old mode 100644
new mode 100755
similarity index 97%
rename from DDParsers/src/parsers/ParsersObjects_XYZPoint.cpp
rename to DDParsers/src/Spirit/ParsersObjects_XYZPoint.cpp
index 38af2620566b2dca569075e9d0b82b1805c2c7a4..379da7a39d7c3ffc0b84527178bd0226ba1aa70e
--- a/DDParsers/src/parsers/ParsersObjects_XYZPoint.cpp
+++ b/DDParsers/src/Spirit/ParsersObjects_XYZPoint.cpp
@@ -12,7 +12,7 @@
 // Include files
 //==========================================================================
 #ifndef DD4HEP_PARSERS_NO_ROOT
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 
 namespace ROOT {  namespace Math {
     bool operator<(const XYZPoint& a, const XYZPoint& b)  {
diff --git a/DDParsers/src/parsers/ParsersObjects_XYZVector.cpp b/DDParsers/src/Spirit/ParsersObjects_XYZVector.cpp
old mode 100644
new mode 100755
similarity index 97%
rename from DDParsers/src/parsers/ParsersObjects_XYZVector.cpp
rename to DDParsers/src/Spirit/ParsersObjects_XYZVector.cpp
index e848371f0eb1da7ee13b311806d1f2895c5d7b65..7013dc8d6703ced7111e0a12bcbe4efcb4876dfd
--- a/DDParsers/src/parsers/ParsersObjects_XYZVector.cpp
+++ b/DDParsers/src/Spirit/ParsersObjects_XYZVector.cpp
@@ -12,7 +12,7 @@
 // Include files
 //==========================================================================
 #ifndef DD4HEP_PARSERS_NO_ROOT
-#include "ParsersStandardListCommon.h"
+#include "Parsers/spirit/ParsersStandardListCommon.h"
 
 namespace ROOT {  namespace Math {
     bool operator<(const XYZVector& a, const XYZVector& b)  {
diff --git a/DDParsers/src/parsers/ParsersStandardMisc1.cpp b/DDParsers/src/Spirit/ParsersStandardMisc1.cpp
old mode 100644
new mode 100755
similarity index 95%
rename from DDParsers/src/parsers/ParsersStandardMisc1.cpp
rename to DDParsers/src/Spirit/ParsersStandardMisc1.cpp
index 25bc57b993c9651529603bd01c30aa89730fb05d..f12e9abf35cfb9b7c47c573db6b8d01536f7933c
--- a/DDParsers/src/parsers/ParsersStandardMisc1.cpp
+++ b/DDParsers/src/Spirit/ParsersStandardMisc1.cpp
@@ -9,7 +9,7 @@
 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 //
 //==========================================================================
-#include "ParsersStandardMiscCommon.h"
+#include "Parsers/spirit/ParsersStandardMiscCommon.h"
 
 int dd4hep::Parsers::parse(std::pair<double,double>& result, const std::string& input) {
   return dd4hep::Parsers::parse_(result, input);
diff --git a/DDParsers/src/parsers/ParsersStandardMisc2.cpp b/DDParsers/src/Spirit/ParsersStandardMisc2.cpp
old mode 100644
new mode 100755
similarity index 92%
rename from DDParsers/src/parsers/ParsersStandardMisc2.cpp
rename to DDParsers/src/Spirit/ParsersStandardMisc2.cpp
index d8360d8877dc75ebc713d8ddcf5b2cd3d36a9ff9..fe32e814a952f59be7823a5b3a1289d775708148
--- a/DDParsers/src/parsers/ParsersStandardMisc2.cpp
+++ b/DDParsers/src/Spirit/ParsersStandardMisc2.cpp
@@ -9,7 +9,7 @@
 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 //
 //==========================================================================
-#include "ParsersStandardMiscCommon.h"
+#include "Parsers/spirit/ParsersStandardMiscCommon.h"
 
 int dd4hep::Parsers::parse(std::vector<std::vector<double> >& result, const std::string& input) {
   return dd4hep::Parsers::parse_(result, input);
diff --git a/DDParsers/src/parsers/ParsersStandardMisc3.cpp b/DDParsers/src/Spirit/ParsersStandardMisc3.cpp
old mode 100644
new mode 100755
similarity index 92%
rename from DDParsers/src/parsers/ParsersStandardMisc3.cpp
rename to DDParsers/src/Spirit/ParsersStandardMisc3.cpp
index 6aaae862d3b700e883ad27e4a8317893fd8bde30..d9a5906c7922ac68b0faed7f69c516f854344354
--- a/DDParsers/src/parsers/ParsersStandardMisc3.cpp
+++ b/DDParsers/src/Spirit/ParsersStandardMisc3.cpp
@@ -9,7 +9,7 @@
 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 //
 //==========================================================================
-#include "ParsersStandardMiscCommon.h"
+#include "Parsers/spirit/ParsersStandardMiscCommon.h"
 
 int dd4hep::Parsers::parse(std::map<std::string, std::vector<std::string> >& result, const std::string& input) {
   return dd4hep::Parsers::parse_(result, input);
diff --git a/DDParsers/src/parsers/ParsersStandardMisc4.cpp b/DDParsers/src/Spirit/ParsersStandardMisc4.cpp
old mode 100644
new mode 100755
similarity index 93%
rename from DDParsers/src/parsers/ParsersStandardMisc4.cpp
rename to DDParsers/src/Spirit/ParsersStandardMisc4.cpp
index e9ddccc89cf6addac207fdcc333196a17a835f84..a7da9ba308a24c1056f80f430c4ce9348dc9dd11
--- a/DDParsers/src/parsers/ParsersStandardMisc4.cpp
+++ b/DDParsers/src/Spirit/ParsersStandardMisc4.cpp
@@ -9,7 +9,7 @@
 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 //
 //==========================================================================
-#include "ParsersStandardMiscCommon.h"
+#include "Parsers/spirit/ParsersStandardMiscCommon.h"
 
 int dd4hep::Parsers::parse(std::map<std::string, std::vector<int> >& result, const std::string& input) {
   return dd4hep::Parsers::parse_(result, input);
diff --git a/DDParsers/src/parsers/ParsersStandardMisc5.cpp b/DDParsers/src/Spirit/ParsersStandardMisc5.cpp
old mode 100644
new mode 100755
similarity index 96%
rename from DDParsers/src/parsers/ParsersStandardMisc5.cpp
rename to DDParsers/src/Spirit/ParsersStandardMisc5.cpp
index 7cc009a317b3e204e6fc873596aac06d28bf67d8..5bb576dff340d53c1db7fcf06964178f3f9f7f82
--- a/DDParsers/src/parsers/ParsersStandardMisc5.cpp
+++ b/DDParsers/src/Spirit/ParsersStandardMisc5.cpp
@@ -8,7 +8,7 @@
 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 //
 //==========================================================================
-#include "ParsersStandardMiscCommon.h"
+#include "Parsers/spirit/ParsersStandardMiscCommon.h"
 
 #if defined(DD4HEP_HAVE_ALL_PARSERS)
 int dd4hep::Parsers::parse(std::map<unsigned int, std::string>& result, const std::string& input) {
diff --git a/DDParsers/src/parsers/ParsersStandardSingle.cpp b/DDParsers/src/Spirit/ParsersStandardSingle.cpp
old mode 100644
new mode 100755
similarity index 96%
rename from DDParsers/src/parsers/ParsersStandardSingle.cpp
rename to DDParsers/src/Spirit/ParsersStandardSingle.cpp
index 849aef7d90a37ed7345f9878bae6279183b3cbc9..f65f7d38607b7aa779ba8612a718c0eacb7d86e2
--- a/DDParsers/src/parsers/ParsersStandardSingle.cpp
+++ b/DDParsers/src/Spirit/ParsersStandardSingle.cpp
@@ -8,7 +8,7 @@
 // For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 //
 //==========================================================================
-#include "ParsersFactory.h"
+#include "Parsers/spirit/ParsersFactory.h"
 
 PARSERS_DEF_FOR_SINGLE(bool)
 PARSERS_DEF_FOR_SINGLE(int)
diff --git a/DDParsers/src/ToStream.cpp b/DDParsers/src/Spirit/ToStream.cpp
old mode 100644
new mode 100755
similarity index 98%
rename from DDParsers/src/ToStream.cpp
rename to DDParsers/src/Spirit/ToStream.cpp
index 0bdaf3a34f3685673fcd9c8e7c55d1d7c2835d0d..7f48c2c0db04d07fce79cdfb4b28b4bf89fefc0b
--- a/DDParsers/src/ToStream.cpp
+++ b/DDParsers/src/Spirit/ToStream.cpp
@@ -22,7 +22,7 @@
 #else
 
 // Standard dd4hep parser handling
-#include "DDParsers/ToStream.h"
+#include "Parsers/spirit/ToStream.h"
 
 #endif