diff --git a/Database/Monarch.hs b/Database/Monarch.hs
--- a/Database/Monarch.hs
+++ b/Database/Monarch.hs
@@ -13,7 +13,7 @@
     , Code(..)
     , put, putKeep, putCat, putShiftLeft, multiplePut
     , putNoResponse
-    , out
+    , out, multipleOut
     , get, multipleGet
     , valueSize
     , iterInit, iterNext
diff --git a/Database/Monarch/Binary.hs b/Database/Monarch/Binary.hs
--- a/Database/Monarch/Binary.hs
+++ b/Database/Monarch/Binary.hs
@@ -5,7 +5,7 @@
     (
       put, putKeep, putCat, putShiftLeft, multiplePut
     , putNoResponse
-    , out
+    , out, multipleOut
     , get, multipleGet
     , valueSize
     , iterInit, iterNext
@@ -138,6 +138,14 @@
       response Success = return ()
       response InvalidOperation = return ()
       response code = throwError code
+
+-- | Remove records.
+multipleOut :: ( MonadBaseControl IO m
+               , MonadIO m ) =>
+               [ByteString] -- ^ keys
+            -> MonarchT m ()
+multipleOut [] = return ()
+multipleOut keys = void $ misc "outlist" [] keys
 
 -- | Retrieve a record.
 get :: ( MonadBaseControl IO m
diff --git a/Database/Monarch/Raw.hs b/Database/Monarch/Raw.hs
--- a/Database/Monarch/Raw.hs
+++ b/Database/Monarch/Raw.hs
@@ -156,9 +156,11 @@
 recvLBS n = do
   conn <- connection <$> ask
   lbs <- liftIO (LBS.recv conn n) `catch` throwError' ReceiveError
-  if n /= LBS.length lbs
+  if LBS.null lbs
     then throwError ReceiveError
-    else return lbs
+    else if n == LBS.length lbs
+           then return lbs
+           else LBS.append lbs <$> recvLBS (n - LBS.length lbs)
 
 getConnection :: HostName
               -> Int
diff --git a/monarch.cabal b/monarch.cabal
--- a/monarch.cabal
+++ b/monarch.cabal
@@ -1,5 +1,5 @@
 name:                monarch
-version:             0.8.1.1
+version:             0.8.1.3
 synopsis:            Monadic interface for TokyoTyrant.
 description:         This package provides simple monadic interface for TokyoTyrant.
 license:             BSD3
diff --git a/test/specs.hs b/test/specs.hs
--- a/test/specs.hs
+++ b/test/specs.hs
@@ -2,7 +2,9 @@
 import Database.Monarch
 
 import Control.Applicative
+import Control.Monad.IO.Class
 import Data.List
+import qualified Data.ByteString as BS
 import Data.ByteString.Char8 ()
 import Test.HUnit
 import Test.Hspec.Monadic
@@ -14,7 +16,7 @@
            it "store a record" casePutRecord
            it "overwrite a record if same key exists" casePutOverwriteRecord
          describe "mput" $ do
-           it "store records" caseMputRecord
+           it "store records" caseMputRecords
          describe "putkeep" $ do
            it "store a new record" casePutKeepNewRecord
            it "has no effect if same key exists" casePutKeepNoEffect
@@ -30,8 +32,11 @@
          describe "out" $ do
            it "remove a record" caseOutRecord
            it "no effect if same key not exists" caseOutNoEffect
+         describe "mout" $ do
+           it "remove records" caseMoutRecords
          describe "get" $ do
            it "retrieve a record" caseGetRecord
+           it "retrieve large record" caseGetLargeRecord
          describe "mget" $ do
            it "retrieve records" caseMgetRecords
          describe "vsiz" $ do
@@ -80,8 +85,8 @@
         put "foo" "hoge"
         get "foo"
 
-caseMputRecord :: Assertion
-caseMputRecord =
+caseMputRecords :: Assertion
+caseMputRecords =
     action `returns` Right (Just "bob", Just "bar")
     where
       action = do
@@ -177,6 +182,18 @@
       action = do
         out "hoge"
 
+caseMoutRecords :: Assertion
+caseMoutRecords =
+    action `returns` Right (Nothing, Nothing)
+    where
+      action = do
+        put "foo" "bar"
+        put "hoge" "fuga"
+        multipleOut ["foo", "hoge"]
+        bar <- get "foo"
+        fuga <- get "hoge"
+        return (bar, fuga)
+
 caseGetRecord :: Assertion
 caseGetRecord =
     action `returns` Right (Just "bar", Nothing)
@@ -186,6 +203,15 @@
         stored <- get "foo"
         unstored <- get "bar"
         return (stored, unstored)
+
+caseGetLargeRecord :: Assertion
+caseGetLargeRecord = do
+  content <- BS.concat . replicate 1024 <$> liftIO (BS.readFile "test/specs.hs")
+  action content `returns` Right (Just content)
+    where
+      action content = do
+        put "foo" content
+        get "foo"
 
 caseMgetRecords :: Assertion
 caseMgetRecords =
