diff --git a/library/StmContainers/Bimap.hs b/library/StmContainers/Bimap.hs
--- a/library/StmContainers/Bimap.hs
+++ b/library/StmContainers/Bimap.hs
@@ -14,7 +14,7 @@
   deleteLeft,
   deleteRight,
   reset,
-  unfoldM,
+  unfoldlM,
   listT,
 )
 where
@@ -160,10 +160,10 @@
 -- Stream associations actively.
 -- 
 -- Amongst other features this function provides an interface to folding.
-{-# INLINE unfoldM #-}
-unfoldM :: Bimap leftKey rightKey -> UnfoldM STM (leftKey, rightKey)
-unfoldM (Bimap leftMap rightMap) =
-  A.unfoldM leftMap
+{-# INLINE unfoldlM #-}
+unfoldlM :: Bimap leftKey rightKey -> UnfoldlM STM (leftKey, rightKey)
+unfoldlM (Bimap leftMap rightMap) =
+  A.unfoldlM leftMap
 
 -- |
 -- Stream the associations passively.
diff --git a/library/StmContainers/Map.hs b/library/StmContainers/Map.hs
--- a/library/StmContainers/Map.hs
+++ b/library/StmContainers/Map.hs
@@ -10,20 +10,21 @@
   insert,
   delete,
   reset,
-  unfoldM,
+  unfoldlM,
   listT,
 )
 where
 
 import StmContainers.Prelude hiding (insert, delete, lookup, alter, foldM, toList, empty, null)
-import qualified StmHamt.SizedHamt as A
+import qualified StmHamt.Hamt as A
 import qualified Focus as B
+import qualified DeferredFolds.UnfoldlM as C
 
 
 -- |
 -- Hash-table, based on STM-specialized Hash Array Mapped Trie.
 newtype Map key value =
-  Map (A.SizedHamt (Product2 key value))
+  Map (A.Hamt (Product2 key value))
 
 -- |
 -- Construct a new map.
@@ -53,8 +54,8 @@
 -- Get the number of elements.
 {-# INLINABLE size #-}
 size :: Map key value -> STM Int
-size (Map hamt) =
-  A.size hamt
+size =
+  C.foldlM' (\ x _ -> return (succ x)) 0 . unfoldlM
 
 -- |
 -- Focus on a value by the key.
@@ -83,7 +84,7 @@
 {-# INLINE insert #-}
 insert :: (Eq key, Hashable key) => value -> key -> Map key value -> STM ()
 insert value key (Map hamt) =
-  A.insert (\(Product2 key _) -> key) (Product2 key value) hamt
+  void (A.insert (\(Product2 key _) -> key) (Product2 key value) hamt)
 
 -- |
 -- Delete an item by a key.
@@ -103,10 +104,10 @@
 -- Stream the associations actively.
 -- 
 -- Amongst other features this function provides an interface to folding.
-{-# INLINABLE unfoldM #-}
-unfoldM :: Map key value -> UnfoldM STM (key, value)
-unfoldM (Map hamt) =
-  fmap (\ (Product2 k v) -> (k, v)) (A.unfoldM hamt)
+{-# INLINABLE unfoldlM #-}
+unfoldlM :: Map key value -> UnfoldlM STM (key, value)
+unfoldlM (Map hamt) =
+  fmap (\ (Product2 k v) -> (k, v)) (A.unfoldlM hamt)
 
 -- |
 -- Stream the associations passively.
diff --git a/library/StmContainers/Multimap.hs b/library/StmContainers/Multimap.hs
--- a/library/StmContainers/Multimap.hs
+++ b/library/StmContainers/Multimap.hs
@@ -11,7 +11,7 @@
   delete,
   deleteByKey,
   reset,
-  unfoldM,
+  unfoldlM,
   unfoldMKeys,
   unfoldMByKey,
   listT,
@@ -143,21 +143,21 @@
 -- Stream associations actively.
 --
 -- Amongst other features this function provides an interface to folding.
-unfoldM :: Multimap key value -> UnfoldM STM (key, value)
-unfoldM (Multimap m) =
-  A.unfoldM m >>= \(key, s) -> (key,) <$> B.unfoldM s
+unfoldlM :: Multimap key value -> UnfoldlM STM (key, value)
+unfoldlM (Multimap m) =
+  A.unfoldlM m >>= \(key, s) -> (key,) <$> B.unfoldlM s
 
 -- |
 -- Stream keys actively.
-unfoldMKeys :: Multimap key value -> UnfoldM STM key
+unfoldMKeys :: Multimap key value -> UnfoldlM STM key
 unfoldMKeys (Multimap m) =
-  fmap fst (A.unfoldM m)
+  fmap fst (A.unfoldlM m)
 
 -- |
 -- Stream values by a key actively.
-unfoldMByKey :: (Eq key, Hashable key) => key -> Multimap key value -> UnfoldM STM value
+unfoldMByKey :: (Eq key, Hashable key) => key -> Multimap key value -> UnfoldlM STM value
 unfoldMByKey key (Multimap m) =
-  lift (A.lookup key m) >>= maybe mempty B.unfoldM
+  lift (A.lookup key m) >>= maybe mempty B.unfoldlM
 
 -- |
 -- Stream associations passively.
diff --git a/library/StmContainers/Prelude.hs b/library/StmContainers/Prelude.hs
--- a/library/StmContainers/Prelude.hs
+++ b/library/StmContainers/Prelude.hs
@@ -84,8 +84,8 @@
 
 -- deferred-folds
 -------------------------
-import DeferredFolds.Unfold as Exports (Unfold(..))
-import DeferredFolds.UnfoldM as Exports (UnfoldM(..))
+import DeferredFolds.Unfoldl as Exports (Unfoldl(..))
+import DeferredFolds.UnfoldlM as Exports (UnfoldlM(..))
 
 -- list-t
 -------------------------
diff --git a/library/StmContainers/Set.hs b/library/StmContainers/Set.hs
--- a/library/StmContainers/Set.hs
+++ b/library/StmContainers/Set.hs
@@ -10,7 +10,7 @@
   insert,
   delete,
   reset,
-  unfoldM,
+  unfoldlM,
   listT,
 )
 where
@@ -105,10 +105,10 @@
 -- Stream the elements actively.
 -- 
 -- Amongst other features this function provides an interface to folding.
-{-# INLINABLE unfoldM #-}
-unfoldM :: Set item -> UnfoldM STM item
-unfoldM (Set hamt) =
-  A.unfoldM hamt
+{-# INLINABLE unfoldlM #-}
+unfoldlM :: Set item -> UnfoldlM STM item
+unfoldlM (Set hamt) =
+  A.unfoldlM hamt
 
 -- |
 -- Stream the elements passively.
diff --git a/stm-containers.cabal b/stm-containers.cabal
--- a/stm-containers.cabal
+++ b/stm-containers.cabal
@@ -1,5 +1,5 @@
 name: stm-containers
-version: 1.0.1.1
+version: 1.1
 synopsis: Containers for STM
 description:
   This library is based on an STM-specialized implementation of
@@ -40,11 +40,11 @@
     StmContainers.Prelude
   build-depends:
     base >=4.9 && <5,
-    deferred-folds >=0.6.6 && <0.7,
+    deferred-folds >=0.7 && <0.8,
     focus >=1 && <1.1,
     hashable <2,
     list-t >=1.0.1 && <1.1,
-    stm-hamt >=1.1.2.1 && <1.2,
+    stm-hamt >=1.2 && <1.3,
     transformers >=0.5 && <0.6
 
 test-suite test
diff --git a/test/Main/MapTests.hs b/test/Main/MapTests.hs
--- a/test/Main/MapTests.hs
+++ b/test/Main/MapTests.hs
@@ -9,7 +9,7 @@
 import qualified StmContainers.Map as StmMap
 import qualified Focus
 import qualified Data.HashMap.Strict as HashMap
-import qualified DeferredFolds.UnfoldM as UnfoldM
+import qualified DeferredFolds.UnfoldlM as UnfoldlM
 import qualified Control.Foldl as Foldl
 
 
@@ -35,7 +35,7 @@
         Just a -> HashMap.insert k (f a) m
 
 stmMapToHashMap :: (Hashable k, Eq k) => StmMap.Map k v -> STM (HashMap.HashMap k v)
-stmMapToHashMap = UnfoldM.foldM (Foldl.generalize Foldl.hashMap) . StmMap.unfoldM
+stmMapToHashMap = UnfoldlM.foldM (Foldl.generalize Foldl.hashMap) . StmMap.unfoldlM
 
 stmMapFromList :: (Hashable k, Eq k) => [(k, v)] -> STM (StmMap.Map k v)
 stmMapFromList list = do
@@ -44,7 +44,7 @@
   return m
 
 stmMapToList :: StmMap.Map k v -> STM [(k, v)]
-stmMapToList = UnfoldM.foldM (Foldl.generalize Foldl.list) . StmMap.unfoldM
+stmMapToList = UnfoldlM.foldM (Foldl.generalize Foldl.list) . StmMap.unfoldlM
 
 interpretStmMapUpdateAsHashMap :: (Hashable k, Eq k) => Update.Update k v -> HashMap.HashMap k v
 interpretStmMapUpdateAsHashMap =
