Index: src/Fragmentation/Summation/AllLevelOrthogonalSummator.hpp
===================================================================
--- src/Fragmentation/Summation/AllLevelOrthogonalSummator.hpp	(revision 3d444adccd6844c0d6dd4b5ab6838b8ac4d2c3d1)
+++ src/Fragmentation/Summation/AllLevelOrthogonalSummator.hpp	(revision da098d2d6175a98975caab22794474fb0971984f)
@@ -21,4 +21,5 @@
 #include "Fragmentation/Summation/SubsetMap.hpp"
 #include "Fragmentation/Summation/OrthogonalSummator.hpp"
+#include "Fragmentation/Summation/ZeroInstance.hpp"
 
 #include "Fragmentation/Summation/printKeyNames.hpp"
@@ -39,5 +40,7 @@
    * \param _MatrixNrLookup lookup from job id to ordering in above vectors, if
    *        out of range this value is set to zero, hence ignored.
-   * \param _results vector place results into
+   * \param _levelresults vector place levelresults into
+   * \param _keysetresults results per index set, set by operator()
+   * \param _ZeroInstances zero instance to use in summation for each type
    */
   AllLevelOrthogonalSummator(
@@ -47,5 +50,6 @@
       const std::map< JobId_t, size_t > &_MatrixNrLookup,
       std::vector<MapType> &_levelresults,
-      std::map<IndexSet::ptr, std::pair<MapType, MapType> > &_keysetresults) :
+      std::map<IndexSet::ptr, std::pair<MapType, MapType> > &_keysetresults,
+      MapType &_ZeroInstances) :
     subsetmap(_subsetmap),
     data(_data),
@@ -53,5 +57,6 @@
     MatrixNrLookup(_MatrixNrLookup),
     levelresults(_levelresults),
-    keysetresults(_keysetresults)
+    keysetresults(_keysetresults),
+    ZeroInstances(_ZeroInstances)
   {
     ASSERT( levelresults.size() >= subsetmap->getMaximumSetLevel(),
@@ -73,4 +78,9 @@
         subsetmap, data, container, MatrixNrLookup
         );
+
+    // set zero instance
+    const MapValue &DesiredZeroInstance = boost::fusion::at_key<MapKey>(ZeroInstances);
+    if (DesiredZeroInstance != ZeroInstance<MapValue>())
+      sum_value.setZeroInstance(DesiredZeroInstance);
 
     // fill levelresults
@@ -113,4 +123,6 @@
   //!> map for IndexSet and its associated contribution
   keysetresults_t &keysetresults;
+  //!> map per type to sum of base/zero instances to enforce specific parameters in summation
+  MapType &ZeroInstances;
 };
 
Index: src/Fragmentation/Summation/AllLevelSummator.hpp
===================================================================
--- src/Fragmentation/Summation/AllLevelSummator.hpp	(revision 3d444adccd6844c0d6dd4b5ab6838b8ac4d2c3d1)
+++ src/Fragmentation/Summation/AllLevelSummator.hpp	(revision da098d2d6175a98975caab22794474fb0971984f)
@@ -21,4 +21,5 @@
 #include "Fragmentation/Summation/SubsetMap.hpp"
 #include "Fragmentation/Summation/Summator.hpp"
+#include "Fragmentation/Summation/ZeroInstance.hpp"
 
 #include "Fragmentation/Summation/printKeyNames.hpp"
@@ -40,4 +41,6 @@
    *        out of range this value is set to zero, hence ignored.
    * \param _levelresults vector place levelresults into
+   * \param _keysetresults results per index set, set by operator()
+   * \param _ZeroInstances zero instance to use in summation for each type
    */
   AllLevelSummator(
@@ -47,5 +50,6 @@
       const std::map< JobId_t, size_t > &_MatrixNrLookup,
       std::vector<MapType> &_levelresults,
-      std::map<IndexSet::ptr, std::pair<MapType, MapType> > &_keysetresults) :
+      std::map<IndexSet::ptr, std::pair<MapType, MapType> > &_keysetresults,
+      MapType &_ZeroInstances) :
     subsetmap(_subsetmap),
     data(_data),
@@ -53,5 +57,6 @@
     MatrixNrLookup(_MatrixNrLookup),
     levelresults(_levelresults),
-    keysetresults(_keysetresults)
+    keysetresults(_keysetresults),
+    ZeroInstances(_ZeroInstances)
   {
     ASSERT( levelresults.size() >= subsetmap->getMaximumSetLevel(),
@@ -73,4 +78,9 @@
         subsetmap, data, container, MatrixNrLookup
         );
+
+    // set zero instance
+    const MapValue &DesiredZeroInstance = boost::fusion::at_key<MapKey>(ZeroInstances);
+    if (DesiredZeroInstance != ZeroInstance<MapValue>())
+      sum_value.setZeroInstance(DesiredZeroInstance);
 
     // fill levelresults
@@ -113,4 +123,6 @@
   //!> map for IndexSet and its associated contribution
   keysetresults_t &keysetresults;
+  //!> map per type to sum of base/zero instances to enforce specific parameters in summation
+  MapType &ZeroInstances;
 };
 
Index: src/Fragmentation/Summation/Containers/FragmentationLongRangeResults.cpp
===================================================================
--- src/Fragmentation/Summation/Containers/FragmentationLongRangeResults.cpp	(revision 3d444adccd6844c0d6dd4b5ab6838b8ac4d2c3d1)
+++ src/Fragmentation/Summation/Containers/FragmentationLongRangeResults.cpp	(revision da098d2d6175a98975caab22794474fb0971984f)
@@ -130,4 +130,9 @@
     IndexedVectors::indices_t fullindices;
     if (hasLongRangeForces()) {
+      // initialize zero instance map
+      VMGDataForceMap_t ZeroInstances;
+      ZeroInstanceInitializer<VMGDataForceMap_t> initZeroInstance(ZeroInstances);
+      boost::mpl::for_each<VMGDataForceVector_t>(boost::ref(initZeroInstance));
+
       // force has extra data converter (this is similar to MPQCData's forces
       std::map<JobId_t, VMGDataForceMap_t> VMGData_Force_fused;
@@ -141,5 +146,6 @@
                   VMGMatrixNrLookup,
                   Result_ForceLongRange_fused,
-                  Result_perIndexSet_LongRange_Force);
+                  Result_perIndexSet_LongRange_Force,
+                  ZeroInstances);
       boost::mpl::for_each<VMGDataForceVector_t>(boost::ref(forceSummer));
       // build full force index set
Index: src/Fragmentation/Summation/Containers/FragmentationShortRangeResults.cpp
===================================================================
--- src/Fragmentation/Summation/Containers/FragmentationShortRangeResults.cpp	(revision 3d444adccd6844c0d6dd4b5ab6838b8ac4d2c3d1)
+++ src/Fragmentation/Summation/Containers/FragmentationShortRangeResults.cpp	(revision da098d2d6175a98975caab22794474fb0971984f)
@@ -107,4 +107,9 @@
         Result_Time_fused, Result_perIndexSet_Time);
 
+    // initialize zero instance map
+    MPQCDataForceMap_t ZeroInstances;
+    ZeroInstanceInitializer<MPQCDataForceMap_t> initZeroInstance(ZeroInstances);
+    boost::mpl::for_each<MPQCDataForceVector_t>(boost::ref(initZeroInstance));
+
     // force has extra data converter
     std::map<JobId_t, MPQCDataForceMap_t> MPQCData_Force_fused;
@@ -117,5 +122,6 @@
                 MPQCMatrixNrLookup,
                 Result_Force_fused,
-                Result_perIndexSet_Force);
+                Result_perIndexSet_Force,
+                ZeroInstances);
     boost::mpl::for_each<MPQCDataForceVector_t>(boost::ref(forceSummer));
   }
Index: src/Fragmentation/Summation/Makefile.am
===================================================================
--- src/Fragmentation/Summation/Makefile.am	(revision 3d444adccd6844c0d6dd4b5ab6838b8ac4d2c3d1)
+++ src/Fragmentation/Summation/Makefile.am	(revision da098d2d6175a98975caab22794474fb0971984f)
@@ -29,5 +29,6 @@
 	Fragmentation/Summation/writeIndexedTable.hpp \
 	Fragmentation/Summation/writeTable.hpp \
-	Fragmentation/Summation/ZeroInstance.hpp
+	Fragmentation/Summation/ZeroInstance.hpp \
+	Fragmentation/Summation/ZeroInstanceInitializer.hpp
 
 
Index: src/Fragmentation/Summation/OrthogonalSumUpPerLevel.hpp
===================================================================
--- src/Fragmentation/Summation/OrthogonalSumUpPerLevel.hpp	(revision 3d444adccd6844c0d6dd4b5ab6838b8ac4d2c3d1)
+++ src/Fragmentation/Summation/OrthogonalSumUpPerLevel.hpp	(revision da098d2d6175a98975caab22794474fb0971984f)
@@ -23,4 +23,5 @@
 #include "Fragmentation/Summation/IndexSet.hpp"
 #include "Fragmentation/Summation/IndexSetContainer.hpp"
+#include "Fragmentation/Summation/ZeroInstanceInitializer.hpp"
 
 #include "Fragmentation/Summation/Containers/MPQCData.hpp"
@@ -41,4 +42,10 @@
   std::map<JobId_t, TypeMap> Data_fused;
   convertDataTo<TypeData, TypeMap>(fragmentData, Data_fused);
+
+  // initialize zero instance map
+  TypeMap ZeroInstances;
+  ZeroInstanceInitializer<TypeMap> initZeroInstance(ZeroInstances);
+  boost::mpl::for_each<TypeVector>(boost::ref(initZeroInstance));
+
   // instantiate summator
   levelresults.resize(subsetmap->getMaximumSetLevel());
@@ -49,5 +56,6 @@
               MatrixNrLookup,
               levelresults,
-              keysetresults);
+              keysetresults,
+              ZeroInstances);
   // sum up for each type key in TypeVector
   boost::mpl::for_each<TypeVector>(boost::ref(Summer));
Index: src/Fragmentation/Summation/OrthogonalSummator.hpp
===================================================================
--- src/Fragmentation/Summation/OrthogonalSummator.hpp	(revision 3d444adccd6844c0d6dd4b5ab6838b8ac4d2c3d1)
+++ src/Fragmentation/Summation/OrthogonalSummator.hpp	(revision da098d2d6175a98975caab22794474fb0971984f)
@@ -103,4 +103,15 @@
   }
 
+  /** Setter for the zero instance to use as the base in orthogonal summation.
+   *
+   * \sa OrthogonalSummation::setZeroInstance() for explanations.
+   *
+   * \param _zeroinstance
+   */
+  void setZeroInstance(const MapValue &_zeroinstance)
+  {
+    OS.setZeroInstance(_zeroinstance);
+  }
+
   /** Getter for the contribution of the SetValue<> to a specific \a index.
    *
Index: src/Fragmentation/Summation/SumUpPerLevel.hpp
===================================================================
--- src/Fragmentation/Summation/SumUpPerLevel.hpp	(revision 3d444adccd6844c0d6dd4b5ab6838b8ac4d2c3d1)
+++ src/Fragmentation/Summation/SumUpPerLevel.hpp	(revision da098d2d6175a98975caab22794474fb0971984f)
@@ -40,4 +40,10 @@
   std::map<JobId_t, TypeMap> Data_fused;
   convertDataTo<TypeData, TypeMap>(fragmentData, Data_fused);
+
+  // initialize zero instance map
+  TypeMap ZeroInstances;
+  ZeroInstanceInitializer<TypeMap> initZeroInstance(ZeroInstances);
+  boost::mpl::for_each<TypeVector>(boost::ref(initZeroInstance));
+
   // instantiate summator
   levelresults.resize(subsetmap->getMaximumSetLevel());
@@ -48,5 +54,6 @@
               MatrixNrLookup,
               levelresults,
-              keysetresults);
+              keysetresults,
+              ZeroInstances);
   // sum up for each type key in TypeVector
   boost::mpl::for_each<TypeVector>(boost::ref(Summer));
Index: src/Fragmentation/Summation/Summator.hpp
===================================================================
--- src/Fragmentation/Summation/Summator.hpp	(revision 3d444adccd6844c0d6dd4b5ab6838b8ac4d2c3d1)
+++ src/Fragmentation/Summation/Summator.hpp	(revision da098d2d6175a98975caab22794474fb0971984f)
@@ -103,4 +103,14 @@
   }
 
+  /** Setter for the zero instance to use as the base in summation.
+   *
+   * \sa Summation::setZeroInstance() for explanations.
+   *
+   * \param _zeroinstance
+   */
+  void setZeroInstance(const MapValue &_zeroinstance)
+  {
+    OS.setZeroInstance(_zeroinstance);
+  }
 
   /** Getter for the contribution of the SetValue<> to a specific \a index.
Index: src/Fragmentation/Summation/ZeroInstanceInitializer.hpp
===================================================================
--- src/Fragmentation/Summation/ZeroInstanceInitializer.hpp	(revision da098d2d6175a98975caab22794474fb0971984f)
+++ src/Fragmentation/Summation/ZeroInstanceInitializer.hpp	(revision da098d2d6175a98975caab22794474fb0971984f)
@@ -0,0 +1,58 @@
+/*
+ * ZeroInstanceInitializer.hpp
+ *
+ *  Created on: Jun 12, 2016
+ *      Author: heber
+ */
+
+
+#ifndef ZEROINSTANCEINITIALIZER_HPP_
+#define ZEROINSTANCEINITIALIZER_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <map>
+#include <vector>
+
+#include "Fragmentation/Summation/ZeroInstance.hpp"
+
+/** This struct initializes zero instances for Summation and OrthogonalSummation
+ * to use as default set of base values.
+ *
+ * Template MapType gives us a boost::fusion::map of types that we iterate over to
+ * fill.
+ */
+template <typename MapType>
+struct ZeroInstanceInitializer
+{
+  /** Constructor of class ZeroInstanceInitializer.
+   *
+   */
+  ZeroInstanceInitializer(
+       MapType &_ZeroInstances) :
+        ZeroInstances(_ZeroInstances)
+  {}
+
+  /** Operator that fills the specific type \a MapValue to \a MapKey in its given
+   * maps and vectors with false and the default ZeroInstance<T>.
+   *
+   */
+  template <typename MapKey>
+  void operator()(MapKey &) {
+    // We retrieve the type of the member variable from the boost::fusion::map.
+    typedef typename boost::fusion::result_of::value_at_key<MapType, MapKey>::type MapValue;
+
+    // fill vector with default value
+    const MapValue value = ZeroInstance<MapValue>();
+    boost::fusion::at_key<MapKey>(ZeroInstances) = value;
+  }
+
+  //!> vector of all zero instance, to be filled by operator()
+  MapType &ZeroInstances;
+};
+
+
+#endif /* ZEROINSTANCEINITIALIZER_HPP_ */
