Index: src/Fragmentation/Exporters/SaturatedFragment.cpp
===================================================================
--- src/Fragmentation/Exporters/SaturatedFragment.cpp	(revision 814b8cb676bec18e7e269ba22c727316f18cd7d3)
+++ src/Fragmentation/Exporters/SaturatedFragment.cpp	(revision c738f14fa6a53f587db4b4d3e8881cbfd07b59a3)
@@ -294,5 +294,5 @@
         LOG(4, "DEBUG: Places to saturate for atom " << *OtherWalker
             << " are " << positionsiter->second);
-        atom * const father = Walker;
+        atom * const father = OtherWalker;
         for (SaturationsPositions_t::const_iterator positer = positionsiter->second.begin();
             positer != positionsiter->second.end(); ++positer) {
@@ -320,4 +320,6 @@
   _atom->setFather(_father);
   SaturationHydrogens.insert(_atom->getId());
+  // note down the id of the replaced atom
+  replaced_atoms.insert( std::make_pair(_father->getId(), _atom->getId()) );
 
   return *_atom;
@@ -670,4 +672,5 @@
 static FragmentationEdges::edges_t createEdgesFromAtoms(
     const std::vector<atom *> &_atoms,
+    const SaturatedFragment::replaced_atoms_t &replaced_atoms,
     const KeySet &_FullMolecule)
 {
@@ -682,8 +685,22 @@
       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) );
+      if (_FullMolecule.count(otherwalkerid)) {
+        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) );
+        }
+      } else {
+        ASSERT( replaced_atoms.count(otherwalkerid),
+            "createEdgesFromAtoms() - atom #"+toString(otherwalkerid)
+            +" to a cut bond  is not in replaced_atoms.");
+        // add bond to every saturation hydrogen instead
+        const std::pair<
+            SaturatedFragment::replaced_atoms_t::const_iterator,
+            SaturatedFragment::replaced_atoms_t::const_iterator> range = replaced_atoms.equal_range(otherwalkerid);
+        for (SaturatedFragment::replaced_atoms_t::const_iterator replaceiter = range.first;
+            replaceiter != range.second; ++replaceiter) {
+          edges.push_back( FragmentationEdges::edge_t(walkerid, replaceiter->second) );
+        }
       }
     }
@@ -739,8 +756,8 @@
   // gather all edges
   const std::vector<atom *> atoms = gatherAllAtoms(FullMolecule);
-  FragmentationEdges::edges_t edges = createEdgesFromAtoms(atoms, FullMolecule);
+  FragmentationEdges::edges_t edges = createEdgesFromAtoms(atoms, replaced_atoms, FullMolecule);
 
   // translate each edge
-  std::map<atomId_t, atomId_t> idtable = createIdTable(atoms);
+  const std::map<atomId_t, atomId_t> idtable = createIdTable(atoms);
 
   // rewrite indices of edges in correct order
Index: src/Fragmentation/Exporters/SaturatedFragment.hpp
===================================================================
--- src/Fragmentation/Exporters/SaturatedFragment.hpp	(revision 814b8cb676bec18e7e269ba22c727316f18cd7d3)
+++ src/Fragmentation/Exporters/SaturatedFragment.hpp	(revision c738f14fa6a53f587db4b4d3e8881cbfd07b59a3)
@@ -15,4 +15,5 @@
 
 #include <iosfwd>
+#include <map>
 #include <set>
 #include <string>
@@ -122,4 +123,7 @@
       std::ostream &out,
       const ParserTypes _type) const;
+
+  //!> typedef for the replaced atom (due to cut bonds) and their replacement hydrogens
+  typedef std::multimap<atomId_t, atomId_t> replaced_atoms_t;
 
 private:
@@ -220,4 +224,6 @@
   //!> whether to actually saturate or not
   const enum HydrogenSaturation saturation;
+  //!> list of saturated hydrogens to their original atoms
+  replaced_atoms_t replaced_atoms;
 };
 
