diff --git a/CHANGES b/CHANGES
deleted file mode 100644
--- a/CHANGES
+++ /dev/null
@@ -1,164 +0,0 @@
-1.3.12
-
-- Update package dependencies
-- Use `cryptonite` for crypto
-- The function `V4.nextRandom` is now implemented with functions from
-  `Crypto.Random` in package `cryptonite`. This does slow-down random
-  UUID generation but provides for far greater randomness. The
-  `Random` instance for `UUID` can be used to re-gain the old
-  behavior.
-
-1.3.11
-
-- Add toText/fromText
-
-1.3.10
-
-- Update dependencies in tests and benchmarks.
-
-1.3.9
-
-- Split definition of UUID data type into separate Cabal package to
-  enable 3rd party libraries to avoid some of the larger dependencies.
-
-1.3.8
-
-- Allow building against newer deepseq.
-
-1.3.7
-
-- Allow building against newer time.
-
-1.3.6
-
-- Move to GitHub.
-
-1.3.5
-
-- Allow building against newer random.
-
-1.3.4
-
-- Allow building against newer QuickCheck.
-
-1.3.3
-
-- More complex version constrainsts on hashable, to avoid building against
-  versions less than 1.1.1.0 or equal to 1.2.0.*.
-
-1.3.2
-
-- Fix for building against bytestring 0.9.*
-
-1.3.1
-
-- Allow building against 'hashable' 1.1.* in addition to 1.2.*
-
-1.3.0
-
-- New functions for parsing and printing UUIDs to and from ASCII BytesStrings
-- New module Data.UUID.Util. This module includes the type 'UnpackedUUID',
-  whose fields correspond to the UUID fields described in RFC 4122.
-- The Storable instance now stores a UUID in host byte-order instead of
-  big endian.
-- There is now an instance for 'Hashable UUID'.
-
-1.2.13
-
-Benchmark only changes:
-
-- Allow criterion 0.8.*
-
-1.2.12
-
-Test only changes:
-
-- Allow QuickCheck 2.6.*
-
-1.2.11
-
-- Allow binary 0.7.*
-
-1.2.10
-
-- Allow cryptohash version 0.9.*
-- Cleanup tests
-
-1.2.9
-
-- Bumped dependency on 'cryptohash'.
-
-1.2.8
-
-- Bumped various dependencies and cleaned up dependencies in general.
-
-1.2.7
-
-- Added stricter constraints on 'random' package.
-
-1.2.6
-
-- Add module 'V4' to direct attention to our Random instance
-
-- In module 'V1' seed the generator with a random number
-  if the hardware MAC address could not be discovered.
-
-- Fix and cleanup various haddocks.
-
-- In module docs, warn about MD5 use in Data.UUID.V3 and
-  encourage the reader to use Data.UUID.V5 instead.
-
-1.2.5
-
-- Use 'cryptohash' package for MD5 and SHA1 instead of 'Crypto'
-
-1.2.4
-
-- Unpack Word32 values into UUID constructor.
-
-- Update test suite to QuickCheck 2
-
-- Bump other dependencies in tests/benchmarks
-
-1.2.3
-
-- The Read instance now drops leading spaces in the string to be parsed.
-Thanks to Marc Ziegert for reporting this bug.
-
-- The tests have moved over to the new Cabal test running framework.
-
-1.2.2
-
-- Add functions fromWords/toWords
-
-The goal was to have a total function that can be used to construct
-a UUID, primarily for use by uuid-th.
-
-1.2.1
-
-- Fix concurrency bug in Data.UUID.V1 (thanks to Neil Mitchell for reporting
-and a test case)
-
-1.2.0
-  (Contributors: Antoine Latter & Mark Lentczner)
-
-- added functions toByteString and fromByteString
-- added 'nil' UUID
-- added unit tests and benchmarks, built when configured -ftest
-- major speed up of to/from functions (as well as in general)
-- added version-3 generation (deterministic based on MD5)
-- major changes to internal representation
-	- now uses four strict Word32 values
-	- internal ByteSource classes for easy construction (see Builder.hs)
-- Storable instance now stores in memory as system libraries in C do:
-    16 bytes derived from the network order of the fields, no matter what
-    the host native endianess is.
-- fixed bugs in V1 time and clock stepping, and V1 generated values
-- builds cleanly under GHC's -Wall
-- added CHANGES file
-
-1.1.1
-
-- no longer exporting 'null' from the prelude
-- add 'null' predicate on UUIDs
-- documentation fix (thanks Mark Lentczner)
diff --git a/CHANGES.md b/CHANGES.md
new file mode 100644
--- /dev/null
+++ b/CHANGES.md
@@ -0,0 +1,172 @@
+1.3.13
+
+- Optimize `V4.nextRandom` (~3x speed increase)
+- Optimize UUID V3 & V5 generation (~2x speed increase)
+- Use `cryptohash-md5`/`cryptohash-sha1`/`entropy` instead
+  of `memory`/`cryptonite` for better performance and stability.
+- Update cabal-spec to version 1.10
+
+1.3.12
+
+- Update package dependencies
+- Use `cryptonite` for crypto
+- The function `V4.nextRandom` is now implemented with functions from
+  `Crypto.Random` in package `cryptonite`. This does slow-down random
+  UUID generation but provides for far greater randomness. The
+  `Random` instance for `UUID` can be used to re-gain the old
+  behavior.
+
+1.3.11
+
+- Add `toText`/`fromText`
+
+1.3.10
+
+- Update dependencies in tests and benchmarks.
+
+1.3.9
+
+- Split definition of UUID data type into separate Cabal package to
+  enable 3rd party libraries to avoid some of the larger dependencies.
+
+1.3.8
+
+- Allow building against newer `deepseq`.
+
+1.3.7
+
+- Allow building against newer `time`.
+
+1.3.6
+
+- Move to GitHub.
+
+1.3.5
+
+- Allow building against newer `random`.
+
+1.3.4
+
+- Allow building against newer `QuickCheck`.
+
+1.3.3
+
+- More complex version constraints on `hashable`, to avoid building against
+  versions less than 1.1.1.0 or equal to 1.2.0.*.
+
+1.3.2
+
+- Fix for building against `bytestring` 0.9.*
+
+1.3.1
+
+- Allow building against `hashable` 1.1.* in addition to 1.2.*
+
+1.3.0
+
+- New functions for parsing and printing UUIDs to and from ASCII BytesStrings
+- New module `Data.UUID.Util`. This module includes the type `UnpackedUUID`,
+  whose fields correspond to the UUID fields described in RFC 4122.
+- The `Storable` instance now stores a UUID in host byte-order instead of
+  big endian.
+- There is now an instance for `Hashable UUID`.
+
+1.2.13
+
+Benchmark only changes:
+
+- Allow `criterion` 0.8.*
+
+1.2.12
+
+Test only changes:
+
+- Allow `QuickCheck` 2.6.*
+
+1.2.11
+
+- Allow `binary` 0.7.*
+
+1.2.10
+
+- Allow `cryptohash` version 0.9.*
+- Cleanup tests
+
+1.2.9
+
+- Bumped dependency on `cryptohash`.
+
+1.2.8
+
+- Bumped various dependencies and cleaned up dependencies in general.
+
+1.2.7
+
+- Added stricter constraints on `random` package.
+
+1.2.6
+
+- Add module `V4` to direct attention to our Random instance
+
+- In module `V1` seed the generator with a random number
+  if the hardware MAC address could not be discovered.
+
+- Fix and cleanup various haddocks.
+
+- In module docs, warn about MD5 use in Data.UUID.V3 and
+  encourage the reader to use Data.UUID.V5 instead.
+
+1.2.5
+
+- Use `cryptohash` package for MD5 and SHA1 instead of `Crypto`
+
+1.2.4
+
+- Unpack Word32 values into UUID constructor.
+
+- Update test suite to QuickCheck 2
+
+- Bump other dependencies in tests/benchmarks
+
+1.2.3
+
+- The Read instance now drops leading spaces in the string to be parsed.
+Thanks to Marc Ziegert for reporting this bug.
+
+- The tests have moved over to the new Cabal test running framework.
+
+1.2.2
+
+- Add functions fromWords/toWords
+
+The goal was to have a total function that can be used to construct
+a UUID, primarily for use by uuid-th.
+
+1.2.1
+
+- Fix concurrency bug in Data.UUID.V1 (thanks to Neil Mitchell for reporting
+and a test case)
+
+1.2.0
+  (Contributors: Antoine Latter & Mark Lentczner)
+
+- added functions toByteString and fromByteString
+- added `nil` UUID
+- added unit tests and benchmarks, built when configured -ftest
+- major speed up of to/from functions (as well as in general)
+- added version-3 generation (deterministic based on MD5)
+- major changes to internal representation
+	- now uses four strict Word32 values
+	- internal ByteSource classes for easy construction (see Builder.hs)
+- Storable instance now stores in memory as system libraries in C do:
+    16 bytes derived from the network order of the fields, no matter what
+    the host native endianess is.
+- fixed bugs in V1 time and clock stepping, and V1 generated values
+- builds cleanly under GHC's -Wall
+- added CHANGES file
+
+1.1.1
+
+- no longer exporting `null` from the prelude
+- add `null` predicate on UUIDs
+- documentation fix (thanks Mark Lentczner)
diff --git a/Data/UUID/Named.hs b/Data/UUID/Named.hs
--- a/Data/UUID/Named.hs
+++ b/Data/UUID/Named.hs
@@ -33,21 +33,19 @@
 import Data.Maybe
 import Data.Word (Word8)
 
-import qualified Data.ByteArray as BA
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Lazy as BL
 
 -- |Generate a 'UUID' within the specified namespace out of the given
 -- object.
-generateNamed :: BA.ByteArrayAccess bs
-              => (B.ByteString -> bs) -- ^Hash
+generateNamed :: (B.ByteString -> B.ByteString) -- ^Hash
               -> Word8   -- ^Version
               ->  UUID   -- ^Namespace
               -> [Word8] -- ^Object
               -> UUID
 generateNamed hash version namespace object =
     let chunk = B.pack $ toList namespace ++ object
-        bytes = BL.fromStrict . BA.convert $ hash chunk
+        bytes = BL.fromChunks . (:[]) $ hash chunk
         w = getWord32be
         unpackBytes = runGet $
          buildFromWords version <$> w <*> w <*> w <*> w
diff --git a/Data/UUID/V3.hs b/Data/UUID/V3.hs
--- a/Data/UUID/V3.hs
+++ b/Data/UUID/V3.hs
@@ -35,7 +35,7 @@
 
 import Data.UUID.Types.Internal
 import qualified Data.UUID.Named as Shared
-import qualified Crypto.Hash as H
+import qualified Crypto.Hash.MD5 as MD5
 
 
 -- |Generate a 'UUID' within the specified namespace out of the given
@@ -46,4 +46,4 @@
 generateNamed :: UUID    -- ^Namespace
               -> [Word8] -- ^Object
               -> UUID
-generateNamed = Shared.generateNamed (H.hashWith H.MD5) 3
+generateNamed = Shared.generateNamed MD5.hash 3
diff --git a/Data/UUID/V4.hs b/Data/UUID/V4.hs
--- a/Data/UUID/V4.hs
+++ b/Data/UUID/V4.hs
@@ -23,7 +23,7 @@
 import Data.UUID
 import Data.UUID.Types.Internal ( buildFromBytes )
 
-import Crypto.Random.Entropy ( getEntropy )
+import System.Entropy ( getEntropy )
 import Data.ByteString ( unpack )
 
 -- | Generate a random UUID. Introduced in version 1.2.6.
diff --git a/Data/UUID/V5.hs b/Data/UUID/V5.hs
--- a/Data/UUID/V5.hs
+++ b/Data/UUID/V5.hs
@@ -30,7 +30,7 @@
 
 import Data.UUID.Types.Internal
 import qualified Data.UUID.Named as Shared
-import qualified Crypto.Hash as H
+import qualified Crypto.Hash.SHA1 as SHA1
 
 
 -- |Generate a 'UUID' within the specified namespace out of the given
@@ -41,4 +41,4 @@
 generateNamed :: UUID    -- ^Namespace
               -> [Word8] -- ^Object
               -> UUID
-generateNamed = Shared.generateNamed (H.hashWith H.SHA1) 5
+generateNamed = Shared.generateNamed SHA1.hash 5
diff --git a/tests/BenchUUID.hs b/tests/BenchUUID.hs
--- a/tests/BenchUUID.hs
+++ b/tests/BenchUUID.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE CPP #-}
-
 import Criterion.Main
 import Data.Char (ord)
 import Data.IORef
diff --git a/uuid.cabal b/uuid.cabal
--- a/uuid.cabal
+++ b/uuid.cabal
@@ -1,84 +1,90 @@
 Name: uuid
-Version: 1.3.12
+Version: 1.3.13
 Copyright: (c) 2008-2014 Antoine Latter
 Author: Antoine Latter
-Maintainer: aslatter@gmail.com
+Maintainer: hvr@gnu.org
 License: BSD3
 License-file: LICENSE
-
 Category: Data
 Build-Type: Simple
-Cabal-Version: >= 1.8
+Cabal-Version: >= 1.10
+Tested-With: GHC==8.0.2, GHC==7.10.3, GHC==7.8.4, GHC==7.6.3, GHC==7.4.2
 
+Synopsis: For creating, comparing, parsing and printing Universally Unique Identifiers
 Description:
  This library is useful for creating, comparing, parsing and
  printing Universally Unique Identifiers.
+ .
  See <http://en.wikipedia.org/wiki/UUID> for the general idea.
 
-Synopsis: For creating, comparing, parsing and printing Universally Unique Identifiers
-
-Homepage: https://github.com/aslatter/uuid
-Bug-Reports: https://github.com/aslatter/uuid/issues
+Homepage: https://github.com/hvr/uuid
+Bug-Reports: https://github.com/hvr/uuid/issues
 
 Extra-Source-Files:
-     CHANGES
+    CHANGES.md
 
+Source-Repository head
+    Type:              git
+    Location:          https://github.com/hvr/uuid.git
+    Subdir:            uuid
 
 Library
- Build-Depends: base >=3 && < 5,
-                binary >= 0.4 && < 0.9,
-                bytestring >= 0.9 && < 0.11,
-                cryptonite,
-                memory,
-                network-info == 0.2.*,
-                random >= 1.0.1 && < 1.2,
-                time >= 1.1 && < 1.7,
-                text >= 1 && < 1.3,
-                uuid-types >= 1.0.2 && < 2
-
- Exposed-Modules:
-   Data.UUID
-   Data.UUID.Util
-   Data.UUID.V1
-   Data.UUID.V3
-   Data.UUID.V4
-   Data.UUID.V5
+    Build-Depends:     base            >= 4.3      && < 5,
+                       binary          >= 0.4      && < 0.9,
+                       bytestring      >= 0.10     && < 0.11,
+                       cryptohash-sha1 >= 0.11.100 && < 0.12,
+                       cryptohash-md5  >= 0.11.100 && < 0.12,
+                       entropy         >= 0.3.7    && < 0.4,
+                       network-info    == 0.2.*,
+                       random          >= 1.0.1    && < 1.2,
+                       time            >= 1.1      && < 1.8,
+                       text            >= 1        && < 1.3,
+                       uuid-types      >= 1.0.2    && < 2
 
- Other-Modules:
-   Data.UUID.Named
-   Data.Word.Util
+    Exposed-Modules:
+      Data.UUID
+      Data.UUID.Util
+      Data.UUID.V1
+      Data.UUID.V3
+      Data.UUID.V4
+      Data.UUID.V5
 
- Extensions: DeriveDataTypeable
- Ghc-Options:        -Wall
+    Other-Modules:
+      Data.UUID.Named
+      Data.Word.Util
 
-source-repository   head
-  type:             git
-  location:         https://github.com/aslatter/uuid.git
+    Default-Language:  Haskell2010
+    Default-Extensions: DeriveDataTypeable
+    Other-Extensions:  TypeFamilies
+    Ghc-Options:       -Wall
 
 Test-Suite testuuid
     Type:              exitcode-stdio-1.0
     Main-is:           TestUUID.hs
     Hs-source-dirs:    tests
-    Extensions:        DeriveDataTypeable
+    Default-Language:  Haskell2010
+    Default-Extensions: DeriveDataTypeable
+    Other-Extensions:  ViewPatterns
     Ghc-Options:       -Wall -fno-warn-orphans
-    Build-Depends:     base >= 3 && < 5,
-                       uuid,
-                       bytestring >= 0.9 && < 0.11,
-                       HUnit >=1.2 && < 1.4,
-                       QuickCheck >=2.4 && < 2.9,
-                       random >= 1.0.1 && < 1.2,
-                       tasty >= 0.10 && < 0.12,
-                       tasty-hunit == 0.9.*,
+    Build-Depends:     uuid
+    Build-Depends:     base             >= 4.3   && < 5,
+                       bytestring       >= 0.9   && < 0.11,
+                       HUnit            >= 1.2   && < 1.4,
+                       QuickCheck       >= 2.4   && < 2.10,
+                       random           >= 1.0.1 && < 1.2,
+                       tasty            >= 0.10  && < 0.12,
+                       tasty-hunit      == 0.9.*,
                        tasty-quickcheck == 0.8.*
 
 benchmark benchmark
     Type:              exitcode-stdio-1.0
     Main-is:           BenchUUID.hs
     Hs-source-dirs:    tests
-    Extensions:        DeriveDataTypeable, CPP
+    Default-Language:  Haskell2010
+    Default-Extensions: DeriveDataTypeable, CPP
     Ghc-Options:       -Wall -fno-warn-orphans
-    Build-depends:     base == 4.*,
-                       uuid,
-                       criterion >= 0.4 && < 1.2,
-                       mersenne-random-pure64,
-                       random >= 1.0.1 && < 1.2
+    Build-Depends:     uuid
+    Build-Depends:     base                   >= 4.3 && < 5,
+                       criterion              >= 0.4 && < 1.2,
+                       mersenne-random-pure64 >= 0.2 && < 0.3,
+                       random                 >= 1.0.1 && < 1.2
