diff --git a/DDCore/include/Parsers/detail/Conversions.h b/DDCore/include/Parsers/detail/Conversions.h
index f764136fc435854787337d1bdaa262e591231d56..39d83e44f2b483b7d4da1722ce15cfab28dc8d31 100644
--- a/DDCore/include/Parsers/detail/Conversions.h
+++ b/DDCore/include/Parsers/detail/Conversions.h
@@ -44,13 +44,18 @@ namespace dd4hep {
    *  \ingroup DD4HEP_XML
    */
   template <typename T, typename ARG=DD4HEP_CONVERSION_NS::Handle_t> struct Converter {
-    typedef T to_type;
-    typedef void* user_param;
+  public:
+    typedef T                to_type;
+    typedef Converter<T,ARG> self_type;
+    typedef void*            user_param;
+  public:
     /// Reference to the detector description object
     Detector& description;
     /// Reference to optional user defined parameter
     user_param param;
+    /// Reference to second optional user defined parameter
     user_param optional;
+  public:
     /// Initializing constructor of the functor
     Converter(Detector& l) : description(l), param(0), optional(0) { }
     /// Initializing constructor of the functor with initialization of the user parameter
diff --git a/DDCore/include/XML/UnicodeValues.h b/DDCore/include/XML/UnicodeValues.h
index ec2da27df565d8bfb6fb1296080b7a2cd7562695..70aac776ef997d89657e6481eb6151d6bad45fa9 100644
--- a/DDCore/include/XML/UnicodeValues.h
+++ b/DDCore/include/XML/UnicodeValues.h
@@ -79,6 +79,7 @@ UNICODE (comment);
 UNICODE (component);
 UNICODE (composite);
 UNICODE (cone);
+UNICODE (config);
 UNICODE (cons);
 UNICODE (constant);
 UNICODE (crossing_angle);
diff --git a/examples/DDDB/include/DDDB/DDDBHelper.h b/examples/DDDB/include/DDDB/DDDBHelper.h
index 1c50a756e00de2ec128edb367d0899a9ff6f81c9..803253227aa47ff7d34c77079802b20c38710e21 100644
--- a/examples/DDDB/include/DDDB/DDDBHelper.h
+++ b/examples/DDDB/include/DDDB/DDDBHelper.h
@@ -79,6 +79,7 @@ namespace dd4hep {
       void addVisAttr(const std::string& path, VisAttr attr);
       /// Add new conditions entry
       bool addConditionEntry(const std::string& val, DetElement det, const std::string& item);
+
       /// Access conditions entry
       std::pair<DetElement,std::string> getConditionEntry(const std::string& item)  const;
       
diff --git a/examples/DDDB/include/DDDB/DDDBReader.h b/examples/DDDB/include/DDDB/DDDBReader.h
index 45e693ef6fdfb02e62bf83ee6f300a060d00dfc3..70a2e393a2704cd058884a7f6e086bf13f710ce6 100644
--- a/examples/DDDB/include/DDDB/DDDBReader.h
+++ b/examples/DDDB/include/DDDB/DDDBReader.h
@@ -24,6 +24,8 @@
 #include "DDDB/DDDBReaderContext.h"
 #include "DD4hep/ComponentProperties.h"
 
+/// C++ include files
+#include <set>
 
 /// Namespace for the AIDA detector description toolkit
 namespace dd4hep {
@@ -74,9 +76,20 @@ namespace dd4hep {
       /// Read raw XML object from the database / file
       virtual int getObject(const std::string& system_id, UserContext* ctxt, std::string& data) = 0;
 
+
+      /** Helpers for selective parsing  */
+      /// Add a blocked path entry
+      void blockPath(const std::string& path);
+      /// Check if a URI path is blocked
+      bool isBlocked(const std::string& path)  const;
+      
     protected:
+      /// File directory
       std::string       m_directory;
+      /// URI match string to invoke entity resolution
       std::string       m_match;
+      /// Blocked URI pathes
+      std::set<std::string> m_blockedPathes;
       /// Reader context
       DDDBReaderContext m_context;
     };
diff --git a/examples/DDDB/include/DDDB/DDDBTags.h b/examples/DDDB/include/DDDB/DDDBTags.h
index 248f0669a7c14a985aaeff67feb713c2d2b0c81f..87aea01711450c88b3080aafbf0abbee69b9dd09 100644
--- a/examples/DDDB/include/DDDB/DDDBTags.h
+++ b/examples/DDDB/include/DDDB/DDDBTags.h
@@ -38,6 +38,8 @@ namespace dd4hep {
     UNICODE(alp2);
     UNICODE(author);
 
+    UNICODE(block);
+
     UNICODE(catalog);
     UNICODE(catalogref);
     UNICODE(classID);
diff --git a/examples/DDDB/src/DDDBHelper.cpp b/examples/DDDB/src/DDDBHelper.cpp
index 141132be80efd2d75f8c3092a865343a499e742d..1994138dc27e02330c66ff07fe006a02b1583a4d 100644
--- a/examples/DDDB/src/DDDBHelper.cpp
+++ b/examples/DDDB/src/DDDBHelper.cpp
@@ -98,3 +98,4 @@ std::pair<DetElement,std::string> DDDBHelper::getConditionEntry(const std::strin
     return (*i).second;
   return make_pair(DetElement(),"");
 }
+
diff --git a/examples/DDDB/src/DDDBReader.cpp b/examples/DDDB/src/DDDBReader.cpp
index d89eb325194742c194ef31a9187e9c0465e6c853..facc380dc4c34a7fb74e5e81ef2376e53e50c89a 100644
--- a/examples/DDDB/src/DDDBReader.cpp
+++ b/examples/DDDB/src/DDDBReader.cpp
@@ -55,7 +55,11 @@ bool DDDBReader::load(const string& system_id,
                       UserContext*  ctxt,
                       string& buffer)
 {
-  if ( system_id.substr(0,m_match.length()) == m_match )  {
+  if ( isBlocked(system_id) )  {
+    buffer = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>  <DDDB></DDDB>";
+    return true;
+  }
+  else if ( system_id.substr(0,m_match.length()) == m_match )  {
     string mm = m_match + "//";
     size_t mm_len = mm.length();
     const string& sys = system_id;
@@ -88,3 +92,16 @@ void DDDBReader::parserLoaded(const std::string& /* system_id */, UserContext* c
   c->valid_since = c->event_time;
   c->valid_until = c->event_time;
 }
+
+/// Add a blocked path entry
+void DDDBReader::blockPath(const std::string& path)  {
+  m_blockedPathes.insert(path);
+}
+
+/// Check if a URI path is blocked
+bool DDDBReader::isBlocked(const std::string& path)  const  {
+  for(const auto& p : m_blockedPathes)  {
+    if ( path.find(p) != string::npos ) return true;
+  }
+  return false;
+}
diff --git a/examples/DDDB/src/plugins/CondDB2DDDB.cpp b/examples/DDDB/src/plugins/CondDB2DDDB.cpp
index 4638760ef0c3df5f297baf4c42f73b9690752e30..85151688aa87f1f4a236c75306980a02913a0982 100644
--- a/examples/DDDB/src/plugins/CondDB2DDDB.cpp
+++ b/examples/DDDB/src/plugins/CondDB2DDDB.cpp
@@ -22,8 +22,9 @@
 #include "DD4hep/Alignments.h"
 #include "DD4hep/OpaqueDataBinder.h"
 #include "DDDB/DDDBTags.h"
-#include "DDDB/DDDBDimension.h"
 #include "DDDB/DDDBHelper.h"
+#include "DDDB/DDDBReader.h"
+#include "DDDB/DDDBDimension.h"
 #include "DDDB/DDDBConversion.h"
 #include "Math/Polar2D.h"
 
@@ -58,6 +59,8 @@ namespace dd4hep {
     struct DDDBConditionInfo  {};
     struct DDDBDetElem  {};
     struct DDDBParam {};
+    struct DDDBBlock {};
+    struct DDDBConfig {};
     struct DDDBParameter  {};
     struct DDDBGeometryInfo  {};
     struct DDDBConditionParam {};
@@ -154,46 +157,32 @@ namespace dd4hep {
       };
 
     public:
-      Detector&     description;
-      xml::UriReader* resolver;
-      dddb*       geo;
+      Detector*   description = 0;
+      DDDBReader* resolver = 0;
+      dddb*       geo = 0;
       Locals      locals;
-      bool        check;
-      bool        print_xml;
-      bool        print_docs;
-      bool        print_materials;
-      bool        print_logvol;
-      bool        print_shapes;
-      bool        print_physvol;
-      bool        print_params;
-      bool        print_detelem;
-      bool        print_detelem_ref;
-      bool        print_detelem_xml;
-      bool        print_condition;
-      bool        print_condition_ref;
-      bool        print_catalog;
-      bool        print_catalog_ref;
-      bool        print_tabprop;
+      bool        check = true;
+      bool        print_xml = false;
+      bool        print_file_load = false;
+      bool        print_docs = false;
+      bool        print_materials = false;
+      bool        print_logvol = false;
+      bool        print_shapes = false;
+      bool        print_physvol = false;
+      bool        print_params = false;
+      bool        print_detelem = false;
+      bool        print_detelem_ref = false;
+      bool        print_detelem_xml = false;
+      bool        print_condition = false;
+      bool        print_condition_ref = false;
+      bool        print_catalog = false;
+      bool        print_catalog_ref = false;
+      bool        print_tabprop = false;
 
       /// Default constructor
-      DDDBContext(Detector& l) 
-        : description(l), resolver(0), geo(0), check(true),
-          print_xml(false),
-          print_docs(false),
-          print_materials(false), 
-          print_logvol(false), 
-          print_shapes(false), 
-          print_physvol(false), 
-          print_params(false), 
-          print_detelem(false),
-          print_detelem_ref(false), 
-          print_detelem_xml(false),
-          print_condition(false), 
-          print_condition_ref(false), 
-          print_catalog(false),
-          print_catalog_ref(false),
-          print_tabprop(false)
-      {     }
+      DDDBContext() = default;
+      /// Initializing constructor
+      DDDBContext(Detector* d);
       /// Default destructor
       ~DDDBContext()  {
       }
@@ -244,8 +233,15 @@ namespace dd4hep {
         }
         geo->conditionPaths[path] = object.ptr();
       }
-    };
+    } s_config;
+
+    /// Initializing constructor
+    DDDBContext::DDDBContext(Detector* d)   {
+      *this = s_config;
+      description = d;
+    }
 
+    
     /// Converter to incept processing exceptions
     /**   \ingroup DD4HEP_DDDB
      */
@@ -317,6 +313,8 @@ namespace dd4hep {
     template <> void Conv<DDDBZPlane>::convert(xml_h element) const;
     template <> void Conv<dddb>::convert(xml_h element) const;
     template <> void Conv<DDDBLogVol>::convert(xml_h element) const;
+    template <> void Conv<DDDBBlock>::convert(xml_h element) const;
+    template <> void Conv<DDDBConfig>::convert(xml_h element) const;
     template <> void Conv<DDDBLogVolRef>::convert(xml_h element) const;
     template <> void Conv<DDDBPhysVol>::convert(xml_h element) const;
     template <> void Conv<DDDBParamPhysVol>::convert(xml_h element) const;
@@ -445,14 +443,17 @@ namespace dd4hep {
     }
 
     void fixCatalogs(DDDBContext* context)  {
-      dddb* geo = context->geo;
+      dddb*       geo = context->geo;
+      DDDBReader* rdr = context->resolver;
       for(dddb::Catalogs::iterator i=geo->catalogs.begin(); i!=geo->catalogs.end(); ++i)  {
         DDDBCatalog* det = (*i).second;
         for(dddb::Catalogs::iterator j=det->catalogrefs.begin(); j!=det->catalogrefs.end(); ++j)  {
           const string& child_id = (*j).first;
           dddb::Catalogs::const_iterator k = geo->catalogs.find(child_id);
           if ( k == geo->catalogs.end() )   {
-            printout(ERROR,"fixCatalogs","++  MISSING ID: %s child:%s",det->id.c_str(),child_id.c_str());
+            if ( !rdr->isBlocked(child_id) )  {
+              printout(ERROR,"fixCatalogs","++  MISSING ID: %s child:%s",det->id.c_str(),child_id.c_str());
+            }
             continue;
           }
           DDDBCatalog* c = (*k).second;
@@ -464,12 +465,16 @@ namespace dd4hep {
         for(dddb::Volumes::iterator j=det->logvolrefs.begin(); j!=det->logvolrefs.end(); ++j)  {
           DDDBLogVol* c = (*j).second;
           if ( !c )  {
-            printout(ERROR,"fixCatalogs","++  MISSING Volume: %s child:%s",det->id.c_str(),(*j).first.c_str());
+            if ( !rdr->isBlocked(det->id) )  {
+              printout(ERROR,"fixCatalogs","++  MISSING Volume: %s child:%s",det->id.c_str(),(*j).first.c_str());
+            }
             continue;
           }
           dddb::Volumes::const_iterator k = geo->volumes.find(c->id);
           if ( k == geo->volumes.end() )   {
-            printout(ERROR,"fixCatalogs","++  MISSING VolID: %s child:%s",det->id.c_str(),c->id.c_str());
+            if ( !rdr->isBlocked(det->id) )  {
+              printout(ERROR,"fixCatalogs","++  MISSING VolID: %s child:%s",det->id.c_str(),c->id.c_str());
+            }
           }
           det->logvols[c->name] = c;
           if ( 0 == (*j).second )  {
@@ -758,6 +763,52 @@ namespace dd4hep {
       det->params[name] = make_pair(type,value);
     }
 
+    /// Specialized conversion of <param/> entities
+    template <> void Conv<DDDBBlock>::convert(xml_h element) const {
+      DDDBContext* context = _param<DDDBContext>();
+      context->resolver->blockPath(element.attr<string>(_U(name)));
+    }
+
+    /// Specialized conversion of <param/> entities
+    template <> void Conv<DDDBConfig>::convert(xml_h element) const {
+      DDDBContext* ctx = &s_config;
+      for(xml_coll_t c(element,_U(param)); c; ++c)   {
+        xml_dim_t p = c;
+        if ( p.nameStr() == "print_file_load" )
+          ctx->print_file_load = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_xml" )
+          ctx->print_xml = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_docs" )
+          ctx->print_docs = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_materials" )
+          ctx->print_materials = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_logvol" )
+          ctx->print_logvol = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_shapes" )
+          ctx->print_shapes = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_physvol" )
+          ctx->print_physvol = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_params" )
+          ctx->print_params = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_detelem" )
+          ctx->print_detelem = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_detelem_ref" )
+          ctx->print_detelem_ref = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_detelem_xml" )
+          ctx->print_detelem_xml = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_condition" )
+          ctx->print_condition = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_condition_ref" )
+          ctx->print_condition_ref = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_catalog" )
+          ctx->print_catalog = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_catalog_ref" )
+          ctx->print_catalog_ref = p.attr<bool>(_U(value));
+        else if ( p.nameStr() == "print_tabprop" )
+          ctx->print_tabprop = p.attr<bool>(_U(value));
+      }
+    }
+
     /// Specialized conversion of <ConditionInfo/> entities
     template <> void Conv<DDDBConditionInfo>::convert(xml_h element) const {
       DDDBCatalog* det  = _option<DDDBCatalog>();
@@ -1562,6 +1613,8 @@ namespace dd4hep {
     template <> void Conv<dddb>::convert(xml_h e) const {
       DDDBCatalog* catalog = 0;
       DDDBContext* context = _param<DDDBContext>();
+      xml_coll_t(e, _LBU(block)).for_each(Conv<DDDBBlock>(description,context,catalog));
+      xml_coll_t(e, _U(config)).for_each(Conv<DDDBConfig>(description,context,catalog));
       xml_coll_t(e, _U(parameter)).for_each(Conv<DDDBParameter>(description,context,catalog));
       xml_coll_t(e, _U(isotope)).for_each(Conv<DDDBIsotope>(description,context,catalog));
       xml_coll_t(e, _U(element)).for_each(Conv<DDDBElement>(description,context,catalog));
@@ -1733,7 +1786,7 @@ namespace dd4hep {
       size_t hash = ref.find("#");
       if ( hash != 0 )  {
         try {
-          xml::UriReader*    rdr       = context->resolver;
+          DDDBReader*        rdr       = context->resolver;
           DDDBReaderContext* ctx       = (DDDBReaderContext*)rdr->context();
           string doc_path = element.ptr() ? reference_href(element,ref) : ref;
           if ( ref == ctx->match+"/Conditions/Online" )
@@ -1766,41 +1819,46 @@ namespace dd4hep {
           xml_doc->context.valid_until = 0;//ctx->valid_until;
           docs.insert(make_pair(doc_path,xml_doc->addRef()));
 
-          xml::UriContextReader reader(rdr, &xml_doc->context);
-          xml_doc_holder_t doc(xml_handler_t().load(fp, &reader));
-          xml_h e = doc.root();
-          context->print(xml_doc);
-          //if ( str_upper(doc_path).find("/VP/") != string::npos )
-          printout(DEBUG,"load_dddb","Loading document: %s IOV: %ld [%ld,%ld]",
-                    xml_doc->id.c_str(), 
-                    xml_doc->context.event_time,
-                    xml_doc->context.valid_since,
-                    xml_doc->context.valid_until);
-
-          if ( e )   {
-            if ( !key.empty() )  {
-              stringstream str;
-              xml::dump_tree(e, str);
-              string buffer = str.str();
-              while( (idx=buffer.find("-KEY-")) != string::npos )
-                buffer.replace(idx,5,key);
-              doc.assign(xml_handler_t().parse(buffer.c_str(),
-                                               buffer.length(),
-                                               doc_path.c_str(),
-                                               &reader));
-              e = doc.root();
+          if ( !rdr->isBlocked(doc_path) )   {
+            xml::UriContextReader reader(rdr, &xml_doc->context);
+            xml_doc_holder_t doc(xml_handler_t().load(fp, &reader));
+            xml_h e = doc.root();
+            context->print(xml_doc);
+            printout(context->print_file_load ? INFO : DEBUG,
+                     "load_dddb","Loading document: %s IOV: %ld [%ld,%ld]",
+                     xml_doc->id.c_str(), 
+                     xml_doc->context.event_time,
+                     xml_doc->context.valid_since,
+                     xml_doc->context.valid_until);
+
+            if ( e )   {
+              if ( !key.empty() )  {
+                stringstream str;
+                xml::dump_tree(e, str);
+                string buffer = str.str();
+                while( (idx=buffer.find("-KEY-")) != string::npos )
+                  buffer.replace(idx,5,key);
+                doc.assign(xml_handler_t().parse(buffer.c_str(),
+                                                 buffer.length(),
+                                                 doc_path.c_str(),
+                                                 &reader));
+                e = doc.root();
+              }
+              DDDBContext::PreservedLocals locals(context);
+              context->locals.xml_doc  = xml_doc;
+              Conv<ACTION> converter(*context->description, context, catalog);
+              context->print_condition = prt;
+              if ( prt || context->print_xml )  xml::dump_tree(e);
+              converter(e);
             }
-            DDDBContext::PreservedLocals locals(context);
-            context->locals.xml_doc  = xml_doc;
-            Conv<ACTION> converter(context->description, context, catalog);
-            context->print_condition = prt;
-            if ( prt || context->print_xml )  xml::dump_tree(e);
-            converter(e);
+            return;
           }
+          printout(context->print_file_load ? INFO : DEBUG,
+                   "load_dddb","Ignore BLOCKED load %s",ref.c_str());
         }
         catch(const exception& e)  {
-          printout(INFO,"load_dddb","Failed to load %s [%s]",ref.c_str(),e.what());
-        }
+          printout(INFO,"load_dddb","Failed to load %s [%s]",ref.c_str(),e.what()); 
+       }
         catch(...)   {
           printout(INFO,"load_dddb","Failed to load %s",ref.c_str());
         }
@@ -1808,9 +1866,10 @@ namespace dd4hep {
     }
 
     void config_context(DDDBContext& context, 
-                        xml::UriReader* rdr, 
+                        DDDBHelper*  hlp, 
                         const std::string& doc_path,
                         const std::string& obj_path)  {
+      DDDBReader*         rdr     = hlp->reader<DDDBReader>();
       DDDBReaderContext*  ctx     = (DDDBReaderContext*)rdr->context();
       DDDBDocument*       doc     = new DDDBDocument();
       doc->name                   = obj_path;
@@ -1823,21 +1882,6 @@ namespace dd4hep {
       context.locals.obj_path     = obj_path;
       context.locals.xml_doc      = doc;
       context.geo->documents.insert(make_pair("Initial_dummy_doc",doc->addRef()));
-      context.print_xml           = false;
-
-      context.print_docs          = false;
-      context.print_materials     = false;
-      context.print_logvol        = false;
-      context.print_shapes        = false;
-      context.print_physvol       = false;
-      context.print_params        = false;
-      context.print_detelem       = false;
-      context.print_detelem_ref   = false;
-      context.print_detelem_xml   = false;
-      context.print_condition     = false;
-      context.print_condition_ref = false;
-      context.print_catalog       = false;
-      context.print_catalog_ref   = false;
     }
 
     /// Plugin entry point.
@@ -1847,7 +1891,7 @@ namespace dd4hep {
       if ( hlp )   {
         xml::UriReader*    rdr = hlp->xmlReader();
         DDDBReaderContext* ctx = (DDDBReaderContext*)rdr->context();
-        DDDBContext ctxt(description);
+        DDDBContext ctxt(&description);
         string sys_id = ctx->match+"//lhcb.xml";
         string obj_path = "/";
         if ( argc == 0 )   {
@@ -1873,7 +1917,7 @@ namespace dd4hep {
           ctx->valid_since = iov_start;
           ctx->valid_until = iov_end;
         }
-        config_context(ctxt, rdr, sys_id, obj_path);
+        config_context(ctxt, hlp, sys_id, obj_path);
         load_dddb_entity<ACTION>(&ctxt,0,0,ctxt.locals.xml_doc->id);
         checkParents( &ctxt );
         fixCatalogs( &ctxt );
@@ -1898,10 +1942,10 @@ namespace dd4hep {
     long load_dddb_from_handle(Detector& description, xml_h element) {
       DDDBHelper* helper = description.extension<DDDBHelper>(false);
       if ( helper )   {
-        DDDBContext context(description);
+        DDDBContext context(&description);
         xml::UriReader* rdr = helper->xmlReader();
         DDDBReaderContext*  ctx = (DDDBReaderContext*)rdr->context();
-        config_context(context, helper->xmlReader(), ctx->match+"//lhcb.xml", "/");
+        config_context(context, helper, ctx->match+"//lhcb.xml", "/");
         /// Convert the XML information
         Conv<dddb> converter(description, &context);
         converter( element );
diff --git a/examples/DDDB/src/plugins/DDDB2Objects.cpp b/examples/DDDB/src/plugins/DDDB2Objects.cpp
index 5ae1987871bc7287e026617558efc543d79bfc99..4f7aa6d5139f5db7b9e3b784ac25800b088b4c67 100644
--- a/examples/DDDB/src/plugins/DDDB2Objects.cpp
+++ b/examples/DDDB/src/plugins/DDDB2Objects.cpp
@@ -19,8 +19,9 @@
 
 // Framework includes
 #include "DDDB/DDDBTags.h"
-#include "DDDB/DDDBDimension.h"
 #include "DDDB/DDDBHelper.h"
+#include "DDDB/DDDBReader.h"
+#include "DDDB/DDDBDimension.h"
 #include "DDDB/DDDBConversion.h"
 
 #include "DD4hep/Detector.h"
@@ -62,7 +63,8 @@ namespace dd4hep {
     struct Context  {
       typedef set<string> StringSet;
 
-      Context(Detector& l, dddb* g) : description(l), geo(g)      {
+      Context(Detector& l, DDDB::DDDBHelper* h) : description(l), geo(h->detectorDescription()), helper(h)     {
+        reader = h->reader<DDDB::DDDBReader>();
       }
       ~Context()  {
         //printout(INFO,"Context","Destructor calling....");
@@ -77,6 +79,7 @@ namespace dd4hep {
       Detector&   description;
       DDDB::dddb*       geo = 0;
       DDDB::DDDBHelper* helper = 0;
+      DDDB::DDDBReader* reader = 0;
       typedef std::map<DDDBIsotope*,  TGeoIsotope*>   Isotopes;
       typedef std::map<DDDBElement*,  TGeoElement*>   Elements;
       typedef std::map<DDDBMaterial*, TGeoMedium*>    Materials;
@@ -162,8 +165,9 @@ namespace dd4hep {
       }
     };
 
-    template <typename T> struct CNV : Converter<T,T*>  {
+    template <typename T> struct CNV : public Converter<T,T*>  {
     public:
+      typedef Converter<T,T*> Base_t;
       /// Initializing constructor of the functor with initialization of the user parameter
       CNV(Detector& l, void* p, void* o=0) : Converter<T,T*>(l,p,o) {}
       template<typename Q> CNV<Q> cnv() const {  return CNV<Q>(this->description,this->param,this->optional);   }
@@ -180,6 +184,9 @@ namespace dd4hep {
             operator()(arg.second);
             return;
           }
+          Context* c = (Context*)this->Base_t::param;//_param<Context>();
+          if ( c && c->reader && c->reader->isBlocked(arg.first) )
+            return;
           printout(INFO,typeName(typeid(T)),"SKIP invalid object: %s",arg.first.c_str());
         }
         catch(const exception& e)  {
@@ -212,8 +219,8 @@ namespace dd4hep {
     template <> void* CNV<GeoCondition>::convert(GeoCondition *obj) const   {
       if ( obj )   {
         typedef IOV::Key _K;
-        Context* context = _param<Context>();
-        Condition cond = obj;
+        Context*      context = _param<Context>();
+        Condition        cond = obj;
         AbstractMap&        d = cond.get<AbstractMap>();
         DDDBDocument*     doc = d.option<DDDBDocument>();
         _K::first_type  since = doc->context.valid_since;
@@ -610,6 +617,8 @@ namespace dd4hep {
           if ( !place.isValid() )  {
             Volume daughter = this->get<Volume>(pv->logvol);
             if ( !daughter.isValid() )  {
+              if ( context->reader && context->reader->isBlocked(pv->c_id()) )
+                continue;
               printout(WARNING,"Cnv<PhysVol>","++ Failed to convert placement: %s."
                        " Unknown daughter vol:%s.",pv->c_id(), pv->logvol.c_str());
               continue;
@@ -1047,8 +1056,7 @@ namespace dd4hep {
     long dddb_2_dd4hep(Detector& description, int , char** ) {
       DDDBHelper* helper = description.extension<DDDBHelper>(false);
       if ( helper )   {
-        Context context(description, helper->detectorDescription());
-        context.helper              = helper;
+        Context context(description, helper);
         context.print_materials     = false;
         context.print_logvol        = false;
         context.print_shapes        = false;
@@ -1089,8 +1097,7 @@ namespace dd4hep {
     long dddb_conditions_2_dd4hep(Detector& description, int , char** ) {
       DDDBHelper* helper = description.extension<DDDBHelper>(false);
       if ( helper )   {
-        Context context(description, helper->detectorDescription());
-        context.helper              = helper;
+        Context context(description, helper);
         context.print_conditions    = false;
         context.conditions_only     = true;
         CNV<dddb> cnv(description,&context);