Index: libcfa/src/bits/defs.hfa
===================================================================
--- libcfa/src/bits/defs.hfa	(revision a757ba179bb7ccc193cf855ee3b82d2d47d342eb)
+++ libcfa/src/bits/defs.hfa	(revision 639e4fc03a02dc79f5ba9c49c73a1e8b6ae95701)
@@ -30,8 +30,6 @@
 #ifdef __cforall
 #define __cfa_anonymous_object(x) inline struct x
-#define __cfa_dlink(x) struct { inline dlink(x); }
 #else
 #define __cfa_anonymous_object(x) struct x __cfa_anonymous_object
-#define __cfa_dlink(x) struct { struct x * next; struct x * back; }
 #endif
 
Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision a757ba179bb7ccc193cf855ee3b82d2d47d342eb)
+++ libcfa/src/concurrency/invoke.h	(revision 639e4fc03a02dc79f5ba9c49c73a1e8b6ae95701)
@@ -146,9 +146,20 @@
 
 	// Link lists fields
-	// instrusive link field for threads
+	// instrusive link field for threads in the ready-queue
 	struct __thread_desc_link {
 		struct thread$ * next;
 		volatile unsigned long long ts;
 	};
+
+	// Link lists fields
+	// instrusive link field for threads in the user_link/cltr_link
+	struct __thread_user_link {
+		#ifdef __cforall
+			inline dlink(thread$);
+		#else
+			struct thread$ * next; struct thread$ * back;
+		#endif
+	};
+	_Static_assert(sizeof(struct __thread_user_link) == 2 * sizeof(struct thread$ *), "__thread_user_link should be consistent in C and Cforall");
 
 	struct thread$ {
@@ -197,9 +208,9 @@
 		// intrusive link fields, used for locks, monitors and any user defined data structure
 		// default link fields for dlist
-		__cfa_dlink(thread$) user_link;
+		struct __thread_user_link user_link;
 
 		// secondary intrusive link fields, used for global cluster list
 		// default link fields for dlist
-		__cfa_dlink(thread$) cltr_link;
+		struct __thread_user_link cltr_link;
 
 		// used to store state between clh lock/unlock
@@ -244,12 +255,12 @@
 		}
 
-		static inline tytagref(typeof(((struct thread$ *)0p)->cltr_link), dlink(thread$)) ?`inner( struct thread$ & this ) {
-			typeof(this.cltr_link) & ib = this.cltr_link;
+		static inline tytagref(struct __thread_user_link, dlink(thread$)) ?`inner( struct thread$ & this ) {
+			struct __thread_user_link & ib = this.cltr_link;
 			dlink(thread$) & b = ib`inner;
-			tytagref(typeof(this.cltr_link), dlink(thread$)) result = { b };
+			tytagref(struct __thread_user_link, dlink(thread$)) result = { b };
 			return result;
 		}
 
-		P9_EMBEDDED(typeof(((struct thread$ *)0p)->cltr_link), dlink(thread$))
+		P9_EMBEDDED(struct __thread_user_link, dlink(thread$))
 
 		static inline void ?{}(__monitor_group_t & this) {
Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision a757ba179bb7ccc193cf855ee3b82d2d47d342eb)
+++ libcfa/src/concurrency/kernel.hfa	(revision 639e4fc03a02dc79f5ba9c49c73a1e8b6ae95701)
@@ -250,5 +250,5 @@
 	// List of threads
 	__spinlock_t thread_list_lock;
-	dlist(struct thread$, typeof(((struct thread$ *)0p)->cltr_link)) threads;
+	dlist(struct thread$, struct __thread_user_link) threads;
 	unsigned int nthreads;
 
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision a757ba179bb7ccc193cf855ee3b82d2d47d342eb)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision 639e4fc03a02dc79f5ba9c49c73a1e8b6ae95701)
@@ -377,10 +377,4 @@
 	register_tls( proc );
 
-	// io_future_t future;
-	// eventfd_t idle_buf;
-	// proc->idle_wctx.ftr = &future;
-	// proc->idle_wctx.rdbuf = &idle_buf;
-
-
 	// SKULLDUGGERY: We want to create a context for the processor coroutine
 	// which is needed for the 2-step context switch. However, there is no reason
@@ -737,5 +731,5 @@
 	{
 		tytagref( dlink(thread$), dlink(thread$) ) ?`inner( thread$ & this ) = void;
-		with( DLINK_VIA( thread$, typeof(((struct thread$ *)0p)->cltr_link) ) )
+		with( DLINK_VIA( thread$, struct __thread_user_link ) )
 			remove( thrd );
 		cltr->nthreads -= 1;
