diff --git a/src/i_threads.h b/src/i_threads.h
index 878e8c388e138d84f6f9fc4eddeb1f23c180d7c6..45a3dcc3efb1bb9c8952f562fb49a9f336c91546 100644
--- a/src/i_threads.h
+++ b/src/i_threads.h
@@ -32,8 +32,8 @@ void      I_unlock_mutex    (I_mutex);
 
 void      I_hold_cond       (I_cond *, I_mutex);
 
-void      I_wake_one_cond   (I_cond);
-void      I_wake_all_cond   (I_cond);
+void      I_wake_one_cond   (I_cond *);
+void      I_wake_all_cond   (I_cond *);
 
 #endif/*I_THREADS_H*/
 #endif/*HAVE_THREADS*/
diff --git a/src/sdl/i_threads.c b/src/sdl/i_threads.c
index 99e574561b3958f841b42f8c324ede87830e8778..078f4e0f46023bf8251d9d7a01ac3da35d78d3d2 100644
--- a/src/sdl/i_threads.c
+++ b/src/sdl/i_threads.c
@@ -323,16 +323,34 @@ I_hold_cond (
 
 void
 I_wake_one_cond (
-		I_cond id
+		I_cond * anchor
 ){
-	if (SDL_CondSignal(id) == -1)
+	SDL_cond * cond;
+
+	cond = Identity(
+			&i_cond_pool,
+			i_cond_pool_mutex,
+			anchor,
+			(Create_fn)SDL_CreateCond
+	);
+
+	if (SDL_CondSignal(cond) == -1)
 		abort();
 }
 
 void
 I_wake_all_cond (
-		I_cond id
+		I_cond * anchor
 ){
-	if (SDL_CondBroadcast(id) == -1)
+	SDL_cond * cond;
+
+	cond = Identity(
+			&i_cond_pool,
+			i_cond_pool_mutex,
+			anchor,
+			(Create_fn)SDL_CreateCond
+	);
+
+	if (SDL_CondBroadcast(cond) == -1)
 		abort();
 }