diff --git a/ftp-client-conduit.cabal b/ftp-client-conduit.cabal
--- a/ftp-client-conduit.cabal
+++ b/ftp-client-conduit.cabal
@@ -1,5 +1,5 @@
 name: ftp-client-conduit
-version: 0.3.0.0
+version: 0.4.0.0
 cabal-version: >=1.10
 build-type: Simple
 license: PublicDomain
@@ -23,11 +23,12 @@
         Network.FTP.Client.Conduit
     build-depends:
         base >=4.7 && <5,
-        ftp-client ==0.3.*,
+        ftp-client ==0.4.*,
         conduit >=1.1 && <1.3,
         bytestring >=0.10.8.1 && <0.11,
         resourcet ==1.1.*,
-        connection >=0.2.6 && <0.3
+        connection >=0.2.7 && <0.3,
+        exceptions >=0.8.3 && <0.9
     default-language: Haskell2010
     default-extensions: RankNTypes OverloadedStrings
     hs-source-dirs: src
@@ -36,7 +37,7 @@
     type: exitcode-stdio-1.0
     main-is: Spec.hs
     build-depends:
-        base >=4.9.0.0 && <4.10,
+        base >=4.9.1.0 && <4.10,
         ftp-clientconduit -any
     default-language: Haskell2010
     hs-source-dirs: test
diff --git a/src/Network/FTP/Client/Conduit.hs b/src/Network/FTP/Client/Conduit.hs
--- a/src/Network/FTP/Client/Conduit.hs
+++ b/src/Network/FTP/Client/Conduit.hs
@@ -39,6 +39,7 @@
 import Data.Monoid ((<>))
 import System.IO.Error
 import Network.Connection
+import qualified Control.Monad.Catch as M
 
 debugging :: Bool
 debugging = False
@@ -53,8 +54,8 @@
 getAllLineRespC h = loop
     where
         loop = do
-            line <- liftIO $ FTP.getLineResp h
-                `catchIOError` (\_ -> return "")
+            line <- liftIO
+                $ FTP.getLineResp h `M.catchIOError` const (return "")
             if B.null line
                 then return ()
                 else do
@@ -94,7 +95,7 @@
 sourceDataCommand ch pa cmds f = do
     x <- bracketP
         (createSendDataCommand ch pa cmds)
-        hClose
+        (liftIO . hClose)
         (f . sIOHandleImpl)
     resp <- liftIO $ getMultiLineResp ch
     debugPrint $ "Recieved: " <> (show resp)
@@ -110,7 +111,7 @@
 sourceTLSDataCommand ch pa cmds f = do
     x <- bracketP
         (createTLSSendDataCommand ch pa cmds)
-        connectionClose
+        (liftIO . connectionClose)
         (f . tlsHandleImpl)
     resp <- liftIO $ getMultiLineResp ch
     debugPrint $ "Recieved: " <> (show resp)
@@ -121,7 +122,7 @@
     where
         loop = do
             bs <- liftIO $ FTP.recv h defaultChunkSize
-                `catchIOError` (\_ -> return "")
+                `M.catchIOError` const (return "")
             if B.null bs
                 then return ()
                 else do
@@ -139,19 +140,27 @@
                     liftIO $ FTP.send h bs
                     loop
 
-sendType :: MonadResource m => RTypeCode -> FTP.Handle -> Consumer ByteString m ()
+sendType
+    :: MonadResource m
+    => RTypeCode
+    -> FTP.Handle
+    -> Consumer ByteString m ()
 sendType TA h = sendAllLineC h
 sendType TI h = sinkHandle h
 
 nlst :: MonadResource m => FTP.Handle -> [String] -> Producer m ByteString
-nlst ch args = sourceDataCommandSecurity ch Passive [RType TA, Nlst args] getAllLineRespC
+nlst ch args =
+    sourceDataCommandSecurity ch Passive [RType TA, Nlst args] getAllLineRespC
 
 retr :: MonadResource m => FTP.Handle -> String -> Producer m ByteString
-retr ch path = sourceDataCommandSecurity ch Passive [RType TI, Retr path] sourceHandle
+retr ch path =
+    sourceDataCommandSecurity ch Passive [RType TI, Retr path] sourceHandle
 
 list :: MonadResource m => FTP.Handle -> [String] -> Producer m ByteString
-list ch args = sourceDataCommandSecurity ch Passive [RType TA, List args] getAllLineRespC
+list ch args =
+    sourceDataCommandSecurity ch Passive [RType TA, List args] getAllLineRespC
 
 stor :: MonadResource m => FTP.Handle -> String -> RTypeCode -> Consumer ByteString m ()
 stor ch loc rtype =
-    sourceDataCommandSecurity ch Passive [RType rtype, Stor loc] $ sendType rtype
+    sourceDataCommandSecurity ch Passive [RType rtype, Stor loc]
+        $ sendType rtype
