Index: src/Fragmentation/Automation/FragmentJobQueue.cpp
===================================================================
--- src/Fragmentation/Automation/FragmentJobQueue.cpp	(revision 041a792216ebab7e7ae9ad628fef91af6f79e780)
+++ src/Fragmentation/Automation/FragmentJobQueue.cpp	(revision 944508121e2c7dd042f9eb580ac7ba4c38602733)
@@ -51,5 +51,4 @@
 #include "LinearAlgebra/RealSpaceMatrix.hpp"
 #include "World.hpp"
-
 
 void FragmentJobQueue::parsejob(const std::string &filename, const unsigned int level)
@@ -132,4 +131,13 @@
 }
 
+bool FragmentJobQueue::addEdgesPerFragmentFromFiles(
+    const boost::filesystem::path &path
+    )
+{
+  ASSERT(0,
+      "FragmentJobQueue::addFullKeySetsFromFiles() - is not implemented, yet.");
+  return false;
+}
+
 void FragmentJobQueue::clear()
 {
@@ -137,4 +145,5 @@
   KeySets.clear();
   FullKeySets.clear();
+  edges_per_fragment.clear();
 }
 
Index: src/Fragmentation/Automation/FragmentJobQueue.hpp
===================================================================
--- src/Fragmentation/Automation/FragmentJobQueue.hpp	(revision 041a792216ebab7e7ae9ad628fef91af6f79e780)
+++ src/Fragmentation/Automation/FragmentJobQueue.hpp	(revision 944508121e2c7dd042f9eb580ac7ba4c38602733)
@@ -20,7 +20,9 @@
 #include "CodePatterns/Singleton.hpp"
 
+#include "Fragmentation/EdgesPerFragment.hpp"
 #include "Fragmentation/KeySetsContainer.hpp"
 #include "Fragmentation/parseKeySetFile.hpp"
 #include "Jobs/MPQCJob.hpp"
+#include "types.hpp"
 
 /** FragmentJobQueue is a static instance to contain all present fragment
@@ -45,15 +47,18 @@
 
 public:
+  typedef FragmentationEdges::edges_per_fragment_t edges_per_fragment_t;
 
   /** Pushes a vector of jobs into the queue.
    *
    * \param _jobs new jobs to push
-   * \param KeySet KeySet of all (non-hydrogen) atoms
-   * \param FullKeySet KeySet of all atoms except saturation hydrogens
+   * \param _KeySet KeySet of all (non-hydrogen) atoms
+   * \param _FullKeySet KeySet of all atoms except saturation hydrogens
+   * \param _edges_per_fragment edges of bond graph of all fragments
    */
   void addJobs(
       std::vector<FragmentJob::ptr> &_jobs,
       const KeySetsContainer &_KeySets,
-      const KeySetsContainer &_FullKeySets);
+      const KeySetsContainer &_FullKeySets,
+      const edges_per_fragment_t &_edges_per_fragment);
 
   /** Returns ref to jobs.
@@ -96,4 +101,11 @@
       );
 
+  /** Adds edges after fragments have been added by file.
+   *
+   */
+  bool addEdgesPerFragmentFromFiles(
+      const boost::filesystem::path &path
+      );
+
   /** Getter for the container of all KeySets to the jobs.
    *
@@ -107,4 +119,10 @@
    */
   const KeySetsContainer& getFullKeySets() const { return FullKeySets; }
+
+  /** Getter for the container of all edges of the bond graph over all jobs.
+   *
+   * \return const ref to container
+   */
+  const edges_per_fragment_t& getEdgesPerFragment() const { return edges_per_fragment; }
 
   /* Empties contained jobs and all KeySets.
@@ -130,4 +148,6 @@
   //!> container for all KeySet's with all except saturation hydrogen to the jobs
   KeySetsContainer FullKeySets;
+  //!> container for all edges of the bond graph of each fragments
+  edges_per_fragment_t edges_per_fragment;
 };
 
@@ -136,9 +156,14 @@
     std::vector<FragmentJob::ptr> &_jobs,
     const KeySetsContainer &_KeySets,
-    const KeySetsContainer &_FullKeySets)
+    const KeySetsContainer &_FullKeySets,
+    const edges_per_fragment_t &_edges_per_fragment)
 {
   jobs.insert(jobs.end(), _jobs.begin(), _jobs.end());
   KeySets.insert(_KeySets);
   FullKeySets.insert(_FullKeySets);
+  edges_per_fragment.reserve(edges_per_fragment.size()+_edges_per_fragment.size());
+  edges_per_fragment.insert(
+      edges_per_fragment.end(),
+      _edges_per_fragment.begin(), _edges_per_fragment.end());
 }
 
Index: src/Fragmentation/Exporters/ExportGraph_ToJobs.cpp
===================================================================
--- src/Fragmentation/Exporters/ExportGraph_ToJobs.cpp	(revision 041a792216ebab7e7ae9ad628fef91af6f79e780)
+++ src/Fragmentation/Exporters/ExportGraph_ToJobs.cpp	(revision 944508121e2c7dd042f9eb580ac7ba4c38602733)
@@ -227,4 +227,5 @@
   KeySetsContainer KeySets;
   KeySetsContainer FullKeySets;
+  FragmentJobQueue::edges_per_fragment_t edges_per_fragment;
   jobs.reserve(TotalGraph.size());
   LOG(1, "INFO: Creating " << TotalGraph.size() << " possible bond fragmentation jobs.");
@@ -255,4 +256,7 @@
     const KeySet &set = CurrentFragment->getKeySet();
     LOG(2, "INFO: Creating bond fragment job for set " << set << ".");
+
+    // gather all edges
+    FragmentationEdges::edges_t edges = CurrentFragment->getEdges();
 
     SamplingGridProperties fragment_window(grid);
@@ -315,4 +319,5 @@
       KeySets.insert(indices, order);
       FullKeySets.insert(forceindices, order);
+      edges_per_fragment.push_back(edges);
     }
     // store force index reference file
@@ -326,5 +331,5 @@
 
   // push final jobs
-  FragmentJobQueue::getInstance().addJobs(jobs, KeySets, FullKeySets);
+  FragmentJobQueue::getInstance().addJobs(jobs, KeySets, FullKeySets, edges_per_fragment);
 
   return true;
Index: src/Fragmentation/Exporters/SaturatedFragment.cpp
===================================================================
--- src/Fragmentation/Exporters/SaturatedFragment.cpp	(revision 041a792216ebab7e7ae9ad628fef91af6f79e780)
+++ src/Fragmentation/Exporters/SaturatedFragment.cpp	(revision 944508121e2c7dd042f9eb580ac7ba4c38602733)
@@ -667,2 +667,87 @@
   return std::make_pair(minimum, maximum);
 }
+
+static FragmentationEdges::edges_t createEdgesFromAtoms(
+    const std::vector<atom *> &_atoms,
+    const KeySet &_FullMolecule)
+{
+  FragmentationEdges::edges_t edges;
+  for (std::vector<atom *>::const_iterator iter = _atoms.begin();
+      iter != _atoms.end(); ++iter) {
+    const atom * const walker = *iter;
+    const atomId_t &walkerid = walker->getId();
+    const BondList &ListOfBonds = walker->getListOfBonds();
+    for (BondList::const_iterator bonditer = ListOfBonds.begin();
+        bonditer != ListOfBonds.end(); ++bonditer) {
+      const atom * const OtherWalker = (*bonditer)->GetOtherAtom(walker);
+      const atomId_t &otherwalkerid = OtherWalker->getId();
+      if (walkerid < otherwalkerid) {
+        // check if it's in fullkeysets (also contains excluded and saturation hydrogens)
+        if (_FullMolecule.count(otherwalkerid))
+          edges.push_back( FragmentationEdges::edge_t(walkerid, otherwalkerid) );
+      }
+    }
+  }
+  return edges;
+}
+
+typedef std::map<atomId_t, atomId_t> idtable_t;
+
+static idtable_t createIdTable(
+    const std::vector<atom *> &_atoms)
+{
+  idtable_t idtable;
+  atomId_t newid = 0;
+  for (std::vector<atom *>::const_iterator iter = _atoms.begin();
+      iter != _atoms.end(); ++iter) {
+    const atom * const walker = *iter;
+    const atomId_t &walkerid = walker->getId();
+    idtable.insert( std::make_pair(walkerid, newid++) );
+  }
+  return idtable;
+}
+
+static atomId_t getTranslatedId(
+    const idtable_t &_idtable,
+    const atomId_t &_id
+    )
+{
+  idtable_t::const_iterator iter = _idtable.find(_id);
+  if (iter != _idtable.end())
+    return iter->second;
+  else {
+    ASSERT( 0,
+        "getTranslatedId() - idtable does not contain id in FullMolecule?");
+    return (atomId_t)-1;
+  }
+}
+
+static void rewriteEdgeIndices(
+    FragmentationEdges::edges_t &_edges,
+    const idtable_t &_idtable)
+{
+  for (FragmentationEdges::edges_t::iterator edgeiter = _edges.begin();
+      edgeiter != _edges.end(); ++edgeiter) {
+    FragmentationEdges::edge_t &edge = *edgeiter;
+    edge.first = getTranslatedId(_idtable, edge.first);
+    edge.second = getTranslatedId(_idtable, edge.second);
+  }
+}
+
+FragmentationEdges::edges_t SaturatedFragment::getEdges() const
+{
+  // gather all edges
+  const std::vector<atom *> atoms = gatherAllAtoms(FullMolecule);
+  FragmentationEdges::edges_t edges = createEdgesFromAtoms(atoms, FullMolecule);
+
+  // translate each edge
+  std::map<atomId_t, atomId_t> idtable = createIdTable(atoms);
+
+  // rewrite indices of edges in correct order
+  rewriteEdgeIndices(edges, idtable);
+
+  // for debugging output edges
+  LOG(2, "DEBUG: FullMolecule is : " << FullMolecule << " with edges " << edges);
+
+  return edges;
+}
Index: src/Fragmentation/Exporters/SaturatedFragment.hpp
===================================================================
--- src/Fragmentation/Exporters/SaturatedFragment.hpp	(revision 041a792216ebab7e7ae9ad628fef91af6f79e780)
+++ src/Fragmentation/Exporters/SaturatedFragment.hpp	(revision 944508121e2c7dd042f9eb580ac7ba4c38602733)
@@ -20,4 +20,5 @@
 #include "Atom/atom_bondedparticleinfo.hpp"
 #include "Bond/bond.hpp"
+#include "Fragmentation/EdgesPerFragment.hpp"
 #include "Fragmentation/KeySet.hpp"
 #include "Fragmentation/HydrogenSaturation_enum.hpp"
@@ -106,4 +107,10 @@
    */
   std::pair<Vector, Vector> getRoughBoundingBox() const;
+
+  /** Returns the edges of the bond graph of this fragment.
+   *
+   * \return set of edges
+   */
+  FragmentationEdges::edges_t getEdges() const;
 
   /** Prints the config of the fragment of \a _type to \a out.
