Index: libcfa/src/concurrency/coroutine.cfa
===================================================================
--- libcfa/src/concurrency/coroutine.cfa	(revision c715e5ff6f93573553c28ad82808e7e566136c47)
+++ libcfa/src/concurrency/coroutine.cfa	(revision 1df492a157311639c92151e6df741fe232bef7d6)
@@ -62,5 +62,5 @@
 forall(T & | is_coroutine(T))
 void __cfaehm_cancelled_coroutine(
-		T & cor, coroutine$ * desc, EHM_DEFAULT_VTABLE(CoroutineCancelled, (T)) ) libcfa_public {
+		T & cor, coroutine$ * desc, EHM_DEFAULT_VTABLE(CoroutineCancelled(T)) ) libcfa_public {
 	verify( desc->cancellation );
 	desc->state = Cancelled;
@@ -146,5 +146,5 @@
 // Part of the Public API
 // Not inline since only ever called once per coroutine
-forall(T & | is_coroutine(T) | { EHM_DEFAULT_VTABLE(CoroutineCancelled, (T)); })
+forall(T & | is_coroutine(T) | { EHM_DEFAULT_VTABLE(CoroutineCancelled(T)); })
 void prime(T& cor) libcfa_public {
 	coroutine$* this = get_coroutine(cor);
Index: libcfa/src/concurrency/coroutine.hfa
===================================================================
--- libcfa/src/concurrency/coroutine.hfa	(revision c715e5ff6f93573553c28ad82808e7e566136c47)
+++ libcfa/src/concurrency/coroutine.hfa	(revision 1df492a157311639c92151e6df741fe232bef7d6)
@@ -38,5 +38,5 @@
 // Anything that implements this trait can be resumed.
 // Anything that is resumed is a coroutine.
-trait is_coroutine(T & | IS_RESUMPTION_EXCEPTION(CoroutineCancelled, (T))) {
+trait is_coroutine(T & | IS_RESUMPTION_EXCEPTION(CoroutineCancelled(T))) {
 	void main(T & this);
 	coroutine$ * get_coroutine(T & this);
@@ -61,5 +61,5 @@
 //-----------------------------------------------------------------------------
 // Public coroutine API
-forall(T & | is_coroutine(T) | { EHM_DEFAULT_VTABLE(CoroutineCancelled, (T)); })
+forall(T & | is_coroutine(T) | { EHM_DEFAULT_VTABLE(CoroutineCancelled(T)); })
 void prime(T & cor);
 
@@ -140,8 +140,8 @@
 forall(T & | is_coroutine(T))
 void __cfaehm_cancelled_coroutine(
-	T & cor, coroutine$ * desc, EHM_DEFAULT_VTABLE(CoroutineCancelled, (T)) );
+	T & cor, coroutine$ * desc, EHM_DEFAULT_VTABLE(CoroutineCancelled(T)) );
 
 // Resume implementation inlined for performance
-forall(T & | is_coroutine(T) | { EHM_DEFAULT_VTABLE(CoroutineCancelled, (T)); })
+forall(T & | is_coroutine(T) | { EHM_DEFAULT_VTABLE(CoroutineCancelled(T)); })
 static inline T & resume(T & cor) {
 	// optimization : read TLS once and reuse it
Index: libcfa/src/concurrency/thread.cfa
===================================================================
--- libcfa/src/concurrency/thread.cfa	(revision c715e5ff6f93573553c28ad82808e7e566136c47)
+++ libcfa/src/concurrency/thread.cfa	(revision 1df492a157311639c92151e6df741fe232bef7d6)
@@ -89,6 +89,6 @@
 }
 
-forall(T & | is_thread(T) | IS_EXCEPTION(ThreadCancelled, (T))
-    | { EHM_DEFAULT_VTABLE(ThreadCancelled, (T)); })
+forall(T & | is_thread(T) | IS_EXCEPTION(ThreadCancelled(T))
+    | { EHM_DEFAULT_VTABLE(ThreadCancelled(T)); })
 void ?{}( thread_dtor_guard_t & this,
 		T & thrd, void(*cancelHandler)(ThreadCancelled(T) &)) {
@@ -168,6 +168,6 @@
 
 //-----------------------------------------------------------------------------
-forall(T & | is_thread(T) | IS_RESUMPTION_EXCEPTION(ThreadCancelled, (T))
-    | { EHM_DEFAULT_VTABLE(ThreadCancelled, (T)); })
+forall(T & | is_thread(T) | IS_RESUMPTION_EXCEPTION(ThreadCancelled(T))
+	| { EHM_DEFAULT_VTABLE(ThreadCancelled(T)); })
 T & join( T & this ) {
 	thread_dtor_guard_t guard = { this, defaultResumptionHandler };
Index: libcfa/src/concurrency/thread.hfa
===================================================================
--- libcfa/src/concurrency/thread.hfa	(revision c715e5ff6f93573553c28ad82808e7e566136c47)
+++ libcfa/src/concurrency/thread.hfa	(revision 1df492a157311639c92151e6df741fe232bef7d6)
@@ -80,6 +80,6 @@
 };
 
-forall( T & | is_thread(T) | IS_EXCEPTION(ThreadCancelled, (T))
-    | { EHM_DEFAULT_VTABLE(ThreadCancelled, (T)); })
+forall( T & | is_thread(T) | IS_EXCEPTION(ThreadCancelled(T))
+	| { EHM_DEFAULT_VTABLE(ThreadCancelled(T)); })
 void ?{}( thread_dtor_guard_t & this, T & thrd, void(*)(ThreadCancelled(T) &) );
 void ^?{}( thread_dtor_guard_t & this );
@@ -127,6 +127,6 @@
 //----------
 // join
-forall( T & | is_thread(T) | IS_RESUMPTION_EXCEPTION(ThreadCancelled, (T))
-    | { EHM_DEFAULT_VTABLE(ThreadCancelled, (T)); })
+forall( T & | is_thread(T) | IS_RESUMPTION_EXCEPTION(ThreadCancelled(T))
+	| { EHM_DEFAULT_VTABLE(ThreadCancelled(T)); })
 T & join( T & this );
 
Index: libcfa/src/exception.hfa
===================================================================
--- libcfa/src/exception.hfa	(revision c715e5ff6f93573553c28ad82808e7e566136c47)
+++ libcfa/src/exception.hfa	(revision 1df492a157311639c92151e6df741fe232bef7d6)
@@ -18,17 +18,15 @@
 // -----------------------------------------------------------------------------------------------
 
-// EHM_DEFAULT_VTABLE(exception_name, (arguments))
+// EHM_DEFAULT_VTABLE(exception_type)
 // Create a declaration for a (possibly polymorphic) default vtable.
-#define EHM_DEFAULT_VTABLE(exception_name, arguments) \
-	vtable(exception_name arguments) & const _default_vtable
+// Mostly used by and for the currency module.
+#define EHM_DEFAULT_VTABLE(type) vtable(type) & const _default_vtable
 
-// IS_EXCEPTION(exception_name [, (...parameters)])
-// IS_RESUMPTION_EXCEPTION(exception_name [, (parameters...)])
-// IS_TERMINATION_EXCEPTION(exception_name [, (parameters...)])
-// Create an assertion that exception_name, possibly with the qualifing parameters, is the given
-// kind of exception with the standard vtable with the same parameters if applicable.
-#define IS_EXCEPTION(...) _IS_EXCEPTION(is_exception, __VA_ARGS__, , ~)
-#define IS_RESUMPTION_EXCEPTION(...) _IS_EXCEPTION(is_resumption_exception, __VA_ARGS__, , ~)
-#define IS_TERMINATION_EXCEPTION(...) _IS_EXCEPTION(is_termination_exception, __VA_ARGS__, , ~)
-#define _IS_EXCEPTION(kind, exception_name, parameters, ...) \
-	kind(exception_name parameters, vtable(exception_name parameters))
+// IS_EXCEPTION(exception_type)
+// IS_RESUMPTION_EXCEPTION(exception_type)
+// IS_TERMINATION_EXCEPTION(exception_type)
+// Create an assertion that exception_type is the given kind of exception.
+// This is used to mimic associated types so the vtable type is unmentioned.
+#define IS_EXCEPTION(type) is_exception(type, vtable(type))
+#define IS_RESUMPTION_EXCEPTION(type) is_resumption_exception(type, vtable(type))
+#define IS_TERMINATION_EXCEPTION(type) is_termination_exception(type, vtable(type))
