Index: src/Parser/unittests/ParserMpqcUnitTest.cpp
===================================================================
--- src/Parser/unittests/ParserMpqcUnitTest.cpp	(revision 3308b607408a811d157f5645f1d4a94e5482ebd3)
+++ src/Parser/unittests/ParserMpqcUnitTest.cpp	(revision 1bef077d3656c91b027c4cf35ca7eb3e79969644)
@@ -183,56 +183,27 @@
 /************************************ tests ***********************************/
 
-void ParserMpqcUnitTest::ParameterTypeTest() {
-  // check types in boost::any map
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::hessianParam].type() == typeid(bool));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::hessianParam].type() != typeid(int));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::savestateParam].type() == typeid(bool));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::do_gradientParam].type() == typeid(bool));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::maxiterParam].type() == typeid(int));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::memoryParam].type() == typeid(int));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::stdapproxParam].type() == typeid(std::string));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::nfzcParam].type() == typeid(int));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::basisParam].type() == typeid(std::string));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::aux_basisParam].type() == typeid(std::string));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::integrationParam].type() == typeid(MpqcParser_Parameters::IntegralCints));
-  CPPUNIT_ASSERT(parser->getParams().params[MpqcParser_Parameters::theoryParam].type() == typeid(MpqcParser_Parameters::MBPT2));
-}
-
 void ParserMpqcUnitTest::ParameterDefaultTest() {
   // check default values
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::hessianParam) == "no");
-  CPPUNIT_ASSERT(!parser->getParams().getBool(MpqcParser_Parameters::hessianParam));
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::savestateParam) == "no");
-  CPPUNIT_ASSERT(!parser->getParams().getBool(MpqcParser_Parameters::savestateParam));
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::do_gradientParam) == "yes");
-  CPPUNIT_ASSERT(parser->getParams().getBool(MpqcParser_Parameters::do_gradientParam));
-  CPPUNIT_ASSERT(parser->getParams().getInt(MpqcParser_Parameters::maxiterParam) == 1000);
-  CPPUNIT_ASSERT(parser->getParams().getInt(MpqcParser_Parameters::memoryParam) == 16000000);
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::stdapproxParam) == "A'");
-  CPPUNIT_ASSERT(parser->getParams().getInt(MpqcParser_Parameters::nfzcParam) == 1);
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::basisParam) == "3-21G");
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::aux_basisParam) == "aug-cc-pVDZ");
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::integrationParam) == "IntegralCints");
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::theoryParam) == "MBPT2");
-  CPPUNIT_ASSERT(parser->getParams().getTheory() == MpqcParser_Parameters::MBPT2);
-  CPPUNIT_ASSERT(parser->getParams().getIntegration() == MpqcParser_Parameters::IntegralCints);
-
-  // check that values are not removed
-  CPPUNIT_ASSERT(!parser->getParams().params[MpqcParser_Parameters::theoryParam].empty());
-
-  // check throw, for the moment aren't, are caught in getInt()
-  CPPUNIT_ASSERT_THROW(parser->getParams().getInt(MpqcParser_Parameters::integrationParam), boost::bad_any_cast);
-  CPPUNIT_ASSERT_THROW(parser->getParams().getInt(MpqcParser_Parameters::theoryParam), boost::bad_any_cast);
-
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::hessianParam) == std::string("no"));
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::savestateParam) == std::string("no"));
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::do_gradientParam) == std::string("yes"));
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::maxiterParam) == std::string("1000"));
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::memoryParam) == std::string("16000000"));
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::stdapproxParam) == std::string("A'"));
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::nfzcParam) == std::string("1"));
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::basisParam) == std::string("3-21G"));
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::aux_basisParam) == std::string("aug-cc-pVDZ"));
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::integrationParam) == std::string("IntegralCints"));
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::theoryParam) == std::string("MBPT2"));
 }
 
 void ParserMpqcUnitTest::ParameterCloneTest() {
   FormatParser_Parameters *clone = parser->getParams().clone();
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::theoryParam) == "MBPT2");
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::theoryParam) == std::string("MBPT2"));
   std::stringstream setvalue("theory = CLHF");
   setvalue >> parser->getParams();
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::theoryParam) == "CLHF");
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::theoryParam) == std::string("CLHF"));
   parser->getParams().makeClone(*clone);
-  CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::theoryParam) == "MBPT2");
+  CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::theoryParam) == std::string("MBPT2"));
 }
 
@@ -244,5 +215,5 @@
 //    std::cout << "integration method is "
 //        << parser->getParams().getString(MpqcParser_Parameters::theoryParam) << std::endl;
-    CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::theoryParam) == "CLHF");
+    CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::theoryParam) == std::string("CLHF"));
   }
   // test a bool
@@ -252,5 +223,5 @@
 //    std::cout << "Hessian is "
 //        << parser->getParams().getString(MpqcParser_Parameters::hessianParam) << std::endl;
-    CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::hessianParam) == "yes");
+    CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::hessianParam) == std::string("yes"));
   }
   // test int
@@ -260,5 +231,5 @@
 //    std::cout << "maxiter is "
 //        << parser->getParams().getString(MpqcParser_Parameters::maxiterParam) << std::endl;
-    CPPUNIT_ASSERT(parser->getParams().getInt(MpqcParser_Parameters::maxiterParam) == 500);
+    CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::maxiterParam) == std::string("500"));
   }
   // test whether unknown key fails
@@ -274,5 +245,5 @@
 //    std::cout << "Hessian is still "
 //        << parser->getParams().getString(MpqcParser_Parameters::hessianParam) << std::endl;
-    CPPUNIT_ASSERT(parser->getParams().getString(MpqcParser_Parameters::hessianParam) == "yes");
+    CPPUNIT_ASSERT(parser->getParams().getParameter(MpqcParser_Parameters::hessianParam) == std::string("yes"));
   }
 }
@@ -280,5 +251,8 @@
 void ParserMpqcUnitTest::readMpqcTest() {
   stringstream input(waterMpqc_CLHF);
-  parser->getParams().setTheory(MpqcParser_Parameters::CLHF);
+  parser->getParams().setParameter(
+      MpqcParser_Parameters::theoryParam,
+      parser->getParams().getTheoryName(MpqcParser_Parameters::CLHF)
+          );
   parser->load(&input);
 
@@ -308,5 +282,8 @@
     // compare both configs for CLHF
     stringstream output;
-    parser->getParams().setTheory(MpqcParser_Parameters::CLHF);
+    parser->getParams().setParameter(
+        MpqcParser_Parameters::theoryParam,
+        parser->getParams().getTheoryName(MpqcParser_Parameters::CLHF)
+            );
     parser->save(&output, atoms);
     stringstream input(waterMpqc_CLHF);
@@ -319,6 +296,8 @@
     // compare both configs for CLKS
     stringstream output;
-    parser->getParams().setTheory(MpqcParser_Parameters::CLKS);
-    parser->save(&output, atoms);
+    parser->getParams().setParameter(
+        MpqcParser_Parameters::theoryParam,
+        parser->getParams().getTheoryName(MpqcParser_Parameters::CLKS)
+            );
     stringstream input(waterMpqc_CLKS);
     for (; std::getline(input, first) && std::getline(output, second); ) {
@@ -330,6 +309,8 @@
     // compare both configs for MBPT2
     stringstream output;
-    parser->getParams().setTheory(MpqcParser_Parameters::MBPT2);
-    parser->save(&output, atoms);
+    parser->getParams().setParameter(
+        MpqcParser_Parameters::theoryParam,
+        parser->getParams().getTheoryName(MpqcParser_Parameters::MBPT2)
+            );
     stringstream input(waterMpqc_MBPT2);
     for (; std::getline(input, first) && std::getline(output, second); ) {
@@ -341,6 +322,8 @@
     // compare both configs for MBPT2_R12
     stringstream output;
-    parser->getParams().setTheory(MpqcParser_Parameters::MBPT2_R12);
-    parser->save(&output, atoms);
+    parser->getParams().setParameter(
+        MpqcParser_Parameters::theoryParam,
+        parser->getParams().getTheoryName(MpqcParser_Parameters::MBPT2_R12)
+            );
     stringstream input(waterMpqc_MBPT2_R12);
     for (; std::getline(input, first) && std::getline(output, second); ) {
