diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,11 @@
+## 2.1.4
+
+* support http-api-data for url serialization
+
+## 2.1.3
+
+* Add list filtering functions `inList` and `ninList`
+
 ## 2.1.2
 
 * Add `nestAnyEq` filter function
diff --git a/Database/Persist/MongoDB.hs b/Database/Persist/MongoDB.hs
--- a/Database/Persist/MongoDB.hs
+++ b/Database/Persist/MongoDB.hs
@@ -43,6 +43,7 @@
     -- $filters
     , nestEq, nestNe, nestGe, nestLe, nestIn, nestNotIn
     , anyEq, nestAnyEq, nestBsonEq, anyBsonEq, multiBsonEq
+    , inList, ninList
     , (=~.)
     -- non-operator forms of filters
     , NestedField(..)
@@ -121,7 +122,7 @@
 import Data.Bson (ObjectId(..))
 import qualified Database.MongoDB as DB
 import Database.MongoDB.Query (Database)
-import Control.Applicative (Applicative)
+import Control.Applicative (Applicative, (<$>))
 import Network (PortID (PortNumber))
 import Network.Socket (HostName)
 import Data.Maybe (mapMaybe, fromJust)
@@ -130,7 +131,8 @@
 import qualified Data.ByteString as BS
 import qualified Data.Text.Encoding as E
 import qualified Data.Serialize as Serialize
-import Web.PathPieces (PathPiece (..))
+import Web.PathPieces (PathPiece(..))
+import Web.HttpApiData (ToHttpApiData(..), FromHttpApiData(..), parseUrlPieceMaybe, parseUrlPieceWithPrefix, readTextData)
 import Data.Conduit
 import Control.Monad.IO.Class (liftIO)
 import Data.Aeson (Value (Number), (.:), (.:?), (.!=), FromJSON(..), ToJSON(..), withText, withObject)
@@ -152,6 +154,7 @@
 import Control.Monad.Trans.Reader (ask, runReaderT)
 import Control.Monad.Trans.Control (MonadBaseControl)
 import Numeric (readHex)
+import Unsafe.Coerce (unsafeCoerce)
 
 #if MIN_VERSION_base(4,6,0)
 import System.Environment (lookupEnv)
@@ -210,15 +213,22 @@
 data Connection = Connection DB.Pipe DB.Database
 type ConnectionPool = Pool.Pool Connection
 
+instance ToHttpApiData (BackendKey DB.MongoContext) where
+    toUrlPiece = keyToText
+
+instance FromHttpApiData (BackendKey DB.MongoContext) where
+    parseUrlPiece input = do
+      s <- parseUrlPieceWithPrefix "o" input <!> return input
+      MongoKey <$> readTextData s
+      where
+        infixl 3 <!>
+        Left _ <!> y = y
+        x      <!> _ = x
+
 -- | ToPathPiece is used to convert a key to/from text
 instance PathPiece (BackendKey DB.MongoContext) where
-    toPathPiece = keyToText
-    fromPathPiece keyText = readMayMongoKey $
-        -- handle a JSON type prefix
-        -- 'o' is a non-hex character, so no confusion here
-        case T.uncons keyText of
-            Just ('o', prefixed) -> prefixed
-            _ -> keyText
+  toPathPiece   = toUrlPiece
+  fromPathPiece = parseUrlPieceMaybe
 
 keyToText :: BackendKey DB.MongoContext -> Text
 keyToText = T.pack . show . unMongoKey
@@ -1119,7 +1129,7 @@
     deriving Show
 
 instance FromJSON MongoConf where
-    parseJSON v = modifyFailure ("Persistent: error loadomg MongoDB conf: " ++) $
+    parseJSON v = modifyFailure ("Persistent: error loading MongoDB conf: " ++) $
       flip (withObject "MongoConf") v $ \o ->do
         db                  <- o .:  "database"
         host                <- o .:? "host" .!= defaultHost
@@ -1464,3 +1474,13 @@
        ) => PersistUpdate -> NestedField record typ -> typ -> Update record
 nestedUpdateOp op nf v = BackendUpdate $
    NestedUpdate nf $ UpdateValueOp (Left v) (Left op)
+
+-- | Intersection of lists: if any value in the field is found in the list.
+inList :: PersistField typ => EntityField v [typ] -> [typ] -> Filter v
+f `inList` a = Filter (unsafeCoerce f) (Right a) In
+infix 4 `inList`
+
+-- | No intersection of lists: if no value in the field is found in the list.
+ninList :: PersistField typ => EntityField v [typ] -> [typ] -> Filter v
+f `ninList` a = Filter (unsafeCoerce f) (Right a) In
+infix 4 `ninList`
diff --git a/persistent-mongoDB.cabal b/persistent-mongoDB.cabal
--- a/persistent-mongoDB.cabal
+++ b/persistent-mongoDB.cabal
@@ -1,5 +1,5 @@
 name:            persistent-mongoDB
-version:         2.1.2.2
+version:         2.1.4
 license:         MIT
 license-file:    LICENSE
 author:          Greg Weber <greg@gregweber.info>
@@ -32,6 +32,7 @@
                    , network            >= 2.2.1.7
                    , cereal             >= 0.3.0.0
                    , path-pieces        >= 0.1
+                   , http-api-data      >= 0.2       && < 0.3
                    , monad-control      >= 0.3
                    , aeson              >= 0.6.2
                    , attoparsec
