Index: trunk/FACT++/src/Configuration.cc
===================================================================
--- trunk/FACT++/src/Configuration.cc	(revision 10295)
+++ trunk/FACT++/src/Configuration.cc	(revision 10296)
@@ -267,4 +267,5 @@
 #include <iostream>
 
+#include <boost/bind.hpp>
 #include <boost/regex.hpp>
 //#include <boost/filesystem.hpp>
@@ -442,4 +443,5 @@
         ("help-database",       "Print available options retreived from the database.")
         ("help-config",         "Print available configuration file options.")
+        ("version,V",           "Print version information.")
         ("print-all",           "Print all options as parsed from all the different sources.")
         ("print",               "Print options as parsed from the commandline.")
@@ -678,5 +680,5 @@
 //!
 //
-void Configuration::SetNameMapper(const boost::function1<std::string, std::string> &func)
+void Configuration::SetNameMapper(const boost::function<std::string(std::string)> &func)
 {
     fNameMapper = func;
@@ -686,4 +688,14 @@
 {
     fNameMapper = bind1st(mem_fun(&Configuration::DefaultMapper), this);
+}
+
+void Configuration::SetPrintUsage(const boost::function<void(void)> &func)
+{
+    fPrintUsage = func;
+}
+
+void Configuration::SetPrintUsage()
+{
+    fPrintUsage = boost::bind(&Configuration::PrintUsage, this);
 }
 
@@ -803,11 +815,14 @@
 
     if (getfiles.count("help"))
-        cout << endl << fOptionsCommandline[kVisible] << endl;
+    {
+        fPrintUsage();
+        cout << fOptionsCommandline[kVisible] << endl;
+    }
     if (getfiles.count("help-config"))
-        cout << endl << fOptionsConfigfile[kVisible] << endl;
+        cout << fOptionsConfigfile[kVisible] << endl;
     if (getfiles.count("help-env"))
-        cout << endl << fOptionsEnvironment[kVisible] << endl;
+        cout << fOptionsEnvironment[kVisible] << endl;
     if (getfiles.count("help-database"))
-        cout << endl << fOptionsDatabase[kVisible] << endl;
+        cout << fOptionsDatabase[kVisible] << endl;
 
     // ------------------------ (4) --------------------------
@@ -826,5 +841,5 @@
     {
         fDefaultFile = getfiles["default"].as<string>();
-        cout << "Reading configuration from '" << fDefaultFile << "'." << endl;
+        cerr << "Reading configuration from '" << fDefaultFile << "'." << endl;
     }
 
@@ -862,5 +877,5 @@
     {
         fPriorityFile = getfiles["config"].as<string>();
-        cout << "Retrieved option from '" << fPriorityFile << "'." << endl;
+        cerr << "Retrieved option from '" << fPriorityFile << "'." << endl;
     }
 
@@ -895,5 +910,5 @@
     {
         fDatabase = getdatabase["database"].as<string>();
-        cout << "Retrieving configuration from '" << fDatabase << "'." << endl;
+        cerr << "Retrieving configuration from '" << fDatabase << "'." << endl;
     }
 
Index: trunk/FACT++/src/Configuration.h
===================================================================
--- trunk/FACT++/src/Configuration.h	(revision 10295)
+++ trunk/FACT++/src/Configuration.h	(revision 10296)
@@ -45,5 +45,6 @@
 
     /// Pointer to the mapper function for environment variables
-    boost::function1<std::string, std::string> fNameMapper;
+    boost::function<std::string(std::string)> fNameMapper;
+    boost::function<void()>                   fPrintUsage;
 
     /// Helper function which return the max of the two arguments in the first argument
@@ -58,4 +59,6 @@
     /// Print a list of all unkown options within the given vector
     void PrintUnknown(std::vector<std::string> &vec, int steps=1);
+
+    virtual void PrintUsage() const { }
 
 public:
@@ -81,6 +84,9 @@
     void SetArgumentPositions(const po::positional_options_description &desc);
 
-    void SetNameMapper(const boost::function1<std::string, std::string> &func);
+    void SetNameMapper(const boost::function<std::string(std::string)> &func);
     void SetNameMapper();
+
+    void SetPrintUsage(const boost::function<void(void)> &func);
+    void SetPrintUsage();
 
     void AddEnv(const std::string &conf, const std::string &env)
@@ -95,4 +101,9 @@
     // Process command line arguments
     const po::variables_map &Parse(int argc, char **argv);
+
+    bool HasVersion() const
+    {
+        return Has("version");
+    }
 
     bool HasHelp() const
