Index: src/libcfa/concurrency/threads
===================================================================
--- src/libcfa/concurrency/threads	(revision 78b3f524dae38189ed4f479ebdc4c6f51903a1f1)
+++ src/libcfa/concurrency/threads	(revision 5c811054a9b733b08300e7eaa7910d929010469d)
@@ -18,49 +18,15 @@
 #define __THREADS_H__
 
-#include <stdbool.h>
-
-extern "C" {
-      struct coVtable {
-            void (*main)(void*);
-            struct coroutine* (*this_coroutine)(void*);
-      };
-
-      struct coStack_t {
-            unsigned int size;		// size of stack
-            void *storage;			// pointer to stack
-            void *limit;			// stack grows towards stack limit
-            void *base;				// base of stack
-            void *context;			// address of cfa_context_t
-            void *top;				// address of top of storage
-            bool userStack;	
-      };
-
-
-      enum coroutine_state { Start, Inactive, Active, Halt };
-
-      struct coroutine {
-            coStack_t stack;
-            const char *name;			// textual name for coroutine/task, initialized by uC++ generated code
-            int errno_;				// copy of global UNIX variable errno
-            coroutine_state state;	      // current execution status for coroutine
-            bool notHalted;			// indicate if execuation state is not halted
-
-            coroutine *starter;		// first coroutine to resume this one
-            coroutine *last;			// last coroutine to resume this one
-      };
-}
+#include "invoke.h"
 
 void ?{}(coStack_t* this);
 
 void ?{}(coroutine* this);
+void ?{}(coroutine* this, covptr_t* object);
 
 trait coroutine_t(dtype T) {
-      coroutine* this_coroutine(T* this);
       void co_main(T* this);
-      coVtable* vtable(T* this);
+      covptr_t* vtable(T* this);
 };
-
-forall(dtype T | coroutine_t(T))
-void start(T* cor);
 
 void suspend(void);
