Index: src/Fragmentation/Homology/FragmentEdge.cpp
===================================================================
--- src/Fragmentation/Homology/FragmentEdge.cpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/FragmentEdge.cpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -34,4 +34,9 @@
 #include <config.h>
 #endif
+
+// 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 "CodePatterns/MemDebug.hpp"
@@ -118,2 +123,6 @@
   return out;
 }
+
+
+// we need to explicitly instantiate the serialization functions
+BOOST_CLASS_EXPORT_IMPLEMENT(FragmentEdge)
Index: src/Fragmentation/Homology/FragmentEdge.hpp
===================================================================
--- src/Fragmentation/Homology/FragmentEdge.hpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/FragmentEdge.hpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -13,4 +13,7 @@
 #include <config.h>
 #endif
+
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/utility.hpp>
 
 #include <iosfwd>
@@ -42,5 +45,17 @@
   //!> stores the atomic number of either FragmentNode making up the edge
   const AtomicNumberPair_t AtomicNumberPair;
+
+private:
+  friend class boost::serialization::access;
+  // serialization
+  template <typename Archive>
+  void serialize(Archive& ar, const unsigned int version)
+  {
+    ar & const_cast<AtomicNumberPair_t &>(AtomicNumberPair);
+  }
 };
+
+// we need to give this class a unique key for serialization
+BOOST_CLASS_EXPORT_KEY(FragmentEdge)
 
 std::ostream& operator<<(std::ostream &out, const FragmentEdge &node);
Index: src/Fragmentation/Homology/FragmentNode.cpp
===================================================================
--- src/Fragmentation/Homology/FragmentNode.cpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/FragmentNode.cpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -34,4 +34,9 @@
 #include <config.h>
 #endif
+
+// 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 "CodePatterns/MemDebug.hpp"
@@ -102,2 +107,6 @@
   return out;
 }
+
+
+// we need to explicitly instantiate the serialization functions
+BOOST_CLASS_EXPORT_IMPLEMENT(FragmentNode)
Index: src/Fragmentation/Homology/FragmentNode.hpp
===================================================================
--- src/Fragmentation/Homology/FragmentNode.hpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/FragmentNode.hpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -13,4 +13,6 @@
 #include <config.h>
 #endif
+
+#include <boost/serialization/export.hpp>
 
 #include <iosfwd>
@@ -71,5 +73,18 @@
   //!> number of connecting edges
   const size_t ConnectedEdges;
+
+private:
+  friend class boost::serialization::access;
+  // serialization
+  template <typename Archive>
+  void serialize(Archive& ar, const unsigned int version)
+  {
+    ar & const_cast<size_t &>(AtomicNumber);
+    ar & const_cast<size_t &>(ConnectedEdges);
+  }
 };
+
+// we need to give this class a unique key for serialization
+BOOST_CLASS_EXPORT_KEY(FragmentNode)
 
 std::ostream& operator<<(std::ostream &out, const FragmentNode &node);
Index: src/Fragmentation/Homology/HomologyGraph.cpp
===================================================================
--- src/Fragmentation/Homology/HomologyGraph.cpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/HomologyGraph.cpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -34,4 +34,9 @@
 #include <config.h>
 #endif
+
+// 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 "CodePatterns/MemDebug.hpp"
@@ -106,2 +111,5 @@
 }
 
+// we need to explicitly instantiate the serialization functions
+BOOST_CLASS_EXPORT_IMPLEMENT(HomologyGraph)
+
Index: src/Fragmentation/Homology/HomologyGraph.hpp
===================================================================
--- src/Fragmentation/Homology/HomologyGraph.hpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/HomologyGraph.hpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -14,4 +14,7 @@
 #include <config.h>
 #endif
+
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/set.hpp>
 
 #include <set>
@@ -95,7 +98,20 @@
   //!> information on the edges of the graph
   const edges_t edges;
+
+private:
+  friend class boost::serialization::access;
+  // serialization
+  template <typename Archive>
+  void serialize(Archive& ar, const unsigned int version)
+  {
+    ar & const_cast<nodes_t &>(nodes);
+    ar & const_cast<edges_t &>(edges);
+  }
 };
 
 std::ostream& operator<<(std::ostream& ost, const HomologyGraph &graph);
+
+// we need to give this class a unique key for serialization
+BOOST_CLASS_EXPORT_KEY(HomologyGraph)
 
 // define some helpers outside to allow for light-weight unit testing
Index: src/Fragmentation/Homology/HomologyGraph_getFromKeyset.cpp
===================================================================
--- src/Fragmentation/Homology/HomologyGraph_getFromKeyset.cpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/HomologyGraph_getFromKeyset.cpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -47,4 +47,8 @@
 #include "World.hpp"
 
+// we have placed these functions into an extra module to allow compiling the
+// unit tests which do no require them against dummy units which do not pull
+// in all the cludder of World, atom, molecule, and so on ...
+
 namespace detail {
   const HomologyGraph::nodes_t getNodesFromKeySet(const KeySet &keyset)
Index: src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.cpp
===================================================================
--- src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.cpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.cpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -48,4 +48,6 @@
 
 #include "CodePatterns/Assert.hpp"
+
+#include <sstream>
 
 #ifdef HAVE_TESTRUNNER
@@ -134,2 +136,22 @@
   CPPUNIT_ASSERT( edge == edge);
 }
+
+
+/** UnitTest for serialization
+ */
+void FragmentEdgeTest::serializeTest()
+{
+  FragmentEdge edge(1,1);
+  // serialize
+  std::stringstream outputstream;
+  boost::archive::text_oarchive oa(outputstream);
+  oa << edge;
+
+  // deserialize
+  FragmentEdge sameedge;
+  std::stringstream returnstream(outputstream.str());
+  boost::archive::text_iarchive ia(returnstream);
+  ia >> sameedge;
+
+  CPPUNIT_ASSERT( edge == sameedge );
+}
Index: src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.hpp
===================================================================
--- src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.hpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.hpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -26,4 +26,5 @@
     CPPUNIT_TEST ( comparatorTest );
     CPPUNIT_TEST ( assignmentTest );
+    CPPUNIT_TEST ( serializeTest );
     CPPUNIT_TEST_SUITE_END();
 
@@ -33,4 +34,5 @@
       void comparatorTest();
       void assignmentTest();
+      void serializeTest();
 
 };
Index: src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.cpp
===================================================================
--- src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.cpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.cpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -49,4 +49,5 @@
 
 #include "CodePatterns/Assert.hpp"
+#include <sstream>
 
 #ifdef HAVE_TESTRUNNER
@@ -135,2 +136,22 @@
   CPPUNIT_ASSERT( node == node);
 }
+
+
+/** UnitTest for serialization
+ */
+void FragmentNodeTest::serializeTest()
+{
+  FragmentNode node(1,1);
+  // serialize
+  std::stringstream outputstream;
+  boost::archive::text_oarchive oa(outputstream);
+  oa << node;
+
+  // deserialize
+  FragmentNode samenode;
+  std::stringstream returnstream(outputstream.str());
+  boost::archive::text_iarchive ia(returnstream);
+  ia >> samenode;
+
+  CPPUNIT_ASSERT( node == samenode );
+}
Index: src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.hpp
===================================================================
--- src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.hpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.hpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -26,4 +26,5 @@
     CPPUNIT_TEST ( comparatorTest );
     CPPUNIT_TEST ( assignmentTest );
+    CPPUNIT_TEST ( serializeTest );
     CPPUNIT_TEST_SUITE_END();
 
@@ -33,4 +34,5 @@
       void comparatorTest();
       void assignmentTest();
+      void serializeTest();
 };
 
Index: src/Fragmentation/Homology/unittests/HomologyGraphUnitTest.cpp
===================================================================
--- src/Fragmentation/Homology/unittests/HomologyGraphUnitTest.cpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/unittests/HomologyGraphUnitTest.cpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -51,4 +51,5 @@
 
 #include <boost/assign.hpp>
+#include <sstream>
 
 using namespace boost::assign;
@@ -147,2 +148,23 @@
   CPPUNIT_ASSERT( *graph == *graph);
 }
+
+
+/** UnitTest for serialization
+ */
+void HomologyGraphTest::serializeTest()
+{
+  // serialize
+  std::stringstream outputstream;
+  boost::archive::text_oarchive oa(outputstream);
+  oa << graph;
+
+  // deserialize
+  HomologyGraph *samegraph;
+  std::stringstream returnstream(outputstream.str());
+  boost::archive::text_iarchive ia(returnstream);
+  ia >> samegraph;
+
+  CPPUNIT_ASSERT( *graph == *samegraph );
+
+  delete samegraph;
+}
Index: src/Fragmentation/Homology/unittests/HomologyGraphUnitTest.hpp
===================================================================
--- src/Fragmentation/Homology/unittests/HomologyGraphUnitTest.hpp	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/unittests/HomologyGraphUnitTest.hpp	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -29,4 +29,5 @@
     CPPUNIT_TEST ( comparatorTest );
     CPPUNIT_TEST ( assigmentTest );
+    CPPUNIT_TEST ( serializeTest );
     CPPUNIT_TEST_SUITE_END();
 
@@ -36,4 +37,5 @@
       void comparatorTest();
       void assigmentTest();
+      void serializeTest();
 
 private:
Index: src/Fragmentation/Homology/unittests/Makefile.am
===================================================================
--- src/Fragmentation/Homology/unittests/Makefile.am	(revision e15ffe45688ddef78bcef1bbba8b711c8a07f382)
+++ src/Fragmentation/Homology/unittests/Makefile.am	(revision 67db806639ff7456fbd7dd055cd5657502eb2af1)
@@ -28,4 +28,5 @@
 	../libMolecuilderHelpers.la \
 	${CodePatterns_LIBS} \
+  $(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_SERIALIZATION_LIBS) \
 	$(BOOST_LIB)
 
@@ -39,5 +40,5 @@
 	../Fragmentation/Homology/unittests/FragmentNodeUnitTest.hpp
 FragmentNodeUnitTest_LDADD = ${FRAGMENTATIONHOMOLOGYLIBS}
-
+	
 HomologyContainerUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
 	../Fragmentation/Homology/unittests/HomologyContainerUnitTest.cpp \
