Index: libcfa/src/exception.c
===================================================================
--- libcfa/src/exception.c	(revision a7b486b776e12fcb7486b7a30c04e9fa92a6aace)
+++ libcfa/src/exception.c	(revision 29228710928c18a1ba965da56f66e26c00fd3043)
@@ -121,8 +121,5 @@
 
 
-// TERMINATION ===============================================================
-
-// MEMORY MANAGEMENT (still for integers)
-// May have to move to cfa for constructors and destructors (references).
+// MEMORY MANAGEMENT =========================================================
 
 // How to clean up an exception in various situations.
@@ -203,8 +200,5 @@
 }
 
-// If this isn't a rethrow (*except==0), delete the provided exception.
-void __cfaehm_cleanup_terminate( void * except ) {
-	if ( *(void**)except ) __cfaehm_delete_exception( *(exception_t **)except );
-}
+// CANCELLATION ==============================================================
 
 // Function needed by force unwind
@@ -228,4 +222,22 @@
 }
 
+// Cancel the current stack, prefroming approprate clean-up and messaging.
+static __attribute__((noreturn)) void __cfaehm_cancel_stack(
+		exception_t * exception ) {
+	// TODO: Detect current stack and pick a particular stop-function.
+	_Unwind_Reason_Code ret;
+	ret = _Unwind_ForcedUnwind( &this_exception_storage, _Stop_Fn, (void*)0x22 );
+	printf("UNWIND ERROR %d after force unwind\n", ret);
+	abort();
+}
+
+
+// TERMINATION ===============================================================
+
+// If this isn't a rethrow (*except==0), delete the provided exception.
+void __cfaehm_cleanup_terminate( void * except ) {
+	if ( *(void**)except ) __cfaehm_delete_exception( *(exception_t **)except );
+}
+
 // The exception that is being thrown must already be stored.
 static __attribute__((noreturn)) void __cfaehm_begin_unwind(void) {
@@ -245,12 +257,10 @@
 	// the whole stack.
 
+	// No handler found, go to the default operation.
+	// Currently this will always be a cancellation.
 	if ( ret == _URC_END_OF_STACK ) {
-		// No proper handler was found. This can be handled in many ways, C++ calls std::terminate.
-		// Here we force unwind the stack, basically raising a cancellation.
-		printf("Uncaught exception %p\n", &this_exception_storage);
-
-		ret = _Unwind_ForcedUnwind( &this_exception_storage, _Stop_Fn, (void*)0x22 );
-		printf("UNWIND ERROR %d after force unwind\n", ret);
-		abort();
+		__cfadbg_print_safe(exception, "Uncaught exception %p\n", &this_exception_storage);
+
+		__cfaehm_cancel_stack(this_exception_context()->current_exception);
 	}
 
