diff --git a/rts/Sparks.c b/rts/Sparks.c
index b5581ca65a6909fd5bcefdbc874ad53536e3b7a7..c978ad95b950b9c3897add5711e4438c30713143 100644
--- a/rts/Sparks.c
+++ b/rts/Sparks.c
@@ -16,7 +16,7 @@
 #include "Sparks.h"
 #include "ThreadLabels.h"
 #include "sm/NonMovingMark.h"
-#include "sm/HeapAlloc.h"
+#include "rts/storage/HeapAlloc.h"
 
 #if defined(THREADED_RTS)
 
diff --git a/rts/sm/HeapAlloc.h b/rts/include/rts/storage/HeapAlloc.h
similarity index 99%
rename from rts/sm/HeapAlloc.h
rename to rts/include/rts/storage/HeapAlloc.h
index 32210d12974d3d5307e21000dc6daab841cb60c7..e18bdb9c8e9c2bc7c840ec99f9a118db971bdc34 100644
--- a/rts/sm/HeapAlloc.h
+++ b/rts/include/rts/storage/HeapAlloc.h
@@ -8,8 +8,6 @@
 
 #pragma once
 
-#include "BeginPrivate.h"
-
 #if defined(THREADED_RTS)
 // needed for HEAP_ALLOCED below
 extern SpinLock gc_alloc_block_sync;
@@ -227,5 +225,3 @@ StgBool HEAP_ALLOCED_GC(const void *p)
 #else
 # error HEAP_ALLOCED not defined
 #endif
-
-#include "EndPrivate.h"
diff --git a/rts/posix/OSMem.c b/rts/posix/OSMem.c
index c7244630df230a66fe8853abee98bcf6237bc8ae..94c60f441ac9c8a8910beb3535e0631f8ce5b1a9 100644
--- a/rts/posix/OSMem.c
+++ b/rts/posix/OSMem.c
@@ -13,7 +13,7 @@
 
 #include "RtsUtils.h"
 #include "sm/OSMem.h"
-#include "sm/HeapAlloc.h"
+#include "rts/storage/HeapAlloc.h"
 
 #if defined(HAVE_UNISTD_H)
 #include <unistd.h>
diff --git a/rts/rts.cabal b/rts/rts.cabal
index fc1b784b0b36f6d596527ee8a6665caa1aea7930..0083697a70d62dcb9940acd827f92b7068fee81b 100644
--- a/rts/rts.cabal
+++ b/rts/rts.cabal
@@ -303,6 +303,7 @@ library
                         rts/storage/Closures.h
                         rts/storage/FunTypes.h
                         rts/storage/Heap.h
+                        rts/storage/HeapAlloc.h
                         rts/storage/GC.h
                         rts/storage/InfoTables.h
                         rts/storage/MBlock.h
diff --git a/rts/sm/CNF.c b/rts/sm/CNF.c
index 50918d11cf99b9846287b9b88926d9b04a3530a2..b1ecebe010f176c4872094a79a39c0ee2205b3b7 100644
--- a/rts/sm/CNF.c
+++ b/rts/sm/CNF.c
@@ -20,7 +20,7 @@
 #include "Storage.h"
 #include "CNF.h"
 #include "Hash.h"
-#include "HeapAlloc.h"
+#include "rts/storage/HeapAlloc.h"
 #include "BlockAlloc.h"
 #include "Trace.h"
 #include "sm/ShouldCompact.h"
diff --git a/rts/sm/GC.h b/rts/sm/GC.h
index dc7b773e9994564e481ac4f9a4cea1a7bfc04ae6..0beabc8e6d1504a2cc7a5980faa25c3c587522c0 100644
--- a/rts/sm/GC.h
+++ b/rts/sm/GC.h
@@ -13,7 +13,7 @@
 
 #pragma once
 
-#include "HeapAlloc.h"
+#include "rts/storage/HeapAlloc.h"
 
 #include "BeginPrivate.h"
 
diff --git a/rts/sm/NonMoving.h b/rts/sm/NonMoving.h
index 5133e62cb4a3f5ce01b6986912c1504dfe046906..652ae7a3b0d17961fe71fff09985c2b6a693c2b7 100644
--- a/rts/sm/NonMoving.h
+++ b/rts/sm/NonMoving.h
@@ -11,7 +11,7 @@
 #if !defined(CMINUSMINUS)
 
 #include <string.h>
-#include "HeapAlloc.h"
+#include "rts/storage/HeapAlloc.h"
 #include "NonMovingMark.h"
 
 #include "BeginPrivate.h"
diff --git a/rts/sm/NonMovingMark.c b/rts/sm/NonMovingMark.c
index f754e3aea435f3686e403d9d4beca563d4c19e1b..04c5273738dbf513c54896313cf7c0214116218a 100644
--- a/rts/sm/NonMovingMark.c
+++ b/rts/sm/NonMovingMark.c
@@ -14,7 +14,7 @@
 #include "NonMovingShortcut.h"
 #include "NonMoving.h"
 #include "BlockAlloc.h"  /* for countBlocks */
-#include "HeapAlloc.h"
+#include "rts/storage/HeapAlloc.h"
 #include "Task.h"
 #include "Trace.h"
 #include "HeapUtils.h"
diff --git a/rts/sm/Sanity.c b/rts/sm/Sanity.c
index 04c38b1ce05df8dcffe73ffddc9b8725310b4f16..ca88dfab58e36c671193659f45e5de661961bdea 100644
--- a/rts/sm/Sanity.c
+++ b/rts/sm/Sanity.c
@@ -32,7 +32,7 @@
 #include "sm/NonMoving.h"
 #include "sm/NonMovingMark.h"
 #include "Profiling.h" // prof_arena
-#include "HeapAlloc.h"
+#include "rts/storage/HeapAlloc.h"
 
 /* -----------------------------------------------------------------------------
    Forward decls.
diff --git a/rts/wasm/OSMem.c b/rts/wasm/OSMem.c
index 88cbc9c2487fe79aabc472de0241d452a4e694d7..ff4217f413e806e89e83c1d6cf4bd5c087689318 100644
--- a/rts/wasm/OSMem.c
+++ b/rts/wasm/OSMem.c
@@ -52,7 +52,7 @@
 
 #include "RtsUtils.h"
 #include "sm/OSMem.h"
-#include "sm/HeapAlloc.h"
+#include "rts/storage/HeapAlloc.h"
 
 #include <__macro_PAGESIZE.h>
 
diff --git a/rts/win32/OSMem.c b/rts/win32/OSMem.c
index 4c643a97c206c3ea572d3586ea89788de381de87..6cccc4da83d3e74ffe314770e39e60def8606236 100644
--- a/rts/win32/OSMem.c
+++ b/rts/win32/OSMem.c
@@ -8,7 +8,7 @@
 
 #include "Rts.h"
 #include "sm/OSMem.h"
-#include "sm/HeapAlloc.h"
+#include "rts/storage/HeapAlloc.h"
 #include "RtsUtils.h"
 
 #include <windows.h>