diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,19 @@
+0.3
+---
+- Change `header`, `hasHeader` and `lookupHeader` to use `HeaderName` instead
+  of `ByteString` for the lookup key.
+
+0.2.1
+-----
+- Update WAI version bounds to include 2.1
+
+0.2
+---
+- Rename `getRequest` predicate to `request` and `request` method of
+  `HasRequest` to `getRequest`.
+- Add `MonadTrans` and `MonadIO` instance declarations for `ResultT` and
+  some helper functions.
+
+0.1
+---
+- Initial release.
diff --git a/src/Network/Wai/Predicate.hs b/src/Network/Wai/Predicate.hs
--- a/src/Network/Wai/Predicate.hs
+++ b/src/Network/Wai/Predicate.hs
@@ -28,13 +28,13 @@
 
 import Data.ByteString (ByteString)
 import Data.ByteString.From
-import Data.CaseInsensitive (mk)
+import Data.CaseInsensitive (original)
 import Data.List (find)
 import Data.Monoid
 import Data.Maybe (isJust)
 import Data.Predicate
 import Data.Word
-import Network.HTTP.Types.Status
+import Network.HTTP.Types
 import Network.Wai.Predicate.Accept
 import Network.Wai.Predicate.Content
 import Network.Wai.Predicate.Error
@@ -57,16 +57,16 @@
         then Fail (err status400 ("Missing query '" <> k <> "'."))
         else return ()
 
-header :: (HasHeaders r, FromByteString a) => ByteString -> Predicate r Error a
+header :: (HasHeaders r, FromByteString a) => HeaderName -> Predicate r Error a
 header k r = case lookupHeader k r of
-    [] -> Fail (err status400 ("Missing header '" <> k <> "'."))
+    [] -> Fail (err status400 ("Missing header '" <> original k <> "'."))
     hh -> either (Fail . err status400) return (readValues hh)
 
-hasHeader :: (HasHeaders r) => ByteString -> Predicate r Error ()
+hasHeader :: (HasHeaders r) => HeaderName -> Predicate r Error ()
 hasHeader k r =
-    if isJust $ find ((mk k ==) . fst) (headers r)
+    if isJust $ find ((k ==) . fst) (headers r)
         then return ()
-        else Fail (err status400 ("Missing header '" <> k <> "'."))
+        else Fail (err status400 ("Missing header '" <> original k <> "'."))
 
 segment :: (HasPath r, FromByteString a) => Word -> Predicate r Error a
 segment i r = case lookupSegment i r of
diff --git a/src/Network/Wai/Predicate/Parser/MediaType.hs b/src/Network/Wai/Predicate/Parser/MediaType.hs
--- a/src/Network/Wai/Predicate/Parser/MediaType.hs
+++ b/src/Network/Wai/Predicate/Parser/MediaType.hs
@@ -13,6 +13,7 @@
 import Data.Attoparsec.Char8
 import Data.ByteString (ByteString)
 import Data.List (sortBy)
+import Network.HTTP.Types
 import Network.Wai.Predicate.Request
 
 import qualified Data.ByteString.Char8 as C
@@ -24,7 +25,7 @@
     , medParams  :: ![(ByteString, ByteString)]
     } deriving (Eq, Show)
 
-readMediaTypes :: (HasHeaders r) => ByteString -> r -> [MediaType]
+readMediaTypes :: (HasHeaders r) => HeaderName -> r -> [MediaType]
 readMediaTypes k r =
     sortBy q . concatMap parseMediaTypes $ lookupHeader k r
   where
diff --git a/src/Network/Wai/Predicate/Request.hs b/src/Network/Wai/Predicate/Request.hs
--- a/src/Network/Wai/Predicate/Request.hs
+++ b/src/Network/Wai/Predicate/Request.hs
@@ -21,7 +21,6 @@
     ) where
 
 import Data.ByteString (ByteString)
-import Data.CaseInsensitive (mk)
 import Data.Maybe (mapMaybe)
 import Data.Vector (Vector, (!?))
 import Data.Word
@@ -89,7 +88,7 @@
     Req rq (concatMap parseCookies (getHeaders "Cookie" rq))
            (Vec.fromList . splitSegments . Wai.rawPathInfo $ rq)
 
-lookupHeader :: HasHeaders r => ByteString -> r -> [ByteString]
+lookupHeader :: HasHeaders r => HeaderName -> r -> [ByteString]
 lookupHeader name = getHeaders name
 
 lookupSegment :: HasPath r => Word -> r -> Maybe ByteString
@@ -101,8 +100,8 @@
 lookupQuery :: HasQuery r => ByteString -> r -> [ByteString]
 lookupQuery name = mapMaybe snd . filter ((name ==) . fst) . queryItems
 
-getHeaders :: HasHeaders r => ByteString -> r -> [ByteString]
-getHeaders name = map snd . filter ((mk name ==) . fst) . headers
+getHeaders :: HasHeaders r => HeaderName -> r -> [ByteString]
+getHeaders name = map snd . filter ((name ==) . fst) . headers
 
 -----------------------------------------------------------------------------
 -- Internal
diff --git a/wai-predicates.cabal b/wai-predicates.cabal
--- a/wai-predicates.cabal
+++ b/wai-predicates.cabal
@@ -1,5 +1,5 @@
 name:                wai-predicates
-version:             0.2.1
+version:             0.3
 synopsis:            WAI request predicates
 license:             OtherLicense
 license-file:        LICENSE
@@ -13,6 +13,7 @@
 
 extra-source-files:
     README.md
+    CHANGELOG.md
 
 description:
     Evaluate predicate functions against WAI requests and receive
