diff --git a/src/init.cpp b/src/init.cpp
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -1958,8 +1958,6 @@
         return false;
     }
 
-    fIsBareMultisigStd =
-        args.GetBoolArg("-permitbaremultisig", DEFAULT_PERMIT_BAREMULTISIG);
     fAcceptDatacarrier =
         args.GetBoolArg("-datacarrier", DEFAULT_ACCEPT_DATACARRIER);
 
diff --git a/src/kernel/mempool_options.h b/src/kernel/mempool_options.h
--- a/src/kernel/mempool_options.h
+++ b/src/kernel/mempool_options.h
@@ -36,6 +36,7 @@
      */
     CFeeRate min_relay_feerate_per_kb{DEFAULT_MIN_RELAY_TX_FEE_PER_KB};
     CFeeRate dust_relay_feerate{DUST_RELAY_TX_FEE};
+    bool permit_bare_multisig{DEFAULT_PERMIT_BAREMULTISIG};
     bool require_standard{true};
 };
 } // namespace kernel
diff --git a/src/mempool_args.cpp b/src/mempool_args.cpp
--- a/src/mempool_args.cpp
+++ b/src/mempool_args.cpp
@@ -8,6 +8,7 @@
 
 #include <chainparams.h>
 #include <consensus/amount.h>
+#include <policy/policy.h>
 #include <tinyformat.h>
 #include <util/error.h>
 #include <util/moneystr.h>
@@ -56,6 +57,9 @@
         mempool_opts.dust_relay_feerate = CFeeRate(n);
     }
 
+    mempool_opts.permit_bare_multisig =
+        argsman.GetBoolArg("-permitbaremultisig", DEFAULT_PERMIT_BAREMULTISIG);
+
     mempool_opts.require_standard =
         !argsman.GetBoolArg("-acceptnonstdtxn", !chainparams.RequireStandard());
     if (!chainparams.IsTestChain() && !mempool_opts.require_standard) {
diff --git a/src/policy/settings.h b/src/policy/settings.h
--- a/src/policy/settings.h
+++ b/src/policy/settings.h
@@ -14,7 +14,6 @@
 
 // Policy settings which are configurable at runtime.
 extern uint32_t nBytesPerSigCheck;
-extern bool fIsBareMultisigStd;
 
 static inline int64_t GetVirtualTransactionSize(int64_t nSize,
                                                 int64_t nSigChecks) {
diff --git a/src/policy/settings.cpp b/src/policy/settings.cpp
--- a/src/policy/settings.cpp
+++ b/src/policy/settings.cpp
@@ -5,5 +5,4 @@
 
 #include <policy/settings.h>
 
-bool fIsBareMultisigStd = DEFAULT_PERMIT_BAREMULTISIG;
 uint32_t nBytesPerSigCheck = DEFAULT_BYTES_PER_SIGCHECK;
diff --git a/src/txmempool.h b/src/txmempool.h
--- a/src/txmempool.h
+++ b/src/txmempool.h
@@ -479,6 +479,7 @@
     const std::chrono::seconds m_expiry;
     const CFeeRate m_min_relay_feerate;
     const CFeeRate m_dust_relay_feerate;
+    const bool m_permit_bare_multisig;
     const bool m_require_standard;
 
     /**
diff --git a/src/txmempool.cpp b/src/txmempool.cpp
--- a/src/txmempool.cpp
+++ b/src/txmempool.cpp
@@ -162,6 +162,7 @@
     : m_check_ratio(opts.check_ratio), m_max_size_bytes{opts.max_size_bytes},
       m_expiry{opts.expiry}, m_min_relay_feerate{opts.min_relay_feerate_per_kb},
       m_dust_relay_feerate{opts.dust_relay_feerate},
+      m_permit_bare_multisig{opts.permit_bare_multisig},
       m_require_standard{opts.require_standard} {
     // lock free clear
     _clear();
diff --git a/src/validation.cpp b/src/validation.cpp
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -519,8 +519,8 @@
     // Rather not work on nonstandard transactions (unless -testnet)
     std::string reason;
     if (m_pool.m_require_standard &&
-        !IsStandardTx(tx, ::fIsBareMultisigStd, m_pool.m_dust_relay_feerate,
-                      reason)) {
+        !IsStandardTx(tx, m_pool.m_permit_bare_multisig,
+                      m_pool.m_dust_relay_feerate, reason)) {
         return state.Invalid(TxValidationResult::TX_NOT_STANDARD, reason);
     }