diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7c24a9f08b60b0757b460f61dd27ba6562983204..f0380f0e57687e54c71fb8fd57c03eb6e0a903fc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -200,6 +200,14 @@ ELSE()
 
   include(DD4hep_XML_setup)
 
+  IF(DD4HEP_BUILD_DEBUG MATCHES "ON" OR (CMAKE_BUILD_TYPE MATCHES "DEBUG|Debug" AND NOT DD4HEP_BUILD_DEBUG MATCHES "OFF"))
+    message(STATUS "BUILD DD4HEP with debug extensions")
+    set(DD4HEP_BUILD_DEBUG ON)
+    add_compile_definitions(DD4HEP_DEBUG=1)
+  ELSE()
+    set(DD4HEP_BUILD_DEBUG OFF)
+  ENDIF()
+
   #These packages are mandatory
   SET(DD4HEP_SELECTED_PACKAGE DDCore)
   FOREACH(DDPackage GaudiPluginService DDParsers DDCore)
@@ -207,9 +215,10 @@ ELSE()
     add_subdirectory(${DDPackage})
   ENDFOREACH()
   IF(DD4HEP_BUILD_DEBUG MATCHES "ON" OR (CMAKE_BUILD_TYPE MATCHES "DEBUG|Debug" AND NOT DD4HEP_BUILD_DEBUG MATCHES "OFF"))
-    target_compile_definitions(DDCore PUBLIC DD4HEP_DEBUG)
+    target_compile_definitions(DDCore PUBLIC DD4HEP_DEBUG=1)
   ENDIF()
 
+
   message(STATUS "BUILD Packages: ${DD4HEP_BUILD_PACKAGES}")
   FOREACH(DDPackage IN LISTS DD4HEP_BUILD_PACKAGES)
     dd4hep_print("|> Building ${DDPackage}")
diff --git a/DDCore/src/DetectorData.cpp b/DDCore/src/DetectorData.cpp
index 3c8e143ecad2a55207ae5748b2ab45fed347c141..87e8e344c61064425dcb293dcb799e165c439898 100644
--- a/DDCore/src/DetectorData.cpp
+++ b/DDCore/src/DetectorData.cpp
@@ -106,6 +106,7 @@ namespace {
     TClass* cl = BasicGrammar::instance<OpaqueDataBlock>().clazz();//gROOT->GetClass("dd4hep::OpaqueDataBlock");
    
     OpaqueDataBlock* block = (OpaqueDataBlock*)obj;
+    
     if ( b.IsReading() )  {
       b.ReadVersion(&R__s, &R__c, cl);
       BasicGrammar::key_type key = 0;
@@ -134,11 +135,14 @@ namespace {
       printout(ERROR,"OpaqueData","+++ ERROR +++ Opaque data block has no grammar attached. Cannot be saved!");
     }
     else  {
+      const std::type_info& typ_info = typeid(*block);
       const BasicGrammar& gr = *block->grammar;
       std::string typ = gr.type_name();
+
+      printout(DEBUG,"OpaqueData","Saving object %p type: %s [%s] [%s]",
+	       obj, typ_info.name(), typ.c_str(), block->grammar->name.c_str());
       R__c = b.WriteVersion(cl,kTRUE);
       b << gr.hash();
-      //printout(INFO,"OpaqueData","   Data type:%s  Grammar:%s",typ.c_str(),block->grammar->name.c_str());
 
       /// Now perform the I/O action
       if ( gr.type() == typeid(std::string) )
diff --git a/DDCore/src/DetectorImp.cpp b/DDCore/src/DetectorImp.cpp
index 406b5bc8f82d1bcfa407e15e4e62b78e0e7a11d7..fd7442b197efc3b52ee5e1668bf37c984aeca17a 100644
--- a/DDCore/src/DetectorImp.cpp
+++ b/DDCore/src/DetectorImp.cpp
@@ -164,10 +164,14 @@ DetectorImp::DetectorImp()
 DetectorImp::DetectorImp(const string& name)
   : TNamed(), DetectorData(), DetectorLoad(this), m_buildType(BUILD_NONE)
 {
+  static bool first = true;
+  if ( first )    {
+    first = false;
 #if defined(DD4HEP_USE_GEANT4_UNITS) && ROOT_VERSION_CODE >= ROOT_VERSION(6,20,0)
-  printout(WARNING,"DD4hep","++ Using globally Geant4 unit system (mm,ns,MeV)");
-  TGeoUnit::setUnitType(TGeoUnit::kTGeant4Units);
+    printout(WARNING,"DD4hep","++ Using globally Geant4 unit system (mm,ns,MeV)");
+    TGeoUnit::setUnitType(TGeoUnit::kTGeant4Units);
 #endif
+  }
   SetName(name.c_str());
   SetTitle("DD4hep detector description object");
   set_terminate( description_unexpected );
diff --git a/cmake/DD4hepBuild.cmake b/cmake/DD4hepBuild.cmake
index 8e2ef8e2daecd11b38a7251f77a38a843f3d9154..17d96a51cdb5343c72261f8688b266e49c52ad02 100644
--- a/cmake/DD4hepBuild.cmake
+++ b/cmake/DD4hepBuild.cmake
@@ -570,6 +570,10 @@ function(dd4hep_add_dictionary dictionary )
     LIST(APPEND comp_defs ${def})
   endforeach()
 
+if(DD4HEP_BUILD_DEBUG)
+    LIST(APPEND comp_defs DD4HEP_DEBUG=1)
+  endif()
+
   foreach(DEP ${ARG_USES})
     # Get INCLUDE DIRECTORIES from Dependencies
     LIST(APPEND inc_dirs $<TARGET_PROPERTY:${DEP},INTERFACE_INCLUDE_DIRECTORIES>)
diff --git a/cmake/DD4hepConfig.cmake.in b/cmake/DD4hepConfig.cmake.in
index d678e25846f4892882b8bd31b262953008e58a3c..39bb0468d095dee083e43813f2575e2c5a92f21a 100644
--- a/cmake/DD4hepConfig.cmake.in
+++ b/cmake/DD4hepConfig.cmake.in
@@ -25,6 +25,7 @@ set ( @CMAKE_PROJECT_NAME@_DIR                "${_thisdir}" )
 set ( @CMAKE_PROJECT_NAME@_ROOT               "${_thisdir}" )
 set ( @CMAKE_PROJECT_NAME@_VERSION            "@DD4hep_VERSION@" )
 set ( @CMAKE_PROJECT_NAME@_SOVERSION          "@DD4hep_SOVERSION@" )
+set ( DD4HEP_BUILD_DEBUG                       @DD4HEP_BUILD_DEBUG@ )
 set ( DD4HEP_USE_GEANT4                        @DD4HEP_USE_GEANT4@ )
 set ( DD4HEP_USE_CLHEP                         @DD4HEP_USE_CLHEP@ )
 set ( DD4HEP_USE_LCIO                          @DD4HEP_USE_LCIO@ )
@@ -51,6 +52,10 @@ endif()
 FIND_DEPENDENCY(Boost REQUIRED)
 DD4HEP_SETUP_BOOST_TARGETS()
 
+if(DD4HEP_BUILD_DEBUG)
+  add_compile_definitions(DD4HEP_DEBUG=1)
+endif()
+
 if(DD4HEP_USE_GEANT4)
   MESSAGE(STATUS "@CMAKE_PROJECT_NAME@ uses Geant4")
   IF(DD4HEP_USE_CLHEP)