Index: src/Fragmentation/Automation/Jobs/MPQCCommandJob.cpp
===================================================================
--- src/Fragmentation/Automation/Jobs/MPQCCommandJob.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/Jobs/MPQCCommandJob.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
@@ -0,0 +1,117 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MPQCCommandJob.cpp
+ *
+ *  Created on: Feb 05, 2012
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "MPQCCommandJob.hpp"
+
+// include headers that implement a archive in simple text format
+#include <boost/archive/text_oarchive.hpp>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/tokenizer.hpp>
+#include <sstream>
+
+#include "CodePatterns/Assert.hpp"
+#include "CodePatterns/Log.hpp"
+
+const std::string MPQCCommandJob::keyword_energy("total scf energy");
+const std::string MPQCCommandJob::keyword_forces("Total Gradient");
+
+/** Constructor for class MPQCCommandJob.
+ *
+ * @param _inputfile string of inputfile contents
+ * @param _JobId id of this job
+ */
+MPQCCommandJob::MPQCCommandJob(const std::string _inputfile, const JobId_t _JobId) :
+    SystemCommandJob("mpqc", _inputfile, _JobId)
+{}
+
+/** Destructor for class MPQCCommandJob.
+ *
+ */
+MPQCCommandJob::~MPQCCommandJob()
+{}
+
+/** Extracts energy and forces from the output of the command.
+ *
+ * @param resultstring output of the command to parse
+ * @return FragmentResult with energy and forces
+ */
+FragmentResult::ptr MPQCCommandJob::extractResult(const std::string &resultstring)
+{
+  std::stringstream returnstream;
+  // tokenizers
+  typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
+  boost::char_separator<char> equalitysign("=");
+  boost::char_separator<char> whitespace(" \t");
+
+  // split into lines
+  std::vector<std::string> lines;
+  boost::split(lines, resultstring, boost::is_any_of("\n"));
+
+  // go through each line
+  bool gradient_section = false;
+  for (std::vector<std::string>::const_iterator iter = lines.begin();
+      iter != lines.end();++iter) {
+    if (gradient_section) {
+      tokenizer tokens(*iter, whitespace);
+      if (*iter != std::string("")) {
+        tokenizer::iterator tok_iter = tokens.begin();
+        tok_iter++;
+        tok_iter++;
+        MPQCData::vector_type forcevector(NDIM);
+        try { // first col is index, second is element
+          for (size_t index = 0;index < NDIM; ++index)
+            forcevector[index] = boost::lexical_cast<double>(*(tok_iter++));
+          LOG(2, "INFO: Recognized force vector in '"+*iter+"'.");
+          data.forces.push_back( forcevector );
+        } catch(boost::bad_lexical_cast){
+          LOG(2, "INFO: Did not recognize a force vector, hence ending section at '"+*iter+"'.");
+          gradient_section = false;
+        }
+      } else {
+        LOG(2, "INFO: Recognized gradient section end in '"+*iter+"'.");
+        gradient_section = false;
+      }
+    }
+    // extract energy ("total scf energy") ...
+    if ((*iter).find(keyword_energy) != std::string::npos) {
+      LOG(2, "INFO: Recognized energy in '"+*iter+"'.");
+      tokenizer tokens(*iter, equalitysign);
+      tokenizer::iterator tok_iter = tokens.begin();
+      tok_iter++;
+      std::stringstream energystring(*tok_iter);
+      energystring >> data.energy;
+    }
+    // ... and forces ("Total Gradient") from resultstring
+    if ((*iter).find(keyword_forces) != std::string::npos) {
+      LOG(2, "INFO: Recognized gradient section init in '"+*iter+"'.");
+      gradient_section=true;
+    }
+  }
+
+  // place into returnstream
+  boost::archive::text_oarchive oa(returnstream);
+  oa << data;
+
+  FragmentResult::ptr s( new FragmentResult(getId(), returnstream.str()) );
+  return s;
+}
Index: src/Fragmentation/Automation/Jobs/MPQCCommandJob.hpp
===================================================================
--- src/Fragmentation/Automation/Jobs/MPQCCommandJob.hpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/Jobs/MPQCCommandJob.hpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
@@ -0,0 +1,46 @@
+/*
+ * MPQCJob.hpp
+ *
+ *  Created on: Feb 05, 2012
+ *      Author: heber
+ */
+
+#ifndef MPQCCOMMANDJOB_HPP_
+#define MPQCCOMMANDJOB_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string>
+
+#include "Results/FragmentResult.hpp"
+#include "Jobs/SystemCommandJob.hpp"
+
+#include "Jobs/MPQCCommandJob_MPQCData.hpp"
+
+class MPQCCommandJobTest;
+
+/** This class calls mpqc for solving a specific Hartree Fock problem.
+ *
+ */
+class MPQCCommandJob : public SystemCommandJob
+{
+  //!> grant unit test access
+  friend class MPQCCommandJobTest;
+public:
+  MPQCCommandJob(const std::string _inputfile, const JobId_t _JobId);
+  ~MPQCCommandJob();
+
+private:
+  //!> class that contains energy and forces and serialization capabilities
+  MPQCData data;
+
+  FragmentResult::ptr extractResult(const std::string &resultstring);
+  static const std::string keyword_energy;
+  static const std::string keyword_forces;
+};
+
+
+#endif /* MPQCCOMMANDJOB_HPP_ */
Index: src/Fragmentation/Automation/Jobs/MPQCCommandJob_MPQCData.cpp
===================================================================
--- src/Fragmentation/Automation/Jobs/MPQCCommandJob_MPQCData.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/Jobs/MPQCCommandJob_MPQCData.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
@@ -0,0 +1,65 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MPQCCommandJob_MPQCData.cpp
+ *
+ *  Created on: Feb 08, 2012
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "MPQCCommandJob_MPQCData.hpp"
+
+#include <limits>
+
+#include "CodePatterns/Log.hpp"
+
+/** Constructor for class MPQCData.
+ *
+ */
+MPQCData::MPQCData() :
+    energy(0.)
+{}
+
+/** Destructor for class MPQCData.
+ *
+ */
+MPQCData::~MPQCData()
+{}
+
+/** Comparator for class MPQCData.
+ *
+ */
+bool MPQCData::operator==(const MPQCData &other) const
+{
+  if (fabs(energy - other.energy) > std::numeric_limits<double>::epsilon()) {
+    LOG(1, "INFO: Energy's in MPQCData differ: "
+        << energy << " != " << other.energy << ".");
+    return false;
+  }
+  if (forces.size() != other.forces.size()) {
+    LOG(1, "INFO: Forces's in MPQCData differ in size: "
+        << forces.size() << " != " << other.forces.size() << ".");
+    return false;
+  }
+  for (size_t i = 0; i < forces.size(); ++i)
+    for (size_t index = 0; index < NDIM; ++index)
+      if (fabs(forces[i][index] - other.forces[i][index]) > std::numeric_limits<double>::epsilon()) {
+        LOG(1, "INFO: " << index << "th component of force of particle "
+            << i << " in MPQCData differ: " << forces[i][index]
+            << " != " << other.forces[i][index] << ".");
+        return false;
+      }
+  return true;
+}
Index: src/Fragmentation/Automation/Jobs/MPQCCommandJob_MPQCData.hpp
===================================================================
--- src/Fragmentation/Automation/Jobs/MPQCCommandJob_MPQCData.hpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/Jobs/MPQCCommandJob_MPQCData.hpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
@@ -0,0 +1,63 @@
+/*
+ * MPQCCommandJob_MPQCData.hpp
+ *
+ *  Created on: Feb 08, 2012
+ *      Author: heber
+ */
+
+#ifndef MPQCCOMMANDJOB_MPQCDATA_HPP_
+#define MPQCCOMMANDJOB_MPQCDATA_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/vector.hpp>
+
+#include <vector>
+
+#include "LinearAlgebra/defs.hpp"
+
+class MPQCCommandJob;
+class MPQCCommandJobTest;
+class MPQCDataTest;
+
+/** Internal class that holds the data and can be serialized.
+ *
+ */
+class MPQCData {
+  //!> allow MPQCCommandJob access to member variables directly
+  friend class MPQCCommandJob;
+  //!> grant MPQCCommandJob's unit test access
+  friend class MPQCCommandJobTest;
+  //!> grant unit test access
+  friend class MPQCDataTest;
+public:
+  MPQCData();
+  ~MPQCData();
+
+  bool operator==(const MPQCData &other) const;
+
+  bool operator!=(const MPQCData &other) const {
+    return !(*this == other);
+  }
+
+  typedef std::vector<double> vector_type;
+
+  double energy;
+  std::vector< vector_type  > forces;
+
+private:
+  friend class boost::serialization::access;
+  // serialization
+  template <typename Archive>
+  void serialize(Archive& ar, const unsigned int version)
+  {
+    ar & energy;
+    ar & forces;
+  }
+};
+
+#endif /* MPQCCOMMANDJOB_MPQCDATA_HPP_ */
Index: src/Fragmentation/Automation/Makefile.am
===================================================================
--- src/Fragmentation/Automation/Makefile.am	(revision d920b9e35d1332c01a14e561aa60b85bbe881b3b)
+++ src/Fragmentation/Automation/Makefile.am	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
@@ -1,4 +1,6 @@
 # PLEASE adhere to the alphabetical ordering in this Makefile!
 # Also indentation by a single tab
+
+INCLUDES = -I$(top_srcdir)/LinearAlgebra/src
 
 MOSTLYCLEANFILES =
@@ -16,4 +18,6 @@
   JobId.cpp \
   Jobs/FragmentJob.cpp \
+  Jobs/MPQCCommandJob.cpp \
+  Jobs/MPQCCommandJob_MPQCData.cpp \
   Jobs/SystemCommandJob.cpp \
   Results/FragmentResult.cpp
@@ -23,4 +27,6 @@
   JobId.hpp \
   Jobs/FragmentJob.hpp \
+  Jobs/MPQCCommandJob.hpp \
+  Jobs/MPQCCommandJob_MPQCData.hpp \
   Jobs/SystemCommandJob.hpp \
   Results/FragmentResult.hpp
@@ -29,4 +35,6 @@
 libMolecuilderFragmentJobs_la_includedir = $(includedir)/MoleCuilder/Fragmentation/Automation/
 nobase_libMolecuilderFragmentJobs_la_include_HEADERS = $(FRAGMENTJOBSHEADER)
+libMolecuilderFragmentJobs_la_CPPFLAGS = ${BOOST_CPPFLAGS} ${CodePatterns_CFLAGS}
+libMolecuilderFragmentJobs_la_LDFLAGS = $(AM_LDFLAGS)
 libMolecuilderFragmentJobs_la_SOURCES = $(FRAGMENTJOBSSOURCE)
 libMolecuilderFragmentJobs_la_LIBADD = \
Index: src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.cpp
===================================================================
--- src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
@@ -0,0 +1,102 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MPQCCommandJobUnitTest.cpp
+ *
+ *  Created on: Feb 08, 2012
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+// include headers that implement a archive in simple text format
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+#include <vector>
+
+#include "MPQCCommandJobUnitTest.hpp"
+
+#include "Jobs/MPQCCommandJob.hpp"
+
+#include "CodePatterns/Assert.hpp"
+#include "CodePatterns/Log.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+const std::string resultstring="\
+\n\
+   total scf energy = -37.3479855\n\
+\n\
+   Total Gradient:\n\
+  1  H  -2.35  -0.54  0.345\n\
+  2  H  0.35  -0.54  0.345\n\
+\n\
+";
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( MPQCCommandJobTest );
+
+
+void MPQCCommandJobTest::setUp()
+{
+  // Throw assertions
+  ASSERT_DO(Assert::Throw);
+
+  setVerbosity(3);
+
+  job = new MPQCCommandJob(std::string("empty"), 1);
+}
+
+
+void MPQCCommandJobTest::tearDown()
+{
+  delete job;
+}
+
+/** UnitTest for extractString()
+ */
+void MPQCCommandJobTest::extractStringTest()
+{
+  // prepare result container
+  MPQCData data;
+  data.energy = -37.3479855;
+  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);
+  data.forces.push_back( force );
+  force.clear();
+  force.push_back(0.35);
+  force.push_back(-0.54);
+  force.push_back(0.345);
+  data.forces.push_back( force );
+
+  // extract and check
+  FragmentResult::ptr result = job->extractResult(resultstring);
+  std::stringstream returnstream(result->result);
+
+  // deserialize
+  MPQCData extractedData;
+  boost::archive::text_iarchive ia(returnstream);
+  ia >> extractedData;
+
+  CPPUNIT_ASSERT( data == extractedData );
+}
Index: src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.hpp
===================================================================
--- src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.hpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.hpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
@@ -0,0 +1,40 @@
+/*
+ * MPQCCommandJobUnitTest.hpp
+ *
+ *  Created on: Oct 23, 2011
+ *      Author: heber
+ */
+
+#ifndef MPQCCOMMANDJOBUNITTEST_HPP_
+#define MPQCCOMMANDJOBUNITTEST_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class MPQCCommandJob;
+
+
+/********************************************** Test classes **************************************/
+
+class MPQCCommandJobTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( MPQCCommandJobTest) ;
+    CPPUNIT_TEST ( extractStringTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void extractStringTest();
+
+private:
+      MPQCCommandJob *job;
+};
+
+#endif /* MPQCCOMMANDJOBUNITTEST_HPP_ */
Index: src/Fragmentation/Automation/unittests/MPQCDataUnitTest.cpp
===================================================================
--- src/Fragmentation/Automation/unittests/MPQCDataUnitTest.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/unittests/MPQCDataUnitTest.cpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
@@ -0,0 +1,140 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MPQCDataUnitTest.cpp
+ *
+ *  Created on: Feb 09, 2012
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+// include headers that implement a archive in simple text format
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+#include <limits>
+#include <vector>
+
+#include "MPQCDataUnitTest.hpp"
+
+#include "Jobs/MPQCCommandJob_MPQCData.hpp"
+
+#include "CodePatterns/Assert.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( MPQCDataTest );
+
+
+void MPQCDataTest::setUp()
+{
+  // Throw assertions
+  ASSERT_DO(Assert::Throw);
+
+  data = new MPQCData;
+
+  data->energy = -37.3479855;
+  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);
+  data->forces.push_back(force);
+  force.clear();
+  force.push_back(-2.35);
+  force.push_back(-0.54);
+  force.push_back(0.345);
+  data->forces.push_back( force );
+
+  CPPUNIT_ASSERT_EQUAL( (size_t)2, data->forces.size() );
+}
+
+
+void MPQCDataTest::tearDown()
+{
+  delete data;
+}
+
+/** UnitTest for operator==()
+ */
+void MPQCDataTest::operatorTest()
+{
+  MPQCData otherData;
+
+  // ascertain unequality
+  CPPUNIT_ASSERT( !(*data == otherData) );
+  CPPUNIT_ASSERT( *data != otherData );
+
+  // construct closer and closer pendant
+  otherData.energy = -37.3479855;
+  CPPUNIT_ASSERT( *data != otherData );
+  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);
+  otherData.forces.push_back(force);
+  CPPUNIT_ASSERT( *data != otherData );
+  force.clear();
+  force.push_back(-2.35);
+  force.push_back(-0.54);
+  force.push_back(0.345);
+  otherData.forces.push_back( force );
+  CPPUNIT_ASSERT( *data == otherData );
+
+  // change energy
+  otherData.energy = -4;
+  CPPUNIT_ASSERT( *data != otherData );
+  otherData.energy = -37.3479855;
+  CPPUNIT_ASSERT( *data == otherData );
+
+  // change force component
+  otherData.forces[0][2] = -4;
+  CPPUNIT_ASSERT( *data != otherData );
+  otherData.forces[0][2] = 0.345;
+  CPPUNIT_ASSERT( *data == otherData );
+
+  // check sensibility
+  otherData.energy -= 1e-1*std::numeric_limits<double>::epsilon();
+  CPPUNIT_ASSERT( *data == otherData );
+  otherData.forces[1][0] -= 1e-1*std::numeric_limits<double>::epsilon();
+  CPPUNIT_ASSERT( *data == otherData );
+}
+
+/** UnitTest for serialization
+ */
+void MPQCDataTest::serializationTest()
+{
+  // serialize
+  std::stringstream outputstream;
+  boost::archive::text_oarchive oa(outputstream);
+  oa << data;
+
+  // deserialize
+  MPQCData *extractedData;
+  std::stringstream returnstream(outputstream.str());
+  boost::archive::text_iarchive ia(returnstream);
+  ia >> extractedData;
+
+  CPPUNIT_ASSERT( *data == *extractedData );
+
+  delete extractedData;
+}
Index: src/Fragmentation/Automation/unittests/MPQCDataUnitTest.hpp
===================================================================
--- src/Fragmentation/Automation/unittests/MPQCDataUnitTest.hpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
+++ src/Fragmentation/Automation/unittests/MPQCDataUnitTest.hpp	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
@@ -0,0 +1,42 @@
+/*
+ * MPQCDataUnitTest.hpp
+ *
+ *  Created on: Feb 9, 2012
+ *      Author: heber
+ */
+
+#ifndef MPQCDATAUNITTEST_HPP_
+#define MPQCDATAUNITTEST_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <string>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class MPQCData;
+
+
+/********************************************** Test classes **************************************/
+
+class MPQCDataTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( MPQCDataTest) ;
+    CPPUNIT_TEST ( operatorTest );
+    CPPUNIT_TEST ( serializationTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void operatorTest();
+      void serializationTest();
+
+private:
+      MPQCData *data;
+};
+
+#endif /* MPQCDATAUNITTEST_HPP_ */
Index: src/Fragmentation/Automation/unittests/Makefile.am
===================================================================
--- src/Fragmentation/Automation/unittests/Makefile.am	(revision d920b9e35d1332c01a14e561aa60b85bbe881b3b)
+++ src/Fragmentation/Automation/unittests/Makefile.am	(revision cc276ec507f3ccef1a447ef1f76b1f35e8bcd527)
@@ -6,4 +6,6 @@
   unittests/FragmentResultUnitTest.cpp \
   unittests/FragmentQueueUnitTest.cpp \
+  unittests/MPQCCommandJobUnitTest.cpp \
+  unittests/MPQCDataUnitTest.cpp \
   unittests/SystemCommandJobUnitTest.cpp
 
@@ -12,4 +14,6 @@
   unittests/FragmentResultUnitTest.hpp \
   unittests/FragmentQueueUnitTest.hpp \
+  unittests/MPQCCommandJobUnitTest.hpp \
+  unittests/MPQCDataUnitTest.hpp \
   unittests/SystemCommandJobUnitTest.hpp
 
@@ -18,4 +22,6 @@
   FragmentResultUnitTest \
   FragmentQueueUnitTest \
+  MPQCCommandJobUnitTest \
+  MPQCDataUnitTest \
   SystemCommandJobUnitTest
 
@@ -74,4 +80,26 @@
   ${CodePatterns_LIBS}
 
+MPQCCommandJobUnitTest_LDFLAGS = ${CodePatterns_LIBS} $(CPPUNIT_LIBS) -ldl
+MPQCCommandJobUnitTest_CPPFLAGS = ${BOOST_CPPFLAGS} $(CPPUNIT_CFLAGS) ${CodePatterns_CFLAGS}
+MPQCCommandJobUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+  unittests/MPQCCommandJobUnitTest.cpp \
+  unittests/MPQCCommandJobUnitTest.hpp
+MPQCCommandJobUnitTest_LDADD = \
+  libMolecuilderFragmentJobs.la \
+  $(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_SERIALIZATION_LIBS) \
+  $(BOOST_SYSTEM_LDFLAGS) $(BOOST_SYSTEM_LIBS) \
+  ${CodePatterns_LIBS}
+
+MPQCDataUnitTest_LDFLAGS = ${CodePatterns_LIBS} $(CPPUNIT_LIBS) -ldl
+MPQCDataUnitTest_CPPFLAGS = ${BOOST_CPPFLAGS} $(CPPUNIT_CFLAGS) ${CodePatterns_CFLAGS}
+MPQCDataUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+  unittests/MPQCDataUnitTest.cpp \
+  unittests/MPQCDataUnitTest.hpp
+MPQCDataUnitTest_LDADD = \
+  libMolecuilderFragmentJobs.la \
+  $(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_SERIALIZATION_LIBS) \
+  $(BOOST_SYSTEM_LDFLAGS) $(BOOST_SYSTEM_LIBS) \
+  ${CodePatterns_LIBS}
+
 SystemCommandJobUnitTest_LDFLAGS = ${CodePatterns_LIBS} $(CPPUNIT_LIBS) -ldl
 SystemCommandJobUnitTest_CPPFLAGS = ${BOOST_CPPFLAGS} $(CPPUNIT_CFLAGS) ${CodePatterns_CFLAGS}
