diff --git a/Chart.cabal b/Chart.cabal
--- a/Chart.cabal
+++ b/Chart.cabal
@@ -1,5 +1,5 @@
 Name: Chart
-Version: 1.8.1
+Version: 1.8.2
 License: BSD3
 License-file: LICENSE
 Copyright: Tim Docker, 2006-2014
@@ -11,6 +11,8 @@
              Cairo (<http://hackage.haskell.org/package/Chart-cairo>)
              and
              Diagrams (<http://hackage.haskell.org/package/Chart-diagrams>).
+             
+             Documentation: https://github.com/timbod7/haskell-chart/wiki.
 Category: Graphics
 Cabal-Version: >= 1.6
 Build-Type: Simple
@@ -24,7 +26,7 @@
                , data-default-class < 0.2
                , mtl >= 2.0 && < 2.3
                , operational >= 0.2.2 && < 0.3
-               , vector >=0.9 && <0.12
+               , vector >=0.9 && <0.13
 
 
   Ghc-options: -Wall -fno-warn-orphans
diff --git a/Graphics/Rendering/Chart/Plot/Histogram.hs b/Graphics/Rendering/Chart/Plot/Histogram.hs
--- a/Graphics/Rendering/Chart/Plot/Histogram.hs
+++ b/Graphics/Rendering/Chart/Plot/Histogram.hs
@@ -53,7 +53,7 @@
 
       -- | Override the range of the histogram. If @Nothing@ the
       -- range of @_plot_hist_values@ is used.
-      -- 
+      --
       -- Note that any normalization is always computed over the full
       -- data set, including samples not falling in the histogram range.
     , _plot_hist_range                :: Maybe (x,x)
@@ -115,7 +115,11 @@
         _plot_render      = renderPlotHist p,
         _plot_legend      = [(_plot_hist_title p, renderPlotLegendHist p)],
         _plot_all_points  = unzip
-                            $ concatMap (\((x1,x2), y)->[(x1,y), (x2,y)])
+                            $ concatMap (\((x1,x2), y)->[ (x1,y)
+                                                        , (x2,y)
+                                                        , (x1,0)
+                                                        , (x2,0)
+                                                        ])
                             $ histToBins p
     }
 
@@ -170,9 +174,9 @@
           norm = dx * realToFrac (V.length values)
           normalize = _plot_hist_norm_func hist norm
           counts = V.toList $ V.map (normalize . snd)
-                   $ histWithBins (V.fromList bounds) (zip (repeat 1) $ V.toList values)
+                   $ histWithBins (V.fromList bounds)
+                   $ zip (repeat 1) (V.toList values)
 
--- TODO: Determine more aesthetically pleasing range
 realHistRange :: (RealFrac x) => PlotHist x y -> (x,x)
 realHistRange hist = fromMaybe range $ _plot_hist_range hist
     where values = V.fromList (_plot_hist_values hist)
diff --git a/Numeric/Histogram.hs b/Numeric/Histogram.hs
--- a/Numeric/Histogram.hs
+++ b/Numeric/Histogram.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE PatternGuards #-}                
+{-# LANGUAGE PatternGuards #-}
 
 module Numeric.Histogram ( Range
                          , binBounds
@@ -15,8 +15,13 @@
 
 -- | 'binBounds a b n' generates bounds for 'n' bins spaced linearly between
 -- 'a' and 'b'
+--
+-- Examples:
+--
+-- >>> binBounds 0 3 4
+-- [(0.0,0.75),(0.75,1.5),(1.5,2.25),(2.25,3.0)]
 binBounds :: RealFrac a => a -> a -> Int -> [Range a]
-binBounds a b n = map (\i->(lbound i, lbound (i+1))) [0..n]
+binBounds a b n = map (\i->(lbound i, lbound (i+1))) [0..n-1]
         where lbound i = a + (b-a) * realToFrac i / realToFrac n
 
 -- | 'histValues a b n vs' returns the bins for the histogram of
@@ -30,22 +35,35 @@
 histWeightedValues a b n = histWithBins (V.fromList $ binBounds a b n)
 
 -- | 'histWithBins bins xs' is the histogram of weighted values 'xs' with 'bins'
+--
+-- Examples:
+--
+-- >>> :{
+-- histWithBins
+--     (V.fromList [(0.0, 0.75), (0.75, 1.5), (1.5, 2.25), (2.25, 3.0)])
+--     [(1, 0), (1, 0), (1, 1), (1, 2), (1, 2), (1, 2), (1, 3)]
+-- :}
+-- [((0.0,0.75),2),((0.75,1.5),1),((1.5,2.25),3),((2.25,3.0),1)]
 histWithBins :: (Num w, RealFrac a) => V.Vector (Range a) -> [(w, a)] -> V.Vector (Range a, w)
 histWithBins bins xs =
-        let testBin :: RealFrac a => a -> Range a -> Bool
-            testBin x (a,b) = x >= a && x < b
+    let n = V.length bins
+        testBin :: RealFrac a => a -> (Int, Range a) -> Bool
+        testBin x (i, (a,b)) =
+            if i == n - 1
+                then x >= a && x <= b
+                else x >= a && x < b
 
-            f :: (RealFrac a, Num w)
-              => V.Vector (Range a) -> MV.STVector s w -> (w, a)
-              -> ST s ()
-            f bins1 bs (w,x) =
-                case V.dropWhile (not . testBin x . snd) $ V.indexed bins1 of
-                    v | V.null v  -> return ()
-                    v | (idx,_) <- V.head v  -> do
-                        n <- MV.read bs idx
-                        MV.write bs idx $! n+w
+        f :: (RealFrac a, Num w)
+          => V.Vector (Range a) -> MV.STVector s w -> (w, a)
+          -> ST s ()
+        f bins1 bs (w,x) =
+            case V.dropWhile (not . testBin x) $ V.indexed bins1 of
+                v | V.null v  -> return ()
+                v | (idx,_) <- V.head v  -> do
+                    m <- MV.read bs idx
+                    MV.write bs idx $! m+w
 
-            counts = runST $ do b <- MV.replicate (V.length bins) 0
-                                mapM_ (f bins b) xs
-                                V.freeze b
-        in V.zip bins counts
+        counts = runST $ do b <- MV.replicate n 0
+                            mapM_ (f bins b) xs
+                            V.freeze b
+    in V.zip bins counts
