diff --git a/src/avalanche/test/processor_tests.cpp b/src/avalanche/test/processor_tests.cpp
--- a/src/avalanche/test/processor_tests.cpp
+++ b/src/avalanche/test/processor_tests.cpp
@@ -138,10 +138,6 @@
                                                       *m_node.addrman);
         m_connman = connman.get();
         m_node.connman = std::move(connman);
-        m_node.peerman = ::PeerManager::make(
-            *m_connman, *m_node.addrman, m_node.banman.get(), *m_node.chainman,
-            *m_node.mempool, false);
-        m_node.chain = interfaces::MakeChain(m_node, config.GetChainParams());
 
         // Get the processor ready.
         setArg("-avaminquorumstake", "0");
@@ -154,6 +150,11 @@
             *Assert(m_node.chainman), m_node.mempool.get(), *m_node.scheduler,
             error);
         BOOST_CHECK(m_processor);
+
+        m_node.peerman = ::PeerManager::make(
+            *m_connman, *m_node.addrman, m_node.banman.get(), *m_node.chainman,
+            *m_node.mempool, false);
+        m_node.chain = interfaces::MakeChain(m_node, config.GetChainParams());
     }
 
     ~AvalancheTestingSetup() {
diff --git a/src/init.cpp b/src/init.cpp
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -2520,17 +2520,7 @@
 
     ChainstateManager &chainman = *Assert(node.chainman);
 
-    assert(!node.peerman);
-    node.peerman = PeerManager::make(
-        *node.connman, *node.addrman, node.banman.get(), chainman,
-        *node.mempool, args.GetBoolArg("-blocksonly", DEFAULT_BLOCKSONLY));
-    RegisterValidationInterface(node.peerman.get());
-
-    // Encoded addresses using cashaddr instead of base58.
-    // We do this by default to avoid confusion with BTC addresses.
-    config.SetCashAddrEncoding(args.GetBoolArg("-usecashaddr", true));
-
-    // Step 7.5 (I guess ?): Initialize Avalanche.
+    // Initialize Avalanche.
     bilingual_str avalancheError;
     g_avalanche = avalanche::Processor::MakeProcessor(
         args, *node.chain, node.connman.get(), chainman, node.mempool.get(),
@@ -2545,6 +2535,16 @@
         nLocalServices = ServiceFlags(nLocalServices | NODE_AVALANCHE);
     }
 
+    assert(!node.peerman);
+    node.peerman = PeerManager::make(
+        *node.connman, *node.addrman, node.banman.get(), chainman,
+        *node.mempool, args.GetBoolArg("-blocksonly", DEFAULT_BLOCKSONLY));
+    RegisterValidationInterface(node.peerman.get());
+
+    // Encoded addresses using cashaddr instead of base58.
+    // We do this by default to avoid confusion with BTC addresses.
+    config.SetCashAddrEncoding(args.GetBoolArg("-usecashaddr", true));
+
     // Step 8: load indexers
     if (args.GetBoolArg("-txindex", DEFAULT_TXINDEX)) {
         auto result{
@@ -2905,13 +2905,13 @@
         },
         DUMP_BANS_INTERVAL);
 
+    // Start Avalanche's event loop.
+    g_avalanche->startEventLoop(*node.scheduler);
+
     if (node.peerman) {
         node.peerman->StartScheduledTasks(*node.scheduler);
     }
 
-    // Start Avalanche's event loop.
-    g_avalanche->startEventLoop(*node.scheduler);
-
 #if HAVE_SYSTEM
     StartupNotify(args);
 #endif