diff --git a/bioinformatics-toolkit.cabal b/bioinformatics-toolkit.cabal
--- a/bioinformatics-toolkit.cabal
+++ b/bioinformatics-toolkit.cabal
@@ -1,5 +1,5 @@
 name:                bioinformatics-toolkit
-version:             0.4.0
+version:             0.4.1
 synopsis:            A collection of bioinformatics tools
 description:         A collection of bioinformatics tools
 license:             MIT
@@ -58,12 +58,12 @@
     , bytestring-lexing >=0.5
     , case-insensitive
     , clustering
-    , conduit-combinators
+    , conduit >=1.3.0
     , containers >=0.5
     , data-ordlist
     , data-default-class
     , double-conversion
-    , HsHTSLib
+    , HsHTSLib >=1.3.2.3
     , http-conduit >=2.1.8
     , hexpat
     , IntervalMap >=0.5.0.0
diff --git a/src/Bio/ChIPSeq.hs b/src/Bio/ChIPSeq.hs
--- a/src/Bio/ChIPSeq.hs
+++ b/src/Bio/ChIPSeq.hs
@@ -241,7 +241,7 @@
             -> Int   -- ^ radius
             -> Int   -- ^ cutoff
             -> Source m BED
-peakCluster peaks r th = mergeBedWith mergeFn peaks' $= filterC g
+peakCluster peaks r th = mergeBedWith mergeFn peaks' .| filterC g
   where
     peaks' = map f peaks
     f b = let chr = chrom b
diff --git a/src/Bio/Data/Bam.hs b/src/Bio/Data/Bam.hs
--- a/src/Bio/Data/Bam.hs
+++ b/src/Bio/Data/Bam.hs
@@ -2,7 +2,7 @@
 module Bio.Data.Bam
     ( Bam
     , HeaderState
-    , runBam
+    , withBamFile
     , readBam
     , writeBam
     , bamToBed
@@ -13,11 +13,11 @@
 import           Bio.HTS
 import           Bio.HTS.Types             (Bam, FileHeader (..))
 import           Conduit
-import           Control.Monad.State (get, lift)
+import           Control.Monad.Reader (ask, lift)
 
 -- | Convert bam record to bed record. Unmapped reads will be discarded.
 bamToBed :: Conduit Bam HeaderState BED
-bamToBed = mapMC bamToBed1 =$= concatC
+bamToBed = mapMC bamToBed1 .| concatC
 {-# INLINE bamToBed #-}
 
 -- | Convert pairedend bam file to bed. the bam file must be sorted by names,
@@ -29,9 +29,9 @@
         Nothing -> return ()
         Just b' -> do
             leftover b'
-            sortOrd <- getSortOrder <$> lift get
+            sortOrd <- getSortOrder <$> lift ask
             case sortOrd of
-                Queryname -> loopBedPE =$= concatC
+                Queryname -> loopBedPE .| concatC
                 _ -> error "Bam file must be sorted by NAME."
   where
     loopBedPE :: Conduit Bam HeaderState (Maybe (BED, BED))
@@ -54,7 +54,7 @@
 
 bamToBed1 :: Bam -> HeaderState (Maybe BED)
 bamToBed1 bam = do
-    BamHeader hdr <- lift get
+    BamHeader hdr <- lift ask
     return $ (\chr -> BED chr start end nm sc strand) <$> getChr hdr bam
   where
     start = fromIntegral $ position bam
diff --git a/src/Bio/Data/Bed.hs b/src/Bio/Data/Bed.hs
--- a/src/Bio/Data/Bed.hs
+++ b/src/Bio/Data/Bed.hs
@@ -498,7 +498,7 @@
 
 -- | Non-streaming version.
 hReadBed' :: (BEDLike b, MonadIO m) => Handle -> m [b]
-hReadBed' h = hReadBed h $$ sinkList
+hReadBed' h = runConduit $ hReadBed h .| sinkList
 {-# INLINE hReadBed' #-}
 
 -- | Read records from a bed file in a streaming fashion.
@@ -510,7 +510,7 @@
 
 -- | Non-streaming version.
 readBed' :: (BEDLike b, MonadIO m) => FilePath -> m [b]
-readBed' fl = readBed fl $$ sinkList
+readBed' fl = runConduit $ readBed fl .| sinkList
 {-# INLINE readBed' #-}
 
 hWriteBed :: (BEDLike b, MonadIO m) => Handle -> Sink b m ()
@@ -522,7 +522,7 @@
 {-# INLINE hWriteBed #-}
 
 hWriteBed' :: (BEDLike b, MonadIO m) => Handle -> [b] -> m ()
-hWriteBed' handle beds = yieldMany beds $$ hWriteBed handle
+hWriteBed' handle beds = runConduit $ yieldMany beds .| hWriteBed handle
 {-# INLINE hWriteBed' #-}
 
 writeBed :: (BEDLike b, MonadIO m) => FilePath -> Sink b m ()
@@ -547,7 +547,7 @@
 {-# INLINE fetchSeq #-}
 
 fetchSeq' :: (BioSeq DNA a, MonadIO m) => Genome -> [BED] -> m [Either String (DNA a)]
-fetchSeq' g beds = yieldMany beds $= fetchSeq g $$ sinkList
+fetchSeq' g beds = runConduit $ yieldMany beds .| fetchSeq g .| sinkList
 {-# INLINE fetchSeq' #-}
 
 -- | Identify motif binding sites
diff --git a/tests/Tests/Bam.hs b/tests/Tests/Bam.hs
--- a/tests/Tests/Bam.hs
+++ b/tests/Tests/Bam.hs
@@ -24,21 +24,23 @@
 bamIOTest = do
     goldenVsFile "BAM Read/Write Test" input output io
   where
-    io = runBam $ readBam input $$ writeBam output
+    io = withBamFile input $ \h -> runConduit $ readBam h .| writeBam output
     input = "tests/data/example.bam"
     output = "tests/data/example_copy.bam"
 
 bamToBedTest :: Assertion
 bamToBedTest = do
     bed <- readBed' "tests/data/example.bed"
-    bed' <- runBam $ readBam "tests/data/example.bam" =$= bamToBed $$ sinkList
+    bed' <- withBamFile "tests/data/example.bam" $ \h ->
+        runConduit $ readBam h .| bamToBed .| sinkList
     (bed == bed') @? "bamToBedTest"
 
 sortedBamToBedPETest :: Assertion
 sortedBamToBedPETest = do
     bedpe <- readBedPE "tests/data/pairedend.bedpe"
-    bedpe' <- runBam $ readBam "tests/data/pairedend.bam" =$= sortedBamToBedPE =$=
-        mapC (\(x,y) -> (convert x, convert y)) $$ sinkList
+    bedpe' <- withBamFile "tests/data/pairedend.bam" $ \h -> runConduit $
+        readBam h .| sortedBamToBedPE .|
+        mapC (\(x,y) -> (convert x, convert y)) .| sinkList
     forM_ (zip bedpe bedpe') $ \(b1, b2) -> (b1 == b2 || b1 == swap b2) @? show (b1,b2)
   where
     readBedPE fl = do
