Index: libcfa/src/parseconfig.cfa
===================================================================
--- libcfa/src/parseconfig.cfa	(revision 3be40787f5e3dfef12021e668101a538c2872654)
+++ libcfa/src/parseconfig.cfa	(revision dcf792a65cd7bc8bb2e86c4f7fecd34f0f95b32f)
@@ -11,19 +11,42 @@
 static vtable(Missing_Config_Entries) Missing_Config_Entries_vt;
 
-void ?{}( Missing_Config_Entries & this, unsigned int num_missing ) with ( this ) {
-	virtual_table = &Missing_Config_Entries_vt;
-	missing = num_missing;
-}
+void ?{}( Missing_Config_Entries & this, unsigned int num_missing ) {
+	this.virtual_table = &Missing_Config_Entries_vt;
+	this.num_missing = num_missing;
+}
+
 
 static vtable(Parse_Failure) Parse_Failure_vt;
 
-void ?{}( Parse_Failure & this ) with ( this ) {
-	virtual_table = &Parse_Failure_vt;
-}
+void ?{}( Parse_Failure & this, char * failed_key, char * failed_value ) {
+	this.virtual_table = &Parse_Failure_vt;
+
+	this.failed_key = alloc( strlen( failed_key ) );
+	this.failed_value = alloc( strlen( failed_value ) );
+	strcpy( this.failed_key, failed_key );
+	strcpy( this.failed_value, failed_value );
+}
+
+void ^?{}( Parse_Failure & this ) with ( this ) {
+	free( failed_key );
+	free( failed_value );
+}
+
 
 static vtable(Validation_Failure) Validation_Failure_vt;
 
-void ?{}( Validation_Failure & this ) with ( this ) {
-	virtual_table = &Validation_Failure_vt;
+void ?{}( Validation_Failure & this, char * failed_key, char * failed_value ) {
+	this.virtual_table = &Validation_Failure_vt;
+
+	this.failed_key = alloc( strlen( failed_key ) );
+	this.failed_value = alloc( strlen( failed_value ) );
+	strcpy( this.failed_key, failed_key );
+	strcpy( this.failed_value, failed_value );
+}
+
+void ^?{}( Validation_Failure & this ) with ( this ) {
+	free( failed_key );
+	free( failed_value );
+}
 }
 
@@ -128,12 +151,14 @@
 		  	// Parse the data
 		  	if ( !entries[j].parse( src_value, entries[j].variable ) ) {
+				Parse_Failure * ex = new( src_key, src_value );
 				delete( kv_pairs );
-				throw (Parse_Failure){};
+				throw *ex;
 			}
 
 			// Validate the data
 			if ( !entries[j].validate( entries[j].variable ) ) {
+				Validation_Failure * ex = new( src_key, src_value );
 				delete( kv_pairs );
-				throw (Validation_Failure){};
+				throw *ex;
 			}
 
Index: libcfa/src/parseconfig.hfa
===================================================================
--- libcfa/src/parseconfig.hfa	(revision 3be40787f5e3dfef12021e668101a538c2872654)
+++ libcfa/src/parseconfig.hfa	(revision dcf792a65cd7bc8bb2e86c4f7fecd34f0f95b32f)
@@ -59,14 +59,20 @@
 
 exception Missing_Config_Entries {
-	unsigned int missing;
+	unsigned int num_missing;
 };
 
 void ?{}( Missing_Config_Entries & this );
 
-exception Parse_Failure {};
+exception Parse_Failure {
+	* char failed_key;
+	* char failed_value;
+};
 
 void ?{}( Parse_Failure & this );
 
-exception Validation_Failure {};
+exception Validation_Failure {
+	* char failed_key;
+	* char failed_value;
+};
 
 void ?{}( Validation_Failure & this );
