diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,11 @@
+0.2.1.0
+==============
+
+* Drop direct dependency on random, upgrade uuid to >= 1.3.12 for
+  safer id generation. Previously, UUID was using randomIO, which uses
+  the system clock as a seed. So if multiple nodes happened to start
+  at the same time, they would produce conflicting UUID sequences.
+
 0.2.0.0
 ==============
 
diff --git a/katip-elasticsearch.cabal b/katip-elasticsearch.cabal
--- a/katip-elasticsearch.cabal
+++ b/katip-elasticsearch.cabal
@@ -1,11 +1,11 @@
 name:                katip-elasticsearch
 synopsis:            ElasticSearch scribe for the Katip logging framework.
 description:         See README.md for more details.
-version:             0.2.0.0
+version:             0.2.1.0
 license:             BSD3
 license-file:        LICENSE
 author:              Ozgun Ataman, Michael Xavier
-maintainer:          ozgun.ataman@soostone.com
+maintainer:          michael.xavier@soostone.com
 copyright:           Soostone Inc, 2015-2016
 category:            Data
 build-type:          Simple
@@ -29,8 +29,7 @@
       base >=4.6 && <5
     , katip >= 0.2.0.0 && < 0.3
     , bloodhound >= 0.11.0.0 && < 0.12
-    , random >= 1.0 && < 1.2
-    , uuid >= 1.3 && < 1.4
+    , uuid >= 1.3.12 && < 1.4
     , aeson >=0.6 && <0.12
     , stm >= 2.4.3 && < 2.5
     , stm-chans >= 3.0.0.2 && < 3.1
@@ -44,7 +43,7 @@
     , unordered-containers >= 0.1.0.0 && < 0.3
     , transformers >= 0.2 && < 0.6
     , http-types >= 0.8 && < 0.10
-    , time >= 1 && < 1.6
+    , time >= 1 && < 1.7
   hs-source-dirs:      src
   default-language:    Haskell2010
   hs-source-dirs:      src
diff --git a/src/Katip/Scribes/ElasticSearch.hs b/src/Katip/Scribes/ElasticSearch.hs
--- a/src/Katip/Scribes/ElasticSearch.hs
+++ b/src/Katip/Scribes/ElasticSearch.hs
@@ -53,10 +53,10 @@
 import           Data.Time.Calendar.WeekDate
 import           Data.Typeable
 import           Data.UUID
+import qualified Data.UUID.V4                            as UUID4
 import           Database.Bloodhound
 import           Network.HTTP.Client
 import           Network.HTTP.Types.Status
-import           System.Random
 -------------------------------------------------------------------------------
 import           Katip.Core
 import           Katip.Scribes.ElasticSearch.Annotations
@@ -64,13 +64,13 @@
 
 
 data EsScribeCfg = EsScribeCfg {
-      essRetryPolicy     :: RetryPolicy
+      essRetryPolicy   :: RetryPolicy
     -- ^ Retry policy when there are errors sending logs to the server
-    , essQueueSize       :: EsQueueSize
+    , essQueueSize     :: EsQueueSize
     -- ^ Maximum size of the bounded log queue
-    , essPoolSize        :: EsPoolSize
+    , essPoolSize      :: EsPoolSize
     -- ^ Worker pool size limit for sending data to the
-    , essAnnotateTypes   :: Bool
+    , essAnnotateTypes :: Bool
     -- ^ Different payload items coexist in the "data" attribute in
     -- ES. It is possible for different payloads to have different
     -- types for the same key, e.g. an "id" key that is sometimes a
@@ -83,8 +83,8 @@
     -- exposes a querying API, we will try to make deserialization and
     -- querying transparently remove the type annotations if this is
     -- enabled.
-    , essIndexSettings   :: IndexSettings
-    , essIndexSharding   :: IndexShardingPolicy
+    , essIndexSettings :: IndexSettings
+    , essIndexSharding :: IndexShardingPolicy
     } deriving (Typeable)
 
 
@@ -322,7 +322,7 @@
 
 -------------------------------------------------------------------------------
 mkDocId :: IO DocId
-mkDocId = (DocId . T.decodeUtf8 . toASCIIBytes) `fmap` randomIO
+mkDocId = (DocId . T.decodeUtf8 . toASCIIBytes) `fmap` UUID4.nextRandom
 
 
 -------------------------------------------------------------------------------
