diff --git a/rts/IOManager.c b/rts/IOManager.c
index a818a69110f74f819872dcb6670d741426e3f4d8..383b042a00f7051b17b75e491a5deee645ed08f2 100644
--- a/rts/IOManager.c
+++ b/rts/IOManager.c
@@ -502,6 +502,11 @@ void syncIOWaitReady(Capability   *cap USED_IF_NOT_THREADS,
     }
 }
 
+#if defined(IOMGR_ENABLED_SELECT)
+static void insertIntoSleepingQueue(Capability *cap, StgTSO *tso, LowResTime target);
+#endif
+
+
 void syncDelay(Capability *cap, StgTSO *tso, HsInt us_delay)
 {
     ASSERT(tso->why_blocked == NotBlocked);
@@ -559,7 +564,15 @@ void appendToIOBlockedQueue(Capability *cap, StgTSO *tso)
 #endif
 
 #if defined(IOMGR_ENABLED_SELECT)
-void insertIntoSleepingQueue(Capability *cap, StgTSO *tso, LowResTime target)
+/* Insert a thread into the queue of threads blocked on timers.
+ *
+ * This is used by the select() I/O manager implementation only.
+ *
+ * The sleeping queue is defined for other non-threaded I/O managers but not
+ * used. This is a wart that should be excised.
+ */
+// TODO: move to Select.c and rename
+static void insertIntoSleepingQueue(Capability *cap, StgTSO *tso, LowResTime target)
 {
     CapIOManager *iomgr = cap->iomgr;
     StgTSO *prev = NULL;
diff --git a/rts/IOManager.h b/rts/IOManager.h
index c599e72f80be163e62bc0cdf46eea418c2a4a6fd..55d6239b5d458e0566d97a42299d7f3aeaecec50 100644
--- a/rts/IOManager.h
+++ b/rts/IOManager.h
@@ -286,22 +286,13 @@ void syncIOWaitReady(Capability *cap, StgTSO *tso, IOReadOrWrite rw, HsInt fd);
 
 void syncDelay(Capability *cap, StgTSO *tso, HsInt us_delay);
 
-#if !defined(THREADED_RTS)
+#if defined(IOMGR_ENABLED_SELECT) || defined(IOMGR_ENABLED_WIN32_LEGACY)
 /* Add a thread to the end of the queue of threads blocked on I/O.
  *
  * This is used by the select() and the Windows MIO non-threaded I/O manager
- * implementation.
+ * implementation. Called from CMM code.
  */
 void appendToIOBlockedQueue(Capability *cap, StgTSO *tso);
-
-/* Insert a thread into the queue of threads blocked on timers.
- *
- * This is used by the select() I/O manager implementation only.
- *
- * The sleeping queue is defined for other non-threaded I/O managers but not
- * used. This is a wart that should be excised.
- */
-void insertIntoSleepingQueue(Capability *cap, StgTSO *tso, LowResTime target);
 #endif
 
 /* Check to see if there are any pending timeouts or I/O operations