diff --git a/lambdabot-social-plugins.cabal b/lambdabot-social-plugins.cabal
--- a/lambdabot-social-plugins.cabal
+++ b/lambdabot-social-plugins.cabal
@@ -1,5 +1,5 @@
 name:                   lambdabot-social-plugins
-version:                5.0
+version:                5.0.1
 
 license:                GPL
 license-file:           LICENSE
@@ -15,9 +15,13 @@
                         Provided plugins:
                         .
                         [activity] Check where and how much is lambdabot used.
+                        .
                         [karma] Track who's been good and who's been naughty.
+                        .
                         [poll] Let the people vote.
+                        .
                         [seen] Track who was around when.
+                        .
                         [tell] Leave messages for other users.
 
 homepage:               http://haskell.org/haskellwiki/Lambdabot
@@ -50,7 +54,7 @@
                         binary                  >= 0.5,
                         bytestring              >= 0.9,
                         containers              >= 0.4,
-                        lambdabot-core          >= 5 && < 5.1,
+                        lambdabot-core          >= 5.0.1 && < 5.1,
                         mtl                     >= 2,
                         split                   >= 0.2,
                         time                    >= 1.4
diff --git a/src/Lambdabot/Plugin/Social/Seen.hs b/src/Lambdabot/Plugin/Social/Seen.hs
--- a/src/Lambdabot/Plugin/Social/Seen.hs
+++ b/src/Lambdabot/Plugin/Social/Seen.hs
@@ -60,9 +60,9 @@
                 [joinCB, partCB, quitCB, nickCB, joinChanCB, msgCB]
             ]
 
-        c <- lb $ findOrCreateLBFile "seen"
-        s <- io $ P.readFile c
-        let ls = L.fromChunks [s]
+        c <- lb $ findLBFileForReading "seen"
+        s <- maybe (return (P.pack "")) (io . P.readFile) c
+        let ls = L.fromStrict s
         mbDecoded <- io . try . evaluate $ decode ls
         case mbDecoded of
             Left exc@SomeException{} -> do
@@ -82,7 +82,7 @@
             modifyMS $ \(n,m) -> (n, botPart ct (map packNick chans) m)
 
         -- and write out our state:
-        withMS $ \s _ -> lb (findOrCreateLBFile "seen") >>= \ c -> io (encodeFile c s)
+        withMS $ \s _ -> lb (findLBFileForWriting "seen") >>= \ c -> io (encodeFile c s)
     }
 
 lcNick :: Nick -> Nick
diff --git a/src/Lambdabot/Plugin/Social/Tell.hs b/src/Lambdabot/Plugin/Social/Tell.hs
--- a/src/Lambdabot/Plugin/Social/Tell.hs
+++ b/src/Lambdabot/Plugin/Social/Tell.hs
@@ -200,6 +200,10 @@
              Just (_, [], _) -> Nothing
              Just (_, ns, _) -> Just ns
 
+-- | Set a user's messages.
+setMessages :: Nick -> [Note] -> Cmd Tell ()
+setMessages sender msgs = modEntry sender $ \(t, _, a) -> (t, msgs, a)
+
 -- | Clear a user's messages.
 clearMessages :: Nick -> Cmd Tell ()
 clearMessages sender = modEntry sender $ \(_, _, a) -> (Nothing, [], a)
@@ -232,17 +236,23 @@
 doMessages loud = do
     sender <- getSender
     msgs <- getMessages sender
-    clearMessages sender
 
     let tellNote = if loud
             then say
             else lb . ircPrivmsg sender
 
+    let loop [] = clearMessages sender
+        loop (msg : msgs) = do
+            time <- io getClockTime
+            -- Note that 'showNote' may block and thus run into a timeout.
+            -- Hence we update the list of pending messages after each message.
+            showNote time msg >>= tellNote
+            setMessages sender msgs
+            loop msgs
+
     case msgs of
         Nothing -> say "You don't have any messages"
-        Just mesgs -> do
-            time <- io getClockTime
-            mapM_ (showNote time >=> tellNote) mesgs
+        Just msgs -> loop msgs
 
 verb :: NoteType -> String
 verb Ask = "ask"
