Index: src/Actions/FragmentationAction/FragmentationAutomationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision bfbd4a376406cc93fa60892e691159cc09a8a35a)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision 2dd305d105005aebf180a24502171bfdb638c5f2)
@@ -402,14 +402,9 @@
   HomologyContainer::container_t values;
   const size_t FragmentCounter = results.Result_perIndexSet_Energy.size();
-  KeySetsContainer KeySet;
-  parseKeySetFile(KeySet, KeySetFilename, FragmentCounter, NonHydrogenKeySets);
-  KeySetsContainer ForceKeySet;
-  parseKeySetFile(ForceKeySet, KeySetFilename, FragmentCounter, HydrogenKeySets);
 
   // convert KeySetContainer to IndexSetContainer
-  IndexSetContainer::ptr Container(new IndexSetContainer(KeySet));
-  IndexSetContainer::ptr ForceContainer(new IndexSetContainer(ForceKeySet));
-  const IndexSetContainer::Container_t Indices = Container->getContainer();
-  const IndexSetContainer::Container_t ForceIndices = ForceContainer->getContainer();
+  IndexSetContainer::ptr ForceContainer(new IndexSetContainer(results.getForceKeySet()));
+  const IndexSetContainer::Container_t &Indices = results.getContainer();
+  const IndexSetContainer::Container_t &ForceIndices = ForceContainer->getContainer();
   IndexSetContainer::Container_t::const_iterator iter = Indices.begin();
   IndexSetContainer::Container_t::const_iterator forceiter = ForceIndices.begin();
@@ -542,9 +537,10 @@
       fragmentData,
       longrangeData,
+      params.path.get());
+  results(
+      fragmentData,
+      longrangeData,
       fullsolutionData,
-      params.path.get(),
-      getNoAtomsFromAdjacencyFile(params.path.get()),
       full_sample);
-
   {
     LOG(1, "INFO: Parsing fragment files from " << params.path.get() << ".");
Index: src/Fragmentation/Automation/FragmentationResults.cpp
===================================================================
--- src/Fragmentation/Automation/FragmentationResults.cpp	(revision bfbd4a376406cc93fa60892e691159cc09a8a35a)
+++ src/Fragmentation/Automation/FragmentationResults.cpp	(revision 2dd305d105005aebf180a24502171bfdb638c5f2)
@@ -62,24 +62,19 @@
     const std::map<JobId_t,MPQCData> &fragmentData,
     std::map<JobId_t,VMGData> &longrangeData,
-    const std::vector<VMGData> &fullsolutionData,
-    const std::string &KeySetFilename,
-    const size_t NoAtoms,
-    const std::vector<SamplingGrid> &full_sample)
+    const std::string &KeySetFilename)
 {
   // create lookup from job nr to fragment number
   size_t MPQCFragmentCounter = 0;
   const std::vector<JobId_t> mpqcjobids = extractJobIds<MPQCData>(fragmentData);
-  const std::map< JobId_t, size_t > MPQCMatrixNrLookup =
+  MPQCMatrixNrLookup =
       createMatrixNrLookup(mpqcjobids, MPQCFragmentCounter);
 
   size_t VMGFragmentCounter = 0;
   const std::vector<JobId_t> vmgjobids = extractJobIds<VMGData>(longrangeData);
-  const std::map< JobId_t, size_t > VMGMatrixNrLookup =
+  VMGMatrixNrLookup =
       createMatrixNrLookup(vmgjobids, VMGFragmentCounter);
 
   // initialise keysets
-  KeySetsContainer KeySet;
   parseKeySetFile(KeySet, KeySetFilename, MPQCFragmentCounter, NonHydrogenKeySets);
-  KeySetsContainer ForceKeySet;
   parseKeySetFile(ForceKeySet, KeySetFilename, MPQCFragmentCounter, HydrogenKeySets);
 
@@ -87,8 +82,15 @@
 
   // convert KeySetContainer to IndexSetContainer
-  IndexSetContainer::ptr container(new IndexSetContainer(KeySet));
+  container.reset(new IndexSetContainer(KeySet));
   // create the map of all keysets
-  SubsetMap::ptr subsetmap(new SubsetMap(*container));
-
+  subsetmap.reset(new SubsetMap(*container));
+}
+
+void FragmentationResults::operator()(
+    const std::map<JobId_t,MPQCData> &fragmentData,
+    std::map<JobId_t,VMGData> &longrangeData,
+    const std::vector<VMGData> &fullsolutionData,
+    const std::vector<SamplingGrid> &full_sample)
+{
   MaxLevel = subsetmap->getMaximumSetLevel();
   LOG(1, "INFO: Summing up results till level " << MaxLevel << ".");
Index: src/Fragmentation/Automation/FragmentationResults.hpp
===================================================================
--- src/Fragmentation/Automation/FragmentationResults.hpp	(revision bfbd4a376406cc93fa60892e691159cc09a8a35a)
+++ src/Fragmentation/Automation/FragmentationResults.hpp	(revision 2dd305d105005aebf180a24502171bfdb638c5f2)
@@ -21,5 +21,8 @@
 #include "JobMarket/types.hpp"
 
+#include "Fragmentation/KeySetsContainer.hpp"
 #include "Fragmentation/Summation/IndexSet.hpp"
+#include "Fragmentation/Summation/IndexSetContainer.hpp"
+#include "Fragmentation/Summation/SubsetMap.hpp"
 
 #include "Jobs/MPQCData.hpp"
@@ -53,7 +56,10 @@
       const std::map<JobId_t,MPQCData> &fragmentData,
       std::map<JobId_t,VMGData> &longrangeData,
+      const std::string &KeySetFilename);
+
+  void operator()(
+      const std::map<JobId_t,MPQCData> &fragmentData,
+      std::map<JobId_t,VMGData> &longrangeData,
       const std::vector<VMGData> &fullsolutionData,
-      const std::string &KeySetFilename,
-      const size_t NoAtoms,
       const std::vector<SamplingGrid> &full_sample);
 
@@ -62,4 +68,25 @@
   }
 
+  IndexSetContainer::Container_t getContainer() const {
+    return container->getContainer();
+  }
+
+  const KeySetsContainer& getKeySet() const {
+    return KeySet;
+  }
+
+  const KeySetsContainer& getForceKeySet() const {
+    return ForceKeySet;
+  }
+
+private:
+  std::map< JobId_t, size_t > MPQCMatrixNrLookup;
+  std::map< JobId_t, size_t > VMGMatrixNrLookup;
+  KeySetsContainer KeySet;
+  KeySetsContainer ForceKeySet;
+  IndexSetContainer::ptr container;
+  SubsetMap::ptr subsetmap;
+
+public:
   //!> results per level of summed up energy
   std::vector<MPQCDataEnergyMap_t> Result_Energy_fused;
