diff --git a/Database/Persist/MongoDB.hs b/Database/Persist/MongoDB.hs
--- a/Database/Persist/MongoDB.hs
+++ b/Database/Persist/MongoDB.hs
@@ -44,6 +44,7 @@
     , (->.), (~>.), (?&->.), (?&~>.), (&->.), (&~>.)
     -- non-operator forms of filters
     , NestedField(..)
+    , MongoRegexSearchable
 
     -- * MongoDB specific PersistFields
     , Objectid
@@ -695,7 +696,6 @@
     (MongoFilterOperator bval) -> [fname DB.:= bval]
 
 mongoFilterToDoc :: PersistEntity val => MongoFilter val -> DB.Document
-mongoFilterToDoc (RegExpMaybeFilter fn (reg, opts))   = [ fieldName fn  DB.:= DB.RegEx (DB.Regex reg opts)]
 mongoFilterToDoc (RegExpFilter fn (reg, opts))        = [ fieldName fn  DB.:= DB.RegEx (DB.Regex reg opts)]
 mongoFilterToDoc (MultiKeyFilter fn filt) = mongoFilterToBSON (fieldName fn) filt
 mongoFilterToDoc (NestedFilter fns filt)  = mongoFilterToBSON (nesFldName fns) filt
@@ -1043,13 +1043,22 @@
 -- If you use the same options you may want to define a helper such as @r t = (t, "ims")@
 type MongoRegex = (Text, Text)
 
+-- | Mark the subset of 'PersistField's that can be searched by a mongoDB regex
+-- Anything stored as PersistText or an array of PersistText would be valid
+class PersistField typ => MongoRegexSearchable typ where
+
+instance MongoRegexSearchable Text
+instance MongoRegexSearchable rs => MongoRegexSearchable (Maybe rs)
+instance MongoRegexSearchable rs => MongoRegexSearchable [rs]
+
 -- | Filter using a Regular expression.
-(=~.) :: forall record. (PersistEntity record, PersistEntityBackend record ~ MongoBackend) => EntityField record Text -> MongoRegex -> Filter record
+(=~.) :: forall record searchable. (MongoRegexSearchable searchable, PersistEntity record, PersistEntityBackend record ~ MongoBackend) => EntityField record searchable -> MongoRegex -> Filter record
 fld =~. val = BackendFilter $ RegExpFilter fld val
 
 -- | Filter using a Regular expression against a nullable field.
 (?=~.) :: forall record. (PersistEntity record, PersistEntityBackend record ~ MongoBackend) => EntityField record (Maybe Text) -> MongoRegex -> Filter record
-fld ?=~. val = BackendFilter $ RegExpMaybeFilter fld val
+fld ?=~. val = BackendFilter $ RegExpFilter fld val
+{-# DEPRECATED (?=~.) "Use =~. instead" #-}
 
 data MongoFilterOperator typ = PersistOperator (Either typ [typ]) PersistFilter
                              | MongoFilterOperator DB.Value
@@ -1064,8 +1073,8 @@
                           multiField  :: EntityField record [typ]
                         , multiValue  :: MongoFilterOperator typ
                         }
-                      | RegExpFilter (EntityField record Text) MongoRegex
-                      | RegExpMaybeFilter (EntityField record (Maybe Text)) MongoRegex
+                      | forall typ. MongoRegexSearchable typ =>
+                        RegExpFilter (EntityField record typ) MongoRegex
 
 -- | Point to an array field with an embedded object and give a deeper query into the embedded object.
 -- Use with 'nestEq'.
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:         1.4.2.1
+version:         1.4.3
 license:         MIT
 license-file:    LICENSE
 author:          Greg Weber <greg@gregweber.info>
