Index: libcfa/src/exception.c
===================================================================
--- libcfa/src/exception.c	(revision f277ab6c2f5cfddea9d864a3868b6a824a3ba1ef)
+++ libcfa/src/exception.c	(revision c40157ec46899c5e6a8afa9d8f9f0dba822d528f)
@@ -414,9 +414,9 @@
 				_Unwind_Word match_pos =
 #				if defined( __x86_64 )
-				    _Unwind_GetCFA(unwind_context);
+				    _Unwind_GetCFA(unwind_context) + 8;
 #				elif defined( __i386 )
-				    _Unwind_GetCFA(unwind_context) + 8;
+				    _Unwind_GetCFA(unwind_context) + 24;
 #				elif defined( __ARM_ARCH )
-				    _Unwind_GetCFA(unwind_context) + 16;
+				    _Unwind_GetCFA(unwind_context) + 40;
 #				endif
 				int (*matcher)(exception_t *) = *(int(**)(exception_t *))match_pos;
@@ -483,4 +483,5 @@
 __attribute__((noinline))
 int __cfaehm_try_terminate(void (*try_block)(),
+		__attribute__((unused)) void (*catch_block)(int index, exception_t * except),
 		__attribute__((unused)) int (*match_block)(exception_t * except)) {
 	//! volatile int xy = 0;
Index: libcfa/src/exception.h
===================================================================
--- libcfa/src/exception.h	(revision f277ab6c2f5cfddea9d864a3868b6a824a3ba1ef)
+++ libcfa/src/exception.h	(revision c40157ec46899c5e6a8afa9d8f9f0dba822d528f)
@@ -60,4 +60,5 @@
 int __cfaehm_try_terminate(
 	void (*try_block)(),
+	void (*catch_block)(int index, exception_t * except),
 	int (*match_block)(exception_t * except));
 
Index: src/ControlStruct/ExceptTranslate.cpp
===================================================================
--- src/ControlStruct/ExceptTranslate.cpp	(revision f277ab6c2f5cfddea9d864a3868b6a824a3ba1ef)
+++ src/ControlStruct/ExceptTranslate.cpp	(revision c40157ec46899c5e6a8afa9d8f9f0dba822d528f)
@@ -496,4 +496,5 @@
 				{
 					new ast::VariableExpr( loc, try_wrapper ),
+					new ast::VariableExpr( loc, terminate_catch ),
 					new ast::VariableExpr( loc, terminate_match ),
 				}
