diff --git a/Network/HTTP/Conduit/Browser2.hs b/Network/HTTP/Conduit/Browser2.hs
--- a/Network/HTTP/Conduit/Browser2.hs
+++ b/Network/HTTP/Conduit/Browser2.hs
@@ -96,6 +96,8 @@
     , getOverrideHeaders
     , setOverrideHeaders
     , withOverrideHeaders
+    , getOverrideHeader
+    , setOverrideHeader
     , insertOverrideHeader
     , deleteOverrideHeader
     , withOverrideHeader
@@ -364,10 +366,10 @@
 -- | Specifies Headers that should be added to 'Request',
 -- these will override Headers already specified in 'requestHeaders'.
 --
--- > do insertOverrideHeader ("User-Agent", "http-conduit")
+-- > do insertOverrideHeader ("User-Agent", "rat")
 -- >    insertOverrideHeader ("Connection", "keep-alive")
--- >    makeRequest def{requestHeaders = [("User-Agent", "another agent"), ("Accept", "everything/digestible")]}
--- > > User-Agent: http-conduit
+-- >    makeRequest def{requestHeaders = [("User-Agent", "kitten"), ("Accept", "everything/digestible")]}
+-- > > User-Agent: rat
 -- > > Accept: everything/digestible
 -- > > Connection: keep-alive
 getOverrideHeaders :: BrowserAction HT.RequestHeaders
@@ -384,16 +386,21 @@
   out <- b
   setOverrideHeaders current
   return out
+getOverrideHeader :: HT.HeaderName -> BrowserAction (Maybe BS.ByteString)
+getOverrideHeader b = get >>= \ a -> return $ Map.lookup b (overrideHeaders a)
+setOverrideHeader :: HT.HeaderName -> Maybe BS.ByteString -> BrowserAction ()
+setOverrideHeader b Nothing = deleteOverrideHeader b
+setOverrideHeader b (Just c) = insertOverrideHeader (b, c)
 insertOverrideHeader :: HT.Header -> BrowserAction ()
 insertOverrideHeader (b, c) = get >>= \ a -> put a {overrideHeaders = Map.insert b c (overrideHeaders a)}
 deleteOverrideHeader :: HT.HeaderName -> BrowserAction ()
 deleteOverrideHeader b = get >>= \ a -> put a {overrideHeaders = Map.delete b (overrideHeaders a)}
 withOverrideHeader :: HT.Header -> BrowserAction a -> BrowserAction a
-withOverrideHeader a b = do
-  current <- getOverrideHeaders
-  insertOverrideHeader a
-  out <- b
-  setOverrideHeaders current
+withOverrideHeader (a,b) c = do
+  current <- getOverrideHeader a
+  insertOverrideHeader (a,b)
+  out <- c
+  setOverrideHeader a current
   return out
 -- | What string to report our user-agent as.
 -- if Nothing will not send user-agent unless one is specified in 'Request'
@@ -407,10 +414,10 @@
 setUserAgent (Just b) = insertOverrideHeader (HT.hUserAgent, b)
 withUserAgent      :: Maybe BS.ByteString -> BrowserAction a -> BrowserAction a
 withUserAgent a b = do
-  current <- getOverrideHeaders
+  current <- getUserAgent
   setUserAgent a
   out <- b
-  setOverrideHeaders current
+  setUserAgent current
   return out
 -- | Function to check the status code. Note that this will run after all redirects are performed.
 -- if Nothing uses Request's 'checkStatus'
diff --git a/http-conduit-browser.cabal b/http-conduit-browser.cabal
--- a/http-conduit-browser.cabal
+++ b/http-conduit-browser.cabal
@@ -1,5 +1,5 @@
 name:            http-conduit-browser
-version:         1.6.3.1
+version:         1.6.4
 license:         BSD3
 license-file:    LICENSE
 author:          Myles C. Maxfield <myles.maxfield@gmail.com>
diff --git a/test/main.hs b/test/main.hs
--- a/test/main.hs
+++ b/test/main.hs
@@ -2,6 +2,8 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 import Test.Hspec
+import Control.Applicative
+import Control.Monad
 import Control.Exception (Exception, toException)
 import qualified Data.ByteString as S
 import Network.Wai hiding (requestBody)
@@ -185,6 +187,36 @@
                 if (lazyToStrict $ responseBody elbs) /= fromString "everything/digestible"
                      then error "Shouldn't have deleted Accept header!"
                      else return ()
+            it "withOverrideHeader: doesn't override additional headers" $ do
+                tid <- forkIO $ run 3012 app
+                request1 <- parseUrl "http://127.0.0.1:3012/accept"
+                request2 <- parseUrl "http://127.0.0.1:3012/useragent"
+                (bs1, bs2) <- withManager $ flip browse $ do
+                    insertOverrideHeader ("User-Agent", "another agent")
+                    withOverrideHeader ("User-Agent", "http-conduit") $
+                        insertOverrideHeader ("Accept", "everything/digestible")
+                    (,) <$> (lazyToStrict . responseBody <$> makeRequestLbs request1)
+                        <*> (lazyToStrict . responseBody <$> makeRequestLbs request2)
+                killThread tid
+                when (bs1 /= fromString "everything/digestible") $
+                    error "Shouldn't have deleted Accept header!"
+                when (bs2 /= "another agent") $
+                    error "Shouldn't have overriden user agent!"
+            it "withUserAgent: doesn't override additional headers" $ do
+                tid <- forkIO $ run 3012 app
+                request1 <- parseUrl "http://127.0.0.1:3012/accept"
+                request2 <- parseUrl "http://127.0.0.1:3012/useragent"
+                (bs1, bs2) <- withManager $ flip browse $ do
+                    setUserAgent $ Just "another agent"
+                    withUserAgent (Just "different agent") $
+                        insertOverrideHeader ("Accept", "everything/digestible")
+                    (,) <$> (lazyToStrict . responseBody <$> makeRequestLbs request1)
+                        <*> (lazyToStrict . responseBody <$> makeRequestLbs request2)
+                killThread tid
+                when (bs1 /= fromString "everything/digestible") $
+                    error "Shouldn't have deleted Accept header!"
+                when (bs2 /= "another agent") $
+                    error "Shouldn't have overriden user agent!"
             it "authorities get set correctly" $ do
                 tid <- forkIO $ run 3013 app
                 request <- parseUrl "http://127.0.0.1:3013/authorities"
