Index: src/libcfa/concurrency/kernel
===================================================================
--- src/libcfa/concurrency/kernel	(revision 639991aa7d6f4c4ee71eeb5078b858be58b7fa2c)
+++ src/libcfa/concurrency/kernel	(revision a1a17a744695781ffbd73827d771f9063f9c11ba)
@@ -145,4 +145,8 @@
 	__dllist_t(struct processor) idles;
 
+	// List of processors
+	__spinlock_t thread_list_lock;
+	__dllist_t(struct thread_desc) threads;
+
 	// Link lists fields
 	struct {
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 639991aa7d6f4c4ee71eeb5078b858be58b7fa2c)
+++ src/libcfa/concurrency/kernel.c	(revision a1a17a744695781ffbd73827d771f9063f9c11ba)
@@ -49,5 +49,4 @@
 thread_desc * mainThread;
 
-struct { __dllist_t(thread_desc) list; __spinlock_t lock; } global_threads ;
 struct { __dllist_t(cluster    ) list; __spinlock_t lock; } global_clusters;
 
@@ -118,5 +117,5 @@
 	node.next = NULL;
 	node.prev = NULL;
-	doregister(this);
+	doregister(curr_cluster, this);
 
 	monitors{ &self_mon_p, 1, (fptr_t)0 };
@@ -167,4 +166,5 @@
 	procs{ __get };
 	idles{ __get };
+	threads{ __get };
 
 	doregister(this);
@@ -518,6 +518,4 @@
 	__cfaabi_dbg_print_safe("Kernel : Starting\n");
 
-	global_threads. list{ __get };
-	global_threads. lock{};
 	global_clusters.list{ __get };
 	global_clusters.lock{};
@@ -619,4 +617,7 @@
 	^(mainThread){};
 
+	^(global_clusters.list){};
+	^(global_clusters.lock){};
+
 	__cfaabi_dbg_print_safe("Kernel : Shutdown complete\n");
 }
@@ -756,16 +757,4 @@
 //-----------------------------------------------------------------------------
 // Global Queues
-void doregister( thread_desc & thrd ) {
-	lock      ( global_threads.lock __cfaabi_dbg_ctx2);
-	push_front( global_threads.list, thrd );
-	unlock    ( global_threads.lock );
-}
-
-void unregister( thread_desc & thrd ) {
-	lock  ( global_threads.lock __cfaabi_dbg_ctx2);
-	remove( global_threads.list, thrd );
-	unlock( global_threads.lock );
-}
-
 void doregister( cluster     & cltr ) {
 	lock      ( global_clusters.lock __cfaabi_dbg_ctx2);
@@ -780,4 +769,15 @@
 }
 
+void doregister( cluster * cltr, thread_desc & thrd ) {
+	lock      (cltr->thread_list_lock __cfaabi_dbg_ctx2);
+	push_front(cltr->threads, thrd);
+	unlock    (cltr->thread_list_lock);
+}
+
+void unregister( cluster * cltr, thread_desc & thrd ) {
+	lock  (cltr->thread_list_lock __cfaabi_dbg_ctx2);
+	remove(cltr->threads, thrd );
+	unlock(cltr->thread_list_lock);
+}
 
 void doregister( cluster * cltr, processor * proc ) {
Index: src/libcfa/concurrency/kernel_private.h
===================================================================
--- src/libcfa/concurrency/kernel_private.h	(revision 639991aa7d6f4c4ee71eeb5078b858be58b7fa2c)
+++ src/libcfa/concurrency/kernel_private.h	(revision a1a17a744695781ffbd73827d771f9063f9c11ba)
@@ -101,9 +101,9 @@
 
 
-void doregister( struct thread_desc & thrd );
-void unregister( struct thread_desc & thrd );
+void doregister( struct cluster & cltr );
+void unregister( struct cluster & cltr );
 
-void doregister( struct cluster     & cltr );
-void unregister( struct cluster     & cltr );
+void doregister( struct cluster * cltr, struct thread_desc & thrd );
+void unregister( struct cluster * cltr, struct thread_desc & thrd );
 
 void doregister( struct cluster * cltr, struct processor * proc );
Index: src/libcfa/concurrency/thread.c
===================================================================
--- src/libcfa/concurrency/thread.c	(revision 639991aa7d6f4c4ee71eeb5078b858be58b7fa2c)
+++ src/libcfa/concurrency/thread.c	(revision a1a17a744695781ffbd73827d771f9063f9c11ba)
@@ -42,5 +42,5 @@
 	node.next = NULL;
 	node.prev = NULL;
-	doregister(this);
+	doregister(curr_cluster, this);
 
 	monitors{ &self_mon_p, 1, (fptr_t)0 };
@@ -48,5 +48,5 @@
 
 void ^?{}(thread_desc& this) with( this ) {
-	unregister(this);
+	unregister(curr_cluster, this);
 	^self_cor{};
 }
