Index: libcfa/src/bits/defs.hfa
===================================================================
--- libcfa/src/bits/defs.hfa	(revision e50d9cb8bcb9d4dee3eb25c5c5ffe27efe455a18)
+++ libcfa/src/bits/defs.hfa	(revision 6a4ef0c58dbf5d0381bd99ba85707bbd8e3b205a)
@@ -30,10 +30,8 @@
 #ifdef __cforall
 #define __cfa_anonymous_object(x) inline struct x
-#define __cfa_dlink1(x) dlink(x)
-#define __cfa_dlink2(x, name) inline struct name { inline dlink(x); }
+#define __cfa_dlink(x) struct { inline dlink(x); }
 #else
 #define __cfa_anonymous_object(x) struct x __cfa_anonymous_object
-#define __cfa_dlink1(x) struct { struct x * next; struct x * back; }
-#define __cfa_dlink2(x, name) struct { struct x * next; struct x * back; } __dlink ## name
+#define __cfa_dlink(x) struct { struct x * next; struct x * back; }
 #endif
 
Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision e50d9cb8bcb9d4dee3eb25c5c5ffe27efe455a18)
+++ libcfa/src/concurrency/invoke.h	(revision 6a4ef0c58dbf5d0381bd99ba85707bbd8e3b205a)
@@ -197,9 +197,9 @@
 		// intrusive link fields, used for locks, monitors and any user defined data structure
 		// default link fields for dlist
-		__cfa_dlink1(thread$) user_link;
+		__cfa_dlink(thread$) user_link;
 
 		// secondary intrusive link fields, used for global cluster list
 		// default link fields for dlist
-		__cfa_dlink2(thread$, cltr_link);
+		__cfa_dlink(thread$) cltr_link;
 
 		// used to store state between clh lock/unlock
@@ -244,6 +244,12 @@
 		}
 
-		P9_EMBEDDED(thread$, thread$.cltr_link)
-		P9_EMBEDDED(thread$.cltr_link, dlink(thread$))
+		static inline tytagref(typeof(((struct thread$ *)0p)->cltr_link), dlink(thread$)) ?`inner( struct thread$ & this ) {
+			typeof(this.cltr_link) & ib = this.cltr_link;
+			dlink(thread$) & b = ib`inner;
+			tytagref(typeof(this.cltr_link), dlink(thread$)) result = { b };
+			return result;
+		}
+
+		P9_EMBEDDED(typeof(((struct thread$ *)0p)->cltr_link), dlink(thread$))
 
 		static inline void ?{}(__monitor_group_t & this) {
Index: libcfa/src/concurrency/kernel.hfa
===================================================================
--- libcfa/src/concurrency/kernel.hfa	(revision e50d9cb8bcb9d4dee3eb25c5c5ffe27efe455a18)
+++ libcfa/src/concurrency/kernel.hfa	(revision 6a4ef0c58dbf5d0381bd99ba85707bbd8e3b205a)
@@ -256,5 +256,5 @@
 	// List of threads
 	__spinlock_t thread_list_lock;
-	dlist(struct thread$, thread$.cltr_link) threads;
+	dlist(struct thread$, typeof(((struct thread$ *)0p)->cltr_link)) threads;
 	unsigned int nthreads;
 
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision e50d9cb8bcb9d4dee3eb25c5c5ffe27efe455a18)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision 6a4ef0c58dbf5d0381bd99ba85707bbd8e3b205a)
@@ -745,5 +745,5 @@
 	{
 		tytagref( dlink(thread$), dlink(thread$) ) ?`inner( thread$ & this ) = void;
-		with( DLINK_VIA( thread$, thread$.cltr_link ) )
+		with( DLINK_VIA( thread$, typeof(((struct thread$ *)0p)->cltr_link) ) )
 			remove( thrd );
 		cltr->nthreads -= 1;
