diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1a79c4a79956659f8a4b1762d6346a7ee96aeb69..fd800f939887c7fd5c84c6dc76db2218a5307f74 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -112,6 +112,7 @@ add_subdirectory(DDG4)
 add_subdirectory(DDCond)
 add_subdirectory(DDAlign)
 add_subdirectory(DDEve)
+add_subdirectory(DDDB)
 
 dd4hep_enable_tests( DDTest )
 add_subdirectory(UtilityApps)
diff --git a/DDCore/include/DD4hep/AlignmentData.h b/DDCore/include/DD4hep/AlignmentData.h
index 655ce30356e19f44d86ab9c9f2bb2b6165a2ac81..14b04f30e5ed03bddf869b9d465d1d72d8a5c5e3 100644
--- a/DDCore/include/DD4hep/AlignmentData.h
+++ b/DDCore/include/DD4hep/AlignmentData.h
@@ -115,8 +115,12 @@ namespace DD4hep {
     public:
       /// Standard constructor
       AlignmentData();
+      /// Copy constructor
+      AlignmentData(const AlignmentData& copy);
       /// Default destructor
       virtual ~AlignmentData();
+      /// Assignment operator necessary due to copy constructor
+      AlignmentData& operator=(const AlignmentData& copy);
       /// Data accessor for decorator
       inline AlignmentData& alignmentData()     { return *this; }
 
diff --git a/DDCore/include/DD4hep/Handle.h b/DDCore/include/DD4hep/Handle.h
index 7fa77805027a46a128b095acab8409b3b3202811..2c24816f2f02e997eac5bac5c0cef8451d1b175f 100644
--- a/DDCore/include/DD4hep/Handle.h
+++ b/DDCore/include/DD4hep/Handle.h
@@ -176,15 +176,15 @@ namespace DD4hep {
       return *(Q*) m_element;
     }
     /// Checked object access. Throws invalid handle runtime exception
-    T* access() const throw(std::exception);
+    T* access() const;
     /// Verify the object type after a (re-)assignment
-    void verifyObject() const throw(std::exception);
+    void verifyObject() const;
     /// Access the object name (or "" if not supported by the object)
     const char* name() const;
     /// Assign a new named object. Note: object references must be managed by the user
     void assign(Implementation* n, const std::string& nam, const std::string& title);
     /// Helper routine called when unrelated types are assigned.
-    static void bad_assignment(const std::type_info& from, const std::type_info& to) throw(std::exception);
+    static void bad_assignment(const std::type_info& from, const std::type_info& to);
   };
   /// Default Ref_t definition describing named objects  \ingroup DD4HEP_GEOMETRY
   typedef Handle<NamedObject> Ref_t;
diff --git a/DDCore/include/DD4hep/Handle.inl b/DDCore/include/DD4hep/Handle.inl
index de5189870c03b8d24dd1e267046ba08d99b7d050..023fcebd4e5b5a4b339ed4095c354c5dedf0e8f1 100644
--- a/DDCore/include/DD4hep/Handle.inl
+++ b/DDCore/include/DD4hep/Handle.inl
@@ -20,7 +20,6 @@ namespace DD4hep {
 
     /// Helper routine called when unrelated types are assigned.
     template <typename T> void Handle<T>::bad_assignment(const std::type_info& from, const std::type_info& to) 
-    throw(std::exception) 
     {  
       invalidHandleAssignmentError(from,to);
     }
@@ -40,7 +39,7 @@ namespace DD4hep {
     }
 
     /// Checked object access. Throws invalid handle runtime exception
-    template <typename T> T* Handle<T>::access() const   throw(std::exception)   {
+    template <typename T> T* Handle<T>::access() const   {
       if ( this->m_element ) return this->m_element;
       invalidHandleError(typeid(T));
       return 0; // We have thrown an exception before - does not harm!
@@ -50,9 +49,7 @@ namespace DD4hep {
 
 #define DD4HEP_INSTANTIATE_HANDLE(X)                                    \
   namespace DD4hep {                                                    \
-    template <> void Handle<X>::verifyObject() const                    \
-      throw(std::exception)                                             \
-      {	                                                      	        \
+    template <> void Handle<X>::verifyObject() const  {                 \
       increment_object_validations();					\
       if (m_element && dynamic_cast<X*>((TObject*)m_element) == 0) {	\
         bad_assignment(typeid(*m_element), typeid(X));		        \
@@ -70,9 +67,7 @@ namespace DD4hep {
       p->name = n;							\
       p->type = t;							\
     }									\
-    template <> void Handle<X>::verifyObject() const  		        \
-      throw(std::exception)                                             \
-      {	                                                      	        \
+    template <> void Handle<X>::verifyObject() const  	{               \
       increment_object_validations();                                   \
       if (m_element && dynamic_cast<X*>((NamedObject*)m_element) == 0) {\
         bad_assignment(typeid(*m_element), typeid(X));		        \
diff --git a/DDCore/include/DD4hep/Objects.h b/DDCore/include/DD4hep/Objects.h
index dacc3086c693360da7c2aca146b3f52244832b5c..a47463e1bc99b4ee298f9c9e02c0522e6a5721da 100644
--- a/DDCore/include/DD4hep/Objects.h
+++ b/DDCore/include/DD4hep/Objects.h
@@ -30,6 +30,10 @@ class TGeoTranslation;
 class TGeoPhysicalNode;
 class TGeoIdentity;
 
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated" // Code that causes warning goes here
+#endif
 // ROOT include files
 #include "TGeoPhysicalNode.h"
 #include "Math/Vector3D.h"
@@ -42,6 +46,9 @@ class TGeoIdentity;
 #include "Math/RotationZYX.h"
 #include "Math/EulerAngles.h"
 #include "Math/VectorUtil.h"
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
 
 // C/C++ include files
 #include <set>
@@ -488,6 +495,11 @@ namespace DD4hep {
       LimitSet(const Handle<Q>& e)
         : Handle<LimitSetObject>(e) {
       }
+      /// Assignment operator
+      LimitSet& operator=(const LimitSet& c)  {
+        m_element = c.m_element;
+        return *this;
+      }
       /// Constructor to be used when creating a new object
       LimitSet(const std::string& name);
       /// Add new limit. Returns true if the new limit was added, false if it already existed.
@@ -527,6 +539,11 @@ namespace DD4hep {
       }
       /// Constructor to be used when creating a new object
       Region(const std::string& name);
+      /// Assignment operator
+      Region& operator=(const Region& c)  {
+        m_element = c.m_element;
+        return *this;
+      }
 
       Region& setStoreSecondaries(bool value);
       Region& setThreshold(double value);
diff --git a/DDCore/include/DD4hep/Shapes.h b/DDCore/include/DD4hep/Shapes.h
index e5319f507e358fd3ba28bd1f98333031a81b34f0..4fb0af492f5f7628efb3898cb833f61eefe014a2 100644
--- a/DDCore/include/DD4hep/Shapes.h
+++ b/DDCore/include/DD4hep/Shapes.h
@@ -22,7 +22,12 @@
 // C/C++ include files
 #include <vector>
 
-// Forward declarations
+
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated" // Code that causes warning goes here
+#endif
+// ROOT include files
 #include "TGeoCone.h"
 #include "TGeoParaboloid.h"
 #include "TGeoPgon.h"
@@ -36,6 +41,9 @@
 #include "TGeoTorus.h"
 #include "TGeoHalfSpace.h"
 #include "TGeoCompositeShape.h"
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif
 
 /// Namespace for the AIDA detector description toolkit
 namespace DD4hep {
diff --git a/DDCore/src/AlignmentData.cpp b/DDCore/src/AlignmentData.cpp
index ec91e71b111d7cfca89cdf374c2e80d0056d3cb0..36ed3d958213e85e11b8fa5ce69a2091fb5ee790 100644
--- a/DDCore/src/AlignmentData.cpp
+++ b/DDCore/src/AlignmentData.cpp
@@ -74,11 +74,35 @@ AlignmentData::AlignmentData()
   InstanceCount::increment(this);
 }
 
+/// Copy constructor
+AlignmentData::AlignmentData(const AlignmentData& copy)
+  : delta(copy.delta), worldTrafo(copy.worldTrafo), detectorTrafo(copy.detectorTrafo),
+    nodes(copy.nodes), trToWorld(copy.trToWorld), detector(copy.detector),
+    placement(copy.placement), flag(copy.flag), magic(magic_word())
+{
+  InstanceCount::increment(this);
+}
+
 /// Default destructor
 AlignmentData::~AlignmentData()  {
   InstanceCount::decrement(this);
 }
 
+/// Assignment operator necessary due to copy constructor
+AlignmentData& AlignmentData::operator=(const AlignmentData& copy)  {
+  if ( this != &copy )  {
+    delta         = copy.delta;
+    worldTrafo    = copy.worldTrafo;
+    detectorTrafo = copy.detectorTrafo;
+    nodes         = copy.nodes;
+    trToWorld     = copy.trToWorld;
+    detector      = copy.detector;
+    placement     = copy.placement;
+    flag          = copy.flag;
+  }
+  return *this;
+}
+
 /// print Conditions object
 ostream& operator << (ostream& s, const AlignmentData& data)   {
   stringstream str;
diff --git a/DDDB/CMakeLists.txt b/DDDB/CMakeLists.txt
index ed115dfa0f68f03a42e691c4a9eb6dae070d42d7..f8412820734591a5b31b3493e1127fde42239559 100644
--- a/DDDB/CMakeLists.txt
+++ b/DDDB/CMakeLists.txt
@@ -17,5 +17,3 @@ dd4hep_package(    DDDB
 
 #---DDDB plugin library -------------------------------------------------------
 dd4hep_add_plugin ( DDDB SOURCES src/*.cpp )
-#---Package installation procedure(s) -----------------------------------------
-install ( PROGRAMS scripts/run_dddb.sh DESTINATION bin)
diff --git a/DDDB/scripts/run_dddb.sh b/DDDB/scripts/run_dddb.sh
deleted file mode 100755
index 03e1a5e729713a4bde04f07f43504e592942268e..0000000000000000000000000000000000000000
--- a/DDDB/scripts/run_dddb.sh
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-# $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 M.Frank
-#
-#==========================================================================
-echo "+ ------------------------------------------------------------------+";
-echo "|                                                                   |";
-echo "|   Starting DDDB plugin executor....                               |";
-echo "|                                                                   |";
-echo "+ ------------------------------------------------------------------+";
-#
-ARGS=`echo -plugin DDDB_Executor \
-    -loader DDDB_FileReader \
-    -config DD4hep_ConditionsManagerInstaller \
-    -params file:../DDDB/Parameters.xml \
-    -input file:../DDDB/DDDB/lhcb.xml \
-    -exec DDDB_DetectorConditionDump \
-    -visualize -attr file:../DDDB/Visattrs.xml`;
-echo "Command: `which geoPluginRun` $ARGS";
-`which geoPluginRun` ${ARGS};
diff --git a/DDDB/src/CondDB2DDDB.cpp b/DDDB/src/CondDB2DDDB.cpp
index ff9e138fab19ffc1e3e1c4b30a8b6b812ec42958..675e065a2c87a0705460dafec4f5841e3c139743 100644
--- a/DDDB/src/CondDB2DDDB.cpp
+++ b/DDDB/src/CondDB2DDDB.cpp
@@ -141,6 +141,7 @@ namespace DD4hep {
       XML::UriReader* resolver;
       dddb*       geo;
       Locals      locals;
+      bool        check;
       bool        print_xml;
       bool        print_docs;
       bool        print_materials;
@@ -159,7 +160,7 @@ namespace DD4hep {
 
       /// Default constructor
       Context(lcdd_t& l) 
-        : lcdd(l), resolver(0), geo(0),
+        : lcdd(l), resolver(0), geo(0), check(true),
           print_xml(false),
           print_docs(false),
           print_materials(false), 
@@ -414,9 +415,11 @@ namespace DD4hep {
 
     void checkParents(Context* context)  {
       dddb* geo = context->geo;
-      for(dddb::Catalogs::iterator i=geo->catalogs.begin(); i!=geo->catalogs.end(); ++i)  {
-        Catalog* det = (*i).second;
-        checkParents(context,det);
+      if ( context->check )  {
+        for(dddb::Catalogs::iterator i=geo->catalogs.begin(); i!=geo->catalogs.end(); ++i)  {
+          Catalog* det = (*i).second;
+          checkParents(context,det);
+        }
       }
     }
 
@@ -1667,6 +1670,7 @@ namespace DD4hep {
     template <> void Conv<dddb_conditions>::convert(xml_h e) const {
       Catalog* catalog = 0;
       Context* context = _param<Context>();
+      context->check = false;
       xml_coll_t(e, _LBU(conditionref)).for_each(Conv<ConditionRef>(lcdd,context,catalog));
       xml_coll_t(e, _LBU(catalogref)).for_each(Conv<CatalogRef>(lcdd,context,catalog));
       {
diff --git a/DDDB/src/DDDB2Objects.cpp b/DDDB/src/DDDB2Objects.cpp
index 38a713d0db6af269e0e18421d9773db5a37aa250..1a96cd4f0125258cb0066fc73829b659b98ca1bb 100644
--- a/DDDB/src/DDDB2Objects.cpp
+++ b/DDDB/src/DDDB2Objects.cpp
@@ -84,7 +84,7 @@ namespace DD4hep {
           print_detelem(false),
           print_conditions(false),
           print_vis(false),
-	  conditions_only(false)
+          conditions_only(false)
       {
       }
       ~Context()  {
@@ -229,16 +229,16 @@ namespace DD4hep {
     template <> void* CNV<GeoCondition>::convert(GeoCondition *obj) const   {
       Context* context = _param<Context>();
       if ( obj )   {
-	typedef IOV::Key _K;
-	Conditions::Condition cond = obj;
-	AbstractMap&        d = cond.get<AbstractMap>();
-	Document*         doc = d.option<Document>();
-	_K::first_type  since = doc->context.valid_since;
-	_K::second_type until = doc->context.valid_until;
-	_K iov_key(since,until);
-	ConditionsPool* pool = context->manager.registerIOV(*(context->epoch), iov_key);
-	context->manager.registerUnlocked(pool, cond);
-	//context->manager.registerKey(cond->hash, cond->name);
+        typedef IOV::Key _K;
+        Conditions::Condition cond = obj;
+        AbstractMap&        d = cond.get<AbstractMap>();
+        Document*         doc = d.option<Document>();
+        _K::first_type  since = doc->context.valid_since;
+        _K::second_type until = doc->context.valid_until;
+        _K iov_key(since,until);
+        ConditionsPool* pool = context->manager.registerIOV(*(context->epoch), iov_key);
+        context->manager.registerUnlocked(pool, cond);
+        //context->manager.registerKey(cond->hash, cond->name);
       }
       return obj;
     }
@@ -577,7 +577,7 @@ namespace DD4hep {
           }
         }
         mother->SetTitle(object->path.c_str());
-	Geometry::VisAttr vis = context->helper->visAttr(object->path);
+        Geometry::VisAttr vis = context->helper->visAttr(object->path);
         if ( vis.isValid() )  {
           if ( context->print_vis )  {
             printout(INFO,"Cnv<LogVol>","++ Vol:%s  Vis:%s",mother->GetTitle(), vis.name());
@@ -603,7 +603,7 @@ namespace DD4hep {
                        " Unknown daughter vol:%s.",pv->c_id(), pv->logvol.c_str());
               continue;
             }
-	    int num_places = 0;
+            int num_places = 0;
             const char* pv_name = pv->name.c_str();
             switch(pv->type)   {
             case PhysVol::PHYSVOL_REGULAR:   {
@@ -787,7 +787,7 @@ namespace DD4hep {
                  object->logvol.empty()  ? "--" : object->logvol.c_str(),
                  object->support.empty() ? "--" : object->support.c_str(),
                  object->npath.empty()   ? "--" : object->npath.c_str(),
-		 object->condition.c_str());
+                 object->condition.c_str());
       }
       if ( object->path == "/dd/Structure" )  {
         const Box& o = geo->world;
@@ -808,7 +808,7 @@ namespace DD4hep {
       }
       else if ( object->path.find("/dd/Structure") == 0 )  {
         det = DetElement(object->name,object->type,0);
-	det.addExtension<Catalog>(object->addRef());
+        det.addExtension<Catalog>(object->addRef());
         if ( !object->support.empty() )  {
           try  {
             j = context->catalogPaths.find(object->support);
@@ -897,17 +897,17 @@ namespace DD4hep {
 #endif
       /// Attach conditions keys to the detector element if present
       if ( !object->condition.empty() )   {
-	Conditions::Container::Object* conditions = Conditions::DetConditions(det).conditions().ptr();
-	conditions->addKey(object->condition);
-	conditions->addKey("Alignment", object->condition);
+        Conditions::Container::Object* conditions = Conditions::DetConditions(det).conditions().ptr();
+        conditions->addKey(object->condition);
+        conditions->addKey("Alignment", object->condition);
       }
       if ( !object->conditioninfo.empty() )  {
-	Conditions::Container::Object* conditions = Conditions::DetConditions(det).conditions().ptr();
-	for(Catalog::StringMap::const_iterator i=object->conditioninfo.begin(); i!=object->conditioninfo.end(); ++i)  {
-	  const string& cond_name = (*i).second;
-	  conditions->addKey(cond_name);
-	  conditions->addKey((*i).first, cond_name);
-	}
+        Conditions::Container::Object* conditions = Conditions::DetConditions(det).conditions().ptr();
+        for(Catalog::StringMap::const_iterator i=object->conditioninfo.begin(); i!=object->conditioninfo.end(); ++i)  {
+          const string& cond_name = (*i).second;
+          conditions->addKey(cond_name);
+          conditions->addKey((*i).first, cond_name);
+        }
       }
 
       if ( context->print_detelem )  {
@@ -972,63 +972,63 @@ namespace DD4hep {
     template <> void* CNV<dddb>::convert(dddb *obj) const   {
       Context*  context = _param<Context>();
       if ( !context->conditions_only )  {
-	GeoVolume world   = lcdd.worldVolume();
+        GeoVolume world   = lcdd.worldVolume();
 
-	for_each(obj->isotopes.begin(),  obj->isotopes.end(),   cnv<Isotope>());
-	printout(INFO,"DDDB2Object","++ Converted %d isotopes.",int(obj->isotopes.size()));
-	for_each(obj->elements.begin(),  obj->elements.end(),   cnv<Element>());
-	printout(INFO,"DDDB2Object","++ Converted %d elements.",int(obj->elements.size()));
-	//for_each(obj->materials.begin(), obj->materials.end(),  cnv<Material>());
-	//printout(INFO,"DDDB2Object","++ Converted %d materials.",int(obj->materials.size()));
-	//for_each(obj->shapes.begin(),    obj->shapes.end(),     cnv<Shape>());
-	//printout(INFO,"DDDB2Object","++ Converted %d shapes.",int(obj->shapes.size()));
-	//for_each(obj->volumes.begin(),   obj->volumes.end(),    cnv<LogVol>());
-	//printout(INFO,"DDDB2Object","++ Converted %d volumes.",int(obj->volumes.size()));
-	//for_each(obj->placements.begin(),obj->placements.end(), cnv<PhysVol>());
-	//printout(INFO,"DDDB2Object","++ Converted %d placements.",int(obj->placements.size()));
+        for_each(obj->isotopes.begin(),  obj->isotopes.end(),   cnv<Isotope>());
+        printout(INFO,"DDDB2Object","++ Converted %d isotopes.",int(obj->isotopes.size()));
+        for_each(obj->elements.begin(),  obj->elements.end(),   cnv<Element>());
+        printout(INFO,"DDDB2Object","++ Converted %d elements.",int(obj->elements.size()));
+        //for_each(obj->materials.begin(), obj->materials.end(),  cnv<Material>());
+        //printout(INFO,"DDDB2Object","++ Converted %d materials.",int(obj->materials.size()));
+        //for_each(obj->shapes.begin(),    obj->shapes.end(),     cnv<Shape>());
+        //printout(INFO,"DDDB2Object","++ Converted %d shapes.",int(obj->shapes.size()));
+        //for_each(obj->volumes.begin(),   obj->volumes.end(),    cnv<LogVol>());
+        //printout(INFO,"DDDB2Object","++ Converted %d volumes.",int(obj->volumes.size()));
+        //for_each(obj->placements.begin(),obj->placements.end(), cnv<PhysVol>());
+        //printout(INFO,"DDDB2Object","++ Converted %d placements.",int(obj->placements.size()));
 
-	if ( obj->top )   {
-	  if ( !context->lvDummy.isValid() )   {
-	    lcdd.manager().SetVisLevel(context->max_volume_depth);
-	    context->lvDummy = GeoVolume("Dummy",Geometry::Box(0.0001,0.0001, 0.0001),lcdd.vacuum());
-	    context->lvDummy.setVisAttributes(lcdd.invisible());
-	  }
-	  if ( !world.isValid() )  {
-	    string top = "/dd/Geometry/LHCb/lvLHCb";
-	    const LogVol* lv = Context::find(obj->volumePaths,top);
-	    if ( !lv )   {
-	      except("DDDB2DD4hep","++ No World volume defined.");
-	    }
-	    const Shape* s = Context::find(obj->shapes,lv->id);
-	    if ( !s )  {
-	      except("DDDB2DD4hep","++ No Shape for the world volume defined.");
-	    }
-	    obj->world = s->s.box;
-	  }
-	  /// Main detector conversion invokation
-	  cnv<Catalog>().convert(obj->top);
-	  if ( !world.isValid() && lcdd.worldVolume().isValid() )  {
-	    lcdd.endDocument();
-	  }
-	  /// Now configure the conditions manager
-	  if ( !context->manager.isValid() )  {
-	    Conditions::ConditionsManager manager = Conditions::ConditionsManager::from(lcdd);
-	    manager["PoolType"]       = "DD4hep_ConditionsLinearPool";
-	    manager["LoaderType"]     = "dddb";
-	    manager["UserPoolType"]   = "DD4hep_ConditionsMapUserPool";
-	    manager["UpdatePoolType"] = "DD4hep_ConditionsLinearUpdatePool";
-	    manager.initialize();
-	    pair<bool,const IOVType*> e = manager.registerIOVType(0, "epoch");
-	    context->manager = manager;
-	    context->epoch   = e.second;
-	  }
-	}
+        if ( obj->top )   {
+          if ( !context->lvDummy.isValid() )   {
+            lcdd.manager().SetVisLevel(context->max_volume_depth);
+            context->lvDummy = GeoVolume("Dummy",Geometry::Box(0.0001,0.0001, 0.0001),lcdd.vacuum());
+            context->lvDummy.setVisAttributes(lcdd.invisible());
+          }
+          if ( !world.isValid() )  {
+            string top = "/dd/Geometry/LHCb/lvLHCb";
+            const LogVol* lv = Context::find(obj->volumePaths,top);
+            if ( !lv )   {
+              except("DDDB2DD4hep","++ No World volume defined.");
+            }
+            const Shape* s = Context::find(obj->shapes,lv->id);
+            if ( !s )  {
+              except("DDDB2DD4hep","++ No Shape for the world volume defined.");
+            }
+            obj->world = s->s.box;
+          }
+          /// Main detector conversion invokation
+          cnv<Catalog>().convert(obj->top);
+          if ( !world.isValid() && lcdd.worldVolume().isValid() )  {
+            lcdd.endDocument();
+          }
+          /// Now configure the conditions manager
+          if ( !context->manager.isValid() )  {
+            Conditions::ConditionsManager manager = Conditions::ConditionsManager::from(lcdd);
+            manager["PoolType"]       = "DD4hep_ConditionsLinearPool";
+            manager["LoaderType"]     = "dddb";
+            manager["UserPoolType"]   = "DD4hep_ConditionsMapUserPool";
+            manager["UpdatePoolType"] = "DD4hep_ConditionsLinearUpdatePool";
+            manager.initialize();
+            pair<bool,const IOVType*> e = manager.registerIOVType(0, "epoch");
+            context->manager = manager;
+            context->epoch   = e.second;
+          }
+        }
       }
       if ( !context->manager.isValid() )  {
-	Conditions::ConditionsManager manager = Conditions::ConditionsManager::from(lcdd);
-	pair<bool,const IOVType*> e = manager.registerIOVType(0, "epoch");
-	context->manager = manager;
-	context->epoch   = e.second;
+        Conditions::ConditionsManager manager = Conditions::ConditionsManager::from(lcdd);
+        pair<bool,const IOVType*> e = manager.registerIOVType(0, "epoch");
+        context->manager = manager;
+        context->epoch   = e.second;
       }
       for_each(obj->conditions.begin(),obj->conditions.end(), cnv<GeoCondition>());
       //printout(INFO,"DDDB2Object","++ Converted %d conditions.",int(obj->conditions.size()));
@@ -1041,31 +1041,31 @@ namespace DD4hep {
     long dddb_2_dd4hep(LCDD& lcdd, int , char** ) {
       DDDBHelper* helper = lcdd.extension<DDDBHelper>(false);
       if ( helper )   {
-	Context context(lcdd, helper->detectorDescription());
-	context.helper              = helper;
-	context.print_materials     = false;
-	context.print_logvol        = false;
-	context.print_shapes        = false;
-	context.print_physvol       = false;
-	context.print_volumes       = false;
-	context.print_params        = false;
-	context.print_detelem       = false;
-	context.print_conditions    = false;
-	context.print_vis           = false;
-	context.max_volume_depth    = 9;
+        Context context(lcdd, helper->detectorDescription());
+        context.helper              = helper;
+        context.print_materials     = false;
+        context.print_logvol        = false;
+        context.print_shapes        = false;
+        context.print_physvol       = false;
+        context.print_volumes       = false;
+        context.print_params        = false;
+        context.print_detelem       = false;
+        context.print_conditions    = false;
+        context.print_vis           = false;
+        context.max_volume_depth    = 9;
 
-	CNV<dddb> cnv(lcdd,&context);
-	cnv(make_pair(string("World"),context.geo));
-	printout(INFO,"DDDB","++ Converted %8d isotopes.",         int(context.isotopes.size()));
-	printout(INFO,"DDDB","++ Converted %8d elements.",         int(context.elements.size()));
-	printout(INFO,"DDDB","++ Converted %8d materials.",        int(context.materials.size()));
-	printout(INFO,"DDDB","++ Converted %8d shapes.",           int(context.shapes.size()));
-	printout(INFO,"DDDB","++ Converted %8d logical  volumes.", int(context.volumes.size()));
-	printout(INFO,"DDDB","++ Converted %8d placements.",       int(context.placements.size()));
-	printout(INFO,"DDDB","++ Converted %8d detector elements.",int(context.detelements.size()));
-	printout(INFO,"DDDB","++ Converted %8d conditions.",       int(context.geo->conditions.size()));
-	helper->setDetectorDescription(0);
-	return 1;
+        CNV<dddb> cnv(lcdd,&context);
+        cnv(make_pair(string("World"),context.geo));
+        printout(INFO,"DDDB","++ Converted %8d isotopes.",         int(context.isotopes.size()));
+        printout(INFO,"DDDB","++ Converted %8d elements.",         int(context.elements.size()));
+        printout(INFO,"DDDB","++ Converted %8d materials.",        int(context.materials.size()));
+        printout(INFO,"DDDB","++ Converted %8d shapes.",           int(context.shapes.size()));
+        printout(INFO,"DDDB","++ Converted %8d logical  volumes.", int(context.volumes.size()));
+        printout(INFO,"DDDB","++ Converted %8d placements.",       int(context.placements.size()));
+        printout(INFO,"DDDB","++ Converted %8d detector elements.",int(context.detelements.size()));
+        printout(INFO,"DDDB","++ Converted %8d conditions.",       int(context.geo->conditions.size()));
+        helper->setDetectorDescription(0);
+        return 1;
       }
       except("DDDB","++ No DDDBHelper instance installed. Geometry conversion failed!");
       return 1;
@@ -1073,14 +1073,14 @@ namespace DD4hep {
     long dddb_conditions_2_dd4hep(LCDD& lcdd, int , char** ) {
       DDDBHelper* helper = lcdd.extension<DDDBHelper>(false);
       if ( helper )   {
-	Context context(lcdd, helper->detectorDescription());
-	context.helper              = helper;
-	context.print_conditions    = false;
-	context.conditions_only     = true;
-	CNV<dddb> cnv(lcdd,&context);
-	cnv(make_pair(string(),context.geo));
-	helper->setDetectorDescription(0);
-	return 1;
+        Context context(lcdd, helper->detectorDescription());
+        context.helper              = helper;
+        context.print_conditions    = false;
+        context.conditions_only     = true;
+        CNV<dddb> cnv(lcdd,&context);
+        cnv(make_pair(string(),context.geo));
+        helper->setDetectorDescription(0);
+        return 1;
       }
       except("DDDB","++ No DDDBHelper instance installed. Geometry conversion failed!");
       return 1;
diff --git a/DDDB/src/DDDBConditionsLoader.cpp b/DDDB/src/DDDBConditionsLoader.cpp
index 58640f4acea15716facd99d81b919c846fe2ad4e..b06f5d1d7c3d3c9489f3c1779c4d20b5e9cf90da 100644
--- a/DDDB/src/DDDBConditionsLoader.cpp
+++ b/DDDB/src/DDDBConditionsLoader.cpp
@@ -16,10 +16,12 @@
 // Framework include files
 #include "DDDB/DDDBConditionsLoader.h"
 #include "DDDB/DDDBReaderContext.h"
+#include "DDDB/DDDBConversion.h"
 #include "DDDB/DDDBHelper.h"
 #include "DD4hep/Printout.h"
 #include "DD4hep/Factories.h"
 #include "DD4hep/Operators.h"
+#include "DD4hep/ConditionsData.h"
 #include "DD4hep/objects/ConditionsInterna.h"
 #include "DDCond/ConditionsInterna.h"
 
@@ -31,6 +33,7 @@ using namespace std;
 using namespace DD4hep::DDDB;
 using DD4hep::Geometry::LCDD;
 using DD4hep::Conditions::Condition;
+using DD4hep::Conditions::AbstractMap;
 using DD4hep::Conditions::RangeConditions;
 typedef DD4hep::Conditions::RangeConditions RC;
 
@@ -113,8 +116,8 @@ void DDDBConditionsLoader::loadDocument(XML::UriContextReader& rdr, const Key& k
 
 /// Load single conditions document
 void DDDBConditionsLoader::loadDocument(XML::UriContextReader& rdr, 
-					const string& sys_id,
-					const string& obj_id)
+                                        const string& sys_id,
+                                        const string& obj_id)
 {
   const void* argv_conddb[] = {&rdr, sys_id.c_str(), obj_id.c_str(), 0};
   long result = load_dddb_conditions_from_uri(m_lcdd, 3, (char**)argv_conddb);
@@ -130,8 +133,8 @@ void DDDBConditionsLoader::loadDocument(XML::UriContextReader& rdr,
 
 /// Load  a condition set given a Detector Element and the conditions name according to their validity
 size_t DDDBConditionsLoader::load_range(key_type key,
-					const iov_type& req_validity,
-					RangeConditions& conditions)   {
+                                        const iov_type& req_validity,
+                                        RangeConditions& conditions)   {
   KeyMap::const_iterator k = m_keys.keys.find(key);
   if ( k != m_keys.keys.end() )   {
     size_t len = conditions.size();
@@ -159,8 +162,8 @@ size_t DDDBConditionsLoader::load_range(key_type key,
 }
 
 size_t DDDBConditionsLoader::load(key_type key,
-				  const iov_type& req_validity,
-				  RangeConditions& conditions)  {
+                                  const iov_type& req_validity,
+                                  RangeConditions& conditions)  {
   KeyMap::const_iterator k = m_keys.keys.find(key);
   if ( k != m_keys.keys.end() )   {
     size_t len = conditions.size();
@@ -184,8 +187,8 @@ size_t DDDBConditionsLoader::load(key_type key,
 
 /// Update a range of conditions according to the required IOV
 size_t DDDBConditionsLoader::update(const iov_type& req_validity,
-				    RangeConditions& conditions,
-				    iov_type& conditions_validity)
+                                    RangeConditions& conditions,
+                                    iov_type& conditions_validity)
 {
   CallArgs arg(REPLACE, 0, conditions_validity, conditions);
   pair<ConditionsListener*,void*> call(this,&arg);
@@ -204,14 +207,15 @@ size_t DDDBConditionsLoader::update(const iov_type& req_validity,
     size_t idx = c->address.find('#');
     string url = (idx == string::npos) ? c->address : c->address.substr(0,idx);
     printout(INFO,"DDDB","++ Need to update: %-40s [%08X] --> %s",
-	     c->name.c_str(), c->hash, url.c_str());
+             c->name.c_str(), c->hash, url.c_str());
     urls.insert(make_pair(url,c));
   }
   /// Now load them. In the callbacks we can check if we got all required conditions
   for(map<string,Condition::Object*>::const_iterator j=urls.begin(); j!=urls.end(); ++j)  {
-    const string& sys_id   = (*j).first;
-    const string& obj_path = (*j).second->name;
-    loadDocument(local_reader, sys_id, obj_path);
+    Condition            cond = (*j).second;
+    const AbstractMap&   data = cond.get<AbstractMap>();
+    const Document*       doc = data.option<Document>();
+    loadDocument(local_reader, doc->id, doc->name);
   }
   m_mgr->callOnRegister(call,false);  
   return 0;
@@ -227,14 +231,14 @@ void DDDBConditionsLoader::onRegisterCondition(Condition cond, void* param)  {
     if ( arg->cmd == REPLACE )  {
       RC::iterator i=std::find_if(r.begin(),r.end(),byName(cond));
       if ( i != r.end() ) {
-	(*i) = cond;
-	printout(DEBUG,"DDDB","++ Got  MATCH: %-40s [%08X] --> %s.",
-		 c->name.c_str(), c->hash, c->address.c_str());
-	arg->iov.iov_intersection(cond.iov());
-	return;
+        (*i) = cond;
+        printout(DEBUG,"DDDB","++ Got  MATCH: %-40s [%08X] --> %s.",
+                 c->name.c_str(), c->hash, c->address.c_str());
+        arg->iov.iov_intersection(cond.iov());
+        return;
       }
       printout(INFO,"DDDB","++ Got update: %-40s [%08X] --> %s.",
-	       c->name.c_str(), c->hash, c->address.c_str());
+               c->name.c_str(), c->hash, c->address.c_str());
     }
     else if ( arg->cmd == INSERT && arg->key == c->hash )   {
       arg->iov.iov_intersection(cond.iov());
diff --git a/DDDB/src/DDDBDerivedCondTest.cpp b/DDDB/src/DDDBDerivedCondTest.cpp
index da66a62d86e9b6cb221ebf815d3e7613d07b1991..aea3c4a4d21831f66b0b648027290e21d1136026 100644
--- a/DDDB/src/DDDBDerivedCondTest.cpp
+++ b/DDDB/src/DDDBDerivedCondTest.cpp
@@ -34,6 +34,7 @@
 #include "DDCond/ConditionsInterna.h"
 #include "DDCond/ConditionsOperators.h"
 
+#include "DDDB/DDDBReader.h"
 #include "DDDB/DDDBConversion.h"
 #include "DDDB/DDDBConditionPrinter.h"
 
@@ -176,7 +177,7 @@ namespace  {
    *   \date    31/03/2016
    *   \ingroup DD4HEP_DDDB
    */
-  class AlignmentSelector  {
+  class ConditionsSelector  {
   public:
     typedef ConditionsManager::Dependencies Dependencies;
     string            m_name;
@@ -190,11 +191,11 @@ namespace  {
     } m_counters;
 
     /// Initializing constructor
-    AlignmentSelector(ConditionsAccess mgr) : m_manager(mgr) {
+    ConditionsSelector(ConditionsAccess mgr) : m_manager(mgr) {
       Operators::collectAllConditions(mgr, m_allConditions);
     }
 
-    virtual ~AlignmentSelector()   {
+    virtual ~ConditionsSelector()   {
       destroyObjects(m_allDependencies);
     }
 
@@ -298,10 +299,10 @@ namespace  {
   };
 
   /// Plugin function
-  long dddb_derived_alignments(LCDD& lcdd, int , char** argv) {
-    long init_time = *(long*)argv[0];
+  long dddb_derived_alignments(LCDD& lcdd, int argc, char** argv) {
+    long int long init_time = argc>0 ? *(long*)argv[0] : DDDB::DDDBReader::makeTime(2016,4,1,12);
     ConditionsManager manager = ConditionsManager::from(lcdd);
-    AlignmentSelector selector(manager);
+    ConditionsSelector selector(manager);
     int ret = selector.collectDependencies(lcdd.world(), 0);
     if ( ret == 1 )  {
       ret = selector.computeDependencies(init_time);
diff --git a/doc/CompileAllOptionPermutations.sh b/doc/CompileAllOptionPermutations.sh
index c2d23a75a182d6af890bc43b454d63748ee0d094..8fb9c02b3f0ac028296bbed3693447ab2efad8c6 100755
--- a/doc/CompileAllOptionPermutations.sh
+++ b/doc/CompileAllOptionPermutations.sh
@@ -14,6 +14,7 @@ ROOT_VERSION=6.04.10;
 #GEANT_VERSION=10.02.p02;
 ROOT_VERSION=6.06.06;
 #source ${INSTALL_G4}/../../bin/geant4.sh;
+num_threads=2
 export CXX="`which g++-5` -D_GLIBCXX_USE_CXX11_ABI=0";
 export CC="`which gcc-5` -D_GLIBCXX_USE_CXX11_ABI=0";
 
@@ -29,6 +30,7 @@ parse_command_line_args()
         #echo "Arg:$1 $2";
         a1=`echo $1 | tr A-Z a-z`;
 	case ${a1} in
+
 	    -root)
 		ROOT_VERSION=$2;
 		shift
@@ -52,6 +54,16 @@ parse_command_line_args()
                 MULTITHREADED="";
                 ;;
 
+	    -threads)
+		num_threads=$2;
+		shift
+		;;
+
+	    -j)
+		num_threads=$2;
+		shift
+		;;
+
 	    *)
 		ARG_ERROR=$1;
 		;;
@@ -98,7 +110,7 @@ make_build()
         echo ${CMD};
 	exit 1
     fi
-    make install VERBOSE=1 -j 1;
+    make install VERBOSE=1 -j ${num_threads};
     if [ $? -ne  0 ]; then
         make_output "DANGER WILL ROBINSON DANGER!" "++++ Failed BUILD!"
         echo ${CMD};
diff --git a/doc/release.notes b/doc/release.notes
index 667a3d1c45347da33ba9fdfa2a02d6b82e9195fa..b98325d477ea8fd4280bc962a0672103cf063eb8 100644
--- a/doc/release.notes
+++ b/doc/release.notes
@@ -3,11 +3,24 @@
 DD4hep  ----  Release Notes
 =================================
 
+
+2016-08-24 M.Frank
+  Adding first somehow useful implementation to use conditions and the consequent loading thereof.
+	Used by the DDDB implementation/example. DDDB is an alternative way to populate the DD4hep
+	detector description using LHCb's detector description database.
+	The reason is, that only a running experiment has a reasonable base to conditions data
+	to excercise the DD4hep conditions.
+	If interested, please have a look in the DDDB examples.
+
+  Still TODO:
+  - A formal way to bootstrap the conditions loading still has to be found.
+  - Conditions loading from XML files and a small comprehensive example.
+
   --------
  | v00-16 |
   --------
 
-Shaojun Lu | 2016-07-26  
+2016-07-26 Shaojun Lu  
 	Added new MegatileLayerGridXY segmentation for Scintillator strip Ecal, which is implemented by K.Kotera, 
         and used by SEcal04Hybrid geometry driver.
 
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index ee0c44aa9129ebd1f0e7e9ff9a8d1c418e0a6e8f..e27dfde3b39f7eac4d968ccbe47df9a5036353e7 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -37,4 +37,4 @@ dd4hep_package ( DD4hepExample MAJOR 0 MINOR 15 PATCH 0
                  [DD4hep REQUIRED COMPONENTS DDCore]
 )
 #
-dd4hep_enable_tests ( AlignDet CLICSiD ClientTests SimpleDetector )
+dd4hep_enable_tests ( AlignDet CLICSiD ClientTests DDDB SimpleDetector)
diff --git a/examples/DDDB/CMakeLists.txt b/examples/DDDB/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..2ec2ec6f48227db1873c4e22777ca0752673730d
--- /dev/null
+++ b/examples/DDDB/CMakeLists.txt
@@ -0,0 +1,116 @@
+# $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)
+include ( ${DD4hep_DIR}/cmake/DD4hep.cmake )
+
+#-----------------------------------------------------------------------------------
+dd4hep_configure_output ()
+dd4hep_package (DDDB MAJOR 0 MINOR 0 PATCH 1
+  USES  [ROOT   REQUIRED COMPONENTS Geom] 
+        [DD4hep REQUIRED COMPONENTS DDCore DDDB]
+)
+#---Package installation procedure(s) -----------------------------------------
+install ( PROGRAMS scripts/run_dddb.sh DESTINATION bin)
+install ( PROGRAMS scripts/extract_dddb.sh DESTINATION bin)
+install ( FILES    data/DDDB.tar.gz DESTINATION examples/DDDB)
+#---Testing--------------------------------------------------------------------
+dd4hep_configure_scripts ( DDDB DEFAULT_SETUP WITH_TESTS )
+#
+#---Testing: Extract DDDB data from zip archive -------------------------------
+dd4hep_add_test_reg( test_DDDB_extract
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/extract_dddb.sh
+  REGEX_PASS "DDDB Database successfully installed." )
+#
+#---Testing: Load the geometry from archive -----------------------------------
+dd4hep_add_test_reg( test_DDDB_load
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh
+  REGEX_PASS "Converted    12768 placements" )
+#
+#---Testing: Load the geometry + conditions from archive ----------------------
+dd4hep_add_test_reg( test_DDDB_conditions
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh
+                -config DD4hep_ConditionsManagerInstaller
+  REGEX_PASS "Converted     9353 conditions" )
+#
+#---Testing: Load the geometry + conditions dump as view from DetElement ------
+dd4hep_add_test_reg( test_DDDB_conditions_dump_simple
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh
+                -config DD4hep_ConditionsManagerInstaller
+                -exec   DDDB_ConditionsDump
+  REGEX_PASS "Path:/dd/Conditions/ReadoutConf/Velo/Tell1Module03 Class:5 .DD4hep::Conditions::AbstractMap." )
+#
+#---Testing: Load the geometry + dump detector elemets ------------------------
+dd4hep_add_test_reg( test_DDDB_det_elements
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh
+                -config DD4hep_ConditionsManagerInstaller
+                -exec   DDDB_DetectorDump
+  REGEX_PASS "Detector: /world/LHCb/UpstreamRegion #Dau:5" )
+#
+#---Testing: Load the geometry + dump volumes ---------------------------------
+dd4hep_add_test_reg( test_DDDB_det_volumes
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh
+                -config DD4hep_ConditionsManagerInstaller
+                -exec   DDDB_DetectorVolumeDump
+  REGEX_PASS "Detector: /world/LHCb/MagnetRegion/BcmDown #Dau:10" )
+#
+#---Testing: Load the geometry + dump condition keys --------------------------
+dd4hep_add_test_reg( test_DDDB_det_conditions_keys
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh
+                -config DD4hep_ConditionsManagerInstaller
+                -exec   DDDB_DetectorConditionKeysDump
+  REGEX_PASS "Key: D88E83E7 -> 20537B67 -> /dd/Conditions/ReadoutConf/Prs/Readout")
+#
+#---Testing: Load the geometry + dump condition keys --------------------------
+dd4hep_add_test_reg( test_DDDB_det_conditions_data
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh
+                -config DD4hep_ConditionsManagerInstaller
+                -exec   DDDB_DetectorConditionDump
+  REGEX_PASS "Path:/dd/Conditions/Alignment/Spd/SpdCSystem Class:6 .DD4hep::Conditions::AbstractMap." )
+#
+#---Testing: Load the geometry + dump condition keys --------------------------
+dd4hep_add_test_reg( test_DDDB_det_conditions_align
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh
+                -config DD4hep_ConditionsManagerInstaller
+                -exec   DDDB_DetectorAlignmentDump
+  REGEX_PASS "Number of attached alignments:             2496")
+#
+#---Testing: Load the geometry + conditions dump as view from DetElement ------
+dd4hep_add_test_reg( test_DDDB_detelement_conditions_dump
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh
+                -config DD4hep_ConditionsManagerInstaller
+                -exec   DDDB_DetElementConditionDump
+  REGEX_PASS "Path:/dd/Conditions/Alignment/Spd/SpdCSystem Class:6 .DD4hep::Conditions::AbstractMap." )
+
+#
+#---Testing: Load the geometry + conditions + conditions derives
+dd4hep_add_test_reg( test_DDDB_derived_conditions
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/run_dddb.sh
+                -config DD4hep_ConditionsManagerInstaller
+                -exec   DDDB_DerivedCondTest
+  REGEX_PASS "Building dependent condition: /dd/Conditions/Alignment/TT/TTbVLayerR1Module3B/derived_3" )
+#
+#---Testing: Extract DDDB data from zip archive -------------------------------
+dd4hep_add_test_reg( test_DDDB_clean
+  COMMAND    "${CMAKE_INSTALL_PREFIX}/bin/run_test_DDDB.sh"
+  EXEC_ARGS  ${CMAKE_INSTALL_PREFIX}/bin/extract_dddb.sh -clean
+  REGEX_PASS "DDDB Database successfully removed" )
diff --git a/examples/DDDB/data/DDDB.tar.gz b/examples/DDDB/data/DDDB.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..9125b82ea601cf7b21a221269d8fbcec53750fca
Binary files /dev/null and b/examples/DDDB/data/DDDB.tar.gz differ
diff --git a/examples/DDDB/scripts/extract_dddb.sh b/examples/DDDB/scripts/extract_dddb.sh
new file mode 100755
index 0000000000000000000000000000000000000000..7beb5e577617a2976d69f622af5cdeb6f96044ef
--- /dev/null
+++ b/examples/DDDB/scripts/extract_dddb.sh
@@ -0,0 +1,86 @@
+#!/bin/bash
+# $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 M.Frank
+#
+#==========================================================================
+echo "+ ------------------------------------------------------------------+";
+echo "|   Starting DDDB extraction from tar file                          |";
+echo "+ ------------------------------------------------------------------+";
+#
+source=${DD4hepINSTALL}/examples/DDDB/DDDB.tar.gz;
+target=/tmp/$USER;
+clean="NO";
+#
+# Check for arguments:
+while [[ "$1" == -* ]]; do
+    #echo "Arg:$1 $2 [$*]";
+    a1=`echo $1 | tr A-Z a-z`;
+    case ${a1} in
+	-to)
+	    target=$2;
+	    shift
+	    ;;
+	-target)
+	    target=$2;
+	    shift
+	    ;;
+        -dddb)
+	    source=$2;
+	    shift
+	    ;;
+        -clean)
+            clean="YES";
+            ;;
+        -input)
+	    source=$2;
+	    shift
+	    ;;
+	*)
+            echo "Usage: $0 -arg [-arg]";
+            echo "  -target <directory>  Installation target directory. Default: $target";
+            echo "  -input  <tar-file>   Input data file. Default: $source";
+            exit 13;    # EACCES
+	    ;;
+    esac
+    shift;
+done;
+#
+# Now do the installation
+if test -d ${target}/DDDB; then
+    if test "${clean}" = "YES";then
+        rm -rf ${target}/DDDB;
+        echo "DDDB Database successfully removed ${target}";
+        exit 0;
+    fi;
+    echo "DDDB database is already extracted to ${target}. Nothing to do.";
+elif test ! -f ${source}; then
+    echo "DDDB database tar file $source is not present. [Installation FAILED]";
+    exit 2;  # ENOENT
+else
+    mkdir -p ${target}/DDDB;
+    if test ! -d ${target}/DDDB; then
+        echo "DDDB database target directory ${target} cannot be created [Installation FAILED]";
+        exit 2;  # ENOENT
+    fi;
+    cd ${target};
+    echo "${target} : tar -xf $source";
+    tar -xf $source;
+fi;
+if test -f ${target}/DDDB/DDDB/lhcb.xml; then
+    echo "DDDB Database successfully installed.";
+else
+    echo "DDDB Database installation FAILED";
+    exit 2;  # ENOENT
+fi;
+exit 0;
diff --git a/examples/DDDB/scripts/run_dddb.sh b/examples/DDDB/scripts/run_dddb.sh
new file mode 100755
index 0000000000000000000000000000000000000000..13eadfc41d89600ee0ced186d9a3b118b9021a9f
--- /dev/null
+++ b/examples/DDDB/scripts/run_dddb.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+# $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 M.Frank
+#
+#==========================================================================
+echo "+ ------------------------------------------------------------------+";
+echo "|                                                                   |";
+echo "|   Starting DDDB plugin executor....                               |";
+echo "|                                                                   |";
+echo "+ ------------------------------------------------------------------+";
+#
+#
+# Check for arguments:
+DDDB_DIR=/tmp/${USER}/DDDB;
+loader="-loader DDDB_FileReader";
+params="-params file:${DDDB_DIR}/Parameters.xml";
+input="-input file:${DDDB_DIR}/DDDB/lhcb.xml";
+config="";
+exec="";
+vis="";
+debug="";
+#
+#
+while [[ "$1" == -* ]]; do
+    #echo "Arg:$1 $2 [$*]";
+    a1=`echo $1 | tr A-Z a-z`;
+    case ${a1} in
+        -debug)
+            debug="gdb --args";
+            ;;
+	-attr)
+            vis="${vis} -attr $2";
+            shift;
+            ;;
+	-visualize)
+	    vis="${vis} -visualize";
+            ;;
+	-params)
+            params="-params $2";
+            shift;
+            ;;
+	-loader)
+            loader="-loader $2";
+            shift;
+            ;;                    
+	-input)
+            input="-input $2";
+            shift;
+            ;;
+	-config)
+            config="${config} -config $2";
+            shift;
+            ;;
+	-exec)
+            exec="${exec} -exec $2";
+            shift;
+            ;;
+	*)
+            echo "Usage: $0 -arg [-arg]";
+            exit 13;    # EACCES
+	    ;;
+    esac
+    shift;
+done;
+#
+#
+ARGS=`echo -plugin DDDB_Executor ${loader} ${params} ${input} ${config} ${exec} ${vis}`
+echo "Command: ${debug} `which geoPluginRun` $ARGS";
+${debug} `which geoPluginRun` ${ARGS};