Index: libcfa/src/parseconfig.cfa
===================================================================
--- libcfa/src/parseconfig.cfa	(revision 31337d85526519b2747eae8a6d487a12779ac161)
+++ libcfa/src/parseconfig.cfa	(revision 4df8fef5f8d3cd84ad5649094d027d5129c6c399)
@@ -13,11 +13,13 @@
 
 // Process the configuration file to set the simulation parameters.
-void parseConfig( const char * configFile, ConfigParms & cparms ) {
-		ifstream in;
+void parse_config( const char * config_file, config_entry entries[], size_t num_entries ) {
+	ifstream in;
 	try {
-		open( in, configFile );							// open the configuration file for input
+		open( in, config_file );							// open the configuration file for input
 
 		while () {
-		  if ( comments( in, name ) ) break;			// eof ?
+			char * key;
+			char * value;
+		  if ( comments( in, key ) ) break;			// eof ?
 		  	// Should we just overwrite duplicate config entries? Having a hash map would make this much easier
 			in | value;
@@ -31,5 +33,5 @@
 		} // for
 	} catch( Open_Failure * ex; ex->istream == &in ) {
-		exit | "Error: could not open input file \"" | configFile | "\"";
+		exit | "Error: could not open input file \"" | config_file | "\"";
 	} // try
 	close( in );
Index: libcfa/src/parseconfig.hfa
===================================================================
--- libcfa/src/parseconfig.hfa	(revision 31337d85526519b2747eae8a6d487a12779ac161)
+++ libcfa/src/parseconfig.hfa	(revision 4df8fef5f8d3cd84ad5649094d027d5129c6c399)
@@ -15,5 +15,27 @@
 }; // ConfigParms
 
-void parseConfig( const char * configFile, ConfigParms & cparms );
+struct config_entry {
+	const char * key;
+	void * variable;
+	bool (*parse)(const char *, void *);
+};
+
+static inline void ?{}( config_entry & this ) {}
+
+forall(T & | { bool parse(const char *, T & ); })
+static inline void ?{}( config_entry & this, const char * key, T & variable ) {
+	this.key      = key;
+	this.variable = (void *)&variable;
+	this.parse    = (bool (*)(const char *, void *))parse;
+}
+
+forall(T &)
+static inline void ?{}( config_entry & this, const char * key, T & variable, bool (*parse)(const char *, T &) ) {
+	this.key      = key;
+	this.variable = (void *)&variable;
+	this.parse    = (bool (*)(const char *, void *))parse;
+}
+
+void parse_config( const char * config_file, config_entry entries[], size_t num_entries );
 
 // Local Variables: //
