diff --git a/Text/URI.hs b/Text/URI.hs
--- a/Text/URI.hs
+++ b/Text/URI.hs
@@ -92,7 +92,7 @@
 okInQuery = satisfiesAny [isPChar, (`elem` "/?")]
 -- | Checks if character is OK in urlencoded query item
 okInQueryItem :: Char -> Bool
-okInQueryItem = isUnreserved
+okInQueryItem c = okInQuery c && (not $ elem c "&=")
 -- | Checks if character is OK in fragment
 okInFragment :: Char -> Bool
 okInFragment = okInQuery
@@ -401,13 +401,15 @@
 
 queryP = many $ satisfy (isPChar) <|> oneOf "/?"
 
+queryItemP = satisfy (\c -> isPChar c && (not $ elem c "&=")) <|> oneOf "/?"
+
 fragmentP = queryP
 
 urlEncodedPairsP = many urlEncodedPairP
 
 urlEncodedPairP = do
-	keyV <- manyTill (percentEncodedP <|> plusP <|> unreservedP) (char '=')
-	valueV <- manyTill (percentEncodedP <|> plusP <|> unreservedP) (skip (char '&') <|> eof)
+	keyV <- manyTill (percentEncodedP <|> plusP <|> queryItemP) (char '=')
+	valueV <- manyTill (percentEncodedP <|> plusP <|> queryItemP) (skip (char '&') <|> eof)
 	return (keyV, valueV)
 
 plusP = do
diff --git a/uri.cabal b/uri.cabal
--- a/uri.cabal
+++ b/uri.cabal
@@ -1,5 +1,5 @@
 Name: uri
-Version: 0.1.2
+Version: 0.1.3
 Synopsis: Library for working with URIs
 Category: Text
 Description: Library for working with URIs, including parsing, rendering, merging, escaping
