Index: libcfa/src/bits/defs.hfa
===================================================================
--- libcfa/src/bits/defs.hfa	(revision 28372f752c60dd8bfb05c05d98e1a4f9e184259c)
+++ libcfa/src/bits/defs.hfa	(revision 13edbac1cf5821f9ebcf609f25db2fd5d06ea480)
@@ -30,8 +30,8 @@
 #ifdef __cforall
 #define __cfa_anonymous_object(x) inline struct x
-#define __cfa_dlink(x) inline dlink(x)
+#define __cfa_dlink1(x) dlink(x)
 #else
 #define __cfa_anonymous_object(x) struct x __cfa_anonymous_object
-#define __cfa_dlink(x) struct { struct x * next; struct x * back; } __dlink_substitute
+#define __cfa_dlink1(x) struct { struct x * next; struct x * back; }
 #endif
 
Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision 28372f752c60dd8bfb05c05d98e1a4f9e184259c)
+++ libcfa/src/concurrency/invoke.h	(revision 13edbac1cf5821f9ebcf609f25db2fd5d06ea480)
@@ -196,5 +196,5 @@
 
 		// used to put threads on dlist data structure
-		__cfa_dlink(thread$);
+		__cfa_dlink1(thread$) user_link;
 
 		struct {
@@ -218,7 +218,5 @@
 		#endif
 	};
-	#ifdef __cforall
-		P9_EMBEDDED( thread$, dlink(thread$) )
-	#endif
+
 	// Wrapper for gdb
 	struct cfathread_thread_t { struct thread$ debug; };
@@ -241,4 +239,10 @@
 		}
 
+		static inline tytagref( dlink(thread$), dlink(thread$) ) ?`inner( thread$ & this ) {
+			dlink(thread$) & b = this.user_link;
+			tytagref( dlink(thread$), dlink(thread$) ) result = { b };
+			return result;
+		}
+
 		static inline void ?{}(__monitor_group_t & this) {
 			(this.data){0p};
