diff --git a/src/net_processing.cpp b/src/net_processing.cpp
index 55d404d91..5a7c998af 100644
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -892,7 +892,7 @@ void PeerLogicValidation::UpdatedBlockTip(const CBlockIndex *pindexNew, const CB
     const int nNewHeight = pindexNew->nHeight;
     connman->SetBestHeight(nNewHeight);
 
-    g_initial_block_download_completed = !fInitialDownload;
+    SetServiceFlagsIBDCache(!fInitialDownload);
     if (!fInitialDownload) {
         // Find the hashes of all blocks that weren't previously in the best chain.
         std::vector<uint256> vHashes;
diff --git a/src/protocol.cpp b/src/protocol.cpp
index ea78ab685..2ec26fbd3 100644
--- a/src/protocol.cpp
+++ b/src/protocol.cpp
@@ -12,7 +12,7 @@
 # include <arpa/inet.h>
 #endif
 
-std::atomic<bool> g_initial_block_download_completed(false);
+static std::atomic<bool> g_initial_block_download_completed(false);
 
 namespace NetMsgType {
 const char *VERSION="version";
@@ -129,6 +129,17 @@ bool CMessageHeader::IsValid(const MessageStartChars& pchMessageStartIn) const
 }
 
 
+ServiceFlags GetDesirableServiceFlags(ServiceFlags services) {
+    if ((services & NODE_NETWORK_LIMITED) && g_initial_block_download_completed) {
+        return ServiceFlags(NODE_NETWORK_LIMITED | NODE_WITNESS);
+    }
+    return ServiceFlags(NODE_NETWORK | NODE_WITNESS);
+}
+
+void SetServiceFlagsIBDCache(bool state) {
+    g_initial_block_download_completed = state;
+}
+
 
 CAddress::CAddress() : CService()
 {
diff --git a/src/protocol.h b/src/protocol.h
index 4907c38e5..e518d1194 100644
--- a/src/protocol.h
+++ b/src/protocol.h
@@ -278,7 +278,6 @@ enum ServiceFlags : uint64_t {
     // BIP process.
 };
 
-extern std::atomic<bool> g_initial_block_download_completed;
 /**
  * Gets the set of service flags which are "desirable" for a given peer.
  *
@@ -303,12 +302,10 @@ extern std::atomic<bool> g_initial_block_download_completed;
  * If the NODE_NONE return value is changed, contrib/seeds/makeseeds.py
  * should be updated appropriately to filter for the same nodes.
  */
-static ServiceFlags GetDesirableServiceFlags(ServiceFlags services) {
-    if ((services & NODE_NETWORK_LIMITED) && g_initial_block_download_completed) {
-        return ServiceFlags(NODE_NETWORK_LIMITED | NODE_WITNESS);
-    }
-    return ServiceFlags(NODE_NETWORK | NODE_WITNESS);
-}
+ServiceFlags GetDesirableServiceFlags(ServiceFlags services);
+
+/** Set the current IBD status in order to figure out the desirable service flags */
+void SetServiceFlagsIBDCache(bool status);
 
 /**
  * A shortcut for (services & GetDesirableServiceFlags(services))