Index: libcfa/src/parseconfig.cfa
===================================================================
--- libcfa/src/parseconfig.cfa	(revision ad78e0846056cde172d979a686f25b6160d80ead)
+++ libcfa/src/parseconfig.cfa	(revision d8db0af1af27a7acac5166ac13fe8b75ef7a6cbd)
@@ -66,5 +66,5 @@
 
 // Parse configuration from a file formatted in shell style
-KVPairs & parse_tabular_config_format( const char * config_file, size_t num_entries ) {
+KVPairs * parse_tabular_config_format( const char * config_file, size_t num_entries ) {
 	* KVPairs kv_pairs = new( num_entries );
 
@@ -93,17 +93,23 @@
 	close( in );
 
-	return *kv_pairs;
+	return kv_pairs;
 }
 
 // Parse configuration values from intermediate format
-void parse_config( const char * config_file, config_entry entries[], size_t num_entries ) {
-	KVPairs & kv_pairs = parse_tabular_config_format( config_file, num_entries );
+void parse_config( const char * config_file, config_entry entries[], size_t num_entries, config_format format ) {
+	KVPairs * kv_pairs;
+	choose ( format ) {
+		case TABULAR_CONFIG:
+			kv_pairs = parse_tabular_config_format( config_file, num_entries );
+		default:
+			exit | "Error: config file format " | format | " is not supported";
+	}
 
 	int entries_so_far = 0;
-	for ( i; kv_pairs.size ) {
+	for ( i; kv_pairs->size ) {
 	  if ( entries_so_far == num_entries ) break;
 
 		char * src_key, * src_value;
-		[ src_key, src_value ] = kv_pairs.data[i];
+		[ src_key, src_value ] = kv_pairs->data[i];
 
 		for ( j; num_entries ) {
@@ -123,4 +129,6 @@
 		}
 	}
+
+	^(*kv_pairs){};
 } // processConfigFile
 
Index: libcfa/src/parseconfig.hfa
===================================================================
--- libcfa/src/parseconfig.hfa	(revision ad78e0846056cde172d979a686f25b6160d80ead)
+++ libcfa/src/parseconfig.hfa	(revision d8db0af1af27a7acac5166ac13fe8b75ef7a6cbd)
@@ -6,4 +6,8 @@
 // *********************************** initial declarations ***********************************
 
+
+enum config_format {
+	TABULAR_CONFIG
+};
 
 struct config_entry {
@@ -63,5 +67,5 @@
 
 
-void parse_config( const char * config_file, config_entry entries[], size_t num_entries );
+void parse_config( const char * config_file, config_entry entries[], size_t num_entries, config_format format );
 
 bool parse( const char *, const char * & );
