diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -28,3 +28,6 @@
 
 0.2.0.4:
 		fixed definition of mutual_information
+
+0.2.0.5:
+		added Histogram
diff --git a/hstatistics.cabal b/hstatistics.cabal
--- a/hstatistics.cabal
+++ b/hstatistics.cabal
@@ -1,5 +1,5 @@
 Name:               hstatistics
-Version:            0.2.0.4
+Version:            0.2.0.5
 License:            GPL
 License-file:       LICENSE
 Copyright:          (c) A.V.H. McPhail 2010
@@ -22,12 +22,13 @@
 library
 
     Build-Depends:      base >= 3 && < 5,
-                        hmatrix >= 0.9.3, hmatrix-gsl-stats >= 0.1.1.3
+                        hmatrix >= 0.10.0, hmatrix-gsl-stats >= 0.1.1.4
 
     Extensions:         
 
     hs-source-dirs:     lib
-    Exposed-modules:    Numeric.Statistics.Shannon
+    Exposed-modules:    Numeric.Statistics.Information
+                        Numeric.Statistics.Histogram
     other-modules:      
     C-sources:          
 
diff --git a/lib/Numeric/Statistics/Histogram.hs b/lib/Numeric/Statistics/Histogram.hs
new file mode 100644
--- /dev/null
+++ b/lib/Numeric/Statistics/Histogram.hs
@@ -0,0 +1,55 @@
+{-# OPTIONS_GHC -fglasgow-exts #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Numeric.Statistics.Histogram
+-- Copyright   :  (c) Alexander Vivian Hugh McPhail 2010
+-- License     :  GPL-style
+--
+-- Maintainer  :  haskell.vivian.mcphail <at> gmail <dot> com
+-- Stability   :  provisional
+-- Portability :  portable
+--
+-- create histograms from density functions
+--
+-----------------------------------------------------------------------------
+
+module Numeric.Statistics.Histogram (
+                                     cumulativeToHistogram
+                                    , gaussianHistogram
+                                  ) where
+
+
+-----------------------------------------------------------------------------
+
+import Data.Packed.Vector
+
+import qualified Numeric.GSL.Histogram as H
+--import qualified Numeric.GSL.Histogram2D as H2
+
+import qualified Numeric.GSL.Distribution.Continuous as C
+
+--import Numeric.LinearAlgebra.Algorithms
+--import Numeric.LinearAlgebra.Interface()
+
+-----------------------------------------------------------------------------
+
+vectorToTuples = toTuples . toList
+    where toTuples []         = error "need a minimum of two elements"
+          toTuples [_]        = error "need a minimum of two elements"
+          toTuples [x1,x2]    = [(x1,x2)]
+          toTuples (x1:x2:xs) = (x1,x2) : (toTuples (x2:xs))
+
+-----------------------------------------------------------------------------
+
+cumulativeToHistogram :: (Double -> Double)  -- ^ the cumulative distribution function D(x <= X)
+                   -> Vector Double          -- ^ the bins
+                   -> H.Histogram            -- ^ the resulting histogram
+cumulativeToHistogram f v = H.addListWeighted (H.emptyRanges v) $ map (\(x1,x2) -> ((x1 + x2) / 2.0,f x2 - f x1)) (vectorToTuples v)
+
+gaussianHistogram :: Double              -- ^ mean
+                  -> Double              -- ^ standard deviation
+                  -> Vector Double       -- ^ the bins
+                  -> H.Histogram         -- ^ the resulting histogram
+gaussianHistogram u s = cumulativeToHistogram (\x -> C.density_1p C.Gaussian C.Lower s (x-u))
+
+-----------------------------------------------------------------------------
diff --git a/lib/Numeric/Statistics/Information.hs b/lib/Numeric/Statistics/Information.hs
new file mode 100644
--- /dev/null
+++ b/lib/Numeric/Statistics/Information.hs
@@ -0,0 +1,61 @@
+{-# OPTIONS_GHC -fglasgow-exts #-}
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Numeric.Statistics.Information
+-- Copyright   :  (c) Alexander Vivian Hugh McPhail 2010
+-- License     :  GPL-style
+--
+-- Maintainer  :  haskell.vivian.mcphail <at> gmail <dot> com
+-- Stability   :  provisional
+-- Portability :  portable
+--
+-- Shannon entropy
+--
+-----------------------------------------------------------------------------
+
+module Numeric.Statistics.Information (
+                                   entropy
+                                   , mutual_information
+                                  ) where
+
+
+-----------------------------------------------------------------------------
+
+import Data.Packed.Vector
+
+import qualified Numeric.GSL.Histogram as H
+import qualified Numeric.GSL.Histogram2D as H2
+
+import Numeric.LinearAlgebra.Algorithms
+import Numeric.LinearAlgebra.Interface()
+
+-----------------------------------------------------------------------------
+
+zeroToOne x
+    | x == 0.0  = 1.0
+    | otherwise = x
+
+logE = mapVector (log . zeroToOne)
+
+
+-----------------------------------------------------------------------------
+
+-- | the entropy \sum p_i l\ln{p_i} of a sequence
+entropy :: H.Histogram             -- ^ the underlying distribution
+        -> Vector Double           -- ^ the sequence (expected to fall within bounds of Histogram)
+        -> Double                  -- ^ the entropy
+entropy p x = let ps = H.prob p x
+              in dot ps (logE ps)
+
+-- | the mutual information \sum_x \sum_y \ln{\frac{p(x,y)}{p(x)p(y)}}
+mutual_information :: H2.Histogram2D -- ^ the underlying distribution
+                   -> H.Histogram    -- ^ the first dimension distribution
+                   -> H.Histogram    -- ^ the second dimension distribution
+                   -> (Vector Double, Vector Double) -- ^ the sequence (expected to fall within bounds of Histogram)
+                   -> Double         -- ^ the mutual information
+mutual_information p px py z@(x,y) = let ps = H2.prob p z
+                                         xs = H.prob px x
+                                         ys = H.prob py y
+                               in dot ps (logE ps - logE (xs*ys)) 
+
+-----------------------------------------------------------------------------
diff --git a/lib/Numeric/Statistics/Shannon.hs b/lib/Numeric/Statistics/Shannon.hs
deleted file mode 100644
--- a/lib/Numeric/Statistics/Shannon.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# OPTIONS_GHC -fglasgow-exts #-}
------------------------------------------------------------------------------
--- |
--- Module      :  Numeric.Statistics.Shannon
--- Copyright   :  (c) Alexander Vivian Hugh McPhail 2010
--- License     :  GPL-style
---
--- Maintainer  :  haskell.vivian.mcphail <at> gmail <dot> com
--- Stability   :  provisional
--- Portability :  portable
---
--- Shannon entropy
---
------------------------------------------------------------------------------
-
-module Numeric.Statistics.Shannon (
-                                   entropy
-                                   , mutual_information
-                                  ) where
-
-
-import Data.Packed.Vector
-
-import qualified Numeric.GSL.Histogram as H
-import qualified Numeric.GSL.Histogram2D as H2
-
-import Numeric.LinearAlgebra.Algorithms
-import Numeric.LinearAlgebra.Interface()
-
---import Prelude hiding (sum)
-
--- | the entropy \sum p_i l\ln{p_i} of a sequence
-entropy :: H.Histogram             -- the underlying distribution
-        -> Vector Double         -- the sequence (expected to fall within bounds of Histogram)
-        -> Double                -- the entropy
-entropy p x = let ps = H.prob p x
-              in dot ps (log ps)
-
--- | the mutuaal information \sum_x \sum_y \ln{\frac{p(x,y)}{p(x)p(y)}}
-mutual_information :: H2.Histogram2D -- the underlying distribution
-                   -> H.Histogram   -- the first dimension distribution
-                   -> H.Histogram   -- the second dimension distribution
-                   -> (Vector Double, Vector Double) -- the sequence (expected to fall within bounds of Histogram)
-                   -> Double      -- the mutual information
-mutual_information p px py z@(x,y) = let ps = H2.prob p z
-                                         xs = H.prob px x
-                                         ys = H.prob py y
-                               in dot ps (log (ps/(xs*ys))) 
