diff --git a/Database/MongoDB/Queue.hs b/Database/MongoDB/Queue.hs
--- a/Database/MongoDB/Queue.hs
+++ b/Database/MongoDB/Queue.hs
@@ -13,10 +13,10 @@
 import Data.Typeable (Typeable)
 import Database.MongoDB
 import Control.Monad.IO.Class (MonadIO, liftIO)
-import Control.Applicative (Applicative)
 import Control.Monad.Trans.Control (MonadBaseControl(..))
 import Data.Text (Text)
 import Network.BSD (getHostName, HostName)
+import Control.Monad (void)
 
 queueCollection, handled, dataField, _id, hostField, versionField :: Text
 queueCollection = "queue"
@@ -26,33 +26,7 @@
 versionField = "version"
 _id = "_id"
 
--- from Database.Persist.MongoDB, trying to move into driver
-findAndModify :: (Applicative m, MonadIO m)
-              => Query
-              -> Document -- ^ updates
-              -> Action m (Either String Document)
-findAndModify (Query {
-    selection = Select sel collection
-  , project = project
-  , sort = sort
-  }) updates = do
-  result <- runCommand [
-     "findAndModify" := String collection
-   , "new"    := Bool True -- return updated document, not original document
-   , "query"  := Doc sel
-   , "update" := Doc updates
-   , "fields" := Doc project
-   , "sort"   := Doc sort
-   ]
-  return $ case findErr result of
-    Nothing -> case lookup "value" result of
-      Nothing -> Left "findAndModify: no document found (value field was empty)"
-      Just doc -> Right doc
-    Just e -> Left e
-    where
-      findErr result = lookup "err" (at "lastErrorObject" result)
 
-
 type DBRunner = (MonadIO m, MonadBaseControl IO m) => Action m a -> m a
 data QueueEmitter = QueueEmitter {
                       qeVersion :: Int -- ^ version
@@ -64,18 +38,22 @@
 data EmitterOpts = EmitterOpts
                    { emitterVersion :: Int
                    , emitterCollection :: Collection
+                   , emitterMaxByteSize :: Int
                    }
 
 instance Default EmitterOpts where
-    def = EmitterOpts 1 queueCollection
+    def = EmitterOpts 1 queueCollection 100000
 
 
 -- | create a QueueEmitter
 createEmitter :: DBRunner -> IO QueueEmitter
 createEmitter runEmitter = mkEmitter def runEmitter
+
+-- | create an emitter with non-default configuration
 mkEmitter :: EmitterOpts -> DBRunner -> IO QueueEmitter
 mkEmitter EmitterOpts {..} emitterRunner = do
   name <- getHostName
+  void $ emitterRunner $ createCollection [Capped, MaxByteSize emitterMaxByteSize] emitterCollection
   return $ QueueEmitter emitterVersion name emitterRunner emitterCollection
 
 -- | emit a message for a worker
@@ -110,6 +88,7 @@
 createWorker :: DBRunner -> IO QueueWorker
 createWorker runWorker = mkWorker def runWorker
 
+-- | create an worker with non-default configuration
 mkWorker :: WorkerOpts -> DBRunner -> IO QueueWorker
 mkWorker WorkerOpts {..} workerRunner = do
     _<- workerRunner $
diff --git a/mongodb-queue.cabal b/mongodb-queue.cabal
--- a/mongodb-queue.cabal
+++ b/mongodb-queue.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                mongodb-queue
-version:             0.2.3.1
+version:             0.2.4
 synopsis:            a message queue using MongoDB
 -- description:         
 homepage:            https://github.com/docmunch/haskell-mongodb-queue
@@ -25,7 +25,7 @@
   -- other-modules:       
   build-depends:
       base > 4.5 && < 5
-    , mongoDB >= 1.3.1 && < 1.4
+    , mongoDB >= 1.4.1 && < 1.5
     , transformers
     , monad-control
     , text
@@ -42,7 +42,7 @@
 
   build-depends:
       base > 4.5 && < 5
-    , mongoDB >= 1.3.1 && < 1.4
+    , mongoDB >= 1.4.1 && < 1.5
     , transformers
     , monad-control
     , text
