diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+Version 0.0.8.0 2018-03-12 by luispedro
+	* Update for conduit 1.3 (issue #6)
+
 Version 0.0.7.3 2018-03-12 by luispedro
 	* Add xz support (patches by Renato Alves)
 	* Add bzip2 support on Windows (patches by Renato Alves)
diff --git a/Data/Conduit/Algorithms.hs b/Data/Conduit/Algorithms.hs
--- a/Data/Conduit/Algorithms.hs
+++ b/Data/Conduit/Algorithms.hs
@@ -1,6 +1,6 @@
 {-|
 Module      : Data.Conduit.Algorithms
-Copyright   : 2013-2017 Luis Pedro Coelho
+Copyright   : 2013-2018 Luis Pedro Coelho
 License     : MIT
 Maintainer  : luis@luispedro.org
 
@@ -80,10 +80,10 @@
 mergeC :: (Ord a, Monad m) => [C.Source m a] -> C.Source m a
 mergeC [a] = a
 mergeC [a,b] = mergeC2 a b
-mergeC cs = CI.ConduitM $ \rest -> let
+mergeC cs = CI.ConduitT $ \rest -> let
         go [] = rest ()
-        go allc@(CI.HaveOutput c_next _ v:larger) =
-            CI.HaveOutput (norm1 c_next >>= go . insert1 larger) (finalizeAll allc) v
+        go (CI.HaveOutput c_next v:larger) =
+            CI.HaveOutput (norm1 c_next >>= go . insert1 larger)  v
         go _ = error "This situation should have been impossible (mergeC/go)"
         insert1 larger CI.Done{} = larger
         insert1 larger c = insertBy compareHO c larger
@@ -95,13 +95,10 @@
         norm1 (CI.Leftover next ()) = norm1 next
         isHO CI.HaveOutput{} = True
         isHO _ = False
-        compareHO (CI.HaveOutput _ _ a) (CI.HaveOutput _ _ b) = compare a b
+        compareHO (CI.HaveOutput _ a) (CI.HaveOutput _ b) = compare a b
         compareHO _ _ = error "This situation should have been impossible (mergeC/compareHO)"
-        finalizeAll [] = return ()
-        finalizeAll (CI.HaveOutput _ f _ : larger) = f >> finalizeAll larger
-        finalizeAll (_ :larger) = finalizeAll larger
     in do
-        let st = map (($ CI.Done) . CI.unConduitM) cs
+        let st = map (($ CI.Done) . CI.unConduitT) cs
         st' <- mapM norm1 st
         go . sortBy compareHO . filter isHO $ st'
 
@@ -110,12 +107,12 @@
 --
 -- See 'mergeC'
 mergeC2 :: (Ord a, Monad m) => C.Source m a -> C.Source m a -> C.Source m a
-mergeC2 (CI.ConduitM s1) (CI.ConduitM s2) = CI.ConduitM $ \rest -> let
-        go right@(CI.HaveOutput s1' f1 v1) left@(CI.HaveOutput s2' f2 v2)
-            | v1 <= v2 = CI.HaveOutput (go s1' left) (f1 >> f2) v1
-            | otherwise = CI.HaveOutput (go right s2') (f1 >> f2) v2
-        go right@CI.Done{} (CI.HaveOutput s f v) = CI.HaveOutput (go right s) f v
-        go (CI.HaveOutput s f v) left@CI.Done{}  = CI.HaveOutput (go s left)  f v
+mergeC2 (CI.ConduitT s1) (CI.ConduitT s2) = CI.ConduitT $ \rest -> let
+        go right@(CI.HaveOutput s1' v1) left@(CI.HaveOutput s2' v2)
+            | v1 <= v2 = CI.HaveOutput (go s1' left) v1
+            | otherwise = CI.HaveOutput (go right s2') v2
+        go right@CI.Done{} (CI.HaveOutput s v) = CI.HaveOutput (go right s) v
+        go (CI.HaveOutput s v) left@CI.Done{}  = CI.HaveOutput (go s left)  v
         go CI.Done{} CI.Done{} = rest ()
         go (CI.PipeM p) left = do
             next <- lift p
diff --git a/Data/Conduit/Algorithms/Async.hs b/Data/Conduit/Algorithms/Async.hs
--- a/Data/Conduit/Algorithms/Async.hs
+++ b/Data/Conduit/Algorithms/Async.hs
@@ -1,6 +1,6 @@
 {-|
 Module      : Data.Conduit.Algorithms.Async
-Copyright   : 2013-2017 Luis Pedro Coelho
+Copyright   : 2013-2018 Luis Pedro Coelho
 License     : MIT
 Maintainer  : luis@luispedro.org
 
@@ -50,10 +50,11 @@
 import qualified Data.Sequence as Seq
 import           Data.Sequence ((|>), ViewL(..))
 import           Data.Foldable (toList)
-import           Control.Monad (forM_)
 import           Control.Monad.IO.Class (MonadIO, liftIO)
 import           Control.Monad.Error.Class (MonadError(..))
-import           Control.Monad.Trans.Resource (MonadResource, MonadBaseControl)
+import           Control.Monad.IO.Unlift (MonadUnliftIO)
+import           Control.Monad.Trans.Resource (MonadResource)
+import           Control.Monad.Catch (MonadThrow)
 import           Control.Exception (evaluate, displayException)
 import           Control.DeepSeq (NFData, force)
 import           System.IO.Error (mkIOError, userErrorType)
@@ -121,7 +122,7 @@
         yAll :: Seq.Seq (A.Async b) -> C.Conduit a m b
         yAll q = case Seq.viewl q of
             EmptyL -> return ()
-            v :< rest -> (liftIO (A.wait v) >>= yieldOrCleanup rest) >> yAll rest
+            v :< rest -> (liftIO (A.wait v) >>= C.yield) >> yAll rest
 
         loop :: Seq.Seq (A.Async b) -> C.Conduit a m b
         loop q = C.await >>= \case
@@ -129,11 +130,8 @@
                 Just v -> do
                     v' <- sched v
                     (r, q') <- liftIO $ retrieveResult q
-                    yieldOrCleanup q' r
+                    C.yield r
                     loop (q' |> v')
-        cleanup :: Seq.Seq (A.Async b) -> m ()
-        cleanup q = liftIO $ forM_ q A.cancel
-        yieldOrCleanup q = flip C.yieldOr (cleanup q)
 
         retrieveResult :: Seq.Seq (A.Async b) -> IO (b, Seq.Seq (A.Async b))
         retrieveResult q
@@ -188,7 +186,7 @@
 -- writes the results to `h`.
 --
 -- See also 'asyncGzipToFile'
-asyncGzipTo :: forall m. (MonadIO m, MonadBaseControl IO m) => Handle -> C.Sink B.ByteString m ()
+asyncGzipTo :: forall m. (MonadIO m, MonadUnliftIO m) => Handle -> C.Sink B.ByteString m ()
 asyncGzipTo h = do
     let drain q = liftIO . C.runConduit $
                 CA.sourceTBQueue q
@@ -203,7 +201,7 @@
 -- performed in a separate thread.
 --
 -- See also 'asyncGzipTo'
-asyncGzipToFile :: forall m. (MonadResource m, MonadBaseControl IO m) => FilePath -> C.Sink B.ByteString m ()
+asyncGzipToFile :: forall m. (MonadResource m, MonadUnliftIO m) => FilePath -> C.Sink B.ByteString m ()
 asyncGzipToFile fname = C.bracketP
     (openFile fname WriteMode)
     hClose
@@ -214,7 +212,7 @@
 -- will probably be left at an undefined position in the file.
 --
 -- See also 'asyncGzipFromFile'
-asyncGzipFrom :: forall m. (MonadIO m, MonadResource m, MonadBaseControl IO m) => Handle -> C.Source m B.ByteString
+asyncGzipFrom :: forall m. (MonadIO m, MonadResource m, MonadUnliftIO m) => Handle -> C.Source m B.ByteString
 asyncGzipFrom h = do
     let prod q = liftIO $ do
                     C.runConduit $
@@ -231,7 +229,7 @@
 -- separate thread.
 --
 -- See also 'asyncGzipFrom'
-asyncGzipFromFile :: forall m. (MonadResource m, MonadBaseControl IO m) => FilePath -> C.Source m B.ByteString
+asyncGzipFromFile :: forall m. (MonadResource m, MonadUnliftIO m) => FilePath -> C.Source m B.ByteString
 asyncGzipFromFile fname = C.bracketP
     (openFile fname ReadMode)
     hClose
@@ -241,7 +239,7 @@
 -- writes the results to `h`.
 --
 -- See also 'asyncGzipToFile'
-asyncBzip2To :: forall m. (MonadIO m, MonadResource m, MonadBaseControl IO m) => Handle -> C.Sink B.ByteString m ()
+asyncBzip2To :: forall m. (MonadIO m, MonadResource m, MonadUnliftIO m) => Handle -> C.Sink B.ByteString m ()
 asyncBzip2To h = do
     let drain q = C.runConduit $
                 CA.sourceTBQueue q
@@ -256,7 +254,7 @@
 -- performed in a separate thread.
 --
 -- See also 'asyncGzipTo'
-asyncBzip2ToFile :: forall m. (MonadResource m, MonadBaseControl IO m) => FilePath -> C.Sink B.ByteString m ()
+asyncBzip2ToFile :: forall m. (MonadResource m, MonadUnliftIO m) => FilePath -> C.Sink B.ByteString m ()
 asyncBzip2ToFile fname = C.bracketP
     (openFile fname WriteMode)
     hClose
@@ -267,7 +265,7 @@
 -- will probably be left at an undefined position in the file.
 --
 -- See also 'asyncGzipFromFile'
-asyncBzip2From :: forall m. (MonadIO m, MonadResource m, MonadBaseControl IO m) => Handle -> C.Source m B.ByteString
+asyncBzip2From :: forall m. (MonadIO m, MonadResource m, MonadUnliftIO m) => Handle -> C.Source m B.ByteString
 asyncBzip2From h = do
     let prod q = do
                     C.runConduit $
@@ -282,7 +280,7 @@
 -- separate thread.
 --
 -- See also 'asyncGzipFrom'
-asyncBzip2FromFile :: forall m. (MonadResource m, MonadBaseControl IO m) => FilePath -> C.Source m B.ByteString
+asyncBzip2FromFile :: forall m. (MonadResource m, MonadUnliftIO m) => FilePath -> C.Source m B.ByteString
 asyncBzip2FromFile fname = C.bracketP
     (openFile fname ReadMode)
     hClose
@@ -292,7 +290,7 @@
 -- writes the results to `h`.
 --
 -- See also 'asyncGzipToFile'
-asyncXzTo :: forall m. (MonadIO m, MonadResource m, MonadBaseControl IO m) => Handle -> C.Sink B.ByteString m ()
+asyncXzTo :: forall m. (MonadIO m, MonadResource m, MonadUnliftIO m) => Handle -> C.Sink B.ByteString m ()
 asyncXzTo h = do
     let drain q = C.runConduit $
                 CA.sourceTBQueue q
@@ -311,7 +309,7 @@
 -- performed in a separate thread.
 --
 -- See also 'asyncGzipTo'
-asyncXzToFile :: forall m. (MonadResource m, MonadBaseControl IO m) => FilePath -> C.Sink B.ByteString m ()
+asyncXzToFile :: forall m. (MonadResource m, MonadUnliftIO m) => FilePath -> C.Sink B.ByteString m ()
 asyncXzToFile fname = C.bracketP
     (openFile fname WriteMode)
     hClose
@@ -322,7 +320,7 @@
 -- will probably be left at an undefined position in the file.
 --
 -- See also 'asyncGzipFromFile'
-asyncXzFrom :: forall m. (MonadIO m, MonadResource m, MonadBaseControl IO m) => Handle -> C.Source m B.ByteString
+asyncXzFrom :: forall m. (MonadIO m, MonadResource m, MonadUnliftIO m, MonadThrow m) => Handle -> C.Source m B.ByteString
 asyncXzFrom h = do
     let oneGBmembuffer = Just $ 1024 ^ (3 :: Integer)
         prod q = do
@@ -343,7 +341,7 @@
 -- separate thread.
 --
 -- See also 'asyncXzFrom'
-asyncXzFromFile :: forall m. (MonadResource m, MonadBaseControl IO m) => FilePath -> C.Source m B.ByteString
+asyncXzFromFile :: forall m. (MonadResource m, MonadUnliftIO m, MonadThrow m) => FilePath -> C.Source m B.ByteString
 asyncXzFromFile fname = C.bracketP
     (openFile fname ReadMode)
     hClose
@@ -355,14 +353,14 @@
 -- On Windows, attempting to read from a bzip2 file, results in 'error'.
 --
 -- For the case of gzip, 'asyncGzipFromFile' is used.
-conduitPossiblyCompressedFile :: (MonadBaseControl IO m, MonadResource m) => FilePath -> C.Source m B.ByteString
+conduitPossiblyCompressedFile :: (MonadUnliftIO m, MonadResource m, MonadThrow m) => FilePath -> C.Source m B.ByteString
 conduitPossiblyCompressedFile fname
     | ".gz" `isSuffixOf` fname = asyncGzipFromFile fname
     | ".xz" `isSuffixOf` fname = asyncXzFromFile fname
     | ".bz2" `isSuffixOf` fname = asyncBzip2FromFile fname
     | otherwise = C.sourceFile fname
 
-conduitPossiblyCompressedToFile :: (MonadBaseControl IO m, MonadResource m) => FilePath -> C.Sink B.ByteString m ()
+conduitPossiblyCompressedToFile :: (MonadUnliftIO m, MonadResource m) => FilePath -> C.Sink B.ByteString m ()
 conduitPossiblyCompressedToFile fname
     | ".gz" `isSuffixOf` fname = asyncGzipToFile fname
     | ".xz" `isSuffixOf` fname = asyncXzToFile fname
diff --git a/conduit-algorithms.cabal b/conduit-algorithms.cabal
--- a/conduit-algorithms.cabal
+++ b/conduit-algorithms.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 3a46059f9e3513ce4b3dce9af08750249e1263b0cfac24b7294a5d5269f6344e
+-- hash: e408a4353cbeef37b0ef19abf3d1c40d0939cc1dc51ce2f917d36e620eb29a89
 
 name:           conduit-algorithms
-version:        0.0.7.3
+version:        0.0.8.0
 synopsis:       Conduit-based algorithms
 description:    Algorithms on Conduits, including higher level asynchronous processing and some other utilities.
 category:       Conduit
@@ -34,18 +34,20 @@
     , base >4.8 && <5
     , bytestring
     , bzlib-conduit
-    , conduit >=1.0.11
+    , conduit >=1.3
     , conduit-combinators >=1.1.2
     , conduit-extra
     , containers
     , deepseq
+    , exceptions
     , monad-control
     , mtl
     , resourcet
     , stm
-    , stm-conduit >=2.7
+    , stm-conduit >=4.0
     , streaming-commons
     , transformers
+    , unliftio-core
     , vector
   if os(windows)
     cpp-options: -DWINDOWS
@@ -73,23 +75,25 @@
     , base >4.8 && <5
     , bytestring
     , bzlib-conduit
-    , conduit >=1.0.11
+    , conduit >=1.3
     , conduit-algorithms
     , conduit-combinators >=1.1.2
     , conduit-extra
     , containers
     , deepseq
     , directory
+    , exceptions
     , monad-control
     , mtl
     , resourcet
     , stm
-    , stm-conduit >=2.7
+    , stm-conduit >=4.0
     , streaming-commons
     , test-framework
     , test-framework-hunit
     , test-framework-th
     , transformers
+    , unliftio-core
     , vector
   if os(windows)
     cpp-options: -DWINDOWS
diff --git a/tests/Tests.hs b/tests/Tests.hs
--- a/tests/Tests.hs
+++ b/tests/Tests.hs
@@ -22,7 +22,7 @@
 import           Control.Exception (catch, ErrorCall)
 import           Control.Monad (forM_)
 import           Control.Monad.Trans.Resource.Internal (ResourceT)
-import           Control.Monad.Trans.Control (MonadBaseControl)
+import           Control.Monad.IO.Unlift (MonadUnliftIO)
 
 import qualified Data.Conduit.Algorithms as CAlg
 import qualified Data.Conduit.Algorithms.Storable as CAlg
@@ -49,7 +49,7 @@
 extract :: C.ConduitM () b FID.Identity () -> [b]
 extract c = C.runConduitPure (c .| CC.sinkList)
 
-extractIO :: MonadBaseControl IO m => C.ConduitM () b (ResourceT m) () -> m [b]
+extractIO :: MonadUnliftIO m => C.ConduitM () b (ResourceT m) () -> m [b]
 extractIO c = C.runConduitRes (c .| CC.sinkList)
 
 shouldProduce :: (Show b, Eq b) => [b] -> C.ConduitM () b FID.Identity () -> Assertion
