diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 0.3.0
+
+* Updated for Streamly 0.8.0.
+
 ## 0.2.1
 
 * Allow QuickCheck <2.15 and tasty <1.5.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 # streamly-lmdb
 
 [![Hackage](https://img.shields.io/hackage/v/streamly-lmdb.svg?style=flat)](https://hackage.haskell.org/package/streamly-lmdb)
-[![Build Status](https://travis-ci.org/shlok/streamly-lmdb.svg?branch=master)](https://travis-ci.org/shlok/streamly-lmdb)
+![CI](https://github.com/shlok/streamly-lmdb/workflows/CI/badge.svg?branch=master)
 
 Stream data to or from LMDB databases using the Haskell [streamly](https://hackage.haskell.org/package/streamly) library.
 
diff --git a/src/Streamly/External/LMDB.hs b/src/Streamly/External/LMDB.hs
--- a/src/Streamly/External/LMDB.hs
+++ b/src/Streamly/External/LMDB.hs
@@ -52,11 +52,11 @@
 import Foreign.C.String (CStringLen)
 import Foreign.Marshal.Utils (with)
 import Foreign.Storable (poke)
-import Streamly.Internal.Data.Fold (Fold (Fold))
-import Streamly.Internal.Data.Stream.StreamD (newFinalizedIORef, runIORefFinalizer)
+import Streamly.Internal.Data.Fold (Fold (Fold), Step (Partial))
+import Streamly.Internal.Data.IOFinalizer (newIOFinalizer, runIOFinalizer)
 import Streamly.Internal.Data.Stream.StreamD.Type (Step (Stop, Yield))
 import Streamly.Internal.Data.Unfold (supply)
-import Streamly.Internal.Data.Unfold.Types (Unfold (Unfold))
+import Streamly.Internal.Data.Unfold.Type (Unfold (Unfold))
 
 import Streamly.External.LMDB.Internal
 import Streamly.External.LMDB.Internal.Foreign
@@ -197,7 +197,7 @@
             (Forward, Just _) -> (mdb_set_range, mdb_next)
             (Backward, Nothing) -> (mdb_last, mdb_prev)
             (Backward, Just _) ->  (mdb_set_range, mdb_prev)
-    in flip supply firstOp $ Unfold
+    in supply firstOp $ Unfold
         (\(op, pcurs, pk, pv, ref) -> do
             rc <- liftIO $
                 if op == mdb_set_range && subsequentOp == mdb_prev then do
@@ -221,7 +221,7 @@
 
             found <- liftIO $
                 if rc /= 0 && rc /= mdb_notfound then do
-                    runIORefFinalizer ref
+                    runIOFinalizer ref
                     throwLMDBErrNum "mdb_cursor_get" rc
                 else
                     return $ rc /= mdb_notfound
@@ -231,7 +231,7 @@
                 !v <- liftIO $ (\x -> vmap (mv_data x, fromIntegral $ mv_size x)) =<< peek pv
                 return $ Yield (k, v) (subsequentOp, pcurs, pk, pv, ref)
             else do
-                runIORefFinalizer ref
+                runIOFinalizer ref
                 return Stop)
         (\op -> do
             (pcurs, pk, pv, ref) <- liftIO $ mask_ $ do
@@ -245,7 +245,7 @@
                     Just k -> unsafeUseAsCStringLen k $ \(kp, kl) ->
                         poke pk (MDB_val (fromIntegral kl) kp)
 
-                ref <- liftIO . newFinalizedIORef $ do
+                ref <- liftIO . newIOFinalizer $ do
                     free pv >> free pk
                     c_mdb_cursor_close pcurs
                     -- No need to commit this read-only transaction.
@@ -301,7 +301,7 @@
         currChunkSz' <- liftIO $
             if currChunkSz >= txnSize then do
                 let (_, ref) = fromJust mtxn
-                runIORefFinalizer ref
+                runIOFinalizer ref
                 return 0
             else
                 return currChunkSz
@@ -310,7 +310,7 @@
             if currChunkSz' == 0 then
                 liftIO $ mask_ $ do
                     ptxn <- mdb_txn_begin penv nullPtr 0
-                    ref <- newFinalizedIORef $ mdb_txn_commit ptxn
+                    ref <- newIOFinalizer $ mdb_txn_commit ptxn
                     return (ptxn, ref)
             else
                 return $ fromJust mtxn
@@ -331,13 +331,13 @@
                                             && vbs == v
                                 else
                                     return False
-                    unless ok $ runIORefFinalizer ref >> throw e)
-        return (threadId, iter', currChunkSz' + 1, Just (ptxn, ref)))
+                    unless ok $ runIOFinalizer ref >> throw e)
+        return $ Partial (threadId, iter', currChunkSz' + 1, Just (ptxn, ref)))
     (do
         isBound <- liftIO isCurrentThreadBound
         threadId <- liftIO myThreadId
         if isBound then
-            return (threadId, 0 :: Int, 0, Nothing)
+            return $ Partial (threadId, 0 :: Int, 0, Nothing)
         else
             throw $ ExceptionString "Error: writeLMDB should be executed on a bound thread")
     -- This final part is incompatible with scans.
@@ -347,4 +347,4 @@
             throw (ExceptionString "Error: writeLMDB veered off the original bound thread at the end")
         case mtxn of
             Nothing -> return ()
-            Just (_, ref) -> runIORefFinalizer ref)
+            Just (_, ref) -> runIOFinalizer ref)
diff --git a/streamly-lmdb.cabal b/streamly-lmdb.cabal
--- a/streamly-lmdb.cabal
+++ b/streamly-lmdb.cabal
@@ -3,11 +3,9 @@
 -- This file has been generated from package.yaml by hpack version 0.34.4.
 --
 -- see: https://github.com/sol/hpack
---
--- hash: d4cb0bcf729fd32460df2fbb52948a7cf9d1cff0094ec59b086b8950847e5491
 
 name:           streamly-lmdb
-version:        0.2.1
+version:        0.3.0
 synopsis:       Stream data to or from LMDB databases using the streamly library.
 description:    Please see the README on GitHub at <https://github.com/shlok/streamly-lmdb#readme>
 category:       Database, Streaming, Streamly
@@ -49,7 +47,7 @@
       async >=2.2.2 && <2.3
     , base >=4.7 && <5
     , bytestring >=0.10.10.0 && <0.11
-    , streamly >=0.7.2 && <0.8
+    , streamly ==0.8.*
   default-language: Haskell2010
 
 test-suite streamly-lmdb-test
@@ -69,7 +67,7 @@
     , base >=4.7 && <5
     , bytestring >=0.10.10.0 && <0.11
     , directory >=1.3.6.0 && <1.4
-    , streamly >=0.7.2 && <0.8
+    , streamly ==0.8.*
     , streamly-lmdb
     , tasty >=1.2.3 && <1.5
     , tasty-quickcheck >=0.10.1.1 && <0.11
