diff --git a/include/MetaDataPropagatingRegisterDecorator.h b/include/MetaDataPropagatingRegisterDecorator.h
index 8a56a57c9049a3a811248b9ba76eabd934c24926..4ab371e3510e8bca59369741951ff310d577ea32 100644
--- a/include/MetaDataPropagatingRegisterDecorator.h
+++ b/include/MetaDataPropagatingRegisterDecorator.h
@@ -30,6 +30,10 @@ namespace ChimeraTK {
 
     /** value of validity flag from last read operation */
     DataValidity lastValidity{DataValidity::ok};
+
+    using TransferElement::_dataValidity;
+    using NDRegisterAccessorDecorator<T>::_target;
+    using NDRegisterAccessorDecorator<T>::buffer_2D;
   };
 
   DECLARE_TEMPLATE_FOR_CHIMERATK_USER_TYPES(MetaDataPropagatingRegisterDecorator);
diff --git a/src/MetaDataPropagatingRegisterDecorator.cc b/src/MetaDataPropagatingRegisterDecorator.cc
index b79fbb68e5f1d5b7b28b4a47d5d94579b95f7929..e283826beecd013b6bb9059348458b925647ff65 100644
--- a/src/MetaDataPropagatingRegisterDecorator.cc
+++ b/src/MetaDataPropagatingRegisterDecorator.cc
@@ -13,26 +13,30 @@ namespace ChimeraTK {
     }
 
     // Check if the data validity flag changed. If yes, propagate this information to the owning module.
-    auto valid = ChimeraTK::NDRegisterAccessorDecorator<T>::dataValidity();
-    if(valid != lastValidity) {
-      if(valid == DataValidity::faulty)
+    if(_dataValidity != lastValidity) {
+      if(_dataValidity == DataValidity::faulty)
         _owner->incrementDataFaultCounter();
       else
         _owner->decrementDataFaultCounter();
-      lastValidity = valid;
+      lastValidity = _dataValidity;
     }
   }
 
   template<typename T>
   void MetaDataPropagatingRegisterDecorator<T>::doPreWrite(TransferType type, VersionNumber versionNumber) {
-    if(TransferElement::_dataValidity == DataValidity::faulty) { // the application has manualy set the validity to faulty
-      ChimeraTK::NDRegisterAccessorDecorator<T>::setDataValidity(DataValidity::faulty);
+    // We cannot use NDRegisterAccessorDecorator<T> here because we need a different implementation of setting the target data validity.
+    // So we have a complete implemetation here.
+    if(_dataValidity == DataValidity::faulty) { // the application has manualy set the validity to faulty
+      _target->setDataValidity(DataValidity::faulty);
     }
     else { // automatic propagation of the owner validity
-      ChimeraTK::NDRegisterAccessorDecorator<T>::setDataValidity(_owner->getDataValidity());
+      _target->setDataValidity(_owner->getDataValidity());
     }
 
-    NDRegisterAccessorDecorator<T, T>::doPreWrite(type, versionNumber);
+    for(unsigned int i = 0; i < _target->getNumberOfChannels(); ++i) {
+      buffer_2D[i].swap(_target->accessChannel(i));
+    }
+    _target->preWrite(type, versionNumber);
   }
 
 } // namespace ChimeraTK