diff --git a/DDCore/include/Parsers/detail/Dimension.h b/DDCore/include/Parsers/detail/Dimension.h
index 6ccb6819d3c06b8c2b1de8c841f2b06635400fe8..4bed941144698979e956a44ff12f73b3e0b94756 100644
--- a/DDCore/include/Parsers/detail/Dimension.h
+++ b/DDCore/include/Parsers/detail/Dimension.h
@@ -724,16 +724,26 @@ namespace dd4hep {
 
       /// Access "name" attribute as STL string
       std::string nameStr() const;
-      /// Access "ref" attribute as a string
-      std::string refStr() const;
+      /// Access "name" attribute as STL string. Return default value if not present
+      std::string nameStr(const std::string& default_value) const;
       /// Access "type" attribute as STL string
       std::string typeStr() const;
+      /// Access "type" attribute as STL string. Return default value if not present
+      std::string typeStr(const std::string& default_value) const;
       /// Access "value" attribute as STL string
       std::string valueStr() const;
+      /// Access "value" attribute as STL string. Return default value if not present
+      std::string valueStr(const std::string& default_value) const;
       /// Access "label" attribute as STL string
       std::string labelStr() const;
+      /// Access "label" attribute as STL string. Return default value if not present
+      std::string labelStr(const std::string& default_value) const;
       /// Access "symbol" attribute as STL string
       std::string symbolStr() const;
+      /// Access "symbol" attribute as STL string. Return default value if not present
+      std::string symbolStr(const std::string& default_value) const;
+      /// Access "ref" attribute as a string
+      std::string refStr() const;
       /// Access "module" attribute as STL string
       std::string moduleStr() const;
       /// Access "readout" attribute as STL string
diff --git a/DDCore/include/Parsers/detail/Dimension.imp b/DDCore/include/Parsers/detail/Dimension.imp
index e9c27e70326b0050b3860579370f3f23f3cf2ff8..baffc9042fddf59e2e00d0268f2e602e9444e2ea 100644
--- a/DDCore/include/Parsers/detail/Dimension.imp
+++ b/DDCore/include/Parsers/detail/Dimension.imp
@@ -240,37 +240,71 @@ XML_CHILD_ACCESSOR_XML_DIM(beampipe)
 XML_CHILD_ACCESSOR_XML_DIM(shape)
 XML_CHILD_ACCESSOR_XML_DIM(solid)
 
-std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::padType() const {
-  return m_element.attr < std::string > (_U(pads));
-}
-
+/// Access "name" attribute as STL std::string
 std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::nameStr() const {
   return m_element.attr < std::string > (_U(name));
 }
 
-std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::refStr() const {
-  return m_element.attr < std::string > (_U(ref));
+/// Access "name" attribute as STL std::string. Return default value if not present
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::nameStr(const std::string& default_value) const {
+  Attribute attr = m_element.attr_nothrow(_U(name));
+  return attr ? m_element.attr < std::string >(attr) : default_value;
 }
 
+/// Access "type" attribute as STL std::string
 std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::typeStr() const {
   return m_element.attr < std::string > (_U(type));
 }
 
+/// Access "type" attribute as STL std::string. Return default value if not present
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::typeStr(const std::string& default_value) const {
+  Attribute attr = m_element.attr_nothrow(_U(type));
+  return attr ? m_element.attr < std::string >(attr) : default_value;
+}
+
 /// Access "value" attribute as STL std::string
 std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::valueStr() const   {
   return m_element.attr < std::string > (_U(value));
 }
 
+/// Access "value" attribute as STL std::string. Return default value if not present
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::valueStr(const std::string& default_value) const   {
+  Attribute attr = m_element.attr_nothrow(_U(value));
+  return attr ? m_element.attr < std::string >(attr) : default_value;
+}
+
 /// Access "label" attribute as STL std::string
 std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::labelStr() const   {
   return m_element.attr < std::string > (_U(label));
 }
 
+/// Access "label" attribute as STL std::string. Return default value if not present
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::labelStr(const std::string& default_value) const   {
+  Attribute attr = m_element.attr_nothrow(_U(label));
+  return attr ? m_element.attr < std::string >(attr) : default_value;
+}
+
 /// Access "symbol" attribute as STL std::string
 std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::symbolStr() const   {
   return m_element.attr < std::string > (_U(symbol));
 }
 
+/// Access "symbol" attribute as STL std::string. Return default value if not present
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::symbolStr(const std::string& default_value) const   {
+  Attribute attr = m_element.attr_nothrow(_U(symbol));
+  return attr ? m_element.attr < std::string >(attr) : default_value;
+}
+
+/// Access "padType" attribute as STL std::string
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::padType() const {
+  return m_element.attr < std::string > (_U(pads));
+}
+
+/// Access "ref" attribute as STL std::string
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::refStr() const {
+  return m_element.attr < std::string > (_U(ref));
+}
+
 /// Access "region" attribute as STL std::string. If not present returns empty string.
 std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::regionStr() const {
   return m_element.hasAttr(_U(region)) ? m_element.attr < std::string > (_U(region)) : std::string();
diff --git a/DDCore/include/XML/UnicodeValues.h b/DDCore/include/XML/UnicodeValues.h
index ec4f9786a29d27d7f4d708e491e4821aafbcda1d..9a41be51e25051a995220101c72de21b96aa0c0a 100644
--- a/DDCore/include/XML/UnicodeValues.h
+++ b/DDCore/include/XML/UnicodeValues.h
@@ -380,6 +380,7 @@ UNICODE (positionRPhiZ);
 UNICODE (pressure);
 UNICODE (projective_cylinder);
 UNICODE (projective_zplane);
+UNICODE (propagate);
 UNICODE (property);
 UNICODE (properties);
 UNICODE (psi);
diff --git a/DDCore/include/XML/XMLElements.h b/DDCore/include/XML/XMLElements.h
index f3c2757c28129caeec06a7a8dd7093b0b81b9946..954f5f3592d745f02332c8ac785fbe5e3c828f4d 100644
--- a/DDCore/include/XML/XMLElements.h
+++ b/DDCore/include/XML/XMLElements.h
@@ -565,6 +565,11 @@ namespace dd4hep {
       return _toString(attr_value(tag_value));
     }
 
+    template <> INLINE Attribute Handle_t::attr<Attribute>(const XmlChar* tag_value, Attribute default_value) const {
+      Attribute a = attr_nothrow(tag_value);
+      return a ? a : default_value;
+    }
+
     template <> INLINE bool Handle_t::attr<bool>(const XmlChar* tag_value, bool default_value) const {
       Attribute a = attr_nothrow(tag_value);
       return a ? _toBool(attr_value(a)) : default_value;