diff --git a/Network/Wai/Parse.hs b/Network/Wai/Parse.hs
--- a/Network/Wai/Parse.hs
+++ b/Network/Wai/Parse.hs
@@ -52,14 +52,18 @@
 -- * Percent decoding errors are ignored. In particular, "%Q" will be output as
 -- "%Q".
 parseQueryString :: S.ByteString -> [(S.ByteString, S.ByteString)]
-parseQueryString q | S.null q = []
-parseQueryString q =
-    let (x, xs) = breakDiscard 38 q -- ampersand
-     in parsePair x : parseQueryString xs
+parseQueryString = parseQueryString' . dropQuestion
   where
-    parsePair x =
-        let (k, v) = breakDiscard 61 x -- equal sign
-         in (qsDecode k, qsDecode v)
+    dropQuestion q | S.null q || S.head q /= 63 = q
+    dropQuestion q | otherwise = S.tail q
+    parseQueryString' q | S.null q = []
+    parseQueryString' q =
+        let (x, xs) = breakDiscard 38 q -- ampersand
+         in parsePair x : parseQueryString' xs
+      where
+        parsePair x =
+            let (k, v) = breakDiscard 61 x -- equal sign
+             in (qsDecode k, qsDecode v)
 
 
 qsDecode :: S.ByteString -> S.ByteString
diff --git a/wai-extra.cabal b/wai-extra.cabal
--- a/wai-extra.cabal
+++ b/wai-extra.cabal
@@ -1,5 +1,5 @@
 Name:                wai-extra
-Version:             0.1.2
+Version:             0.1.2.1
 Synopsis:            Provides some basic WAI handlers and middleware.
 Description:         The goal here is to provide common features without many dependencies.
 License:             BSD3
