Index: trunk/FACT++/src/Configuration.h
===================================================================
--- trunk/FACT++/src/Configuration.h	(revision 11335)
+++ trunk/FACT++/src/Configuration.h	(revision 11336)
@@ -131,9 +131,37 @@
     // Simplified access to the parsed options
     template<class T>
-       T Get(const char *var) const { return fVariables[var].as<T>(); }
-    bool Has(const char *var) const { return fVariables.count(var)>0; }
-
-    template<class T>
-        std::map<std::string, T> GetMap(const std::string &var) const
+        T Get(const std::string &var) const { return fVariables[var].as<T>(); }
+    bool Has(const std::string &var) const { return fVariables.count(var)>0; }
+
+    template<class T, class S>
+    T Get(const std::string &var, const S &val) const
+    {
+        std::ostringstream str;
+        str << var << val;
+        return Get<T>(str.str());
+    }
+
+    template<class T>
+    bool Has(const std::string &var, const T &val) const
+    {
+        std::ostringstream str;
+        str << var << val;
+        return Has(str.str());
+    }
+
+    template<class T, class S>
+    T GetDef(const std::string &var, const S &val) const
+    {
+        return Has(var, val) ? Get<T>(var, val) : Get<T>(var+"default");
+    }
+
+    template<class T>
+    bool HasDef(const std::string &var, const T &val) const
+    {
+        return Has(var, val) ? true : Has(var+"default");
+    }
+
+    template<class T>
+    std::map<std::string, T> GetMap(const std::string &var) const
     {
         const size_t len = var.length();
@@ -149,5 +177,5 @@
 
     template<class T>
-        std::vector<std::string> GetKeys(const std::string &var) const
+    std::vector<std::string> GetKeys(const std::string &var) const
     {
         const size_t len = var.length();
@@ -165,4 +193,21 @@
 };
 
+template<typename T>
+struct Hex
+{
+    T val;
+    Hex() { }
+    Hex(const T &v) : val(v) { }
+    operator T() const { return val; }
+};
+template<typename T>
+std::istream &operator>>(std::istream &in, Hex<T> &rc)
+{
+    T val;
+    in >> std::hex >> val;
+    rc.val = val;
+    return in;
+}
+
 template<class T>
 inline po::typed_value<T> *var(T *ptr=0)
