Index: src/Fragmentation/Summation/Containers/VMGData.cpp
===================================================================
--- src/Fragmentation/Summation/Containers/VMGData.cpp	(revision 9593d16ae241f82c256733f785601e2e0cfb9b29)
+++ src/Fragmentation/Summation/Containers/VMGData.cpp	(revision d200ae2e4a4f8002d6ef527fd7bfa418be477b9c)
@@ -54,4 +54,5 @@
   ost << "Nuclei long-Range energy: " << data.nuclei_long << std::endl;
   ost << "Electron long-Range energy: " << data.electron_long << std::endl;
+  ost << "Nuclei long-Range forces: " << data.particle_forces << std::endl;
   return ost;
 }
Index: src/Fragmentation/Summation/Containers/VMGData.hpp
===================================================================
--- src/Fragmentation/Summation/Containers/VMGData.hpp	(revision 9593d16ae241f82c256733f785601e2e0cfb9b29)
+++ src/Fragmentation/Summation/Containers/VMGData.hpp	(revision d200ae2e4a4f8002d6ef527fd7bfa418be477b9c)
@@ -22,4 +22,5 @@
 #include <vector>
 
+#include "Fragmentation/Summation/SetValues/FragmentForces.hpp"
 #include "Fragmentation/Summation/SetValues/SamplingGrid.hpp"
 
@@ -48,4 +49,6 @@
   //!> electron long-range contribution to energy
   double electron_long;
+  //!> force vectors of all nuclei
+  FragmentForces particle_forces;
 
 private:
@@ -61,8 +64,10 @@
       ar & nuclei_long;
     ar & electron_long;
+    if (version > 2)
+      ar & particle_forces;
   }
 };
 
-BOOST_CLASS_VERSION(VMGData, 2)
+BOOST_CLASS_VERSION(VMGData, 3)
 
 std::ostream & operator<<(std::ostream &ost, const VMGData &data);
Index: src/Fragmentation/Summation/Containers/VMGDataFused.hpp
===================================================================
--- src/Fragmentation/Summation/Containers/VMGDataFused.hpp	(revision 9593d16ae241f82c256733f785601e2e0cfb9b29)
+++ src/Fragmentation/Summation/Containers/VMGDataFused.hpp	(revision d200ae2e4a4f8002d6ef527fd7bfa418be477b9c)
@@ -29,7 +29,8 @@
   struct nuclei_long {};
   struct electron_long {};
+  // keys for forces
+  struct particle_forces {};
 
   // keys for longrange
-
   struct electron_longrange {};
   struct electron_shortrange {};
@@ -40,4 +41,5 @@
   struct total_longrange {};
   struct total_shortrange {};
+
 }
 
Index: src/Fragmentation/Summation/Containers/VMGDataMap.hpp
===================================================================
--- src/Fragmentation/Summation/Containers/VMGDataMap.hpp	(revision 9593d16ae241f82c256733f785601e2e0cfb9b29)
+++ src/Fragmentation/Summation/Containers/VMGDataMap.hpp	(revision d200ae2e4a4f8002d6ef527fd7bfa418be477b9c)
@@ -18,7 +18,10 @@
 #include <boost/mpl/list.hpp>
 
+#include <vector>
+
 #include "Fragmentation/Summation/Containers/VMGDataFused.hpp"
 
 class SamplingGrid;
+class IndexedVectors;
 
 /** This boost::fusion map defines key-value or rather key-type pairs with
@@ -33,5 +36,6 @@
     boost::fusion::pair<VMGDataFused::both_sampled_potential, SamplingGrid >,
     boost::fusion::pair<VMGDataFused::nuclei_long, double >,
-    boost::fusion::pair<VMGDataFused::electron_long, double >
+    boost::fusion::pair<VMGDataFused::electron_long, double >,
+    boost::fusion::pair<VMGDataFused::particle_forces, IndexedVectors >
 > VMGDataMap_t;
 
@@ -40,5 +44,6 @@
     VMGDataFused::both_sampled_potential,
     VMGDataFused::nuclei_long,
-    VMGDataFused::electron_long
+    VMGDataFused::electron_long,
+	VMGDataFused::particle_forces
 > VMGDataVector_t;
 
Index: src/Fragmentation/Summation/Containers/VMGData_printKeyNames.hpp
===================================================================
--- src/Fragmentation/Summation/Containers/VMGData_printKeyNames.hpp	(revision 9593d16ae241f82c256733f785601e2e0cfb9b29)
+++ src/Fragmentation/Summation/Containers/VMGData_printKeyNames.hpp	(revision d200ae2e4a4f8002d6ef527fd7bfa418be477b9c)
@@ -38,4 +38,5 @@
   (nuclei_long) \
   (electron_long) \
+  (particle_forces) \
   (electron_longrange) \
   (electron_shortrange) \
Index: src/Fragmentation/Summation/SetValues/FragmentForces.cpp
===================================================================
--- src/Fragmentation/Summation/SetValues/FragmentForces.cpp	(revision d200ae2e4a4f8002d6ef527fd7bfa418be477b9c)
+++ src/Fragmentation/Summation/SetValues/FragmentForces.cpp	(revision d200ae2e4a4f8002d6ef527fd7bfa418be477b9c)
@@ -0,0 +1,88 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2014 Frederik Heber. All rights reserved.
+ *
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * FragmentForces.cpp
+ *
+ *  Created on: Oct 23, 2014
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// include headers that implement a archive in simple text format
+// otherwise BOOST_CLASS_EXPORT_IMPLEMENT has no effect
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "CodePatterns/Assert.hpp"
+
+#include "FragmentForces.hpp"
+
+bool FragmentForces::operator==(const FragmentForces& other) const
+{
+  if( size() != other.size())
+    return false;
+
+  forces_t::const_iterator iter = begin();
+  forces_t::const_iterator otheriter = other.begin();
+  for (; iter != end(); ++iter, ++otheriter) {
+    if( iter->size() == otheriter->size())
+      return false;
+    force_t::const_iterator forceiter = iter->begin();
+    force_t::const_iterator otherforceiter = otheriter->begin();
+    for (; forceiter != iter->end(); ++forceiter, ++otherforceiter) {
+      if (*forceiter != *otherforceiter)
+        return false;
+    }
+  }
+  return true;
+}
+
+std::ostream & operator<<(std::ostream &ost, const FragmentForces &forces)
+{
+
+  for (FragmentForces::forces_t::const_iterator iter = forces.begin();
+      iter != forces.end(); ++iter) {
+
+    if (iter != forces.begin())
+      ost << "; ";
+    ost << "[";
+    for (FragmentForces::force_t::const_iterator forceiter = iter->begin();
+        forceiter != iter->end(); ++forceiter) {
+      if (forceiter != iter->begin())
+        ost << ",";
+      ost << *forceiter;
+    }
+    ost << "]";
+  }
+  return ost;
+}
+
+// we need to explicitly instantiate the serialization functions as
+// its is only serialized through its base class FragmentJob
+BOOST_CLASS_EXPORT_IMPLEMENT(FragmentForces)
Index: src/Fragmentation/Summation/SetValues/FragmentForces.hpp
===================================================================
--- src/Fragmentation/Summation/SetValues/FragmentForces.hpp	(revision d200ae2e4a4f8002d6ef527fd7bfa418be477b9c)
+++ src/Fragmentation/Summation/SetValues/FragmentForces.hpp	(revision d200ae2e4a4f8002d6ef527fd7bfa418be477b9c)
@@ -0,0 +1,71 @@
+/*
+ * FragmentForces.hpp
+ *
+ *  Created on: Oct 23, 2014
+ *      Author: heber
+ */
+
+#ifndef FRAGMENTFORCES_HPP_
+#define FRAGMENTFORCES_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <vector>
+
+#include "boost/serialization/export.hpp"
+#include "boost/serialization/vector.hpp"
+
+class FragmentForces : public std::vector< std::vector<double> >
+{
+  //!> let ostream access private parts
+  friend std::ostream & operator<<(std::ostream &ost, const FragmentForces &forces);
+
+public:
+  //!> typedef for a  vector with three components
+  typedef std::vector<double> force_t;
+  //!> typedef for a vector containing the force per fragment atom
+  typedef std::vector<force_t> forces_t;
+
+  /** Default constructor for FragmentForces.
+   *
+   */
+  FragmentForces() {}
+
+  /** Equality operator.
+   *
+   * @param other other instance to check against
+   * @return true - both are equal, false - some FragmentForces differ
+   */
+  bool operator==(const FragmentForces& other) const;
+
+  bool operator!=(const FragmentForces& other) const
+  {
+    return (!(*this == other));
+  }
+
+private:
+  friend class boost::serialization::access;
+  // serialization
+  template <typename Archive>
+  void serialize(Archive& ar, const unsigned int version)
+  {
+    ar & boost::serialization::base_object<forces_t>(*this);
+  }
+};
+
+/** Function to print eigenvalues to ostream.
+ *
+ * @param ost output stream
+ * @param eigenvalues set of eigenvalues to print
+ * @return ref to given ostream for concatenation
+ */
+std::ostream & operator<<(std::ostream &ost, const FragmentForces &forces);
+
+// we need to give this class a unique key for serialization
+// its is only serialized through its base class FragmentJob
+BOOST_CLASS_EXPORT_KEY(FragmentForces)
+
+#endif /* FRAGMENTFORCES_HPP_ */
Index: src/Fragmentation/Summation/SetValues/Makefile.am
===================================================================
--- src/Fragmentation/Summation/SetValues/Makefile.am	(revision 9593d16ae241f82c256733f785601e2e0cfb9b29)
+++ src/Fragmentation/Summation/SetValues/Makefile.am	(revision d200ae2e4a4f8002d6ef527fd7bfa418be477b9c)
@@ -5,4 +5,5 @@
 	Fragmentation/Summation/SetValues/Eigenvalues.cpp \
 	Fragmentation/Summation/SetValues/Fragment.cpp \
+	Fragmentation/Summation/SetValues/FragmentForces.cpp \
 	Fragmentation/Summation/SetValues/Histogram.cpp \
 	Fragmentation/Summation/SetValues/IndexedVectors.cpp \
@@ -13,4 +14,5 @@
 	Fragmentation/Summation/SetValues/Eigenvalues.hpp \
 	Fragmentation/Summation/SetValues/Fragment.hpp \
+	Fragmentation/Summation/SetValues/FragmentForces.hpp \
 	Fragmentation/Summation/SetValues/Histogram.hpp \
 	Fragmentation/Summation/SetValues/IndexedVectors.hpp \
