Index: src/Fragmentation/Histogram/Histogram.cpp
===================================================================
--- src/Fragmentation/Histogram/Histogram.cpp	(revision 1dd4198ca162ca1bc63d2d9fdf9d5736eb3e7e70)
+++ src/Fragmentation/Histogram/Histogram.cpp	(revision e4048f07b3e15ce14739e8b7d10d15926761e91a)
@@ -140,11 +140,34 @@
 }
 
+void Histogram::extendMissingBins(const BinLowerEnd LowerEnd, const BinLowerEnd NextLowerEnd)
+{
+  Bins_t::const_iterator loweriter = getLowerEndBin(LowerEnd);
+  Bins_t::const_iterator upperiter = getHigherEndBin(NextLowerEnd);
+  if (loweriter == bins.end()) {
+    // we need bins beneath our first, add them
+    for(BinLowerEnd offset = getLowerEnd(LowerEnd);
+        offset < getLowerEnd(NextLowerEnd);
+        offset += binwidth)
+      bins.insert( std::make_pair (offset, 0. ) );
+    LOG(2, "DEBUG: Bins after adding empties before start are " << printBins() << ".");
+    loweriter = getLowerEndBin(LowerEnd);
+    ASSERT( loweriter != bins.end(),
+        "Histogram::extendMissingBins() - still no lower bound after adding empties.");
+  }
+  if (upperiter == bins.end()) {
+    // we need bins after our last, add them
+    for(BinLowerEnd offset = getLowerEnd(LowerEnd);
+        offset <= getLowerEnd(NextLowerEnd)+binwidth;
+        offset += binwidth)
+      bins.insert( std::make_pair (offset, 0. ) );
+    LOG(2, "DEBUG: Bins after adding empties after end are " << printBins() << ".");
+    upperiter = getHigherEndBin(NextLowerEnd);
+    ASSERT( upperiter != bins.end(),
+        "Histogram::extendMissingBins() - still no upper bound after adding empties.");
+  }
+}
+
 void Histogram::superposeOtherHistogram(const Histogram &other, const double prefactor)
 {
-  // check that other histogram lays within this one
-  ASSERT( getLowerEndBin(other.bins.begin()->first) != bins.end(),
-      "Histogram::superposeOtherHistogram() - other histogram's bins start sooner.");
-  ASSERT( getHigherEndBin((--other.bins.end())->first) != bins.end(),
-      "Histogram::superposeOtherHistogram() - other histogram's bins end later.");
   // go through each of the other histogram's bins
   Bins_t::const_iterator enditer = --other.bins.end(); // (except internal last one)
@@ -156,4 +179,8 @@
 
     LOG(2, "DEBUG: Current bin is " << bin << ", next bin is " << nextbin << ".");
+
+    // Check first whether start or end actually fit into our histogram, if not extend.
+    extendMissingBins(bin.first, nextbin.first);
+
     // The bin will in general not fit into one bin in this histogram, but overlap.
     // Hence, we determine the contribution of the bin to each bin in this histogram
@@ -161,8 +188,5 @@
     Bins_t::const_iterator loweriter = getLowerEndBin(bin.first);
     Bins_t::const_iterator upperiter = getHigherEndBin(nextbin.first);
-    ASSERT( loweriter != bins.end(),
-        "Histogram::superposeOtherHistogram() - lower end is invalid.");
-    ASSERT( upperiter != bins.end(),
-        "Histogram::superposeOtherHistogram() - higher end is invalid.");
+
     ASSERT( loweriter->first < upperiter->first,
         "Histogram::superposeOtherHistogram() - the bin range is invalid.");
Index: src/Fragmentation/Histogram/Histogram.hpp
===================================================================
--- src/Fragmentation/Histogram/Histogram.hpp	(revision 1dd4198ca162ca1bc63d2d9fdf9d5736eb3e7e70)
+++ src/Fragmentation/Histogram/Histogram.hpp	(revision e4048f07b3e15ce14739e8b7d10d15926761e91a)
@@ -118,4 +118,15 @@
   void superposeOtherHistogram(const Histogram &other, const double prefactor);
 
+  /** Helper function to add missing bins in superposition operation.
+   *
+   *  We add here enough bins, initialized to weight zero such that the bin
+   *  of [LowerEnd, NextLowerEnd) fully fits. Does nothing if the bins are
+   *  already present.
+   *
+   * @param LowerEnd lowerend of the other bin (to superpose)
+   * @param NextLowerEnd lower end of bin (to superpose) next adjacent to other
+   */
+  void extendMissingBins(const BinLowerEnd LowerEnd, const BinLowerEnd NextLowerEnd);
+
   /** Helper function to print BinLowerEnd and BinWeight to a string for every bin.
    *
Index: src/Fragmentation/Histogram/unittests/HistogramUnitTest.cpp
===================================================================
--- src/Fragmentation/Histogram/unittests/HistogramUnitTest.cpp	(revision 1dd4198ca162ca1bc63d2d9fdf9d5736eb3e7e70)
+++ src/Fragmentation/Histogram/unittests/HistogramUnitTest.cpp	(revision e4048f07b3e15ce14739e8b7d10d15926761e91a)
@@ -234,7 +234,13 @@
   more_values += 1.75,2.5,3.;
   Histogram otherhistogram(more_values, 3);
-#ifndef NDEBUG
-  CPPUNIT_ASSERT_THROW ( otherhistogram += *histogram, Assert::AssertionFailure );
-#endif
+
+  // check that size increases
+  CPPUNIT_ASSERT_EQUAL( (size_t)3+1, otherhistogram.bins.size() );
+  otherhistogram += *histogram;
+  const size_t number = (size_t)((
+      otherhistogram.getLowerEnd(4.+histogram->binwidth)
+      + otherhistogram.binwidth
+      - otherhistogram.getLowerEnd(1.))/otherhistogram.binwidth)+1;
+  CPPUNIT_ASSERT_EQUAL( number, otherhistogram.bins.size() );
 }
 
@@ -247,12 +253,30 @@
   sampled_values += 1.,2.,3.,4.;
   histogram = new Histogram(sampled_values, 4);
-  Histogram::samples_t more_values;
-  more_values += 1.75,2.5,3.;
-  Histogram otherhistogram(more_values, 3);
-  const double sums = histogram->area() + otherhistogram.area();
-
-  // check that sum is now sum of both
-  *histogram += otherhistogram;
-  CPPUNIT_ASSERT( fabs(sums - histogram->area()) < std::numeric_limits<double>::epsilon()*1e+1 );
+
+  // add upon larger
+  {
+    Histogram::samples_t more_values;
+    more_values += 0.5, 1.25, 2.5,3., 4.2;
+    Histogram otherhistogram(more_values, 5);
+    const double areas = histogram->area() + otherhistogram.area();
+
+    // check that sum is now sum of both
+    otherhistogram += *histogram;
+//    CPPUNIT_ASSERT_EQUAL( areas, otherhistogram.area() );
+    CPPUNIT_ASSERT( fabs(areas - otherhistogram.area()) < std::numeric_limits<double>::epsilon()*1e+1 );
+  }
+
+  // add upon smaller
+  {
+    Histogram::samples_t more_values;
+    more_values += 1.75,2.5,3.;
+    Histogram otherhistogram(more_values, 3);
+    const double areas = histogram->area() + otherhistogram.area();
+
+    // check that sum is now sum of both
+    otherhistogram += *histogram;
+//    CPPUNIT_ASSERT_EQUAL( areas, otherhistogram.area() );
+    CPPUNIT_ASSERT( fabs(areas - otherhistogram.area()) < std::numeric_limits<double>::epsilon()*1e+1 );
+  }
 }
 
@@ -265,12 +289,30 @@
   sampled_values += 1.,2.,3.,4.;
   histogram = new Histogram(sampled_values, 4);
-  Histogram::samples_t more_values;
-  more_values += 1.75,2.5,3.;
-  Histogram otherhistogram(more_values, 3);
-  const double difference = histogram->area() - otherhistogram.area();
-
-  // check that sum is now difference of both
-  *histogram -= otherhistogram;
-  CPPUNIT_ASSERT( fabs(difference - histogram->area()) < std::numeric_limits<double>::epsilon()*1e+1 );
-}
-
+
+  // subtract smaller
+  {
+    Histogram::samples_t more_values;
+    more_values += 1.75,2.5,3.;
+    Histogram otherhistogram(more_values, 3);
+    const double difference = otherhistogram.area() - histogram->area();
+
+    // check that sum is now difference of both
+    otherhistogram -= *histogram;
+//    CPPUNIT_ASSERT_EQUAL( difference, otherhistogram.area() );
+    CPPUNIT_ASSERT( fabs(difference - otherhistogram.area()) < std::numeric_limits<double>::epsilon()*1e+1 );
+  }
+
+  // subtract larger
+  {
+    Histogram::samples_t more_values;
+    more_values += 0.5, 1.25, 2.5,3., 4.2;
+    Histogram otherhistogram(more_values, 5);
+    const double difference = otherhistogram.area() - histogram->area();
+
+    // check that sum is now difference of both
+    otherhistogram -= *histogram;
+//    CPPUNIT_ASSERT_EQUAL( difference, otherhistogram.area() );
+    CPPUNIT_ASSERT( fabs(difference - otherhistogram.area()) < std::numeric_limits<double>::epsilon()*1e+1 );
+  }
+}
+
