diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,3 +25,7 @@
   Add temporaryDirectoryL
   #31 A silent defaults
   #20 Include stderr in errors
+
+1.11.0.0
+  #90 Extend generated config to provide default Handles and connection timeout.
+  #81 Create public Config module for better documentation organization.
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
@@ -62,11 +62,13 @@
   , toConnectionOptions
   , toDataDirectory
   , toTemporaryDirectory
-  -- ** 'DB' mutators
+  -- ** 'DB' modifiers
   , makeDataDirPermanent
   , reloadConfig
   -- ** 'DB' debugging
   , prettyPrintDB
+  -- * Errors
+  , StartError (..)
   -- * Configuration
   -- ** Defaults
   , defaultConfig
@@ -77,57 +79,10 @@
   -- ** Custom Config builder helpers
   , optionsToDefaultConfig
   -- ** 'Config'
-  , Config (..)
-  , prettyPrintConfig
-    -- *** 'Config' Lenses
-  , planL
-  , socketClassL
-  , dataDirectoryL
-  , portL
-  , connectionTimeoutL
-  -- ** 'Plan'
-  , Plan (..)
-  -- *** 'Plan' lenses
-  , postgresConfigFileL
-  , createDbConfigL
-  , dataDirectoryStringL
-  , initDbConfigL
-  , loggerL
-  , postgresPlanL
-  -- ** 'PostgresPlan'
-  , PostgresPlan (..)
-  -- *** 'PostgresPlan' lenses
-  , connectionOptionsL
-  , postgresConfigL
-  -- ** 'ProcessConfig'
-  , ProcessConfig (..)
-  -- *** 'ProcessConfig' Lenses
-  , commandLineL
-  , environmentVariablesL
-  , stdErrL
-  , stdInL
-  , stdOutL
-  -- ** 'EnvironmentVariables'
-  , EnvironmentVariables (..)
-  -- *** 'EnvironmentVariables' Lenses
-  , inheritL
-  , specificL
-  -- ** 'CommandLineArgs'
-  , CommandLineArgs (..)
-  -- *** 'CommandLineArgs' Lenses
-  , indexBasedL
-  , keyBasedL
-  -- ** 'DirectoryType'
-  , DirectoryType (..)
-  -- ** 'SocketClass'
-  , SocketClass (..)
-  -- ** 'Logger'
-  , Logger
-  -- * Internal events passed to the 'logger' .
-  , Event (..)
-    -- * Errors
-  , StartError (..)
+  , module Database.Postgres.Temp.Config
   ) where
 import Database.Postgres.Temp.Internal
 import Database.Postgres.Temp.Internal.Core
+import Database.Postgres.Temp.Config
 import Database.Postgres.Temp.Internal.Config
+  (standardProcessConfig, silentProcessConfig)
diff --git a/src/Database/Postgres/Temp/Config.hs b/src/Database/Postgres/Temp/Config.hs
new file mode 100644
--- /dev/null
+++ b/src/Database/Postgres/Temp/Config.hs
@@ -0,0 +1,66 @@
+{-| This module provides types and functions for combining partial
+    configs into a complete configs to ultimately make a 'CompletePlan'.
+
+    This module has two classes of types.
+
+    Types like 'ProcessConfig' that could be used by any
+    library that  needs to combine process options.
+
+    Finally it has types and functions for creating 'CompletePlan's that
+    use temporary resources. This is used to create the default
+    behavior of 'Database.Postgres.Temp.startConfig' and related
+    functions.
+|-}
+module Database.Postgres.Temp.Config
+  ( Config (..)
+  , prettyPrintConfig
+    -- *** 'Config' Lenses
+  , planL
+  , socketClassL
+  , dataDirectoryL
+  , portL
+  , connectionTimeoutL
+  -- ** 'Plan'
+  , Plan (..)
+  -- *** 'Plan' lenses
+  , postgresConfigFileL
+  , createDbConfigL
+  , dataDirectoryStringL
+  , initDbConfigL
+  , loggerL
+  , postgresPlanL
+  -- ** 'PostgresPlan'
+  , PostgresPlan (..)
+  -- *** 'PostgresPlan' lenses
+  , connectionOptionsL
+  , postgresConfigL
+  -- ** 'ProcessConfig'
+  , ProcessConfig (..)
+  -- *** 'ProcessConfig' Lenses
+  , commandLineL
+  , environmentVariablesL
+  , stdErrL
+  , stdInL
+  , stdOutL
+  -- ** 'EnvironmentVariables'
+  , EnvironmentVariables (..)
+  -- *** 'EnvironmentVariables' Lenses
+  , inheritL
+  , specificL
+  -- ** 'CommandLineArgs'
+  , CommandLineArgs (..)
+  -- *** 'CommandLineArgs' Lenses
+  , indexBasedL
+  , keyBasedL
+  -- ** 'DirectoryType'
+  , DirectoryType (..)
+  -- ** 'SocketClass'
+  , SocketClass (..)
+  -- ** 'Logger'
+  , Logger
+  -- * Internal events passed to the 'logger' .
+  , Event (..)
+  ) where
+import Database.Postgres.Temp.Internal.Config
+import Database.Postgres.Temp.Internal.Core
+import Database.Postgres.Temp.Internal
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
@@ -122,17 +122,15 @@
 your @postgres@ might start and run faster if you use
 'defaultConfig'.
 
-'defaultConfig' also sets the 'initDbConfig' to
-'pure' 'standardProcessConfig' and
-'postgresConfig' to 'standardProcessConfig'.
+The 'defaultConfig' also disables the logging of internal 'Event's.
 
 To append additional lines to \"postgresql.conf\" file create a
 custom 'Config' like the following.
 
  @
   custom = defaultConfig <> mempty
-    { plan = mempty
-      { postgresConfigFile =
+    { 'plan' = mempty
+      { 'postgresConfigFile' =
           [ "wal_level = replica"
           , "archive_mode = on"
           , "max_wal_senders = 2"
@@ -146,7 +144,7 @@
 Or using the provided lenses and your favorite lens library
 
  @
-  custom = defaultConfig & 'planL' . 'postgresConfigFile' <>~
+  custom = defaultConfig & 'planL' . 'postgresConfigFile' '<>~'
     [ "wal_level = replica"
     , "archive_mode = on"
     , "max_wal_senders = 2"
@@ -164,18 +162,14 @@
 defaultConfig :: Config
 defaultConfig = mempty
   { plan = mempty
-    { connectionTimeout = pure (60 * 1000000) -- 1 minute
-    , logger = pure mempty
+    { logger = pure mempty
     , postgresConfigFile = defaultPostgresConfig
     , createDbConfig = Nothing
-    , initDbConfig = pure standardProcessConfig
+    , initDbConfig = pure mempty
       { commandLine = mempty
-          { keyBased = Map.singleton "--no-sync" Nothing
-          }
-      }
-    , postgresPlan = mempty
-        { postgresConfig = standardProcessConfig
+        { keyBased = Map.singleton "--no-sync" Nothing
         }
+      }
     }
   }
 
@@ -184,9 +178,9 @@
    \"postgresql.conf\" lines. Equivalent to
 
 @
-defaultPostgresConf extra = defaultConfig <> mempty
-  { plan = mempty
-    { postgresConfigFile = extra
+'defaultPostgresConf' extra = 'defaultConfig' <> mempty
+  { 'plan' = mempty
+    { 'postgresConfigFile' = extra
     }
   }
 @
@@ -194,7 +188,7 @@
 or with lenses
 
 @
-defaultPostgresConf extra = defaultConfig & planL . postgresConfigFile <>~ extra
+'defaultPostgresConf' extra = 'defaultConfig' & 'planL' . 'postgresConfigFile' '<>~' extra
 @
 
 -}
@@ -205,7 +199,7 @@
     }
   }
 
--- | The same as 'defaultConfig' but all the handles are set to \"/dev/null\".
+-- | The same as 'defaultConfig' but all the handles are set to \"\/dev\/null\".
 --   See 'silentProcessConfig' as well.
 silentConfig :: Config
 silentConfig = defaultConfig <> mempty
@@ -254,6 +248,14 @@
  @
 
 are added.
+
+Additionally the @generated@ `Config` also does the following:
+* Sets a `connectionTimeout` of one minute.
+* Logs internal `Event`s.
+* Sets the processes to use the standard input and output handles.
+* Sets the 'dataDirectoryString' to file path generated from 'dataDirectory'
+
+All of these values can be overrided by the @extra@ config.
 
 -}
 startConfig :: Config
diff --git a/src/Database/Postgres/Temp/Internal/Config.hs b/src/Database/Postgres/Temp/Internal/Config.hs
--- a/src/Database/Postgres/Temp/Internal/Config.hs
+++ b/src/Database/Postgres/Temp/Internal/Config.hs
@@ -195,7 +195,7 @@
 devNull = unsafePerformIO (openFile "/dev/null" WriteMode)
 {-# NOINLINE devNull #-}
 
--- | 'silentProcessConfig' sets the handles to \"/dev/null\" and
+-- | 'silentProcessConfig' sets the handles to \"\/dev\/null\" and
 --   inherits the environment variables from the calling process
 silentProcessConfig :: ProcessConfig
 silentProcessConfig = mempty
@@ -347,8 +347,12 @@
   CIpSocket ip    -> ip
   CUnixSocket dir -> toFilePath dir
 
--- | The monoidial version of 'CompleteSocketClass'. Used to combine overrides with
---   defaults when creating a 'CompleteSocketClass'. The monoid instance  and combines the
+-- | 'SocketClass' is used to specify how @postgres@ should listen for connections
+--   The two main options are a `IpSocket` which takes a hostname or IP address.
+--   if not is given the default it "127.0.0.1". Alternatively one can
+--   specify 'UnixSocket' for a UNIX domain socket. If a directory is
+--   specified the socket will live in that folder. Otherwise a
+--   temporary folder will get created for the socket.
 data SocketClass
   = IpSocket (Last String)
   -- ^ The monoid for combining IP address configuration
@@ -370,7 +374,7 @@
     (UnixSocket _, a@(IpSocket _)) -> a
     (UnixSocket a, UnixSocket b) -> UnixSocket $ a <> b
 
--- | Treats 'UnixSocket mempty' as 'mempty'
+-- | Treats 'UnixSocket' 'mempty' as 'mempty'
 instance Monoid SocketClass where
  mempty = UnixSocket mempty
 
@@ -505,7 +509,7 @@
   -- ^ Override the default 'CompleteSocketClass' by setting this.
   , dataDirectory :: DirectoryType
   -- ^ Override the default temporary data directory by passing in
-  -- 'CPermanent DIRECTORY'
+  -- 'Permanent' @DIRECTORY@
   , port    :: Last (Maybe Int)
   -- ^ A monoid for using an existing port (via 'Just' @PORT_NUMBER@) or
   -- requesting a free port (via a 'Nothing')
@@ -554,8 +558,10 @@
 toPlan makeInitDb makeCreateDb port socketClass dataDirectoryString = mempty
   { postgresConfigFile = socketClassToConfig socketClass
   , dataDirectoryString = pure dataDirectoryString
+  , connectionTimeout = pure (60 * 1000000) -- 1 minute
+  , logger = pure print
   , postgresPlan = mempty
-      { postgresConfig = mempty
+      { postgresConfig = standardProcessConfig
           { commandLine = mempty
               { keyBased = Map.fromList
                   [ ("-p", Just $ show port)
@@ -570,7 +576,7 @@
           }
       }
   , createDbConfig = if makeCreateDb
-      then pure $ mempty
+      then pure $ standardProcessConfig
         { commandLine = mempty
             { keyBased = Map.fromList $
                 socketClassToHostFlag socketClass <>
@@ -579,7 +585,7 @@
         }
       else Nothing
   , initDbConfig = if makeInitDb
-      then pure $ mempty
+      then pure $ standardProcessConfig
         { commandLine = mempty
             { keyBased = Map.fromList
                 [("--pgdata=", Just dataDirectoryString)]
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.10.0.0
+version:             1.11.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
@@ -17,6 +17,7 @@
 library
   hs-source-dirs: src
   exposed-modules: Database.Postgres.Temp
+                 , Database.Postgres.Temp.Config
                  , Database.Postgres.Temp.Internal
                  , Database.Postgres.Temp.Internal.Core
                  , Database.Postgres.Temp.Internal.Config
