diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,18 @@
 # Changelog
 
+## 0.2.1.0
+
+### Bug Fixes
+
+- Fix `stop` and `restart` ignoring configured shutdown mode and timeout — they
+  were hardcoding `ShutdownGraceful` with a 30-second timeout instead of using
+  the config values, causing `with`/`withCached` to block unnecessarily on shutdown
+
+### Other Changes
+
+- Change default shutdown mode to `ShutdownFast` (SIGINT) with a 5-second
+  timeout, which is more appropriate for a testing library
+
 ## 0.2.0.1
 
 ### Bug Fixes
diff --git a/ephemeral-pg.cabal b/ephemeral-pg.cabal
--- a/ephemeral-pg.cabal
+++ b/ephemeral-pg.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: ephemeral-pg
-version: 0.2.0.1
+version: 0.2.1.0
 synopsis: Temporary PostgreSQL databases for testing
 description:
   A modern library for creating temporary PostgreSQL instances for testing.
diff --git a/src/EphemeralPg.hs b/src/EphemeralPg.hs
--- a/src/EphemeralPg.hs
+++ b/src/EphemeralPg.hs
@@ -233,7 +233,9 @@
         process = pgProcess,
         cleanup = cleanupAction,
         dataDirIsTemp = dataDirIsTemp,
-        socketDirIsTemp = socketDirIsTemp
+        socketDirIsTemp = socketDirIsTemp,
+        shutdownMode = resolveShutdownMode config,
+        shutdownTimeoutSeconds = resolveShutdownTimeout config
       }
   where
     cleanup :: Bool -> FilePath -> Bool -> FilePath -> IO ()
@@ -253,19 +255,26 @@
   "" -> getCurrentUser
   u -> pure u
 
+-- | Resolve shutdown mode from config, falling back to default.
+resolveShutdownMode :: Config -> ShutdownMode
+resolveShutdownMode config =
+  maybe ShutdownGraceful id $ getLast config.shutdownMode
+
+-- | Resolve shutdown timeout from config, falling back to default.
+resolveShutdownTimeout :: Config -> Int
+resolveShutdownTimeout config =
+  maybe defaultShutdownTimeoutSeconds id $ getLast config.shutdownTimeoutSeconds
+
 -- | Stop a database and clean up resources.
 --
--- This sends SIGTERM to postgres and waits for graceful shutdown,
--- then removes temporary directories.
+-- Uses the shutdown mode and timeout from the configuration that was
+-- used to start the database.
 --
 -- Safe to call multiple times (subsequent calls are no-ops).
 stop :: Database -> IO ()
 stop db = do
-  let mode = ShutdownGraceful
-  let timeoutSecs = defaultShutdownTimeoutSeconds
-
-  -- Stop postgres
-  _ <- stopPostgres db.process mode timeoutSecs
+  -- Stop postgres using configured shutdown mode and timeout
+  _ <- stopPostgres db.process db.shutdownMode db.shutdownTimeoutSeconds
 
   -- Run cleanup (removes temp directories)
   db.cleanup
@@ -292,9 +301,9 @@
 -- @
 restart :: Database -> IO (Either StartError Database)
 restart db = runStartup $ do
-  -- Stop postgres gracefully
+  -- Stop postgres using configured shutdown settings
   liftIO $ do
-    _ <- stopPostgres db.process ShutdownGraceful defaultShutdownTimeoutSeconds
+    _ <- stopPostgres db.process db.shutdownMode db.shutdownTimeoutSeconds
     pure ()
 
   -- Start postgres again with the same configuration
@@ -455,7 +464,9 @@
         process = pgProcess,
         cleanup = cleanupAction,
         dataDirIsTemp = dataDirIsTemp,
-        socketDirIsTemp = socketDirIsTemp
+        socketDirIsTemp = socketDirIsTemp,
+        shutdownMode = resolveShutdownMode config,
+        shutdownTimeoutSeconds = resolveShutdownTimeout config
       }
   where
     cleanupDirs :: Bool -> FilePath -> Bool -> FilePath -> IO ()
diff --git a/src/EphemeralPg/Config.hs b/src/EphemeralPg/Config.hs
--- a/src/EphemeralPg/Config.hs
+++ b/src/EphemeralPg/Config.hs
@@ -163,7 +163,7 @@
 
 -- | Default shutdown timeout in seconds.
 defaultShutdownTimeoutSeconds :: Int
-defaultShutdownTimeoutSeconds = 30
+defaultShutdownTimeoutSeconds = 5
 
 -- | Default PostgreSQL settings optimized for testing.
 --
@@ -221,7 +221,7 @@
       createDbArgs = [],
       connectionTimeoutSeconds = Last (Just defaultConnectionTimeoutSeconds),
       shutdownTimeoutSeconds = Last (Just defaultShutdownTimeoutSeconds),
-      shutdownMode = Last (Just ShutdownGraceful),
+      shutdownMode = Last (Just ShutdownFast),
       stdout = Last (Just Nothing), -- Discard by default
       stderr = Last (Just Nothing) -- Discard by default
     }
diff --git a/src/EphemeralPg/Database.hs b/src/EphemeralPg/Database.hs
--- a/src/EphemeralPg/Database.hs
+++ b/src/EphemeralPg/Database.hs
@@ -16,6 +16,7 @@
 import Data.Text (Text)
 import Data.Text qualified as T
 import Data.Word (Word16)
+import EphemeralPg.Config (ShutdownMode (..))
 import Hasql.Connection.Settings qualified as Settings
 import System.Posix.Types (CPid)
 import System.Process.Typed (Process)
@@ -56,7 +57,11 @@
     -- | Whether data directory is temporary
     dataDirIsTemp :: Bool,
     -- | Whether socket directory is temporary
-    socketDirIsTemp :: Bool
+    socketDirIsTemp :: Bool,
+    -- | How to shut down postgres (from config)
+    shutdownMode :: ShutdownMode,
+    -- | Timeout for shutdown in seconds (from config)
+    shutdownTimeoutSeconds :: Int
   }
 
 instance Show Database where
