Index: src/Parser/MpqcParser.cpp
===================================================================
--- src/Parser/MpqcParser.cpp	(revision 4cbca0e8710efb136e5936feefe9dd2e7a865873)
+++ src/Parser/MpqcParser.cpp	(revision 311da7bdf02dce8825b29e60fbe79e0688c15ca6)
@@ -64,5 +64,5 @@
   boost::char_separator<char> sep("[]");
   boost::char_separator<char> angularsep("<>");
-  boost::char_separator<char> equalitysep("=");
+  boost::char_separator<char> equalitysep(" =");
   boost::char_separator<char> whitesep(" \t");
   ConvertTo<double> toDouble;
@@ -90,7 +90,11 @@
   //        throw MpqcParseException;
         tokenizer::iterator tok_iter = tokens.begin();
+        ASSERT(tok_iter != tokens.end(),
+            "MpqcParser::load() - missing token for MoleculeSection in line "+linestring+"!");
         std::stringstream whitespacefilter(*tok_iter++);
         std::string element;
-        whitespacefilter >> element;
+        whitespacefilter >> ws >> element;
+        ASSERT(tok_iter != tokens.end(),
+            "MpqcParser::load() - missing token for MoleculeSection in line "+linestring+"!");
         std::string vector = *tok_iter;
         tokenizer vectorcomponents(vector, whitesep);
@@ -111,15 +115,11 @@
     }
     if (MpqcSection) {
-      tokenizer tokens(linestring, equalitysep);
-      tokenizer::iterator tok_iter = tokens.begin();
-      std::stringstream whitespacefilter(*tok_iter++);
-      std::string key(*tok_iter++);
-      if (params.haveParam(key)) {
-        std::stringstream linestream(linestring);
-        linestream >> params;
-      } else if (linestring.find("mole<") != string::npos) { // get theory
+      if (linestring.find("mole<") != string::npos) { // get theory
         tokenizer tokens(linestring, angularsep);
         tokenizer::iterator tok_iter = tokens.begin();
-        std::string value(*(++tok_iter));
+        ++tok_iter;
+        ASSERT(tok_iter != tokens.end(),
+            "MpqcParser::load() - missing token in brackets<> for mole< in line "+linestring+"!");
+        std::string value(*tok_iter);
         std::stringstream linestream("theory = "+value);
         linestream >> params;
@@ -127,7 +127,25 @@
         tokenizer tokens(linestring, angularsep);
         tokenizer::iterator tok_iter = tokens.begin();
-        std::string value(*(++tok_iter));
+        ++tok_iter;
+        ASSERT(tok_iter != tokens.end(),
+            "MpqcParser::load() - missing token in brackets<> for integrals< in line "+linestring+"!");
+        std::string value(*tok_iter);
         std::stringstream linestream("integration = "+value);
         linestream >> params;
+      } else if ((linestring.find("molecule") == string::npos) && (linestring.find("basis") == string::npos)){
+        // molecule and basis must not be parsed in this section
+        tokenizer tokens(linestring, equalitysep);
+        tokenizer::iterator tok_iter = tokens.begin();
+        ASSERT(tok_iter != tokens.end(),
+            "MpqcParser::load() - missing token before '=' for MpqcSection in line "+linestring+"!");
+        std::stringstream whitespacefilter(*tok_iter);
+        std::string key;
+        whitespacefilter >> ws >> key;
+        if (params.haveParam(key)) {
+          std::stringstream linestream(linestring);
+          linestream >> params;
+        } else { // unknown keys are simply ignored as long as parser is incomplete
+          DoLog(2) && (Log() << Verbose(2) << "INFO: '"+key+"' is unknown and ignored." << std::endl);
+        }
       }
     }
@@ -135,6 +153,11 @@
       tokenizer tokens(linestring, equalitysep);
       tokenizer::iterator tok_iter = tokens.begin();
+      ASSERT(tok_iter != tokens.end(),
+          "MpqcParser::load() - missing token for BasisSection in line "+linestring+"!");
       std::string key(*tok_iter++);
+      ASSERT(tok_iter != tokens.end(),
+          "MpqcParser::load() - missing value for BasisSection after key "+key+" in line "+linestring+"!");
       std::string value(*tok_iter);
+      tok_iter++;
       // TODO: use exception instead of ASSERT
       ASSERT(tok_iter == tokens.end(),
@@ -148,6 +171,11 @@
       tokenizer tokens(linestring, equalitysep);
       tokenizer::iterator tok_iter = tokens.begin();
+      ASSERT(tok_iter != tokens.end(),
+          "MpqcParser::load() - missing token for AuxBasisSection in line "+linestring+"!");
       std::string key(*tok_iter++);
+      ASSERT(tok_iter != tokens.end(),
+          "MpqcParser::load() - missing value for BasisSection after key "+key+" in line "+linestring+"!");
       std::string value(*tok_iter);
+      tok_iter++;
       // TODO: use exception instead of ASSERT
       ASSERT(tok_iter == tokens.end(),
Index: src/Parser/MpqcParser_Parameters.cpp
===================================================================
--- src/Parser/MpqcParser_Parameters.cpp	(revision 4cbca0e8710efb136e5936feefe9dd2e7a865873)
+++ src/Parser/MpqcParser_Parameters.cpp	(revision 311da7bdf02dce8825b29e60fbe79e0688c15ca6)
@@ -152,4 +152,5 @@
   boost::char_separator<char> semicolonsep(";");
   boost::char_separator<char> equalitysep(" =");
+  boost::char_separator<char> ticksep("\"");
   std::string line;
   std::getline( ist, line );
@@ -157,5 +158,5 @@
   tokenizer tokens(line, semicolonsep);
   ASSERT(tokens.begin() != tokens.end(),
-      "operator<< on MpqcParser_Parameters - empty string, need at least ';'!");
+      "operator<< on MpqcParser_Parameters - empty string, need at least ';' in line "+line+"!");
   for (tokenizer::iterator tok_iter = tokens.begin();
         tok_iter != tokens.end(); ++tok_iter) {
@@ -165,21 +166,29 @@
       tokenizer::iterator tok_valueiter = tok_paramiter;
       tokenizer::iterator tok_checkiter = ++tok_valueiter;
+      ++tok_checkiter;
       // TODO: throw exception instead of ASSERT
-      ASSERT(tok_valueiter == params.end(),
-          "operator<< on MpqcParser_Parameters - missing value before ';'!");
-      ++tok_checkiter;
-      ASSERT(tok_checkiter == params.end(),
-          "operator<< on MpqcParser_Parameters - still tokens before ';'!");
-      DoLog(0) && (Log() << Verbose(0)
-          << "INFO: Token pair is " << *tok_paramiter << "," << *tok_valueiter << std::endl);
-      std::stringstream value(*tok_valueiter);
+      ASSERT(tok_paramiter != paramtokens.end(),
+          "operator<< on MpqcParser_Parameters - missing value before ' =' in token "+*tok_iter+"!");
+      ASSERT(tok_valueiter != paramtokens.end(),
+          "operator<< on MpqcParser_Parameters - missing value after ' =' in token "+*tok_iter+"!");
+      ASSERT(tok_checkiter == paramtokens.end(),
+          "operator<< on MpqcParser_Parameters - still more tokens after ' =' in token "+*tok_iter+":"
+          +*tok_checkiter+"!");
+      std::stringstream keystream(*tok_paramiter);
+      std::string key;
+      keystream >> ws >> key;
+      tokenizer ticklesstokens(*tok_valueiter, ticksep);
+      ASSERT(ticklesstokens.begin() != ticklesstokens.end(),
+          "operator<< on MpqcParser_Parameters - no tokens present after removing ticks in token "+*tok_valueiter+"!");
+      std::stringstream valuestream(*(ticklesstokens.begin()));
+      DoLog(2) && (Log() << Verbose(2)
+          << "INFO: Token pair is " << key << "," << valuestream.str() << std::endl);
 
       // TODO: throw exception instead of DoeLog()
-      if ((params.haveParam(*tok_paramiter))) {
-        params.setter(params.getParam(*tok_paramiter), value);
-      } else {
-        DoeLog(0) && (eLog() << Verbose(0)
-            << *tok_paramiter << " is not a valid parameter name!" << std::endl);
-      }
+      ASSERT(params.haveParam(key),
+          "operator >> on MpqcParser_Parameters - unknown parameter name '"
+          +key+"' with value "+valuestream.str()+"!");
+      if (params.haveParam(key))
+        params.setter(params.getParam(key), valuestream);
     } else {
       ist.setstate(std::ios::eofbit);
@@ -247,20 +256,20 @@
 {
   // TODO: throw exception instead of eLog()
-  try {
+//  try {
     params[theoryParam] = _theory;
-  } catch(const boost::bad_any_cast &) {
-    DoeLog(0) && (eLog() << Verbose(0)
-        << "MpqcParser_Parameters::setTheory() - could not set boolean!" << std::endl);
-  }
+//  } catch(const boost::bad_any_cast &) {
+//    DoeLog(0) && (eLog() << Verbose(0)
+//        << "MpqcParser_Parameters::setTheory() - could not set boolean!" << std::endl);
+//  }
 }
 
 void MpqcParser_Parameters::setIntegration(enum MpqcParser_Parameters::IntegrationMethod _integration){
   // TODO: throw exception instead of eLog()
-  try {
+//  try {
     params[integrationParam] = _integration;
-  } catch(const boost::bad_any_cast &) {
-    DoeLog(0) && (eLog() << Verbose(0)
-        << "MpqcParser_Parameters::setIntegration() - could not set boolean!" << std::endl);
-  }
+//  } catch(const boost::bad_any_cast &) {
+//    DoeLog(0) && (eLog() << Verbose(0)
+//        << "MpqcParser_Parameters::setIntegration() - could not set boolean!" << std::endl);
+//  }
 }
 
@@ -279,11 +288,11 @@
   enum IntegrationMethod value;
   // TODO: throw exception instead of eLog()
-  try {
+//  try {
     value = boost::any_cast<enum IntegrationMethod>(params[integrationParam]);
-  } catch(const boost::bad_any_cast &) {
-    DoeLog(0) && (eLog() << Verbose(0)
-        << "MpqcParser_Parameters::getIntegration() - could not convert "
-        +ParamNames[integrationParam]+" to enum IntegrationMethod!" << std::endl);
-  }
+//  } catch(const boost::bad_any_cast &) {
+//    DoeLog(0) && (eLog() << Verbose(0)
+//        << "MpqcParser_Parameters::getIntegration() - could not convert "
+//        +ParamNames[integrationParam]+" to enum IntegrationMethod!" << std::endl);
+//  }
   return value;
 }
@@ -293,11 +302,11 @@
   enum Theory value;
   // TODO: throw exception instead of eLog()
-  try {
+//  try {
     value = boost::any_cast<enum Theory>(params[theoryParam]);
-  } catch(const boost::bad_any_cast &) {
-    DoeLog(0) && (eLog() << Verbose(0)
-        << "MpqcParser_Parameters::getTheory() - could not convert "
-        +ParamNames[theoryParam]+" to enum Theory!" << std::endl);
-  }
+//  } catch(const boost::bad_any_cast &) {
+//    DoeLog(0) && (eLog() << Verbose(0)
+//        << "MpqcParser_Parameters::getTheory() - could not convert "
+//        +ParamNames[theoryParam]+" to enum Theory!" << std::endl);
+//  }
   return value;
 }
@@ -321,33 +330,33 @@
     case integrationParam:
       // TODO: throw exception instead of eLog()
-      try {
+//      try {
         Iindex = boost::any_cast<enum IntegrationMethod>(params[_param]);
-      } catch(const boost::bad_any_cast &) {
-        DoeLog(0) && (eLog() << Verbose(0)
-            << "MpqcParser_Parameters::getString() - could not convert "
-            +ParamNames[_param]+" to string!" << std::endl);
-      }
+//      } catch(const boost::bad_any_cast &) {
+//        DoeLog(0) && (eLog() << Verbose(0)
+//            << "MpqcParser_Parameters::getString() - could not convert "
+//            +ParamNames[_param]+" to string!" << std::endl);
+//      }
       value = IntegrationNames[Iindex];
       break;
     case theoryParam:
       // TODO: throw exception instead of eLog()
-      try {
+//      try {
         Tindex = boost::any_cast<enum Theory>(params[_param]);
-      } catch(const boost::bad_any_cast &) {
-        DoeLog(0) && (eLog() << Verbose(0)
-            << "MpqcParser_Parameters::getString() - could not convert "
-            +ParamNames[_param]+" to string!" << std::endl);
-      }
+//      } catch(const boost::bad_any_cast &) {
+//        DoeLog(0) && (eLog() << Verbose(0)
+//            << "MpqcParser_Parameters::getString() - could not convert "
+//            +ParamNames[_param]+" to string!" << std::endl);
+//      }
       value = TheoryNames[(enum Theory)Tindex];
       break;
     default:
       // TODO: throw exception instead of eLog()
-      try {
+//      try {
         value = boost::any_cast<std::string>(params[_param]);
-      } catch(const boost::bad_any_cast &) {
-        DoeLog(0) && (eLog() << Verbose(0)
-            << "MpqcParser_Parameters::getString() - could not convert "
-            +ParamNames[_param]+" to string!" << std::endl);
-      }
+//      } catch(const boost::bad_any_cast &) {
+//        DoeLog(0) && (eLog() << Verbose(0)
+//            << "MpqcParser_Parameters::getString() - could not convert "
+//            +ParamNames[_param]+" to string!" << std::endl);
+//      }
       break;
   }
@@ -362,11 +371,11 @@
     default:
       // TODO: throw exception instead of eLog()
-      try {
+//      try {
         value = boost::any_cast<int>(params[_param]);
-      } catch(const boost::bad_any_cast &) {
-        DoeLog(0) && (eLog() << Verbose(0)
-            << "MpqcParser_Parameters::getInt() - could not convert "
-            +ParamNames[_param]+" to int!" << std::endl);
-      }
+//      } catch(const boost::bad_any_cast &) {
+//        DoeLog(0) && (eLog() << Verbose(0)
+//            << "MpqcParser_Parameters::getInt() - could not convert "
+//            +ParamNames[_param]+" to int!" << std::endl);
+//      }
       break;
   }
@@ -378,11 +387,11 @@
   double value;
   // TODO: throw exception instead of eLog()
-  try {
+//  try {
     value = boost::any_cast<double>(params[_param]);
-  } catch(const boost::bad_any_cast &) {
-    DoeLog(0) && (eLog() << Verbose(0)
-        << "MpqcParser_Parameters::getDouble() - could not convert "
-        +ParamNames[_param]+" to double!" << std::endl);
-  }
+//  } catch(const boost::bad_any_cast &) {
+//    DoeLog(0) && (eLog() << Verbose(0)
+//        << "MpqcParser_Parameters::getDouble() - could not convert "
+//        +ParamNames[_param]+" to double!" << std::endl);
+//  }
   return value;
 }
@@ -392,11 +401,11 @@
   bool value;
   // TODO: throw exception instead of eLog()
-  try {
+//  try {
     value = boost::any_cast<bool>(params[_param]);
-  } catch(const boost::bad_any_cast &) {
-    DoeLog(0) && (eLog() << Verbose(0)
-        << "MpqcParser_Parameters::getBool() - could not convert "
-        +ParamNames[_param]+" to bool!" << std::endl);
-  }
+//  } catch(const boost::bad_any_cast &) {
+//    DoeLog(0) && (eLog() << Verbose(0)
+//        << "MpqcParser_Parameters::getBool() - could not convert "
+//        +ParamNames[_param]+" to bool!" << std::endl);
+//  }
   return value;
 }
Index: src/Parser/unittests/ParserMpqcUnitTest.cpp
===================================================================
--- src/Parser/unittests/ParserMpqcUnitTest.cpp	(revision 4cbca0e8710efb136e5936feefe9dd2e7a865873)
+++ src/Parser/unittests/ParserMpqcUnitTest.cpp	(revision 311da7bdf02dce8825b29e60fbe79e0688c15ca6)
@@ -31,4 +31,5 @@
 #include "periodentafel.hpp"
 #include "Descriptors/AtomTypeDescriptor.hpp"
+#include "CodePatterns/Assert.hpp"
 
 #ifdef HAVE_TESTRUNNER
@@ -214,6 +215,6 @@
 
   // check throw, for the moment aren't, are caught in getInt()
-  //CPPUNIT_ASSERT_THROW(mpqc->params.getInt(MpqcParser_Parameters::integrationParam), boost::bad_any_cast);
-  //CPPUNIT_ASSERT_THROW(mpqc->params.getInt(MpqcParser_Parameters::theoryParam), boost::bad_any_cast);
+  CPPUNIT_ASSERT_THROW(mpqc->params.getInt(MpqcParser_Parameters::integrationParam), boost::bad_any_cast);
+  CPPUNIT_ASSERT_THROW(mpqc->params.getInt(MpqcParser_Parameters::theoryParam), boost::bad_any_cast);
 
 }
@@ -245,8 +246,13 @@
   }
   // test whether unknown key fails
-  std::cout << "The following CRITICAL warning is desired and does not indicate a failure of the test." << std::endl;
+  std::cout << "The following Assertion warning is desired and does not indicate a failure of the test." << std::endl;
   {
     std::stringstream setvalue("hessian = no");
+#ifndef NDEBUG
+    ASSERT_DO(Assert::Throw);
+    CPPUNIT_ASSERT_THROW(setvalue >> mpqc->params, Assert::AssertionFailure);
+#else
     setvalue >> mpqc->params;
+#endif
 //    std::cout << "Hessian is still "
 //        << mpqc->params.getString(MpqcParser_Parameters::hessianParam) << std::endl;
