diff --git a/Network/HTTP/Enumerator.hs b/Network/HTTP/Enumerator.hs
--- a/Network/HTTP/Enumerator.hs
+++ b/Network/HTTP/Enumerator.hs
@@ -364,9 +364,12 @@
                 else takeLBS len' step'
 takeLBS _ step = return step
 
-encodeUrlCharPI :: Char -> String
-encodeUrlCharPI '/' = "/"
-encodeUrlCharPI c = encodeUrlChar c
+encodeUrlCharPI :: Bool -> Char -> String
+encodeUrlCharPI _ '/' = "/"
+encodeUrlCharPI False '?' = "?"
+encodeUrlCharPI False '&' = "&"
+encodeUrlCharPI False '=' = "="
+encodeUrlCharPI _ c = encodeUrlChar c
 
 encodeUrlChar :: Char -> String
 encodeUrlChar c
@@ -434,7 +437,7 @@
         , path = S8.pack
                     $ if null path''
                             then "/"
-                            else concatMap encodeUrlCharPI path''
+                            else concatMap (encodeUrlCharPI parsePath) path''
         , queryString = if parsePath
                             then W.parseQuery $ S8.pack qstring
                             else []
@@ -506,7 +509,7 @@
 -- iteratee and use 'http' or 'httpRedirect' directly.
 simpleHttp :: (MonadIO m, Failure HttpException m) => String -> m L.ByteString
 simpleHttp url = do
-    url' <- parseUrlHelper False url
+    url' <- parseUrl url
     Response sc _ b <- liftIO $ withManager $ httpLbsRedirect url'
     if 200 <= sc && sc < 300
         then return b
diff --git a/http-enumerator.cabal b/http-enumerator.cabal
--- a/http-enumerator.cabal
+++ b/http-enumerator.cabal
@@ -1,5 +1,5 @@
 name:            http-enumerator
-version:         0.6.5.1
+version:         0.6.5.2
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
