Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision 33c29521d96b892e096419a2fd8beb867e2596f6)
+++ kernel/generic/src/proc/task.c	(revision 340ba25c2f8130a721b2922fb366df05945df18e)
@@ -41,4 +41,5 @@
 #include <mm/slab.h>
 #include <atomic.h>
+#include <synch/futex.h>
 #include <synch/spinlock.h>
 #include <synch/waitq.h>
@@ -153,5 +154,4 @@
 	
 	irq_spinlock_initialize(&task->lock, "task_t_lock");
-	mutex_initialize(&task->futexes_lock, MUTEX_PASSIVE);
 	
 	list_initialize(&task->threads);
@@ -165,4 +165,7 @@
 	spinlock_initialize(&task->active_calls_lock, "active_calls_lock");
 	list_initialize(&task->active_calls);
+	
+	mutex_initialize(&task->futex_list_lock, MUTEX_PASSIVE);
+	list_initialize(&task->futex_list);
 	
 #ifdef CONFIG_UDEBUG
@@ -221,5 +224,5 @@
 		(void) ipc_phone_connect(&task->phones[0], ipc_phone_0);
 	
-	btree_create(&task->futexes);
+	futex_task_init(task);
 	
 	/*
@@ -262,5 +265,5 @@
 	 * Free up dynamically allocated state.
 	 */
-	btree_destroy(&task->futexes);
+	futex_task_deinit(task);
 	
 	/*
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision 33c29521d96b892e096419a2fd8beb867e2596f6)
+++ kernel/generic/src/proc/thread.c	(revision 340ba25c2f8130a721b2922fb366df05945df18e)
@@ -518,5 +518,5 @@
 			 */
 			ipc_cleanup();
-			futex_cleanup();
+			futex_task_cleanup();
 			LOG("Cleanup of task %" PRIu64" completed.", TASK->taskid);
 		}
