Index: trunk/FACT++/src/Configuration.cc
===================================================================
--- trunk/FACT++/src/Configuration.cc	(revision 18996)
+++ trunk/FACT++/src/Configuration.cc	(revision 18997)
@@ -463,4 +463,7 @@
 fPrintUsage(bind(&Configuration::PrintUsage, this))
 {
+    if (prgname.empty())
+        return;
+
     po::options_description generic("Generic options");
     generic.add_options()
@@ -1256,4 +1259,50 @@
 }
 
+const po::variables_map &Configuration::ParseFile(const string &fname, const bool &checkf)
+{
+    // ------------------------ (0) --------------------------
+    po::options_description opt_configfile;
+
+    for (int i=0; i<2; i++)
+        opt_configfile.add(fOptionsConfigfile[i]);
+
+    // ------------------------ (1) --------------------------
+
+    po::variables_map getfiles;
+
+    // ------------------------ (1) --------------------------
+
+    ifstream file(fname.c_str());
+    // ===> FIXME: Proper handling of missing file or wrong file name
+    const po::parsed_options parsed_file =
+        po::parse_config_file<char>(file, opt_configfile, !checkf);
+
+    // ------------------------ (6) --------------------------
+    po::store(parsed_file, getfiles);
+
+    // ------------------------ (13) -------------------------
+
+    po::variables_map result;
+    po::store(parsed_file, result);
+    po::notify(result);
+
+    fVariables = result;
+
+    // ------------------------ (14) -------------------------
+
+    const vector<string> unknown = collect_unrecognized(parsed_file.options, po::exclude_positional);
+
+    fUnknownConfigfile.clear();
+    fUnknownConfigfile.insert(fUnknownConfigfile.end(), unknown.begin(), unknown.end());
+
+    // ------------------------ (15) -------------------------
+
+    CreateWildcardOptions();
+
+    // ------------------------ (16) -------------------------
+
+    return fVariables;
+}
+
 bool Configuration::DoParse(int argc, const char **argv, const std::function<void()> &PrintHelp)
 {
@@ -1276,4 +1325,26 @@
 
     return !HasVersion() && !HasPrint() && !HasHelp();
+}
+
+bool Configuration::ReadFile(const string &fname, const bool &checkf)
+{
+    try
+    {
+        ParseFile(fname, checkf);
+    }
+#if BOOST_VERSION > 104000
+    catch (po::multiple_occurrences &e)
+    {
+        cerr << "Program options invalid due to: " << e.what() << " of '" << e.get_option_name() << "'." << endl;
+        return false;
+    }
+#endif
+    catch (exception& e)
+    {
+        cerr << "Program options invalid due to: " << e.what() << endl;
+        return false;
+    }
+
+    return true;
 }
 
Index: trunk/FACT++/src/Configuration.h
===================================================================
--- trunk/FACT++/src/Configuration.h	(revision 18996)
+++ trunk/FACT++/src/Configuration.h	(revision 18997)
@@ -138,5 +138,7 @@
     // Process command line arguments
     const po::variables_map &Parse(int argc, const char **argv, const std::function<void()> &func=std::function<void()>());
+    const po::variables_map &ParseFile(const std::string &fname, const bool &checkf);
     bool DoParse(int argc, const char **argv, const std::function<void()> &func=std::function<void()>());
+    bool ReadFile(const std::string &fname, const bool &checkf=false);
 
     bool HasVersion()
