Index: src/Actions/FragmentationAction/FragmentationAutomationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision c74fdb7d4752180ef951320937f2e2c2c36abd7f)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision 1849434d9b5e8747f19c49b9bd8147e201503b9c)
@@ -52,4 +52,5 @@
 #include "Fragmentation/ForceMatrix.hpp"
 #include "Fragmentation/Fragmentation.hpp"
+#include "Fragmentation/SetValues/Fragment.hpp"
 #include "Fragmentation/SetValues/Histogram.hpp"
 #include "Fragmentation/SetValues/IndexedVectors.hpp"
@@ -378,4 +379,23 @@
 
 template <>
+void convertMPQCDataTo<MPQCDataFragmentMap_t>(
+    const std::vector<MPQCData> &fragmentData,
+    std::vector<MPQCDataFragmentMap_t> &MPQCData_Fragment_fused)
+{
+  // fragment
+  MPQCData_Fragment_fused.clear();
+  MPQCData_Fragment_fused.reserve(fragmentData.size());
+  for(std::vector<MPQCData>::const_iterator dataiter = fragmentData.begin();
+      dataiter != fragmentData.end(); ++dataiter) {
+    const MPQCData &extractedData = *dataiter;
+    LOG(2, "DEBUG: Current extracted Data is " << extractedData << ".");
+    MPQCDataFragmentMap_t instance;
+    boost::fusion::at_key<MPQCDataFused::fragment>(instance) =
+        Fragment(extractedData.positions, extractedData.charges);
+    MPQCData_Fragment_fused.push_back(instance);
+  }
+}
+
+template <>
 void convertMPQCDataTo<MPQCDataTimeMap_t>(
     const std::vector<MPQCData> &fragmentData,
@@ -429,5 +449,6 @@
  * @param KeySetFilename filename with keysets to associate forces correctly
  * @param NoAtoms total number of atoms
- * @param full_sample summed up charge from fragments on return
+ * @param full_sample summed up charge density of electrons from fragments on return
+ * @param full_fragment summed up positions and charges of nuclei from fragments on return
  */
 bool sumUpChargeDensity(
@@ -435,5 +456,6 @@
     const std::vector<MPQCData> &fragmentData,
     const std::string &KeySetFilename,
-    SamplingGrid &full_sample)
+    SamplingGrid &full_sample,
+    Fragment &full_fragment)
 {
   // create lookup from job nr to fragment number
@@ -468,6 +490,10 @@
     SumUpPerLevel<MPQCDataGridMap_t, MPQCDataGridVector_t>(
         fragmentData, jobids, MatrixNrLookup, container, subsetmap));
+  std::vector<MPQCDataFragmentMap_t> Result_Fragment_fused(
+    SumUpPerLevel<MPQCDataFragmentMap_t, MPQCDataFragmentVector_t>(
+        fragmentData, jobids, MatrixNrLookup, container, subsetmap));
   // obtain full grid
   full_sample = boost::fusion::at_key<MPQCDataFused::sampled_grid>(Result_Grid_fused.back());
+  full_fragment = boost::fusion::at_key<MPQCDataFused::fragment>(Result_Fragment_fused.back());
 
   return true;
@@ -673,5 +699,6 @@
     const FragmentationFragmentationAutomationAction::FragmentationFragmentationAutomationParameters &params,
     const std::vector<MPQCData> &fragmentData,
-    const SamplingGrid &full_sampled_grid)
+    const SamplingGrid &full_sampled_grid,
+    const Fragment &full_fragment)
 {
   std::vector<FragmentJob::ptr> jobs;
@@ -696,6 +723,6 @@
 //    ASSERT( M.determinant() == size*size*size,
 //        "createLongRangeJobs() - current domain matrix "+toString(M)+" is not cubic.");
-    const std::vector< std::vector<double> > positions;
-    const std::vector<double> charges;
+    const std::vector< std::vector<double> > positions(full_fragment.getPositions());
+    const std::vector<double> charges(full_fragment.getCharges());
     const JobId_t next_id = controller.getAvailableId();
     LOG(1, "INFO: Creating full VMGJob with " << full_sampled_grid.sampled_grid.size()
@@ -766,9 +793,11 @@
   LOG(1, "INFO: Parsing fragment files from " << params.path.get() << ".");
   SamplingGrid full_sample;
+  Fragment full_fragment;
   sumUpChargeDensity(
       MPQCresults,
       fragmentData,
       params.path.get(),
-      full_sample);
+      full_sample,
+      full_fragment);
 
   // Phase Four: obtain more ids
@@ -777,5 +806,5 @@
 
   // Phase Five: create VMGJobs
-  if (!createLongRangeJobs(controller, params, fragmentData, full_sample))
+  if (!createLongRangeJobs(controller, params, fragmentData, full_sample, full_fragment))
     return Action::failure;
   RunService(io_service, "Adding VMGJobs");
Index: src/Fragmentation/SetValues/Fragment.cpp
===================================================================
--- src/Fragmentation/SetValues/Fragment.cpp	(revision c74fdb7d4752180ef951320937f2e2c2c36abd7f)
+++ src/Fragmentation/SetValues/Fragment.cpp	(revision 1849434d9b5e8747f19c49b9bd8147e201503b9c)
@@ -38,4 +38,6 @@
 #include "Fragment.hpp"
 
+#include <iostream>
+
 #include "CodePatterns/Assert.hpp"
 
@@ -43,5 +45,5 @@
 {}
 
-Fragment::Fragment(positions_t &_positions, charges_t &_charges)
+Fragment::Fragment(const positions_t &_positions, const charges_t &_charges)
 {
   ASSERT( _positions.size() == _charges.size(),
@@ -101,4 +103,31 @@
 }
 
+Fragment::positions_t Fragment::getPositions() const
+{
+  positions_t positions;
+  for (nuclei_t::const_iterator iter = nuclei.begin();
+      iter != nuclei.end(); ++iter)
+    positions.push_back(iter->first);
+  return positions;
+}
+
+Fragment::charges_t Fragment::getCharges() const
+{
+  charges_t charges;
+  for (nuclei_t::const_iterator iter = nuclei.begin();
+      iter != nuclei.end(); ++iter)
+    charges.push_back(iter->second);
+  return charges;
+}
+
+std::ostream & operator<<(std::ostream &ost, const Fragment &f)
+{
+  size_t NucleiCounter = 1;
+  for (Fragment::nuclei_t::const_iterator iter = f.nuclei.begin();
+      iter != f.nuclei.end(); ++iter)
+    ost << NucleiCounter++ << "\t" << iter->first << " with charge " << iter->second << std::endl;
+  return ost;
+}
+
 template<> Fragment ZeroInstance<Fragment>()
 {
Index: src/Fragmentation/SetValues/Fragment.hpp
===================================================================
--- src/Fragmentation/SetValues/Fragment.hpp	(revision c74fdb7d4752180ef951320937f2e2c2c36abd7f)
+++ src/Fragmentation/SetValues/Fragment.hpp	(revision 1849434d9b5e8747f19c49b9bd8147e201503b9c)
@@ -15,7 +15,10 @@
 #endif
 
+#include <iosfwd>
 #include <vector>
 
 class Fragment {
+  //!> grant ostream operator access
+  friend std::ostream & operator<<(std::ostream &ost, const Fragment &f);
 public:
   typedef std::vector< std::vector<double> > positions_t;
@@ -41,5 +44,5 @@
    * @param _charges given charges
    */
-  Fragment(std::vector< std::vector<double> > &_positions, std::vector< double > &_charges);
+  Fragment(const std::vector< std::vector<double> > &_positions, const std::vector< double > &_charges);
 
   /** Adding another fragment onto this one.
@@ -67,4 +70,16 @@
   Fragment& operator-=(const Fragment &other);
 
+  /** Getter for all stored positions.
+   *
+   * @return vector of positions
+   */
+  positions_t getPositions() const;
+
+  /** Getter for all stored charges.
+   *
+   * @return vector of charges
+   */
+  charges_t getCharges() const;
+
 private:
   /** Helper function that checks whether this nuclei is present.
@@ -87,4 +102,6 @@
 };
 
+std::ostream & operator<<(std::ostream &ost, const Fragment &f);
+
 template<typename T> T ZeroInstance();
 template<> Fragment ZeroInstance<Fragment>();
Index: src/Jobs/MPQCDataFused.hpp
===================================================================
--- src/Jobs/MPQCDataFused.hpp	(revision c74fdb7d4752180ef951320937f2e2c2c36abd7f)
+++ src/Jobs/MPQCDataFused.hpp	(revision 1849434d9b5e8747f19c49b9bd8147e201503b9c)
@@ -40,4 +40,7 @@
   struct sampled_grid {};
 
+  // keys for fragment
+  struct fragment {};
+
   // keys for times_t
   struct times_walltime {};
Index: src/Jobs/MPQCDataMap.hpp
===================================================================
--- src/Jobs/MPQCDataMap.hpp	(revision c74fdb7d4752180ef951320937f2e2c2c36abd7f)
+++ src/Jobs/MPQCDataMap.hpp	(revision 1849434d9b5e8747f19c49b9bd8147e201503b9c)
@@ -19,4 +19,5 @@
 #include "Jobs/MPQCDataFused.hpp"
 
+class Fragment;
 class Histogram;
 class IndexedVectors;
@@ -88,4 +89,19 @@
 
 /** This boost::fusion map defines key-value or rather key-type pairs with
+ * which we associate all sampled_grid data members in MPQCData and their type.
+ *
+ * This lets us resolves any ambiguitites of types in MPQCData, e.g.
+ * to know vector<double> is forces or energy_eigenvalues.
+ *
+ */
+typedef boost::fusion::map<
+    boost::fusion::pair<MPQCDataFused::fragment, Fragment >
+> MPQCDataFragmentMap_t;
+
+typedef boost::mpl::list<
+    MPQCDataFused::fragment
+> MPQCDataFragmentVector_t;
+
+/** This boost::fusion map defines key-value or rather key-type pairs with
  * which we associate all times_t data members in MPQCData and their type.
  *
