diff --git a/Network/Wai.hs b/Network/Wai.hs
--- a/Network/Wai.hs
+++ b/Network/Wai.hs
@@ -46,12 +46,16 @@
     , httpVersionToBS
       -- ** Request header names
     , RequestHeader (..)
+    , requestHeader
     , requestHeaderFromBS
     , requestHeaderToBS
+    , requestHeaderToLower
       -- ** Response header names
     , ResponseHeader (..)
+    , responseHeader
     , responseHeaderFromBS
     , responseHeaderToBS
+    , responseHeaderToLower
       -- ** Response status code
     , Status (..)
     , statusCode
@@ -69,6 +73,7 @@
 
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Char8 as B8
+import Data.Char (toLower)
 
 -- $show_read
 --
@@ -165,8 +170,8 @@
 -- The naming rules are simple: removing any hyphens from the actual name, and
 -- if there is a naming conflict with a 'ResponseHeader', prefix with Req.
 --
--- Equality determined by conversion via 'requestHeaderToBS'. Remember, headers
--- are case sensitive.
+-- Equality determined by conversion via 'requestHeaderToLower'. Request
+-- headers are *not* case sensitive (a change from version 0.0 of WAI).
 data RequestHeader =
       Accept
     | AcceptCharset
@@ -178,11 +183,17 @@
     | ReqContentType
     | Host
     | Referer
-    | RequestHeader B.ByteString
+    | RequestHeader B.ByteString B.ByteString
     deriving (Show, Read)
 
+lowerBS :: B.ByteString -> B.ByteString
+lowerBS = B8.map toLower
+
+requestHeader :: B.ByteString -> RequestHeader
+requestHeader x = RequestHeader x $ lowerBS x
+
 instance Eq RequestHeader where
-    x == y = requestHeaderToBS x == requestHeaderToBS y
+    x == y = requestHeaderToLower x == requestHeaderToLower y
 
 requestHeaderFromBS :: B.ByteString -> RequestHeader
 requestHeaderFromBS bs = case B8.unpack bs of
@@ -196,7 +207,7 @@
     "Content-Type" -> ReqContentType
     "Host" -> Host
     "Referer" -> Referer
-    _ -> RequestHeader bs
+    _ -> requestHeader bs
 
 requestHeaderToBS :: RequestHeader -> B.ByteString
 requestHeaderToBS Accept = B8.pack "Accept"
@@ -209,8 +220,20 @@
 requestHeaderToBS ReqContentType = B8.pack "Content-Type"
 requestHeaderToBS Host = B8.pack "Host"
 requestHeaderToBS Referer = B8.pack "Referer"
-requestHeaderToBS (RequestHeader bs) = bs
+requestHeaderToBS (RequestHeader bs _) = bs
 
+requestHeaderToLower :: RequestHeader -> B.ByteString
+requestHeaderToLower Accept = B8.pack "accept"
+requestHeaderToLower AcceptCharset = B8.pack "accept-charset"
+requestHeaderToLower AcceptEncoding = B8.pack "accept-encoding"
+requestHeaderToLower AcceptLanguage = B8.pack "accept-language"
+requestHeaderToLower Authorization = B8.pack "authorization"
+requestHeaderToLower Cookie = B8.pack "cookie"
+requestHeaderToLower ReqContentLength = B8.pack "content-Length"
+requestHeaderToLower ReqContentType = B8.pack "content-Type"
+requestHeaderToLower Host = B8.pack "host"
+requestHeaderToLower Referer = B8.pack "referer"
+requestHeaderToLower (RequestHeader _ bs) = bs
 
 -- | Headers sent from the server to the client. Clearly, this is not a
 -- complete list of all possible headers, but rather a selection of common
@@ -219,8 +242,8 @@
 --
 -- if there is a naming conflict with a 'ResponseHeader', prefix with Req.
 --
--- Equality determined by conversion via 'responseHeaderToBS'. Remember,
--- headers are case sensitive.
+-- Equality determined by conversion via 'responseHeaderToLower'. Response
+-- headers are *not* case sensitive (a change from version 0.0 of WAI).
 data ResponseHeader =
       ContentEncoding
     | ContentLanguage
@@ -231,12 +254,15 @@
     | Location
     | Server
     | SetCookie
-    | ResponseHeader B.ByteString
+    | ResponseHeader B.ByteString B.ByteString
      deriving (Show)
 
 instance Eq ResponseHeader where
     x == y = responseHeaderToBS x == responseHeaderToBS y
 
+responseHeader :: B.ByteString -> ResponseHeader
+responseHeader x = ResponseHeader x $ lowerBS x
+
 responseHeaderFromBS :: B.ByteString -> ResponseHeader
 responseHeaderFromBS bs = case B8.unpack bs of
     "Content-Encoding" -> ContentEncoding
@@ -248,7 +274,7 @@
     "Location" -> Location
     "Server" -> Server
     "Set-Cookie" -> SetCookie
-    _ -> ResponseHeader bs
+    _ -> responseHeader bs
 
 responseHeaderToBS :: ResponseHeader -> B.ByteString
 responseHeaderToBS ContentEncoding = B8.pack "Content-Encoding"
@@ -260,7 +286,19 @@
 responseHeaderToBS Location = B8.pack "Location"
 responseHeaderToBS Server = B8.pack "Server"
 responseHeaderToBS SetCookie = B8.pack "Set-Cookie"
-responseHeaderToBS (ResponseHeader bs) = bs
+responseHeaderToBS (ResponseHeader bs _) = bs
+
+responseHeaderToLower :: ResponseHeader -> B.ByteString
+responseHeaderToLower ContentEncoding = B8.pack "content-encoding"
+responseHeaderToLower ContentLanguage = B8.pack "content-language"
+responseHeaderToLower ContentLength = B8.pack "content-length"
+responseHeaderToLower ContentDisposition = B8.pack "content-disposition"
+responseHeaderToLower ContentType = B8.pack "content-type"
+responseHeaderToLower Expires = B8.pack "expires"
+responseHeaderToLower Location = B8.pack "location"
+responseHeaderToLower Server = B8.pack "server"
+responseHeaderToLower SetCookie = B8.pack "set-cookie"
+responseHeaderToLower (ResponseHeader _ bs) = bs
 
 -- | This attempts to provide the most common HTTP status codes, not all of
 -- them. Use the Status constructor when you want to create a status code not
diff --git a/wai.cabal b/wai.cabal
--- a/wai.cabal
+++ b/wai.cabal
@@ -1,5 +1,5 @@
 Name:                wai
-Version:             0.0.1
+Version:             0.1.0
 Synopsis:            Web Application Interface.
 Description:         Provides a common protocol for communication between web aplications and web servers.
 License:             BSD3
