diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,10 @@
+## 0.4.29
+
+* Changed the order of connecting a socket and tweaking a socket, such that the socket tweaking callback now happen before connecting.
+* add setRequestIgnoreStatus [#201](https://github.com/snoyberg/http-client/pull/201)
+* Added missing Host: HTTP header for https CONNECT [#192](https://github.com/snoyberg/http-client/pull/192)
+* Fix: Redirects will be followed in httpRaw' when reusing a dead connection [#195](https://github.com/snoyberg/http-client/issues/195)
+
 ## 0.4.28
 
 * Add support for including request method in URL
diff --git a/Network/HTTP/Client.hs b/Network/HTTP/Client.hs
--- a/Network/HTTP/Client.hs
+++ b/Network/HTTP/Client.hs
@@ -132,6 +132,7 @@
     , applyBasicAuth
     , urlEncodedBody
     , getUri
+    , setRequestIgnoreStatus
     , setQueryString
       -- ** Request type and fields
     , Request
diff --git a/Network/HTTP/Client/Connection.hs b/Network/HTTP/Client/Connection.hs
--- a/Network/HTTP/Client/Connection.hs
+++ b/Network/HTTP/Client/Connection.hs
@@ -41,7 +41,7 @@
     go bs0 id 0
   where
     go bs front total =
-        case S.breakByte charLF bs of
+        case S.break (== charLF) bs of
             (_, "") -> do
                 let total' = total + S.length bs
                 when (total' > 4096) $ throwIO OverlongHeaders
@@ -165,8 +165,8 @@
             (NS.sClose)
             (\sock -> do
                 NS.setSocketOption sock NS.NoDelay 1
-                NS.connect sock (NS.addrAddress addr)
                 tweakSocket sock
+                NS.connect sock (NS.addrAddress addr)
                 socketConnection sock chunksize)
 
 firstSuccessful :: [NS.AddrInfo] -> (NS.AddrInfo -> IO a) -> IO a
diff --git a/Network/HTTP/Client/Cookies.hs b/Network/HTTP/Client/Cookies.hs
--- a/Network/HTTP/Client/Cookies.hs
+++ b/Network/HTTP/Client/Cookies.hs
@@ -47,7 +47,7 @@
             Just (i, x') | BS.null x' && i >= 0 && i < 256 -> go (rest - 1) y
             _ -> False
       where
-        (x, y') = BS.breakByte 46 bs -- period
+        (x, y') = BS.break (== 46) bs -- period
         y = BS.drop 1 y'
 
 -- | This corresponds to the subcomponent algorithm entitled \"Domain Matching\" detailed
diff --git a/Network/HTTP/Client/Core.hs b/Network/HTTP/Client/Core.hs
--- a/Network/HTTP/Client/Core.hs
+++ b/Network/HTTP/Client/Core.hs
@@ -113,8 +113,7 @@
         -- Connection was reused, and might have been closed. Try again
         (Left e, Reused) | mRetryableException m e -> do
             connRelease DontReuse
-            res <- responseOpen req m
-            return (req, res)
+            httpRaw' req m
         -- Not reused, or a non-retry, so this is a real exception
         (Left e, _) -> throwIO e
         -- Everything went ok, so the connection is good. If any exceptions get
diff --git a/Network/HTTP/Client/Headers.hs b/Network/HTTP/Client/Headers.hs
--- a/Network/HTTP/Client/Headers.hs
+++ b/Network/HTTP/Client/Headers.hs
@@ -61,8 +61,8 @@
     parseStatus :: Int -> S.ByteString -> IO (Status, HttpVersion)
     parseStatus i bs | S.null bs && i > 0 = connectionReadLine conn >>= parseStatus (i - 1)
     parseStatus _ bs = do
-        let (ver, bs2) = S.breakByte charSpace bs
-            (code, bs3) = S.breakByte charSpace $ S.dropWhile (== charSpace) bs2
+        let (ver, bs2) = S.break (== charSpace) bs
+            (code, bs3) = S.break (== charSpace) $ S.dropWhile (== charSpace) bs2
             msg = S.dropWhile (== charSpace) bs3
         case (,) <$> parseVersion ver <*> readInt code of
             Just (ver', code') -> return (Status code' msg, ver')
@@ -73,7 +73,7 @@
         | otherwise = Nothing
     parseVersion bs0 = do
         bs1 <- stripPrefixBS "HTTP/" bs0
-        let (num1, S.drop 1 -> num2) = S.breakByte charPeriod bs1
+        let (num1, S.drop 1 -> num2) = S.break (== charPeriod) bs1
         HttpVersion <$> readInt num1 <*> readInt num2
 
     readInt bs =
@@ -92,7 +92,7 @@
 
     parseHeader :: S.ByteString -> IO Header
     parseHeader bs = do
-        let (key, bs2) = S.breakByte charColon bs
+        let (key, bs2) = S.break (== charColon) bs
         when (S.null bs2) $ throwIO $ InvalidHeader bs
         return (CI.mk $! strip key, strip $! S.drop 1 bs2)
 
diff --git a/Network/HTTP/Client/Manager.hs b/Network/HTTP/Client/Manager.hs
--- a/Network/HTTP/Client/Manager.hs
+++ b/Network/HTTP/Client/Manager.hs
@@ -434,6 +434,7 @@
                 let ultHost = host req
                     ultPort = port req
                     proxyAuthorizationHeader = maybe "" (\h -> S8.concat ["Proxy-Authorization: ", h, "\r\n"]) . lookup "Proxy-Authorization" $ requestHeaders req
+                    hostHeader = S8.concat ["Host: ", ultHost, (S8.pack $ show ultPort), "\r\n"]
                     connstr = S8.concat
                         [ "CONNECT "
                         , ultHost
@@ -441,6 +442,7 @@
                         , S8.pack $ show ultPort
                         , " HTTP/1.1\r\n"
                         , proxyAuthorizationHeader
+                        , hostHeader
                         , "\r\n"
                         ]
                     parse conn = do
diff --git a/Network/HTTP/Client/Request.hs b/Network/HTTP/Client/Request.hs
--- a/Network/HTTP/Client/Request.hs
+++ b/Network/HTTP/Client/Request.hs
@@ -20,6 +20,7 @@
     , needsGunzip
     , requestBuilder
     , useDefaultTimeout
+    , setRequestIgnoreStatus
     , setQueryString
     , streamFile
     , observedStreamFile
@@ -468,6 +469,13 @@
         <> fromByteString ": "
         <> fromByteString v
         <> fromByteString "\r\n"
+
+-- | Modify the request so that non-2XX status codes do not generate a runtime
+-- 'StatusCodeException'.
+--
+-- @since 0.4.29
+setRequestIgnoreStatus :: Request -> Request
+setRequestIgnoreStatus req = req { checkStatus = \_ _ _ -> Nothing }
 
 -- | Set the query string to the given key/value pairs.
 --
diff --git a/http-client.cabal b/http-client.cabal
--- a/http-client.cabal
+++ b/http-client.cabal
@@ -1,5 +1,5 @@
 name:                http-client
-version:             0.4.28
+version:             0.4.29
 synopsis:            An HTTP client engine, intended as a base layer for more user-friendly packages.
 description:         Hackage documentation generation is not reliable. For up to date documentation, please see: <http://www.stackage.org/package/http-client>.
 homepage:            https://github.com/snoyberg/http-client
diff --git a/publicsuffixlist/Network/PublicSuffixList/Serialize.hs b/publicsuffixlist/Network/PublicSuffixList/Serialize.hs
--- a/publicsuffixlist/Network/PublicSuffixList/Serialize.hs
+++ b/publicsuffixlist/Network/PublicSuffixList/Serialize.hs
@@ -35,7 +35,7 @@
 getText bs0 =
     (TE.decodeUtf8 v, BS.drop 1 bs1)
   where
-    (v, bs1) = BS.breakByte 0 bs0
+    (v, bs1) = BS.break (== 0) bs0
 
 getDataStructure :: BS.ByteString -> DataStructure
 getDataStructure bs0 =
