Index: src/libcfa/concurrency/invoke.c
===================================================================
--- src/libcfa/concurrency/invoke.c	(revision 348006f9bbb24c9257fa8be8d10695e6da14597d)
+++ src/libcfa/concurrency/invoke.c	(revision 9f1695b6330182a20c37121261ecfa8d045ebd62)
@@ -56,4 +56,5 @@
 
 void CtxInvokeThread(
+      void (*dtor)(void *), 
       void (*main)(void *), 
       struct thread_desc *(*get_thread)(void *), 
Index: src/libcfa/concurrency/thread
===================================================================
--- src/libcfa/concurrency/thread	(revision 348006f9bbb24c9257fa8be8d10695e6da14597d)
+++ src/libcfa/concurrency/thread	(revision 9f1695b6330182a20c37121261ecfa8d045ebd62)
@@ -28,4 +28,5 @@
 // Anything that is resumed is a coroutine.
 trait is_thread(dtype T) {
+      void ^?{}(T* this);
       void main(T* this);
       thread_desc* get_thread(T* this);
@@ -64,5 +65,5 @@
 void ?{}( scoped(T)* this, P params );
 
-forall( dtype T | sized(T) | is_thread(T) | { void ^?{}(T*); } )
+forall( dtype T | sized(T) | is_thread(T) )
 void ^?{}( scoped(T)* this );
 
Index: src/libcfa/concurrency/thread.c
===================================================================
--- src/libcfa/concurrency/thread.c	(revision 348006f9bbb24c9257fa8be8d10695e6da14597d)
+++ src/libcfa/concurrency/thread.c	(revision 9f1695b6330182a20c37121261ecfa8d045ebd62)
@@ -64,5 +64,5 @@
 }
 
-forall( dtype T | sized(T) | is_thread(T) | { void ^?{}(T*); } )
+forall( dtype T | sized(T) | is_thread(T) )
 void ^?{}( scoped(T)* this ) {
 	stop(&this->handle);
