Index: libcfa/src/exception.c
===================================================================
--- libcfa/src/exception.c	(revision 9ff71ffc2d8f037adfbd872a7671d1dd4be17691)
+++ libcfa/src/exception.c	(revision 13600e80d758d89bf509ac8aa232e7e1de5210bb)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jun 26 15:13:00 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 27 09:45:57 2023
-// Update Count     : 37
+// Last Modified On : Thu Aug 10 16:45:22 2023
+// Update Count     : 69
 //
 
@@ -27,4 +27,6 @@
 #include "stdhdr/assert.h"
 #include "virtual.h"
+
+extern void __cabi_abort( const char fmt[], ... );
 
 #pragma GCC visibility push(default)
@@ -192,5 +194,11 @@
 
 	if ( actions & _UA_END_OF_STACK ) {
-		abort();
+		__cabi_abort(
+			"Propagation failed to find a matching handler.\n"
+			"Possible cause is a missing try block with appropriate catch clause for specified exception type.\n"
+			"Last exception name or message: %s.\n",
+			NODE_TO_EXCEPT( UNWIND_TO_NODE( unwind_exception ) )->
+				virtual_table->msg( NODE_TO_EXCEPT( UNWIND_TO_NODE( unwind_exception ) ) )
+		);
 	} else {
 		return _URC_NO_REASON;
@@ -209,13 +217,4 @@
 	struct exception_context_t * context = this_exception_context();
 	struct __cfaehm_node * node = EXCEPT_TO_NODE(context->current_exception);
-
-	// Preform clean-up of any extra active exceptions.
-	while ( node->next ) {
-		struct __cfaehm_node * to_free = node->next;
-		node->next = to_free->next;
-		exception_t * except = NODE_TO_EXCEPT( to_free );
-		except->virtual_table->free( except );
-	    free( to_free );
-	}
 
 	_Unwind_Reason_Code ret;
