diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,9 @@
 Changelog for tmp-postgres
 
-1.7.0.0
+1.18.0.0
+  #143 Remove the the withNewDb API
+
+1.17.0.0
   #156 Deprecate `NewDb` functions.
   #155 Better monoids for `initDbConfig` and `createDbConfig`.
   #142 Cluster save points.
diff --git a/benchmark/Main.hs b/benchmark/Main.hs
--- a/benchmark/Main.hs
+++ b/benchmark/Main.hs
@@ -91,16 +91,9 @@
   , bench "with migrate 10x" $ whnfIO $ replicateM 10 $ withConfig silentConfig $ \db ->
       migrateDb db >> testQuery db
 
-  , bench "withNewDb migrate 10x" $ whnfIO $ withConfig silentConfig $ \db -> do
-      migrateDb db
-      replicateM 10 $ withNewDb db testQuery
 -}
-    setupWithCache $ \cacheConfig -> bench "withNewDbConfig migrate 10x and cache" $ whnfIO $ withConfig cacheConfig
-    $ \db -> do
-      migrateDb db
-      replicateM 10 $ withNewDb db testQuery
 
-  ,  setupWithCache $ \cacheConfig -> do
+    setupWithCache $ \cacheConfig -> do
       bench "with migrate 10x and cache" $ whnfIO $ withConfig cacheConfig $ \_ -> do
         replicateM_ 10 $ withConfig cacheConfig $ \db ->
           migrateDb db >> testQuery db
diff --git a/src/Database/Postgres/Temp.hs b/src/Database/Postgres/Temp.hs
--- a/src/Database/Postgres/Temp.hs
+++ b/src/Database/Postgres/Temp.hs
@@ -90,12 +90,6 @@
   , optionsToDefaultConfig
   -- ** Configuration Types
   , module Database.Postgres.Temp.Config
-  -- * Deprecated NewDb Functions. Use 'withSnapshot'.
-  , withNewDb
-  , withNewDbConfig
-  , startNewDb
-  , startNewDbConfig
-  , stopNewDb
   ) where
 import Database.Postgres.Temp.Internal
 import Database.Postgres.Temp.Internal.Core
diff --git a/src/Database/Postgres/Temp/Internal.hs b/src/Database/Postgres/Temp/Internal.hs
--- a/src/Database/Postgres/Temp/Internal.hs
+++ b/src/Database/Postgres/Temp/Internal.hs
@@ -13,15 +13,10 @@
 import           Control.Monad.Trans.Cont
 import           Data.ByteString (ByteString)
 import qualified Data.Map.Strict as Map
-import           Data.Maybe
-import           Data.Monoid
-import           Data.String
 import qualified Database.PostgreSQL.Simple as PG
 import qualified Database.PostgreSQL.Simple.Options as Client
-import           System.Environment
 import           System.Exit (ExitCode(..))
 import           System.Process
-import           System.Random
 import           Text.PrettyPrint.ANSI.Leijen hiding ((<$>))
 
 -- | Handle for holding temporary resources, the @postgres@ process handle
@@ -439,193 +434,6 @@
 --   @since 1.12.0.0
 prettyPrintDB :: DB -> String
 prettyPrintDB = show . pretty
-
--------------------------------------------------------------------------------
--- withNewDb
--------------------------------------------------------------------------------
--- | Drop the db if it exists. Terminates all connections to the db first.
---
---   @since 1.12.0.0
-dropDbIfExists :: Client.Options -> String -> IO ()
-dropDbIfExists options dbName = do
-  let theConnectionString = Client.toConnectionString options
-      dropDbQuery = fromString $ "DROP DATABASE IF EXISTS " <> dbName <> ";"
-
-  terminateConnections $ options
-    { Client.dbname = pure dbName
-    }
-
-  mapException DeleteDbError $
-    bracket (PG.connectPostgreSQL theConnectionString) PG.close $
-      \conn -> void $ PG.execute_ conn dropDbQuery
-
-{-|
-Use the current database as a template and make a copy. Give the
-copy a random name.
-
-Equivalent to:
-
-@
- 'withNewDb' = 'withNewDbConfig' mempty
-@
-
-See 'startNewDbConfig' for more details.
-
-@since 1.12.0.0
--}
-withNewDb
-  :: DB
-  -- ^ The original 'DB' handle. The database name specified in the
-  --   connection options
-  --   is used as the template for the @generated@ 'ProcessConfig'
-  -> (DB -> IO a)
-  -- ^ The modified 'DB' handle that has the new database name
-  --   in it's connection options.
-  -> IO (Either StartError a)
-withNewDb = withNewDbConfig mempty
-{-# DEPRECATED withNewDb "Use withSnapshot" #-}
-{-|
-Exception safe version of 'startNewDbConfig'. Creates a
-temporary database using the current database as a template.
-
-See 'startNewDbConfig' for more details.
-
-@since 1.12.0.0
--}
-withNewDbConfig
-  :: ProcessConfig
-  -- ^ @extra@ @createdb@ 'ProcessConfig'.
-  -> DB
-  -- ^ The original 'DB' handle. The database name specified in the
-  --   connection options
-  --   is used as the template for the @generated@ 'ProcessConfig'.
-  -> (DB -> IO a)
-  -- ^ The modified 'DB' handle that has the new database name
-  --   in it's connection options.
-  -> IO (Either StartError a)
-withNewDbConfig extra db f =
-  bracket (startNewDbConfig extra db) (either mempty stopNewDb) $
-    either (pure . Left) (fmap Right . f)
-{-# DEPRECATED withNewDbConfig "Use withSnapshot" #-}
-
-{-|
-Use the current database as a template and make a copy. Give the
-copy a random name.
-
-Equivalent to:
-
-@
- 'startNewDb' = 'startNewDbConfig' mempty
-@
-
-See 'startNewDbConfig' for more details.
-
-@since 1.13.0.0
--}
-startNewDb
-  :: DB
-  -- ^ The original 'DB' handle. The database name specified in the
-  --   connection options
-  --   is used as the template for the @generated@ 'ProcessConfig'.
-  -> IO (Either StartError DB)
-startNewDb = startNewDbConfig mempty
-{-# DEPRECATED startNewDb "Use takeSnapshot" #-}
-
-{-|
-Use the current database as a template and make a copy. Give the
-copy a random name.
-
-Copying a database from a template can be faster than creating a new
-@postgres@ and migrating a database from scratch. In artifical benchmarks
-it appears to be about 2x faster.
-
-To use the current database as a template all connections to the database
-must be terminated first.
-
-To override the arguments passed to @createdb@ one can pass in @extra@
-'ProcessConfig'. The @combined@ process is created by 'mappend'ed the
-@generated@ with the @extra@ 'ProcessConfig', e.g.
-
-@
-   combined = generated '<>' extra
-@
-
-The current implementation has a few known issues.
-
-If a connection is made between the termination command and the @createdb@
-call the @createdb@ call will fail.
-
-Additionally the generated name is 32 character random name of characters
-\"a\" to \"z\". It is possible, although unlikeily that a duplicate
-database name could be generated and this would also cause a failure.
-
-'startNewDbConfig' requires cleanup so it best to use a 'bracket' along
-with 'stopNewDb'. This is equivalient to 'withNewDbConfig'.
-
-The only reason to use 'startNewDbConfig' over 'withNewDbConfig' is
-if you are unable to use 'withNewDbConfig' for some reason.
-
-@since 1.13.0.0
--}
-startNewDbConfig
-  :: ProcessConfig
-  -- ^ @extra@ @createdb@ 'ProcessConfig'.
-  -> DB
-  -- ^ The original 'DB' handle. The database name specified in the
-  --   connection options
-  --   is used as the template for the @generated@ 'ProcessConfig'.
-  -> IO (Either StartError DB)
-startNewDbConfig extra@ProcessConfig{..} db = try $ do
-  stdGen <- getStdGen
-  let oldOptions@Client.Options {..} = toConnectionOptions db
-      theDbName = fromMaybe "postgres" $ getLast dbname
-      newDbName = fromMaybe (take 32 $ randomRs ('a', 'z') stdGen) $
-        Map.lookup 0 $ indexBased commandLine
-      newOptions = oldOptions
-        { Client.dbname = pure newDbName
-        }
-      generated = standardProcessConfig
-        { commandLine = mempty
-          { keyBased = Map.fromList
-              [ ("-T", Just theDbName)
-              , ("-h", Just $ fromMaybe "127.0.0.1" $ getLast host)
-              , ("-p ", Just $ maybe "5432" show $ getLast port)
-              ]
-          , indexBased = Map.singleton 0 newDbName
-          }
-        }
-      combined = generated <> extra
-      newDb = db
-        { dbPostgresProcess = (dbPostgresProcess db)
-            { postgresProcessClientOptions = newOptions
-            }
-        }
-  envs <- getEnvironment
-  final <- case completeProcessConfig envs combined of
-    -- Failure case does not look possible
-    Left errs -> throwIO $ CompleteProcessConfigFailed (show $ pretty combined) errs
-    Right x -> pure x
-  terminateConnections oldOptions
-  executeCreateDb final
-  pure newDb
-{-# DEPRECATED startNewDbConfig "Use takeSnapshot" #-}
--- | Cleanup the temporary database created by 'startNewDbConfig'
---   or 'startNewDb'.
---
---   @since 1.13.0.0
-stopNewDb :: DB -> IO ()
-stopNewDb db = do
-  let oldOptions@Client.Options{..} = toConnectionOptions db
-  -- This should not happen.
-  newDbName <- maybe
-    (throwIO $ userError "stopNewDb: missing db name!")
-    pure $
-    getLast dbname
-  let template1Options = oldOptions
-        { Client.dbname = pure "template1"
-        }
-  dropDbIfExists template1Options newDbName
-{-# DEPRECATED stopNewDb "Use cleanupSnapshot" #-}
 
 -------------------------------------------------------------------------------
 -- initdb cache
diff --git a/tmp-postgres.cabal b/tmp-postgres.cabal
--- a/tmp-postgres.cabal
+++ b/tmp-postgres.cabal
@@ -1,5 +1,5 @@
 name:                tmp-postgres
-version:             1.17.0.0
+version:             1.18.0.0
 synopsis: Start and stop a temporary postgres
 description: Start and stop a temporary postgres. See README.md
 homepage:            https://github.com/jfischoff/tmp-postgres#readme
@@ -53,7 +53,6 @@
                , postgres-options >= 0.2.0.0
                , postgresql-simple
                , process >= 1.2.0.0
-               , random
                , stm
                , temporary
                , transformers
