diff --git a/src/avalanche/test/stakingrewards_tests.cpp b/src/avalanche/test/stakingrewards_tests.cpp
--- a/src/avalanche/test/stakingrewards_tests.cpp
+++ b/src/avalanche/test/stakingrewards_tests.cpp
@@ -22,13 +22,6 @@
 
         gArgs.ForceSetArg("-avalanche", "1");
 
-        bilingual_str error;
-        g_avalanche = avalanche::Processor::MakeProcessor(
-            *m_node.args, *m_node.chain, m_node.connman.get(),
-            *Assert(m_node.chainman), m_node.mempool.get(), *m_node.scheduler,
-            error);
-
-        BOOST_CHECK(g_avalanche);
         BOOST_CHECK(isAvalancheEnabled(gArgs));
 
         // Before Cowperthwaite activation
@@ -56,11 +49,6 @@
         BOOST_CHECK_EQUAL(IsStakingRewardsActivated(params, &block),
                           expectActivation);
 
-        // If g_avalanche is null, staking rewards are disabled
-        g_avalanche.reset(nullptr);
-        BOOST_CHECK(!g_avalanche);
-        BOOST_CHECK(!IsStakingRewardsActivated(params, &block));
-
         gArgs.ClearForcedArg("-avalanche");
     }
 };
diff --git a/src/policy/block/stakingrewards.h b/src/policy/block/stakingrewards.h
--- a/src/policy/block/stakingrewards.h
+++ b/src/policy/block/stakingrewards.h
@@ -15,18 +15,24 @@
 struct Params;
 }
 
+namespace avalanche {
+class Processor;
+}
+
 class StakingRewardsPolicy : public ParkingPolicy {
 private:
+    const avalanche::Processor &m_avalanche;
     const CBlock &m_block;
     const Amount &m_blockReward;
     const Consensus::Params &m_consensusParams;
     const CBlockIndex &m_blockIndex;
 
 public:
-    StakingRewardsPolicy(const Consensus::Params &consensusParams,
+    StakingRewardsPolicy(const avalanche::Processor &avalanche,
+                         const Consensus::Params &consensusParams,
                          const CBlockIndex &blockIndex, const CBlock &block,
                          const Amount &blockReward)
-        : m_block(block), m_blockReward(blockReward),
+        : m_avalanche(avalanche), m_block(block), m_blockReward(blockReward),
           m_consensusParams(consensusParams), m_blockIndex(blockIndex) {}
 
     bool operator()(BlockPolicyValidationState &state) override;
diff --git a/src/policy/block/stakingrewards.cpp b/src/policy/block/stakingrewards.cpp
--- a/src/policy/block/stakingrewards.cpp
+++ b/src/policy/block/stakingrewards.cpp
@@ -32,8 +32,8 @@
 
     std::vector<CScript> winners;
     if (!IsStakingRewardsActivated(m_consensusParams, m_blockIndex.pprev) ||
-        !g_avalanche->getStakingRewardWinners(
-            m_blockIndex.pprev->GetBlockHash(), winners)) {
+        !m_avalanche.getStakingRewardWinners(m_blockIndex.pprev->GetBlockHash(),
+                                             winners)) {
         LogPrint(BCLog::AVALANCHE,
                  "Staking rewards for block %s: not ready yet\n",
                  blockhash.ToString());
@@ -76,8 +76,7 @@
 
 bool IsStakingRewardsActivated(const Consensus::Params &params,
                                const CBlockIndex *pprev) {
-    return IsCowperthwaiteEnabled(params, pprev) && g_avalanche &&
-           isAvalancheEnabled(gArgs) &&
+    return IsCowperthwaiteEnabled(params, pprev) && isAvalancheEnabled(gArgs) &&
            gArgs.GetBoolArg("-avalanchestakingrewards",
                             params.enableStakingRewards);
 }
diff --git a/src/validation.cpp b/src/validation.cpp
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -2651,8 +2651,8 @@
             if (g_avalanche) {
                 parkingPolicies.emplace_back(
                     std::make_unique<StakingRewardsPolicy>(
-                        consensusParams, *pindexNew, blockConnecting,
-                        blockReward));
+                        *g_avalanche, consensusParams, *pindexNew,
+                        blockConnecting, blockReward));
 
                 if (m_mempool) {
                     parkingPolicies.emplace_back(