Index: tests/exceptions/.expect/interact.txt
===================================================================
--- tests/exceptions/.expect/interact.txt	(revision 6d43cdde0e3ec27d64977f210123157ee7b67ffa)
+++ tests/exceptions/.expect/interact.txt	(revision 3eb5a47849aa6054acbc7a319ad4cf0f46de50a3)
@@ -8,2 +8,8 @@
 
 resume catch on resume
+
+termination catch, will resume
+outer resume catch
+
+resumption catch, will terminate
+inner termination catch
Index: tests/exceptions/.expect/resume.txt
===================================================================
--- tests/exceptions/.expect/resume.txt	(revision 6d43cdde0e3ec27d64977f210123157ee7b67ffa)
+++ tests/exceptions/.expect/resume.txt	(revision 3eb5a47849aa6054acbc7a319ad4cf0f46de50a3)
@@ -19,2 +19,8 @@
 caught yin, will throw yang
 caught yang
+
+throwing first exception
+caught first exception
+throwing second exception
+caught second exception
+recaught first exception
Index: tests/exceptions/interact.cfa
===================================================================
--- tests/exceptions/interact.cfa	(revision 6d43cdde0e3ec27d64977f210123157ee7b67ffa)
+++ tests/exceptions/interact.cfa	(revision 3eb5a47849aa6054acbc7a319ad4cf0f46de50a3)
@@ -5,4 +5,5 @@
 
 TRIVIAL_EXCEPTION(star);
+TRIVIAL_EXCEPTION(moon);
 
 int main(int argc, char * argv[]) {
@@ -51,3 +52,63 @@
 		printf("resume catch on resume\n");
 	}
+	printf("\n");
+
+	// Resume a termination exception.
+	try {
+		try {
+			try {
+				THROW(&(star){});
+			} catchResume (star *) {
+				printf("inner resume catch (error)\n");
+			}
+		} catch (star * error) {
+			printf("termination catch, will resume\n");
+			THROW_RESUME(error);
+		}
+	} catchResume (star *) {
+		printf("outer resume catch\n");
+	}
+	printf("\n");
+
+	// Terminate a resumption exception.
+	try {
+		try {
+			try {
+				THROW_RESUME(&(star){});
+			} catch (star *) {
+				printf("inner termination catch\n");
+			}
+		} catchResume (star * error) {
+			printf("resumption catch, will terminate\n");
+			THROW(error);
+		}
+	} catch (star *) {
+		printf("outer terminate catch (error)\n");
+	}
+#if 0
+	printf("\n");
+
+	// Unwinding a resumption catch does not break the system.
+	try {
+		try {
+			try {
+				try {
+					printf("throwing resume moon\n");
+					THROW_RESUME(&(moon){});
+				} catch (star *) {
+					printf("termination catch\n");
+				}
+				printf("throwing resume star\n");
+				THROW_RESUME(&(star){});
+			} catchResume (star *) {
+				printf("resumption star catch\n");
+			}
+		} catchResume (moon *) {
+			printf("resumption moon catch, will terminate\n");
+			THROW(&(star){});
+		}
+	} catchResume (star *) {
+		printf("outermost catch (error)\n");
+	}
+#endif
 }
Index: tests/exceptions/resume.cfa
===================================================================
--- tests/exceptions/resume.cfa	(revision 6d43cdde0e3ec27d64977f210123157ee7b67ffa)
+++ tests/exceptions/resume.cfa	(revision 3eb5a47849aa6054acbc7a319ad4cf0f46de50a3)
@@ -77,5 +77,4 @@
 		printf("caught yang\n");
 	}
-#ifdef FAILING
 	printf("\n");
 
@@ -100,4 +99,3 @@
 		printf("caught second exception (bad location)\n");
 	}
-#endif
 }
