Index: src/ControlStruct/ExceptTranslate.cc
===================================================================
--- src/ControlStruct/ExceptTranslate.cc	(revision 307a732f5fa4b97b19f405fc215fcd76f473e3a1)
+++ src/ControlStruct/ExceptTranslate.cc	(revision ad0be81733371b9a8190b6b92c4a8457cf5f4801)
@@ -354,5 +354,5 @@
 			}
 			handling_code->push_back( new ReturnStmt( noLabels,
-				new ConstantExpr( Constant::from_bool( false ) ) ) );
+				new ConstantExpr( Constant::from_bool( true ) ) ) );
 			handler->set_body( handling_code );
 
@@ -361,4 +361,7 @@
 			*it = nullptr;
 		}
+
+		body->push_back( new ReturnStmt( noLabels, new ConstantExpr(
+			Constant::from_bool( false ) ) ) );
 
 		return new FunctionDecl("handle", Type::StorageClasses(),
Index: src/libcfa/exception.c
===================================================================
--- src/libcfa/exception.c	(revision 307a732f5fa4b97b19f405fc215fcd76f473e3a1)
+++ src/libcfa/exception.c	(revision ad0be81733371b9a8190b6b92c4a8457cf5f4801)
@@ -37,7 +37,7 @@
 // This macro should be the only thing that needs to change across machines.
 // Used in the personality function, way down in termination.
-// struct _Unwind_Context * -> _Unwind_Reason_Code(*)()
+// struct _Unwind_Context * -> _Unwind_Reason_Code(*)(exception *)
 #define MATCHER_FROM_CONTEXT(ptr_to_context) \
-	(*(_Unwind_Reason_Code(**)())(_Unwind_GetCFA(ptr_to_context) + 8))
+	(*(_Unwind_Reason_Code(**)(exception*))(_Unwind_GetCFA(ptr_to_context) + 8))
 
 
@@ -261,7 +261,7 @@
 					// _Unwind_Reason_Code (*matcher)() = (_Unwind_Reason_Code (*)())lsd_info.LPStart + imatcher;					
 
-					_Unwind_Reason_Code (*matcher)() =
+					_Unwind_Reason_Code (*matcher)(exception *) =
 						MATCHER_FROM_CONTEXT(context);
-					int index = matcher(shared_stack.current_exception);
+					int index = matcher(&shared_stack.current_exception);
 					_Unwind_Reason_Code ret = (0 == index)
 						? _URC_CONTINUE_UNWIND : _URC_HANDLER_FOUND;
Index: src/tests/except-0.c
===================================================================
--- src/tests/except-0.c	(revision 307a732f5fa4b97b19f405fc215fcd76f473e3a1)
+++ src/tests/except-0.c	(revision ad0be81733371b9a8190b6b92c4a8457cf5f4801)
@@ -1,3 +1,5 @@
 // Draft of tests for exception handling.
+
+// ERROR: exceptions do not interact with ^?{} properly.
 
 #include <stdio.h>
@@ -117,5 +119,5 @@
 // Resume Throw New Exception:
 void resume_swap() {
-	signal_exit a = {"terminate_swap"};
+	signal_exit a = {"resume_swap"};
 	try {
 		resume(2);
