Index: src/libcfa/concurrency/invoke.h
===================================================================
--- src/libcfa/concurrency/invoke.h	(revision 81e1f32b00dbc42e8d4fcf80bc681b25202b8a11)
+++ src/libcfa/concurrency/invoke.h	(revision f7d6bb0e7721f8d5f30652143374537f7c11d251)
@@ -134,4 +134,10 @@
 		// instrusive link field for threads
 		struct thread_desc * next;
+
+		__cfaabi_dbg_debug_do(
+			// instrusive link field for debugging
+			struct thread_desc * dbg_next;
+			struct thread_desc * dbg_prev;
+		)
      };
 
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 81e1f32b00dbc42e8d4fcf80bc681b25202b8a11)
+++ src/libcfa/concurrency/kernel.c	(revision f7d6bb0e7721f8d5f30652143374537f7c11d251)
@@ -609,4 +609,37 @@
 }
 
+//-----------------------------------------------------------------------------
+// Debug
+__cfaabi_dbg_debug_do(
+	struct {
+		thread_desc * tail;
+	} __cfaabi_dbg_thread_list = { NULL };
+
+	void __cfaabi_dbg_thread_register( thread_desc * thrd ) {
+		if( !__cfaabi_dbg_thread_list.tail ) {
+			__cfaabi_dbg_thread_list.tail = thrd;
+			return;
+		}
+		__cfaabi_dbg_thread_list.tail->dbg_next = thrd;
+		thrd->dbg_prev = __cfaabi_dbg_thread_list.tail;
+		__cfaabi_dbg_thread_list.tail = thrd;
+	}
+
+	void __cfaabi_dbg_thread_unregister( thread_desc * thrd ) {
+		thread_desc * prev = thrd->dbg_prev;
+		thread_desc * next = thrd->dbg_next;
+
+		if( next ) { next->dbg_prev = prev; }
+		else       {
+			assert( __cfaabi_dbg_thread_list.tail == thrd );
+			__cfaabi_dbg_thread_list.tail = prev;
+		}
+
+		if( prev ) { prev->dbg_next = next; }
+
+		thrd->dbg_prev = NULL;
+		thrd->dbg_next = NULL;
+	}
+)
 // Local Variables: //
 // mode: c //
Index: src/libcfa/concurrency/kernel_private.h
===================================================================
--- src/libcfa/concurrency/kernel_private.h	(revision 81e1f32b00dbc42e8d4fcf80bc681b25202b8a11)
+++ src/libcfa/concurrency/kernel_private.h	(revision f7d6bb0e7721f8d5f30652143374537f7c11d251)
@@ -85,4 +85,9 @@
 extern void ThreadCtxSwitch(coroutine_desc * src, coroutine_desc * dst);
 
+__cfaabi_dbg_debug_do(
+	extern void __cfaabi_dbg_thread_register  ( thread_desc * thrd );
+	extern void __cfaabi_dbg_thread_unregister( thread_desc * thrd );
+)
+
 //-----------------------------------------------------------------------------
 // Utils
Index: src/libcfa/concurrency/thread.c
===================================================================
--- src/libcfa/concurrency/thread.c	(revision 81e1f32b00dbc42e8d4fcf80bc681b25202b8a11)
+++ src/libcfa/concurrency/thread.c	(revision f7d6bb0e7721f8d5f30652143374537f7c11d251)
@@ -33,9 +33,14 @@
 void ?{}(thread_desc& this) {
 	(this.self_cor){};
-	this.self_cor.name = "Anonymous Coroutine";
+	this.self_cor.name = "Anonymous Thread";
 	this.self_mon.owner = &this;
 	this.self_mon.recursion = 1;
 	this.self_mon_p = &this.self_mon;
 	this.next = NULL;
+	__cfaabi_dbg_debug_do(
+		this.dbg_next = NULL;
+		this.dbg_prev = NULL;
+		__cfaabi_dbg_thread_register(&this);
+	)
 
 	(this.monitors){ &this.self_mon_p, 1, (fptr_t)0 };
@@ -43,4 +48,7 @@
 
 void ^?{}(thread_desc& this) {
+	__cfaabi_dbg_debug_do(
+		__cfaabi_dbg_thread_unregister(&this);
+	)
 	^(this.self_cor){};
 }
