Index: src/Fragmentation/Exporters/ExportGraph.cpp
===================================================================
--- src/Fragmentation/Exporters/ExportGraph.cpp	(revision 7d5fcdb109e3bb01fe2b96e13f2ba11ded123b04)
+++ src/Fragmentation/Exporters/ExportGraph.cpp	(revision 6cabaacfd37f433f03f6fb9f02c40aa5468a35e4)
@@ -59,4 +59,5 @@
   const enum HydrogenSaturation _saturation) :
   TotalGraph(_graph),
+  CurrentKeySet(TotalGraph.begin()),
   BondFragments(World::getPointer()),
   treatment(_treatment),
@@ -86,4 +87,50 @@
   if (BondFragments.ListOfMolecules.size() == 0)
     prepareMolecule();
+}
+
+void ExportGraph::reset()
+{
+  CurrentKeySet = TotalGraph.begin();
+}
+
+ExportGraph::SaturatedFragment_ptr ExportGraph::getNextFragment()
+{
+  // if a fragment is still leased, return zero ptr.
+  if (!KeySetsInUse.empty()) {
+    ELOG(1, "Leasing KeySet while old one is not returned.");
+    return SaturatedFragment_ptr();
+  }
+
+  // else return current fragment or indicate end
+  if (CurrentKeySet != TotalGraph.end()) {
+    const KeySet &set = (CurrentKeySet++)->first;
+    return leaseFragment(set);
+  } else {
+    return leaseFragment(EmptySet);
+  }
+}
+
+ExportGraph::SaturatedFragment_ptr ExportGraph::leaseFragment(const KeySet &_set)
+{
+  // create the saturation which adds itself to KeySetsInUse
+  SaturatedFragment_ptr _ptr(new SaturatedFragment(_set, KeySetsInUse, hydrogens));
+  // and return
+  return _ptr;
+}
+
+void ExportGraph::releaseFragment(SaturatedFragment_ptr &_ptr)
+{
+  ASSERT(_ptr != NULL,
+      "ExportGraph::releaseFragment() - pointer is NULL.");
+  SaturatedFragment::KeySetsInUse_t::iterator iter = KeySetsInUse.find(_ptr->getKeySet());
+  if (iter == KeySetsInUse.end()) {
+    ASSERT(0,
+        "ExportGraph::releaseFragment() - returning unknown set "
+        +toString(_ptr->getKeySet())+".");
+    return;
+  } else {
+    // release instance which removes itself in KeySetsInUse
+    _ptr.reset();
+  }
 }
 
Index: src/Fragmentation/Exporters/ExportGraph.hpp
===================================================================
--- src/Fragmentation/Exporters/ExportGraph.hpp	(revision 7d5fcdb109e3bb01fe2b96e13f2ba11ded123b04)
+++ src/Fragmentation/Exporters/ExportGraph.hpp	(revision 6cabaacfd37f433f03f6fb9f02c40aa5468a35e4)
@@ -14,6 +14,10 @@
 #endif
 
+#include <boost/shared_ptr.hpp>
+
 #include "Fragmentation/HydrogenSaturation_enum.hpp"
 #include "Fragmentation/Exporters/ExportGraph.hpp"
+#include "Fragmentation/Exporters/HydrogenPool.hpp"
+#include "Fragmentation/Exporters/SaturatedFragment.hpp"
 #include "MoleculeListClass.hpp"
 
@@ -38,9 +42,38 @@
       const enum HydrogenTreatment _treatment,
       const enum HydrogenSaturation _saturation);
-	virtual ~ExportGraph();
+  virtual ~ExportGraph();
 
-	virtual void operator()();
+  typedef boost::shared_ptr<SaturatedFragment> SaturatedFragment_ptr;
+
+  virtual void operator()();
+
+  /** Returns a saturated fragment for immediate use only.
+   *
+   * An empty KeySet indicates the end of all possible fragments
+   * A shared_ptr containing NULL indicate an error
+   *
+   * \return RAII instance of a saturated fragment, NULL - failure, empty set - end
+   */
+  SaturatedFragment_ptr getNextFragment();
+
+  /** Sets the next fragment to the first graph again.
+   *
+   */
+  void reset();
 
 private:
+
+  /** Helper function to create a fragment from a keyset and note down its in use.
+   *
+   * \param _set KeySet to create saturated fragment from
+   * \return RAII instance of a saturated fragment
+   */
+   SaturatedFragment_ptr leaseFragment(const KeySet &_set);
+
+  /** Helper function to create a fragment from a keyset and note down its in use.
+   *
+   * \param _ptr RAII instance of a saturated fragment to release again
+   */
+  void releaseFragment(SaturatedFragment_ptr &_ptr);
 
   void prepareMolecule();
@@ -50,4 +83,15 @@
 
 protected:
+  //!> empty set to indicate last and one fragment
+  const KeySet EmptySet;
+
+protected:
+  //!> set of all KeySets that are leased as saturated fragments
+  SaturatedFragment::KeySetsInUse_t KeySetsInUse;
+
+  //!> pool containing hydrogens for saturation
+  HydrogenPool hydrogens;
+
+  //!> graph containing all keysets
   const Graph &TotalGraph;
   //!> internal list of created molecules
@@ -57,4 +101,8 @@
   //!> whether to saturate dangling bonds or not
   const enum HydrogenSaturation saturation;
+
+private:
+  //!> iterator pointing at the CurrentKeySet to be exported
+  Graph::const_iterator CurrentKeySet;
 };
 
