diff --git a/persistent-database-url.cabal b/persistent-database-url.cabal
--- a/persistent-database-url.cabal
+++ b/persistent-database-url.cabal
@@ -1,5 +1,5 @@
 name:                   persistent-database-url
-version:                1.0.0
+version:                1.1.0
 author:                 Joe Ferris <jferris@thoughtbot.com>
 maintainer:             Joe Ferris <jferris@thoughtbot.com>
 license:                MIT
@@ -24,8 +24,10 @@
   build-depends:        base >= 4 && < 5
                       , bytestring
                       , persistent-postgresql >= 1.0.0
-                      , uri-bytestring
+                      , uri-bytestring < 0.2.0
                       , fail
+                      , string-conversions
+                      , text
 
 test-suite spec
   type:                 exitcode-stdio-1.0
@@ -37,6 +39,8 @@
                       , hspec
                       , persistent-database-url
                       , persistent-postgresql
+                      , bytestring
+                      , text
 
 source-repository head
   type:                 git
diff --git a/src/Database/Persist/URL.hs b/src/Database/Persist/URL.hs
--- a/src/Database/Persist/URL.hs
+++ b/src/Database/Persist/URL.hs
@@ -1,12 +1,14 @@
+{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE OverloadedStrings #-}
 module Database.Persist.URL
     ( fromDatabaseUrl
     ) where
 
-import Control.Monad (unless)
-import Control.Monad.Fail (MonadFail)
+import Control.Monad (MonadPlus, mzero, unless)
 import Data.ByteString (ByteString, uncons)
 import Data.Monoid ((<>))
+import Data.String.Conversions (ConvertibleStrings(..))
+import Data.String.Conversions.Monomorphic (toStrictByteString)
 import Database.Persist.Postgresql (PostgresConf(..))
 import URI.ByteString
     ( Authority(..)
@@ -22,15 +24,16 @@
 import qualified Data.ByteString.Char8 as Char8
 
 -- | Build a @'PostgresConf'@ by parsing a database URL String
-fromDatabaseUrl :: MonadFail m => Int -> ByteString -> m PostgresConf
+fromDatabaseUrl
+    :: (MonadPlus m, ConvertibleStrings s ByteString)
+    => Int -> s -> m PostgresConf
 fromDatabaseUrl size url = do
-    uri <- abortLeft $ parseURI strictURIParserOptions url
-    auth <- abortNothing "authority" $ uriAuthority uri
-    userInfo <- abortNothing "user info" $ authorityUserInfo auth
-    port <- abortNothing "port" $ authorityPort auth
-    dbName <- abortNothing "path" $ snd <$> uncons (uriPath uri)
-    unless (schemeBS (uriScheme uri) == "postgres") $
-        fail "DATABASE_URL has unknown scheme"
+    uri <- abortLeft $ parseURI strictURIParserOptions $ toStrictByteString url
+    auth <- abortNothing $ uriAuthority uri
+    userInfo <- abortNothing $ authorityUserInfo auth
+    port <- abortNothing $ authorityPort auth
+    dbName <- abortNothing $ snd <$> uncons (uriPath uri)
+    unless (schemeBS (uriScheme uri) == "postgres") mzero
 
     return PostgresConf
         { pgConnStr =
@@ -42,8 +45,8 @@
         , pgPoolSize = size
         }
 
-abortLeft :: (MonadFail m, Show e) => Either e b -> m b
-abortLeft = either (fail . ("DATABASE_URL failed to parse: " <>) . show) return
+abortLeft :: (MonadPlus m, Show e) => Either e b -> m b
+abortLeft = either (const mzero) return
 
-abortNothing :: MonadFail m => String -> Maybe a -> m a
-abortNothing s = maybe (fail $ "DATABASE_URL is missing " <> s) return
+abortNothing :: MonadPlus m => Maybe a -> m a
+abortNothing = maybe mzero return
