diff --git a/includes/rts/IOInterface.h b/includes/rts/IOInterface.h
index 4c392e2058ea31d41e9d63c8a503efc970c82f36..9a646cc5cf2bfce7c499d53b1899cf33aceea938 100644
--- a/includes/rts/IOInterface.h
+++ b/includes/rts/IOInterface.h
@@ -36,15 +36,3 @@ void     setIOManagerWakeupFd   (int fd);
 
 #endif
 
-/*
- * Communicating with the IO manager thread (see GHC.Conc).
- * Posix implementation in posix/Signals.c
- * Win32 implementation in win32/ThrIOManager.c, Windows's WINIO has the same
- * interfaces for Threaded and Non-threaded I/O, so these methods are always
- * available for WINIO.
-*/
-void ioManagerWakeup (void);
-#if defined(THREADED_RTS) || defined(mingw32_HOST_OS)
-void ioManagerDie (void);
-void ioManagerStart (void);
-#endif
diff --git a/rts/Capability.c b/rts/Capability.c
index a77112650aaeb3272e37f205860dc3e8551122dd..3ef604693bd2282d0751888ab739a103c2a3a5ce 100644
--- a/rts/Capability.c
+++ b/rts/Capability.c
@@ -29,6 +29,7 @@
 #include "RtsUtils.h"
 #include "sm/OSMem.h"
 #include "sm/BlockAlloc.h" // for countBlocks()
+#include "IOManager.h"
 
 #include <string.h>
 
diff --git a/rts/IOManager.h b/rts/IOManager.h
index da322c6e40644c81f86f0418090f6432fb6d1e22..713049305fc57fb558bb52ac3947c9a2112b2bed 100644
--- a/rts/IOManager.h
+++ b/rts/IOManager.h
@@ -21,5 +21,17 @@
 
 #include "BeginPrivate.h"
 
+/*
+ * Communicating with the IO manager thread (see GHC.Conc).
+ * Posix implementation in posix/Signals.c
+ * Win32 implementation in win32/ThrIOManager.c, Windows's WINIO has the same
+ * interfaces for Threaded and Non-threaded I/O, so these methods are always
+ * available for WINIO.
+*/
+void ioManagerWakeup (void);
+#if defined(THREADED_RTS) || defined(mingw32_HOST_OS)
+void ioManagerDie (void);
+void ioManagerStart (void);
+#endif
 
 #include "EndPrivate.h"
diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c
index 79c830f96d1cdefdd26ac6f6351bb6fa31d01e73..7916ad61c80b2e6236d4da7bef6be5d58776efda 100644
--- a/rts/RtsStartup.c
+++ b/rts/RtsStartup.c
@@ -46,6 +46,7 @@
 # include "RetainerProfile.h"
 #endif
 
+#include "IOManager.h"
 #if defined(mingw32_HOST_OS) && !defined(THREADED_RTS)
 #include "win32/AsyncMIO.h"
 #include "win32/AsyncWinIO.h"
diff --git a/rts/RtsSymbols.c b/rts/RtsSymbols.c
index 7cd62faabe57a8c119b8682186d19624cb2b0e10..a3ee8505aea587396efe32d6ed6225d93b11649b 100644
--- a/rts/RtsSymbols.c
+++ b/rts/RtsSymbols.c
@@ -341,7 +341,6 @@
    SymI_HasProto(setIOManagerControlFd) \
    SymI_HasProto(setTimerManagerControlFd) \
    SymI_HasProto(setIOManagerWakeupFd)  \
-   SymI_HasProto(ioManagerWakeup)       \
    SymI_HasProto(blockUserSignals)      \
    SymI_HasProto(unblockUserSignals)
 #else
@@ -350,7 +349,6 @@
    SymI_HasProto(getOverlappedEntries)       \
    SymI_HasProto(completeSynchronousRequest) \
    SymI_HasProto(registerAlertableWait)      \
-   SymI_HasProto(ioManagerWakeup)            \
    SymI_HasProto(sendIOManagerEvent)         \
    SymI_HasProto(readIOManagerEvent)         \
    SymI_HasProto(getIOManagerEvent)          \
diff --git a/rts/Schedule.c b/rts/Schedule.c
index 514832ea6e9dccef1c312b61b90f548fe9272f3d..810a70973bf5a317f492f39353d9c188c0f5bcc4 100644
--- a/rts/Schedule.c
+++ b/rts/Schedule.c
@@ -32,6 +32,7 @@
 #include "Capability.h"
 #include "Task.h"
 #include "AwaitEvent.h"
+#include "IOManager.h"
 #if defined(mingw32_HOST_OS)
 #include "win32/MIOManager.h"
 #include "win32/AsyncWinIO.h"
diff --git a/rts/posix/Signals.c b/rts/posix/Signals.c
index 57b1873c779ef14d445cd3a387eb7ee432263f16..185c69eee3968a11f8077f708546babdd6ebd5a1 100644
--- a/rts/posix/Signals.c
+++ b/rts/posix/Signals.c
@@ -12,6 +12,7 @@
 #include "Schedule.h"
 #include "RtsSignals.h"
 #include "Signals.h"
+#include "IOManager.h"
 #include "RtsUtils.h"
 #include "Prelude.h"
 #include "Ticker.h"