diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
--- a/ChangeLog
+++ /dev/null
@@ -1,61 +0,0 @@
-Changes in 0.13.4.0
-
-  * withSystemRandom uses RtlGenRandom for seeding generator on windows
-
-
-Changes in 0.13.3.1
-
-  * primitive-0.6 compatibility
-
-
-Changes in 0.13.3.0
-
-  * Monadic variant of vector shuffle added: `uniformShuffleM`
-
-  * Context on `uniformShuffle` loosened
-
-
-Changes in 0.13.2.2
-
-  * Fixed crash during gen. initialization on Windows when stderr
-    is not available (#36).
-
-Changes in 0.13.2.0
-
-  * Generators for beta, Bernoully, Dirichlet and categorical distributions
-    added.
-
-  * Functions for generating random shuffles added.
-
-
-Changes in 0.13.1.2
-
-  * GHC 7.9 support
-
-
-Changes in 0.13.1.1
-
-  * Long standing performance problem in normal distribution fixed (#16)
-
-
-Changes in 0.13.1.0
-
-  * createSystemRandom added
-
-
-Changes in 0.13.0.0
-
-  * Workaround for GHC bug 8072 (bug 25). GHC 7.6 on 32-bit platrofms is
-    affected.
-
-  * Generators for truncated exponential and geometric distributions
-    added.
-
-
-Changes in 0.12.0.0
-
-  * Fucntion `asGenIO' and `asGenST' added.
-
-  * Generation of discrete random variates using condensed tables
-    methed. Tables for Poisson and binomial distributions are
-    provided.
diff --git a/System/Random/MWC.hs b/System/Random/MWC.hs
--- a/System/Random/MWC.hs
+++ b/System/Random/MWC.hs
@@ -310,7 +310,9 @@
           v        = fromIntegral y :: Int32
 {-# INLINE wordsToDouble #-}
 
--- | State of the pseudo-random number generator.
+-- | State of the pseudo-random number generator. It uses mutable
+-- state so same generator shouldn't be used from the different
+-- threads simultaneously.
 newtype Gen s = Gen (M.MVector s Word32)
 
 -- | A shorter name for PRNG state in the 'IO' monad.
diff --git a/System/Random/MWC/CondensedTable.hs b/System/Random/MWC/CondensedTable.hs
--- a/System/Random/MWC/CondensedTable.hs
+++ b/System/Random/MWC/CondensedTable.hs
@@ -140,9 +140,10 @@
 
 
 -- | Generate a condensed lookup table from integer weights. Weights
--- should sum to @2^32@. If they don't, the algorithm will alter the
--- weights so that they do. This approach should work reasonably well
--- for rounding errors.
+-- should sum to @2^32@ at least approximately. This function will
+-- correct small deviations from @2^32@ such as arising from rounding
+-- errors. But for large deviations it's likely to product incorrect
+-- result with terrible performance.
 tableFromIntWeights :: (Vector v (a,Word32), Vector v a, Vector v Word32)
                     => v (a, Word32)
                     -> CondensedTable v a
diff --git a/System/Random/MWC/Distributions.hs b/System/Random/MWC/Distributions.hs
--- a/System/Random/MWC/Distributions.hs
+++ b/System/Random/MWC/Distributions.hs
@@ -23,6 +23,7 @@
     , beta
       -- ** Discrete distribution
     , categorical
+    , logCategorical
     , geometric0
     , geometric1
     , bernoulli
@@ -63,8 +64,6 @@
        -> Gen (PrimState m)
        -> m Double
 {-# INLINE normal #-}
--- We express standard in terms of normal and not other way round
--- because of bug in GHC. See bug #16 for more details.
 normal m s gen = do
   x <- standard gen
   return $! m + s * x
@@ -276,6 +275,20 @@
         return $! case G.findIndex (>=p) cv of
                     Just i  -> i
                     Nothing -> pkgError "categorical" "bad weights!"
+
+-- | Random variate generator for categorical distribution where the
+--   weights are in the log domain. It's implemented in terms of
+--   'categorical'.
+logCategorical :: (PrimMonad m, G.Vector v Double)
+               => v Double          -- ^ List of logarithms of weights
+               -> Gen (PrimState m) -- ^ Generator
+               -> m Int
+{-# INLINE logCategorical #-}
+logCategorical v gen
+  | G.null v  = pkgError "logCategorical" "empty weights!"
+  | otherwise = categorical (G.map (exp . subtract m) v) gen
+  where
+    m = G.maximum v
 
 -- | Random variate generator for uniformly distributed permutations.
 --   It returns random permutation of vector /[0 .. n-1]/.
diff --git a/changelog.md b/changelog.md
new file mode 100644
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,65 @@
+## Changes in 0.13.5.0
+
+  * `logCategorical` added
+
+## Changes in 0.13.4.0
+
+  * `withSystemRandom` uses RtlGenRandom for seeding generator on windows
+
+
+## Changes in 0.13.3.1
+
+  * primitive-0.6 compatibility
+
+
+## Changes in 0.13.3.0
+
+  * Monadic variant of vector shuffle added: `uniformShuffleM`
+
+  * Context on `uniformShuffle` loosened
+
+
+## Changes in 0.13.2.2
+
+  * Fixed crash during gen. initialization on Windows when stderr
+    is not available (#36).
+
+## Changes in 0.13.2.0
+
+  * Generators for beta, Bernoully, Dirichlet and categorical distributions
+    added.
+
+  * Functions for generating random shuffles added.
+
+
+## Changes in 0.13.1.2
+
+  * GHC 7.9 support
+
+
+## Changes in 0.13.1.1
+
+  * Long standing performance problem in normal distribution fixed (#16)
+
+
+## Changes in 0.13.1.0
+
+  * `createSystemRandom` added
+
+
+## Changes in 0.13.0.0
+
+  * Workaround for GHC bug 8072 (bug 25). GHC 7.6 on 32-bit platrofms is
+    affected.
+
+  * Generators for truncated exponential and geometric distributions
+    added.
+
+
+## Changes in 0.12.0.0
+
+  * Fucntion `asGenIO` and `asGenST` added.
+
+  * Generation of discrete random variates using condensed tables
+    methed. Tables for Poisson and binomial distributions are
+    provided.
diff --git a/mwc-random.cabal b/mwc-random.cabal
--- a/mwc-random.cabal
+++ b/mwc-random.cabal
@@ -1,5 +1,5 @@
 name:           mwc-random
-version:        0.13.4.0
+version:        0.13.5.0
 synopsis:       Fast, high quality pseudo random number generation
 description:
   This package contains code for generating high quality random
@@ -26,7 +26,7 @@
 build-type:     Simple
 cabal-version:  >= 1.8.0.4
 extra-source-files:
-  ChangeLog
+  changelog.md
   README.markdown
   benchmarks/*.hs
   benchmarks/Quickie.hs
