diff --git a/Data/Monoid/Statistics.hs b/Data/Monoid/Statistics.hs
--- a/Data/Monoid/Statistics.hs
+++ b/Data/Monoid/Statistics.hs
@@ -9,13 +9,17 @@
 -- Maintainer : Alexey Khudyakov <alexey.skladnoy@gmail.com>
 -- Stability  : experimental
 -- 
-module Data.Monoid.Statistics ( StatMonoid(..)
-                              , evalStatistic
-                                -- * Statistic monoids
-                              , TwoStats(..)
-                                -- * Additional information
-                                -- $info
-                              ) where
+module Data.Monoid.Statistics ( 
+    -- * Type class
+    StatMonoid(..)
+  , evalStatistic
+    -- ** Examples
+    -- $examples
+    -- * Generic monoid
+  , TwoStats(..)
+    -- * Additional information
+    -- $info
+  ) where
 
 
 import Data.Monoid
@@ -32,6 +36,7 @@
 --
 --   Statistic could be calculated with fold over sample. Since
 --   accumulator is 'Monoid' such fold could be easily parralelized.
+--   Check examples section for more information.
 --
 --   Instance must satisfy following law:
 --
@@ -92,9 +97,48 @@
 -- This indeed proves that monoid could be constructed. Monoid above
 -- is completely impractical. It runs in O(n) space. However for some
 -- statistics monoids which runs in O(1) space could be
--- implemented. For example mean. 
+-- implemented. Simple examples of such statistics are number of
+-- elements in sample or mean of a sample.
 --
 -- On the other hand some statistics could not be implemented in such
 -- way. For example calculation of median require O(n) space. Variance
--- could be implemented in O(1) but such implementation won't be
--- numerically stable. 
+-- could be implemented in O(1) but such implementation will have
+-- problems with numberical stability.
+
+
+
+-- $examples
+--
+-- These examples show how to find maximum and minimum of a sample in
+-- one pass over data.
+-- 
+-- This is test data. It's not limited to list but could be anything
+-- what could be folded.
+--
+-- > > let xs = [1..100] :: [Double]
+-- 
+-- Now let calculate maximum of test sample using two methods. First
+-- one is to use generic function 'evalStatistic' and another one is
+-- fold.
+--
+-- > > evalStatistic xs :: Max
+-- > Max {calcMax = 100.0}
+-- > > foldl (flip pappend) mempty xs :: Max
+-- > Max {calcMax = 100.0}
+--
+-- More complicated example allows to combine several monoids
+-- together. It allows to calculate two statistics in one pass:
+--
+-- > > evalStatistic xs :: TwoStats Min Max
+-- > TwoStats {calcStat1 = Min {calcMin = 1.0}, calcStat2 = Max {calcMax = 100.0}}
+--
+-- Last example shows how to calculate nuber of elements, mean and
+-- variance at once:
+--
+-- > > let v = evalStatistic xs :: Variance
+-- > > calcCount v
+-- > 100
+-- > > calcMean v
+-- > 50.5
+-- > > calcStddev v
+-- > 28.86607004772212
diff --git a/Data/Monoid/Statistics/Numeric.hs b/Data/Monoid/Statistics/Numeric.hs
--- a/Data/Monoid/Statistics/Numeric.hs
+++ b/Data/Monoid/Statistics/Numeric.hs
@@ -12,6 +12,7 @@
   , Variance(..)
   , asVariance
     -- ** Ad-hoc accessors
+    -- $accessors
   , CalcCount(..)
   , CalcMean(..)
   , CalcVariance(..)
@@ -22,10 +23,6 @@
   , Min(..)
   ) where
 
-import Data.Int     (Int8, Int16, Int32, Int64)
-import Data.Word    (Word8,Word16,Word32,Word64,Word)
-import GHC.Float    (float2Double)
-
 import Data.Monoid
 import Data.Monoid.Statistics
 import Data.Typeable (Typeable)
@@ -158,7 +155,10 @@
 -- N.B. forall (x :: Double) (x <= NaN) == False
 instance Monoid Min where
   mempty = Min (0/0)
-  mappend !(Min x) !(Min y) = Min $ if x <= y then x else y
+  mappend !(Min x) !(Min y) 
+    | isNaN x   = Min y
+    | isNaN y   = Min x
+    | otherwise = Min (min x y)
   {-# INLINE mempty  #-}
   {-# INLINE mappend #-}  
 
@@ -166,9 +166,6 @@
   pappend !x m = mappend (Min x) m
   {-# INLINE pappend #-}
 
-
-
-
 -- | Calculate maximum of sample. For empty sample returns NaN. Any
 -- NaN encountedred will be ignored. 
 newtype Max = Max { calcMax :: Double }
@@ -176,7 +173,10 @@
 
 instance Monoid Max where
   mempty = Max (0/0)
-  mappend !(Max x) !(Max y) = Max $ if x >= y then x else y
+  mappend !(Max x) !(Max y) 
+    | isNaN x   = Max y
+    | isNaN y   = Max x
+    | otherwise = Max (max x y)
   {-# INLINE mempty  #-}
   {-# INLINE mappend #-}  
 
@@ -191,14 +191,41 @@
 -- Ad-hoc type class
 ----------------------------------------------------------------
   
+-- $accessors
+--
+-- Monoids 'Count', 'Mean' and 'Variance' form some kind of tower.
+-- Every successive monoid can calculate every statistics previous
+-- monoids can. So to avoid replicating accessors for each statistics
+-- a set of ad-hoc type classes was added. 
+--
+-- This approach have deficiency. It becomes to infer type of monoidal
+-- accumulator from accessor function so following expression will be
+-- rejected:
+-- 
+-- > calcCount $ evalStatistics xs
+--
+-- Indeed type of accumulator is:
+--
+-- > forall a . (StatMonoid a, CalcMean a) => a
+--
+-- Therefore it must be fixed by adding explicit type annotation. For
+-- example:
+--
+-- > calcMean (evalStatistics xs :: Mean)
+
+  
+
+-- | Statistics which could count number of elements in the sample
 class CalcCount m where
   -- | Number of elements in sample
   calcCount :: m -> Int
 
+-- | Statistics which could estimate mean of sample
 class CalcMean m where
   -- | Calculate esimate of mean of a sample
   calcMean :: m -> Double
   
+-- | Statistics which could estimate variance of sample
 class CalcVariance m where
   -- | Calculate biased estimate of variance
   calcVariance         :: m -> Double
diff --git a/monoid-statistics.cabal b/monoid-statistics.cabal
--- a/monoid-statistics.cabal
+++ b/monoid-statistics.cabal
@@ -1,5 +1,7 @@
+
+
 Name:           monoid-statistics
-Version:        0.3
+Version:        0.3.1
 Cabal-Version:  >= 1.6
 License:        BSD3
 License-File:   LICENSE
@@ -19,7 +21,10 @@
   This packages is quite similar to monoids package but limited to
   calculation on statistics. In particular it makes use of
   commutatitvity of statistical monoids.
-
+  .
+  Changes:
+  .
+  * 0.3.1 Better documentation; Fix in Min/Max monoids
 
 source-repository head
   type:     hg
