diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,6 @@
+0.1.9.2
+* Fix bug wher trailing ampersand in the query section would not parse.
+
 0.1.9
 * Fix type bug in serializeRelativeRef'
 
diff --git a/src/URI/ByteString/Internal.hs b/src/URI/ByteString/Internal.hs
--- a/src/URI/ByteString/Internal.hs
+++ b/src/URI/ByteString/Internal.hs
@@ -407,7 +407,8 @@
       | otherwise     -> fail' MalformedPath
     _      -> pure mempty
   where
-    itemsParser = Query <$> A.sepBy' (queryItemParser opts) (word8' ampersand)
+    itemsParser = Query . filter neQuery <$> A.sepBy' (queryItemParser opts) (word8' ampersand)
+    neQuery (k, _) = not (BS.null k)
 
 
 -------------------------------------------------------------------------------
@@ -416,10 +417,13 @@
 -- optional. & separators need to be handled further up.
 queryItemParser :: URIParserOptions -> URIParser (ByteString, ByteString)
 queryItemParser opts = do
-  s <- A.takeWhile1 (upoValidQueryChar opts) `orFailWith` MalformedQuery
-  let (k, vWithEquals) = BS.break (== equals) s
-  let v = BS.drop 1 vWithEquals
-  return (urlDecodeQuery k, urlDecodeQuery v)
+  s <- A.takeWhile (upoValidQueryChar opts) `orFailWith` MalformedQuery
+  if BS.null s
+     then return (mempty, mempty)
+     else do
+       let (k, vWithEquals) = BS.break (== equals) s
+       let v = BS.drop 1 vWithEquals
+       return (urlDecodeQuery k, urlDecodeQuery v)
 
 
 -------------------------------------------------------------------------------
diff --git a/test/URI/ByteStringTests.hs b/test/URI/ByteStringTests.hs
--- a/test/URI/ByteStringTests.hs
+++ b/test/URI/ByteStringTests.hs
@@ -57,6 +57,13 @@
           ""
           (Query [("foo", "bar"), ("foo", "baz quux")])
           (Just "frag")
+  -- trailing &
+  , testParses "http://www.example.org?foo=bar&" $
+      URI (Scheme "http")
+          (Just (Authority Nothing (Host "www.example.org") Nothing))
+          ""
+          (Query [("foo", "bar")])
+          Nothing
   , testParses "http://www.google.com:80/aclk?sa=l&ai=CChPOVvnoU8fMDI_QsQeE4oGwDf664-EF7sq01HqV1MMFCAAQAigDUO3VhpcDYMnGqYvApNgPoAGq3vbiA8gBAaoEKE_QQwekDUoMeW9IQghV4HRuzL_l-7vVjlML559kix6XOcC1c4Tb9xeAB76hiR2QBwGoB6a-Gw&sig=AOD64_3Ulyu0DcDsc1AamOIxq63RF9u4zQ&rct=j&q=&ved=0CCUQ0Qw&adurl=http://www.aruba.com/where-to-stay/hotels-and-resorts%3Ftid%3D122"
       URI { uriScheme = Scheme {schemeBS = "http"}
           , uriAuthority = Just Authority {authorityUserInfo = Nothing, authorityHost = Host {hostBS = "www.google.com"}, authorityPort = Just (Port 80)}
diff --git a/uri-bytestring.cabal b/uri-bytestring.cabal
--- a/uri-bytestring.cabal
+++ b/uri-bytestring.cabal
@@ -1,5 +1,5 @@
 name:                uri-bytestring
-version:             0.1.9.1
+version:             0.1.9.2
 synopsis:            Haskell URI parsing as ByteStrings
 description: uri-bytestring aims to be an RFC3986 compliant URI parser that uses efficient ByteStrings for parsing and representing the URI data.
 license:             BSD3
