diff --git a/Network/HTTP/Conduit.hs b/Network/HTTP/Conduit.hs
--- a/Network/HTTP/Conduit.hs
+++ b/Network/HTTP/Conduit.hs
@@ -24,8 +24,8 @@
 -- > main = do
 -- >      request <- parseUrl "http://google.com/"
 -- >      withManager $ \manager -> do
--- >          Response _ _ _ src <- http request manager
--- >          src C.$$+- sinkFile "google.html"
+-- >          response <- http request manager
+-- >          responseBody response C.$$+- sinkFile "google.html"
 --
 -- The following headers are automatically set by this module, and should not
 -- be added to 'requestHeaders':
@@ -156,6 +156,7 @@
     , managerConnCount
     , managerCheckCerts
     , managerCertStore
+    , managerResponseTimeout
       -- *** Defaults
     , defaultCheckCerts
       -- * Cookies
@@ -290,7 +291,7 @@
         Nothing -> return (req', def)
     (timeout', (connRelease, ci, isManaged)) <- getConnectionWrapper
         req
-        (responseTimeout req)
+        (responseTimeout' req)
         (failedConnectionException req)
         (getConn req m)
     let src = connSource ci
@@ -321,12 +322,19 @@
             Nothing -> return res
   where
 
+    responseTimeout' req
+        | rt == useDefaultTimeout = mResponseTimeout m
+        | otherwise = rt
+      where
+        rt = responseTimeout req
+
     -- Exceptions for which we should retry our request if we were reusing an
     -- already open connection. In the case of IOExceptions, for example, we
     -- assume that the connection was closed on the server and therefore open a
     -- new one.
-    isRetryableException e =
-        case fromException e of
+    isRetryableException e
+        | ((fromException e)::(Maybe TLS.TLSError))==Just TLS.Error_EOF = True
+        | otherwise = case fromException e of
             Just (_ :: IOException) -> True
             _ ->
                 case fromException e of
diff --git a/Network/HTTP/Conduit/Manager.hs b/Network/HTTP/Conduit/Manager.hs
--- a/Network/HTTP/Conduit/Manager.hs
+++ b/Network/HTTP/Conduit/Manager.hs
@@ -5,6 +5,7 @@
 {-# LANGUAGE BangPatterns #-}
 module Network.HTTP.Conduit.Manager
     ( Manager
+    , mResponseTimeout
     , ManagerSettings (..)
     , ConnKey (..)
     , ConnHost (..)
@@ -75,6 +76,13 @@
       -- ^ Check if the server certificate is valid. Only relevant for HTTPS.
     , managerCertStore :: IO CertificateStore
       -- ^ Load up the certificate store. By default uses the system store.
+    , managerResponseTimeout :: Maybe Int
+      -- ^ Default timeout (in microseconds) to be applied to requests which do
+      -- not provide a timeout value.
+      --
+      -- Default is 5 seconds
+      --
+      -- Since 1.9.3
     }
 
 type X509Encoded = L.ByteString
@@ -84,6 +92,7 @@
         { managerConnCount = 10
         , managerCheckCerts = defaultCheckCerts
         , managerCertStore = getSystemCertificateStore
+        , managerResponseTimeout = Just 5000000
         }
 
 -- | Check certificates using the operating system's certificate checker.
@@ -105,6 +114,8 @@
     , mCertCache :: !(I.IORef (Map.Map S8.ByteString (Map.Map X509Encoded UTCTime)))
     -- ^ Cache of validated certificates. The @UTCTime@ gives the expiration
     -- time for the validity of the certificate. The @Ascii@ is the hostname.
+    , mResponseTimeout :: !(Maybe Int)
+    -- ^ Copied from 'managerResponseTimeout'
     }
 
 data NonEmptyList a =
@@ -174,7 +185,13 @@
     mapRef <- I.newIORef (Just Map.empty)
     certCache <- I.newIORef Map.empty
     _ <- forkIO $ reap mapRef certCache
-    return $ Manager mapRef (managerConnCount ms) (\x y -> getCertStore >>= \cs -> managerCheckCerts ms cs x y) certCache
+    return Manager
+        { mConns = mapRef
+        , mMaxConns = managerConnCount ms
+        , mCheckCerts = \x y -> getCertStore >>= \cs -> managerCheckCerts ms cs x y
+        , mCertCache = certCache
+        , mResponseTimeout = managerResponseTimeout ms
+        }
 
 -- | Collect and destroy any stale connections.
 reap :: I.IORef (Maybe (Map.Map ConnKey (NonEmptyList ConnInfo)))
@@ -286,8 +303,12 @@
     (_, manager) <- allocate (newManager s) closeManager
     f manager
 
--- | Close all connections in a 'Manager'. Afterwards, the
--- 'Manager' can be reused if desired.
+-- | Close all connections in a 'Manager'. Afterwards, the 'Manager'
+-- can be reused if desired.
+--
+-- Note that this doesn't affect currently in-flight connections,
+-- meaning you can safely use it without hurting any queries you may
+-- have concurrently running.
 closeManager :: Manager -> IO ()
 closeManager manager = mask_ $ do
     m <- I.atomicModifyIORef (mConns manager) $ \x -> (Nothing, x)
diff --git a/Network/HTTP/Conduit/Request.hs b/Network/HTTP/Conduit/Request.hs
--- a/Network/HTTP/Conduit/Request.hs
+++ b/Network/HTTP/Conduit/Request.hs
@@ -21,6 +21,7 @@
     , urlEncodedBody
     , needsGunzip
     , requestBuilder
+    , useDefaultTimeout
     ) where
 
 import Data.Maybe (fromMaybe, isJust)
@@ -157,6 +158,13 @@
         , "}"
         ]
 
+-- | Magic value to be placed in a 'Request' to indicate that we should use the
+-- timeout value in the @Manager@.
+--
+-- Since 1.9.3
+useDefaultTimeout :: Maybe Int
+useDefaultTimeout = Just (-3425)
+
 instance Default (Request m) where
     def = Request
         { host = "localhost"
@@ -178,7 +186,7 @@
             if 200 <= sci && sci < 300
                 then Nothing
                 else Just $ toException $ StatusCodeException s hs cookie_jar
-        , responseTimeout = Just 5000000
+        , responseTimeout = useDefaultTimeout
         , getConnectionWrapper = \mtimeout exc f ->
             case mtimeout of
                 Nothing -> fmap ((,) Nothing) f
diff --git a/http-conduit.cabal b/http-conduit.cabal
--- a/http-conduit.cabal
+++ b/http-conduit.cabal
@@ -1,5 +1,5 @@
 name:            http-conduit
-version:         1.9.2.2
+version:         1.9.3
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
diff --git a/test/main.hs b/test/main.hs
--- a/test/main.hs
+++ b/test/main.hs
@@ -285,6 +285,18 @@
             res <- withManager $ httpLbs req
             responseBody res @?= "homepage for example.com"
 
+    describe "managerResponseTimeout" $ do
+        it "works" $ withApp app $ \port -> do
+            req1 <- parseUrl $ "http://localhost:" ++ show port
+            let req2 = req1 { responseTimeout = Just 5000000 }
+            withManagerSettings def { managerResponseTimeout = Just 1 } $ \man -> do
+                eres1 <- try $ httpLbs req1 man
+                case eres1 of
+                    Left (FailedConnectionException _ _) -> return ()
+                    _ -> error "Did not time out"
+                _ <- httpLbs req2 man
+                return ()
+
 withCApp :: Data.Conduit.Network.Application IO -> (Int -> IO ()) -> IO ()
 withCApp app' f = do
     port <- getPort
