Index: src/libcfa/concurrency/preemption.c
===================================================================
--- src/libcfa/concurrency/preemption.c	(revision 4ab3d68ede4a2da358674e7c31d39f25c21a4f74)
+++ src/libcfa/concurrency/preemption.c	(revision b2b44d808ae1e94cb906efa6dd7aebd115204e3b)
@@ -49,9 +49,9 @@
 // Machine specific register name
 #if   defined(__x86_64__)
-#define CFA_REG_IP REG_RIP
+#define CFA_REG_IP gregs[REG_RIP]
 #elif defined(__i386__)
-#define CFA_REG_IP REG_EIP
+#define CFA_REG_IP gregs[REG_EIP]
 #elif defined(__ARM_ARCH__)
-#define CFA_REG_IP REG_R15
+#define CFA_REG_IP arm_pc
 #endif
 
@@ -284,11 +284,7 @@
 // Receives SIGUSR1 signal and causes the current thread to yield
 void sigHandler_ctxSwitch( __CFA_SIGPARMS__ ) {
-#if defined( __ARM_ARCH )
-	__cfaabi_dbg_debug_do( last_interrupt = (void *)(cxt->uc_mcontext.arm_pc); )
-#else
-	__cfaabi_dbg_debug_do( last_interrupt = (void *)(cxt->uc_mcontext.gregs[CFA_REG_IP]); )
-#endif
-
-		// Check if it is safe to preempt here
+	__cfaabi_dbg_debug_do( last_interrupt = (void *)(cxt->uc_mcontext.CFA_REG_IP); )
+
+	// Check if it is safe to preempt here
 	if( !preemption_ready() ) { return; }
 
