diff --git a/DDCore/include/DD4hep/OpaqueData.h b/DDCore/include/DD4hep/OpaqueData.h
index 2ea2eb462022e5b692748e6b4dd7b2ec75e8c4a3..ed538b79b0a7b1a504b8b6426e9d9b971c0e39dc 100644
--- a/DDCore/include/DD4hep/OpaqueData.h
+++ b/DDCore/include/DD4hep/OpaqueData.h
@@ -13,10 +13,7 @@
 #ifndef DD4HEP_OPAQUEDATA_H
 #define DD4HEP_OPAQUEDATA_H
 
-#include "DD4hep/detail/Grammar.h"
-
 // C/C++ include files
-#include <ostream>
 #include <typeinfo>
 #include <vector>
 #include <string>
@@ -107,6 +104,7 @@ namespace dd4hep {
     /// Data buffer type: Must be a bitmap of enum _DataTypes!
     unsigned int type;
 
+  public:
     /// Standard initializing constructor
     OpaqueDataBlock();
     /// Copy constructor
@@ -142,50 +140,6 @@ namespace dd4hep {
   std::ostream& operator<< (std::ostream& s, const OpaqueDataBlock& data);
 }      /* End namespace dd4hep */
 
-/// Generic getter. Specify the exact type, not a polymorph type
-template <typename T> T& dd4hep::OpaqueData::get() {
-  if (!grammar || !grammar->equals(typeid(T))) { throw std::bad_cast(); }
-  return *(T*)pointer;
-}
-
-/// Generic getter (const version). Specify the exact type, not a polymorph type
-template <typename T> const T& dd4hep::OpaqueData::get() const {
-  if (!grammar || !grammar->equals(typeid(T))) { throw std::bad_cast(); }
-  return *(T*)pointer;
-}
-
-/// Bind data value
-template <typename T> T& dd4hep::OpaqueDataBlock::bind()  {
-  this->bind(&BasicGrammar::instance<T>());
-  return *(new(this->pointer) T());
-}
-
-/// Bind data value
-template <typename T> T& dd4hep::OpaqueDataBlock::bind(void* ptr, size_t len)  {
-  this->bind(ptr,len,&BasicGrammar::instance<T>());
-  return *(new(this->pointer) T());
-}
-
-/// Bind grammar and assign value
-template <typename T> T& dd4hep::OpaqueDataBlock::bind(const std::string& value)   {
-  T& ret = this->bind<T>();
-  if ( !value.empty() && !this->fromString(value) )  {
-    throw std::runtime_error("OpaqueDataBlock::set> Failed to bind type "+
-                             typeName(typeid(T))+" to condition data block.");
-  }
-  return ret;
-}
-
-/// Bind grammar and assign value
-template <typename T> T& dd4hep::OpaqueDataBlock::bind(void* ptr, size_t len, const std::string& value)   {
-  T& ret = this->bind<T>(ptr, len);
-  if ( !value.empty() && !this->fromString(value) )  {
-    throw std::runtime_error("OpaqueDataBlock::set> Failed to bind type "+
-                             typeName(typeid(T))+" to condition data block.");
-  }
-  return ret;
-}
-
 #include "DD4hep/BasicGrammar.h"
 
 /// Namespace for the AIDA detector description toolkit
diff --git a/DDCore/include/DD4hep/detail/ConditionsInterna.h b/DDCore/include/DD4hep/detail/ConditionsInterna.h
index fe948b6a507965abf001ff5f800ccff724a678de..c5764e2cbcc2dc43a9c89b54b3ffb663b910f014 100644
--- a/DDCore/include/DD4hep/detail/ConditionsInterna.h
+++ b/DDCore/include/DD4hep/detail/ConditionsInterna.h
@@ -26,6 +26,7 @@
 #include "DD4hep/Conditions.h"
 #include "DD4hep/BasicGrammar.h"
 #include "DD4hep/NamedObject.h"
+#include "DD4hep/detail/OpaqueData_inl.h"
 
 // C/C++ include files
 #include <map>
@@ -139,4 +140,53 @@ namespace dd4hep {
 
 } /* End namespace dd4hep                   */
 
+#define DD4HEP_DEFINE_CONDITIONS_TYPE(x)                      \
+  DD4HEP_DEFINE_OPAQUEDATA_TYPE(x)                            \
+  namespace dd4hep {                                          \
+      template x& Condition::bind<x>(const std::string& val); \
+      template x& Condition::bind<x>();                       \
+      template x& Condition::get<x>();                        \
+      template const x& Condition::get<x>() const;            \
+  }
+
+#define DD4HEP_DEFINE_CONDITIONS_TYPE_DUMMY(x)                          \
+  namespace dd4hep{namespace Parsers{int parse(x&, const std::string&){return 1;}}} \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(x)
+
+#define DD4HEP_DEFINE_EXTERNAL_CONDITIONS_TYPE(x)                 \
+  namespace dd4hep {                                              \
+    template <> x& Condition::bind<x>(const std::string& val);    \
+      template <> x& Condition::bind<x>();                        \
+      template <> x& Condition::get<x>();                         \
+      template <> const x& Condition::get<x>() const;             \
+    }
+
+#if defined(DD4HEP_HAVE_ALL_PARSERS)
+#define DD4HEP_DEFINE_CONDITIONS_CONT(x)                                \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(x)                                      \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(std::vector<x>)                         \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(std::list<x>)                           \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(std::set<x>)                            \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(std::deque<x>)                          \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(dd4hep::detail::Primitive<x>::int_map_t) \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(dd4hep::detail::Primitive<x>::ulong_map_t) \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(dd4hep::detail::Primitive<x>::string_map_t)
+
+#define DD4HEP_DEFINE_CONDITIONS_U_CONT(x)      \
+  DD4HEP_DEFINE_CONDITIONS_CONT(x)              \
+  DD4HEP_DEFINE_CONDITIONS_CONT(unsigned x)
+
+#else
+
+#define DD4HEP_DEFINE_CONDITIONS_CONT(x)                                \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(x)                                      \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(std::vector<x>)                         \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(std::list<x>)                           \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(std::set<x>)                            \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(dd4hep::detail::Primitive<x>::int_map_t) \
+  DD4HEP_DEFINE_CONDITIONS_TYPE(dd4hep::detail::Primitive<x>::string_map_t)
+
+#define DD4HEP_DEFINE_CONDITIONS_U_CONT(x)   DD4HEP_DEFINE_CONDITIONS_CONT(x)
+
+#endif    //  DD4HEP_HAVE_ALL_PARSERS
 #endif    /* DD4HEP_DDCORE_CONDITIONINTERNA_H    */
diff --git a/DDCore/include/DD4hep/detail/OpaqueData_inl.h b/DDCore/include/DD4hep/detail/OpaqueData_inl.h
new file mode 100644
index 0000000000000000000000000000000000000000..21397a6f627b5fc5514c612d7d09daa9acdb2d16
--- /dev/null
+++ b/DDCore/include/DD4hep/detail/OpaqueData_inl.h
@@ -0,0 +1,84 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
+// All rights reserved.
+//
+// For the licensing terms see $DD4hepINSTALL/LICENSE.
+// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
+//
+// Author     : M.Frank
+//
+//==========================================================================
+//
+// NOTE:
+//
+// This is an internal include file. It should only be included to 
+// instantiate code. Otherwise the OpaqueData include file should be
+// sufficient for all practical purposes.
+//
+//==========================================================================
+#ifndef DD4HEP_OPAQUEDATA_INL_H
+#define DD4HEP_OPAQUEDATA_INL_H
+
+// Framework include files
+#include "DD4hep/Primitives.h"
+#include "DD4hep/OpaqueData.h"
+#include "DD4hep/BasicGrammar.h"
+
+/// Namespace for the AIDA detector description toolkit
+namespace dd4hep {
+
+  /// Generic getter. Specify the exact type, not a polymorph type
+  template <typename T> T& OpaqueData::get() {
+    if (!grammar || !grammar->equals(typeid(T))) { throw std::bad_cast(); }
+    return *(T*)pointer;
+  }
+
+  /// Generic getter (const version). Specify the exact type, not a polymorph type
+  template <typename T> const T& OpaqueData::get() const {
+    if (!grammar || !grammar->equals(typeid(T))) { throw std::bad_cast(); }
+    return *(T*)pointer;
+  }
+
+  /// Bind data value
+  template <typename T> T& OpaqueDataBlock::bind()  {
+    this->bind(&BasicGrammar::instance<T>());
+    return *(new(this->pointer) T());
+  }
+
+  /// Bind data value
+  template <typename T> T& OpaqueDataBlock::bind(void* ptr, size_t len)  {
+    this->bind(ptr,len,&BasicGrammar::instance<T>());
+    return *(new(this->pointer) T());
+  }
+
+  /// Bind grammar and assign value
+  template <typename T> T& OpaqueDataBlock::bind(const std::string& value)   {
+    T& ret = this->bind<T>();
+    if ( !value.empty() && !this->fromString(value) )  {
+      throw std::runtime_error("OpaqueDataBlock::set> Failed to bind type "+
+                               typeName(typeid(T))+" to condition data block.");
+    }
+    return ret;
+  }
+
+  /// Bind grammar and assign value
+  template <typename T> T& OpaqueDataBlock::bind(void* ptr, size_t len, const std::string& value)   {
+    T& ret = this->bind<T>(ptr, len);
+    if ( !value.empty() && !this->fromString(value) )  {
+      throw std::runtime_error("OpaqueDataBlock::set> Failed to bind type "+
+                               typeName(typeid(T))+" to condition data block.");
+    }
+    return ret;
+  }
+
+} /* End namespace dd4hep               */
+
+#define DD4HEP_DEFINE_OPAQUEDATA_TYPE(x)                               \
+  namespace dd4hep {                                                   \
+    template x& OpaqueDataBlock::bind<x>();                            \
+    template x& OpaqueDataBlock::bind<x>(const std::string& val);      \
+  }
+
+#endif    /* DD4HEP_OPAQUEDATA_INL_H    */
diff --git a/DDCore/src/AlignmentData.cpp b/DDCore/src/AlignmentData.cpp
index f1162a52354022ffb2773944de2de697cce691f5..57fa9b16565a29815c3c22dc5a10de9145c70184 100644
--- a/DDCore/src/AlignmentData.cpp
+++ b/DDCore/src/AlignmentData.cpp
@@ -246,3 +246,7 @@ DD4HEP_DEFINE_PARSER_GRAMMAR(Delta,eval_none<Delta>)
 DD4HEP_DEFINE_PARSER_GRAMMAR(DeltaMap,eval_none<DeltaMap>)
 DD4HEP_DEFINE_PARSER_GRAMMAR(AlignmentData,eval_none<AlignmentData>)
 
+DD4HEP_DEFINE_CONDITIONS_TYPE(Delta)
+DD4HEP_DEFINE_CONDITIONS_TYPE(DeltaMap)
+DD4HEP_DEFINE_CONDITIONS_TYPE(AlignmentData)
+
diff --git a/DDCore/src/AlignmentsCalculator.cpp b/DDCore/src/AlignmentsCalculator.cpp
index c6ac6762cefded47b6c20bc71eb1ec526fdcb64e..90f44e11b07a768aa5b9ec6c48f26a90e7e5ee6e 100644
--- a/DDCore/src/AlignmentsCalculator.cpp
+++ b/DDCore/src/AlignmentsCalculator.cpp
@@ -331,3 +331,4 @@ DD4HEP_DEFINE_PARSER_DUMMY(OrderedMap)
 #include "DD4hep/detail/BasicGrammar_inl.h"
 #include "DD4hep/detail/ConditionsInterna.h"
 DD4HEP_DEFINE_PARSER_GRAMMAR(OrderedMap,eval_none<OrderedMap>)
+DD4HEP_DEFINE_CONDITIONS_TYPE(OrderedMap)
diff --git a/DDCore/src/AlignmentsInterna.cpp b/DDCore/src/AlignmentsInterna.cpp
index fb1b917f8467dbd70ff4890c66ca43f6ad0fbf53..6f777e159054f10ad692d481798df0b82303359d 100644
--- a/DDCore/src/AlignmentsInterna.cpp
+++ b/DDCore/src/AlignmentsInterna.cpp
@@ -81,4 +81,5 @@ namespace dd4hep {
   }
 }
 DD4HEP_DEFINE_PARSER_GRAMMAR(AlignmentObject,eval_none<AlignmentObject>)
+DD4HEP_DEFINE_CONDITIONS_TYPE(AlignmentObject)
 
diff --git a/DDCore/src/ConditionsData.cpp b/DDCore/src/ConditionsData.cpp
index 6620ba83250bf25af8fe8cad0d77ed2ac3bef07c..507e90407618d503f6ee84ccf998c33d21c29563 100644
--- a/DDCore/src/ConditionsData.cpp
+++ b/DDCore/src/ConditionsData.cpp
@@ -82,3 +82,4 @@ DD4HEP_DEFINE_PARSER_DUMMY(AbstractMap)
 #include "DD4hep/detail/BasicGrammar_inl.h"
 #include "DD4hep/detail/ConditionsInterna.h"
 DD4HEP_DEFINE_PARSER_GRAMMAR(AbstractMap,eval_none<AbstractMap>)
+DD4HEP_DEFINE_CONDITIONS_TYPE(AbstractMap)
diff --git a/DDCore/src/ConditonsTypes.cpp b/DDCore/src/ConditonsTypes.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9187fe96ebc08e99ffbad690771782161036c6df
--- /dev/null
+++ b/DDCore/src/ConditonsTypes.cpp
@@ -0,0 +1,48 @@
+//==========================================================================
+//  AIDA Detector description implementation 
+//--------------------------------------------------------------------------
+// Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN)
+// All rights reserved.
+//
+// For the licensing terms see $DD4hepINSTALL/LICENSE.
+// For the list of contributors see $DD4hepINSTALL/doc/CREDITS.
+//
+// Author     : M.Frank
+//
+//==========================================================================
+
+// Framework include files
+#include "DD4hep/Primitives.h"
+#include "DD4hep/detail/ConditionsInterna.h"
+#include "DD4hep/detail/ComponentProperties_inl.h"
+
+#include "Math/Point3D.h"
+#include "Math/Vector3D.h"
+#include "Math/Vector4D.h"
+
+// C/C++ include files
+#include <string>
+#include <vector>
+#include <list>
+#include <set>
+#include <map>
+#include <deque>
+
+#if defined(DD4HEP_HAVE_ALL_PARSERS)
+DD4HEP_DEFINE_CONDITIONS_U_CONT(char)
+DD4HEP_DEFINE_CONDITIONS_U_CONT(short)
+DD4HEP_DEFINE_CONDITIONS_U_CONT(long long)
+#endif  // DD4HEP_HAVE_ALL_PARSERS
+
+DD4HEP_DEFINE_CONDITIONS_U_CONT(int)
+DD4HEP_DEFINE_CONDITIONS_U_CONT(long)
+
+DD4HEP_DEFINE_CONDITIONS_CONT(bool)
+DD4HEP_DEFINE_CONDITIONS_CONT(float)
+DD4HEP_DEFINE_CONDITIONS_CONT(double)
+DD4HEP_DEFINE_CONDITIONS_CONT(std::string)
+
+// ROOT::Math Object instances
+DD4HEP_DEFINE_CONDITIONS_CONT(ROOT::Math::XYZPoint)
+DD4HEP_DEFINE_CONDITIONS_CONT(ROOT::Math::XYZVector)
+DD4HEP_DEFINE_CONDITIONS_CONT(ROOT::Math::PxPyPzEVector)
diff --git a/DDCore/src/OpaqueData.cpp b/DDCore/src/OpaqueData.cpp
index fc70b7276d0610505546e2bd6d852e167fe90f24..97368d273fc4f3b0859c7a84549675ce6328c969 100644
--- a/DDCore/src/OpaqueData.cpp
+++ b/DDCore/src/OpaqueData.cpp
@@ -16,6 +16,7 @@
 #include "DD4hep/Primitives.h"
 #include "DD4hep/OpaqueData.h"
 #include "DD4hep/InstanceCount.h"
+#include "DD4hep/detail/OpaqueData_inl.h"
 
 // C/C++ header files
 #include <cstring>
@@ -206,4 +207,5 @@ DD4HEP_DEFINE_PARSER_DUMMY(OpaqueDataBlock)
 #include "DD4hep/detail/BasicGrammar_inl.h"
 #include "DD4hep/detail/ConditionsInterna.h"
 DD4HEP_DEFINE_PARSER_GRAMMAR(OpaqueDataBlock,eval_none<OpaqueDataBlock>)
+DD4HEP_DEFINE_CONDITIONS_TYPE(OpaqueDataBlock)
 
diff --git a/DDCore/src/OpaqueDataBinder.cpp b/DDCore/src/OpaqueDataBinder.cpp
index e509f146b6c4d5615a66ebe658a518929eea82ca..7d30173f5688f9740e4104b75cec9a74127eedb4 100644
--- a/DDCore/src/OpaqueDataBinder.cpp
+++ b/DDCore/src/OpaqueDataBinder.cpp
@@ -14,7 +14,7 @@
 // Framework include files
 #include "DD4hep/OpaqueDataBinder.h"
 #include "DD4hep/Conditions.h"
-#include "DD4hep/OpaqueData.h"
+#include "DD4hep/detail/OpaqueData_inl.h"
 #include "DD4hep/detail/ConditionsInterna.h"
 
 // C/C++ include files
diff --git a/DDCore/src/XML/XMLParsers.cpp b/DDCore/src/XML/XMLParsers.cpp
index 321c19e2945d03aa25275f23046f7eab10919f0e..f3228de0fdecc8a1f477deb4cf67464f05a46b57 100644
--- a/DDCore/src/XML/XMLParsers.cpp
+++ b/DDCore/src/XML/XMLParsers.cpp
@@ -16,7 +16,6 @@
 
 // Framework include files
 #include "DD4hep/Objects.h"
-#include "DD4hep/Conditions.h"
 #include "DD4hep/Printout.h"
 #include "DD4hep/OpaqueData.h"
 #include "DD4hep/OpaqueDataBinder.h"
diff --git a/examples/DDDB/src/Detector/DeHandles.cpp b/examples/DDDB/src/Detector/DeHandles.cpp
index ae8f7cf6d85e80b48941391510096fd7a10ec93b..a0d7dc3fa8c0f1a986ad771859a70e71baa18815 100644
--- a/examples/DDDB/src/Detector/DeHandles.cpp
+++ b/examples/DDDB/src/Detector/DeHandles.cpp
@@ -60,4 +60,10 @@ DD4HEP_DEFINE_PARSER_GRAMMAR(DeVPObject,eval_none<DeVPObject>)
 DD4HEP_DEFINE_PARSER_GRAMMAR(DeVPSensorObject,eval_none<DeVPSensorObject>)
 DD4HEP_DEFINE_PARSER_GRAMMAR(DeVPGenericObject,eval_none<DeVPGenericObject>)
 
+DD4HEP_DEFINE_CONDITIONS_TYPE(DeVPStaticObject)
+DD4HEP_DEFINE_CONDITIONS_TYPE(DeVPSensorStaticObject)
+DD4HEP_DEFINE_CONDITIONS_TYPE(DeVPGenericStaticObject)
+DD4HEP_DEFINE_CONDITIONS_TYPE(DeVPObject)
+DD4HEP_DEFINE_CONDITIONS_TYPE(DeVPSensorObject)
+DD4HEP_DEFINE_CONDITIONS_TYPE(DeVPGenericObject)
 #endif