Index: src/Actions/FragmentationAction/AnalyseFragmentationResultsAction.cpp
===================================================================
--- src/Actions/FragmentationAction/AnalyseFragmentationResultsAction.cpp	(revision 7d507c5ecb83082b5c68df5d5fdc343d8b05e552)
+++ src/Actions/FragmentationAction/AnalyseFragmentationResultsAction.cpp	(revision e0ae58d2284a52b479b4bafd7533855451f64a6c)
@@ -354,5 +354,6 @@
   }
 
-  FragmentationShortRangeResults shortrangeresults(shortrangedata, keysets, forcekeysets);
+  std::vector<bool> ValueMask(shortrangedata.size(), true);
+  FragmentationShortRangeResults shortrangeresults(shortrangedata, keysets, forcekeysets, ValueMask);
   shortrangeresults(shortrangedata);
   printReceivedShortResults(shortrangeresults);
Index: src/Fragmentation/Summation/Containers/FragmentationChargeDensity.cpp
===================================================================
--- src/Fragmentation/Summation/Containers/FragmentationChargeDensity.cpp	(revision 7d507c5ecb83082b5c68df5d5fdc343d8b05e552)
+++ src/Fragmentation/Summation/Containers/FragmentationChargeDensity.cpp	(revision e0ae58d2284a52b479b4bafd7533855451f64a6c)
@@ -69,6 +69,7 @@
   // create lookup from job nr to fragment number
   size_t FragmentCounter = 0;
+  std::vector<bool> ValueMask(fragmentData.size(), true);
   const std::map< JobId_t, size_t > MatrixNrLookup =
-      createMatrixNrLookup(jobids, FragmentCounter);
+      createMatrixNrLookup(jobids, FragmentCounter, ValueMask);
 
   /// prepare for OrthogonalSummation
Index: src/Fragmentation/Summation/Containers/FragmentationLongRangeResults.cpp
===================================================================
--- src/Fragmentation/Summation/Containers/FragmentationLongRangeResults.cpp	(revision 7d507c5ecb83082b5c68df5d5fdc343d8b05e552)
+++ src/Fragmentation/Summation/Containers/FragmentationLongRangeResults.cpp	(revision e0ae58d2284a52b479b4bafd7533855451f64a6c)
@@ -81,13 +81,19 @@
 {
   // create lookup from job nr to fragment number
-  size_t MPQCFragmentCounter = 0;
-  const std::vector<JobId_t> mpqcjobids = extractJobIds<MPQCData>(fragmentData);
-  MPQCMatrixNrLookup =
-      createMatrixNrLookup(mpqcjobids, MPQCFragmentCounter);
-
-  size_t VMGFragmentCounter = 0;
-  const std::vector<JobId_t> vmgjobids = extractJobIds<VMGData>(longrangeData);
-  VMGMatrixNrLookup =
-      createMatrixNrLookup(vmgjobids, VMGFragmentCounter);
+  {
+    size_t MPQCFragmentCounter = 0;
+    std::vector<bool> ValueMask(fragmentData.size(), true);
+    const std::vector<JobId_t> mpqcjobids = extractJobIds<MPQCData>(fragmentData);
+    MPQCMatrixNrLookup =
+        createMatrixNrLookup(mpqcjobids, MPQCFragmentCounter, ValueMask);
+  }
+
+  {
+    size_t VMGFragmentCounter = 0;
+    std::vector<bool> ValueMask(longrangeData.size(), true);
+    const std::vector<JobId_t> vmgjobids = extractJobIds<VMGData>(longrangeData);
+    VMGMatrixNrLookup =
+        createMatrixNrLookup(vmgjobids, VMGFragmentCounter, ValueMask);
+  }
 }
 
Index: src/Fragmentation/Summation/Containers/FragmentationShortRangeResults.cpp
===================================================================
--- src/Fragmentation/Summation/Containers/FragmentationShortRangeResults.cpp	(revision 7d507c5ecb83082b5c68df5d5fdc343d8b05e552)
+++ src/Fragmentation/Summation/Containers/FragmentationShortRangeResults.cpp	(revision e0ae58d2284a52b479b4bafd7533855451f64a6c)
@@ -62,9 +62,10 @@
     const std::map<JobId_t,MPQCData> &fragmentData,
     const KeySetsContainer& _KeySet,
-    const KeySetsContainer& _ForceKeySet) :
+    const KeySetsContainer& _ForceKeySet,
+    std::vector<bool> &_ValueMask) :
     KeySet(_KeySet),
     ForceKeySet(_ForceKeySet)
 {
-  initLookups(fragmentData);
+  initLookups(fragmentData,_ValueMask);
 
   // convert KeySetContainer to IndexSetContainer
@@ -75,5 +76,6 @@
 
 void FragmentationShortRangeResults::initLookups(
-    const std::map<JobId_t,MPQCData> &fragmentData)
+    const std::map<JobId_t,MPQCData> &fragmentData,
+    std::vector<bool> &_ValueMask)
 {
   // create lookup from job nr to fragment number
@@ -81,5 +83,5 @@
   const std::vector<JobId_t> mpqcjobids = extractJobIds<MPQCData>(fragmentData);
   MPQCMatrixNrLookup =
-      createMatrixNrLookup(mpqcjobids, MPQCFragmentCounter);
+      createMatrixNrLookup(mpqcjobids, MPQCFragmentCounter, _ValueMask);
 }
 
Index: src/Fragmentation/Summation/Containers/FragmentationShortRangeResults.hpp
===================================================================
--- src/Fragmentation/Summation/Containers/FragmentationShortRangeResults.hpp	(revision 7d507c5ecb83082b5c68df5d5fdc343d8b05e552)
+++ src/Fragmentation/Summation/Containers/FragmentationShortRangeResults.hpp	(revision e0ae58d2284a52b479b4bafd7533855451f64a6c)
@@ -47,9 +47,12 @@
    * @param _KeySet KeySets of all (non-hydrogen) atoms
    * @param _ForceKeySet KeySets of all atoms except those added by saturation
+   * @param _ValueMask masks whether to use a value (true) or not (false),
+   *        default is true for all values
    */
   FragmentationShortRangeResults(
       const std::map<JobId_t,MPQCData> &fragmentData,
       const KeySetsContainer& _KeySet,
-      const KeySetsContainer& _ForceKeySet);
+      const KeySetsContainer& _ForceKeySet,
+      std::vector<bool> &_ValueMask);
 
   /** Performs the summation and fills all result vectors.
@@ -78,5 +81,6 @@
 private:
   void initLookups(
-      const std::map<JobId_t,MPQCData> &fragmentData);
+      const std::map<JobId_t,MPQCData> &fragmentData,
+      std::vector<bool> &_ValueMask);
 
 private:
Index: src/Fragmentation/Summation/Containers/createMatrixNrLookup.cpp
===================================================================
--- src/Fragmentation/Summation/Containers/createMatrixNrLookup.cpp	(revision 7d507c5ecb83082b5c68df5d5fdc343d8b05e552)
+++ src/Fragmentation/Summation/Containers/createMatrixNrLookup.cpp	(revision e0ae58d2284a52b479b4bafd7533855451f64a6c)
@@ -45,19 +45,31 @@
 std::map< JobId_t, size_t > createMatrixNrLookup(
     const std::vector<JobId_t> &jobids,
-    size_t &FragmentCounter)
+    size_t &FragmentCounter,
+    std::vector<bool> &ValueMask)
 {
   // align fragments
   std::map< JobId_t, size_t > MatrixNrLookup;
   FragmentCounter = 0;
+  ASSERT( ValueMask.size() == jobids.size(),
+      "createMatrixNrLookup() - jobids and ValueMask differ in size");
+  std::vector<bool>::const_iterator maskiter = ValueMask.begin();
   for (std::vector<JobId_t>::const_iterator iter = jobids.begin();
-      iter != jobids.end(); ++iter) {
+      iter != jobids.end(); ++iter, ++maskiter) {
     LOG(3, "DEBUG: Inserting (" << *iter << "," << FragmentCounter << ").");
 #ifndef NDEBUG
     std::pair< std::map< JobId_t, size_t >::iterator, bool> inserter =
 #endif
-        MatrixNrLookup.insert( std::make_pair(*iter, FragmentCounter++) );
+        // we either set to FragmentCounter or to -1 which is always outside
+        // of range and hence skipped by (Orthogonal)Summator.
+        MatrixNrLookup.insert(
+            std::make_pair(
+                *iter,
+                (*maskiter ? FragmentCounter : (size_t)-1)
+            )
+        );
     ASSERT( inserter.second,
         "createMatrixNrLookup() - two results have same id "
         +toString(*iter)+".");
+    ++FragmentCounter;  // in any case needs to be increased to skip the result
   }
   LOG(1, "INFO: There are " << FragmentCounter << " fragments.");
Index: src/Fragmentation/Summation/Containers/createMatrixNrLookup.hpp
===================================================================
--- src/Fragmentation/Summation/Containers/createMatrixNrLookup.hpp	(revision 7d507c5ecb83082b5c68df5d5fdc343d8b05e552)
+++ src/Fragmentation/Summation/Containers/createMatrixNrLookup.hpp	(revision e0ae58d2284a52b479b4bafd7533855451f64a6c)
@@ -32,5 +32,6 @@
 std::map< JobId_t, size_t > createMatrixNrLookup(
     const std::vector<JobId_t> &jobids,
-    size_t &FragmentCounter);
+    size_t &FragmentCounter,
+    std::vector<bool> &ValueMask);
 
 #endif /* CREATEMATRIXNRLOOKUP_HPP_ */
