Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision 15c93d8dc2a6afe8295f13d58068f954432143b0)
+++ libcfa/src/concurrency/invoke.h	(revision cd5b58fc76b159ad81278f9373a3ebf2c3563d5b)
@@ -195,11 +195,11 @@
 		struct __monitor_group_t monitors;
 
-		// used to put threads on dlist data structure
+		// intrusive link fields, used for locks, monitors and any user defined data structure
+		// default link fields for dlist
 		__cfa_dlink1(thread$) user_link;
 
-		struct {
-			struct thread$ * next;
-			struct thread$ * prev;
-		} node;
+		// secondary intrusive link fields, used for global cluster list
+		// default link fields for dlist
+		__cfa_dlink2(thread$, cltr_link);
 
 		// used to store state between clh lock/unlock
@@ -230,11 +230,10 @@
 	#ifdef __cforall
 	extern "Cforall" {
+		static inline thread$ * volatile & ?`next ( thread$ * this ) {
+			return this->user_link.next;
+		}
 
 		static inline thread$ *& get_next( thread$ & this ) __attribute__((const)) {
 			return this.user_link.next;
-		}
-
-		static inline [thread$ *&, thread$ *& ] __get( thread$ & this ) __attribute__((const)) {
-			return this.node.[next, prev];
 		}
 
@@ -244,4 +243,7 @@
 			return result;
 		}
+
+		P9_EMBEDDED(thread$, thread$.cltr_link)
+		P9_EMBEDDED(thread$.cltr_link, dlink(thread$))
 
 		static inline void ?{}(__monitor_group_t & this) {
Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision 15c93d8dc2a6afe8295f13d58068f954432143b0)
+++ libcfa/src/concurrency/kernel.hfa	(revision cd5b58fc76b159ad81278f9373a3ebf2c3563d5b)
@@ -256,5 +256,5 @@
 	// List of threads
 	__spinlock_t thread_list_lock;
-	__dllist_t(struct thread$) threads;
+	dlist(struct thread$, thread$.cltr_link) threads;
 	unsigned int nthreads;
 
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision 15c93d8dc2a6afe8295f13d58068f954432143b0)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision cd5b58fc76b159ad81278f9373a3ebf2c3563d5b)
@@ -535,6 +535,4 @@
 	#endif
 
-	node.next = 0p;
-	node.prev = 0p;
 	doregister(curr_cluster, this);
 
@@ -659,5 +657,5 @@
 	#endif
 
-	threads{ __get };
+	threads{};
 
 	io.arbiter = create();
@@ -739,5 +737,5 @@
 	lock      (cltr->thread_list_lock __cfaabi_dbg_ctx2);
 	cltr->nthreads += 1;
-	push_front(cltr->threads, thrd);
+	insert_first(cltr->threads, thrd);
 	unlock    (cltr->thread_list_lock);
 }
@@ -745,6 +743,10 @@
 void unregister( cluster * cltr, thread$ & thrd ) {
 	lock  (cltr->thread_list_lock __cfaabi_dbg_ctx2);
-	remove(cltr->threads, thrd );
-	cltr->nthreads -= 1;
+	{
+		tytagref( dlink(thread$), dlink(thread$) ) ?`inner( thread$ & this ) = void;
+		with( DLINK_VIA( thread$, thread$.cltr_link ) )
+			remove( thrd );
+		cltr->nthreads -= 1;
+	}
 	unlock(cltr->thread_list_lock);
 }
Index: libcfa/src/concurrency/thread.cfa
===================================================================
--- libcfa/src/concurrency/thread.cfa	(revision 15c93d8dc2a6afe8295f13d58068f954432143b0)
+++ libcfa/src/concurrency/thread.cfa	(revision cd5b58fc76b159ad81278f9373a3ebf2c3563d5b)
@@ -54,7 +54,4 @@
 	#endif
 
-	node.next = 0p;
-	node.prev = 0p;
-
 	clh_node = malloc( );
 	*clh_node = false;
