diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,18 @@
 [The latest version of this document is on GitHub.](https://github.com/haskell-servant/servant/blob/master/servant-client/CHANGELOG.md)
 [Changelog for `servant` package contains significant entries for all core packages.](https://github.com/haskell-servant/servant/blob/master/servant/CHANGELOG.md)
 
+0.18.3
+------
+
+### Significant changes
+
+- Add response header support to UVerb (#1420)
+
+### Other changes
+
+- Support GHC-9.0.1.
+- Bump `bytestring`, `hspec`, `http-client` and `QuickCheck` dependencies.
+
 0.18.2
 ------
 
diff --git a/servant-client.cabal b/servant-client.cabal
--- a/servant-client.cabal
+++ b/servant-client.cabal
@@ -1,6 +1,6 @@
 cabal-version:       >=1.10
 name:                servant-client
-version:             0.18.2
+version:             0.18.3
 
 synopsis:            Automatic derivation of querying functions for servant
 category:            Servant, Web
@@ -20,7 +20,7 @@
 maintainer:          haskell-servant-maintainers@googlegroups.com
 copyright:           2014-2016 Zalora South East Asia Pte Ltd, 2016-2019 Servant Contributors
 build-type:          Simple
-tested-with: GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.2
+tested-with: GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.2 || ==9.0.1
 
 extra-source-files:
   CHANGELOG.md
@@ -40,8 +40,8 @@
   -- Bundled with GHC: Lower bound to not force re-installs
   -- text and mtl are bundled starting with GHC-8.4
   build-depends:
-      base                  >= 4.9      && < 4.15
-    , bytestring            >= 0.10.8.1 && < 0.11
+      base                  >= 4.9      && < 4.16
+    , bytestring            >= 0.10.8.1 && < 0.12
     , containers            >= 0.5.7.1  && < 0.7
     , deepseq               >= 1.4.2.0  && < 1.5
     , mtl                   >= 2.2.2    && < 2.3
@@ -58,13 +58,13 @@
   -- Strict dependency on `servant-client-core` as we re-export things.
   build-depends:
       servant               == 0.18.*
-    , servant-client-core   >= 0.18.2 && <0.18.3
+    , servant-client-core   >= 0.18.3 && <0.18.4
 
   -- Other dependencies: Lower bound around what is in the latest Stackage LTS.
   -- Here can be exceptions if we really need features from the newer versions.
   build-depends:
       base-compat           >= 0.10.5   && < 0.12
-    , http-client           >= 0.5.13.1 && < 0.7
+    , http-client           >= 0.5.13.1 && < 0.8
     , http-media            >= 0.7.1.3  && < 0.9
     , http-types            >= 0.12.2   && < 0.13
     , exceptions            >= 0.10.0   && < 0.11
@@ -119,16 +119,16 @@
   -- Additional dependencies
   build-depends:
       entropy           >= 0.4.1.3  && < 0.5
-    , hspec             >= 2.6.0    && < 2.8
+    , hspec             >= 2.6.0    && < 2.9
     , HUnit             >= 1.6.0.0  && < 1.7
     , network           >= 2.8.0.0  && < 3.2
-    , QuickCheck        >= 2.12.6.1 && < 2.14
+    , QuickCheck        >= 2.12.6.1 && < 2.15
     , servant           == 0.18.*
     , servant-server    == 0.18.*
     , tdigest           >= 0.2     && < 0.3
 
   build-tool-depends:
-    hspec-discover:hspec-discover >= 2.6.0 && < 2.8
+    hspec-discover:hspec-discover >= 2.6.0 && < 2.9
 
 test-suite readme
   type:           exitcode-stdio-1.0
diff --git a/test/Servant/ClientTestUtils.hs b/test/Servant/ClientTestUtils.hs
--- a/test/Servant/ClientTestUtils.hs
+++ b/test/Servant/ClientTestUtils.hs
@@ -32,6 +32,7 @@
                  (chr, isPrint)
 import           Data.Monoid ()
 import           Data.Proxy
+import           Data.SOP
 import           Data.Text
                  (Text)
 import qualified Data.Text                        as Text
@@ -121,6 +122,7 @@
             ReqBody '[JSON] [(String, [Rational])] :>
             Get '[JSON] (String, Maybe Int, Bool, [(String, [Rational])])
   :<|> "headers" :> Get '[JSON] (Headers TestHeaders Bool)
+  :<|> "uverb-headers" :> UVerb 'GET '[JSON] '[ WithStatus 200 (Headers TestHeaders Bool), WithStatus 204 String ]
   :<|> "deleteContentType" :> DeleteNoContent
   :<|> "redirectWithCookie" :> Raw
   :<|> "empty" :> EmptyAPI
@@ -150,6 +152,7 @@
 getMultiple     :: String -> Maybe Int -> Bool -> [(String, [Rational])]
   -> ClientM (String, Maybe Int, Bool, [(String, [Rational])])
 getRespHeaders  :: ClientM (Headers TestHeaders Bool)
+getUVerbRespHeaders  :: ClientM (Union '[ WithStatus 200 (Headers TestHeaders Bool), WithStatus 204 String ])
 getDeleteContentType :: ClientM NoContent
 getRedirectWithCookie :: HTTP.Method -> ClientM Response
 uverbGetSuccessOrRedirect :: Bool
@@ -172,6 +175,7 @@
   :<|> getRawFailure
   :<|> getMultiple
   :<|> getRespHeaders
+  :<|> getUVerbRespHeaders
   :<|> getDeleteContentType
   :<|> getRedirectWithCookie
   :<|> EmptyClient
@@ -198,6 +202,7 @@
   :<|> (Tagged $ \ _request respond -> respond $ Wai.responseLBS HTTP.badRequest400 [] "rawFailure")
   :<|> (\ a b c d -> return (a, b, c, d))
   :<|> (return $ addHeader 1729 $ addHeader "eg2" True)
+  :<|> (pure . Z . I . WithStatus $ addHeader 1729 $ addHeader "eg2" True)
   :<|> return NoContent
   :<|> (Tagged $ \ _request respond -> respond $ Wai.responseLBS HTTP.found302 [("Location", "testlocation"), ("Set-Cookie", "testcookie=test")] "")
   :<|> emptyServer
diff --git a/test/Servant/SuccessSpec.hs b/test/Servant/SuccessSpec.hs
--- a/test/Servant/SuccessSpec.hs
+++ b/test/Servant/SuccessSpec.hs
@@ -32,6 +32,7 @@
 import           Data.Maybe
                  (listToMaybe)
 import           Data.Monoid ()
+import           Data.SOP (NS (..), I (..))
 import           Data.Text
                  (Text)
 import qualified Network.HTTP.Client                as C
@@ -128,6 +129,14 @@
       case res of
         Left e -> assertFailure $ show e
         Right val -> getHeaders val `shouldBe` [("X-Example1", "1729"), ("X-Example2", "eg2")]
+
+    it "Returns headers on UVerb requests" $ \(_, baseUrl) -> do
+      res <- runClient getUVerbRespHeaders baseUrl
+      case res of
+        Left e -> assertFailure $ show e
+        Right (Z (I (WithStatus val))) ->
+          getHeaders val `shouldBe` [("X-Example1", "1729"), ("X-Example2", "eg2")]
+        Right (S _) -> assertFailure "expected first alternative of union"
 
     it "Stores Cookie in CookieJar after a redirect" $ \(_, baseUrl) -> do
       mgr <- C.newManager C.defaultManagerSettings
