diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,40 @@
+# log-0.9.0.0 (2017-05-04)
+* Updated the Elasticsearch back-end to work with bloodhound-0.14.0.0 (#30).
+* The following modules are now deprecated: Log.Backend.ElasticSearch,
+  Log.Backend.ElasticSearch.Internal,
+  Log.Backend.ElasticSearch.Lens. Use V1/V5 variants directly (#30).
+
+# log-0.8 (2017-03-16)
+* Added a few MTL class instances (#28).
+* Made ElasticSearchConfig an abstract type (#27).
+* Added support for HTTPS and basic auth to log-elasticsearch (#26).
+
+# log-0.7 (2016-11-25)
+* Split into four libraries (log, log-base, log-postgres,
+  log-elasticsearch).
+* Improved documentation (#22).
+* Implement 'toEncoding' directly in 'ToJSON' instances (#21).
+
+# log-0.6 (2016-11-22)
+* Moved 'withLogger' to 'Log.Internal.Logger'.
+
+# log-0.5.7 (2016-11-22)
+* Remove the dependency on 'cond'.
+* Fix formatting in 'mkBulkLogger' haddocks (#16).
+* Generalise the types of 'logAttention', 'logInfo' and 'logTrace'
+  (#17).
+
+# log-0.5.5 (2016-11-16)
+* Add an in-memory logging backend for testing (#13).
+* Fix the deprecation message for stdout logger.
+
+# log-0.5.4 (2016-10-21)
+* New logger creation API, which is harder to misuse.
+* Remove the use of finalisers in favour of the new logger API.
+* Fix a JSON serialisation issue affecting the Elasticsearch back-end.
+* Make the Elasticsearch back-end compatible with Elasticsearch 1.x.
+* Fix a synchronisation issue affecting the Elasticsearch back-end.
+* Add a test suite and Travis-based CI.
+
+# log-0.1.0
+* Initial version.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,38 @@
+# log [![Hackage version](https://img.shields.io/hackage/v/log.svg?label=Hackage)](https://hackage.haskell.org/package/log) [![Build Status](https://secure.travis-ci.org/scrive/log.svg?branch=master)](http://travis-ci.org/scrive/log)
+
+A library that provides a way to record structured log messages with
+multiple back ends.
+
+Supported back ends:
+
+* Standard output
+* Elasticsearch
+* PostgreSQL
+
+The `log` library provides Elasticsearch and PostgreSQL back ends. If
+you only need one of those, use `log-base` and `log-elasticsearch` or
+`log-postgres`.
+
+## Example
+
+```haskell
+{-# LANGUAGE OverloadedStrings #-}
+
+module Main where
+
+import Log
+import Log.Backend.ElasticSearch.V5
+
+import System.Random
+
+main :: IO ()
+main = do
+  let config = defaultElasticSearchConfig {
+        esServer  = "http://localhost:9200",
+        esIndex   = "logs",
+        esMapping = "log"
+        }
+  withElasticSearchLogger config randomIO $ \logger ->
+    runLogT "main" logger $ do
+      logTrace_ "foo"
+```
diff --git a/bench/Bench.hs b/bench/Bench.hs
new file mode 100644
--- /dev/null
+++ b/bench/Bench.hs
@@ -0,0 +1,65 @@
+module Main where
+
+import Log
+import Log.Backend.ElasticSearch.V5
+import Log.Backend.PostgreSQL
+
+import Control.Concurrent
+import Control.Monad
+import Control.Monad.Base
+import Control.Monad.IO.Class
+import Database.PostgreSQL.PQTypes
+import Data.Monoid
+import System.Environment
+import System.Random
+import TextShow
+
+import qualified Data.Text as T
+import qualified System.Remote.Monitoring as EKG
+
+-- Usage:
+--
+-- 1. (Optional) Start elasticsearch/postgres
+-- 2. Run the benchmark exe with the appropriate argument ('postgres'/'elastic').
+-- 3. Open htop and/or localhost:8000 in the browser
+-- 4. Stop elasticsearch/postgres
+-- 5. Observe the memory allocation behaviour.
+
+main :: IO ()
+main = do
+  void $ EKG.forkServer "localhost" 8000
+  args <- getArgs
+  case args of
+    ["postgres"]             -> benchPostgres defConnString
+    ["postgres", connString] -> benchPostgres (T.pack connString)
+    ["elastic"]              -> benchElastic
+    _                        -> benchElastic
+
+defConnString :: T.Text
+defConnString = "postgresql://user:password@localhost/log-postgresql-bench"
+
+benchPostgres :: T.Text -> IO ()
+benchPostgres connString = do
+  putStrLn "postgres"
+  ConnectionSource connSource <- poolSource def { csConnInfo = connString } 1 10 1
+  withPgLogger connSource $
+    \logger -> forever $ benchLogger logger
+
+benchElastic :: IO ()
+benchElastic = do
+  putStrLn "elastic"
+  let config = defaultElasticSearchConfig
+  withElasticSearchLogger config randomIO $
+    \logger -> forever $ benchLogger logger
+
+
+benchLogger :: (MonadIO m, MonadTime m, MonadBase IO m) => Logger -> m ()
+benchLogger logger= do
+  liftIO $ putStrLn "writing 100 000 log messages..."
+
+  runLogT "log-bench-elasticsearch" logger $
+    forM_ [0..10000] $ \(i :: Int) ->
+    logTrace_ ("kaboozle kaboozle kaboozle kaboozle kaboozle " <> showt i)
+
+  liftIO $ putStrLn "sleeping for 1 s..."
+  liftIO $ threadDelay 1000000 {- 1 sec -}
diff --git a/log.cabal b/log.cabal
--- a/log.cabal
+++ b/log.cabal
@@ -1,5 +1,5 @@
 name:                log
-version:             0.9.0.0
+version:             0.9.0.1
 synopsis:            Structured logging solution with multiple backends
 
 description:         A library that provides a way to record structured
@@ -25,6 +25,7 @@
 category:            System
 build-type:          Simple
 cabal-version:       >=1.10
+extra-source-files:  CHANGELOG.md, README.md
 tested-with:         GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2
 
 Source-repository head
@@ -53,9 +54,9 @@
                        Log.Monad
 
   build-depends:       base <5,
-                       log-base >= 0.7 && < 0.9,
-                       log-elasticsearch >= 0.9 && < 0.10,
-                       log-postgres >= 0.7 && < 0.9
+                       log-base >= 0.7.1.1 && < 0.9,
+                       log-elasticsearch >= 0.9.0.1 && < 0.10,
+                       log-postgres >= 0.7.0.1 && < 0.9
 
   hs-source-dirs:      src
 
@@ -112,3 +113,22 @@
   default-extensions: BangPatterns
                     , OverloadedStrings
                     , RecordWildCards
+
+benchmark log-bench
+  type:               exitcode-stdio-1.0
+  build-depends:      base,
+                      ekg,
+                      log,
+                      hpqtypes,
+                      random,
+                      text,
+                      text-show,
+                      transformers,
+                      transformers-base
+  hs-source-dirs:     bench
+  main-is:            Bench.hs
+  ghc-options:        -Wall -threaded "-with-rtsopts=-T -sstderr"
+  default-language:   Haskell2010
+  default-extensions: OverloadedStrings,
+                      FlexibleContexts,
+                      ScopedTypeVariables
