Index: src/Fragmentation/Automation/FragmentWorker.cpp
===================================================================
--- src/Fragmentation/Automation/FragmentWorker.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/FragmentWorker.cpp	(revision 306f6062be599f351119d201e27f00dfb9a90c1e)
@@ -34,4 +34,5 @@
 #include "CodePatterns/Log.hpp"
 #include "Jobs/FragmentJob.hpp"
+#include "Jobs/MPQCCommandJob.hpp"
 #include "Jobs/SystemCommandJob.hpp"
 #include "Results/FragmentResult.hpp"
@@ -45,4 +46,5 @@
 void dummyInit() {
   SystemCommandJob("/bin/false", "something", JobId::IllegalJob);
+  MPQCCommandJob("nofile", JobId::IllegalJob);
 }
 
Index: src/Fragmentation/Automation/Jobs/MPQCCommandJob.cpp
===================================================================
--- src/Fragmentation/Automation/Jobs/MPQCCommandJob.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/Jobs/MPQCCommandJob.cpp	(revision 306f6062be599f351119d201e27f00dfb9a90c1e)
@@ -33,6 +33,8 @@
 #include "CodePatterns/Log.hpp"
 
-const std::string MPQCCommandJob::keyword_energy("total scf energy");
-const std::string MPQCCommandJob::keyword_forces("Total Gradient");
+const std::string MPQCCommandJob::keyword_hartreefock_energy("total scf energy");
+const std::string MPQCCommandJob::keyword_moellerplesset_energy("MP2 energy [au]:");
+const std::string MPQCCommandJob::keyword_hartreefock_forces("Total Gradient");
+const std::string MPQCCommandJob::keyword_moellerplesset_forces("Total MP2 gradient [au]:");
 
 /** Constructor for class MPQCCommandJob.
@@ -61,5 +63,5 @@
   // tokenizers
   typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
-  boost::char_separator<char> equalitysign("=");
+  boost::char_separator<char> keyvalue_separator("=:");
   boost::char_separator<char> whitespace(" \t");
 
@@ -72,4 +74,5 @@
   for (std::vector<std::string>::const_iterator iter = lines.begin();
       iter != lines.end();++iter) {
+    LOG(3, "DEBUG: Current line is '" << *iter << "'.");
     if (gradient_section) {
       tokenizer tokens(*iter, whitespace);
@@ -94,7 +97,9 @@
     }
     // extract energy ("total scf energy") ...
-    if ((*iter).find(keyword_energy) != std::string::npos) {
+    if (((*iter).find(keyword_hartreefock_energy) != std::string::npos)
+        || ((*iter).find(keyword_moellerplesset_energy) != std::string::npos))
+    {
       LOG(2, "INFO: Recognized energy in '"+*iter+"'.");
-      tokenizer tokens(*iter, equalitysign);
+      tokenizer tokens(*iter, keyvalue_separator);
       tokenizer::iterator tok_iter = tokens.begin();
       tok_iter++;
@@ -103,7 +108,10 @@
     }
     // ... and forces ("Total Gradient") from resultstring
-    if ((*iter).find(keyword_forces) != std::string::npos) {
+    if (((*iter).find(keyword_hartreefock_forces) != std::string::npos)
+        || ((*iter).find(keyword_moellerplesset_forces) != std::string::npos))
+    {
       LOG(2, "INFO: Recognized gradient section init in '"+*iter+"'.");
       gradient_section=true;
+      data.forces.clear();
     }
   }
Index: src/Fragmentation/Automation/Jobs/MPQCCommandJob.hpp
===================================================================
--- src/Fragmentation/Automation/Jobs/MPQCCommandJob.hpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/Jobs/MPQCCommandJob.hpp	(revision 306f6062be599f351119d201e27f00dfb9a90c1e)
@@ -39,6 +39,8 @@
 
   FragmentResult::ptr extractResult(const std::string &resultstring);
-  static const std::string keyword_energy;
-  static const std::string keyword_forces;
+  static const std::string keyword_hartreefock_energy;
+  static const std::string keyword_hartreefock_forces;
+  static const std::string keyword_moellerplesset_energy;
+  static const std::string keyword_moellerplesset_forces;
 };
 
Index: src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.cpp
===================================================================
--- src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.cpp	(revision 306f6062be599f351119d201e27f00dfb9a90c1e)
@@ -43,9 +43,27 @@
 const std::string resultstring="\
 \n\
-   total scf energy = -37.3479855\n\
+  HOMO is     5   A =  -0.498625\n\
+  LUMO is     6   A =   0.251360\n\
 \n\
-   Total Gradient:\n\
-  1  H  -2.35  -0.54  0.345\n\
-  2  H  0.35  -0.54  0.345\n\
+  total scf energy =  -75.5133625967\n\
+\n\
+  Memory used for integral intermediates: 56628 Bytes\n\
+\n\
+    10  -0.02171957  3   A  3   A ->  6   A  6   A (+-+-)\n\
+\n\
+  RHF energy [au]:                    -75.513362596662\n\
+  MP2 correlation energy [au]:         -0.124136686358\n\
+  MP2 energy [au]:                    -75.637499283020\n\
+\n\
+  D1(MP2)                =   0.01063314\n\
+\n\
+  CPHF: iter =  7 rms(P) = 0.0000000011 eps = 0.0000000100\n\
+\n\
+  Total MP2 gradient [au]:\n\
+       1   O   0.1100072224   0.0000000000  -0.0000000000\n\
+       2   H  -0.0550036112  -0.0000000000  -0.1562140155\n\
+       3   H  -0.0550036112  -0.0000000000   0.1562140155\n\
+\n\
+  Value of the MolecularEnergy:  -75.6374992830\n\
 \n\
 ";
@@ -60,5 +78,5 @@
   ASSERT_DO(Assert::Throw);
 
-  setVerbosity(3);
+  setVerbosity(4);
 
   job = new MPQCCommandJob(std::string("empty"), 1);
@@ -77,15 +95,23 @@
   // prepare result container
   MPQCData data;
-  data.energy = -37.3479855;
+  data.energy = -75.637499283020;
   std::vector<double> force;
   std::vector< std::vector<double> > forces;
-  force.push_back(-2.35);
-  force.push_back(-0.54);
-  force.push_back(0.345);
+  //  1   O   0.1100072224   0.0000000000  -0.0000000000
+  force.push_back(0.1100072224);
+  force.push_back(0.0000000000);
+  force.push_back(-0.0000000000);
   data.forces.push_back( force );
+  //  2   H  -0.0550036112  -0.0000000000  -0.1562140155
   force.clear();
-  force.push_back(0.35);
-  force.push_back(-0.54);
-  force.push_back(0.345);
+  force.push_back(-0.0550036112);
+  force.push_back(-0.0000000000);
+  force.push_back(-0.1562140155);
+  data.forces.push_back( force );
+  //  3   H  -0.0550036112  -0.0000000000   0.1562140155
+  force.clear();
+  force.push_back(-0.0550036112);
+  force.push_back(-0.0000000000);
+  force.push_back(0.1562140155);
   data.forces.push_back( force );
 
