Index: src/Fragmentation/Summation/AllLevelOrthogonalSummator.hpp
===================================================================
--- src/Fragmentation/Summation/AllLevelOrthogonalSummator.hpp	(revision c9f9bbb2d96080528233d702e81243480b34033d)
+++ src/Fragmentation/Summation/AllLevelOrthogonalSummator.hpp	(revision 34340193276773ab7abaeb6bbee9133e14de0dfb)
@@ -44,5 +44,5 @@
       const std::map<JobId_t, MapType> &_data,
       const IndexSetContainer::Container_t &_container,
-      std::map< JobId_t, size_t > &_MatrixNrLookup,  /* cannot make this const due to operator[] */
+      const std::map< JobId_t, size_t > &_MatrixNrLookup,
       std::vector<MapType> &_results) :
     subsetmap(_subsetmap),
@@ -88,5 +88,5 @@
   const IndexSetContainer::Container_t &container;
   //!> lookup map from job ids to ordering in above vectors
-  std::map< JobId_t, size_t > MatrixNrLookup;
+  const std::map< JobId_t, size_t > &MatrixNrLookup;
   //!> vector of results
   std::vector<MapType> &results;
Index: src/Fragmentation/Summation/AllLevelSummator.hpp
===================================================================
--- src/Fragmentation/Summation/AllLevelSummator.hpp	(revision c9f9bbb2d96080528233d702e81243480b34033d)
+++ src/Fragmentation/Summation/AllLevelSummator.hpp	(revision 34340193276773ab7abaeb6bbee9133e14de0dfb)
@@ -44,5 +44,5 @@
       const std::map<JobId_t, MapType> &_data,
       const IndexSetContainer::Container_t &_container,
-      std::map< JobId_t, size_t > &_MatrixNrLookup,  /* cannot make this const due to operator[] */
+      const std::map< JobId_t, size_t > &_MatrixNrLookup,
       std::vector<MapType> &_results) :
     subsetmap(_subsetmap),
@@ -88,5 +88,5 @@
   const IndexSetContainer::Container_t &container;
   //!> lookup map from job ids to ordering in above vectors
-  std::map< JobId_t, size_t > MatrixNrLookup;
+  const std::map< JobId_t, size_t > &MatrixNrLookup;
   //!> vector of results
   std::vector<MapType> &results;
Index: src/Fragmentation/Summation/OrthogonalFullSummator.hpp
===================================================================
--- src/Fragmentation/Summation/OrthogonalFullSummator.hpp	(revision c9f9bbb2d96080528233d702e81243480b34033d)
+++ src/Fragmentation/Summation/OrthogonalFullSummator.hpp	(revision 34340193276773ab7abaeb6bbee9133e14de0dfb)
@@ -15,4 +15,6 @@
 
 #include <boost/fusion/sequence.hpp>
+
+#include "CodePatterns/Assert.hpp"
 
 #include "Fragmentation/Summation/OrthogonalSummation.hpp"
@@ -49,5 +51,5 @@
       const std::map<JobId_t, MapType> &_data,
       const IndexSetContainer::Container_t &_container,
-      std::map< JobId_t, size_t > &_MatrixNrLookup) : /* cannot make this const due to operator[] */
+      const std::map< JobId_t, size_t > &_MatrixNrLookup) :
     indices(getSubsets(_container)),
     values(createValues(_data, _container, _MatrixNrLookup)),
@@ -110,5 +112,5 @@
       const std::map<JobId_t, MapType> &data,
       const IndexSetContainer::Container_t &container,
-      std::map< JobId_t, size_t > &MatrixNrLookup)
+      const std::map< JobId_t, size_t > &MatrixNrLookup)
   {
     typename OrthogonalSummation<MapValue>::InputValues_t values(container.size());
@@ -118,5 +120,9 @@
       const JobId_t &jobid = dataiter->first;
       const MapValue &value = boost::fusion::at_key<MapKey>(Data);
-      values[ MatrixNrLookup[jobid] ] = value;
+      const std::map< JobId_t, size_t >::const_iterator nriter = MatrixNrLookup.find(jobid);
+      ASSERT( nriter != MatrixNrLookup.end(),
+          "OrthogonalFullSummation<>::createValues() - MatrixNrLookup does not contain id "
+          +toString(jobid)+".");
+      values[ nriter->second ] = value;
     }
     return values;
Index: src/Fragmentation/Summation/OrthogonalSumUpPerLevel.hpp
===================================================================
--- src/Fragmentation/Summation/OrthogonalSumUpPerLevel.hpp	(revision c9f9bbb2d96080528233d702e81243480b34033d)
+++ src/Fragmentation/Summation/OrthogonalSumUpPerLevel.hpp	(revision 34340193276773ab7abaeb6bbee9133e14de0dfb)
@@ -30,5 +30,5 @@
 std::vector<TypeMap> OrthogonalSumUpPerLevel(
     const std::map<JobId_t, MPQCData> &fragmentData,
-    std::map< JobId_t, size_t > &MatrixNrLookup,
+    const std::map< JobId_t, size_t > &MatrixNrLookup,
     const IndexSetContainer::ptr &container,
     SubsetMap::ptr &subsetmap
Index: src/Fragmentation/Summation/OrthogonalSummator.hpp
===================================================================
--- src/Fragmentation/Summation/OrthogonalSummator.hpp	(revision c9f9bbb2d96080528233d702e81243480b34033d)
+++ src/Fragmentation/Summation/OrthogonalSummator.hpp	(revision 34340193276773ab7abaeb6bbee9133e14de0dfb)
@@ -17,4 +17,6 @@
 
 #include <iterator>
+
+#include "CodePatterns/Assert.hpp"
 
 #include "Fragmentation/Summation/OrthogonalSummation.hpp"
@@ -72,5 +74,5 @@
       const std::map<JobId_t, MapType> &_data,
       const IndexSetContainer::Container_t &_container,
-      std::map< JobId_t, size_t > &_MatrixNrLookup) : /* cannot make this const due to operator[] */
+      const std::map< JobId_t, size_t > &_MatrixNrLookup) :
     indices(getSubsets(_data.size(),_container)),
     values(createValues(_data, _container, _MatrixNrLookup)),
@@ -127,5 +129,5 @@
       const std::map<JobId_t, MapType> &data,
       const IndexSetContainer::Container_t &container,
-      std::map< JobId_t, size_t > &MatrixNrLookup)
+      const std::map< JobId_t, size_t > &MatrixNrLookup)
   {
     // if the power set of , we don't need to get rid of the "union index set"
@@ -136,5 +138,9 @@
       const JobId_t &jobid = dataiter->first;
       const MapValue &value = boost::fusion::at_key<MapKey>(Data);
-      values[ MatrixNrLookup[jobid] ] = value;
+      const std::map< JobId_t, size_t >::const_iterator nriter = MatrixNrLookup.find(jobid);
+      ASSERT( nriter != MatrixNrLookup.end(),
+          "OrthogonalSummation<>::createValues() - MatrixNrLookup does not contain id "
+          +toString(jobid)+".");
+      values[ nriter->second ] = value;
     }
     return values;
Index: src/Fragmentation/Summation/SumUpPerLevel.hpp
===================================================================
--- src/Fragmentation/Summation/SumUpPerLevel.hpp	(revision c9f9bbb2d96080528233d702e81243480b34033d)
+++ src/Fragmentation/Summation/SumUpPerLevel.hpp	(revision 34340193276773ab7abaeb6bbee9133e14de0dfb)
@@ -29,5 +29,5 @@
 std::vector<TypeMap> SumUpPerLevel(
     const std::map<JobId_t, MPQCData> &fragmentData,
-    std::map< JobId_t, size_t > &MatrixNrLookup,
+    const std::map< JobId_t, size_t > &MatrixNrLookup,
     const IndexSetContainer::ptr &container,
     SubsetMap::ptr &subsetmap
Index: src/Fragmentation/Summation/Summator.hpp
===================================================================
--- src/Fragmentation/Summation/Summator.hpp	(revision c9f9bbb2d96080528233d702e81243480b34033d)
+++ src/Fragmentation/Summation/Summator.hpp	(revision 34340193276773ab7abaeb6bbee9133e14de0dfb)
@@ -17,4 +17,6 @@
 
 #include <iterator>
+
+#include "CodePatterns/Assert.hpp"
 
 #include "Fragmentation/Summation/Summation.hpp"
@@ -72,5 +74,5 @@
       const std::map<JobId_t, MapType> &_data,
       const IndexSetContainer::Container_t &_container,
-      std::map< JobId_t, size_t > &_MatrixNrLookup) : /* cannot make this const due to operator[] */
+      const std::map< JobId_t, size_t > &_MatrixNrLookup) :
     indices(getSubsets(_data.size(),_container)),
     values(createValues(_data, _container, _MatrixNrLookup)),
@@ -127,5 +129,5 @@
       const std::map<JobId_t, MapType> &data,
       const IndexSetContainer::Container_t &container,
-      std::map< JobId_t, size_t > &MatrixNrLookup)
+      const std::map< JobId_t, size_t > &MatrixNrLookup)
   {
     // if we just have one indexset, we don't need to get rid of the "union index set"
@@ -136,5 +138,9 @@
       const JobId_t &jobid = dataiter->first;
       const MapValue &value = boost::fusion::at_key<MapKey>(Data);
-      values[ MatrixNrLookup[jobid] ] = value;
+      const std::map< JobId_t, size_t >::const_iterator nriter = MatrixNrLookup.find(jobid);
+      ASSERT( nriter != MatrixNrLookup.end(),
+          "Summation<>::createValues() - MatrixNrLookup does not contain id "
+          +toString(jobid)+".");
+      values[ nriter->second ] = value;
     }
     return values;
