diff --git a/mvc-updates.cabal b/mvc-updates.cabal
--- a/mvc-updates.cabal
+++ b/mvc-updates.cabal
@@ -1,5 +1,5 @@
 Name: mvc-updates
-Version: 1.1.0
+Version: 1.1.1
 Cabal-Version: >=1.8.0.2
 Build-Type: Simple
 License: BSD3
diff --git a/src/MVC/Updates.hs b/src/MVC/Updates.hs
--- a/src/MVC/Updates.hs
+++ b/src/MVC/Updates.hs
@@ -181,9 +181,19 @@
 > listen (f <> g) = listen g . listen f
 -}
 listen :: (a -> IO ()) -> Updatable a -> Updatable a
-listen f = transform (\a -> do
-    f a
-    return a )
+listen handler (On (FoldM step begin done) mController) =
+    On (FoldM step' begin' done) mController
+  where
+    begin' = do
+        x <- begin
+        b <- done x
+        handler b
+        return x
+    step' x a = do
+        x' <- step x a
+        b  <- done x'
+        handler b
+        return x'
 {-# INLINABLE listen #-}
 
 {-| Transform an `Updatable` value using an impure function
