Index: /trunk/FACT++/src/Converter.cc
===================================================================
--- /trunk/FACT++/src/Converter.cc	(revision 10288)
+++ /trunk/FACT++/src/Converter.cc	(revision 10289)
@@ -37,7 +37,6 @@
 Other conversion functions also exist.
 
-A result of a conversion is valid if valid() returns true and either the
-result of the conversion is empty and the format string was valid empty
-or both contain contents.
+To check if the compilation of the format string was successfull
+the valid() member functio is provided.
 
 The format parameter \b W(ord) is dedicated to this kind of conversion and
@@ -494,9 +493,12 @@
 //!    case of failure an empty vector is returned.
 //!
+//! @throws
+//!    std::runtime_error if the conversion was not successfull
+//!
 template <class T>
 vector<T> Converter::Get(const std::string &str) const
 {
     if (!valid())
-        return vector<T>();
+        throw runtime_error("Compiled format invalid!");
 
     // If the format is empty we are already done
@@ -546,6 +548,5 @@
             default:
                 // This should never happen!
-                wout << endl << kRed << "Format '" << i->first.first->name() << " not supported!" << endl;
-                break;
+                throw runtime_error("Format '"+string(i->first.first->name())+" not supported!");
             }
 
@@ -564,8 +565,10 @@
     {
         line.clear(); // This is necesasary to get a proper response from tellg()
-        wout << kRed << "Error converting argument at " << arg << " [fmt=" << fFormat << "]!" << endl;
-        wout << kRed << line.str() << endl;
-        wout << kRed << setw(int(line.tellg())) << " " << "^" << endl;
-        return vector<T>();
+
+        ostringstream err;
+        err << "Error converting argument at " << arg << " [fmt=" << fFormat << "]!\n";
+        err << line.str() << "\n";
+        err << setw(int(line.tellg())) << " " << "^\n";
+        throw runtime_error(err.str());
     }
 
@@ -574,8 +577,10 @@
     {
         line.clear();
-        wout << kRed << "Not enough arguments [fmt=" << fFormat << "]!" << endl;
-        wout << kRed << line.str() << endl;
-        wout << kRed << setw(int(line.tellg())+1) << " " << "^" << endl;
-        return vector<T>();
+
+        ostringstream err;
+        err << "Not enough arguments [fmt=" << fFormat << "]!\n";
+        err << line.str() << "\n";
+        err << setw(int(line.tellg())+1) << " " << "^\n";
+        throw runtime_error(err.str());
     }
 
@@ -585,8 +590,9 @@
     if (line.good() && !line.eof())
     {
-        wout << kRed << "More arguments available than expected [" << fFormat << "]!" << endl;
-        wout << kRed << line.str() << endl;
-        wout << kRed << setw(int(line.tellg())+1) << " " << "^" << endl;
-        return vector<T>();
+        ostringstream err;
+        err << "More arguments available than expected [fmt=" << fFormat << "]!\n";
+        err << line.str() << "\n";
+        err << setw(int(line.tellg())+1) << " " << "^\n";
+        throw runtime_error(err.str());
     }
 
@@ -604,5 +610,4 @@
     return Get<char>(str);
 }
-
 
 // --------------------------------------------------------------------------
@@ -619,9 +624,12 @@
 //!    case of failure an empty vector is returned.
 //!
+//! @throws
+//!    std::runtime_error if the conversion was not successfull
+//!
 template<class T>
 T Converter::Get(const void *dat, size_t size) const
 {
     if (!valid())
-        return T();
+        throw runtime_error("Compiled format invalid!");
 
     const char *ptr = reinterpret_cast<const char *>(dat);
@@ -632,6 +640,7 @@
         if (ptr-size>=dat)
         {
-            wout << kRed << "Format description '" << fFormat << "' exceeds available data size (" << size << ")" << endl;
-            return T();
+            ostringstream err;
+            err << "Format description [fmt=" << fFormat << "] exceeds available data size (" << size << ")";
+            throw runtime_error(err.str());
         }
 
@@ -659,10 +668,7 @@
             case 'v':
                 // This should never happen!
-                wout << kRed << "Type 'void' not supported!" << endl;
-                return T();
+                throw runtime_error("Type 'void' not supported!");
             default:
-                // This should never happen!
-                wout << kRed << "TypeId '" << i->first.first->name() << "' not known!" << endl;
-                return T();
+                throw runtime_error("TypeId '"+string(i->first.first->name())+"' not known!");
             }
         }
@@ -671,6 +677,7 @@
     if (ptr-size!=dat)
     {
-        wout << kRed << "Data block size (" << size << ") doesn't fit format description '" << fFormat << "'" << endl;
-        return T();
+        ostringstream err;
+        err << "Data block size (" << size << ") doesn't fit format description [fmt=" << fFormat << "]";
+        throw runtime_error(err.str());
     }
 
Index: /trunk/FACT++/src/ServiceList.cc
===================================================================
--- /trunk/FACT++/src/ServiceList.cc	(revision 10288)
+++ /trunk/FACT++/src/ServiceList.cc	(revision 10289)
@@ -554,17 +554,26 @@
 
     const Converter conv(lout, fmt);
-
-    const vector<char> v = conv.GetVector(str.substr(p0));
-    if (!conv.valid() || v.empty()!=conv.empty())
-    {
-        lout << kRed << "Couldn't properly parse the input... ignored." << endl;
+    if (!conv)
+    {
+        lout << kRed << "Couldn't properly parse the format... ignored." << endl;
         return false;
     }
 
-    const int rc = DimClient::sendCommand(cmd.c_str(), (void*)v.data(), v.size());
-    if (rc)
-        lout << kGreen << "Command " << cmd << " emitted successfully to DimClient." << endl;
-    else
-        lout << kRed << "ERROR - Sending command " << cmd << " failed." << endl;
+    try
+    {
+        const vector<char> v = conv.GetVector(str.substr(p0));
+
+        const int rc = DimClient::sendCommand(cmd.c_str(), (void*)v.data(), v.size());
+        if (rc)
+            lout << kGreen << "Command " << cmd << " emitted successfully to DimClient." << endl;
+        else
+            lout << kRed << "ERROR - Sending command " << cmd << " failed." << endl;
+    }
+    catch (const std::runtime_error &e)
+    {
+        lout << kRed << e.what() << endl;
+        return false;
+    }
+
     return true;
 }
Index: /trunk/FACT++/src/StateMachineImp.cc
===================================================================
--- /trunk/FACT++/src/StateMachineImp.cc	(revision 10288)
+++ /trunk/FACT++/src/StateMachineImp.cc	(revision 10289)
@@ -234,25 +234,21 @@
 
     const Converter conv(lout, fmt, false);
-
-    const vector<char> v = conv.GetVector(str.substr(p0));
-    if (!conv.valid() || v.empty()!=conv.empty())
-    {
-        lout << kRed << "Couldn't properly parse the input... ignored." << endl;
+    if (!conv)
+    {
+        lout << kRed << "Couldn't properly parse the format... ignored." << endl;
         return false;
     }
 
-    return PostEvent(*evt, v.data(), v.size());
-/*
-    const Converter c(lout, fmt, str.substr(p0));
-
-    // Parsing was not successfull
-    if (!c.GetRc())
-    {
-        lout << kRed << "Couldn't properly parse the input... ignored." << endl;
-        return false;
-    }
-
-    return PostEvent(*evt, c.Ptr(), c.Size());
-    */
+    try
+    {
+        const vector<char> v = conv.GetVector(str.substr(p0));
+        return PostEvent(*evt, v.data(), v.size());
+    }
+    catch (const std::runtime_error &e)
+    {
+        lout << kRed << e.what() << endl;
+    }
+
+    return false;
 }
 
Index: /trunk/FACT++/src/dataLogger.cc
===================================================================
--- /trunk/FACT++/src/dataLogger.cc	(revision 10288)
+++ /trunk/FACT++/src/dataLogger.cc	(revision 10289)
@@ -637,8 +637,18 @@
 
                 const Converter conv(Out(), I->getFormat());
-
-                std::string text = conv.GetString(I->getData(), I->getSize());
-                if (!conv.valid() || text.empty()!=conv.empty())
+                if (!conv)
                 {
+                    Error("Couldn't properly parse the format... ignored.");
+                    return;
+                }
+
+                std::string text;
+                try
+                {
+                    text = conv.GetString(I->getData(), I->getSize());
+                }
+                catch (const std::runtime_error &e)
+                {
+                    Out() << kRed << e.what() << endl;
                     Error("Couldn't properly parse the data... ignored.");
                     return;
@@ -706,12 +716,24 @@
 		
 //	std::string text = ToString(evt.GetFormat().c_str(), evt.GetData(), evt.GetSize());
+
         const Converter conv(Out(), evt.GetFormat());
-
-        std::string text = conv.GetString(evt.GetData(), evt.GetSize());
-        if (!conv.valid() || text.empty()!=conv.empty())
+        if (!conv)
         {
+            Error("Couldn't properly parse the format... ignored.");
+            return GetCurrentState();
+        }
+
+        std::string text;
+        try
+        {
+            text = conv.GetString(evt.GetData(), evt.GetSize());
+        }
+        catch (const std::runtime_error &e)
+        {
+            Out() << kRed << e.what() << endl;
             Error("Couldn't properly parse the data... ignored.");
             return GetCurrentState();
         }
+
 
         if (text.empty())
