diff --git a/Control/Monad/Trans/RSS/Lazy.hs b/Control/Monad/Trans/RSS/Lazy.hs
--- a/Control/Monad/Trans/RSS/Lazy.hs
+++ b/Control/Monad/Trans/RSS/Lazy.hs
@@ -164,9 +164,9 @@
     tell w = RSST $ \_ (s, ow) ->
         let nw = ow <> w
         in  return ((), (s, nw))
-    listen rw = RSST $ \r s -> do
-        (a, (ns, nw)) <- runRSST' rw r s
-        return ((a, nw), (ns, nw))
+    listen rw = RSST $ \r (s, w) -> do
+        (a, (ns, nw)) <- runRSST' rw r (s, mempty)
+        return ((a, nw), (ns, w <> nw))
     pass rw = RSST $ \r (s, w) -> do
         ( (a, fw), (s', w') ) <- runRSST' rw r (s, mempty)
         return (a, (s', w `mappend` fw w'))
diff --git a/Control/Monad/Trans/RSS/Strict.hs b/Control/Monad/Trans/RSS/Strict.hs
--- a/Control/Monad/Trans/RSS/Strict.hs
+++ b/Control/Monad/Trans/RSS/Strict.hs
@@ -161,10 +161,11 @@
     writer (a,w) = tell w >> return a
     tell w = RSST $ \_ (s, ow) ->
         let nw = ow `mappend` w
-        in  nw `seq` return ((), (s, ow `mappend` w))
-    listen rw = RSST $ \r s -> do
-        (a, (ns, nw)) <- runRSST' rw r s
-        return ((a, nw), (ns, nw))
+        in  nw `seq` return ((), (s,  nw))
+    listen rw = RSST $ \r (s, w) -> do
+        (a, (ns, nw)) <- runRSST' rw r (s,mempty)
+        let ow = w `mappend` nw
+        ow `seq` return ((a, nw), (ns, ow))
     pass rw = RSST $ \r (s, w) -> do
         ( (a, fw), (s', w') ) <- runRSST' rw r (s, mempty)
         return (a, (s', w `mappend` fw w'))
diff --git a/stateWriter.cabal b/stateWriter.cabal
--- a/stateWriter.cabal
+++ b/stateWriter.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                stateWriter
-version:             0.2.8.2
+version:             0.2.9
 synopsis:            A faster variant of the RWS monad transformers.
 description:         This is a version of the RWS monad transformers that should be much faster than what's found in transformers. The writer in the strict version does not leak memory.
 license:             BSD3
diff --git a/tests/rwscompare.hs b/tests/rwscompare.hs
--- a/tests/rwscompare.hs
+++ b/tests/rwscompare.hs
@@ -7,6 +7,7 @@
 import Test.QuickCheck
 import Control.Applicative
 import Control.Monad.Free
+import Prelude
 
 data ActionF next = Tell        [Int]         next
                   | SetState    Int           next
@@ -67,9 +68,15 @@
 
 main :: IO ()
 main = hspec $ do
-    describe "Writer part" $ do
-        it "logs stuff in the right order, with tell" $
-            property $ \listOfLists -> runRSS (mapM_ tell (listOfLists :: [[Int]])) () () == runRWS (mapM_ tell listOfLists) () ()
-        it "interprets actions the same" $
-            property $ \actions -> runRSS (evaluateActions (actions :: Action Int)) 42 12 == runRWS (evaluateActions actions) 42 12
+  describe "Writer part" $ do
+    it "logs stuff in the right order, with tell" $
+      property $ \listOfLists -> runRSS (mapM_ tell (listOfLists :: [[Int]])) () () == runRWS (mapM_ tell listOfLists) () ()
+    it "listen" $
+      runRSS (tell "lol" >> listen (return ())) () () `shouldBe` (((),""),(),"lol")
+    it "listen" $
+      runRSS (tell "lol" >> listen (tell "lal")) () () `shouldBe` (((),"lal"),(),"lollal")
+
+  describe "RWS comparison" $
+    it "interprets actions the same" $
+      property $ \actions -> runRSS (evaluateActions (actions :: Action Int)) 42 12 == runRWS (evaluateActions actions) 42 12
 
