diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright Matthieu Monsch (c) 2019
+Copyright Matthieu Monsch (c) 2019-2020
 
 All rights reserved.
 
diff --git a/src/Control/Monad/Trace.hs b/src/Control/Monad/Trace.hs
--- a/src/Control/Monad/Trace.hs
+++ b/src/Control/Monad/Trace.hs
@@ -30,9 +30,9 @@
 
 import Control.Applicative ((<|>))
 import Control.Monad.IO.Class (MonadIO, liftIO)
-import Control.Monad.Reader (ReaderT(..), ask, asks, local, runReaderT)
+import Control.Monad.Reader (ReaderT(ReaderT), ask, asks, local, runReaderT)
 import Control.Monad.Reader.Class (MonadReader)
-import Control.Monad.Trans.Class (MonadTrans(..))
+import Control.Monad.Trans.Class (MonadTrans, lift)
 import qualified Data.Aeson as JSON
 import Data.Foldable (for_)
 import Data.List (sortOn)
@@ -41,7 +41,7 @@
 import Data.Maybe (fromMaybe)
 import Data.Time.Clock (NominalDiffTime)
 import Data.Time.Clock.POSIX (POSIXTime, getPOSIXTime)
-import UnliftIO (MonadUnliftIO, UnliftIO(..), askUnliftIO, withUnliftIO)
+import UnliftIO (MonadUnliftIO, withRunInIO)
 import UnliftIO.Exception (finally)
 import UnliftIO.STM (TChan, TVar, atomically, modifyTVar', newTChanIO, newTVarIO, readTVar, writeTChan, writeTVar)
 
@@ -161,7 +161,7 @@
       atomically $ modifyTVar' tv ((time, key, val) :)
 
 instance MonadUnliftIO m => MonadUnliftIO (TraceT m) where
-  askUnliftIO = TraceT $ withUnliftIO $ \u -> pure (UnliftIO (unliftIO u . traceTReader ))
+  withRunInIO inner = TraceT $ withRunInIO $ \run -> inner (run . traceTReader)
 
 -- | Trace an action, sampling its generated spans. This method is thread-safe and can be used to
 -- trace multiple actions concurrently.
diff --git a/src/Monitor/Tracing/Zipkin.hs b/src/Monitor/Tracing/Zipkin.hs
--- a/src/Monitor/Tracing/Zipkin.hs
+++ b/src/Monitor/Tracing/Zipkin.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -55,8 +56,11 @@
 import Data.IORef (modifyIORef, newIORef, readIORef)
 import Data.Map.Strict (Map)
 import qualified Data.Map.Strict as Map
-import Data.Maybe (catMaybes, fromMaybe, listToMaybe, maybe, maybeToList)
-import Data.Monoid ((<>), Endo(..))
+import Data.Maybe (catMaybes, fromMaybe, listToMaybe, maybeToList)
+import Data.Monoid (Endo(..))
+#if !MIN_VERSION_base(4, 11, 0)
+import Data.Semigroup ((<>))
+#endif
 import Data.Set (Set)
 import Data.String (IsString(..))
 import Data.Text (Text)
diff --git a/tracing.cabal b/tracing.cabal
--- a/tracing.cabal
+++ b/tracing.cabal
@@ -1,57 +1,67 @@
-name:                tracing
-version:             0.0.5.0
-synopsis:            Distributed tracing
-description:         An OpenTracing-compliant, simple, and extensible distributed tracing library.
-homepage:            https://github.com/mtth/tracing
-license:             BSD3
-license-file:        LICENSE
-author:              Matthieu Monsch
-maintainer:          mtth@apache.org
-copyright:           2019 Matthieu Monsch
-category:            Web
-build-type:          Simple
-cabal-version:       >=1.10
-extra-source-files:  README.md
+cabal-version: 1.12
 
+name: tracing
+version: 0.0.5.1
+synopsis: Distributed tracing
+description:
+  An OpenTracing-compliant, simple, and extensible distributed tracing library.
+
+category: Web
+homepage: https://github.com/mtth/tracing
+license: BSD3
+license-file: LICENSE
+author: Matthieu Monsch
+maintainer: mtth@apache.org
+copyright: 2020 Matthieu Monsch
+
+build-type: Simple
+extra-source-files: README.md
+
+source-repository head
+  type: git
+  location: https://github.com/mtth/tracing
+
 library
-  hs-source-dirs:      src
-  exposed-modules:     Control.Monad.Trace
-                     , Control.Monad.Trace.Class
-                     , Monitor.Tracing
-                     , Monitor.Tracing.Local
-                     , Monitor.Tracing.Zipkin
-  other-modules:       Control.Monad.Trace.Internal
-  -- unliftio-core bound for https://github.com/fpco/unliftio/issues/55
-  build-depends:       aeson >= 1.4
-                     , base >= 4.8 && < 5
-                     , base16-bytestring >= 0.1
-                     , bytestring >= 0.10
-                     , case-insensitive >= 1.2
-                     , containers >= 0.6
-                     , http-client >= 0.5
-                     , mtl >= 2.2
-                     , network >= 2.8
-                     , random >= 1.1
-                     , stm >= 2.5
-                     , text >= 1.2
-                     , time >= 1.8
-                     , transformers >= 0.5
-                     , unliftio >= 0.2
-                     , unliftio-core < 0.2
-  default-language:    Haskell2010
-  ghc-options:         -Wall
+  hs-source-dirs: src
+  exposed-modules:
+      Control.Monad.Trace
+    , Control.Monad.Trace.Class
+    , Monitor.Tracing
+    , Monitor.Tracing.Local
+    , Monitor.Tracing.Zipkin
+  other-modules:
+      Control.Monad.Trace.Internal
+  build-depends:
+      aeson >= 1.4
+    , base >= 4.9 && < 5
+    , base16-bytestring >= 0.1
+    , bytestring >= 0.10
+    , case-insensitive >= 1.2
+    , containers >= 0.6
+    , http-client >= 0.5
+    , mtl >= 2.2
+    , network >= 2.8
+    , random >= 1.1
+    , stm >= 2.5
+    , text >= 1.2
+    , time >= 1.8
+    , transformers >= 0.5
+    , unliftio >= 0.2
+  ghc-options: -Wall
+  default-language: Haskell2010
 
 test-suite tracing-test
-  type:                exitcode-stdio-1.0
-  main-is:             Spec.hs
-  hs-source-dirs:      test
-  ghc-options:         -threaded -rtsopts -with-rtsopts=-N
-  build-depends:       base >=4.8 && <5
-                     , containers >= 0.6
-                     , hspec >=2.6
-                     , mtl >= 2.2
-                     , stm >= 2.5
-                     , text >= 1.2
-                     , tracing
-                     , unliftio >= 0.2
-  default-language:    Haskell2010
+  type: exitcode-stdio-1.0
+  main-is: Spec.hs
+  hs-source-dirs: test
+  build-depends:
+      base
+    , containers
+    , hspec >=2.6
+    , mtl
+    , stm
+    , text
+    , tracing
+    , unliftio
+  ghc-options: -threaded -rtsopts -with-rtsopts=-N
+  default-language: Haskell2010
