Index: src/Fragmentation/Homology/FragmentEdge.cpp
===================================================================
--- src/Fragmentation/Homology/FragmentEdge.cpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
+++ src/Fragmentation/Homology/FragmentEdge.cpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -0,0 +1,119 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * Please see the COPYING file or "Copyright notice" in builder.cpp for details.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>. 
+ */
+
+/*
+ * FragmentEdge.cpp
+ *
+ *  Created on: Sep 24, 2012
+ *      Author: heber
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "FragmentEdge.hpp"
+
+#include <iostream>
+
+#include "CodePatterns/Assert.hpp"
+
+FragmentEdge::FragmentEdge() :
+  AtomicNumberPair(std::make_pair(0,0))
+{}
+
+FragmentEdge::FragmentEdge(const AtomicNumberPair_t &_pair) :
+  AtomicNumberPair(_pair)
+{
+  ASSERT( AtomicNumberPair.first < AtomicNumberPair.second,
+      "FragmentEdge::FragmentEdge() - when giving as pair, first must be less than second.");
+}
+
+FragmentEdge::FragmentEdge(const size_t _left, const size_t _right) :
+  AtomicNumberPair( _left < _right ? std::make_pair(_left,_right) : std::make_pair(_right,_left))
+{}
+
+/** Assignment operator for class FragmentEdge.
+ *
+ * We need this assignment to overcome the constness of the member. For STL
+ * containers default cstors and usable assignment ops are required. This
+ * const_cast is only way to allow for const member variables.
+ *
+ * @param edge other instance to use in assignment
+ * @return this instance for concatenation
+ */
+FragmentEdge& FragmentEdge::operator=(const FragmentEdge &edge)
+{
+  // check self-assignment
+  if (this != &edge) {
+    const_cast<AtomicNumberPair_t &>(this->AtomicNumberPair) = edge.AtomicNumberPair;
+  }
+  return *this;
+}
+
+bool FragmentEdge::operator<(const FragmentEdge &edge) const
+{
+  if (AtomicNumberPair.first < edge.AtomicNumberPair.first) {
+    return true;
+  } else if (AtomicNumberPair.first > edge.AtomicNumberPair.first) {
+    return false;
+  } else {
+    if (AtomicNumberPair.second < edge.AtomicNumberPair.second)
+      return true;
+    else
+      return false;
+  }
+}
+
+bool FragmentEdge::operator>(const FragmentEdge &edge) const
+{
+  if (AtomicNumberPair.first > edge.AtomicNumberPair.first) {
+    return true;
+  } else if (AtomicNumberPair.first < edge.AtomicNumberPair.first) {
+    return false;
+  } else {
+    if (AtomicNumberPair.second > edge.AtomicNumberPair.second)
+      return true;
+    else
+      return false;
+  }
+}
+
+bool FragmentEdge::operator==(const FragmentEdge &edge) const
+{
+  if (AtomicNumberPair.first != edge.AtomicNumberPair.first) {
+    return false;
+  } else {
+    return (AtomicNumberPair.second == edge.AtomicNumberPair.second);
+  }
+}
+
+std::ostream& operator<<(std::ostream &out, const FragmentEdge &edge)
+{
+  out << edge.AtomicNumberPair.first << "<->" << edge.AtomicNumberPair.second;
+  return out;
+}
Index: src/Fragmentation/Homology/FragmentEdge.hpp
===================================================================
--- src/Fragmentation/Homology/FragmentEdge.hpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
+++ src/Fragmentation/Homology/FragmentEdge.hpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -0,0 +1,48 @@
+/*
+ * FragmentEdge.hpp
+ *
+ *  Created on: Sep 24, 2012
+ *      Author: heber
+ */
+
+#ifndef FRAGMENTEDGE_HPP_
+#define FRAGMENTEDGE_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <iosfwd>
+#include <utility>
+
+class FragmentEdge
+{
+  //!> grant output operator access to internals
+  friend std::ostream& operator<<(std::ostream &out, const FragmentEdge &node);
+public:
+  typedef std::pair<size_t, size_t> AtomicNumberPair_t;
+
+  FragmentEdge();
+  FragmentEdge(const AtomicNumberPair_t &_pair);
+  FragmentEdge(const size_t _left, const size_t _right);
+  ~FragmentEdge()
+  {}
+
+  FragmentEdge& operator=(const FragmentEdge &edge);
+
+  bool operator<(const FragmentEdge &edge) const;
+  bool operator>(const FragmentEdge &edge) const;
+  bool operator==(const FragmentEdge &edge) const;
+  bool operator!=(const FragmentEdge &edge) const {
+    return (!(*this == edge));
+  }
+
+private:
+  //!> stores the atomic number of either FragmentNode making up the edge
+  const AtomicNumberPair_t AtomicNumberPair;
+};
+
+std::ostream& operator<<(std::ostream &out, const FragmentEdge &node);
+
+#endif /* FRAGMENTEDGE_HPP_ */
Index: src/Fragmentation/Homology/FragmentNode.cpp
===================================================================
--- src/Fragmentation/Homology/FragmentNode.cpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
+++ src/Fragmentation/Homology/FragmentNode.cpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -0,0 +1,103 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * Please see the COPYING file or "Copyright notice" in builder.cpp for details.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>. 
+ */
+
+/*
+ * FragmentNode.cpp
+ *
+ *  Created on: Sep 24, 2012
+ *      Author: heber
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "FragmentNode.hpp"
+
+#include <iostream>
+
+/** Assignment operator for class FragmentNode.
+ *
+ * We need this assignment to overcome the constness of the member. For STL
+ * containers default cstors and usable assignment ops are required. This
+ * const_cast is only way to allow for const member variables.
+ *
+ * @param edge other instance to use in assignment
+ * @return this instance for concatenation
+ */
+FragmentNode& FragmentNode::operator=(const FragmentNode &node)
+{
+  // check self-assignment
+  if (this != &node) {
+    const_cast<size_t &>(this->AtomicNumber) = node.AtomicNumber;
+    const_cast<size_t &>(this->ConnectedEdges) = node.ConnectedEdges;
+  }
+  return *this;
+}
+
+bool FragmentNode::operator<(const FragmentNode &node) const
+{
+  if (AtomicNumber < node.AtomicNumber) {
+    return true;
+  } else if (AtomicNumber > node.AtomicNumber) {
+    return false;
+  } else {
+    if (ConnectedEdges < node.ConnectedEdges)
+      return true;
+    else
+      return false;
+  }
+}
+
+bool FragmentNode::operator>(const FragmentNode &node) const
+{
+  if (AtomicNumber > node.AtomicNumber) {
+    return true;
+  } else if (AtomicNumber < node.AtomicNumber) {
+    return false;
+  } else {
+    if (ConnectedEdges > node.ConnectedEdges)
+      return true;
+    else
+      return false;
+  }
+}
+
+bool FragmentNode::operator==(const FragmentNode &node) const
+{
+  if (AtomicNumber != node.AtomicNumber) {
+    return false;
+  } else {
+    return (ConnectedEdges == node.ConnectedEdges);
+  }
+}
+
+std::ostream& operator<<(std::ostream &out, const FragmentNode &node)
+{
+  out << "[Z" << node.AtomicNumber << ",E" << node.ConnectedEdges << "]";
+  return out;
+}
Index: src/Fragmentation/Homology/FragmentNode.hpp
===================================================================
--- src/Fragmentation/Homology/FragmentNode.hpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
+++ src/Fragmentation/Homology/FragmentNode.hpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -0,0 +1,77 @@
+/*
+ * FragmentNode.hpp
+ *
+ *  Created on: Sep 24, 2012
+ *      Author: heber
+ */
+
+#ifndef FRAGMENTNODE_HPP_
+#define FRAGMENTNODE_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <iosfwd>
+
+/** FragmentNode contains all information important to homology considerations
+ * between fragments.
+ *
+ * This is important to answer whether to fragments have the same structure or
+ * not. Basically, the node simply represents an atom but without any index to
+ * make it indistinguishable from another atom having same number of bonds and
+ * same atomic number.
+ *
+ * Namely, we need:
+ * -# charge/atomic number of the node
+ * -# number of edges connected to this node
+ *
+ * Central is have this class be sortable by having comparison operators defined.
+ */
+class FragmentNode
+{
+  //!> grant output operator access to internals
+  friend std::ostream& operator<<(std::ostream &out, const FragmentNode &node);
+public:
+  /** Default constructor for class FragmentNode.
+   *
+   * Is required to allow placement in STL containers.
+   */
+  FragmentNode() :
+    AtomicNumber(0),
+    ConnectedEdges(0)
+  {}
+
+  /** Constructor for class FragmentNode.
+   *
+   * @param _AtomicNumber atomic number of represented atom
+   * @param _ConnectedEdges number of "bonds" of represented atom
+   */
+  FragmentNode(const size_t _AtomicNumber, const size_t _ConnectedEdges) :
+    AtomicNumber(_AtomicNumber),
+    ConnectedEdges(_ConnectedEdges)
+  {}
+  ~FragmentNode()
+  {}
+
+  FragmentNode& operator=(const FragmentNode &node);
+
+  // comparison operators to allow for sorting
+  bool operator<(const FragmentNode &node) const;
+  bool operator>(const FragmentNode &node) const;
+  bool operator==(const FragmentNode &node) const;
+  bool operator!=(const FragmentNode &node) const {
+    return (!(*this == node));
+  }
+
+private:
+  //!> the atomic number
+  const size_t AtomicNumber;
+  //!> number of connecting edges
+  const size_t ConnectedEdges;
+};
+
+std::ostream& operator<<(std::ostream &out, const FragmentNode &node);
+
+#endif /* FRAGMENTNODE_HPP_ */
Index: src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.cpp
===================================================================
--- src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.cpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
+++ src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.cpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -0,0 +1,135 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * FragmentEdgeUnitTest.cpp
+ *
+ *  Created on: Sep 24, 2012
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#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 "Fragmentation/Homology/FragmentEdge.hpp"
+
+#include "FragmentEdgeUnitTest.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( FragmentEdgeTest );
+
+
+void FragmentEdgeTest::setUp()
+{
+  // failing asserts should be thrown
+  ASSERT_DO(Assert::Throw);
+}
+
+
+void FragmentEdgeTest::tearDown()
+{
+}
+
+/** UnitTest for operator<(), operator>() and operator==()
+ */
+void FragmentEdgeTest::comparatorTest()
+{
+  FragmentEdge edge(1,1);
+  FragmentEdge sameedge(1,1);
+  FragmentEdge otheredge(1,4);
+  FragmentEdge anotheredge(2,2);
+  FragmentEdge yetanotheredge(2,4);
+
+  CPPUNIT_ASSERT( !(edge < sameedge) );
+  CPPUNIT_ASSERT( edge < otheredge );
+  CPPUNIT_ASSERT( edge < anotheredge );
+  CPPUNIT_ASSERT( edge < yetanotheredge );
+  CPPUNIT_ASSERT( otheredge < anotheredge );
+  CPPUNIT_ASSERT( otheredge < yetanotheredge );
+  CPPUNIT_ASSERT( anotheredge < yetanotheredge );
+
+  CPPUNIT_ASSERT( !(edge > sameedge) );
+  CPPUNIT_ASSERT( otheredge > edge );
+  CPPUNIT_ASSERT( anotheredge > edge );
+  CPPUNIT_ASSERT( anotheredge > otheredge );
+  CPPUNIT_ASSERT( yetanotheredge > edge );
+  CPPUNIT_ASSERT( yetanotheredge > otheredge );
+  CPPUNIT_ASSERT( yetanotheredge > anotheredge );
+
+  CPPUNIT_ASSERT( edge == edge );
+  CPPUNIT_ASSERT( edge == sameedge );
+  CPPUNIT_ASSERT( otheredge == otheredge );
+  CPPUNIT_ASSERT( anotheredge == anotheredge );
+  CPPUNIT_ASSERT( yetanotheredge == yetanotheredge );
+
+  CPPUNIT_ASSERT( edge != otheredge );
+  CPPUNIT_ASSERT( edge != anotheredge );
+  CPPUNIT_ASSERT( edge != yetanotheredge );
+  CPPUNIT_ASSERT( otheredge != anotheredge );
+  CPPUNIT_ASSERT( otheredge != yetanotheredge );
+  CPPUNIT_ASSERT( anotheredge != yetanotheredge );
+}
+
+/** UnitTest for operator=()
+ */
+void FragmentEdgeTest::assignmentTest()
+{
+  FragmentEdge edge(1,1);
+  FragmentEdge sameedge(1,1);
+  FragmentEdge otheredge(1,4);
+
+  // check initial status
+  CPPUNIT_ASSERT( edge == sameedge);
+  CPPUNIT_ASSERT( edge != otheredge);
+
+  // now assign
+  sameedge = otheredge;
+  otheredge = edge;
+
+  // and check again
+  CPPUNIT_ASSERT( edge != sameedge);
+  CPPUNIT_ASSERT( edge == otheredge);
+
+  // also self-assign
+  edge = edge;
+  CPPUNIT_ASSERT( edge == edge);
+}
Index: src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.hpp
===================================================================
--- src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.hpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
+++ src/Fragmentation/Homology/unittests/FragmentEdgeUnitTest.hpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -0,0 +1,38 @@
+/*
+ * FragmentEdgeUnitTest.hpp
+ *
+ *  Created on: Sep 24, 2012
+ *      Author: heber
+ */
+
+#ifndef FRAGMENTEDGEUNITTEST_HPP_
+#define FRAGMENTEDGEUNITTEST_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class FragmentEdge;
+
+/********************************************** Test classes **************************************/
+
+class FragmentEdgeTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( FragmentEdgeTest) ;
+    CPPUNIT_TEST ( comparatorTest );
+    CPPUNIT_TEST ( assignmentTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void comparatorTest();
+      void assignmentTest();
+
+};
+
+#endif /* FRAGMENTEDGEUNITTEST_HPP_ */
Index: src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.cpp
===================================================================
--- src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.cpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
+++ src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.cpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -0,0 +1,136 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * FragmentNodeUnitTest.cpp
+ *
+ *  Created on: Sep 24, 2012
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#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 "Fragmentation/Homology/FragmentNode.hpp"
+#include "Fragmentation/Graph.hpp"
+
+#include "FragmentNodeUnitTest.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( FragmentNodeTest );
+
+
+void FragmentNodeTest::setUp()
+{
+  // failing asserts should be thrown
+  ASSERT_DO(Assert::Throw);
+}
+
+
+void FragmentNodeTest::tearDown()
+{
+}
+
+/** UnitTest for operator<(), operator>() and operator==()
+ */
+void FragmentNodeTest::comparatorTest()
+{
+  FragmentNode node(1,1);
+  FragmentNode samenode(1,1);
+  FragmentNode othernode(1,4);
+  FragmentNode anothernode(2,2);
+  FragmentNode yetanothernode(2,4);
+
+  CPPUNIT_ASSERT( !(node < samenode) );
+  CPPUNIT_ASSERT( node < othernode );
+  CPPUNIT_ASSERT( node < anothernode );
+  CPPUNIT_ASSERT( node < yetanothernode );
+  CPPUNIT_ASSERT( othernode < anothernode );
+  CPPUNIT_ASSERT( othernode < yetanothernode );
+  CPPUNIT_ASSERT( anothernode < yetanothernode );
+
+  CPPUNIT_ASSERT( !(node > samenode) );
+  CPPUNIT_ASSERT( othernode > node );
+  CPPUNIT_ASSERT( anothernode > node );
+  CPPUNIT_ASSERT( anothernode > othernode );
+  CPPUNIT_ASSERT( yetanothernode > node );
+  CPPUNIT_ASSERT( yetanothernode > othernode );
+  CPPUNIT_ASSERT( yetanothernode > anothernode );
+
+  CPPUNIT_ASSERT( node == node );
+  CPPUNIT_ASSERT( node == samenode );
+  CPPUNIT_ASSERT( othernode == othernode );
+  CPPUNIT_ASSERT( anothernode == anothernode );
+  CPPUNIT_ASSERT( yetanothernode == yetanothernode );
+
+  CPPUNIT_ASSERT( node != othernode );
+  CPPUNIT_ASSERT( node != anothernode );
+  CPPUNIT_ASSERT( node != yetanothernode );
+  CPPUNIT_ASSERT( othernode != anothernode );
+  CPPUNIT_ASSERT( othernode != yetanothernode );
+  CPPUNIT_ASSERT( anothernode != yetanothernode );
+}
+
+/** UnitTest for operator=()
+ */
+void FragmentNodeTest::assignmentTest()
+{
+  FragmentNode node(1,1);
+  FragmentNode samenode(1,1);
+  FragmentNode othernode(1,4);
+
+  // check initial status
+  CPPUNIT_ASSERT( node == samenode);
+  CPPUNIT_ASSERT( node != othernode);
+
+  // now assign
+  samenode = othernode;
+  othernode = node;
+
+  // and check again
+  CPPUNIT_ASSERT( node != samenode);
+  CPPUNIT_ASSERT( node == othernode);
+
+  // also self-assign
+  node = node;
+  CPPUNIT_ASSERT( node == node);
+}
Index: src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.hpp
===================================================================
--- src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.hpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
+++ src/Fragmentation/Homology/unittests/FragmentNodeUnitTest.hpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -0,0 +1,37 @@
+/*
+ * FragmentNodeUnitTest.hpp
+ *
+ *  Created on: Sep 24, 2012
+ *      Author: heber
+ */
+
+#ifndef FRAGMENTNODEUNITTEST_HPP_
+#define FRAGMENTNODEUNITTEST_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class FragmentNode;
+
+/********************************************** Test classes **************************************/
+
+class FragmentNodeTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( FragmentNodeTest) ;
+    CPPUNIT_TEST ( comparatorTest );
+    CPPUNIT_TEST ( assignmentTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void comparatorTest();
+      void assignmentTest();
+};
+
+#endif /* FRAGMENTNODEUNITTEST_HPP_ */
Index: src/Fragmentation/Homology/unittests/HomologyContainerUnitTest.cpp
===================================================================
--- src/Fragmentation/Homology/unittests/HomologyContainerUnitTest.cpp	(revision 4694df82c685e4d9f1a22a75eb0c1355964be59f)
+++ src/Fragmentation/Homology/unittests/HomologyContainerUnitTest.cpp	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -24,5 +24,5 @@
  * HomologyContainerUnitTest.cpp
  *
- *  Created on: Sep 12, 2012
+ *  Created on: Sep 22, 2012
  *      Author: heber
  */
Index: src/Fragmentation/Homology/unittests/Makefile.am
===================================================================
--- src/Fragmentation/Homology/unittests/Makefile.am	(revision 4694df82c685e4d9f1a22a75eb0c1355964be59f)
+++ src/Fragmentation/Homology/unittests/Makefile.am	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -3,10 +3,16 @@
 
 FRAGMENTATIONHOMOLOGYTESTSSOURCES = \
+	../Fragmentation/Homology/unittests/FragmentEdgeUnitTest.cpp \
+	../Fragmentation/Homology/unittests/FragmentNodeUnitTest.cpp \
 	../Fragmentation/Homology/unittests/HomologyContainerUnitTest.cpp
 
 FRAGMENTATIONHOMOLOGYTESTSHEADERS = \
+	../Fragmentation/Homology/unittests/FragmentEdgeUnitTest.hpp \
+	../Fragmentation/Homology/unittests/FragmentNodeUnitTest.hpp \
 	../Fragmentation/Homology/unittests/HomologyContainerUnitTest.hpp
 
 FRAGMENTATIONHOMOLOGYTESTS = \
+	FragmentEdgeUnitTest \
+	FragmentNodeUnitTest \
   HomologyContainerUnitTest
 
@@ -21,4 +27,13 @@
 	$(BOOST_LIB)
 
+FragmentEdgeUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	../Fragmentation/Homology/unittests/FragmentEdgeUnitTest.cpp \
+	../Fragmentation/Homology/unittests/FragmentEdgeUnitTest.hpp
+FragmentEdgeUnitTest_LDADD = ${FRAGMENTATIONHOMOLOGYLIBS}
+
+FragmentNodeUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	../Fragmentation/Homology/unittests/FragmentNodeUnitTest.cpp \
+	../Fragmentation/Homology/unittests/FragmentNodeUnitTest.hpp
+FragmentNodeUnitTest_LDADD = ${FRAGMENTATIONHOMOLOGYLIBS}
 
 HomologyContainerUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
Index: src/Fragmentation/Makefile.am
===================================================================
--- src/Fragmentation/Makefile.am	(revision 4694df82c685e4d9f1a22a75eb0c1355964be59f)
+++ src/Fragmentation/Makefile.am	(revision 8387e06f968d381b3fce254b7726ba0d11c5a748)
@@ -5,4 +5,6 @@
 	Fragmentation/Exporters/ExportGraph_ToFiles.cpp \
 	Fragmentation/Exporters/ExportGraph.cpp \
+	Fragmentation/Homology/FragmentEdge.cpp \
+	Fragmentation/Homology/FragmentNode.cpp \
 	Fragmentation/Homology/HomologyContainer.cpp \
 	Fragmentation/AdaptivityMap.cpp \
@@ -25,4 +27,6 @@
 	Fragmentation/Exporters/ExportGraph_ToFiles.hpp \
 	Fragmentation/Exporters/ExportGraph.hpp \
+	Fragmentation/Homology/FragmentEdge.hpp \
+	Fragmentation/Homology/FragmentNode.hpp \
 	Fragmentation/Homology/HomologyContainer.hpp \
 	Fragmentation/AdaptivityMap.hpp \
