diff --git a/hikaru.cabal b/hikaru.cabal
index ff6d92ad6a8c6fb06367632402ddee1751319ca3..482b7a16f77fee7f55f4af31c414cdebfe022c04 100644
--- a/hikaru.cabal
+++ b/hikaru.cabal
@@ -85,6 +85,7 @@ common common
       , string-conversions >=0.4  && <0.5
       , text               >=1.2  && <1.3
       , time               >=1.9  && <1.12
+      , unliftio           >=0.2  && <0.3
       , wai                >=3.2  && <3.3
       , wai-extra          >=3.0  && <3.2
       , wai-websockets     >=3.0  && <3.1
diff --git a/lib/Hikaru/Action.hs b/lib/Hikaru/Action.hs
index c5e4b142160cae044ae9a4754c87d9fce0573668..977a658f1af0d915ca1b3102a742127ec1c78249 100644
--- a/lib/Hikaru/Action.hs
+++ b/lib/Hikaru/Action.hs
@@ -113,7 +113,7 @@ module Hikaru.Action
   , FilePath
   )
 where
-  import Relude
+  import Relude hiding (writeIORef, readIORef, modifyIORef', newIORef)
 
   import qualified Data.ByteString as BS
   import qualified Data.ByteString.Lazy as LBS
@@ -121,8 +121,8 @@ where
   import qualified Data.Text.Lazy as LT
   import qualified Network.Wai.Parse as Parse
 
-  import Control.Exception (throwIO, bracket_)
   import Control.Monad.Trans.Resource
+  import UnliftIO
   import Data.Aeson
   import Data.Binary.Builder
   import Data.Dynamic
@@ -177,7 +177,7 @@ where
   getActionField :: (MonadAction m) => (ActionEnv -> IORef a) -> m a
   getActionField field = do
     ref <- field <$> getActionEnv
-    liftIO $ readIORef ref
+    readIORef ref
 
 
   -- |
@@ -186,7 +186,7 @@ where
   setActionField :: (MonadAction m) => (ActionEnv -> IORef a) -> a -> m ()
   setActionField field value = do
     ref <- field <$> getActionEnv
-    liftIO $ writeIORef ref value
+    writeIORef ref value
 
 
   -- |
@@ -196,7 +196,7 @@ where
                     => (ActionEnv -> IORef a) -> (a -> a) -> m ()
   modifyActionField field fn = do
     ref <- field <$> getActionEnv
-    liftIO $ modifyIORef' ref fn
+    modifyIORef' ref fn
 
 
   -- |
@@ -1166,7 +1166,7 @@ where
   -- Same an IO exception in the form of ('RequestError', 'Text').
   --
   throwError :: (MonadAction m) => RequestError -> Text -> m a
-  throwError exn msg = liftIO $ throwIO (exn, msg)
+  throwError exn msg = throwIO (exn, msg)
 
 
   -- Localization ------------------------------------------------------------
diff --git a/lib/Hikaru/Config.hs b/lib/Hikaru/Config.hs
index e0a914c6001c7421c009332e56ca5da318e558bd..1529b790654f43c5ae87254cd13abb9547470812 100644
--- a/lib/Hikaru/Config.hs
+++ b/lib/Hikaru/Config.hs
@@ -36,15 +36,14 @@ module Hikaru.Config
   )
 where
   import Relude hiding (drop, lines, isPrefixOf, length, span)
-
-  import qualified Data.Map as Map
-
+  import UnliftIO.Environment
   import Crypto.Random.Entropy
   import Data.ByteArray.Encoding
   import Data.String.Conversions
   import Data.Text hiding (map)
   import Hikaru.Types
-  import System.Environment
+
+  import qualified Data.Map as Map
 
 
   -- |
@@ -57,7 +56,7 @@ where
   -- Read configuration from program environment.
   --
   configFromEnv :: (MonadIO m) => m Config
-  configFromEnv = Map.fromList <$> map conv <$> liftIO getEnvironment
+  configFromEnv = Map.fromList <$> map conv <$> getEnvironment
     where conv (k, v) = (cs k, cs v)