Index: src/examples/Bench.c
===================================================================
--- src/examples/Bench.c	(revision 8761006c981bbfe64fdcd4be1180bdefc3e3578b)
+++ src/examples/Bench.c	(revision 77e6fcb38c83993c05581d890ecb4e2dd401d874)
@@ -87,5 +87,5 @@
 
 struct CoroutineDummy { coroutine c; };
-DECL_COROUTINE(CoroutineDummy)
+DECL_COROUTINE(CoroutineDummy);
 void main(CoroutineDummy * this) {}
 
@@ -122,5 +122,5 @@
 };
 
-DECL_COROUTINE(CoroutineResume)
+DECL_COROUTINE(CoroutineResume);
 
 void ?{}(CoroutineResume* this, int N) {
@@ -151,5 +151,5 @@
 
 struct ThreadDummy { thread t; };
-DECL_THREAD(ThreadDummy)
+DECL_THREAD(ThreadDummy);
 void main(ThreadDummy * this) {}
 
@@ -183,5 +183,5 @@
 };
 
-DECL_THREAD(ContextSwitch)
+DECL_THREAD(ContextSwitch);
 
 void main(ContextSwitch * this) {    
Index: src/libcfa/concurrency/coroutines
===================================================================
--- src/libcfa/concurrency/coroutines	(revision 8761006c981bbfe64fdcd4be1180bdefc3e3578b)
+++ src/libcfa/concurrency/coroutines	(revision 77e6fcb38c83993c05581d890ecb4e2dd401d874)
@@ -30,5 +30,5 @@
 };
 
-#define DECL_COROUTINE(X) static inline coroutine* get_coroutine(X* this) { return &this->c; } void main(X* this);
+#define DECL_COROUTINE(X) static inline coroutine* get_coroutine(X* this) { return &this->c; } void main(X* this)
 
 //-----------------------------------------------------------------------------
@@ -110,4 +110,22 @@
 }
 
+static inline void resume(coroutine * dst) {
+	coroutine * src = this_coroutine();		// optimization
+
+      // not resuming self ?
+	if ( src != dst ) {
+		assertf( dst->notHalted ,
+			"Attempt by coroutine %.256s (%p) to resume terminated coroutine %.256s (%p).\n"
+			"Possible cause is terminated coroutine's main routine has already returned.",
+			src->name, src, dst->name, dst );
+
+            // set last resumer
+		dst->last = src;
+	} // if
+
+      // always done for performance testing
+	CoroutineCtxSwitch( src, dst );
+}
+
 #endif //COROUTINES_H
 
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 8761006c981bbfe64fdcd4be1180bdefc3e3578b)
+++ src/libcfa/concurrency/kernel.c	(revision 77e6fcb38c83993c05581d890ecb4e2dd401d874)
@@ -43,5 +43,5 @@
 };
 
-DECL_COROUTINE(processorCtx_t)
+DECL_COROUTINE(processorCtx_t);
 
 #define KERNEL_STORAGE(T,X) static char X##_storage[sizeof(T)]
Index: src/libcfa/concurrency/threads
===================================================================
--- src/libcfa/concurrency/threads	(revision 8761006c981bbfe64fdcd4be1180bdefc3e3578b)
+++ src/libcfa/concurrency/threads	(revision 77e6fcb38c83993c05581d890ecb4e2dd401d874)
@@ -32,5 +32,5 @@
 };
 
-#define DECL_THREAD(X) thread* get_thread(X* this) { return &this->t; } void main(X* this);
+#define DECL_THREAD(X) thread* get_thread(X* this) { return &this->t; } void main(X* this)
 
 forall( dtype T | is_thread(T) )
Index: src/tests/thread.c
===================================================================
--- src/tests/thread.c	(revision 8761006c981bbfe64fdcd4be1180bdefc3e3578b)
+++ src/tests/thread.c	(revision 77e6fcb38c83993c05581d890ecb4e2dd401d874)
@@ -7,6 +7,6 @@
 struct Second { thread t; simple_lock* lock; };
 
-DECL_THREAD(First)
-DECL_THREAD(Second)
+DECL_THREAD(First);
+DECL_THREAD(Second);
 
 void ?{}( First * this, simple_lock* lock ) { this->lock = lock; }
