Index: src/Fragmentation/Histogram/Histogram.cpp
===================================================================
--- src/Fragmentation/Histogram/Histogram.cpp	(revision c4fd03029d3c59c8aa32a73a4e4e4afd60d9e7d4)
+++ src/Fragmentation/Histogram/Histogram.cpp	(revision 1c365e251287e70f63ed373deb7abb09abced5ce)
@@ -101,5 +101,5 @@
     BinCreator_t BinCreator( *miniter, binwidth );
     std::vector<Bin_t> vectorbins;
-    // we need one extra bin for getBin()'s find to work properly
+    // we need one extra bin for get...Bin()'s find to work properly
     vectorbins.resize(CountBins+1, Bin_t( make_pair(0., 0.) ) );
     std::generate( vectorbins.begin(), vectorbins.end(), BinCreator );
@@ -111,5 +111,5 @@
     // 4. place each sample into bin
     BOOST_FOREACH( double value, samples) {
-      const Bins_t::iterator biniter = getBin(value);
+      const Bins_t::iterator biniter = getLowerEndBin(value);
       ASSERT( biniter != bins.end(),
           "Histogram::Histogram() - cannot find bin for value from given samples.");
@@ -139,16 +139,33 @@
 }
 
-Histogram::Bins_t::iterator Histogram::getBin(const double _value)
+Histogram::Bins_t::iterator Histogram::getLowerEndBin(const double _value)
 {
-  // \note we may use equal_range as our bins are always sorted
+  // lower bound returns key that is equal or greater
   Bins_t::iterator iter = bins.lower_bound(_value);
-  // if we are not on the boundary we have to step back by one
   if (iter != bins.end()) {
-    if (_value != iter->first)
-      --iter;
+    // if we are not on the boundary we always have to step back by one
+    if (_value != iter->first) {
+      if (iter != bins.begin()) {
+          --iter;
+      } else {
+        iter = bins.end();
+      }
+    } else if (iter == --bins.end()) {
+      // if we actually are on boundary of "last bin", set to end
+      iter = bins.end();
+    }
   }
-  // if we actually are on boundary of "last bin", set to end
-  if ((_value == iter->first) && (iter == --bins.end()))
-      iter = bins.end();
+  return iter;
+}
+
+Histogram::Bins_t::iterator Histogram::getHigherEndBin(const double _value)
+{
+  // upper bound return key that is strictly greater
+  Bins_t::iterator iter = bins.upper_bound(_value);
+  // if we are on the boundary we have to step back by one
+  if (iter != bins.end())
+    if (_value == iter->first)
+      if (iter != bins.begin())
+          --iter;
 
   return iter;
Index: src/Fragmentation/Histogram/Histogram.hpp
===================================================================
--- src/Fragmentation/Histogram/Histogram.hpp	(revision c4fd03029d3c59c8aa32a73a4e4e4afd60d9e7d4)
+++ src/Fragmentation/Histogram/Histogram.hpp	(revision 1c365e251287e70f63ed373deb7abb09abced5ce)
@@ -74,10 +74,17 @@
 
 private:
-  /** Returns the iterator to the bin into which the \a value fits.
+  /** Returns the iterator to the bin representing the lower end into which the \a value fits.
    *
    * @param _value value to fit.
    * @return iterator to bin or to bins.end() if not matching
    */
-  Bins_t::iterator getBin(const double _value);
+  Bins_t::iterator getLowerEndBin(const double _value);
+
+  /** Returns the iterator to the bin representing the upper end into which the \a value fits.
+   *
+   * @param _value value to fit.
+   * @return iterator to bin or to bins.end() if not matching
+   */
+  Bins_t::iterator getHigherEndBin(const double _value);
 
 private:
Index: src/Fragmentation/Histogram/unittests/HistogramUnitTest.cpp
===================================================================
--- src/Fragmentation/Histogram/unittests/HistogramUnitTest.cpp	(revision c4fd03029d3c59c8aa32a73a4e4e4afd60d9e7d4)
+++ src/Fragmentation/Histogram/unittests/HistogramUnitTest.cpp	(revision 1c365e251287e70f63ed373deb7abb09abced5ce)
@@ -68,7 +68,7 @@
 }
 
-/** UnitTest for getBin()
+/** UnitTest for checking internal state after given samples
  */
-void HistogramTest::getBin_Test()
+void HistogramTest::internalState_Test()
 {
   // generate non-empty histogramgram
@@ -79,31 +79,82 @@
   CPPUNIT_ASSERT_EQUAL( (size_t)4+1, histogram->bins.size() );
   CPPUNIT_ASSERT( histogram->bins.end() != histogram->bins.begin() );
-  CPPUNIT_ASSERT_EQUAL( 1., histogram->bins.begin()->first );
+  CPPUNIT_ASSERT_EQUAL( 1., histogram->bins.begin()->second );
+  CPPUNIT_ASSERT_EQUAL( 0., (--histogram->bins.end())->second );
+}
+
+/** UnitTest for getLowerEndBin()
+ */
+void HistogramTest::getLowerEndBin_Test()
+{
+  // generate non-empty histogramgram
+  Histogram::samples_t sampled_values;
+  sampled_values += 1.,2.,3.,4.;
+  CPPUNIT_ASSERT_EQUAL( (size_t)4, sampled_values.size() );
+  histogram = new Histogram(sampled_values, 4);
 
   // check values inside
-  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getBin(1.) );
-  CPPUNIT_ASSERT_EQUAL( 1., histogram->getBin(1.)->first );
-  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getBin(2.) );
-  CPPUNIT_ASSERT_EQUAL( 2., histogram->getBin(2.)->first );
-  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getBin(3.) );
-  CPPUNIT_ASSERT_EQUAL( 3., histogram->getBin(3.)->first );
-  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getBin(4.) );
-  CPPUNIT_ASSERT_EQUAL( 4., histogram->getBin(4.)->first );
-  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getBin(1.5) );
-  CPPUNIT_ASSERT_EQUAL( 1., histogram->getBin(1.5)->first );
-  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getBin(2.5) );
-  CPPUNIT_ASSERT_EQUAL( 2., histogram->getBin(2.5)->first );
-  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getBin(3.5) );
-  CPPUNIT_ASSERT_EQUAL( 3., histogram->getBin(3.5)->first );
-  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getBin(4.5) );
-  CPPUNIT_ASSERT_EQUAL( 4., histogram->getBin(4.5)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getLowerEndBin(1.) );
+  CPPUNIT_ASSERT_EQUAL( 1., histogram->getLowerEndBin(1.)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getLowerEndBin(2.) );
+  CPPUNIT_ASSERT_EQUAL( 2., histogram->getLowerEndBin(2.)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getLowerEndBin(3.) );
+  CPPUNIT_ASSERT_EQUAL( 3., histogram->getLowerEndBin(3.)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getLowerEndBin(4.) );
+  CPPUNIT_ASSERT_EQUAL( 4., histogram->getLowerEndBin(4.)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getLowerEndBin(1.5) );
+  CPPUNIT_ASSERT_EQUAL( 1., histogram->getLowerEndBin(1.5)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getLowerEndBin(2.5) );
+  CPPUNIT_ASSERT_EQUAL( 2., histogram->getLowerEndBin(2.5)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getLowerEndBin(3.5) );
+  CPPUNIT_ASSERT_EQUAL( 3., histogram->getLowerEndBin(3.5)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getLowerEndBin(4.5) );
+  CPPUNIT_ASSERT_EQUAL( 4., histogram->getLowerEndBin(4.5)->first );
 
   // check values outside
-  CPPUNIT_ASSERT( histogram->bins.end() == histogram->getBin(.9) );
-  CPPUNIT_ASSERT( histogram->bins.end() == histogram->getBin(5.01) );
-  CPPUNIT_ASSERT( histogram->bins.end() == histogram->getBin(5.) );
+  CPPUNIT_ASSERT( histogram->bins.end() == histogram->getLowerEndBin(.9) );
+  CPPUNIT_ASSERT( histogram->bins.end() == histogram->getLowerEndBin(5.01) );
+  CPPUNIT_ASSERT( histogram->bins.end() == histogram->getLowerEndBin(5.) );
 }
 
-/** UnitTest for isEmpty
+/** UnitTest for getHigherEndBin()
+ */
+void HistogramTest::getHigherEndBin_Test()
+{
+  // generate non-empty histogramgram
+  Histogram::samples_t sampled_values;
+  sampled_values += 1.,2.,3.,4.;
+  CPPUNIT_ASSERT_EQUAL( (size_t)4, sampled_values.size() );
+  histogram = new Histogram(sampled_values, 4);
+
+  // check values inside
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getHigherEndBin(.5) );
+  CPPUNIT_ASSERT_EQUAL( 1., histogram->getHigherEndBin(.5)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getHigherEndBin(1.) );
+  CPPUNIT_ASSERT_EQUAL( 2., histogram->getHigherEndBin(1.)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getHigherEndBin(2.) );
+  CPPUNIT_ASSERT_EQUAL( 3., histogram->getHigherEndBin(2.)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getHigherEndBin(3.) );
+  CPPUNIT_ASSERT_EQUAL( 4., histogram->getHigherEndBin(3.)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getHigherEndBin(4.) );
+  CPPUNIT_ASSERT_EQUAL( 5., histogram->getHigherEndBin(4.)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() == histogram->getHigherEndBin(5.) );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getHigherEndBin(1.5) );
+  CPPUNIT_ASSERT_EQUAL( 2., histogram->getHigherEndBin(1.5)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getHigherEndBin(2.5) );
+  CPPUNIT_ASSERT_EQUAL( 3., histogram->getHigherEndBin(2.5)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getHigherEndBin(3.5) );
+  CPPUNIT_ASSERT_EQUAL( 4., histogram->getHigherEndBin(3.5)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getHigherEndBin(4.5) );
+  CPPUNIT_ASSERT_EQUAL( 5., histogram->getHigherEndBin(4.5)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() == histogram->getHigherEndBin(5.5) );
+
+  // check values outside
+  CPPUNIT_ASSERT( histogram->bins.end() != histogram->getHigherEndBin(-.1) );
+  CPPUNIT_ASSERT_EQUAL( 1., histogram->getHigherEndBin(-.1)->first );
+  CPPUNIT_ASSERT( histogram->bins.end() == histogram->getHigherEndBin(5.01) );
+  CPPUNIT_ASSERT( histogram->bins.end() == histogram->getHigherEndBin(5.) );
+}
+
+/** UnitTest for isEmpty()
  */
 void HistogramTest::isEmpty_Test()
Index: src/Fragmentation/Histogram/unittests/HistogramUnitTest.hpp
===================================================================
--- src/Fragmentation/Histogram/unittests/HistogramUnitTest.hpp	(revision c4fd03029d3c59c8aa32a73a4e4e4afd60d9e7d4)
+++ src/Fragmentation/Histogram/unittests/HistogramUnitTest.hpp	(revision 1c365e251287e70f63ed373deb7abb09abced5ce)
@@ -24,5 +24,7 @@
 {
     CPPUNIT_TEST_SUITE( HistogramTest) ;
-    CPPUNIT_TEST ( getBin_Test );
+    CPPUNIT_TEST ( internalState_Test );
+    CPPUNIT_TEST ( getLowerEndBin_Test );
+    CPPUNIT_TEST ( getHigherEndBin_Test );
     CPPUNIT_TEST ( isEmpty_Test );
     CPPUNIT_TEST ( operator_Test );
@@ -32,5 +34,7 @@
       void setUp();
       void tearDown();
-      void getBin_Test();
+      void internalState_Test();
+      void getLowerEndBin_Test();
+      void getHigherEndBin_Test();
       void isEmpty_Test();
       void operator_Test();
