diff --git a/main/skylark-client.hs b/main/skylark-client.hs
--- a/main/skylark-client.hs
+++ b/main/skylark-client.hs
@@ -18,4 +18,4 @@
 main :: IO ()
 main = do
   args <- getRecord "Skylark Client"
-  runResourceT $ runSkylark (url args) (device args) (sourceHandle stdin) (sinkHandle stdout)
+  runSkylark (url args) (device args) (sourceHandle stdin) (sinkHandle stdout)
diff --git a/skylark-client.cabal b/skylark-client.cabal
--- a/skylark-client.cabal
+++ b/skylark-client.cabal
@@ -1,5 +1,5 @@
 name:                  skylark-client
-version:               0.1.1
+version:               0.1.2
 synopsis:              Skylark client.
 description:           Skylark network client.
 homepage:              https://github.com/githubuser/skylark-client#readme
@@ -22,7 +22,6 @@
                      , http-types
                      , lifted-async
                      , preamble
-                     , resourcet
                      , stm
                      , stm-conduit
 
diff --git a/src/Network/Skylark/Client.hs b/src/Network/Skylark/Client.hs
--- a/src/Network/Skylark/Client.hs
+++ b/src/Network/Skylark/Client.hs
@@ -8,7 +8,6 @@
 
 import Control.Concurrent.Async.Lifted
 import Control.Concurrent.STM
-import Control.Monad.Trans.Resource
 import Data.Conduit
 import Data.Conduit.TQueue
 import Network.HTTP.Conduit
@@ -16,7 +15,6 @@
 import Network.HTTP.Types.Header
 import Preamble
 
-
 {-# ANN module ("HLint: ignore Redundant flip"::String) #-}
 
 -- | Device-Uid Header
@@ -31,18 +29,20 @@
 
 -- | Download data from Skylark to sink.
 --
-download :: MonadResource m => ByteString -> Manager -> Request -> Sink ByteString m () -> m ()
-download device manager request sink = do
-  response <- flip http manager request
-    { method = methodGet
-    , requestHeaders =
-        [ (hAccept, sbpContentType)
-        , (hDevice, device)
-        , (hPragma, "proxy")
-        ]
-    }
-  responseBody response $$+- sink
+download :: MonadIO m => ByteString -> Manager -> Request -> TBQueue ByteString -> m ()
+download device manager request queue =
+  liftIO $ runResourceT $ do
+    response <- flip http manager request
+      { method = methodGet
+      , requestHeaders =
+          [ (hAccept, sbpContentType)
+          , (hDevice, device)
+          , (hPragma, "proxy")
+          ]
+      }
+    responseBody response $$+- sinkTBQueue queue
 
+
 -- | Upload data to Skylark from source.
 --
 upload :: MonadIO m => ByteString -> Manager -> Request -> TBQueue ByteString -> m ()
@@ -58,10 +58,12 @@
 
 -- | Run Skylark client.
 --
-runSkylark :: MonadMain m => String -> ByteString -> Source m ByteString -> Sink ByteString m () -> m ()
+runSkylark :: MonadControl m => String -> ByteString -> Source m ByteString -> Sink ByteString m () -> m ()
 runSkylark url device source sink = do
-  manager <- liftIO $ newManager tlsManagerSettings
-  request <- parseRequest url
-  queue   <- liftIO $ atomically $ newTBQueue 8192
-  void $ concurrently (download device manager request sink) $
-    concurrently (source $$ sinkTBQueue queue) (upload device manager request queue)
+  manager   <- liftIO $ newManager tlsManagerSettings
+  request   <- parseRequest url
+  upQueue   <- liftIO $ atomically $ newTBQueue 8192
+  downQueue <- liftIO $ atomically $ newTBQueue 8192
+  void $ concurrently
+    (concurrently (download device manager request downQueue) (sourceTBQueue downQueue $$ sink))
+    (concurrently (source $$ sinkTBQueue upQueue) (upload device manager request upQueue))
