Index: libcfa/src/concurrency/coroutine.cfa
===================================================================
--- libcfa/src/concurrency/coroutine.cfa	(revision c41c2dbeee7cb1fdf1bbdad8a54a92cf7c4dd0f3)
+++ libcfa/src/concurrency/coroutine.cfa	(revision b5831132d4fbaaf40970357ae0e068daa9ad3e5e)
@@ -46,6 +46,4 @@
 
 //-----------------------------------------------------------------------------
-EHM_VIRTUAL_TABLE(SomeCoroutineCancelled, std_coroutine_cancelled);
-
 forall(T &)
 void copy(CoroutineCancelled(T) * dst, CoroutineCancelled(T) * src) {
@@ -62,5 +60,6 @@
 // This code should not be inlined. It is the error path on resume.
 forall(T & | is_coroutine(T))
-void __cfaehm_cancelled_coroutine( T & cor, $coroutine * desc ) {
+void __cfaehm_cancelled_coroutine(
+		T & cor, $coroutine * desc, _EHM_VTABLE_TYPE(CoroutineCancelled)(T) & const _default_vtable ) {
 	verify( desc->cancellation );
 	desc->state = Cancelled;
@@ -68,10 +67,10 @@
 
 	// TODO: Remove explitate vtable set once trac#186 is fixed.
-	SomeCoroutineCancelled except;
-	except.virtual_table = &std_coroutine_cancelled;
+	CoroutineCancelled(T) except;
+	except.virtual_table = &_default_vtable;
 	except.the_coroutine = &cor;
 	except.the_exception = except;
 	// Why does this need a cast?
-	throwResume (SomeCoroutineCancelled &)except;
+	throwResume (CoroutineCancelled(T) &)except;
 
 	except->virtual_table->free( except );
@@ -146,5 +145,5 @@
 // Part of the Public API
 // Not inline since only ever called once per coroutine
-forall(T & | is_coroutine(T))
+forall(T & | is_coroutine(T) | { _EHM_VTABLE_TYPE(CoroutineCancelled)(T) & const _default_vtable; })
 void prime(T& cor) {
 	$coroutine* this = get_coroutine(cor);
Index: libcfa/src/concurrency/coroutine.hfa
===================================================================
--- libcfa/src/concurrency/coroutine.hfa	(revision c41c2dbeee7cb1fdf1bbdad8a54a92cf7c4dd0f3)
+++ libcfa/src/concurrency/coroutine.hfa	(revision b5831132d4fbaaf40970357ae0e068daa9ad3e5e)
@@ -22,11 +22,4 @@
 //-----------------------------------------------------------------------------
 // Exception thrown from resume when a coroutine stack is cancelled.
-EHM_EXCEPTION(SomeCoroutineCancelled)(
-	void * the_coroutine;
-	exception_t * the_exception;
-);
-
-EHM_EXTERN_VTABLE(SomeCoroutineCancelled, std_coroutine_cancelled);
-
 EHM_FORALL_EXCEPTION(CoroutineCancelled, (coroutine_t &), (coroutine_t)) (
 	coroutine_t * the_coroutine;
@@ -44,5 +37,5 @@
 // Anything that implements this trait can be resumed.
 // Anything that is resumed is a coroutine.
-trait is_coroutine(T & | IS_RESUMPTION_EXCEPTION(SomeCoroutineCancelled)) {
+trait is_coroutine(T & | IS_RESUMPTION_EXCEPTION(CoroutineCancelled, (T))) {
 	void main(T & this);
 	$coroutine * get_coroutine(T & this);
@@ -67,5 +60,5 @@
 //-----------------------------------------------------------------------------
 // Public coroutine API
-forall(T & | is_coroutine(T))
+forall(T & | is_coroutine(T) | { _EHM_VTABLE_TYPE(CoroutineCancelled)(T) & const _default_vtable; })
 void prime(T & cor);
 
@@ -137,8 +130,9 @@
 
 forall(T & | is_coroutine(T))
-void __cfaehm_cancelled_coroutine( T & cor, $coroutine * desc );
+void __cfaehm_cancelled_coroutine(
+	T & cor, $coroutine * desc, _EHM_VTABLE_TYPE(CoroutineCancelled)(T) & const _default_vtable );
 
 // Resume implementation inlined for performance
-forall(T & | is_coroutine(T))
+forall(T & | is_coroutine(T) | { _EHM_VTABLE_TYPE(CoroutineCancelled)(T) & const _default_vtable; })
 static inline T & resume(T & cor) {
 	// optimization : read TLS once and reuse it
@@ -170,5 +164,5 @@
 	$ctx_switch( src, dst );
 	if ( unlikely(dst->cancellation) ) {
-		__cfaehm_cancelled_coroutine( cor, dst );
+		__cfaehm_cancelled_coroutine( cor, dst, _default_vtable );
 	}
 
Index: libcfa/src/exception.hfa
===================================================================
--- libcfa/src/exception.hfa	(revision c41c2dbeee7cb1fdf1bbdad8a54a92cf7c4dd0f3)
+++ libcfa/src/exception.hfa	(revision b5831132d4fbaaf40970357ae0e068daa9ad3e5e)
@@ -142,8 +142,4 @@
 		_EHM_VTABLE_TYPE(exception_name) parameters const &) {} \
 
-#define _EHM_TRAIT_FUNCTION2(exception_name, forall_clause, parameters) \
-	forall_clause _EHM_VTABLE_TYPE(exception_name) parameters const & \
-			get_exception_vtable(exception_name parameters const & this)
-
 #define __EHM_TRAIT_FUNCTION(exception_name, forall_clause, parameters) \
 	forall_clause inline _EHM_VTABLE_TYPE(exception_name) parameters const & \
