Index: libcfa/src/parseconfig.cfa
===================================================================
--- libcfa/src/parseconfig.cfa	(revision cac1d52a885d021898dd5985f6a9a163913bef7d)
+++ libcfa/src/parseconfig.cfa	(revision 6d8e1ab77747d1ff3e4498279c8f78187e962376)
@@ -9,10 +9,20 @@
 
 
+static vtable(Parse_Failure) Parse_Failure_vt;
+
+void ?{}( Parse_Failure & this ) with ( this ) {
+	virtual_table = &Parse_Failure_vt;
+}
+
+static vtable(Unknown_Config_Format) Unknown_Config_Format_vt;
+
+void ?{}( Unknown_Config_Format & this ) with ( this ) {
+	virtual_table = &Unknown_Config_Format_vt;
+}
+
 static vtable(Validation_Failure) Validation_Failure_vt;
 
-void ?{}( Validation_Failure & this, config_entry & entry ) with ( entry ) {
-	this.virtual_table = &Validation_Failure_vt;
-	this.key = key;
-	this.variable = variable;
+void ?{}( Validation_Failure & this ) with ( this ) {
+	virtual_table = &Validation_Failure_vt;
 }
 
@@ -91,5 +101,6 @@
 	} catch( Open_Failure * ex; ex->istream == &in ) {
 		delete( kv_pairs );
-		exit | "Error: could not open input file '" | config_file | "'";
+		serr | "Error: could not open input file '" | config_file | "'";
+		throw *ex;
 		// HERE (unfreed storage)
 	} // try
@@ -106,5 +117,6 @@
 			kv_pairs = parse_tabular_config_format( config_file, num_entries );
 		default:
-			exit | "Error: config file format " | format | " is not supported";
+			serr | "Error: config file format " | format | " is not supported";
+			throw (Unknown_Config_Format){};
 	}
 
@@ -125,5 +137,6 @@
 					if ( !entries[j].validate( entries[j].variable ) ) {
 						delete( kv_pairs );
-						throw (Validation_Failure){ entries[j] };
+						serr | "Error: config value at key '" | entries[j].key | "' did not pass validation";
+						throw (Validation_Failure){};
 					}
 				}
@@ -132,5 +145,7 @@
 			}
 
-			serr | "Value '" | src_value | "' for key '" | src_key | "' could not be parsed";
+			delete( kv_pairs );
+			serr | "Error: value '" | src_value | "' for key '" | src_key | "' could not be parsed";
+			throw (Parse_Failure){};
 		}
 	}
Index: libcfa/src/parseconfig.hfa
===================================================================
--- libcfa/src/parseconfig.hfa	(revision cac1d52a885d021898dd5985f6a9a163913bef7d)
+++ libcfa/src/parseconfig.hfa	(revision 6d8e1ab77747d1ff3e4498279c8f78187e962376)
@@ -56,10 +56,15 @@
 
 
-exception Validation_Failure {
-	const char * key;
-	void * variable;
-};
+exception Parse_Failure {};
 
-void ?{}( Validation_Failure & this, config_entry & entry );
+void ?{}( Parse_Failure & this );
+
+exception Unknown_Config_Format {};
+
+void ?{}( Unknown_Config_Format & this );
+
+exception Validation_Failure {};
+
+void ?{}( Validation_Failure & this );
 
 
