From 3843f02dc8a23b063cda3df036017490038beffc Mon Sep 17 00:00:00 2001
From: Markus Frank <markus.frank@cern.ch>
Date: Wed, 29 Jul 2015 15:30:52 +0000
Subject: [PATCH] New build scripts. BE CAREFUL before updating.

---
 CMakeLists.txt                           |  180 ++--
 DDAlign/CMakeLists.txt                   |   47 +-
 DDAlign/include/DDAlign/AlignmentStack.h |    7 +-
 DDAlign/src/AlignmentCache.cpp           |   10 +-
 DDAlign/src/AlignmentOperators.cpp       |    4 +-
 DDAlign/src/AlignmentStack.cpp           |    7 +-
 DDCond/CMakeLists.txt                    |   49 +-
 DDCond/include/DDCond/ConditionsStack.h  |    7 +-
 DDCond/src/ConditionsParser.cpp          |    7 +-
 DDCond/src/ConditionsStack.cpp           |    9 +-
 DDCore/CMakeLists.txt                    |   96 +-
 DDCore/include/DD4hep/Memory.h           |   39 +-
 DDDetectors/CMakeLists.txt               |   40 +-
 DDEve/CMakeLists.txt                     |   82 +-
 DDEve/include/DDEve/ElementList.h        |    4 +-
 DDEve/include/DDEve/View.h               |    4 +-
 DDEve/src/Display.cpp                    |    2 +-
 DDEve/src/ElementList.cpp                |    2 +-
 DDEve/src/MultiView.cpp                  |    4 +-
 DDEve/src/View.cpp                       |    4 +-
 DDEve/src/ViewMenu.cpp                   |    4 +-
 DDG4/CMakeLists.txt                      |  124 +--
 DDG4/lcio/LCIOSDTestActions.cpp          |    1 +
 DDRec/CMakeLists.txt                     |   91 +-
 DDSegmentation/CMakeLists.txt            |    4 +-
 DDSegmentation/src/CartesianGridXY.cpp   |    2 +-
 DDSegmentation/src/CartesianGridXYZ.cpp  |   12 +-
 DDSegmentation/src/CartesianGridXZ.cpp   |   10 +-
 DDSegmentation/src/CartesianGridYZ.cpp   |   10 +-
 DDSegmentation/src/PolarGridRPhi.cpp     |    2 +-
 DDSegmentation/src/PolarGridRPhi2.cpp    |    2 +-
 DDSurfaces/CMakeLists.txt                |   63 +-
 DDTest/CMakeLists.txt                    |  118 +--
 UtilityApps/CMakeLists.txt               |   76 +-
 cmake/DD4hep.cmake                       |   72 +-
 cmake/DD4hepBuild.cmake                  | 1158 ++++++++++++++++++++++
 cmake/DD4hepConfig.cmake.in              |   36 +-
 cmake/FindROOT.cmake                     |   48 +-
 cmake/run_test_package.sh                |    4 +-
 cmake/thisdd4hep_package.sh.in           |   30 +-
 doc/CompileAllOptionPermutations.sh      |   61 ++
 doc/release.notes                        |   12 +-
 examples/AlignDet/CMakeLists.txt         |  150 +--
 examples/CLICSiD/CMakeLists.txt          |  130 +--
 examples/CMakeLists.txt                  |   49 +-
 examples/ClientTests/CMakeLists.txt      |  148 +--
 examples/SimpleDetector/CMakeLists.txt   |   26 +-
 47 files changed, 1796 insertions(+), 1251 deletions(-)
 create mode 100644 cmake/DD4hepBuild.cmake
 create mode 100755 doc/CompileAllOptionPermutations.sh

diff --git a/CMakeLists.txt b/CMakeLists.txt
index a9b516ed4..ba15aea2c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,141 +1,89 @@
 cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR)
-
-project(DD4hep)
-
-# project version
+set ( CMAKE_MODULE_PATH      ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake ) 
+#
+include ( DD4hepBuild )
 #
+#  project version (Major,minor,patch)
 #  Use the same version numbers in DDSegmentaion/CmakeLists.txt
 #
-SET( DD4hep_VERSION_MAJOR 0 )
-SET( DD4hep_VERSION_MINOR 14 )
-SET( DD4hep_VERSION_PATCH 0 )
-
-SET( DD4hep_VERSION "${DD4hep_VERSION_MAJOR}.${DD4hep_VERSION_MINOR}" )
-SET( DD4hep_SOVERSION "${DD4hep_VERSION_MAJOR}.${DD4hep_VERSION_MINOR}" )
-
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${CMAKE_SOURCE_DIR}/cmake ) 
-set(LIBRARY_OUTPUT_PATH    ${PROJECT_BINARY_DIR}/lib)
-set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
-
-#------------- set the default installation directory to be the source directory
-
-IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-  SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH  
-    "install prefix path  - overwrite with -D CMAKE_INSTALL_PREFIX = ..." 
-    FORCE )
-  MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" )
-ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-
+dd4hep_set_version(DD4hep MAJOR 0 MINOR 14 PATCH 0)
+dd4hep_configure_output( OUTPUT "${PROJECT_BINARY_DIR}" INSTALL "${CMAKE_INSTALL_PREFIX}" )
 #---Options-------------------------------------------------------------------------
-
-option(DD4HEP_USE_XERCESC "Enable 'Detector Builders' based on XercesC" OFF)
-option(DD4HEP_USE_PYROOT "Enable 'Detector Builders' based on PyROOT" OFF)  # does not work (compile error)
-option(DD4HEP_USE_GEANT4 "Enable the simulation part based on Geant4" OFF)
-option(DD4HEP_USE_GEAR "Build gear wrapper for backward compatibility" OFF)
-option(DD4HEP_USE_LCIO "Build lcio extensions" OFF)
-option(BUILD_TESTING "Enable and build tests" ON)
-option(DD4HEP_USE_CXX11 "Build DD4hep using c++11" OFF)
-
+option(DD4HEP_USE_XERCESC "Enable 'Detector Builders' based on XercesC"   OFF)
+option(DD4HEP_USE_PYROOT  "Enable 'Detector Builders' based on PyROOT"    OFF)  # does not work (compile error)
+option(DD4HEP_USE_GEANT4  "Enable the simulation part based on Geant4"    OFF)
+option(DD4HEP_USE_GEAR    "Build gear wrapper for backward compatibility" OFF)
+option(DD4HEP_USE_LCIO    "Build lcio extensions"    OFF)
+option(BUILD_TESTING      "Enable and build tests"   ON)
+option(DD4HEP_USE_CXX11   "Build DD4hep using c++11" OFF)
 
 #---------------------------------------------------------------------------------------------------
 #fg: moved to here from DD4hep.cmake to not force CMAKE_CXX_FLAGS upon dependent packages
 if(DD4HEP_USE_CXX11)
-  SET( CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -pedantic -Wno-long-long -Wdeprecated -Wformat-security -Wshadow")
+  SET( CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -pedantic -Wshadow -Wformat-security -Wno-long-long -Wdeprecated")
   ADD_DEFINITIONs(-DDD4HEP_USE_CXX11)
 else()
-  SET( CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -Wno-long-long")
+  SET( CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -Wshadow -Wformat-security -Wno-long-long -Wdeprecated")
 endif()
-
-add_definitions(-DBOOST_SPIRIT_USE_PHOENIX_V3)
-
+#
 #-----------------------------------------------------------------------------------------------------
-
-#For backward compatibility for now
-IF( DEFINED DD4HEP_WITH_GEANT4 )
-  SET ( DD4HEP_USE_GEANT4 ${DD4HEP_WITH_GEANT4} )
-ENDIF()
-
-IF( DEFINED DD4HEP_WITH_GEAR )
-  SET ( DD4HEP_USE_GEAR ${DD4HEP_WITH_GEAR} )
-ENDIF()
-
-
-#---------------------------------------------------------------------------------------
+#
 if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
   set (CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "One of: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
 endif()
+#
+#  No Relex library present for ROOT 6
+#
+find_package(ROOT REQUIRED)
+message(STATUS "ROOT_VERSION_MAJOR: ${ROOT_VERSION_MAJOR}" )
+if ( ${ROOT_VERSION_MAJOR} GREATER 5 )
+  set(DD4HEP_NO_REFLEX ON)
+  add_subdirectory(GaudiPluginService)
+endif()
 
 #---DD4hep functions and macros -------------------------------------------------------
 include(DD4hep)
-include( DD4hepMacros ) 
+include(DD4hepMacros) 
 
-#-----------------------------
-
-find_package(ROOT REQUIRED)
-include_directories( SYSTEM ${ROOT_INCLUDE_DIR} )
+IF( DEFINED DD4HEP_WITH_GEANT4 OR DEFINED DD4HEP_WITH_GEAR )
+  dd4hep_print_cmake_options( OPTIONAL "Obsolete options: only the following are allowed:" ERROR 1 )
+ENDIF()
 
+#-----------------------------
 ##checks for xercesc or not and sets up the include_directories
 include(DD4hep_XML_setup)
 
-if(DD4HEP_USE_GEANT4)
-  set( DD4HEP_USE_BOOST On)
-  message( STATUS " *** finding BOOST .... " )
-  find_package( Boost REQUIRED ) 
-  include_directories( SYSTEM ${Boost_INCLUDE_DIRS} )
-  add_definitions( -DDD4HEP_USE_BOOST )
-endif()
-
-if(DD4HEP_USE_LCIO)
-  find_package( LCIO REQUIRED )
-  include_directories( SYSTEM ${LCIO_INCLUDE_DIRS} )
-endif()
-
-#---Testing-------------------------------------------------------------------------
-if(BUILD_TESTING)
-
-  include(CTest)
-  enable_testing()
-  add_subdirectory(DDTest)
-
-  set(BUILDNAME "${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER}-${CMAKE_BUILD_TYPE}" CACHE STRING "set build string for cdash")
-
-endif(BUILD_TESTING)
-
-#---Documentation-------------------------------------------------------------------
-
-OPTION( INSTALL_DOC "Set to OFF to skip build/install Documentation" OFF )
-IF( INSTALL_DOC )
-  INSTALL( CODE "EXECUTE_PROCESS( COMMAND ${CMAKE_BUILD_TOOL} doc)" )
-  include(GlobalSVNRevision)
-  include(DD4hepDoxygen)
-ENDIF()
-
+#if(DD4HEP_USE_GEANT4)
+#  set( DD4HEP_USE_BOOST ON)
+#  message( STATUS " *** finding BOOST .... " )
+#  find_package( Boost REQUIRED ) 
+#  include_directories( SYSTEM ${Boost_INCLUDE_DIRS} )
+#  add_definitions( -DDD4HEP_USE_BOOST )
+#endif()
 
+#if(DD4HEP_USE_LCIO)
+#  find_package( LCIO REQUIRED )
+#  include_directories( SYSTEM ${LCIO_INCLUDE_DIRS} )
+#endif()
 
 
 #---Packages------------------------------------------------------------------------
 
-
-
 ##------ don't allow to use a pre-built DDSegmentation  ----------------------------
 #find_package( DDSegmentation QUIET )
 #if( NOT DDSegmentation_FOUND ) 
 #  add_subdirectory(DDSegmentation)
 #endif()
-if(DD4HEP_NO_REFLEX)
-  add_subdirectory(GaudiPluginService)
-endif()
 
 add_subdirectory(DDSegmentation)
+
 add_subdirectory(DDCore)
 add_subdirectory(DDSurfaces)
 add_subdirectory(DDRec)
-add_subdirectory(DDEve)
 add_subdirectory(DDDetectors)
 
-
 if(DD4HEP_USE_GEANT4)
-
+  set ( DD4HEP_USE_CLHEP "OFF" )
   #--- create a geant4 variables for the thisdd4hep.sh script
   find_package( Geant4 9.6 REQUIRED  gdml ui_all vis_all)
 
@@ -146,11 +94,8 @@ if(DD4HEP_USE_GEANT4)
   string(FIND "${Geant4_THIRD_PARTY_INCLUDE_DIRS}"  "CLHEP" CLHEP_POS )
  
   if( NOT "${CLHEP_POS}" STREQUAL "-1"  )
-
     set( GEANT4_USE_CLHEP 1 )
-
     get_filename_component(Geant4_ROOT "${Geant4_INCLUDE_DIR}/../../" ABSOLUTE)
-
     #---- use FindCLHEP shipped with geant4 -----------
     set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${Geant4_ROOT}/cmake/Modules ) 
     
@@ -160,9 +105,9 @@ if(DD4HEP_USE_GEANT4)
 
     find_package( CLHEP REQUIRED )
     include_directories( SYSTEM ${CLHEP_INCLUDE_DIRS} )
+    set ( DD4HEP_USE_CLHEP ON )
 
     get_filename_component(CLHEP_LIBRARY_PATH "${CLHEP_LIBRARIES}" PATH)
-    
     message( STATUS " *** geant4 was build with external CLHEP *** CLHEP_LIBRARY_PATH = ${CLHEP_LIBRARY_PATH}"  )
   else()
     set( GEANT4_USE_CLHEP 0 )
@@ -170,17 +115,26 @@ if(DD4HEP_USE_GEANT4)
 
   set(Geant4_INCLUDE_DIRS ${Geant4_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS})
   set(Geant4_LIBRARIES ${Geant4_LIBRARIES} ${CLHEP_LIBRARIES})
-
-
-#------- now configure DDG4 -------
+  #------- now configure DDG4 -------
   add_subdirectory(DDG4)
 
 endif()
 
-
+add_subdirectory(DDCond)
+add_subdirectory(DDAlign)
+add_subdirectory(DDEve)
 add_subdirectory(UtilityApps)
 
+#---Testing-------------------------------------------------------------------------
+dd4hep_enable_tests( DDTest )
 
+#---Documentation-------------------------------------------------------------------
+OPTION( INSTALL_DOC "Set to OFF to skip build/install Documentation" OFF )
+IF( INSTALL_DOC )
+  INSTALL( CODE "EXECUTE_PROCESS( COMMAND ${CMAKE_BUILD_TOOL} doc)" )
+  include ( GlobalSVNRevision )
+  include ( DD4hepDoxygen )
+ENDIF()
 
 #---Configuration-------------------------------------------------------------------
 # ----for APPLE scripts have to set the DYLD_LIBRARY_PATH 
@@ -192,12 +146,8 @@ configure_file(cmake/thisdd4hep.csh thisdd4hep.csh @ONLY)
 configure_file(cmake/thisdd4hep.sh  thisdd4hep.sh @ONLY)
 configure_file(cmake/run_test.sh run_test.sh @ONLY)
 
-install(FILES ${CMAKE_BINARY_DIR}/thisdd4hep.csh ${CMAKE_BINARY_DIR}/thisdd4hep.sh
-  DESTINATION bin
-  )
-install(PROGRAMS ${CMAKE_BINARY_DIR}/run_test.sh
-  DESTINATION bin
-  )
+install(FILES ${CMAKE_BINARY_DIR}/thisdd4hep.csh ${CMAKE_BINARY_DIR}/thisdd4hep.sh DESTINATION bin )
+install(PROGRAMS ${CMAKE_BINARY_DIR}/run_test.sh DESTINATION bin )
 
 install(DIRECTORY cmake
   DESTINATION ${CMAKE_INSTALL_PREFIX}
@@ -208,16 +158,6 @@ install(DIRECTORY cmake
 #-----------------------------------------------------------------------------------
 display_std_variables()
 
-IF( DEFINED DD4HEP_WITH_GEANT4)
-  MESSAGE ( WARNING "DD4HEP_WITH_GEANT4 is deprecated use DD4HEP_USE_GEANT4")
-ENDIF()
-
-IF( DEFINED DD4HEP_WITH_GEAR )
-  MESSAGE (WARNING "DD4HEP_WITH_GEAR is deprecated use DD4HEP_USE_GEAR")
-ENDIF()
-
-
 ##############################################################################
 # generate and install following configuration files
-
 generate_package_configuration_files( DD4hepConfig.cmake DD4hepConfigVersion.cmake DD4hepLibDeps.cmake )
diff --git a/DDAlign/CMakeLists.txt b/DDAlign/CMakeLists.txt
index d8dc97e93..e2e11e0d4 100644
--- a/DDAlign/CMakeLists.txt
+++ b/DDAlign/CMakeLists.txt
@@ -9,47 +9,10 @@
 # For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 #
 #==========================================================================
-
-cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR)
-#---------------------------
-set( PackageName DDAlign )
-
-#---add additional packages here--------------------------------------------------
-find_package( DD4hep ) 
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${DD4hep_ROOT}/cmake ) 
-include( DD4hep )
-
-find_package( ROOT REQUIRED )
-#---Includedirs ------------------------------------------------------------------
-include_directories(${CMAKE_SOURCE_DIR}/DDCore/include
-	            ${CMAKE_SOURCE_DIR}/DDSegmentation/include	
-                    ${CMAKE_CURRENT_SOURCE_DIR}/include
-    ${DD4hep_INCLUDE_DIRS}
-    ${ROOT_INCLUDE_DIR} )
+dd4hep_package(    DDAlign
+  USES             DDCore
+  INCLUDE_DIRS     include
+  INSTALL_INCLUDES include/DDAlign)
 
 #---DDAlign library --------------------------------------------------------------
-file(GLOB sources src/*.cpp)
-add_library(DDAlign SHARED ${sources})
-target_link_libraries(DDAlign DDCore ${ROOT_LIBRARIES})
-#
-#
-if(DD4HEP_USE_XERCESC)
-  add_definitions(-DDD4HEP_USE_XERCESC)
-else()
-  add_definitions(-DDD4HEP_USE_TINYXML)
-endif()
-SET_TARGET_PROPERTIES( DDAlign PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
-#
-#---DDAlign rootmap --------------------------------------------------------------
-dd4hep_generate_rootmap(DDAlign)
-#
-install(DIRECTORY include/DDAlign
-  DESTINATION include
-  PATTERN ".svn" EXCLUDE )
-
-install(TARGETS DDAlign
-  RUNTIME DESTINATION bin
-  LIBRARY DESTINATION lib
-  )
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
+dd4hep_add_plugin ( DDAlign SOURCES src/*.cpp )
diff --git a/DDAlign/include/DDAlign/AlignmentStack.h b/DDAlign/include/DDAlign/AlignmentStack.h
index 785cd6962..72dc476ff 100644
--- a/DDAlign/include/DDAlign/AlignmentStack.h
+++ b/DDAlign/include/DDAlign/AlignmentStack.h
@@ -34,9 +34,6 @@ namespace DD4hep {
      */
     class AlignmentStack  {
     public:
-
-      friend class dd4hep_ptr<AlignmentStack>;
-
       enum {
         OVERLAP_DEFINED     = 1<<0,
         MATRIX_DEFINED      = 1<<1,
@@ -121,11 +118,11 @@ namespace DD4hep {
 
       /// Default constructor
       AlignmentStack();
+    public:
+
       /// Default destructor. Careful with this one:
       virtual ~AlignmentStack();
 
-    public:
-
       /// Static client accessor
       static AlignmentStack& get();
       /// Create an alignment stack instance. The creation of a second instance will be refused.
diff --git a/DDAlign/src/AlignmentCache.cpp b/DDAlign/src/AlignmentCache.cpp
index c711a2669..3694b2798 100644
--- a/DDAlign/src/AlignmentCache.cpp
+++ b/DDAlign/src/AlignmentCache.cpp
@@ -194,11 +194,11 @@ void AlignmentCache::uninstall(LCDD& lcdd)   {
 }
 
 /// Retrieve branch cache by name. If not present it will be created
-AlignmentCache* AlignmentCache::subdetectorAlignments(const string& name)    {
-  SubdetectorAlignments::const_iterator i = m_detectors.find(name);
+AlignmentCache* AlignmentCache::subdetectorAlignments(const string& nam)    {
+  SubdetectorAlignments::const_iterator i = m_detectors.find(nam);
   if ( i == m_detectors.end() )   {
-    AlignmentCache* ptr = new AlignmentCache(m_lcdd,name,false);
-    m_detectors.insert(make_pair(name,ptr));
+    AlignmentCache* ptr = new AlignmentCache(m_lcdd,nam,false);
+    m_detectors.insert(make_pair(nam,ptr));
     return ptr;
   }
   return (*i).second;
@@ -260,9 +260,7 @@ void AlignmentCache::apply(AlignmentStack& stack)    {
 /// Apply a vector of SD entries of ordered alignments to the geometry structure
 void AlignmentCache::apply(const vector<Entry*>& changes)   {
   typedef map<string,pair<TGeoPhysicalNode*,Entry*> > Nodes;
-  typedef vector<Entry*> Changes;
   Nodes nodes;
-
   AlignmentSelector selector(*this,nodes,changes);
   for_each(m_cache.begin(),m_cache.end(),selector.reset());
   for_each(nodes.begin(),nodes.end(),AlignmentActor<node_print>(*this,nodes));
diff --git a/DDAlign/src/AlignmentOperators.cpp b/DDAlign/src/AlignmentOperators.cpp
index 952bdf971..adc758b2a 100644
--- a/DDAlign/src/AlignmentOperators.cpp
+++ b/DDAlign/src/AlignmentOperators.cpp
@@ -36,8 +36,8 @@ void AlignmentSelector::operator()(Entries::value_type e)  const {
   nodes.insert(make_pair(e->path,make_pair(pn,e)));
 }
 
-void AlignmentSelector::operator()(const Cache::value_type& e)  const {
-  TGeoPhysicalNode* pn = e.second;
+void AlignmentSelector::operator()(const Cache::value_type& entry)  const {
+  TGeoPhysicalNode* pn = entry.second;
   for(Entries::const_iterator j=entries.begin(); j != entries.end(); ++j)   {
     Entries::value_type e = (*j);
     if ( e->needsReset() || e->hasMatrix() )  {
diff --git a/DDAlign/src/AlignmentStack.cpp b/DDAlign/src/AlignmentStack.cpp
index 8ecf50f4c..a48418516 100644
--- a/DDAlign/src/AlignmentStack.cpp
+++ b/DDAlign/src/AlignmentStack.cpp
@@ -29,7 +29,8 @@ static dd4hep_ptr<AlignmentStack>& _stack()  {
 }
 static dd4hep_ptr<AlignmentStack>& _stack(AlignmentStack* obj)  {
   dd4hep_ptr<AlignmentStack>& s = _stack();
-  s = dd4hep_ptr<AlignmentStack>(obj);
+  dd4hep_ptr<AlignmentStack>  n(obj);
+  s = n;
   return s;
 }
 
@@ -244,9 +245,9 @@ bool AlignmentStack::add(dd4hep_ptr<StackEntry>& entry)  {
 dd4hep_ptr<AlignmentStack::StackEntry> AlignmentStack::pop()   {
   Stack::iterator i = m_stack.begin();
   if ( i != m_stack.end() )   {
-    StackEntry* e = (*i).second;
+    dd4hep_ptr<StackEntry> e((*i).second);
     m_stack.erase(i);
-    return dd4hep_ptr<StackEntry>(e);
+    return e;
   }
   throw runtime_error("AlignmentStack> Alignment stack is empty. "
                       "Cannot pop entries - check size first!");
diff --git a/DDCond/CMakeLists.txt b/DDCond/CMakeLists.txt
index 30b5f560b..6d0d8bba3 100644
--- a/DDCond/CMakeLists.txt
+++ b/DDCond/CMakeLists.txt
@@ -9,47 +9,10 @@
 # For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 #
 #==========================================================================
+dd4hep_package(    DDCond
+  USES             DDCore
+  INCLUDE_DIRS     include
+  INSTALL_INCLUDES include/DDCond)
 
-cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR)
-#---------------------------
-set( PackageName DDCond )
-
-#---add additional packages here--------------------------------------------------
-if(NOT DD4HEP_BUILD_ALL)
-find_package( DD4hep ) 
-endif()
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${DD4hep_ROOT}/cmake ) 
-include( DD4hep )
-
-find_package( ROOT REQUIRED )
-#---Includedirs ------------------------------------------------------------------
-include_directories(${CMAKE_SOURCE_DIR}/DDCore/include
-	            ${CMAKE_SOURCE_DIR}/DDSegmentation/include	
-                    ${CMAKE_CURRENT_SOURCE_DIR}/include
-    ${DD4hep_INCLUDE_DIRS}
-    ${ROOT_INCLUDE_DIR} )
-
-#---DD4hepCond library --------------------------------------------------------------
-file(GLOB sources src/*.cpp)
-add_library(DD4hepCond SHARED ${sources})
-target_link_libraries(DD4hepCond DDCore ${ROOT_LIBRARIES})
-
-if(DD4HEP_USE_XERCESC)
-  add_definitions(-DDD4HEP_USE_XERCESC)
-else()
-  add_definitions(-DDD4HEP_USE_TINYXML)
-endif()
-SET_TARGET_PROPERTIES( DD4hepCond PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
-#---DD4hepCond rootmap --------------------------------------------------------------
-dd4hep_generate_rootmap(DD4hepCond)
-
-install(DIRECTORY include/DDCond
-  DESTINATION include
-  PATTERN ".svn" EXCLUDE )
-
-install(TARGETS DD4hepCond
-  RUNTIME DESTINATION bin
-  LIBRARY DESTINATION lib
-  )
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
+#---DDCond library --------------------------------------------------------------
+dd4hep_add_plugin ( DDCond SOURCES src/*.cpp )
diff --git a/DDCond/include/DDCond/ConditionsStack.h b/DDCond/include/DDCond/ConditionsStack.h
index e9dc9ee49..09722b7d8 100644
--- a/DDCond/include/DDCond/ConditionsStack.h
+++ b/DDCond/include/DDCond/ConditionsStack.h
@@ -37,9 +37,7 @@ namespace DD4hep {
      */
     class ConditionsStack {
     public:
-      friend class dd4hep_ptr<ConditionsStack>;
-
-      typedef ConditionsInterna::Entry Entry;
+      typedef ConditionsInterna::Entry     Entry;
       typedef std::map<std::string,Entry*> Stack;
 
     protected:
@@ -48,10 +46,11 @@ namespace DD4hep {
 
       /// Standard constructor
       ConditionsStack();
+
+    public:
       /// Standard destructor
       virtual ~ConditionsStack();
 
-    public:
       /// Static client accessor
       static ConditionsStack& get(); 
       /// Create an conditions stack instance. The creation of a second instance will be refused.
diff --git a/DDCond/src/ConditionsParser.cpp b/DDCond/src/ConditionsParser.cpp
index 8da8c373c..96b87c365 100644
--- a/DDCond/src/ConditionsParser.cpp
+++ b/DDCond/src/ConditionsParser.cpp
@@ -68,12 +68,11 @@ DetElement _getDetector(void* param, xml_h e)  {
 }
 
 /// Helper: Extract the string value from the xml element 
-dd4hep_ptr<Entry> _getStackEntry(void* param, xml_h element)  {
+Entry* _createStackEntry(void* param, xml_h element)  {
   xml_comp_t e(element);
   DetElement elt = _getDetector(param, element);
   string name = e.hasAttr(_U(name)) ? e.nameStr() : e.tag();
-  dd4hep_ptr<Entry> result(new Entry(elt,name,e.tag(),_getValidity(element)));
-  return result;
+  return new Entry(elt,name,e.tag(),_getValidity(element));
 }
 
 /** Convert arbitrary conditon objects containing standard tags
@@ -125,7 +124,7 @@ template <> void Converter<arbitrary>::operator()(xml_h e) const {
   else if ( tag == "detelements" )
     xml_coll_t(e,_U(star)).for_each(Converter<conditions>(lcdd,param));
   else  {
-    dd4hep_ptr<Entry> val(_getStackEntry(param,e));
+    dd4hep_ptr<Entry> val(_createStackEntry(param,e));
     val->value = elt.hasAttr(_U(value)) ? elt.valueStr() : e.text();
     ConditionsStack::get().insert(val);
   }
diff --git a/DDCond/src/ConditionsStack.cpp b/DDCond/src/ConditionsStack.cpp
index d174b0f29..6e75c3808 100644
--- a/DDCond/src/ConditionsStack.cpp
+++ b/DDCond/src/ConditionsStack.cpp
@@ -28,7 +28,8 @@ static dd4hep_ptr<ConditionsStack>& _stack()  {
 }
 static dd4hep_ptr<ConditionsStack>& _stack(ConditionsStack* obj)  {
   dd4hep_ptr<ConditionsStack>& s = _stack();
-  s = dd4hep_ptr<ConditionsStack>(obj);
+  dd4hep_ptr<ConditionsStack>  n(obj);
+  s = n;
   return s;
 }
 
@@ -75,16 +76,16 @@ void ConditionsStack::release()    {
 dd4hep_ptr<ConditionsStack::Entry> ConditionsStack::pop()   {
   Stack::iterator i = m_stack.begin();
   if ( i != m_stack.end() )   {
-    Entry* e = (*i).second;
+    dd4hep_ptr<ConditionsStack::Entry> e((*i).second);
     m_stack.erase(i);
-    return dd4hep_ptr<Entry>(e);
+    return e;
   }
   throw runtime_error("ConditionsStack> pop: Conditions stack is empty. Check size first!");
 }
 
 /// Get all pathes to be aligned
 vector<const ConditionsStack::Entry*> ConditionsStack::entries() const    {
-  vector<const Entry*> result;
+  vector<const ConditionsStack::Entry*> result;
   result.reserve(m_stack.size());
   for(Stack::const_iterator i=m_stack.begin(); i != m_stack.end(); ++i)
     result.push_back((*i).second);
diff --git a/DDCore/CMakeLists.txt b/DDCore/CMakeLists.txt
index 8fcf570ae..c569cefe1 100644
--- a/DDCore/CMakeLists.txt
+++ b/DDCore/CMakeLists.txt
@@ -1,71 +1,43 @@
-# $Id: $
-#==========================================================================
+#=================================================================================
+#  $Id: $
+#
 #  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.
 #
-#==========================================================================
-
-cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR)
-
-project(DDCore)
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include 
-  ${DDSegmentation_INCLUDE_DIRS} 
-  ${GaudiPluginService_INCLUDE_DIRS})
-
-file(GLOB sources src/*.cpp src/Evaluator/*.cpp src/XML/*.cpp)
-file(GLOB plugin_sources src/plugins/*.cpp)
-
-#---Add Library-------------------------------------------------------------------
-if(DD4HEP_USE_BOOST)
-  file(GLOB parser_sources src/parsers/*.cpp )
-  add_definitions(-DDD4HEP_USE_BOOST)
-else()
-  file(GLOB parser_sources)
-endif()
-
-file(GLOB headers include/DD4hep/*.h)
-file(GLOB internal_headers include/DD4hep/objects/*.h)
-list(APPEND headers ${DDSegmentation_INCLUDE_DIRS}/DDSegmentation/BitField64.h)
-list(APPEND headers ${DDSegmentation_INCLUDE_DIRS}/DDSegmentation/Segmentation.h)
-list(REMOVE_ITEM headers ${CMAKE_CURRENT_SOURCE_DIR}/include/DD4hep/DetFactoryHelper.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/include/DD4hep/Factories.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/include/DD4hep/Plugins.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/include/DD4hep/IoStreams.h
-  ${CMAKE_CURRENT_SOURCE_DIR}/include/DD4hep/SurfaceInstaller.h
-  )
-root_generate_dictionary( G__DD4hep ${headers} ${internal_headers} LINKDEF include/ROOT/LinkDef.h)
-list(APPEND sources G__DD4hep.cxx)
-
-if(DD4HEP_USE_PYROOT)
-  add_definitions(-DDD4HEP_USE_PYROOT)
-  set(libraries  ${libraries} PyROOT)
-endif()
-
-add_library(DDCore SHARED ${sources} ${parser_sources} )
-
-target_link_libraries(DDCore ${ROOT_LIBRARIES} ${XML_LIBRARIES} ${GaudiPluginService_LIBRARIES} ${DDSegmentation_LIBRARIES} Geom ${libraries})
-
-## generates rootmap and installs the library
-add_dd4hep_plugin(DDCorePlugins SHARED ${plugin_sources})
-target_link_libraries(DDCorePlugins ${ROOT_LIBRARIES} ${XML_LIBRARIES} DDCore Geom ${libraries})
-
-SET_TARGET_PROPERTIES( DDCore DDCorePlugins PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
-
-#--- install target-------------------------------------
-install(DIRECTORY include/DD4hep  include/XML
-  DESTINATION include
-  PATTERN ".svn" EXCLUDE )
-
-install(TARGETS DDCore
-  RUNTIME DESTINATION bin
-  LIBRARY DESTINATION lib
+#=================================================================================
+dd4hep_package(    DDCore
+  USES             [ROOT REQUIRED COMPONENTS Geom GenVector]
+                   DDSegmentation
+  OPTIONAL         XERCESC
+  INCLUDE_DIRS     include
+  INSTALL_INCLUDES include/DD4hep include/XML)
+
+#---Generate ROOT dictionary------------------------------------------------------
+dd4hep_add_dictionary( G__DD4hep
+  SOURCES include/DD4hep/*.h 
+  include/DD4hep/objects/*.h 
+  ${DDSegmentation_INCLUDE_DIRS}/DDSegmentation/BitField64.h
+  ${DDSegmentation_INCLUDE_DIRS}/DDSegmentation/Segmentation.h
+  EXCLUDE include/DD4hep/DetFactoryHelper.h
+  include/DD4hep/Factories.h
+  include/DD4hep/Plugins.h
+  include/DD4hep/IoStreams.h
+  include/DD4hep/SurfaceInstaller.h
+  LINKDEF include/ROOT/LinkDef.h )
+
+#---Generate DDCore Library-------------------------------------------------------
+dd4hep_add_package_library ( DDCore
+  SOURCES        src/*.cpp src/Evaluator/*.cpp src/XML/*.cpp
+  GENERATED      G__DD4hep.cxx 
+  INCLUDE_DIRS   ${GaudiPluginService_INCLUDE_DIRS}
+  LINK_LIBRARIES ${GaudiPluginService_LIBRARIES}
+  OPTIONAL       [BOOST SOURCES src/parsers/*.cpp]
   )
 
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
+# Generate DDCore plugins---------------------------------------------------------
+dd4hep_add_plugin ( DDCorePlugins  SOURCES src/plugins/*.cpp )
diff --git a/DDCore/include/DD4hep/Memory.h b/DDCore/include/DD4hep/Memory.h
index acded026a..8eb461411 100644
--- a/DDCore/include/DD4hep/Memory.h
+++ b/DDCore/include/DD4hep/Memory.h
@@ -39,27 +39,28 @@ namespace DD4hep  {
   public:
     typedef std::unique_ptr<T> base_t;
 #else
-      : public std::auto_ptr<T>  {
+    : public std::auto_ptr<T>  {
     public:
-        typedef std::auto_ptr<T> base_t;
-        void swap(base_t& c) {
-          this->base_t::operator=(base_t(c.release()));
-        }
+      typedef std::auto_ptr<T> base_t;
+      void swap(base_t& c) {
+	this->base_t::operator=(base_t(c.release()));
+      }
 #endif
-        /// Default Constructor.
-        dd4hep_ptr() : base_t() {}
-        /// Constructor from pointer
-        dd4hep_ptr(T* p) : base_t(p) {}
-        /// Constructor from copy
-        dd4hep_ptr(base_t& c) : base_t(c) {}
-        /// Assignment operator
-        dd4hep_ptr& operator=(base_t& c) {
-          if ( this != &c )  {
-            this->swap(c);
-          }
-          return *this;
-        }
-      };
+    public:
+      /// Default Constructor.
+    dd4hep_ptr() : base_t() {}
+      /// Constructor from pointer
+    dd4hep_ptr(T* p) : base_t(p) {}
+      /// Constructor from copy
+    dd4hep_ptr(base_t& c) : base_t(c) {}
+      /// Assignment operator
+      dd4hep_ptr& operator=(base_t& c) {
+	if ( this != &c )  {
+	  this->swap(c);
+	}
+	return *this;
+      }
+    };
   }
 
 #endif  // DD4HEP_MEMORY_H
diff --git a/DDDetectors/CMakeLists.txt b/DDDetectors/CMakeLists.txt
index b9be1e243..c0e0c65af 100644
--- a/DDDetectors/CMakeLists.txt
+++ b/DDDetectors/CMakeLists.txt
@@ -1,5 +1,6 @@
-# $Id: $
 #==========================================================================
+#  $Id: $
+#
 #  AIDA Detector description implementation for LCD
 #--------------------------------------------------------------------------
 # Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
@@ -16,35 +17,8 @@
 #  Date:    13/11/2014
 #
 #--------------------------------------------------------------------------
-#
-#---Find ROOT--------------------------------------------------------------
-find_package( ROOT REQUIRED COMPONENTS Geom )
-#---Find and configure DD4hep basics---------------------------------------
-include(DD4hep)
-#---Find and configure Xerces----------------------------------------------
-include(DD4hep_XML_setup)
-#
-#---Includedirs------------------------------------------------------------
-include_directories(${CMAKE_SOURCE_DIR}/DDCore/include
-	            ${CMAKE_SOURCE_DIR}/DDRec/include	
-	            ${CMAKE_SOURCE_DIR}/DDSurfaces/include	
-	            ${CMAKE_SOURCE_DIR}/DDSegmentation/include	
-                    ${ROOT_INCLUDE_DIR} )
-#---Add Library------------------------------------------------------------
-file(GLOB sources src/*.cpp )
-
-add_dd4hep_plugin( DDDetectors SHARED ${sources})
-target_link_libraries( DDDetectors DDCore DDRec ${ROOT_LIBRARIES} )
-SET_TARGET_PROPERTIES(DDDetectors PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
-
-
-#
-#--- install target--------------------------------------------------------
-install( TARGETS DDDetectors LIBRARY DESTINATION lib )
-
-install( DIRECTORY compact
-  DESTINATION DDDetectors
-  PATTERN ".svn" EXCLUDE )
-
-# to do: add corresponding uninstall...
-#--------------------------------------------------------------------------
+dd4hep_package( DDDetectors USES DDRec )
+#---Add Plugin Library-----------------------------------------------------
+dd4hep_add_plugin ( DDDetectors SOURCES src/*.cpp )
+#---Package installation procedure(s) -------------------------------------
+dd4hep_install_dir ( compact DESTINATION DDDetectors )
diff --git a/DDEve/CMakeLists.txt b/DDEve/CMakeLists.txt
index cf95262ef..54baebba9 100644
--- a/DDEve/CMakeLists.txt
+++ b/DDEve/CMakeLists.txt
@@ -9,74 +9,18 @@
 # For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 #
 #==========================================================================
+dd4hep_package(    DDEve
+  USES             DDCore [ROOT REQUIRED COMPONENTS TEve]
+  INCLUDE_DIRS     include
+  INSTALL_INCLUDES include/DDEve)
+#
+#---Add Plugin Library-----------------------------------------------------
+dd4hep_add_dictionary ( G__DDEve SOURCES include/DDEve/*.h )
+#
+dd4hep_add_plugin ( DDEve SOURCES src/*.cpp 
+  GENERATED   G__DDEve.cxx
+  OPTIONAL    [DDG4 INTERNAL SOURCES G__DDG4IO.cxx]
+              [LCIO EXTERNAL SOURCES lcio/LCIOEventHandler.cpp] )
 
-cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR)
-#---------------------------
-set( PackageName DDEve )
-
-#---add additional packages here-------------------------------------------
-if(DD4HEP_BUILD_ALL)
-  find_package( DD4hep ) 
-endif()
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${DD4hep_ROOT}/cmake ) 
-include( DD4hep )
-
-find_package( ROOT REQUIRED )
-#---Includedirs -----------------------------------------------------------
-if(DD4HEP_USE_GEANT4)
-  include_directories(${CMAKE_SOURCE_DIR}/DDCore/include
-    ${CMAKE_SOURCE_DIR}/DDSegmentation/include	
-    ${CMAKE_SOURCE_DIR}/DDG4/include	
-    ${CMAKE_CURRENT_SOURCE_DIR}/include
-#    ${DD4hep_INCLUDE_DIRS}
-    ${ROOT_INCLUDE_DIR} )
-else()
-  include_directories(${CMAKE_SOURCE_DIR}/DDCore/include
-    ${CMAKE_SOURCE_DIR}/DDSegmentation/include	
-    ${CMAKE_CURRENT_SOURCE_DIR}/include
-#    ${DD4hep_INCLUDE_DIRS}
-    ${ROOT_INCLUDE_DIR} )
-endif()
-#---DDEve library ---------------------------------------------------------
-file(GLOB headers include/DDEve/*.h)
-file(GLOB sources src/*.cpp)
-set( eve_link_libraries DDCore ${ROOT_EVE_LIBRARIES} -lFTGL )
-#---------------------------  Support for the LCIO data I/O ---------------
-if(DD4HEP_USE_LCIO)
-  find_package(LCIO REQUIRED)
-  include_directories( ${LCIO_INCLUDE_DIRS} )
-  list(APPEND sources lcio/LCIOEventHandler.cpp)
-  list(APPEND eve_link_libraries ${LCIO_LIBRARIES} )
-endif()
-#---------------------------  Support for the DDG4 data I/O ---------------
-if(DD4HEP_USE_GEANT4)
-  root_generate_dictionary( G__DDG4IO ${CMAKE_CURRENT_SOURCE_DIR}/DDEve/DDG4IO.C LINKDEF ${CMAKE_SOURCE_DIR}/DDCore/include/ROOT/LinkDef.h )
-  list(APPEND sources G__DDG4IO.cxx)
-  list(APPEND eve_link_libraries DDG4 )
-endif()
-#---------------------------  Add DDEve dictionary for interactive ROOT sessions ---
-root_generate_dictionary( G__DDEve ${headers} LINKDEF ${CMAKE_SOURCE_DIR}/DDCore/include/ROOT/LinkDef.h)
-list(APPEND sources G__DDEve.cxx)
-
-add_library(DDEve SHARED ${sources})
-target_link_libraries(DDEve ${eve_link_libraries})
-
-SET_TARGET_PROPERTIES(DDEve PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
-
-#---DDEve rootmap ---------------------------------------------------------
-dd4hep_generate_rootmap(DDEve)
 #---Package installation procedure(s) -------------------------------------
-install(DIRECTORY include/DDEve
-  DESTINATION include
-  PATTERN ".svn" EXCLUDE )
-
-install(DIRECTORY ${PackageName}
-  DESTINATION examples
-  PATTERN ".svn" EXCLUDE )
-
-install(TARGETS DDEve
-  RUNTIME DESTINATION bin
-  LIBRARY DESTINATION lib
-  )
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
+dd4hep_install_dir ( DDEve DESTINATION examples )
diff --git a/DDEve/include/DDEve/ElementList.h b/DDEve/include/DDEve/ElementList.h
index 626277859..cc5357862 100644
--- a/DDEve/include/DDEve/ElementList.h
+++ b/DDEve/include/DDEve/ElementList.h
@@ -43,8 +43,8 @@ namespace DD4hep {
     ElementList(const ElementList& l);
     /// Default destructor
     virtual ~ElementList();
-    /// Clone object
-    TEveElement* CloneElement();
+    /// Clone object: Overload from TEveElementList
+    virtual TEveElementList* CloneElement()  const;
     /// Root implementation macro
     ClassDef(ElementList,0);
   };
diff --git a/DDEve/include/DDEve/View.h b/DDEve/include/DDEve/View.h
index 374fd321c..89a6f0cb9 100644
--- a/DDEve/include/DDEve/View.h
+++ b/DDEve/include/DDEve/View.h
@@ -110,7 +110,7 @@ namespace DD4hep {
     virtual View& CreateGeoScene();
 
     /// Configure a view with geo info. Used configuration if present.
-    virtual void ConfigureGeometry();
+    virtual void ConfigureGeometryFromInfo();
     /// Configure a single geometry view by default from the global geometry scene with all subdetectors
     virtual void ConfigureGeometryFromGlobal();
     /// Configure a single geometry view
@@ -143,7 +143,7 @@ namespace DD4hep {
     /// Create the event scene
     virtual View& CreateEventScene();
     /// Configure a view with event info. Used configuration if present.
-    virtual void ConfigureEvent();
+    virtual void ConfigureEventFromInfo();
     /// Configure an event view by default from the global event scene
     virtual void ConfigureEventFromGlobal();
     /// Configure a single event scene view
diff --git a/DDEve/src/Display.cpp b/DDEve/src/Display.cpp
index 9114fc14e..71a0256ae 100644
--- a/DDEve/src/Display.cpp
+++ b/DDEve/src/Display.cpp
@@ -450,7 +450,7 @@ void Display::OnNewEvent(EventHandler* handler )   {
     ImportEvent(particles);
   }
   for(Views::iterator i = m_eveViews.begin(); i != m_eveViews.end(); ++i)
-    (*i)->ConfigureEvent();
+    (*i)->ConfigureEventFromInfo();
   manager().Redraw3D();
 }
 
diff --git a/DDEve/src/ElementList.cpp b/DDEve/src/ElementList.cpp
index a9925bcf7..7fd8220e5 100644
--- a/DDEve/src/ElementList.cpp
+++ b/DDEve/src/ElementList.cpp
@@ -51,7 +51,7 @@ ElementList::~ElementList()  {
 }
 
 /// Clone object
-TEveElement* ElementList::CloneElement()   {
+TEveElementList* ElementList::CloneElement() const  {
   return new ElementList(*this);
 }
 
diff --git a/DDEve/src/MultiView.cpp b/DDEve/src/MultiView.cpp
index 33e845f71..10945371e 100644
--- a/DDEve/src/MultiView.cpp
+++ b/DDEve/src/MultiView.cpp
@@ -30,8 +30,8 @@ DECLARE_VIEW_FACTORY(MultiView)
 static void _build(Display* display, View* v, TEveWindowSlot* slot)  {
   v->Build(slot);
   display->RegisterEvents(v);
-  v->ConfigureGeometry();
-  v->ConfigureEvent();
+  v->ConfigureGeometryFromInfo();
+  v->ConfigureEventFromInfo();
   v->Initialize();
 }
 
diff --git a/DDEve/src/View.cpp b/DDEve/src/View.cpp
index a129293d0..22cd107a0 100644
--- a/DDEve/src/View.cpp
+++ b/DDEve/src/View.cpp
@@ -137,7 +137,7 @@ View::CreateGeometry(DetElement de, const DisplayConfiguration::Config& cfg)   {
 }
 
 /// Configure a view using the view's name and a proper ViewConfiguration if present
-void View::ConfigureGeometry()     {
+void View::ConfigureGeometryFromInfo()     {
   printout(INFO,"View","+++ Configure Geometry for view %s Config=%p.",c_name(),m_config);
   (m_config) ? ConfigureGeometry(*m_config) : ConfigureGeometryFromGlobal();
   ImportGeoTopics(name());
@@ -228,7 +228,7 @@ void View::ImportGeo(TEveElement* el)  {
 }
 
 /// Configure the adding of event data 
-void View::ConfigureEvent()    {
+void View::ConfigureEventFromInfo()    {
   printout(INFO,"View","+++ Import event data into view %s Config=%p.",c_name(),m_config);
   (m_config) ? ConfigureEvent(*m_config) : ConfigureEventFromGlobal();
   ImportEventTopics();
diff --git a/DDEve/src/ViewMenu.cpp b/DDEve/src/ViewMenu.cpp
index 1e2849319..5588cfd57 100644
--- a/DDEve/src/ViewMenu.cpp
+++ b/DDEve/src/ViewMenu.cpp
@@ -102,8 +102,8 @@ void ViewMenu::BuildView(View* v)  const  {
   TEveWindowSlot *slot = TEveWindow::CreateWindowInTab(right);
   v->Build(slot);
   m_display->RegisterEvents(v);
-  v->ConfigureGeometry();
-  v->ConfigureEvent();
+  v->ConfigureGeometryFromInfo();
+  v->ConfigureEventFromInfo();
   v->Initialize();
   right->SetTab(right->GetNumberOfTabs()-1);
 }
diff --git a/DDG4/CMakeLists.txt b/DDG4/CMakeLists.txt
index 4b130e9ac..bcf919f48 100644
--- a/DDG4/CMakeLists.txt
+++ b/DDG4/CMakeLists.txt
@@ -9,109 +9,31 @@
 # For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 #
 #==========================================================================
-
-#---Find Geant4-------------------------------------------------------------------
-find_package(Geant4 REQUIRED gdml ui_all vis_all)
-INCLUDE(${Geant4_USE_FILE})   # this also takes care of geant 4 definitions and include dirs
-#---DD4hep functions and macros -------------------------------------------------------
-include( DD4hep )
-#---Includedirs-------------------------------------------------------------------
-include_directories(${CMAKE_SOURCE_DIR}/DDCore/include
-	            ${CMAKE_SOURCE_DIR}/DDSegmentation/include	
-                    ${CMAKE_CURRENT_SOURCE_DIR}/include
-                    ${ROOT_INCLUDE_DIR}
-                    ${CLHEP_INCLUDE_DIR}
-                    ${Geant4_INCLUDE_DIRS} )
-
-#---Add Library-------------------------------------------------------------------
-file(GLOB sources src/*.cpp)
-
-if(NOT DD4HEP_USE_XERCESC)
-  list(REMOVE_ITEM sources ${CMAKE_CURRENT_SOURCE_DIR}/src/Geant4XML.cpp)
-endif()
-#
-add_library(DDG4 SHARED ${sources})
-target_link_libraries(DDG4 DDCore ${ROOT_LIBRARIES} ${Geant4_LIBRARIES})
-SET_TARGET_PROPERTIES( DDG4 PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
-#-----------------------------------------------------------------------------------
-# No rootmap for link libraries!
+dd4hep_package(    DDG4
+  USES            [GEANT4 REQUIRED COMPONENTS gdml ui_all vis_all]
+                   DDCore
+  OPTIONAL         CLHEP [XercesC QUIET]
+  INCLUDE_DIRS     include
+  INSTALL_INCLUDES include/DDG4)
+#---Add Library---------------------------------------------------------------------
+dd4hep_add_package_library(DDG4 SOURCES src/*.cpp )
 #---------------------------  Legacy libraries (for Frank) -------------------------
-file(GLOB legacy_sources legacy/*.cpp)
-add_library(DDG4Legacy SHARED ${legacy_sources})
-target_link_libraries(DDG4Legacy DDCore DDG4 ${ROOT_LIBRARIES} ${Geant4_LIBRARIES})
-
-SET_TARGET_PROPERTIES(DDG4Legacy PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
-dd4hep_generate_rootmap(DDG4Legacy)
-
-#---------------------------  Main geant4 interface library (no plugins!)-----------
-root_generate_dictionary( G__DDG4 ${CMAKE_CURRENT_SOURCE_DIR}/python/DDG4Dict.C LINKDEF ${CMAKE_SOURCE_DIR}/DDCore/include/ROOT/LinkDef.h)
-#---------------------------  New Plugin library for new simulation framework  -----
-file(GLOB plugins_sources plugins/*.cpp)
-list(APPEND plugins_sources G__DDG4.cxx)
-add_library(DDG4Plugins SHARED ${plugins_sources})
-target_link_libraries(DDG4Plugins DDCore DDG4 ${ROOT_LIBRARIES} ${Geant4_LIBRARIES})
-
-SET_TARGET_PROPERTIES(DDG4Plugins PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
-dd4hep_generate_rootmap(DDG4Plugins)
-
+dd4hep_add_plugin(DDG4Legacy    SOURCES legacy/*.cpp)
+#-----------------------------------------------------------------------------------
+dd4hep_add_dictionary( G__DDG4  SOURCES python/DDG4Dict.C )
+#---------------------------  Plugin library for the simulation framework  ---------
+dd4hep_add_plugin(DDG4Plugins
+  GENERATED   G__DDG4.cxx
+  SOURCES     plugins/*.cpp)
 #---------------------------  LCIO Plugins for new simulation framework  -----------
-if(DD4HEP_USE_LCIO)
-  find_package(LCIO REQUIRED)
-  include_directories(  ${LCIO_INCLUDE_DIRS} )
-  file(GLOB lcio_sources lcio/*.cpp)
-  add_library(DDG4LCIO SHARED ${lcio_sources})
-  target_link_libraries(DDG4LCIO DDCore DDG4 ${Geant4_LIBRARIES} ${LCIO_LIBRARIES} ${ROOT_LIBRARIES} EG)
-  SET_TARGET_PROPERTIES(DDG4LCIO PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
-  dd4hep_generate_rootmap(DDG4LCIO)
-endif()
-
+dd4hep_add_plugin(DDG4LCIO 
+  OPTIONAL [LCIO REQUIRED SOURCES lcio/*.cpp] )
 #-----------------------------------------------------------------------------------
-add_executable(g4gdmlDisplay g4gdmlDisplay.cpp)
-target_link_libraries(g4gdmlDisplay DDG4 DDCore)
+dd4hep_add_executable(g4gdmlDisplay SOURCES g4gdmlDisplay.cpp)
 #-----------------------------------------------------------------------------------
-add_executable(g4FromXML g4FromXML.cpp)
-target_link_libraries(g4FromXML DDG4 DDCore)
+dd4hep_add_executable(g4FromXML     SOURCES g4FromXML.cpp)
 #-----------------------------------------------------------------------------------
-add_executable( dd_sim ddsim.cpp)
-target_link_libraries(dd_sim DDCore DDG4)
-
-#--- install target-------------------------------------
-install(DIRECTORY include/DDG4
-  DESTINATION include
-  PATTERN ".svn" EXCLUDE )
-
-install(DIRECTORY examples
-  DESTINATION examples/DDG4
-  PATTERN ".svn" EXCLUDE )
-
-install(FILES 
-  python/DD4hep.py 
-  python/DDG4.py 
-  python/DDG4Dict.C 
-  python/SystemOfUnits.py
-  DESTINATION python)
-
-install(FILES
-  python/checkOverlaps.py
-  python/checkGeometry.py
-  DESTINATION python)
-
-install(TARGETS DDG4 DDG4Plugins DDG4Legacy g4gdmlDisplay dd_sim
-  RUNTIME DESTINATION bin
-  LIBRARY DESTINATION lib
-  )
-
-install(TARGETS DDG4 g4FromXML
-  RUNTIME DESTINATION bin
-  LIBRARY DESTINATION lib
-  )
-
-if(DD4HEP_USE_LCIO)
-install(TARGETS DDG4LCIO
-  RUNTIME DESTINATION bin
-  LIBRARY DESTINATION lib
-  )
-endif()
-
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
+dd4hep_add_executable(dd_sim        SOURCES ddsim.cpp)
+#---Package installation procedure(s) -------------------------------------
+dd4hep_install_dir(examples DESTINATION examples/DDG4)
+dd4hep_install_files(FILES python/*.py python/*.C DESTINATION python)
diff --git a/DDG4/lcio/LCIOSDTestActions.cpp b/DDG4/lcio/LCIOSDTestActions.cpp
index 510e80373..0377f7b94 100644
--- a/DDG4/lcio/LCIOSDTestActions.cpp
+++ b/DDG4/lcio/LCIOSDTestActions.cpp
@@ -13,6 +13,7 @@
 //==========================================================================
 
 // Framework include files
+#include "Exceptions.h"
 #include "IMPL/LCCollectionVec.h"
 #include "IMPL/SimTrackerHitImpl.h"
 #include "IMPL/SimCalorimeterHitImpl.h"
diff --git a/DDRec/CMakeLists.txt b/DDRec/CMakeLists.txt
index c6c1825d4..0a8daffd0 100644
--- a/DDRec/CMakeLists.txt
+++ b/DDRec/CMakeLists.txt
@@ -1,63 +1,38 @@
-cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR)
+# $Id: $
+#==========================================================================
+#  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: F.Gaede (Desy)
+#
+#==========================================================================
+dd4hep_package(DDRec
+  USES             DDCore DDSurfaces
+  INCLUDE_DIRS     include
+  INSTALL_INCLUDES include/DDRec)
+
+#---Add Library-------------------------------------------------------------
+dd4hep_add_package_library(DDRec 
+  SOURCES        src/*.cpp 
+  OPTIONAL       [GEAR COMPONENTS geartgeo SOURCES src/gear/DDGear.cpp DEFINITIONS DD4HEP_USE_GEAR ]
+)
+dd4hep_add_plugin(DDRecPlugins 
+  SOURCES  src/plugins/*.cpp 
+  OPTIONAL [GEAR SOURCES src/gear/createGearForILD.cpp src/gear/createGearForCLIC.cpp DEFINITIONS DD4HEP_USE_GEAR]
+)
 
-project(DDRec)
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include
-		    ${DDSegmentation_INCLUDE_DIRS}
-		    ${CMAKE_SOURCE_DIR}/DDSurfaces/include
-		    ${CMAKE_SOURCE_DIR}/DDCore/include)
-
-file(GLOB sources src/*.cpp)
-file(GLOB plugin_sources src/plugins/*.cpp)
-
-set(rec_link_libraries DDCore ${DDSegmentation_LIBRARIES} ${ROOT_LIBRARIES} Geom)
-
-#---------------------------  GEAR wrappers for backward compatibility  -----------
 if(DD4HEP_USE_GEAR)
-
-  find_package(GEAR REQUIRED COMPONENTS geartgeo)
-  include_directories(SYSTEM ${GEAR_INCLUDE_DIRS})
-  add_definitions("-D DD4HEP_USE_GEAR")
-
-  list(APPEND sources src/gear/DDGear.cpp)
-  list(APPEND plugin_sources  src/gear/createGearForILD.cpp src/gear/createGearForCLIC.cpp)
-  list(APPEND rec_link_libraries ${GEAR_LIBRARIES} ${GEAR_COMPONENT_LIBRARIES})
-
-  add_executable(convertToGear src/convertToGear.cc)
-
-  target_link_libraries(convertToGear ${PackageName} ${DD4hep_LIBRARIES} DDRec
-    ${ROOT_LIBRARIES} ${ROOT_COMPONENT_LIBRARIES} ${GEAR_LIBRARIES}
-    )
-
-  install(TARGETS convertToGear
-    RUNTIME DESTINATION bin
-  )
-
-endif()
-#-------------------------------------------------------------------------------------
-
-add_library(DDRec SHARED ${sources})
-target_link_libraries(DDRec ${rec_link_libraries})
-
-# Add the DDRecPlugin, as there are currently only gear plugins, we need to check if we want to create the plugin
-if( plugin_sources )
-  add_dd4hep_plugin(DDRecPlugins SHARED ${plugin_sources})
-  target_link_libraries(DDRecPlugins ${rec_link_libraries} DDRec)
-  SET_TARGET_PROPERTIES(DDRecPlugins PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
+  dd4hep_add_executable( convertToGear
+    SOURCES src/convertToGear.cc 
+    USES    [GEAR REQUIRED COMPONENTS geartgeo] )
+else()
+  dd4hep_add_executable( convertToGear
+    OPTIONAL [GEAR COMPONENTS geartgeo SOURCES src/convertToGear.cc DEFINITIONS DD4HEP_USE_GEAR] )
 endif()
 
 
-#SET(CMAKE_CXX_FLAGS "-Wall -Wextra -pedantic -Wno-long-long")
-SET_TARGET_PROPERTIES(DDRec PROPERTIES VERSION ${DD4hep_VERSION} SOVERSION ${DD4hep_SOVERSION})
-
-#--- install target-------------------------------------
-install(DIRECTORY include/DDRec
-  DESTINATION include
-  PATTERN ".svn" EXCLUDE )
-
-install(TARGETS DDRec
-  LIBRARY DESTINATION lib
-  )
-
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
diff --git a/DDSegmentation/CMakeLists.txt b/DDSegmentation/CMakeLists.txt
index 09f27104b..70e5363cc 100644
--- a/DDSegmentation/CMakeLists.txt
+++ b/DDSegmentation/CMakeLists.txt
@@ -27,7 +27,9 @@ SET_TARGET_PROPERTIES( DDSegmentation PROPERTIES VERSION ${DDSegmentation_VERSIO
 #if DDSegmentation is build as part of dd4hep
 if( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) 
   SET ( DDSegmentation_LIBRARIES DDSegmentation  PARENT_SCOPE )
-  SET ( DDSegmentation_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include  PARENT_SCOPE )
+  SET ( DDSegmentation_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/DDSegmentation/include PARENT_SCOPE )
+  SET ( DDSEGMENTATION_LIBRARIES DDSegmentation  PARENT_SCOPE )
+  SET ( DDSEGMENTATION_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/DDSegmentation/include PARENT_SCOPE )
 endif()
 
 install(DIRECTORY include/DDSegmentation
diff --git a/DDSegmentation/src/CartesianGridXY.cpp b/DDSegmentation/src/CartesianGridXY.cpp
index 66741c20c..7be3cdf18 100644
--- a/DDSegmentation/src/CartesianGridXY.cpp
+++ b/DDSegmentation/src/CartesianGridXY.cpp
@@ -49,7 +49,7 @@ Vector3D CartesianGridXY::position(const CellID& cID) const {
 }
 
 std::vector<double> CartesianGridXY::cellDimensions(const CellID&) const {
-#ifdef DD4HEP_USE_CXX11
+#if __cplusplus >= 201103L
   return {_gridSizeX, _gridSizeY};
 #else
   std::vector<double> cellDims(2,0.0);
diff --git a/DDSegmentation/src/CartesianGridXYZ.cpp b/DDSegmentation/src/CartesianGridXYZ.cpp
index 629df9311..626b5065d 100644
--- a/DDSegmentation/src/CartesianGridXYZ.cpp
+++ b/DDSegmentation/src/CartesianGridXYZ.cpp
@@ -48,14 +48,14 @@ Vector3D CartesianGridXYZ::position(const CellID& cID) const {
 }
 
 std::vector<double> CartesianGridXYZ::cellDimensions(const CellID&) const {
-#ifdef DD4HEP_USE_CXX11
+#if __cplusplus >= 201103L
   return {_gridSizeX, _gridSizeY, _gridSizeZ};
 #else
-  std::vector<double> cellDimensions(3,0.0);
-  cellDimensions[0] = _gridSizeX;
-  cellDimensions[1] = _gridSizeY;
-  cellDimensions[2] = _gridSizeZ;
-  return cellDimensions;
+  std::vector<double> cellDims(3,0.0);
+  cellDims[0] = _gridSizeX;
+  cellDims[1] = _gridSizeY;
+  cellDims[2] = _gridSizeZ;
+  return cellDims;
 #endif
 }
 
diff --git a/DDSegmentation/src/CartesianGridXZ.cpp b/DDSegmentation/src/CartesianGridXZ.cpp
index 88cc3147d..13afe2204 100644
--- a/DDSegmentation/src/CartesianGridXZ.cpp
+++ b/DDSegmentation/src/CartesianGridXZ.cpp
@@ -53,13 +53,13 @@ Vector3D CartesianGridXZ::position(const CellID& cID) const {
 }
 
 std::vector<double> CartesianGridXZ::cellDimensions(const CellID&) const {
-#ifdef DD4HEP_USE_CXX11
+#if __cplusplus >= 201103L
   return {_gridSizeX, _gridSizeZ};
 #else
-  std::vector<double> cellDimensions(2,0.0);
-  cellDimensions[0] = _gridSizeX;
-  cellDimensions[1] = _gridSizeZ;
-  return cellDimensions;
+  std::vector<double> cellDims(2,0.0);
+  cellDims[0] = _gridSizeX;
+  cellDims[1] = _gridSizeZ;
+  return cellDims;
 #endif
 }
 
diff --git a/DDSegmentation/src/CartesianGridYZ.cpp b/DDSegmentation/src/CartesianGridYZ.cpp
index 82db02bbd..7e07065fa 100644
--- a/DDSegmentation/src/CartesianGridYZ.cpp
+++ b/DDSegmentation/src/CartesianGridYZ.cpp
@@ -50,13 +50,13 @@ Vector3D CartesianGridYZ::position(const CellID& cID) const {
 }
 
 std::vector<double> CartesianGridYZ::cellDimensions(const CellID&) const {
-#ifdef DD4HEP_USE_CXX11
+#if __cplusplus >= 201103L
   return {_gridSizeY, _gridSizeZ};
 #else
-  std::vector<double> cellDimensions(2,0.0);
-  cellDimensions[0] = _gridSizeY;
-  cellDimensions[1] = _gridSizeZ;
-  return cellDimensions;
+  std::vector<double> cellDims(2,0.0);
+  cellDims[0] = _gridSizeY;
+  cellDims[1] = _gridSizeZ;
+  return cellDims;
 #endif
 }
 
diff --git a/DDSegmentation/src/PolarGridRPhi.cpp b/DDSegmentation/src/PolarGridRPhi.cpp
index 5ef8cae4c..0b2a1058a 100644
--- a/DDSegmentation/src/PolarGridRPhi.cpp
+++ b/DDSegmentation/src/PolarGridRPhi.cpp
@@ -58,7 +58,7 @@ Vector3D PolarGridRPhi::position(const CellID& cID) const {
 std::vector<double> PolarGridRPhi::cellDimensions(const CellID& cID) const {
   _decoder->setValue(cID);
   const double rPhiSize = binToPosition((*_decoder)[_rId].value(), _gridSizeR, _offsetR)*_gridSizePhi;
-#ifdef DD4HEP_USE_CXX11
+#if __cplusplus >= 201103L
   return {_gridSizeR, rPhiSize};
 #else
   std::vector<double> cellDims(2,0.0);
diff --git a/DDSegmentation/src/PolarGridRPhi2.cpp b/DDSegmentation/src/PolarGridRPhi2.cpp
index 71e648cef..f776d9102 100644
--- a/DDSegmentation/src/PolarGridRPhi2.cpp
+++ b/DDSegmentation/src/PolarGridRPhi2.cpp
@@ -78,7 +78,7 @@ std::vector<double> PolarGridRPhi2::cellDimensions(const CellID& cID) const {
   const double rPhiSize = _gridPhiValues[rBin]*rCenter;
   const double rSize = _gridRValues[rBin+1]-_gridRValues[rBin];
 
-#ifdef DD4HEP_USE_CXX11
+#if __cplusplus >= 201103L
   return {rSize, rPhiSize};
 #else
   std::vector<double> cellDims(2,0.0);
diff --git a/DDSurfaces/CMakeLists.txt b/DDSurfaces/CMakeLists.txt
index 686837af4..a29c5cc60 100644
--- a/DDSurfaces/CMakeLists.txt
+++ b/DDSurfaces/CMakeLists.txt
@@ -1,47 +1,16 @@
-cmake_minimum_required(VERSION 2.8.0 FATAL_ERROR)
-
-#---------------------------
-set( PackageName DDSurfaces )
-#---------------------------
-
-project(${PackageName})
-
-# project version
-SET( DDSurfaces_VERSION_MAJOR 0 )
-SET( DDSurfaces_VERSION_MINOR 1 )
-SET( DDSurfaces_VERSION_PATCH 0 )
-
-SET( DDSurfaces_VERSION "${DDSurfaces_VERSION_MAJOR}.${DDSurfaces_VERSION_MINOR}" )
-SET( DDSurfaces_SOVERSION "${DDSurfaces_VERSION_MAJOR}.${DDSurfaces_VERSION_MINOR}" )
-
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${CMAKE_SOURCE_DIR}/cmake ) 
-#set(LIBRARY_OUTPUT_PATH    ${PROJECT_BINARY_DIR}/lib)
-#set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
-
-IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-  SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH  
-    "install prefix path  - overwrite with -D CMAKE_INSTALL_PREFIX = ..." 
-    FORCE )
-  MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" )
-ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-
-include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
-
-#file(GLOB sources src/*.cpp)
-
-#add_library(${PackageName} SHARED ${sources} )
-
-#SET_TARGET_PROPERTIES( ${PackageName} PROPERTIES VERSION ${DDSurfaces_VERSION} SOVERSION ${DDSurfaces_SOVERSION})
-
-#--- install target-------------------------------------
-install(DIRECTORY include/${PackageName}
-  DESTINATION include
-  PATTERN ".svn" EXCLUDE )
-
-#install(TARGETS ${PackageName}
-#  RUNTIME DESTINATION bin
-#  LIBRARY DESTINATION lib
-#)
-
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
+# $Id: $
+#==========================================================================
+#  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: F.Gaede (Desy)
+#
+#==========================================================================
+dd4hep_package(DDSurfaces
+  INCLUDE_DIRS     include
+  INSTALL_INCLUDES include/DDSurfaces)
diff --git a/DDTest/CMakeLists.txt b/DDTest/CMakeLists.txt
index 9570cc953..581126a9e 100644
--- a/DDTest/CMakeLists.txt
+++ b/DDTest/CMakeLists.txt
@@ -1,89 +1,29 @@
-
-#--------------------------------------------------
-
-include_directories( 
-  ${CMAKE_CURRENT_SOURCE_DIR}/include
-  ${CMAKE_SOURCE_DIR}/DDCore/include
-  ${CMAKE_SOURCE_DIR}/DDSegmentation/include
-  ${CMAKE_SOURCE_DIR}/DDSurfaces/include
-  ${CMAKE_SOURCE_DIR}/DDRec/include
-  ${CMAKE_SOURCE_DIR}/include
-  ${ROOT_INCLUDE_DIR}
-  )
-if(DD4HEP_USE_GEANT4)
-  include_directories( ${CMAKE_SOURCE_DIR}/DDG4/include )
-endif() 
-
-SET(test_link_libraries DDCore DDRec DDSegmentation ${ROOT_LIBRARIES} Reflex )
-
-if(DD4HEP_USE_GEANT4)
-  list(APPEND test_link_libraries DDG4 ${Geant4_LIBRARIES})
-endif()
-
-#--------------------------------------------------
-#ADD_TEST( t_init source "${CMAKE_CURRENT_WORK_DIR}/thisdd4hep.sh" )
-
-SET( test_name "test_example" )
-ADD_EXECUTABLE(${test_name} ./src/${test_name}.cc )
-TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries})
-ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" ${EXECUTABLE_OUTPUT_PATH}/${test_name} )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" )
-
-SET( test_name "test_units" )
-ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc )
-TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries})
-ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" 
-  ${EXECUTABLE_OUTPUT_PATH}/${test_name} ${CMAKE_CURRENT_SOURCE_DIR}/units.xml )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" )
-
-SET( test_name "test_surface" )
-ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc )
-TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries})
-ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" 
-  ${EXECUTABLE_OUTPUT_PATH}/${test_name} ${CMAKE_CURRENT_SOURCE_DIR}/units.xml )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" )
-
-SET( test_name "test_bitfield64" )
-ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc )
-TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries})
-ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh" 
-  ${EXECUTABLE_OUTPUT_PATH}/${test_name} ${CMAKE_CURRENT_SOURCE_DIR}/units.xml )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" )
-
-SET( test_name "test_PolarGridRPhi2" )
-ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc )
-TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries})
-ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh"
-  ${EXECUTABLE_OUTPUT_PATH}/${test_name}  )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" )
-
-
-SET( test_name "test_cellDimensions" )
-ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc )
-TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries})
-ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh"
-  ${EXECUTABLE_OUTPUT_PATH}/${test_name}  )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" )
-
-
-SET( test_name "test_cellDimensionsRPhi2" )
-ADD_EXECUTABLE( ${test_name} ./src/${test_name}.cc )
-TARGET_LINK_LIBRARIES(${test_name} ${test_link_libraries})
-ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test.sh"
-  ${EXECUTABLE_OUTPUT_PATH}/${test_name}  )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "TEST_PASSED" )
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" )
-
-#--------------------------------------------------
-
-
-install(FILES ./include/DD4hep/DDTest.h
-  DESTINATION include/DD4hep
-  )
-
+#=================================================================================
+#  $Id: $
+#
+#  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.
+#
+#=================================================================================
+dd4hep_package(    DDTest
+  USES             DDCore DDRec
+  OPTIONAL         DDG4
+  INCLUDE_DIRS     include
+  INSTALL_INCLUDES include )
+
+dd4hep_add_test_reg ( test_example             BUILD_EXEC REGEX_FAIL "TEST_FAILED" )
+dd4hep_add_test_reg ( test_units               BUILD_EXEC REGEX_FAIL "TEST_FAILED" 
+  EXEC_ARGS file:${CMAKE_CURRENT_SOURCE_DIR}/units.xml )
+dd4hep_add_test_reg ( test_surface             BUILD_EXEC REGEX_FAIL "TEST_FAILED" 
+  EXEC_ARGS file:${CMAKE_CURRENT_SOURCE_DIR}/units.xml )
+dd4hep_add_test_reg ( test_bitfield64          BUILD_EXEC REGEX_FAIL "TEST_FAILED"
+  EXEC_ARGS file:${CMAKE_CURRENT_SOURCE_DIR}/units.xml )
+
+dd4hep_add_test_reg ( test_PolarGridRPhi2      BUILD_EXEC REGEX_FAIL "TEST_FAILED" )
+dd4hep_add_test_reg ( test_cellDimensions      BUILD_EXEC REGEX_FAIL "TEST_FAILED" )
+dd4hep_add_test_reg ( test_cellDimensionsRPhi2 BUILD_EXEC REGEX_FAIL "TEST_FAILED" )
diff --git a/UtilityApps/CMakeLists.txt b/UtilityApps/CMakeLists.txt
index 4f2e162ae..d8e7654cf 100644
--- a/UtilityApps/CMakeLists.txt
+++ b/UtilityApps/CMakeLists.txt
@@ -9,63 +9,33 @@
 # For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
 #
 #==========================================================================
-
-cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR)
-
-include_directories( ${CMAKE_SOURCE_DIR}/DDCore/include 
-                     ${ROOT_INCLUDE_DIR}
-                     ${CMAKE_SOURCE_DIR}/DDSegmentation/include
-                     ${CMAKE_SOURCE_DIR}/DDSurfaces/include
-                     ${CMAKE_SOURCE_DIR}/DDRec/include  
-		     ${CMAKE_SOURCE_DIR}/DDTest/include )
-
+dd4hep_package(UtilityApps USES DDCore)
 #-----------------------------------------------------------------------------------
-add_executable(geoDisplay src/display.cpp)
-target_link_libraries(geoDisplay DDCore ${ROOT_LIBRARIES})
+dd4hep_add_executable( geoDisplay      src/display.cpp )
 #-----------------------------------------------------------------------------------
-add_executable(geoConverter src/converter.cpp)
-target_link_libraries(geoConverter DDCore ${ROOT_LIBRARIES})
+dd4hep_add_executable( geoConverter    src/converter.cpp )
 #-----------------------------------------------------------------------------------
-add_executable(geoPluginRun src/plugin_runner.cpp)
-target_link_libraries(geoPluginRun DDCore ${ROOT_LIBRARIES})
+dd4hep_add_executable( geoPluginRun    src/plugin_runner.cpp )
 #-----------------------------------------------------------------------------------
-add_executable( print_materials src/print_materials.cpp)
-target_link_libraries(print_materials DDCore DDRec ${ROOT_LIBRARIES})
+dd4hep_add_executable( print_materials src/print_materials.cpp USES DDRec )
 #-----------------------------------------------------------------------------------
-add_executable( materialScan src/materialScan.cpp)
-target_link_libraries(materialScan DDCore DDRec ${ROOT_LIBRARIES})
+dd4hep_add_executable( materialScan    src/materialScan.cpp USES DDRec )
 #-----------------------------------------------------------------------------------
-add_executable( dumpdetector  src/dumpdetector.cpp)
-target_link_libraries(dumpdetector DDCore DDRec ${ROOT_LIBRARIES})
+dd4hep_add_executable( dumpdetector     
+  USES DDRec
+  OPTIONAL       [GEANT4 REQUIRED SOURCES src/dumpdetector.cpp])
 #-----------------------------------------------------------------------------------
-
-
-root_generate_dictionary( G__teve src/EvNavHandler.h LINKDEF src/LinkDef.h)
-if(DD4HEP_USE_LCIO)
-  find_package(LCIO REQUIRED)
-  include_directories( ${LCIO_INCLUDE_DIRS} )
-  add_executable(teveDisplay src/teve_display.cpp G__teve.cxx src/next_event_lcio.cpp)
-
-  add_executable(test_surfaces src/test_surfaces.cpp )
-  target_link_libraries(test_surfaces DDCore DDRec ${LCIO_LIBRARIES}  ${ROOT_LIBRARIES})
-else()
-  add_executable(teveDisplay src/teve_display.cpp G__teve.cxx src/next_event_dummy.cpp)
-endif()
-target_link_libraries( teveDisplay DDCore ${ROOT_EVE_LIBRARIES} DDRec ${LCIO_LIBRARIES} )
-
-#--- install target-------------------------------------
-
-if(DD4HEP_USE_LCIO)
-  install(TARGETS geoDisplay geoConverter geoPluginRun teveDisplay print_materials materialScan dumpdetector test_surfaces
-    RUNTIME DESTINATION bin
-    LIBRARY DESTINATION lib
-    )
-else()
-  install(TARGETS geoDisplay geoConverter geoPluginRun teveDisplay print_materials materialScan dumpdetector
-    RUNTIME DESTINATION bin
-    LIBRARY DESTINATION lib
-    )
-endif()
-
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
+dd4hep_add_executable(test_surfaces
+  USES     DDRec
+  OPTIONAL [LCIO REQUIRED SOURCES src/test_surfaces.cpp])
+#-----------------------------------------------------------------------------------
+dd4hep_add_dictionary( G__teve SOURCES src/EvNavHandler.h LINKDEF src/LinkDef.h )
+#-----------------------------------------------------------------------------------
+dd4hep_add_executable( teveLCIO
+  USES           [ROOT REQUIRED COMPONENTS TEve] DDRec
+  OPTIONAL       [LCIO REQUIRED SOURCES src/teve_display.cpp src/next_event_lcio.cpp G__teve.cxx] )
+#-----------------------------------------------------------------------------------
+dd4hep_add_executable( teveDisplay 
+  USES           [ROOT REQUIRED COMPONENTS TEve] DDRec
+  SOURCES        src/teve_display.cpp src/next_event_dummy.cpp
+  GENERATED      G__teve.cxx )
diff --git a/cmake/DD4hep.cmake b/cmake/DD4hep.cmake
index ab19d1fb0..e562ecec2 100644
--- a/cmake/DD4hep.cmake
+++ b/cmake/DD4hep.cmake
@@ -1,4 +1,46 @@
+#=================================================================================
+#  $Id: $
+#
+#  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.
+#
+#=================================================================================
+
+#---------------------------------------------------------------------------------------------------
+if ( DD4hep_DIR )
+  set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${DD4hep_DIR}/cmake ) 
+endif()
+if(CMAKE_INSTALL_PREFIX)
+  set ( CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} )
+endif()
 
+#---------------------------------------------------------------------------------------------------
+#  Need this fix, since the cmake name is Geant4 and on GEANT4
+if(DD4HEP_USE_GEANT4)
+  set ( DD4HEP_USE_BOOST ON )    # Boost is required !
+endif()
+#---------------------------------------------------------------------------------------------------
+if(DD4HEP_USE_BOOST)
+  if ( "${Boost_INCLUDE_DIRS}" STREQUAL "" )
+    find_package( Boost REQUIRED ) 
+    ##include_directories( SYSTEM ${Boost_INCLUDE_DIRS} )
+  endif()
+  add_definitions( -DDD4HEP_USE_BOOST )
+  add_definitions( -DBOOST_SPIRIT_USE_PHOENIX_V3 )
+endif()
+# Main functional include file
+include ( DD4hepBuild )
+include ( DD4hep_XML_setup )
+
+##---------------------------------------------------------------------------------------------------
+##
+##  OLDER STUFF: To be kept for backwards compatibility ....
+##
 #---------------------------------------------------------------------------------------------------
 # add_dd4hep_plugin ( libraryName )
 #
@@ -15,10 +57,7 @@ function( add_dd4hep_plugin libraryName )
     dd4hep_generate_rootmap( ${libraryName} )
   endif()
 
-  install( TARGETS ${libraryName}
-    LIBRARY DESTINATION lib
-    )
-
+  install( TARGETS ${libraryName} LIBRARY DESTINATION lib )
 endfunction()
 
 #---------------------------------------------------------------------------------------------------
@@ -35,7 +74,7 @@ function ( dd4hep_instantiate_package PackageName )
   INCLUDE( DD4hepMacros )
 
   #---- configure run environment ---------------
-  configure_file( ${DD4hep_ROOT}/cmake/thisdd4hep_package.sh.in  this${PackageName}.sh @ONLY)
+  configure_file( ${DD4hep_DIR}/cmake/thisdd4hep_package.sh.in  this${PackageName}.sh @ONLY)
 
   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/this${PackageName}.sh
     DESTINATION bin
@@ -43,8 +82,6 @@ function ( dd4hep_instantiate_package PackageName )
 
 
 endfunction()
-
-
 #---------------------------------------------------------------------------------------------------
 # dd4hep_generate_rootmap(library)
 #
@@ -57,13 +94,11 @@ function(dd4hep_generate_rootmap library)
     dd4hep_generate_rootmap_notapple( ${library} )
   endif()
 endfunction()
-
+#---------------------------------------------------------------------------------------------------
 function(dd4hep_generate_rootmap_notapple library)
-
-  if ( NOT DD4hep_ROOT )
-    SET ( DD4hep_ROOT ${CMAKE_SOURCE_DIR} )
+  if ( NOT DD4hep_DIR )
+    SET ( DD4hep_DIR ${CMAKE_SOURCE_DIR} )
   endif()
-
   find_package(ROOT QUIET)
 if(DD4HEP_NO_REFLEX)
   set(rootmapfile ${CMAKE_SHARED_MODULE_PREFIX}${library}.components)
@@ -76,7 +111,7 @@ endif()
   add_custom_command(OUTPUT ${rootmapfile}
                      COMMAND ${CMAKE_COMMAND} -Dlibname=${libname} -Drootmapfile=${rootmapfile}
                              -Dgenmap_install_dir=${LIBRARY_OUTPUT_PATH}
-                             -P ${DD4hep_ROOT}/cmake/MakeRootMap.cmake
+                             -P ${DD4hep_DIR}/cmake/MakeRootMap.cmake
                      DEPENDS ${library})
 
   add_custom_target(${library}Rootmap ALL DEPENDS ${rootmapfile})
@@ -85,22 +120,13 @@ endif()
     DESTINATION lib
   )
 endfunction()
-
-
-
 #
 #
+#---------------------------------------------------------------------------------------------------
 function(dd4hep_generate_rootmap_apple library)
-
   # for now do the same for apple that is done for the rest
   dd4hep_generate_rootmap_notapple( ${library} )
-
 endfunction()
-
-
-
-
-
 #---------------------------------------------------------------------------------------------------
 # dd4hep_install_library(library)
 #
diff --git a/cmake/DD4hepBuild.cmake b/cmake/DD4hepBuild.cmake
new file mode 100644
index 000000000..a5a02ee02
--- /dev/null
+++ b/cmake/DD4hepBuild.cmake
@@ -0,0 +1,1158 @@
+#=================================================================================
+#  $Id: $
+#
+#  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.
+#
+#=================================================================================
+cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR)
+###set(DD4HEP_DEBUG_CMAKE 1)
+message ( STATUS "INCLUDING DD4hep...." )
+include ( CMakeParseArguments )
+
+#---------------------------------------------------------------------------------------------------
+macro(dd4hep_to_parent_scope val)
+  set ( ${val} ${${val}} PARENT_SCOPE )
+endmacro(dd4hep_to_parent_scope)
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_debug
+#
+#  Print messages if debug flag is enabled
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function ( dd4hep_debug msg )
+  if( NOT "${DD4HEP_DEBUG_CMAKE}" STREQUAL "" ) 
+    get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME)
+    #message( STATUS "DEBUG ****   ${msg}" )
+    string ( LENGTH "${msg}" lmsg ) 
+    if ( ${lmsg} GREATER 1024 )
+      string ( SUBSTRING "${msg}" 0 132 pmsg ) 
+      message( STATUS "D++> [${pkg}] ${pmsg}" )
+    else()
+      message( STATUS "D++> [${pkg}] ${msg}" )
+    endif()
+  endif()
+endfunction( dd4hep_debug )
+
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_set_version
+#
+#  Set version structure for building the DD4hep software
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function ( dd4hep_set_version packageName )
+  cmake_parse_arguments ( ARG "" "MAJOR;MINOR;PATCH" "" ${ARGN} )
+  if ( NOT "${packageName}" STREQUAL "" )
+    project ( ${packageName} )
+  else()
+    message(FATAL_ERROR " !!! Attempt to define a DD4hep project without a name !!!")
+  endif()
+  set ( major ${ARG_MAJOR} )
+  set ( minor ${ARG_MINOR} )
+  set ( patch ${ARG_PATCH} )
+  
+  if ( "${major}" STREQUAL "" ) 
+    set ( major ${DD4hep_VERSION_MAJOR} )
+  endif()
+  if ( "${minor}" STREQUAL "" ) 
+    set ( minor ${DD4hep_VERSION_MINOR} )
+  endif()
+  if ( "${patch}" STREQUAL "" ) 
+    set ( patch ${DD4hep_VERSION_PATCH} )
+  endif()
+
+  if ( NOT ("${major}" STREQUAL "" OR "${minor}" STREQUAL "" OR "${patch}" STREQUAL "") )
+    #message ( STATUS "dd4hep_set_version(${packageName} MAJOR ${major} MINOR ${minor} PATCH ${patch})" )
+    set( ${packageName}_VERSION_MAJOR ${major} PARENT_SCOPE )
+    set( ${packageName}_VERSION_MINOR ${minor} PARENT_SCOPE )
+    set( ${packageName}_VERSION_PATCH ${patch} PARENT_SCOPE )
+    set( ${packageName}_VERSION       "${major}.${minor}" PARENT_SCOPE )
+    set( ${packageName}_SOVERSION     "${major}.${minor}" PARENT_SCOPE )
+  else()
+    message( FATAL_ERROR "|++> ${packageName}: No Package versions specified.....->  ( ${major}.${minor}.${patch} )" )
+  endif()
+endfunction( dd4hep_set_version )
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_print_options
+#
+#  Print the current option setup for informational purposes
+#
+#  \author  M.Frank
+#  \version 1.0
+#---------------------------------------------------------------------------------------------------
+function ( dd4hep_print_options )
+  message ( STATUS "+-------------------------------------------------------------------------------" )
+  message ( STATUS "|  DD4hep build setup:                                                          " )
+  message ( STATUS "|                                                                               " )
+  message ( STATUS "|  CMAKE_MODULE_PATH:  ${CMAKE_MODULE_PATH}                                     " )
+  message ( STATUS "|  DD4HEP_USE_BOOST:   ${DD4HEP_USE_BOOST}  DD4HEP_USE_Boost:${DD4HEP_USE_Boost}" )
+  message ( STATUS "|  DD4HEP_USE_XERCESC: ${DD4HEP_USE_XERCESC}                                    " )
+  message ( STATUS "|  XERCESC_ROOT_DIR:   ${XERCESC_ROOT_DIR}                                      " )
+  message ( STATUS "|  DD4HEP_USE_LCIO:    ${DD4HEP_USE_LCIO}                                       " )
+  message ( STATUS "|  LCIO_DIR:           ${LCIO_DIR}                                              " )
+  message ( STATUS "|  DD4HEP_USE_GEANT4:  ${DD4HEP_USE_GEANT4}                                     " )
+  message ( STATUS "|  Geant4_DIR:         ${Geant4_DIR}                                            " )
+  message ( STATUS "|  DD4HEP_USE_PYROOT:  ${DD4HEP_USE_PYROOT}                                     " )
+  message ( STATUS "|  BUILD_TESTING:      ${BUILD_TESTING}                                         " )
+  message ( STATUS "|                                                                               " )
+  message ( STATUS "+-------------------------------------------------------------------------------" )
+endfunction ( dd4hep_print_options )
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_print_cmake_options
+#
+#  usage() like function to be called if bad cmake arguments are supplied....
+#
+#  \author  M.Frank
+#  \version 1.0
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_print_cmake_options )
+  cmake_parse_arguments ( ARG "" "ERROR" "OPTIONAL" ${ARGN} )  
+  if ( NOT "${ARG_OPTIONAL}" STREQUAL "" ) 
+    message ( STATUS "+---------------------------------------------------------------------------+")
+    foreach ( opt ${ARG_OPTIONAL} )
+      message ( STATUS "| ${opt}" )
+    endforeach()
+  endif()
+  message ( STATUS "+--Option name  ------Description ----------------------------------Default-+")
+  message ( STATUS "|  DD4HEP_USE_XERCESC Enable 'Detector Builders' based on XercesC   OFF     |")
+  message ( STATUS "|                     Requires XERCESC_ROOT_DIR to be set                   |")
+  message ( STATUS "|                     or XercesC in CMAKE_MODULE_PATH                       |")
+  message ( STATUS "|  DD4HEP_USE_GEANT4  Enable the simulation part based on Geant4    OFF     |")
+  message ( STATUS "|                     Requires Geant_DIR to be set                          |")
+  message ( STATUS "|                     or Geant4 in CMAKE_MODULE_PATH                        |")
+  message ( STATUS "|  DD4HEP_USE_LCIO    Build lcio extensions                         OFF     |")
+  message ( STATUS "|                     Requires LCIO_DIR to be set                           |")
+  message ( STATUS "|                     or LCIO in CMAKE_MODULE_PATH                          |")
+  message ( STATUS "|  DD4HEP_USE_GEAR    Build gear wrapper for backward compatibility OFF     |")
+  message ( STATUS "|  DD4HEP_USE_CXX11   Build DD4hep using c++11                      OFF     |")
+  message ( STATUS "|  BUILD_TESTING      Enable and build tests                        ON      |")
+  message ( STATUS "|  DD4HEP_USE_PYROOT  Enable 'Detector Builders' based on PyROOT    OFF     |")
+  message ( STATUS "+---------------------------------------------------------------------------+")
+  if ( NOT "${ARG_ERROR}" STREQUAL "" ) 
+    message ( FATAL_ERROR "Invalid cmake options supplied!" )
+  endif()
+endfunction( dd4hep_print_cmake_options )
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_configure_output
+#
+#  Setup build and install target directories
+#
+#  \author  M.Frank
+#  \version 1.0
+#---------------------------------------------------------------------------------------------------
+macro ( dd4hep_configure_output )
+  cmake_parse_arguments ( ARG "" "OUTPUT;INSTALL" "" ${ARGN} )
+  if ( NOT "${ARG_OUTPUT}" STREQUAL "" )
+    set ( LIBRARY_OUTPUT_PATH    ${ARG_OUTPUT}/lib )
+    set ( EXECUTABLE_OUTPUT_PATH ${ARG_OUTPUT}/bin )
+  else()
+    set ( LIBRARY_OUTPUT_PATH    ${CMAKE_CURRENT_BINARY_DIR}/lib )
+    set ( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin )
+  endif()
+  #------------- set the default installation directory to be the source directory
+  if ( NOT "${ARG_INSTALL}" STREQUAL "" )
+    set ( CMAKE_INSTALL_PREFIX ${ARG_INSTALL} CACHE PATH "Set install prefix path." FORCE )
+  elseif ( CMAKE_INSTALL_PREFIX )
+    set ( CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} )
+  elseif ( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+    set( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH  
+      "install prefix path  - overwrite with -D CMAKE_INSTALL_PREFIX = ..."  FORCE )
+    message(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" )
+  endif()
+  dd4hep_debug("|++> Installation goes to: ${CMAKE_INSTALL_PREFIX}  <${ARG_INSTALL}>" )
+endmacro ( dd4hep_configure_output )
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_make_unique_list
+#
+#  Create clean list without duplicate entries.
+#
+#  \author  M.Frank
+#  \version 1.0
+#---------------------------------------------------------------------------------------------------
+function ( dd4hep_make_unique_list name )
+  cmake_parse_arguments ( ARG "" "" "VALUES" ${ARGN} )
+  set ( vals )
+  foreach( v ${ARG_VALUES} )
+    set ( vals "${vals} ${v}" )
+  endforeach()
+  string( REGEX REPLACE " " ";" vals "${vals}" )
+  if( NOT "${vals}" STREQUAL "" )
+    list ( REMOVE_DUPLICATES vals )
+  endif()
+  set( ${name} ${vals} PARENT_SCOPE )
+endfunction( dd4hep_make_unique_list )
+
+#
+#  \author  M.Frank
+#  \version 1.0
+#---------------------------------------------------------------------------------------------------
+function ( dd4hep_find_packageEx PKG_NAME )
+  set ( pkg ${PKG_NAME} )
+  string ( TOUPPER "${pkg}" pkg )
+  if ( "${pkg}" STREQUAL "GEANT4" )
+    set (pkg "Geant4" )
+  elseif ( "${pkg}" STREQUAL "BOOST" )
+    set (pkg "Boost" )
+  elseif ( "${pkg}" STREQUAL "LCIO" )
+    set (pkg "LCIO" )
+  elseif ( "${pkg}" STREQUAL "XERCESC" )
+    set (pkg "XercesC" )
+  elseif ( "${pkg}" STREQUAL "DD4HEP" )
+    set (pkg "DD4hep" )
+  endif()
+  dd4hep_debug( "Call find_package( ${pkg}/${PKG_NAME} ${ARGN})" )
+  ##message(STATUS "Call find_package( ${pkg}/${PKG_NAME} ${ARGN})" )
+  if ( "${${pkg}_LIBRARIES}" STREQUAL "" )
+    cmake_parse_arguments(ARG "" "" "ARGS" ${ARGN} )
+    find_package( ${pkg} ${ARG_ARGS} )
+  else()
+    cmake_parse_arguments(ARG "" "" "ARGS" ${ARGN} )
+    find_package( ${pkg} QUIET ${ARG_ARGS} )
+  endif()
+  # Propagate values to caller
+  string ( TOUPPER "${pkg}" PKG )
+  if ( "${pkg}" STREQUAL "${PKG}" )
+    set ( libs ${${PKG}_LIBRARIES} ${${pkg}_LIBRARY} ${${pkg}_LIBRARIES} )
+    set ( incs ${${PKG}_INCLUDE_DIRS} ${${pkg}_INCLUDE_DIR} ${${pkg}_INCLUDE_DIRS} )
+  else()
+    set ( libs ${${PKG}_LIBRARIES} ${${pkg}_LIBRARY} ${${pkg}_LIBRARIES} ${${PKG}_LIBRARY} ${${PKG}_LIBRARIES} )
+    set ( incs ${${PKG}_INCLUDE_DIRS} ${${pkg}_INCLUDE_DIR} ${${pkg}_INCLUDE_DIRS} ${${PKG}_INCLUDE_DIR} ${${PKG}_INCLUDE_DIRS} )
+  endif()
+  dd4hep_make_unique_list ( libs VALUES ${libs} )
+  dd4hep_make_unique_list ( incs VALUES ${incs} )
+
+  set ( ${PKG}_EXISTS       "ON"       PARENT_SCOPE )
+  set ( ${PKG}_LIBRARIES    ${libs}    PARENT_SCOPE )
+  set ( ${PKG}_INCLUDE_DIRS ${incs}    PARENT_SCOPE )
+  if ( "${incs}" STREQUAL "" )
+    message(FATAL_ERROR "Unknown package ${pkg}")
+  endif()
+endfunction( dd4hep_find_packageEx )
+
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_find_package
+# 
+#  Find dependent packages.
+#
+#  - Allows to also find internal packages like e.g. DDCore, DDG4 using the internal
+#    libarary cache stored in DD4HEP_ALL_PACKAGES. 
+#  - If a libary is not explicitly mentioned therein, and the package is not explicitly 
+#    switched OFF by a global property of the name "DD4HEP_USE_${name}" or a global 
+#    variable "DD4HEP_USE_${name}", dd4hep_find_packageEx is called.
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function ( dd4hep_find_package name found )
+  cmake_parse_arguments(ARG "" "TYPE" "" ${ARGN} )
+  string ( TOUPPER ${name} NAME )
+  get_property ( all_packages GLOBAL PROPERTY DD4HEP_ALL_PACKAGES )
+  set ( found_package -1 )
+
+  if ( NOT "${all_packages}" STREQUAL "" )
+    list ( FIND all_packages "${NAME}" found_package )
+  endif()
+
+  get_property( use_pkg   GLOBAL PROPERTY DD4HEP_USE_${NAME} )
+
+  # For internal dependencies we rely on the correct order of the included directories
+  if ( NOT found_package EQUAL -1 )
+    # Resolve dependency from local packages
+    get_property(used GLOBAL PROPERTY DD4HEP_USE_${NAME} )
+    get_property(incs GLOBAL PROPERTY ${NAME}_INCLUDE_DIRS )
+    get_property(libs GLOBAL PROPERTY ${NAME}_LIBRARIES )
+    set ( DD4HEP_USE_${NAME}   "ON"    PARENT_SCOPE )
+    set ( ${NAME}_LIBRARIES    ${libs} PARENT_SCOPE )
+    set ( ${NAME}_INCLUDE_DIRS ${incs} PARENT_SCOPE )
+    set ( ${found} "ON" PARENT_SCOPE )
+  elseif ( found_package EQUAL -1 AND "${ARG_TYPE}" STREQUAL "INTERNAL" )
+    set_property( GLOBAL PROPERTY DD4HEP_USE_${NAME} "OFF" )
+    set ( ${found} "OFF" PARENT_SCOPE )
+  elseif ( "${DD4HEP_USE_${name}}" STREQUAL "OFF" OR "${DD4HEP_USE_${NAME}}" STREQUAL "OFF" )
+    set ( ${found} "OFF" PARENT_SCOPE )
+  elseif ( "${use_pkg}" STREQUAL "OFF" )
+    set ( ${found} "OFF" PARENT_SCOPE )
+  else()
+    #
+    # 3 possibilities left:
+    # 1) Either use external package cache from previous call (same call args!) or
+    # 2) call findPackage again/first time....or
+    # 3) package does not exist!
+    #
+    get_property( pkg_setup GLOBAL PROPERTY ${NAME}_COMPONENTS )
+    set ( ARGN ${ARG_UNPARSED_ARGUMENTS} )
+    set ( arguments ${NAME} ${ARGN} )
+    list ( REMOVE_DUPLICATES arguments )
+    list ( REMOVE_ITEM arguments "REQUIRED" "QUIET" )
+
+    if ( "${pkg_setup}" STREQUAL "${arguments}" )
+      get_property ( incs   GLOBAL PROPERTY ${NAME}_INCLUDE_DIRS )
+      get_property ( libs   GLOBAL PROPERTY ${NAME}_LIBRARIES    )
+      get_property ( exists GLOBAL PROPERTY ${NAME}_EXISTS       )
+      set ( DD4HEP_USE_${NAME}   "ON"       PARENT_SCOPE )
+      set ( ${NAME}_EXISTS       ${exists}  PARENT_SCOPE )
+      set ( ${NAME}_LIBRARIES    ${libs}    PARENT_SCOPE )
+      set ( ${NAME}_INCLUDE_DIRS ${incs}    PARENT_SCOPE )
+      set ( ${found}             "ON"       PARENT_SCOPE )	
+    else()
+      dd4hep_find_packageEx( ${name} ${ARGN} )
+      dd4hep_debug("dd4hep_find_package: DD4HEP_USE_${name}: ${DD4HEP_USE_${NAME}} Exists: ${${NAME}_EXISTS} ARGS:${arguments}")
+      if ( "${${NAME}_EXISTS}" STREQUAL "ON" )
+	dd4hep_debug( "dd4hep_find_package ${NAME} Incs: ${incs}" )
+	dd4hep_debug( "dd4hep_find_package ${NAME} Libs: ${libs}" )
+	set_property ( GLOBAL PROPERTY ${NAME}_COMPONENTS   ${arguments} )
+	set_property ( GLOBAL PROPERTY ${NAME}_INCLUDE_DIRS ${${NAME}_INCLUDE_DIRS} )
+	set_property ( GLOBAL PROPERTY ${NAME}_LIBRARIES    ${${NAME}_LIBRARIES} )
+	set_property ( GLOBAL PROPERTY ${NAME}_EXISTS       ${${NAME}_EXISTS} )
+	dd4hep_to_parent_scope ( DD4HEP_USE_${NAME} )
+	dd4hep_to_parent_scope ( ${NAME}_EXISTS )
+	dd4hep_to_parent_scope ( ${NAME}_LIBRARIES )
+	dd4hep_to_parent_scope ( ${NAME}_INCLUDE_DIRS )
+	set ( ${found} "ON" PARENT_SCOPE )
+      else()
+	set ( ${found} "OFF" PARENT_SCOPE )
+      endif()
+    endif()
+  endif()
+endfunction( dd4hep_find_package )
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_install_dir
+#
+#  Install all directories as indicated by all unparsed arguments to the 
+#  output destination DESTINATION.
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_install_dir )
+  cmake_parse_arguments ( ARG "" "DESTINATION" "" ${ARGN} )
+  if( NOT "${ARG_UNPARSED_ARGUMENTS}" STREQUAL "" )
+    foreach ( d ${ARG_UNPARSED_ARGUMENTS} )
+      install ( DIRECTORY ${d}
+        DESTINATION ${ARG_DESTINATION}
+        PATTERN ".svn" EXCLUDE )
+    endforeach()
+  endif()
+endfunction( dd4hep_install_dir )
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_install_examples
+#
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function(dd4hep_install_examples dir_names)
+  cmake_parse_arguments(ARG "" "DESTINATION" "" ${ARGN} )
+  dd4hep_install_dir( ${dir_names} DESTINATION ${ARG_DESTINATION} )
+endfunction(dd4hep_install_examples)
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_install_includes
+#
+#  Install all include directories as indicated by all unparsed arguments to the 
+#  output destination DESTINATION.
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_install_includes package )
+  message( STATUS "dd4hep_install_includes[${package}]: ${ARGN}" )
+  dd4hep_install_dir( ${ARGN} DESTINATION include )
+endfunction()
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_install_files
+#
+#  Install all files as indicated by the FILES argument or all unparsed arguments to the 
+#  output destination DESTINATION.
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function(dd4hep_install_files)
+  cmake_parse_arguments ( ARG "" "DESTINATION" "FILES" ${ARGN} )
+  foreach ( f ${ARG_UNPARSED_ARGUMENTS} ${ARG_FILES} )
+    file ( GLOB sources ${f} )
+    install (FILES ${sources} DESTINATION ${ARG_DESTINATION} )
+  endforeach()
+endfunction( dd4hep_install_files )
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_unpack_package_opts
+#
+#  INTERNAL routine not to be used directly by clients
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_unpack_package_opts name opt )
+  set ( nam_pkg  )
+  set ( req_pkg  )
+  set ( typ_pkg  )
+  set ( com_pkg  )
+  set ( comp_pkg )
+  set ( src_pkg  )
+  set ( srcs_pkg )
+  set ( def_pkg  )
+  set ( defs_pkg )
+  if ( "${opt}" MATCHES "\\[" )
+    string ( REGEX REPLACE "\\[;" "" opt "${opt}" )
+    string ( REGEX REPLACE "\\["  "" opt "${opt}" )
+    string ( REGEX REPLACE ";\\]" "" opt "${opt}" )
+    string ( REGEX REPLACE "\\]"  "" opt "${opt}" )
+    string ( REPLACE ";" ";" all_opt "${opt}")
+    dd4hep_debug ( "unpack ${name} : ${opt}" )
+    foreach( e ${all_opt} )
+      if( "${nam_pkg}" STREQUAL "")
+        set ( nam_pkg ${e} )
+      elseif ( "${e}" STREQUAL "REQUIRED")
+        set ( req_pkg ${e} )
+      elseif ( "${e}" STREQUAL "INTERNAL")
+        set ( typ_pkg ${e} )
+      elseif ( "${e}" STREQUAL "EXTERNAL")
+        set ( typ_pkg ${e} )
+      elseif ( "${com_pkg}" STREQUAL "" AND "${e}" STREQUAL "COMPONENTS")
+        set ( com_pkg ${e} )
+      elseif ( "${src_pkg}" STREQUAL "" AND "${e}" STREQUAL "SOURCES")
+        set ( src_pkg ${e} )
+      elseif ( "${def_pkg}" STREQUAL "" AND "${e}" STREQUAL "DEFINITIONS")
+        set ( def_pkg ${e} )
+      elseif ( "${src_pkg}" STREQUAL "" )
+        set ( comp_pkg ${comp_pkg} ${e} )
+      elseif ( NOT "${src_pkg}" STREQUAL "" )
+        set ( srcs_pkg ${srcs_pkg} ${e} )
+      elseif ( NOT "${def_pkg}" STREQUAL "" )
+        set ( defs_pkg ${defs_pkg} ${e} )
+      endif()
+    endforeach()
+  else()
+    set ( nam_pkg ${opt} )
+    set ( req_pkg REQUIRED )
+  endif()
+  string ( TOUPPER "${nam_pkg}" nam_pkg )
+  set ( ${name}_NAME        ${nam_pkg}   PARENT_SCOPE )
+  set ( ${name}_REQUIRED    ${req_pkg}   PARENT_SCOPE )
+  set ( ${name}_TYPE        ${typ_pkg}   PARENT_SCOPE )
+  set ( ${name}_COMPONENT   ${com_pkg}   PARENT_SCOPE )
+  set ( ${name}_COMPONENTS  ${comp_pkg}  PARENT_SCOPE )
+  set ( ${name}_SOURCES     ${srcs_pkg}  PARENT_SCOPE )
+  set ( ${name}_DEFINITIONS ${defs_pkg}  PARENT_SCOPE )
+  dd4hep_debug ( "unpack ${name} : ${nam_pkg} ${req_pkg} ${com_pkg} comp: ${comp_pkg} src: ${srcs_pkg}" )
+endfunction ( dd4hep_unpack_package_opts )
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_get_dependency_opts
+#
+#  INTERNAL routine not to be used directly by clients
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_get_dependency_opts local_incs local_libs local_uses pkg )
+  #
+  #  If the variables <package>_INCLUDE_DIRS and <package>_LIBRARIES were not set
+  #  at the parent level, check if a corresponding property exists....
+  #
+  string ( TOUPPER "${pkg}" pkg )
+  if ( "${${pkg}_INCLUDE_DIRS}" STREQUAL "" )
+    get_property(${pkg}_INCLUDE_DIRS GLOBAL PROPERTY ${pkg}_INCLUDE_DIRS )
+  endif()
+  if ( "${${pkg}_LIBRARIES}" STREQUAL "" )
+    get_property(${pkg}_LIBRARIES    GLOBAL PROPERTY ${pkg}_LIBRARIES )
+  endif()
+  set(libs "${${pkg}_LIBRARIES}" )
+  string(REGEX REPLACE "  " " " libs "${libs}" )
+  string(REGEX REPLACE " " ";"  libs "${libs}" )
+
+  set(incs "${${pkg}_INCLUDE_DIRS}" )
+  string(REGEX REPLACE "  " " " incs "${incs}" )
+  string(REGEX REPLACE " " ";"  incs "${incs}" )
+  
+  set(uses "${${pkg}_USES}" )
+  string(REGEX REPLACE "  " " " uses "${uses}" )
+  string(REGEX REPLACE " " ";"  uses "${uses}" )
+  
+  set ( ${local_incs} ${incs} PARENT_SCOPE )
+  set ( ${local_libs} ${libs} PARENT_SCOPE )
+  set ( ${local_uses} ${uses} PARENT_SCOPE )
+endfunction ( dd4hep_get_dependency_opts )
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_handle_optional_sources
+#
+#  INTERNAL routine not to be used directly by clients
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function (dd4hep_handle_optional_sources tag optionals missing uses sources )
+  get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME)
+  set (miss)
+  set (src)
+  set (use)
+  foreach(opt ${optionals} )
+    dd4hep_unpack_package_opts ( USE ${opt} )
+    dd4hep_debug("unpack DD4HEP_USE_${USE_NAME}=${DD4HEP_USE_${USE_NAME}} <> ${use_pkg} -- ${opt}" )
+    dd4hep_debug("|++> ${tag} find_package( ${USE_NAME} ARGS: ${USE_REQUIRED} ${USE_COMPONENT} ${USE_COMPONENTS} ${USE_TYPE} )")
+    dd4hep_find_package( ${USE_NAME} pkg_found 
+      ARGS ${USE_REQUIRED} ${USE_COMPONENT} ${USE_COMPONENTS} 
+      TYPE ${USE_TYPE} )
+    if ( "{pkg_found}" STREQUAL "OFF" )
+      message( STATUS "|    ${tag}  ...optional: Skip sources ${USE_SOURCES} [requires ${USE_NAME}]" )
+    elseif ( "${pkg_found}" STREQUAL "ON" )
+      message( STATUS "|    ${tag}  ...optional: ADD sources ${USE_SOURCES} [dependent on ${USE_NAME}]" )
+      file ( GLOB opt_sources ${USE_SOURCES} )
+      set ( src ${src} ${opt_sources} )
+      set ( use ${use} ${opt} )
+    elseif ( "${USE_REQUIRED}" STREQUAL "REQUIRED" )
+      set (miss ${miss} ${USE_NAME} )
+    else()
+      message( STATUS "|    ${tag}  ...optional: Skip sources ${USE_SOURCES} [requires ${USE_NAME}]" )
+    endif()
+  endforeach()
+  set ( ${missing} ${miss} PARENT_SCOPE )
+  set ( ${uses}    ${use}  PARENT_SCOPE )
+  set ( ${sources} ${src}  PARENT_SCOPE )
+endfunction(dd4hep_handle_optional_sources)
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_use_package
+#
+#  INTERNAL routine not to be used directly by clients
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_use_package print_prefix inName outName )
+  cmake_parse_arguments( ARG "" "NAME" "USES;OPTIONAL" ${ARGN} )
+  get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME)
+  #
+  get_property(pkg_incs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY ${inName}_INCLUDE_DIRS   )
+  get_property(pkg_libs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY ${inName}_LINK_LIBRARIES )
+  get_property(pkg_uses DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY ${inName}_USES )
+  #
+  set ( missing )
+  set ( used_uses ${pkg_uses} )
+  set ( used_incs ${pkg_incs} )
+  set ( used_libs ${pkg_libs} )
+  #
+  foreach( use ${ARG_USES} )
+    if( "${use}" MATCHES "\\[" )
+      dd4hep_unpack_package_opts ( USE ${use} )
+      dd4hep_find_package( ${USE_NAME} pkg_found ARGS ${USE_REQUIRED} ${USE_COMPONENT} ${USE_COMPONENTS} )
+      set ( use ${USE_NAME} )
+    else()
+      dd4hep_find_package( ${use} pkg_found )
+    endif()
+    if ( "${pkg_found}" STREQUAL "ON" )
+      dd4hep_debug ( "${print_prefix} package_libs: ${${use}_LIBRARIES}" )
+      set ( use ${use} )
+    elseif ( "{pkg_found}" STREQUAL "OFF" )
+      message ( STATUS "|++> ${print_prefix} ...Missing package: ${use} [Ignored]" )
+      unset ( use )
+    elseif ( "${USE_REQUIRED}" STREQUAL "REQUIRED" )
+      message ( FATAL_ERROR "|++> ${print_prefix} ...Missing package: ${use} [Fatal REQUIRED]" )
+      set ( missing ${missing} ${use} )
+      unset ( use )
+    else()
+      message( STATUS "|    ${print_prefix}  ...optional: Skip sources ${USE_SOURCES} [Usage ${use} not defined]" )
+      unset ( use )
+    endif()
+    set ( used_uses ${used_uses} ${use} )
+  endforeach()
+  #
+  #
+  #
+  foreach(use ${ARG_UNPARSED_ARGUMENTS} ${ARG_OPTIONAL} )
+    if ( "${use}" MATCHES "\\[" )
+      dd4hep_unpack_package_opts ( USE ${use} )
+      dd4hep_find_package( ${USE_NAME} pkg_found ARGS ${USE_REQUIRED} ${USE_COMPONENT} ${USE_COMPONENTS} )
+      set ( use ${USE_NAME} )
+      set ( src "sources ${USE_SOURCES}" )
+    else()
+      dd4hep_find_package( ${use} pkg_found )
+      set ( src ${use} )
+    endif()
+    if ( NOT "${pkg_found}" STREQUAL "ON" )
+      message ( STATUS "|    ${print_prefix}  ...optional: Skip optional ${src} [Not defined]" )
+      unset ( use )
+    endif()
+    set ( used_uses ${used_uses} ${use} )
+  endforeach()
+  #
+  set (all_used ${used_uses} )
+  foreach ( use ${used_uses} )
+    get_property ( dependent_uses GLOBAL PROPERTY ${use}_USES )
+    foreach ( dependent ${dependent_uses} )
+      list ( FIND used_uses ${dependent} already_used )
+      if ( ${already_used} EQUAL -1 )
+	dd4hep_debug ( "${print_prefix} ADD DEPENDENCY:  ${use} -->  ${dependent}" )
+	set ( all_used ${all_used} ${dependent} )
+      else()
+	dd4hep_debug(  "${print_prefix} ALREADY DEPENDS: ${use} -->  ${dependent}")
+	set ( all_used ${all_used} ${dependent} )
+      endif()
+    endforeach()
+  endforeach()
+  #
+  set ( used_uses ${all_used} )
+  foreach ( use ${used_uses} )
+    dd4hep_get_dependency_opts( local_incs local_libs local_uses ${use} )
+    set ( used_incs ${used_incs} ${local_incs} )
+    set ( used_libs ${used_libs} ${local_libs} )
+    dd4hep_make_unique_list ( used_incs VALUES ${used_incs} )
+    dd4hep_make_unique_list ( used_libs VALUES ${used_libs} )
+    dd4hep_debug ( "${print_prefix} DEPENDENCY: ${use} Lib: ${local_libs} " )
+    dd4hep_debug ( "${print_prefix} DEPENDENCY: ${use} Inc: ${local_incs} " )
+  endforeach()
+  #
+  dd4hep_make_unique_list ( used_incs VALUES ${used_incs} )
+  dd4hep_make_unique_list ( used_libs VALUES ${used_libs} )
+  dd4hep_make_unique_list ( used_uses VALUES ${used_uses} )
+  dd4hep_make_unique_list ( missing   VALUES ${missing} )
+  #
+  if ( "${used_uses}" STREQUAL "" AND "${missing}" STREQUAL "" )
+    message(STATUS "|++> ${print_prefix} Uses  DEFAULTS" )
+  elseif ( "${missing}" STREQUAL "" )
+    message(STATUS "|++> ${print_prefix} Uses: ${used_uses}" )
+  else()
+    dd4hep_debug ( "${print_prefix} Uses:   ${used_uses} " )
+    dd4hep_debug ( "${print_prefix} Missing:${missing} " )
+  endif()
+  dd4hep_debug ( "${print_prefix} Dep.Incs:${used_incs} " )
+  dd4hep_debug ( "${print_prefix} Dep.Libs:${used_libs} " )
+  #
+  set ( ${outName}_MISSING        ${missing}   PARENT_SCOPE )
+  set ( ${outName}_INCLUDE_DIRS   ${used_incs} PARENT_SCOPE )
+  set ( ${outName}_LINK_LIBRARIES ${used_libs} PARENT_SCOPE )
+  set ( ${outName}_USES           ${used_uses} PARENT_SCOPE )
+endfunction()
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_package
+#
+#  Arguments
+#  ---------
+#  packageName      -> name of the package
+#  INCLUDE_DIRS     -> Include directories needed to compile package binaries
+#  INSTALL_INCLUDES -> Installation directive for header files
+#  LINK_LIBRARIES   -> Libraries needed to link the binary
+#  USES             -> Required package dependencies
+#  OPTIONAL         -> Optional package dependency e.g. [LCIO REQUIRED COMPONENTS]
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_package packageName )
+  #cmake_parse_arguments(ARG "" "LIBRARY;MAJOR;MINOR;PATCH;OUTPUT;INSTALL" "USES;OPTIONAL;LINK_LIBRARIES;INCLUDE_DIRS;INSTALL_INCLUDES" ${ARGN})
+  cmake_parse_arguments(ARG "" "LIBRARY;MAJOR;MINOR;PATCH" "USES;OPTIONAL;LINK_LIBRARIES;INCLUDE_DIRS;INSTALL_INCLUDES" ${ARGN})
+  set_property( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME ${packageName} )
+  string ( TOUPPER "${packageName}" PKG_NAME )
+  dd4hep_set_version ( ${packageName} MAJOR ${ARG_MAJOR} MINOR ${ARG_MINOR} PATCH ${ARG_PATCH} )
+  dd4hep_to_parent_scope ( ${packageName}_VERSION_MAJOR )
+  dd4hep_to_parent_scope ( ${packageName}_VERSION_MINOR )
+  dd4hep_to_parent_scope ( ${packageName}_VERSION_PATCH )
+  dd4hep_to_parent_scope ( ${packageName}_VERSION )
+  dd4hep_to_parent_scope ( ${packageName}_SOVERSION )
+  set ( vsn "Version: ( ${${packageName}_VERSION_MAJOR}.${${packageName}_VERSION_MINOR}.${${packageName}_VERSION_PATCH} )" )
+  message(STATUS "+------------------------------------------- <<<< PACKAGE ${packageName} >>>> ${vsn}" )
+
+  dd4hep_use_package ( "Package[${packageName}]" PACKAGE PACKAGE 
+    USES     ${ARG_USES} 
+    OPTIONAL ${ARG_OPTIONAL} )
+  if ( "${PACKAGE_MISSING}" STREQUAL "" )
+    #
+    #
+    #
+    #dd4hep_configure_output ( OUTPUT "${ARG_OUTPUT}" INSTALL "${ARG_INSTALL}" )
+    #
+    #
+    set (used_incs  ${PACKAGE_INCLUDE_DIRS} )
+    set (used_libs  ${PACKAGE_LINK_LIBRARIES} )
+    #
+    #  Define the include directories including dependent packages
+    #
+    list(APPEND used_incs ${CMAKE_CURRENT_SOURCE_DIR}/include )
+    foreach( inc ${ARG_INCLUDE_DIRS} )
+      list( APPEND used_incs ${CMAKE_CURRENT_SOURCE_DIR}/${inc} )
+    endforeach()
+    #
+    #  Build the list of link libraries required to build the package library and plugins etc.
+    #
+    dd4hep_make_unique_list ( used_libs VALUES ${used_libs} ${ARG_LINK_LIBRARIES} )
+    dd4hep_make_unique_list ( used_incs VALUES ${used_incs} )
+    #
+    #  Save the variables in the context of the current source directory (ie. THIS package)
+    #
+    set ( use "ON" )
+    set_property ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_INCLUDE_DIRS   ${used_incs} )
+    set_property ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_LINK_LIBRARIES ${used_libs} )
+
+    set_property ( GLOBAL PROPERTY ${PKG_NAME}_LIBRARIES    ${used_libs} )
+    set_property ( GLOBAL PROPERTY DD4HEP_USE_${PKG_NAME}   ${use} )
+    set_property ( GLOBAL PROPERTY ${PKG_NAME}_INCLUDE_DIRS ${used_incs} )
+    set_property ( GLOBAL PROPERTY ${PKG_NAME}_USES         ${PACKAGE_USES} )
+    #
+    #  Add package to 'internal' package list
+    #
+    get_property ( all_packages GLOBAL PROPERTY DD4HEP_ALL_PACKAGES )
+    set ( all_packages ${PKG_NAME} ${all_packages} )
+    set_property ( GLOBAL PROPERTY DD4HEP_ALL_PACKAGES ${all_packages} )
+    get_property ( use GLOBAL PROPERTY DD4HEP_USE_${PKG_NAME} )
+    #
+    #  Some debugging:
+    #
+    dd4hep_debug ( "Property:  DD4HEP_USE_${PKG_NAME}=${use}" )
+    dd4hep_debug ( "Used Libs: ${used_libs}" )
+    dd4hep_debug ( "Used Incs: ${used_incs}" )
+    #
+    #  Define the installation pathes of the headers.
+    #
+    dd4hep_install_dir ( ${ARG_INSTALL_INCLUDES} DESTINATION include )
+  else()
+    message (FATAL_ERROR "Missing package dependencies: ${PACKAGE_MISSING}" )
+  endif()
+  #
+endfunction()
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_add_library
+#
+#  Arguments
+#  ---------
+#  binary         -> plugin name
+#  SOURCES        -> list of source files. Will be expanded to absolute names
+#
+#  The following variables EXTEND the package defaults
+#  INCLUDE_DIRS   -> Additional include directories need to compile the binary
+#  LINK_LIBRARIES -> Additional libraries needed to link the binary
+#  USES           -> Required package dependencies
+#  OPTIONAL       -> Optional package dependency
+#                    if required e.g. [LCIO REQUIRED SOURCES aaa.cpp] the plugin will NOT be built
+#                    else        e.g. [LCIO          SOURCES aaa.cpp] the plugin will be built, but
+#                                     the source files will be omitted.
+#  DEFINITIONS    -> Optional compiler definitions to compile the sources
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_add_library binary building )
+  get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME)
+  cmake_parse_arguments ( ARG "" "" "SOURCES;GENERATED;LINK_LIBRARIES;INCLUDE_DIRS;USES;OPTIONAL;DEFINITIONS;PRINT" ${ARGN} )
+  dd4hep_debug( "+------------------------------------------- <<<< LIBRARY ${pkg}:${binary} >>>> Version: ${${pkg}_VERSION}" )
+
+  set ( tag "Library[${pkg}] -> ${binary}" )
+  if ( NOT "${ARG_PRINT}" STREQUAL "" )
+    set ( tag ${ARG_PRINT} )
+  endif()
+  set ( building_binary "OFF" )
+
+  if ( NOT "${ARG_OPTIONAL}" STREQUAL "" )
+    dd4hep_handle_optional_sources ( ${tag} "${ARG_OPTIONAL}" optional_missing optional_uses optional_sources )
+  endif()
+
+  if ( NOT "${optional_missing}" STREQUAL "" )
+    message( STATUS "|++> ${tag} (optional) skipped. Missing dependency: ${optional_missing}" )
+  else()
+    dd4hep_use_package( "${tag}" PACKAGE LOCAL 
+      USES     ${ARG_USES} ${optional_uses}
+      OPTIONAL ${ARG_OPTIONAL} )
+
+    if ( NOT "${LOCAL_MISSING}" STREQUAL "" )
+      message( STATUS "|++> ${tag} skipped. Missing dependency: ${missing}" )
+    endif()
+    set (pkg_incs ${LOCAL_INCLUDE_DIRS} )
+    set (pkg_libs ${LOCAL_LINK_LIBRARIES} )
+    #
+    dd4hep_make_unique_list( pkg_incs VALUES ${pkg_incs} ${ARG_INCLUDE_DIRS} )
+    #
+    dd4hep_make_unique_list( pkg_libs VALUES ${pkg_libs} ${ARG_LINK_LIBRARIES} )
+    #
+    dd4hep_make_unique_list( pkg_defs VALUES ${COMPILE_DEFINITIONS} ${ARG_DEFINITIONS} )
+    #
+    file ( GLOB   sources ${ARG_SOURCES} )
+    list ( APPEND sources ${optional_sources} )
+    if ( NOT "${ARG_GENERATED}" STREQUAL "" )
+      #
+      # root-cint produces warnings of type 'unused-function' disable them on generated files
+      foreach ( f in  ${ARG_GENERATED} )
+        set_source_files_properties( ${f} PROPERTIES COMPILE_FLAGS -Wno-unused-function )
+      endforeach()
+      list ( APPEND sources ${ARG_GENERATED} )
+    endif()
+    #
+    #
+    if ( NOT "${sources}" STREQUAL "" )
+      dd4hep_make_unique_list ( sources  VALUES ${sources} )
+      dd4hep_debug( "${tag} ${sources}")
+      #
+      include_directories ( ${pkg_incs} )
+      add_definitions ( ${pkg_defs} )
+      #
+      add_library ( ${binary} SHARED ${sources} )
+      target_link_libraries ( ${binary} ${pkg_libs} )
+      if ( "${${pkg}_VERSION}" STREQUAL "" OR "${${pkg}_SOVERSION}" STREQUAL "" )
+        message(FATAL_ERROR " BAD Package versions: VERSION[${pkg}_VERSION] ${${pkg}_VERSION} SOVERSION[${pkg}_SOVERSION] ${${pkg}_SOVERSION} " )
+      endif()
+      ##message(STATUS "set_target_properties ( ${binary} PROPERTIES VERSION ${${pkg}_VERSION} SOVERSION ${${pkg}_SOVERSION})")
+      set_target_properties ( ${binary} PROPERTIES VERSION ${${pkg}_VERSION} SOVERSION ${${pkg}_SOVERSION})
+      #
+      install ( TARGETS ${binary}  
+	LIBRARY DESTINATION lib 
+	RUNTIME DESTINATION bin)
+      set ( building_binary "ON" )
+    else()
+      message( STATUS "|++> ${tag} Skipped. No sources to be compiled [Use constraint]" )
+    endif()
+  endif()
+  set ( ${building} ${building_binary} PARENT_SCOPE )
+endfunction(dd4hep_add_library)
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_add_package_library
+#
+#  Package libraries are automatically added to the package's link libraries.
+#  Package plugins and plugins depending on a package automically link against 
+#  these libraries.
+#
+#  Arguments      -> See function dd4hep_add_library
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_add_package_library library )
+  get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME)
+  string ( TOUPPER "${pkg}" PKG )
+  dd4hep_add_library( ${library} building ${ARGN} PRINT "Package library[${pkg}] -> ${library}" )
+  if ( "${building}" STREQUAL "ON" )
+    get_property(pkg_libs GLOBAL PROPERTY PROPERTY ${PKG}_LIBRARIES )
+    dd4hep_make_unique_list ( pkg_libs VALUES ${pkg_libs} ${library} )
+    set_property(GLOBAL PROPERTY ${PKG}_LIBRARIES ${pkg_libs} )
+    # Test and print if correct
+    get_property(pkg_libs GLOBAL PROPERTY PROPERTY ${PKG}_LIBRARIES )
+    dd4hep_debug ( "add_package_library -> ${library} ${PKG}_LIBRARIES:${pkg_libs}" )
+  else()
+    message( FATAL_ERROR "|++> Package library[${pkg}] -> ${binary} Cannot be built! This is an ERROR condition." )    
+  endif()
+endfunction(dd4hep_add_package_library)
+
+#---------------------------------------------------------------------------------------------------
+#
+#  dd4hep_add_plugin 
+#
+#  Arguments
+#  ---------
+#  binary         -> plugin name
+#  SOURCES        -> list of source files. Will be expanded to absolute names
+#
+#  The following variables EXTEND the package defaults
+#  INCLUDE_DIRS   -> Additional include directories need to compile the binary
+#  LINK_LIBRARIES -> Additional libraries needed to link the binary
+#  USES           -> Required package dependencies
+#  OPTIONAL       -> Optional package dependency
+#                    if required e.g. [LCIO REQUIRED SOURCES aaa.cpp] the plugin will NOT be built
+#                    else        e.g. [LCIO          SOURCES aaa.cpp] the plugin will be built, but
+#                                     the source files will be omitted.
+#  DEFINITIONS    -> Optional compiler definitions to compile the sources
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_add_plugin binary )
+  cmake_parse_arguments(ARG "" "" "SOURCES;GENERATED;LINK_LIBRARIES;INCLUDE_DIRS;USES;OPTIONAL;DEFINITIONS" ${ARGN})
+  get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME)
+  string ( TOUPPER "${pkg}" PKG )
+  get_property(pkg_lib  GLOBAL PROPERTY ${PKG}_LIBRARIES )
+  dd4hep_add_library( ${binary} building
+    PRINT          "Plugin[${pkg}] -> ${binary}"
+    SOURCES        ${ARG_SOURCES}
+    GENERATED      ${ARG_GENERATED}
+    LINK_LIBRARIES ${ARG_LINK_LIBRARIES} ${pkg_lib}
+    INCLUDE_DIRS   ${ARG_INCLUDE_DIRS} 
+    USES           ${ARG_USES}
+    OPTIONAL       "${ARG_OPTIONAL}"
+    DEFINITIONS    ${ARG_DEFINITIONS} )
+  #
+  # Generate ROOTMAP if the plugin will be built:
+  if ( "${building}" STREQUAL "ON" )
+    dd4hep_generate_rootmap( ${binary} )
+  endif()
+endfunction(dd4hep_add_plugin)
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_add_executable
+#
+#  Arguments
+#  ---------
+#  binary        -> plugin name
+#  SOURCES        -> list of source files. Will be expanded to absolute names
+#
+#  The following variables EXTEND the package defaults
+#  INCLUDE_DIRS   -> Additional include directories need to compile the binary
+#  LINK_LIBRARIES -> Additional libraries needed to link the binary
+#  USES           -> Required package dependencies
+#  OPTIONAL       -> Optional package dependency
+#                    if required e.g. [LCIO REQUIRED SOURCES aaa.cpp] the plugin will NOT be built
+#                    else        e.g. [LCIO          SOURCES aaa.cpp] the plugin will be built, but
+#                                     the source files will be omitted.
+#  DEFINITIONS    -> Optional compiler definitions to compile the sources
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function ( dd4hep_add_executable binary )
+  cmake_parse_arguments ( ARG "" "" "SOURCES;GENERATED;LINK_LIBRARIES;INCLUDE_DIRS;USES;OPTIONAL" ${ARGN})
+  get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME)
+  dd4hep_debug( "+------------------------------------------- <<<< EXECUTABLE ${pkg}:${binary} >>>> Version: ${${pkg}_VERSION}" )
+  set ( tag "Executable[${pkg}] -> ${binary}" )
+
+  if ( NOT "${ARG_OPTIONAL}" STREQUAL "" )
+    dd4hep_handle_optional_sources ( ${tag} "${ARG_OPTIONAL}" optional_missing optional_uses optional_sources )
+  endif()
+  #
+  if ( NOT "${optional_missing}" STREQUAL "" )
+    message( STATUS "|++> ${tag} SKIPPED. Missing optional dependencies: ${optional_missing}" )
+  else()
+    set ( uses ${ARG_USES} ${optional_uses} )
+    dd4hep_use_package ( ${tag} PACKAGE LOCAL 
+      USES     "${uses}"
+      OPTIONAL "${ARG_OPTIONAL}" )
+    if ( "${LOCAL_MISSING}" STREQUAL "" )
+      dd4hep_debug ( "${tag} Executable uses:     ${ARG_USES} -- ${uses}" )
+      dd4hep_debug ( "${tag} Executable optional: ${ARG_OPTIONAL}" )
+      #
+      get_property ( pkg_library GLOBAL PROPERTY ${pkg}_LIBRARIES )
+      #
+      #  Sources may also be supplied without argument tag:
+      #
+      if( "${ARG_SOURCES}" STREQUAL "")
+	set ( ARG_SOURCES ${ARG_UNPARSED_ARGUMENTS} )
+      endif()
+      set ( sources ${GENERATED} ${ARG_SOURCES} ${optional_sources} )
+      #
+      if( NOT "${ARG_SOURCES}" STREQUAL "")
+	set (incs ${LOCAL_INCLUDE_DIRS} )
+	set (libs ${pkg_library} ${LOCAL_LINK_LIBRARIES} ${ARG_LINK_LIBRARIES} )
+	dd4hep_make_unique_list ( libs    VALUES ${libs} )
+	dd4hep_make_unique_list ( sources VALUES ${sources} )
+	#
+	dd4hep_debug ( "${tag} Libs:${libs}" )
+	include_directories( ${ARG_INCLUDE_DIRS} ${incs} )
+	add_executable( ${binary} ${sources} )
+	target_link_libraries( ${binary} ${libs} )
+	#
+	#  Install the binary to the destination directory
+	#
+	install(TARGETS ${binary} 
+	  LIBRARY DESTINATION lib 
+	  RUNTIME DESTINATION bin )
+      else()
+	message( STATUS "|++> ${tag} SKIPPED. No sources to build [Use constraint]" )
+      endif()
+    else()
+      message( FATAL_ERROR "|++> ${tag} SKIPPED. Missing dependencies: ${LOCAL_MISSING}" )
+    endif()
+  endif()
+endfunction(dd4hep_add_executable)
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_add_dictionary
+#
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function( dd4hep_add_dictionary dictionary )
+  cmake_parse_arguments(ARG "" "" "SOURCES;EXCLUDE;LINKDEF;OPTIONS" ${ARGN} )
+  get_property(pkg DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_NAME)
+  set ( tag "Dictionary[${pkg}] -> ${dictionary}" )
+  message( STATUS "|++> ${tag} Building dictionary ..." ) 
+  if("${ARG_LINKDEF}" STREQUAL "")
+    set(ARG_LINKDEF "${CMAKE_SOURCE_DIR}/DDCore/include/ROOT/LinkDef.h")
+  endif()
+  #
+  file( GLOB headers ${ARG_SOURCES} )
+  file( GLOB excl_headers ${ARG_EXCLUDE} )
+  foreach( f ${excl_headers} )
+    list( REMOVE_ITEM headers ${f} )
+    message( STATUS "|++        exclude: ${f}" )
+  endforeach()
+  #
+  get_property(incs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY PACKAGE_INCLUDE_DIRS)
+  get_property(defs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY COMPILE_DEFINITIONS)
+  get_property(opts DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY COMPILE_OPTIONS)
+  #
+  set ( inc_dirs -I${CMAKE_CURRENT_SOURCE_DIR}/include )
+  foreach ( inc ${incs} )
+    file ( GLOB inc ${inc} )
+    set ( inc_dirs ${inc_dirs} -I${inc} )
+  endforeach()
+  #
+  file ( GLOB linkdefs ${ARG_LINKDEF} )
+  #
+  set ( comp_defs )
+  foreach ( def ${defs} )
+    set ( comp_defs ${comp_defs} -D${def} )
+  endforeach()
+  #
+  dd4hep_make_unique_list ( sources   VALUES ${headers} )
+  dd4hep_make_unique_list ( linkdefs  VALUES ${linkdefs} )
+  dd4hep_make_unique_list ( inc_dirs  VALUES ${inc_dirs} )
+  dd4hep_make_unique_list ( comp_defs VALUES ${comp_defs} )
+  #
+  dd4hep_debug ( "${tag}  Linkdef: '${linkdefs}'" ) 
+  dd4hep_debug ( "${tag}  Compile: '${comp_defs};${inc_dirs}'" ) 
+  dd4hep_debug ( "${tag}  Files:   '${headers}'" ) 
+  dd4hep_debug ( "${tag}  Unparsed:'${ARG_UNPARSED_ARGUMENTS}'" ) 
+  dd4hep_debug ( "${tag}  Sources: '${CMAKE_CURRENT_SOURCE_DIR}'" ) 
+  #
+  add_custom_command(OUTPUT ${dictionary}.cxx ${dictionary}.h
+    COMMAND ${ROOTCINT_EXECUTABLE} -f  ${dictionary}.cxx 
+            -c -p ${ARG_OPTIONS} ${comp_defs} ${inc_dirs} ${headers} ${linkdefs} 
+    DEPENDS ${headers} ${linkdefs} )
+endfunction()
+
+
+#---------------------------------------------------------------------------------------------------
+macro ( dd4hep_configure_scripts _pkg )
+  cmake_parse_arguments(MACRO_ARG "DEFAULT_SETUP;WITH_TESTS" "RUN_SCRIPT" "" ${ARGV} )
+  message ( STATUS "|++> Setting up test environment: ${ARGV}" )
+  set( PackageName ${_pkg} )
+  if ( ${MACRO_ARG_DEFAULT_SETUP} )
+    configure_file( ${DD4hep_DIR}/cmake/run_test_package.sh ${EXECUTABLE_OUTPUT_PATH}/run_test_${_pkg}.sh @ONLY)
+    INSTALL(PROGRAMS ${EXECUTABLE_OUTPUT_PATH}/run_test_${_pkg}.sh DESTINATION bin )
+    #---- configure run environment ---------------
+    configure_file( ${DD4hep_DIR}/cmake/thisdd4hep_package.sh.in  ${EXECUTABLE_OUTPUT_PATH}/this${_pkg}.sh @ONLY)
+    install(PROGRAMS ${EXECUTABLE_OUTPUT_PATH}/this${_pkg}.sh DESTINATION bin )
+    #--- install target-------------------------------------
+    if ( IS_DIRECTORY scripts )
+      dd4hep_install_dir ( compact scripts DESTINATION examples/${_pkg} )
+    endif()
+    if (IS_DIRECTORY compact )
+      dd4hep_install_dir ( compact DESTINATION examples/${_pkg} )
+    endif()
+  endif()
+  if ( ${MACRO_ARG_WITH_TESTS} ) 
+    if ( BUILD_TESTING )
+      include(CTest)
+      enable_testing ()
+      if ( NOT "${MACRO_ARG_UPARSED_ARGUMENTS}" STREQUAL "" )
+        foreach ( dir ${MACRO_ARG_UPARSED_ARGUMENTS} )
+          add_subdirectory ( ${dir} )
+        endforeach()
+      endif()
+    endif(BUILD_TESTING)
+    set ( BUILDNAME "${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER}-${CMAKE_BUILD_TYPE}" CACHE STRING "set build string for cdash")
+  endif()
+  unset( PackageName )
+endmacro( dd4hep_configure_scripts )
+
+#---------------------------------------------------------------------------------------------------
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+macro( dd4hep_enable_tests )
+  cmake_parse_arguments(MACRO_ARG "" "" "" ${ARGV} )
+  #message ( "***|++> Test environment: BUILD_TESTING:${BUILD_TESTING} DIRS:${MACRO_ARG_UNPARSED_ARGUMENTS}" )
+  if (BUILD_TESTING)
+    message ( "***|++> Enable CTest environment....BUILD:${BUILD_TESTING} DIRS:${MACRO_ARG_UNPARSED_ARGUMENTS}" )
+    include(CTest)
+    enable_testing ()
+    if ( NOT "${MACRO_ARG_UNPARSED_ARGUMENTS}" STREQUAL "" )
+      foreach ( _dir ${MACRO_ARG_UNPARSED_ARGUMENTS} )
+        add_subdirectory ( ${_dir} )
+      endforeach()
+    endif()
+  endif()
+  set ( BUILDNAME "${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER}-${CMAKE_BUILD_TYPE}" CACHE STRING "set build string for cdash")
+endmacro( dd4hep_enable_tests )
+
+#---------------------------------------------------------------------------------------------------
+#  dd4hep_add_test_reg
+#
+#  Add test with regular expression output parsing.
+#  BUILD_EXEC:  Add and build executable with the same name as the test (Default NONE)
+#  OUTPUT       Output file of the test (Default: empty)
+#  COMMAND      Command to execute
+#  EXEC_ARGS    Arguments to the command
+#  REGEX_PASS   Regular expression to indicate that the test succeeded
+#  REGEX_FAIL   Regular expression to indicate that the test failed
+#
+#  \author  M.Frank
+#  \version 1.0
+#
+#---------------------------------------------------------------------------------------------------
+function ( dd4hep_add_test_reg test_name )
+  cmake_parse_arguments(ARG "BUILD_EXEC" "OUTPUT" "COMMAND;EXEC_ARGS;REGEX_PASS;REGEX_PASSED;REGEX_FAIL;REGEX_FAILED" ${ARGN} )
+  if ( ${ARG_BUILD_EXEC} )
+    #message(STATUS "Building executable:  ${test_name} SOURCES src/${test_name}.cc")
+    dd4hep_add_executable ( ${test_name} SOURCES src/${test_name}.cc )
+  endif()
+
+  set ( cmd ${ARG_COMMAND} )
+  if ( "${cmd}" STREQUAL "" )
+    set ( cmd ${CMAKE_INSTALL_PREFIX}/bin/run_test.sh ${test_name} )
+  endif()
+
+  set ( passed ${ARG_REGEX_PASS} ${ARG_REGEX_PASSED} )
+  if ( "${passed}" STREQUAL "NONE" )
+    unset ( passed )
+  elseif ( "${passed}" STREQUAL "" )
+    set ( passed "TEST_PASSED" )
+  endif()
+
+  set ( failed ${ARG_REGEX_FAIL} ${ARG_REGEX_FAILED} )
+  if ( "${failed}" STREQUAL "NONE" )
+    unset ( failed )
+  endif()
+  set ( output ${ARG_OUTPUT} )
+
+  set ( args ${ARG_EXEC_ARGS} )
+  if ( "${args}" STREQUAL "" )
+    set ( args ${test_name} )
+  endif()
+  add_test(NAME t_${test_name} COMMAND ${cmd} ${output} ${args} ${output} )
+  if ( NOT "${passed}" STREQUAL "" )
+    set_tests_properties( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION "${passed}" )
+  endif()
+  if ( NOT "${failed}" STREQUAL "" )
+    set_tests_properties( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "${failed}" )
+  endif()
+endfunction()
diff --git a/cmake/DD4hepConfig.cmake.in b/cmake/DD4hepConfig.cmake.in
index 405eb343b..6150d6cd3 100644
--- a/cmake/DD4hepConfig.cmake.in
+++ b/cmake/DD4hepConfig.cmake.in
@@ -13,13 +13,12 @@
 # @author Jan Engels, Desy
 ##############################################################################
 
-SET( DD4hep_ROOT "@CMAKE_INSTALL_PREFIX@" )
+SET( DD4hep_DIR "@CMAKE_INSTALL_PREFIX@" )
 SET( DD4hep_VERSION "@DD4hep_VERSION@" )
 
-INCLUDE( ${DD4hep_ROOT}/cmake/DD4hep.cmake )
-
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH} ${DD4hep_ROOT}/cmake/  )
+INCLUDE( ${DD4hep_DIR}/cmake/DD4hep.cmake )
 
+set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH} ${DD4hep_DIR}/cmake/  )
 
 # ---------- include dirs -----------------------------------------------------
 # do not store find results in cache
@@ -27,9 +26,9 @@ SET( DD4hep_INCLUDE_DIRS DD4hep_INCLUDE_DIRS-NOTFOUND )
 MARK_AS_ADVANCED( DD4hep_INCLUDE_DIRS )
 
 FIND_PATH( DD4hep_INCLUDE_DIRS
-	NAMES DD4hep/Detector.h
-	PATHS ${DD4hep_ROOT}/include
-	NO_DEFAULT_PATH
+  NAMES DD4hep/Detector.h
+  PATHS ${DD4hep_DIR}/include
+  NO_DEFAULT_PATH
 )
 
 # ---------- default build type  --------------------------------------------------------
@@ -39,12 +38,11 @@ endif()
 
 # ---------- libraries --------------------------------------------------------
 # do not store find results in cache
-SET( DD4hep_LIBRARY_DIRS ${DD4hep_ROOT}/lib )
+SET( DD4hep_LIBRARY_DIRS ${DD4hep_DIR}/lib )
 SET( DD4hep_LIBRARIES DD4hep_LIBRARIES-NOTFOUND )
 MARK_AS_ADVANCED( DD4hep_LIBRARY_DIRS DD4hep_LIBRARIES )
 
-
-INCLUDE( ${DD4hep_ROOT}/cmake/DD4hepMacros.cmake )
+INCLUDE( ${DD4hep_DIR}/cmake/DD4hepMacros.cmake )
 
 # only standard libraries should be passed as arguments to CHECK_PACKAGE_LIBS
 # additional components are set by cmake in variable PKG_FIND_COMPONENTS
@@ -54,9 +52,7 @@ if(@DD4HEP_USE_GEANT4@)
   if( @GEANT4_USE_CLHEP@)
     set(GEANT4_USE_CLHEP  1 ) 
   endif()
-
   set(Geant4_DIR @Geant4_DIR@)
-
 endif()
 
 CHECK_PACKAGE_LIBS(DD4hep DDCore)
@@ -73,22 +69,11 @@ IF(DD4hep_FIND_COMPONENTS)
   ENDFOREACH()
 ENDIF()
 
-
-
-##---- build with Boost ?
-#if(@DD4HEP_USE_BOOST@)
-#  set( DD4HEP_USE_BOOST True )
-#  find_package( Boost REQUIRED )
-#  include_directories( SYSTEM ${Boost_INCLUDE_DIRS} )
-#  add_definitions( -DDD4HEP_USE_BOOST )
-#endif()
-
-
 #---- build with xercesc or tinyxml ?
 if( @DD4HEP_USE_XERCESC@ )
   set( DD4HEP_USE_XERCESC True )
 endif()
-INCLUDE( ${DD4hep_ROOT}/cmake/DD4hep_XML_setup.cmake )
+INCLUDE( ${DD4hep_DIR}/cmake/DD4hep_XML_setup.cmake )
 
 #----- APPLE ? -------
 
@@ -98,7 +83,6 @@ MARK_AS_ADVANCED( USE_DYLD )
 # ---------- final checking ---------------------------------------------------
 INCLUDE( FindPackageHandleStandardArgs )
 # set DD4HEP_FOUND to TRUE if all listed variables are TRUE and not empty
-FIND_PACKAGE_HANDLE_STANDARD_ARGS( DD4hep DEFAULT_MSG DD4hep_ROOT DD4hep_INCLUDE_DIRS DD4hep_LIBRARIES )
+FIND_PACKAGE_HANDLE_STANDARD_ARGS( DD4hep DEFAULT_MSG DD4hep_DIR DD4hep_INCLUDE_DIRS DD4hep_LIBRARIES )
 
 SET( DD4hep_FOUND ${DD4HEP_FOUND} )
-
diff --git a/cmake/FindROOT.cmake b/cmake/FindROOT.cmake
index c42cf3364..aa45db526 100644
--- a/cmake/FindROOT.cmake
+++ b/cmake/FindROOT.cmake
@@ -38,33 +38,50 @@ if(ROOT_CONFIG_EXECUTABLE)
     OUTPUT_STRIP_TRAILING_WHITESPACE)
 
   set(ROOT_LIBRARY_DIR ${ROOTSYS}/lib)
-
-  set(ROOT_ROOT ${ROOTSYS})
+  set(ROOT_VERSION     ${ROOT_VERSION})
+  set(ROOT_ROOT        ${ROOTSYS})
 
   # Make variables changeble to the advanced user
   mark_as_advanced(ROOT_CONFIG_EXECUTABLE)
-
 endif()
 
-set(ROOT_LIBRARIES ${ROOT_LIBRARIES} -lGenVector)     
-#
-#  No Relex library present for ROOT 6
-#
-if(NOT DD4HEP_NO_REFLEX)
-  set(ROOT_LIBRARIES  ${ROOT_LIBRARIES} -lReflex)
-endif()
+###set(ROOT_LIBRARIES    ${ROOT_LIBRARIES} -lGenVector)     
 
-set(ROOT_EVE_LIBRARIES ${ROOT_EVE_LIBRARIES} )     
+set(ROOT_EVE_LIBRARIES ${ROOT_EVE_LIBRARIES} )
 
 # handle the QUIETLY and REQUIRED arguments and set ROOT_FOUND to TRUE if
 # all listed variables are TRUE
-INCLUDE(FindPackageHandleStandardArgs)
+INCLUDE ( FindPackageHandleStandardArgs )
 FIND_PACKAGE_HANDLE_STANDARD_ARGS(ROOT DEFAULT_MSG ROOTSYS ROOT_INCLUDE_DIR)
 mark_as_advanced(ROOT_FOUND ROOT_INCLUDE_DIR)
 
-include(CMakeParseArguments)
+include ( CMakeParseArguments)
 find_program(ROOTCINT_EXECUTABLE rootcint PATHS ${ROOTSYS}/bin $ENV{ROOTSYS}/bin)
 
+if(NOT ROOT_VERSION_STRING)
+  file(STRINGS ${ROOT_INCLUDE_DIR}/RVersion.h _RVersion REGEX "define *ROOT_RELEASE ")
+  string(REGEX MATCH "\"(([0-9]+)\\.([0-9]+)/([0-9]+)([a-z]*|-rc[0-9]+))\"" _RVersion ${_RVersion})
+  set(ROOT_VERSION_STRING ${CMAKE_MATCH_1} CACHE INTERNAL "Version of ROOT")
+  set(ROOT_VERSION_MAJOR  ${CMAKE_MATCH_2} CACHE INTERNAL "Major version of ROOT")
+  set(ROOT_VERSION_MINOR  ${CMAKE_MATCH_3} CACHE INTERNAL "Minor version of ROOT")
+  set(ROOT_VERSION_PATCH  ${CMAKE_MATCH_4} CACHE INTERNAL "Patch version of ROOT")
+endif()
+##message(WARNING "ROOT ${ROOT_VERSION_MAJOR} ${ROOT_VERSION_MINOR} ${ROOT_VERSION_PATCH}")
+IF ( ${ROOT_VERSION_MAJOR} LESS 6 )
+  set ( ROOT_LIBRARIES ${ROOT_LIBRARIES} -lReflex )
+ENDIF()
+IF(ROOT_FIND_COMPONENTS)
+  MESSAGE( STATUS "ROOT: Looking for Components: ${ROOT_FIND_COMPONENTS}" )
+  FOREACH(comp ${ROOT_FIND_COMPONENTS})
+    if ( "${comp}" STREQUAL "TEve" )
+      set(ROOT_LIBRARIES ${ROOT_LIBRARIES} ${ROOT_EVE_LIBRARIES} )
+    else()
+      set(ROOT_LIBRARIES ${ROOT_LIBRARIES} -l${comp} )
+    endif()
+  ENDFOREACH()
+ENDIF()
+
+
 #----------------------------------------------------------------------------
 # function root_generate_dictionary( dictionary   
 #                                    header1 header2 ... 
@@ -106,11 +123,12 @@ function(root_generate_dictionary dictionary)
     endif()
   endforeach()
   #---call rootcint------------------------------------------
+  message(STATUS "ROOT Dictionary output: ${dictionary}.cxx ${dictionary}.h")
   add_custom_command(OUTPUT ${dictionary}.cxx ${dictionary}.h
                      COMMAND echo ${ROOTCINT_EXECUTABLE} -cint -f  ${dictionary}.cxx 
-                                          -c -p ${ARG_OPTIONS} ${includedirs} ${headerfiles} ${linkdefs} 
+                                          -c -p ${ARG_OPTIONS} ${includedirs} ${headerfiles} ${linkdefs}
                      COMMAND ${ROOTCINT_EXECUTABLE} -f  ${dictionary}.cxx 
-                                          -c -p ${ARG_OPTIONS} ${includedirs} ${headerfiles} ${linkdefs} 
+                                          -c -p ${ARG_OPTIONS} ${includedirs} ${headerfiles} ${linkdefs}
                      DEPENDS ${headerfiles} ${linkdefs})
 endfunction()
 
diff --git a/cmake/run_test_package.sh b/cmake/run_test_package.sh
index d108c97e0..9ba93c42a 100755
--- a/cmake/run_test_package.sh
+++ b/cmake/run_test_package.sh
@@ -7,9 +7,7 @@
 #   with all following arguments
 #
 
-
 #----- initialize environment for this package - including DD4hep 
-
 source @CMAKE_INSTALL_PREFIX@/bin/this@PackageName@.sh
 
 #----- parse command line - first argument is the 
@@ -25,5 +23,5 @@ done
 
 #echo " #### LD_LIBRARY_PATH = :  ${LD_LIBRARY_PATH}" 
 
-echo " ### running test :  '" ${command} ${theargs} "'"
+echo " ### running test :  '${command} ${theargs}'"
 ${command} ${theargs}
diff --git a/cmake/thisdd4hep_package.sh.in b/cmake/thisdd4hep_package.sh.in
index 2a56cea4a..1ac6f0ba7 100644
--- a/cmake/thisdd4hep_package.sh.in
+++ b/cmake/thisdd4hep_package.sh.in
@@ -7,7 +7,7 @@
 #################################################################################
 
 
-source @DD4hep_ROOT@/bin/thisdd4hep.sh
+source @DD4hep_DIR@/bin/thisdd4hep.sh
 
 export PATH=$PATH:@CMAKE_INSTALL_PREFIX@/bin
 
@@ -20,17 +20,17 @@ fi
 
 
 # -- need to extend dynamic search path for all external libraries:
-
-for lp in @External_LIBRARY_DIRS@
-do
-
-
-    if [ @USE_DYLD@ ]
-    then
-	# echo "  ### 	export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:${lp} "
-	export DYLD_LIBRARY_PATH=${lp}:$DYLD_LIBRARY_PATH
-    else
-	# echo "  ### 	export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${lp} "
-	export LD_LIBRARY_PATH=${lp}:$LD_LIBRARY_PATH
-    fi
-done
+if [ @External_LIBRARY_DIRS@ ]
+then
+    for lp in @External_LIBRARY_DIRS@
+    do
+	if [ @USE_DYLD@ ]
+	then
+	    # echo "  ### 	export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:${lp} "
+	    export DYLD_LIBRARY_PATH=${lp}:$DYLD_LIBRARY_PATH
+	else
+	    # echo "  ### 	export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${lp} "
+	    export LD_LIBRARY_PATH=${lp}:$LD_LIBRARY_PATH
+	fi
+    done
+fi;
diff --git a/doc/CompileAllOptionPermutations.sh b/doc/CompileAllOptionPermutations.sh
new file mode 100755
index 000000000..d7a7d317a
--- /dev/null
+++ b/doc/CompileAllOptionPermutations.sh
@@ -0,0 +1,61 @@
+dir_name=`pwd`;
+INSTALL_G4=/home/frankm/SW/g4_10.01.p02_dbg/lib/Geant4-10.1.2;
+INSTALL_LCIO=/home/frankm/SW/lcio/v02-04-03;
+INSTALL_XERCESC=/home/frankm/SW/xercesc;
+
+#
+#
+make_opt()
+{
+    if test "$1" = "ON"; then
+	echo $*;
+    else
+	echo ${1};
+    fi;
+}
+LINE="==================================================================================================="
+for DOGEANT4 in OFF ON; do
+    for DOXERCESC in OFF ON; do
+	for DOGEAR in OFF; do
+	    for DOLCIO in OFF ON; do
+		folder=build_Xer${DOXERCESC}_Geant${DOGEANT4}_Gear${DOGEAR}_Lcio${DOLCIO}
+		mkdir ${dir_name}/$folder
+		cd ${dir_name}/$folder
+		echo "${LINE}";
+		echo "${LINE}";
+		echo "=============================== ${folder} ";
+		echo "${LINE}";
+		echo "${LINE}";
+                #-DDD4HEP_DEBUG_CMAKE=ON \
+		CMD="cd ${dir_name}/$folder ; cmake -D DD4HEP_USE_XERCESC=${DOXERCESC} \
+		    -DDD4HEP_USE_GEANT4=`make_opt ${DOGEANT4} -DGeant4_DIR=${INSTALL_G4}`\
+		    -DDD4HEP_USE_LCIO=`make_opt ${DOLCIO} -DLCIO_DIR=${INSTALL_LCIO}` \
+		    -DBoost_NO_BOOST_CMAKE=ON \
+		    -DDD4HEP_USE_XERCESC=`make_opt ${DOXERCESC} -DXERCESC_ROOT_DIR=${INSTALL_XERCESC}` \
+		    ../../../DD4hep.trunk/checkout;";
+                echo ${CMD};
+                eval ${CMD};
+		if [ $? -ne  0 ]; then
+		    echo "DANGER WILL ROBINSON DANGER!"
+		    echo "${LINE}";
+		    echo "=============================== ${folder} ";
+		    echo "${LINE}";
+                    echo "++++ Failed CMAKE command:"
+                    echo ${CMD};
+		    exit 1
+		fi
+		make -j5
+		if [ $? -ne  0 ]; then
+		    echo "DANGER WILL ROBINSON DANGER!"
+		    echo "${LINE}";
+		    echo "=============================== ${folder} ";
+		    echo "${LINE}";
+                    echo "++++ Failed BUILD:"
+                    echo ${CMD};
+		    exit 1
+		fi
+		cd ..
+	    done
+	done
+    done
+done
diff --git a/doc/release.notes b/doc/release.notes
index 1008d0911..dcda4a9c1 100644
--- a/doc/release.notes
+++ b/doc/release.notes
@@ -3,6 +3,16 @@
 DD4hep  ----  Release Notes
 =================================
 
+
+2015-07-25 M.Frank
+------------------
+  - DDSegmentation: Remove several 'shadow' warnings.
+
+  - New build system for the DD4hep core, which greatly simplyfies the cmake files
+    for the various sub-packages. 
+    Tested with Andre's build script doc/CompileAllOptionPermutations.sh.
+    (GEAR usage not tested though)
+
  --------
 | v00-14 |  
  --------   
@@ -18,7 +28,7 @@ F.Gaede: 2015-07-15
  - added methods length_along_u/v() to ISurface
  - moved setting of CMAKE_CXX_FLAGS (if DD4HEP_USE_CXX11) from DD4hep.cmake to CMakeLists.txt
 
-2015-07-11n M.Frank
+2015-07-11 M.Frank
 -------------------
   -  added starter docs DD4hepStartersGuide.pdf
 
diff --git a/examples/AlignDet/CMakeLists.txt b/examples/AlignDet/CMakeLists.txt
index 4bc593eaa..ba44f6587 100644
--- a/examples/AlignDet/CMakeLists.txt
+++ b/examples/AlignDet/CMakeLists.txt
@@ -1,130 +1,28 @@
+# $Id: $
+#==========================================================================
+#  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.
+#
+#==========================================================================
 cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR)
-
-#---------------------------
-set( PackageName AlignDet )
-#---------------------------
-
-project(${PackageName})
-
-# project version
-SET( ${PackageName}_VERSION_MAJOR 0 )
-SET( ${PackageName}_VERSION_MINOR 0 )
-SET( ${PackageName}_VERSION_PATCH 1 )
-
-SET( ${PackageName}_VERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" )
-SET( ${PackageName}_SOVERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" )
-
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${CMAKE_SOURCE_DIR}/cmake ) 
-set(LIBRARY_OUTPUT_PATH    ${PROJECT_BINARY_DIR}/lib)
-set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
-
-#------------- set the default installation directory to be the source directory
-
-IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-  SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH  
-    "install prefix path  - overwrite with -D CMAKE_INSTALL_PREFIX = ..." 
-    FORCE )
-  MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" )
-ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-
-#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-find_package( DD4hep )
-
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${DD4hep_ROOT}/cmake ) 
-include( DD4hep )
-
-#find_package( ROOT REQUIRED )
-find_package( ROOT REQUIRED COMPONENTS Geom)
-set( ROOT_COMPONENT_LIBRARIES Geom)
-
-#-------------------------------------------------------------
-# add additional packages here
-#-------------------------------------------------------------
-
-include(DD4hep_XML_setup)
-
-#---Testing-------------------------------------------------------------------------
-if(BUILD_TESTING)
-  include(CTest)
-  enable_testing()
-endif(BUILD_TESTING)
-
-configure_file( ${DD4hep_ROOT}/cmake/run_test_package.sh run_test_${PackageName}.sh @ONLY)
-INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/run_test_${PackageName}.sh
-  DESTINATION bin )
-
-#-------------------------------------------------------------
-include_directories( ${CMAKE_SOURCE_DIR}/include
-  include
-  ${DD4hep_INCLUDE_DIRS}
-  ${ROOT_INCLUDE_DIR}
- )
-
-file(GLOB sources src/*.cpp )
-include(DD4hep_XML_setup)
-
-add_library(${PackageName} SHARED ${sources})
-
-target_link_libraries(${PackageName} ${DD4hep_LIBRARIES} ${ROOT_LIBRARIES} ${ROOT_COMPONENT_LIBRARIES} )
-
-#---Rootmap generation--------------------------------------------------------------
-if(APPLE)
-  dd4hep_generate_rootmap_apple(${PackageName} )
-else()
-  dd4hep_generate_rootmap(${PackageName} )
-endif()
-
-
-#---- configure run environment ---------------
-configure_file( ${DD4hep_ROOT}/cmake/thisdd4hep_package.sh.in  this${PackageName}.sh @ONLY)
-
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/this${PackageName}.sh
-  DESTINATION bin
-  )
-
-
-#--- install target-------------------------------------
-install(TARGETS ${PackageName}
-  RUNTIME DESTINATION bin
-  LIBRARY DESTINATION lib
+include ( ${DD4hep_DIR}/cmake/DD4hep.cmake )
+#-----------------------------------------------------------------------------------
+dd4hep_configure_output()
+dd4hep_package ( AlignDet MAJOR 0 MINOR 0 PATCH 1
+  USES           [ROOT   REQUIRED COMPONENTS Geom] 
+                 [DD4hep REQUIRED COMPONENTS DDCore]
+  OPTIONAL       XERCESC
+  INCLUDE_DIRS   include
   )
-install(DIRECTORY compact
-  DESTINATION examples/${PackageName}
-  PATTERN ".svn" EXCLUDE )
-
-#install(DIRECTORY scripts
-#  DESTINATION examples/${PackageName}
-#  PATTERN ".svn" EXCLUDE )
 
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
-
-####################################
+dd4hep_add_plugin( AlignDet SOURCES src/*.cpp  )
+dd4hep_configure_scripts( AlignDet DEFAULT_SETUP )
+dd4hep_install_dir( compact DESTINATION examples/AlignDet )
 #
-#  Add Tests foir AlignDet here
-# 
-####################################
-
-##SET( test_name "test_converter_clic_lcdd" )
-##ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" 
-##  geoConverter -compact2lcdd -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.lcdd )
-###----- here we simply require that at least 100 volumes have been converted
-##SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  " Handled [1-9][0-9][0-9]+ volumes" )
-##
-##SET( test_name "test_converter_clic_gdml" )
-##ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" 
-##  geoConverter -compact2gdml -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.gdml )
-###----- here we simply require that at least 100 volumes have been converted
-##SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  " Handled [1-9][0-9][0-9]+ volumes" )
-##
-##SET( test_name "test_converter_clic_vis" )
-##ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" 
-##  geoConverter -compact2vis -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.vis )
-###----- here we simply require that at least 100 volumes have been converted
-##SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  " Handled [1-9][0-9][0-9]+ volumes" )
-
-
-
-# no explicit failed condition
-#SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" )
+#---Testing-------------------------------------------------------------------------
+dd4hep_enable_tests()
diff --git a/examples/CLICSiD/CMakeLists.txt b/examples/CLICSiD/CMakeLists.txt
index ec1eb2eee..450770f22 100644
--- a/examples/CLICSiD/CMakeLists.txt
+++ b/examples/CLICSiD/CMakeLists.txt
@@ -1,103 +1,31 @@
+# $Id: $
+#==========================================================================
+#  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.
+#
+#==========================================================================
 cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR)
-
-#---------------------------
-set( PackageName CLICSiD )
-#---------------------------
-
-project(${PackageName})
-
-# project version
-SET( ${PackageName}_VERSION_MAJOR 0 )
-SET( ${PackageName}_VERSION_MINOR 0 )
-SET( ${PackageName}_VERSION_PATCH 1 )
-
-SET( ${PackageName}_VERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" )
-SET( ${PackageName}_SOVERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" )
-
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${CMAKE_SOURCE_DIR}/cmake ) 
-set(LIBRARY_OUTPUT_PATH    ${PROJECT_BINARY_DIR}/lib)
-set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
-
-#------------- set the default installation directory to be the source directory
-
-IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-  SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH  
-    "install prefix path  - overwrite with -D CMAKE_INSTALL_PREFIX = ..." 
-    FORCE )
-  MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" )
-ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-
-#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-find_package( DD4hep )
-
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${DD4hep_ROOT}/cmake ) 
-include( DD4hep )
-
-#find_package( ROOT REQUIRED )
-find_package( ROOT REQUIRED COMPONENTS Geom)
-set( ROOT_COMPONENT_LIBRARIES Geom)
-
-#-------------------------------------------------------------
-# add additional packages here
-#-------------------------------------------------------------
-
-include(DD4hep_XML_setup)
-
+include ( ${DD4hep_DIR}/cmake/DD4hep.cmake )
+
+#-----------------------------------------------------------------------------------
+dd4hep_configure_output ()
+dd4hep_package ( CLICSiD MAJOR 0 MINOR 0 PATCH 1
+  USES  [ROOT   REQUIRED COMPONENTS Geom] 
+        [DD4hep REQUIRED COMPONENTS DDCore]
+)
+dd4hep_configure_scripts ( CLICSiD DEFAULT_SETUP )
+dd4hep_install_dir( compact DESTINATION examples/CLICSiD )
 #---Testing-------------------------------------------------------------------------
-if(BUILD_TESTING)
-  include(CTest)
-  enable_testing()
-endif(BUILD_TESTING)
-
-configure_file( ${DD4hep_ROOT}/cmake/run_test_package.sh run_test_${PackageName}.sh @ONLY)
-INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/run_test_${PackageName}.sh
-  DESTINATION bin )
-
-#---- configure run environment ---------------
-configure_file( ${DD4hep_ROOT}/cmake/thisdd4hep_package.sh.in  this${PackageName}.sh @ONLY)
-
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/this${PackageName}.sh
-  DESTINATION bin
-  )
-
-
-#--- install target-------------------------------------
-install(DIRECTORY compact
-  DESTINATION examples/${PackageName}
-  PATTERN ".svn" EXCLUDE )
-install(DIRECTORY eve
-  DESTINATION examples/${PackageName}
-  PATTERN ".svn" EXCLUDE )
-
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
-
-####################################
-#
-#  Add Tests foir CLICSid here
-# 
-####################################
-
-SET( test_name "test_converter_clic_lcdd" )
-ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" 
-  geoConverter -compact2lcdd -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.lcdd )
-#----- here we simply require that at least 100 volumes have been converted
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  " Handled [1-9][0-9][0-9]+ volumes" )
-
-SET( test_name "test_converter_clic_gdml" )
-ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" 
-  geoConverter -compact2gdml -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.gdml )
-#----- here we simply require that at least 100 volumes have been converted
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  " Handled [1-9][0-9][0-9]+ volumes" )
-
-SET( test_name "test_converter_clic_vis" )
-ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" 
-  geoConverter -compact2vis -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output ILDExDet.vis )
-#----- here we simply require that at least 100 volumes have been converted
-SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  " Handled [1-9][0-9][0-9]+ volumes" )
-
-
-
-# no explicit failed condition
-#SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION "TEST_FAILED" )
+dd4hep_enable_tests()
+#----- Tests for CLICSid: here we simply require that at least 100 volumes have been converted
+foreach ( typ lcdd gdml vis )
+  dd4hep_add_test_reg ( "test_converter_CLICSiD_${typ}" 
+    COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_CLICSiD.sh"
+    EXEC_ARGS  geoConverter -compact2${typ} -input file:${CMAKE_CURRENT_SOURCE_DIR}/compact/compact.xml -output file:CLICSiD.${typ}
+    REGEX_PASS " Handled [1-9][0-9][0-9]+ volumes" )
+endforeach()
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 6f13bab24..31e3bd371 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -1,4 +1,14 @@
-###################################################
+# $Id: $
+#==========================================================================
+#  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.
+#
+#==========================================================================
 #
 # Simple CMakeList.txt file that allows to
 # build all DD4hep examples in one go, e.g.
@@ -10,33 +20,14 @@
 #
 # F.Gaede, DESY, 2013
 #
-##################################################
+#==========================================================================
 cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR)
- 	
-project(DD4hepExample)
- 	
 option(BUILD_TESTING "Enable and build tests" ON)
-
-#---Testing-------------------------------------------------------------------------
-if(BUILD_TESTING)
-include(CTest)
-enable_testing()
-
-set(BUILDNAME "${CMAKE_SYSTEM}-${CMAKE_CXX_COMPILER}-${CMAKE_BUILD_TYPE}" CACHE STRING "set build string for cdash")
-
-endif(BUILD_TESTING)
-
-#----------------------------------------------------------------------------------
-#
-# (un)comment as needed
-#
- 	
-add_subdirectory(AlignDet)
-
-add_subdirectory(CLICSiD)
- 	
-add_subdirectory(ClientTests)
-
-add_subdirectory(SimpleDetector)
-
-
+#
+include ( ${DD4hep_DIR}/cmake/DD4hep.cmake )
+#
+dd4hep_package ( DD4hepExample MAJOR 0 MINOR 0 PATCH 1 )
+#
+dd4hep_enable_tests (
+  AlignDet  CLICSiD  ClientTests SimpleDetector
+)
diff --git a/examples/ClientTests/CMakeLists.txt b/examples/ClientTests/CMakeLists.txt
index 737c000b3..5676a6918 100644
--- a/examples/ClientTests/CMakeLists.txt
+++ b/examples/ClientTests/CMakeLists.txt
@@ -1,114 +1,46 @@
+# $Id: $
+#==========================================================================
+#  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.
+#
+#==========================================================================
 cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR)
-#---------------------------
-set( PackageName ClientTests )
-#---------------------------
-project(${PackageName})
-
-# project version
-SET( ${PackageName}_VERSION_MAJOR 0 )
-SET( ${PackageName}_VERSION_MINOR 0 )
-SET( ${PackageName}_VERSION_PATCH 1 )
-
-SET( ${PackageName}_VERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" )
-SET( ${PackageName}_SOVERSION "${${PackageName}_VERSION_MAJOR}.${${PackageName}_VERSION_MINOR}" )
-
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${CMAKE_SOURCE_DIR}/cmake ) 
-set(LIBRARY_OUTPUT_PATH    ${PROJECT_BINARY_DIR}/lib)
-set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
-
-#------------- set the default installation directory to be the source directory
-IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-  SET( CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR} CACHE PATH  
-    "install prefix path  - overwrite with -D CMAKE_INSTALL_PREFIX = ..." 
-    FORCE )
-  MESSAGE(STATUS "CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX} - overwrite with -D CMAKE_INSTALL_PREFIX" )
-ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-find_package( DD4hep REQUIRED)
-
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${DD4hep_ROOT}/cmake ) 
-include( DD4hep )
-
-find_package( ROOT REQUIRED )
-set( ROOT_COMPONENT_LIBRARIES Geom)
-#-------------------------------------------------------------
-# add additional packages here
-#-------------------------------------------------------------
-
-#---Testing-------------------------------------------------------------------------
-if(BUILD_TESTING)
-  include(CTest)
-  enable_testing()
-endif(BUILD_TESTING)
-
-configure_file( ${DD4hep_ROOT}/cmake/run_test_package.sh run_test_${PackageName}.sh @ONLY)
-INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/run_test_${PackageName}.sh
-  DESTINATION bin )
-
-#-------------------------------------------------------------
-include_directories( ${CMAKE_SOURCE_DIR}/include
-  include
-  ${DD4hep_INCLUDE_DIRS}
-  ${ROOT_INCLUDE_DIR}
- )
-
-file(GLOB sources src/*.cpp )
-include(DD4hep_XML_setup)
-
-add_library(${PackageName} SHARED ${sources})
-
-target_link_libraries(${PackageName} ${DD4hep_LIBRARIES} ${ROOT_LIBRARIES} ${ROOT_COMPONENT_LIBRARIES} )
-
-#---Rootmap generation--------------------------------------------------------------
-if(APPLE)
-  dd4hep_generate_rootmap_apple(${PackageName} )
-else()
-  dd4hep_generate_rootmap(${PackageName} )
-endif()
-
-#---- configure run environment ---------------
-configure_file( ${DD4hep_ROOT}/cmake/thisdd4hep_package.sh.in  this${PackageName}.sh @ONLY)
-
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/this${PackageName}.sh
-  DESTINATION bin
-  )
-#--- install target-------------------------------------
-install(TARGETS ${PackageName}
-  RUNTIME DESTINATION bin
-  LIBRARY DESTINATION lib
-  )
-install(DIRECTORY compact
-  DESTINATION examples/${PackageName}
-  PATTERN ".svn" EXCLUDE )
-
-install(DIRECTORY scripts
-  DESTINATION examples/${PackageName}
-  PATTERN ".svn" EXCLUDE )
-
-# to do: add corresponding uninstall...
-#-------------------------------------------------------
-
-
-foreach (file Assemblies BoxTrafos FCC_HcalBarrel IronCylinder LheD_tracker MagnetFields MaterialTester MiniTel SectorBarrelCalorimeter SiliconBlock NestedDetectors )
-
+include ( ${DD4hep_DIR}/cmake/DD4hep.cmake )
+
+#-----------------------------------------------------------------------------------
+dd4hep_configure_output()
+dd4hep_package (ClientTests MAJOR 0 MINOR 0 PATCH 1
+  USES         [ROOT   REQUIRED COMPONENTS Geom] 
+               [DD4hep REQUIRED COMPONENTS DDCore]
+  OPTIONAL     XERCESC
+  INCLUDE_DIRS include )
+#-----------------------------------------------------------------------------------
+dd4hep_add_plugin( ClientTests SOURCES src/*.cpp  )
+dd4hep_install_dir( compact scripts DESTINATION ${DD4hep_DIR}/examples/ClientTests )
+#-----------------------------------------------------------------------------------
+dd4hep_configure_scripts( ClientTests DEFAULT_SETUP )
+
+#***  Testing  *********************************************************************
+dd4hep_enable_tests()
+#-----------------------------------------------------------------------------------
+foreach (test Assemblies BoxTrafos IronCylinder LheD_tracker MagnetFields MaterialTester MiniTel SectorBarrelCalorimeter SiliconBlock NestedDetectors )
   foreach( type lcdd gdml vis )
-
-    SET( test_name "${PackageName}_converter_simple_${type}_${file}" )
-    ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh"
-      geoConverter -compact2${type} -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/${file}.xml -output ${file}_out.${type} )
-    #----- here we simply require that at least 1 volume have been converted
-    SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  " Handled [1-9][0-9]* volumes" )
-
+    dd4hep_add_test_reg( ClientTests_converter_simple_${type}_${test}
+      COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_ClientTests.sh"
+      EXEC_ARGS  geoConverter -compact2${type} -input file:${CMAKE_CURRENT_SOURCE_DIR}/compact/${test}.xml -output file:${test}.${type}
+      REGEX_PASS " Handled [1-9][0-9]* volumes" )
   endforeach(type)
-
 endforeach()
-
-
+#
 foreach(script MiniTel LheD_tracker )
-  SET( test_name "${PackageName}_sim_${script}" )
-  ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh"
-    python ${CMAKE_CURRENT_SOURCE_DIR}/scripts/${script}.py batch)
-  #----- here we simply require that at least 1 volume have been converted
-  SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES FAIL_REGULAR_EXPRESSION  "Exception;EXCEPTION;ERROR;Error" )
+  dd4hep_add_test_reg( ClientTests_sim_${script}
+      COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_ClientTests.sh"
+      EXEC_ARGS  python ${CMAKE_CURRENT_SOURCE_DIR}/scripts/${script}.py batch
+      REGEX_PASS NONE
+      REGEX_FAIL "Exception;EXCEPTION;ERROR;Error" )
 endforeach(script)
diff --git a/examples/SimpleDetector/CMakeLists.txt b/examples/SimpleDetector/CMakeLists.txt
index c6d64197e..e255d8e80 100644
--- a/examples/SimpleDetector/CMakeLists.txt
+++ b/examples/SimpleDetector/CMakeLists.txt
@@ -1,3 +1,14 @@
+# $Id: $
+#==========================================================================
+#  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.
+#
+#==========================================================================
 cmake_minimum_required(VERSION 2.8.3 FATAL_ERROR)
 #---------------------------
 set( PackageName SimpleDetector )
@@ -27,14 +38,13 @@ ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
 
 find_package( DD4hep REQUIRED COMPONENTS DDRec )
 
-set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${DD4hep_ROOT}/cmake ) 
+set(CMAKE_MODULE_PATH  ${CMAKE_MODULE_PATH}  ${DD4hep_DIR}/cmake ) 
 include( DD4hep )
 
 find_package( ROOT REQUIRED )
 set( ROOT_COMPONENT_LIBRARIES Geom Reflex)
 #-------------------------------------------------------------
 # add additional packages here
-#-------------------------------------------------------------
 
 #---Testing-------------------------------------------------------------------------
 if(BUILD_TESTING)
@@ -42,7 +52,7 @@ if(BUILD_TESTING)
   enable_testing()
 endif(BUILD_TESTING)
 
-configure_file( ${DD4hep_ROOT}/cmake/run_test_package.sh run_test_${PackageName}.sh @ONLY)
+configure_file( ${DD4hep_DIR}/cmake/run_test_package.sh run_test_${PackageName}.sh @ONLY)
 INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/run_test_${PackageName}.sh
   DESTINATION bin )
 
@@ -68,7 +78,7 @@ else()
 endif()
 
 #---- configure run environment ---------------
-configure_file( ${DD4hep_ROOT}/cmake/thisdd4hep_package.sh.in  this${PackageName}.sh @ONLY)
+configure_file( ${DD4hep_DIR}/cmake/thisdd4hep_package.sh.in  this${PackageName}.sh @ONLY)
 
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/this${PackageName}.sh
   DESTINATION bin
@@ -98,26 +108,26 @@ install(DIRECTORY compact
 
 SET( test_name "test_converter_simple_lcdd" )
 ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" 
-  geoConverter -compact2lcdd -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output Simple_ILD.lcdd )
+  geoConverter -compact2lcdd -input file:${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output file:Simple_ILD.lcdd )
 #----- here we simply require that at least 100 volumes have been converted
 SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  " Handled [0-9]?[0-9][0-9]+ volumes" )
 
 SET( test_name "test_converter_simple_gdml" )
 ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" 
-  geoConverter -compact2gdml -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output Simple_ILD.gdml )
+  geoConverter -compact2gdml -input file:${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output file:Simple_ILD.gdml )
 #----- here we simply require that at least 100 volumes have been converted
 SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  " Handled [0-9]?[0-9][0-9]+ volumes" )
 
 SET( test_name "test_converter_simple_vis" )
 ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" 
-  geoConverter -compact2vis -input ${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output Simple_ILD.vis )
+  geoConverter -compact2vis -input file:${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml -output file:Simple_ILD.vis )
 #----- here we simply require that at least 100 volumes have been converted
 SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  " Handled [0-9]?[0-9][0-9]+ volumes" )
 
 
 SET( test_name "test_simulation_simple" )
 ADD_TEST( t_${test_name} "${CMAKE_INSTALL_PREFIX}/bin/run_test_${PackageName}.sh" 
-  dd_sim ${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml  ${CMAKE_CURRENT_SOURCE_DIR}/examples/sequences.xml )
+  dd_sim file:${CMAKE_CURRENT_SOURCE_DIR}/compact/Simple_ILD.xml  file:${CMAKE_CURRENT_SOURCE_DIR}/examples/sequences.xml )
 #----- here we simply require that at least 100 volumes have been converted
 SET_TESTS_PROPERTIES( t_${test_name} PROPERTIES PASS_REGULAR_EXPRESSION  "Event 9 Begin event action")
 
-- 
GitLab