Index: libcfa/src/exception.c
===================================================================
--- libcfa/src/exception.c	(revision ac9ba1221f5ae62a281f366c7979b7e1070e0826)
+++ libcfa/src/exception.c	(revision 6437ce4fcb4c3e2d813f9980a63820c300c35d0d)
@@ -85,14 +85,16 @@
 	__cfadbg_print_safe(exception, "Throwing resumption exception\n");
 
-	__attribute__((cleanup(reset_top_resume)))
-	struct __cfaehm_try_resume_node * original_head = context->top_resume;
-	struct __cfaehm_try_resume_node * current = context->top_resume;
-
-	for ( ; current ; current = current->next) {
-		context->top_resume = current->next;
-		if (current->handler(except)) {
-			return;
+	{
+		__attribute__((cleanup(reset_top_resume)))
+		struct __cfaehm_try_resume_node * original_head = context->top_resume;
+		struct __cfaehm_try_resume_node * current = context->top_resume;
+
+		for ( ; current ; current = current->next) {
+			context->top_resume = current->next;
+			if (current->handler(except)) {
+				return;
+			}
 		}
-	}
+	} // End the search and return to the top of the stack.
 
 	// No handler found, fall back to the default operation.
Index: tests/exceptions/.expect/defaults.txt
===================================================================
--- tests/exceptions/.expect/defaults.txt	(revision ac9ba1221f5ae62a281f366c7979b7e1070e0826)
+++ tests/exceptions/.expect/defaults.txt	(revision 6437ce4fcb4c3e2d813f9980a63820c300c35d0d)
@@ -3,2 +3,8 @@
 jump default handler.
 Catch unhandled_exception.
+cross terminate throw
+cross terminate default
+cross terminate catch
+cross resume throw
+cross resume default
+cross resume catch
Index: tests/exceptions/defaults.cfa
===================================================================
--- tests/exceptions/defaults.cfa	(revision ac9ba1221f5ae62a281f366c7979b7e1070e0826)
+++ tests/exceptions/defaults.cfa	(revision 6437ce4fcb4c3e2d813f9980a63820c300c35d0d)
@@ -30,5 +30,5 @@
 		throwResume (log_message){(char *)"Should be printed.\n"};
 	} catchResume (log_message * this) {
-		printf(this->virtual_table->msg(this));
+		printf("%s", this->virtual_table->msg(this));
 	}
 	// But we don't have to:
@@ -69,7 +69,33 @@
 }
 
+TRIVIAL_EXCEPTION(second);
+
+void cross_test(void) {
+	void defaultTerminationHandler(first &) {
+		printf("cross terminate default\n");
+		throw (second){};
+	}
+	void defaultResumptionHandler(first &) {
+		printf("cross resume default\n");
+		throwResume (second){};
+	}
+	try {
+		printf("cross terminate throw\n");
+		throw (first){};
+	} catch (second *) {
+		printf("cross terminate catch\n");
+	}
+	try {
+		printf("cross resume throw\n");
+		throwResume (first){};
+	} catchResume (second *) {
+		printf("cross resume catch\n");
+	}
+}
+
 int main(int argc, char * argv[]) {
 	log_test();
 	jump_test();
 	unhandled_test();
+	cross_test();
 }
