Index: libcfa/prelude/Makefile.in
===================================================================
--- libcfa/prelude/Makefile.in	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ libcfa/prelude/Makefile.in	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -1,6 +1,6 @@
-# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
@@ -331,6 +331,6 @@
 	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
 	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
 	esac;
 
@@ -377,8 +377,5 @@
 
 
-distdir: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) distdir-am
-
-distdir-am: $(DISTFILES)
+distdir: $(DISTFILES)
 	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
Index: libcfa/src/Makefile.am
===================================================================
--- libcfa/src/Makefile.am	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ libcfa/src/Makefile.am	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -33,5 +33,5 @@
 # The built sources must not depend on the installed headers
 AM_CFAFLAGS = -quiet -cfalib -I$(srcdir)/stdhdr $(if $(findstring ${gdbwaittarget}, ${@}), -XCFA --gdb) @CONFIG_CFAFLAGS@
-AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC -pthread @ARCH_FLAGS@ @CONFIG_CFLAGS@
+AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC -fexceptions -pthread @ARCH_FLAGS@ @CONFIG_CFLAGS@
 AM_CCASFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
 CFACC = @CFACC@
Index: libcfa/src/Makefile.in
===================================================================
--- libcfa/src/Makefile.in	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ libcfa/src/Makefile.in	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -456,5 +456,5 @@
 # The built sources must not depend on the installed headers
 AM_CFAFLAGS = -quiet -cfalib -I$(srcdir)/stdhdr $(if $(findstring ${gdbwaittarget}, ${@}), -XCFA --gdb) @CONFIG_CFAFLAGS@
-AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC -pthread @ARCH_FLAGS@ @CONFIG_CFLAGS@
+AM_CFLAGS = -g -Wall -Wno-unused-function -fPIC -fexceptions -pthread @ARCH_FLAGS@ @CONFIG_CFLAGS@
 AM_CCASFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
 @BUILDLIB_FALSE@headers_nosrc = 
Index: libcfa/src/exception.c
===================================================================
--- libcfa/src/exception.c	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ libcfa/src/exception.c	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jun 26 15:13:00 2017
 // Last Modified By : Andrew Beach
-// Last Modified On : Fri Apr 03 11:57:00 2020
-// Update Count     : 14
+// Last Modified On : Mon Apr 06 14:40:00 2020
+// Update Count     : 15
 //
 
@@ -75,4 +75,8 @@
 // RESUMPTION ================================================================
 
+static void reset_top_resume(struct __cfaehm_try_resume_node ** store) {
+	this_exception_context()->top_resume = *store;
+}
+
 void __cfaehm_throw_resume(exception_t * except) {
 	struct exception_context_t * context = this_exception_context();
@@ -80,4 +84,5 @@
 	__cfaabi_dbg_print_safe("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;
@@ -86,5 +91,4 @@
 		context->top_resume = current->next;
 		if (current->handler(except)) {
-			context->top_resume = original_head;
 			return;
 		}
@@ -92,5 +96,4 @@
 
 	__cfaabi_dbg_print_safe("Unhandled exception\n");
-	context->top_resume = original_head;
 
 	// Fall back to termination:
Index: tests/errors/.expect/completeType.txt
===================================================================
--- tests/errors/.expect/completeType.txt	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ tests/errors/.expect/completeType.txt	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -27,5 +27,5 @@
     void 
   )
-  Environment:( _85_4_DT ) -> instance of struct A with body 0 (no widening)
+  Environment:( _85_2_DT ) -> instance of struct A with body 0 (no widening)
 
 
@@ -50,5 +50,5 @@
     void 
   )
-  Environment:( _85_4_DT ) -> instance of struct B with body 1 (no widening)
+  Environment:( _85_2_DT ) -> instance of struct B with body 1 (no widening)
 
 
Index: tests/exceptions/.expect/interact.txt
===================================================================
--- tests/exceptions/.expect/interact.txt	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ tests/exceptions/.expect/interact.txt	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -14,2 +14,8 @@
 resumption catch, will terminate
 inner termination catch
+
+throwing resume moon
+resumption moon catch, will terminate
+termination catch
+throwing resume star
+resumption star catch
Index: tests/exceptions/.expect/resume.txt
===================================================================
--- tests/exceptions/.expect/resume.txt	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ tests/exceptions/.expect/resume.txt	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -25,2 +25,6 @@
 caught second exception
 recaught first exception
+
+inner catch
+inner catch
+outer catch
Index: tests/exceptions/.expect/terminate.txt
===================================================================
--- tests/exceptions/.expect/terminate.txt	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ tests/exceptions/.expect/terminate.txt	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -24,2 +24,5 @@
 caught second exception
 recaught first exception
+
+inner catch
+outer catch
Index: tests/exceptions/interact.cfa
===================================================================
--- tests/exceptions/interact.cfa	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ tests/exceptions/interact.cfa	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -86,5 +86,4 @@
 		printf("outer terminate catch (error)\n");
 	}
-#if 0
 	printf("\n");
 
@@ -111,4 +110,3 @@
 		printf("outermost catch (error)\n");
 	}
-#endif
 }
Index: tests/exceptions/resume.cfa
===================================================================
--- tests/exceptions/resume.cfa	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ tests/exceptions/resume.cfa	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -99,3 +99,17 @@
 		printf("caught second exception (bad location)\n");
 	}
+	printf("\n");
+
+	// Check successive operations.
+	try {
+		try {
+			THROW_RESUME(&(zen){});
+			THROW_RESUME(&(zen){});
+		} catchResume (zen *) {
+			printf("inner catch\n");
+		}
+		THROW_RESUME(&(zen){});
+	} catchResume (zen *) {
+		printf("outer catch\n");
+	}
 }
Index: tests/exceptions/terminate.cfa
===================================================================
--- tests/exceptions/terminate.cfa	(revision 057298e656d032efd1e3026f09397c7195ce19c3)
+++ tests/exceptions/terminate.cfa	(revision f1b667186cc9c53fcf26d8e55e9d328e504edc58)
@@ -99,3 +99,17 @@
 		printf("caught second exception (bad location)\n");
 	}
+	printf("\n");
+
+	// Check successive operations.
+	try {
+		try {
+			THROW(&(zen){});
+			THROW(&(zen){});
+		} catch (zen *) {
+			printf("inner catch\n");
+		}
+		THROW(&(zen){});
+	} catch (zen *) {
+		printf("outer catch\n");
+	}
 }
