Index: src/Fragmentation/Automation/Jobs/MPQCCommandJob.cpp
===================================================================
--- src/Fragmentation/Automation/Jobs/MPQCCommandJob.cpp	(revision ff60cfa6d1a9d5d02c5383a60a027b1843d6e0b6)
+++ src/Fragmentation/Automation/Jobs/MPQCCommandJob.cpp	(revision 545446b038f1a0d9d33bd09fbb7dc838635c4311)
@@ -20,4 +20,9 @@
 #include "CodePatterns/MemDebug.hpp"
 
+// include headers that implement a archive in simple text format
+// otherwise BOOST_CLASS_EXPORT_IMPLEMENT has no effect
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
 #include "MPQCCommandJob.hpp"
 
@@ -37,4 +42,10 @@
 const std::string MPQCCommandJob::keyword_hartreefock_forces("Total Gradient");
 const std::string MPQCCommandJob::keyword_moellerplesset_forces("Total MP2 gradient [au]:");
+
+/** Default constructor for class MPQCCommandJob.
+ *
+ */
+MPQCCommandJob::MPQCCommandJob()
+{}
 
 /** Constructor for class MPQCCommandJob.
@@ -124,2 +135,17 @@
   return s;
 }
+
+bool MPQCCommandJob::operator==(const MPQCCommandJob &other) const
+{
+  if (data != other.data) {
+    LOG(2, "INFO: data's of both MPQCCommandJob don't match.");
+    return false;
+  }
+  return (static_cast<const SystemCommandJob &>(*this)
+      == static_cast<const SystemCommandJob &>(other));
+}
+
+
+// we need to explicitly instantiate the serialization functions as
+// its is only serialized through its base class FragmentJob
+BOOST_CLASS_EXPORT_IMPLEMENT(MPQCCommandJob)
Index: src/Fragmentation/Automation/Jobs/MPQCCommandJob.hpp
===================================================================
--- src/Fragmentation/Automation/Jobs/MPQCCommandJob.hpp	(revision ff60cfa6d1a9d5d02c5383a60a027b1843d6e0b6)
+++ src/Fragmentation/Automation/Jobs/MPQCCommandJob.hpp	(revision 545446b038f1a0d9d33bd09fbb7dc838635c4311)
@@ -13,4 +13,6 @@
 #include <config.h>
 #endif
+
+#include <boost/serialization/export.hpp>
 
 #include <string>
@@ -34,4 +36,23 @@
   ~MPQCCommandJob();
 
+  bool operator==(const MPQCCommandJob &other) const;
+
+  bool operator!=(const MPQCCommandJob &other) const {
+    return !(*this == other);
+  }
+
+private:
+  //!> private default cstor only for serializatio
+  MPQCCommandJob();
+
+  friend class boost::serialization::access;
+  // serialization
+  template <typename Archive>
+  void serialize(Archive& ar, const unsigned int version)
+  {
+    ar & boost::serialization::base_object<SystemCommandJob>(*this);
+    ar & data;
+  }
+
 private:
   //!> class that contains energy and forces and serialization capabilities
@@ -45,4 +66,7 @@
 };
 
+// we need to give this class a unique key for serialization
+// its is only serialized through its base class FragmentJob
+BOOST_CLASS_EXPORT_KEY(MPQCCommandJob)
 
 #endif /* MPQCCOMMANDJOB_HPP_ */
Index: src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.cpp
===================================================================
--- src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.cpp	(revision ff60cfa6d1a9d5d02c5383a60a027b1843d6e0b6)
+++ src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.cpp	(revision 545446b038f1a0d9d33bd09fbb7dc838635c4311)
@@ -127,2 +127,41 @@
   CPPUNIT_ASSERT( data == extractedData );
 }
+
+/** UnitTest for operator==()
+ */
+void MPQCCommandJobTest::operatorTest()
+{
+  MPQCCommandJob otherJob(std::string("empty"), 1);
+
+  // ascertain equality
+  CPPUNIT_ASSERT( *job == otherJob );
+
+  // parse results
+  FragmentResult::ptr result = job->extractResult(resultstring);
+
+  // ascertain unequality as now data should differ
+  CPPUNIT_ASSERT( *job != otherJob );
+}
+
+/** UnitTest for serialization
+ */
+void MPQCCommandJobTest::serializationTest()
+{
+  // parse results
+  FragmentResult::ptr result = job->extractResult(resultstring);
+
+  // serialize
+  std::stringstream outputstream;
+  boost::archive::text_oarchive oa(outputstream);
+  oa << job;
+
+  // deserialize
+  MPQCCommandJob *extractedJob;
+  std::stringstream returnstream(outputstream.str());
+  boost::archive::text_iarchive ia(returnstream);
+  ia >> extractedJob;
+
+  CPPUNIT_ASSERT( *job == *extractedJob );
+
+  delete extractedJob;
+}
Index: src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.hpp
===================================================================
--- src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.hpp	(revision ff60cfa6d1a9d5d02c5383a60a027b1843d6e0b6)
+++ src/Fragmentation/Automation/unittests/MPQCCommandJobUnitTest.hpp	(revision 545446b038f1a0d9d33bd09fbb7dc838635c4311)
@@ -27,4 +27,6 @@
     CPPUNIT_TEST_SUITE( MPQCCommandJobTest) ;
     CPPUNIT_TEST ( extractStringTest );
+    CPPUNIT_TEST ( operatorTest );
+    CPPUNIT_TEST ( serializationTest );
     CPPUNIT_TEST_SUITE_END();
 
@@ -33,4 +35,6 @@
       void tearDown();
       void extractStringTest();
+      void operatorTest();
+      void serializationTest();
 
 private:
