diff --git a/src/VariableNetworkNode.cc b/src/VariableNetworkNode.cc
index 01fe8135720147b88b15ca560a8183bfc03f11aa..5ba14e187c827509bda53d455baa723c10e9463b 100644
--- a/src/VariableNetworkNode.cc
+++ b/src/VariableNetworkNode.cc
@@ -394,21 +394,21 @@ namespace ChimeraTK {
   /*********************************************************************************************************************/
 
   VariableNetworkNode::InitialValueMode VariableNetworkNode::hasInitialValue() const {
-    if(getType() == NodeType::ControlSystem) {
-      return InitialValueMode::Push;
-    }
-    if(getType() == NodeType::Device || getType() == NodeType::Constant) {
-      if(getOwner().getTriggerType() == VariableNetwork::TriggerType::feeder) {
-        return InitialValueMode::Poll;
-      }
-      else {
-        assert(getOwner().getTriggerType() == VariableNetwork::TriggerType::external ||
-            getOwner().getTriggerType() == VariableNetwork::TriggerType::pollingConsumer);
+    if(getDirection().dir == VariableDirection::feeding) {
+      if(getType() == NodeType::ControlSystem) {
         return InitialValueMode::Push;
       }
-    }
-    assert(getType() == NodeType::Application);
-    if(getDirection().dir == VariableDirection::feeding) {
+      if(getType() == NodeType::Device || getType() == NodeType::Constant) {
+        if(getOwner().getTriggerType() == VariableNetwork::TriggerType::feeder) {
+          return InitialValueMode::Poll;
+        }
+        else {
+          assert(getOwner().getTriggerType() == VariableNetwork::TriggerType::external ||
+              getOwner().getTriggerType() == VariableNetwork::TriggerType::pollingConsumer);
+          return InitialValueMode::Push;
+        }
+      }
+      assert(getType() == NodeType::Application);
       if(pdata->hasInitialValue) {
         return InitialValueMode::Push;
       }
@@ -416,7 +416,22 @@ namespace ChimeraTK {
         return InitialValueMode::None;
       }
     }
-    return getOwner().getFeedingNode().hasInitialValue();
+    else {
+      auto feederInitialValue = getOwner().getFeedingNode().hasInitialValue();
+      if(getOwner().countConsumingNodes() == 1) {
+        return feederInitialValue;
+      }
+      else {
+        if(feederInitialValue != InitialValueMode::None) {
+          // More then one consuming node: FanOut in between. Need to wait for FanOut to process the initial value!
+          // If the FanOut is a ConsumingFanOut, InitialValueMode::Push doesn't hurt as that fan out is always poll-type
+          return InitialValueMode::Push;
+        }
+        else {
+          return InitialValueMode::None;
+        }
+      }
+    }
   }
 
 } // namespace ChimeraTK