Index: src/Graph/BoostGraphCreator.cpp
===================================================================
--- src/Graph/BoostGraphCreator.cpp	(revision 966ce7cb32699498f7cb7b6bdc904a414591709b)
+++ src/Graph/BoostGraphCreator.cpp	(revision e0b960f4207ca814dce6cb04b5507d88efa4544c)
@@ -102,2 +102,65 @@
 }
 
+BoostGraphCreator::Edge BoostGraphCreator::findEdge(const atomId_t &_firstid, const atomId_t &_secondid)
+{
+  edge_iter i, end;
+  const name_map_t name_map = boost::get(boost::vertex_name, graph);
+  for (boost::tie(i, end) = boost::edges(graph); i != end; ++i) {
+    const BoostGraphCreator::Edge &e = *i;
+    const Vertex u = source(e, graph);
+    const Vertex v = target(e, graph);
+    const atomId_t atomid_u = boost::get(name_map, u);
+    const atomId_t atomid_v = boost::get(name_map, v);
+    if (atomid_u == _firstid) {
+      if (atomid_v == _secondid)
+        break;
+    } else if (atomid_u == _secondid) {
+      if (atomid_v == _firstid)
+        break;
+    }
+  }
+  if (i != end) {
+    BoostGraphCreator::Edge e = *i;
+    return e;
+  }
+
+  return BoostGraphCreator::Edge();
+}
+
+bool BoostGraphCreator::removeEdge(const atomId_t &_firstid, const atomId_t &_secondid)
+{
+  // look through all edges
+  BoostGraphCreator::Edge e = findEdge(_firstid, _secondid);
+
+  // edge was found
+  if (e != BoostGraphCreator::Edge()) {
+    const Vertex u = source(e, graph);
+    const Vertex v = target(e, graph);
+    if (DoLog(3)) {
+      const name_map_t name_map = boost::get(boost::vertex_name, graph);
+      LOG(3, "DEBUG: Found edge " << boost::get(name_map, u) <<  " <-> "
+          << boost::get(name_map, v) << ", removing.");
+    }
+    boost::remove_edge(e, graph);
+
+    return true;
+  }
+  return false;
+}
+
+bool BoostGraphCreator::addEdge(const atomId_t &_firstid, const atomId_t &_secondid)
+{
+  // look through all edges
+  BoostGraphCreator::Edge e = findEdge(_firstid, _secondid);
+
+  if (e != BoostGraphCreator::Edge()) {
+    return false;
+  } else {
+    const nodeId_t leftnodeid = getNodeId(_firstid);
+    const nodeId_t rightnodeid = getNodeId(_secondid);
+
+    boost::add_edge(leftnodeid, rightnodeid, graph);
+
+    return true;
+  }
+}
Index: src/Graph/BoostGraphCreator.hpp
===================================================================
--- src/Graph/BoostGraphCreator.hpp	(revision 966ce7cb32699498f7cb7b6bdc904a414591709b)
+++ src/Graph/BoostGraphCreator.hpp	(revision e0b960f4207ca814dce6cb04b5507d88efa4544c)
@@ -61,4 +61,8 @@
   //!> typedef for vertex iterator
   typedef boost::graph_traits<UndirectedGraph>::vertex_iterator vertex_iter;
+  //!> typedef for a Edge
+  typedef boost::graph_traits<UndirectedGraph>::edge_descriptor Edge;
+  //!> typedef for edge iterator
+  typedef boost::graph_traits<UndirectedGraph>::edge_iterator edge_iter;
 
   //!> typedef for a node id
@@ -145,4 +149,28 @@
       );
 
+  /** Finds a given edge by its two atomic indices.
+   *
+   * \param _firstid first atomic id of edge
+   * \param _secondid second atomic id of edge
+   * \return edge descriptor in graph or empty descriptor
+   */
+  Edge findEdge(const atomId_t &_firstid, const atomId_t &_secondid);
+
+  /** Allows to remove a present edge in the graph.
+   *
+   * \param _firstid first atomic id of edge
+   * \param _secondid second atomic id of edge
+   * \return true - edge found and removed, false - else
+   */
+  bool removeEdge(const atomId_t &_firstid, const atomId_t &_secondid);
+
+  /** Adds an edge to the graph if not already present.
+   *
+   * \param _firstid first atomic id of edge
+   * \param _secondid second atomic id of edge
+   * \return true - edge not found thus added, false - else
+   */
+  bool addEdge(const atomId_t &_firstid, const atomId_t &_secondid);
+
 private:
   //!> internal graph that is created by creator functions
Index: src/Graph/unittests/BoostGraphCreatorUnitTest.cpp
===================================================================
--- src/Graph/unittests/BoostGraphCreatorUnitTest.cpp	(revision 966ce7cb32699498f7cb7b6bdc904a414591709b)
+++ src/Graph/unittests/BoostGraphCreatorUnitTest.cpp	(revision e0b960f4207ca814dce6cb04b5507d88efa4544c)
@@ -172,2 +172,47 @@
   CPPUNIT_ASSERT_EQUAL ((size_t)5, BGCreator->getNumEdges());
 };
+
+/** Tests whether adding and removing edges works.
+ */
+void BoostGraphCreatorTest::addremoveEdgeTest()
+{
+  typedef std::pair<int,int> E;
+
+  E edges[] = { E(0,1), E(1,2), E(2,3), E(3,4) };
+  const size_t no_nodes = 5;
+  BGCreator->graph =
+      BoostGraphCreator::UndirectedGraph(edges, edges + sizeof(edges) / sizeof(E), no_nodes);
+  BGCreator->atomids_nodeids +=
+      make_pair(0,0), make_pair(1,1), make_pair(2,2), make_pair(3,3), make_pair(4,4);
+  for (size_t i=0;i<no_nodes;++i)
+    boost::put(boost::get(boost::vertex_name, BGCreator->graph), boost::vertex(i, BGCreator->graph), i);
+
+  CPPUNIT_ASSERT_EQUAL ((size_t)5, BGCreator->getNumVertices());
+  CPPUNIT_ASSERT_EQUAL ((size_t)4, BGCreator->getNumEdges());
+
+  bool status;
+  // remove a valid edge
+  {
+    status = BGCreator->removeEdge((atomId_t)0,(atomId_t)1);
+    CPPUNIT_ASSERT_EQUAL (true, status);
+    status = BGCreator->addEdge((atomId_t)0,(atomId_t)1);
+    CPPUNIT_ASSERT_EQUAL (true, status);
+    // check again whether edge has really been added again
+    status = BGCreator->removeEdge((atomId_t)0,(atomId_t)1);
+    CPPUNIT_ASSERT_EQUAL (true, status);
+    status = BGCreator->addEdge((atomId_t)0,(atomId_t)1);
+    CPPUNIT_ASSERT_EQUAL (true, status);
+  }
+
+  // remove an invalid edge
+  {
+    status = BGCreator->removeEdge((atomId_t)0,(atomId_t)2);
+    CPPUNIT_ASSERT_EQUAL (false, status);
+  }
+
+  // add a present edge
+  {
+    status = BGCreator->addEdge((atomId_t)0,(atomId_t)1);
+    CPPUNIT_ASSERT_EQUAL (false, status);
+  }
+};
Index: src/Graph/unittests/BoostGraphCreatorUnitTest.hpp
===================================================================
--- src/Graph/unittests/BoostGraphCreatorUnitTest.hpp	(revision 966ce7cb32699498f7cb7b6bdc904a414591709b)
+++ src/Graph/unittests/BoostGraphCreatorUnitTest.hpp	(revision e0b960f4207ca814dce6cb04b5507d88efa4544c)
@@ -28,4 +28,5 @@
     CPPUNIT_TEST ( createFromMoleculeTest );
     CPPUNIT_TEST ( createFromAtomsTest );
+    CPPUNIT_TEST ( addremoveEdgeTest );
     CPPUNIT_TEST_SUITE_END();
 
@@ -37,4 +38,5 @@
       void createFromMoleculeTest();
       void createFromAtomsTest();
+      void addremoveEdgeTest();
 
 private:
