Index: src/Fragmentation/Automation/Makefile.am
===================================================================
--- src/Fragmentation/Automation/Makefile.am	(revision d4eaf11f136baa85a4bdfa982418399b22a44110)
+++ src/Fragmentation/Automation/Makefile.am	(revision a498c1b15125817769fd9b27a366acd471b6b413)
@@ -16,4 +16,6 @@
 	Fragmentation/Automation/FragmentJobQueue.hpp \
 	Fragmentation/Automation/MPQCFragmentController.hpp \
+	Fragmentation/Automation/ResultContainer.hpp \
+	Fragmentation/Automation/ResultContainer_impl.hpp \
 	Fragmentation/Automation/SpecificFragmentController.hpp \
 	Fragmentation/Automation/SpecificFragmentController_ReceiveResultContainer_impl.hpp
Index: src/Fragmentation/Automation/ResultContainer.hpp
===================================================================
--- src/Fragmentation/Automation/ResultContainer.hpp	(revision a498c1b15125817769fd9b27a366acd471b6b413)
+++ src/Fragmentation/Automation/ResultContainer.hpp	(revision a498c1b15125817769fd9b27a366acd471b6b413)
@@ -0,0 +1,63 @@
+/*
+ * ResultContainer.hpp
+ *
+ *  Created on: Apr 22, 2014
+ *      Author: heber
+ */
+
+#ifndef RESULTCONTAINER_HPP_
+#define RESULTCONTAINER_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef HAVE_JOBMARKET
+#include "JobMarket/Results/FragmentResult.hpp"
+#else
+#include "Jobs/JobMarket/FragmentResult.hpp"
+#endif
+
+#include <map>
+#include <vector>
+
+/** Container for the results received from the server.
+ *
+ * These are received bit by bit until all jobs are calculated.
+ * This struct takes of the waiting.
+ *
+ */
+template <typename T>
+struct ResultContainer {
+  /** Inserts FragmentResult's into IdData.
+   *
+   * \param results raw results to insert, containing ids
+   * \param fragmentData converted results to insert, containing data
+   */
+  void insertResults(
+      const std::vector<FragmentResult::ptr> &fragmentresults,
+      std::vector<T> &fragmentData);
+
+  /** Extracts specific Data type from received vector of FragmentResults.
+   *
+   * @param results results to extract specific Data type from
+   * @param fragmentData on return array filled with extracted specific Data type
+   */
+  void ConvertFragmentResultTo(
+      const std::vector<FragmentResult::ptr> &results,
+      std::vector<T> &fragmentData) const;
+
+  /** Clears all internally stored results.
+   *
+   */
+  void clear()
+  { IdData.clear(); }
+
+  //!> internal container for the received data
+  std::map<JobId_t, T> IdData;
+};
+
+#include "Fragmentation/Automation/ResultContainer_impl.hpp"
+
+#endif /* RESULTCONTAINER_HPP_ */
Index: src/Fragmentation/Automation/ResultContainer_impl.hpp
===================================================================
--- src/Fragmentation/Automation/ResultContainer_impl.hpp	(revision a498c1b15125817769fd9b27a366acd471b6b413)
+++ src/Fragmentation/Automation/ResultContainer_impl.hpp	(revision a498c1b15125817769fd9b27a366acd471b6b413)
@@ -0,0 +1,70 @@
+/*
+ * ResultContainer_impl.hpp
+ *
+ *  Created on: Apr 22, 2014
+ *      Author: heber
+ */
+
+#ifndef RESULTCONTAINER_IMPL_HPP_
+#define RESULTCONTAINER_IMPL_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Fragmentation/Automation/ResultContainer.hpp"
+
+#include "CodePatterns/Assert.hpp"
+#include "CodePatterns/Log.hpp"
+#include "CodePatterns/toString.hpp"
+
+template <typename T>
+void ResultContainer<T>::ConvertFragmentResultTo(
+    const std::vector<FragmentResult::ptr> &results,
+    std::vector<T> &fragmentData) const
+{
+  // extract results
+  fragmentData.clear();
+  fragmentData.reserve(results.size());
+
+  LOG(2, "DEBUG: Parsing now through " << results.size() << " results.");
+  for (std::vector<FragmentResult::ptr>::const_iterator iter = results.begin();
+      iter != results.end(); ++iter) {
+    //LOG(1, "RESULT: job #"+toString((*iter)->getId())+": "+toString((*iter)->result));
+    T extractedData;
+    std::stringstream inputstream((*iter)->result);
+    LOG(2, "DEBUG: First 50 characters FragmentResult's string: "+(*iter)->result.substr(0, 50));
+    boost::archive::text_iarchive ia(inputstream);
+    ia >> extractedData;
+    LOG(1, "INFO: extracted data is " << extractedData << ".");
+    fragmentData.push_back(extractedData);
+  }
+
+  ASSERT( results.size() == fragmentData.size(),
+      "ResultContainer::ConvertFragmentResultTo() - the number of extracted data differs from the number of results.");
+}
+
+template <typename T>
+void ResultContainer<T>::insertResults(
+    const std::vector<FragmentResult::ptr> &fragmentresults,
+    std::vector<T> &fragmentData)
+{
+  std::vector<FragmentResult::ptr>::const_iterator resultiter = fragmentresults.begin();
+  typename std::vector<T>::const_iterator dataiter = fragmentData.begin();
+  for(;resultiter != fragmentresults.end(); ++resultiter, ++dataiter) {
+    const JobId_t _id = (*resultiter)->getId();
+#ifndef NDEBUG
+    std::pair<typename std::map<JobId_t, T>::iterator, bool> inserter =
+#endif
+    IdData.insert( std::make_pair( _id, *dataiter) );
+    ASSERT( inserter.second,
+        "ResultContainer::insertResults() - result id "
+        +toString(inserter.first->first)+" already present.");
+  }
+  ASSERT( dataiter == fragmentData.end(),
+      "ResultContainer::insertResults() - fragmentresults and fragmentdata differ in size.");
+}
+
+
+#endif /* RESULTCONTAINER_IMPL_HPP_ */
Index: src/Fragmentation/Automation/SpecificFragmentController.hpp
===================================================================
--- src/Fragmentation/Automation/SpecificFragmentController.hpp	(revision d4eaf11f136baa85a4bdfa982418399b22a44110)
+++ src/Fragmentation/Automation/SpecificFragmentController.hpp	(revision a498c1b15125817769fd9b27a366acd471b6b413)
@@ -23,4 +23,6 @@
 #include <string>
 #include <vector>
+
+#include "Fragmentation/Automation/ResultContainer.hpp"
 
 /** This class extends FragmentController by some commodity functions used
@@ -58,7 +60,10 @@
    * This struct takes of the waiting.
    *
+   * We extend ResultContainer by functions to receive results from a
+   * JobMarket server.
+   *
    */
   template <typename T>
-  struct ReceiveResultContainer {
+  struct ReceiveResultContainer : public ResultContainer<T> {
     /** cycle to wait for results
      *
@@ -78,31 +83,4 @@
      */
     size_t receiveResults(SpecificFragmentController &callback);
-
-    /** Inserts FragmentResult's into IdData.
-     *
-     * \param results raw results to insert, containing ids
-     * \param fragmentData converted results to insert, containing data
-     */
-    void insertResults(
-        const std::vector<FragmentResult::ptr> &results,
-        std::vector<T> &fragmentData);
-
-    /** Extracts specific Data type from received vector of FragmentResults.
-     *
-     * @param results results to extract specific Data type from
-     * @param fragmentData on return array filled with extracted specific Data type
-     */
-    void ConvertFragmentResultTo(
-        const std::vector<FragmentResult::ptr> &results,
-        std::vector<T> &fragmentData) const;
-
-    /** Clears all internally stored results.
-     *
-     */
-    void clear()
-    { IdData.clear(); }
-
-    //!> internal container for the received data
-    std::map<JobId_t, T> IdData;
   };
 
Index: src/Fragmentation/Automation/SpecificFragmentController_ReceiveResultContainer_impl.hpp
===================================================================
--- src/Fragmentation/Automation/SpecificFragmentController_ReceiveResultContainer_impl.hpp	(revision d4eaf11f136baa85a4bdfa982418399b22a44110)
+++ src/Fragmentation/Automation/SpecificFragmentController_ReceiveResultContainer_impl.hpp	(revision a498c1b15125817769fd9b27a366acd471b6b413)
@@ -68,51 +68,3 @@
 }
 
-template <typename T>
-void SpecificFragmentController::ReceiveResultContainer<T>::ConvertFragmentResultTo(
-    const std::vector<FragmentResult::ptr> &results,
-    std::vector<T> &fragmentData) const
-{
-  // extract results
-  fragmentData.clear();
-  fragmentData.reserve(results.size());
-
-  LOG(2, "DEBUG: Parsing now through " << results.size() << " results.");
- for (std::vector<FragmentResult::ptr>::const_iterator iter = results.begin();
-      iter != results.end(); ++iter) {
-    //LOG(1, "RESULT: job #"+toString((*iter)->getId())+": "+toString((*iter)->result));
-    T extractedData;
-    std::stringstream inputstream((*iter)->result);
-    LOG(2, "DEBUG: First 50 characters FragmentResult's string: "+(*iter)->result.substr(0, 50));
-    boost::archive::text_iarchive ia(inputstream);
-    ia >> extractedData;
-   LOG(1, "INFO: extracted data is " << extractedData << ".");
-    fragmentData.push_back(extractedData);
-  }
-
-  ASSERT( results.size() == fragmentData.size(),
-      "ConvertFragmentResultTo() - the number of extracted data differs from the number of results.");
-}
-
-template <typename T>
-void SpecificFragmentController::ReceiveResultContainer<T>::insertResults(
-    const std::vector<FragmentResult::ptr> &fragmentresults,
-    std::vector<T> &fragmentData)
-{
-  std::vector<FragmentResult::ptr>::const_iterator resultiter = fragmentresults.begin();
-  typename std::vector<T>::const_iterator dataiter = fragmentData.begin();
-  for(;resultiter != fragmentresults.end(); ++resultiter, ++dataiter) {
-    const JobId_t _id = (*resultiter)->getId();
-#ifndef NDEBUG
-    std::pair<typename std::map<JobId_t, T>::iterator, bool> inserter =
-#endif
-    IdData.insert( std::make_pair( _id, *dataiter) );
-    ASSERT( inserter.second,
-        "ReceiveResultContainer::insertResults() - result id "
-        +toString(inserter.first->first)+" already present.");
-  }
-  ASSERT( dataiter == fragmentData.end(),
-      "ReceiveResultContainer::insertResults() - fragmentresults and fragmentdata differ in size.");
-}
-
-
 #endif /* SPECIFICFRAGMENTCONTROLLER_RECEIVERESULTCONTAINER_IMPL_HPP_ */
