diff --git a/src/shutdown.h b/src/shutdown.h
--- a/src/shutdown.h
+++ b/src/shutdown.h
@@ -6,6 +6,12 @@
 #ifndef BITCOIN_SHUTDOWN_H
 #define BITCOIN_SHUTDOWN_H
 
+#include <util/translation.h> // For bilingual_str
+
+/** Abort with a message */
+bool AbortNode(const std::string &strMessage,
+               bilingual_str user_message = bilingual_str{});
+
 void StartShutdown();
 void AbortShutdown();
 bool ShutdownRequested();
diff --git a/src/shutdown.cpp b/src/shutdown.cpp
--- a/src/shutdown.cpp
+++ b/src/shutdown.cpp
@@ -5,8 +5,24 @@
 
 #include <shutdown.h>
 
+#include <logging.h>
+#include <node/ui_interface.h>
+#include <warnings.h>
+
 #include <atomic>
 
+bool AbortNode(const std::string &strMessage, bilingual_str user_message) {
+    SetMiscWarning(Untranslated(strMessage));
+    LogPrintf("*** %s\n", strMessage);
+    if (user_message.empty()) {
+        user_message =
+            _("A fatal internal error occurred, see debug.log for details");
+    }
+    AbortError(user_message);
+    StartShutdown();
+    return false;
+}
+
 static std::atomic<bool> fRequestShutdown(false);
 
 void StartShutdown() {
diff --git a/src/validation.cpp b/src/validation.cpp
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -1337,20 +1337,6 @@
     return true;
 }
 
-/** Abort with a message */
-static bool AbortNode(const std::string &strMessage,
-                      bilingual_str user_message = bilingual_str()) {
-    SetMiscWarning(Untranslated(strMessage));
-    LogPrintf("*** %s\n", strMessage);
-    if (!user_message.empty()) {
-        user_message =
-            _("A fatal internal error occurred, see debug.log for details");
-    }
-    AbortError(user_message);
-    StartShutdown();
-    return false;
-}
-
 static bool AbortNode(BlockValidationState &state,
                       const std::string &strMessage,
                       const bilingual_str &userMessage = bilingual_str()) {