diff --git a/api-builder.cabal b/api-builder.cabal
--- a/api-builder.cabal
+++ b/api-builder.cabal
@@ -1,5 +1,5 @@
 name: api-builder
-version: 0.4.0.0
+version: 0.5.0.0
 synopsis: Library for easily building REST API wrappers in Haskell
 license: BSD3
 author: Fraser Murray
diff --git a/src/Network/API/Builder/Error.hs b/src/Network/API/Builder/Error.hs
--- a/src/Network/API/Builder/Error.hs
+++ b/src/Network/API/Builder/Error.hs
@@ -17,8 +17,6 @@
   deriving Show
 
 instance Eq a => Eq (APIError a) where
-  (HTTPError _) == _ = False
-  _ == (HTTPError _) = False
   (APIError a) == (APIError b) = a == b
   InvalidURLError == InvalidURLError = True
   (ParseError a) == (ParseError b) = a == b
diff --git a/src/Network/API/Builder/Query.hs b/src/Network/API/Builder/Query.hs
--- a/src/Network/API/Builder/Query.hs
+++ b/src/Network/API/Builder/Query.hs
@@ -1,29 +1,28 @@
 module Network.API.Builder.Query where
 
-import Data.Maybe
 import Data.Text (Text)
 import qualified Data.Text as Text
 
 class ToQuery a where
-  toQuery :: a -> Maybe Text
+  toQuery :: Text -> a -> [(Text, Text)]
 
 instance ToQuery Integer where
-  toQuery = Just . Text.pack . show
+  toQuery k v = [(k, Text.pack $ show v)]
 
 instance ToQuery Bool where
-  toQuery True = Just "true"
-  toQuery False = Just "false"
+  toQuery k True = [(k, "true")]
+  toQuery k False = [(k, "false")]
 
 instance ToQuery Int where
-  toQuery = Just . Text.pack . show
+  toQuery k v = [(k, Text.pack $ show v)]
 
 instance ToQuery Text where
-  toQuery = Just
+  toQuery k v = [(k, v)]
 
 instance ToQuery a => ToQuery (Maybe a) where
-  toQuery (Just a) = toQuery a
-  toQuery Nothing = Nothing
+  toQuery k (Just a) = toQuery k a
+  toQuery _ Nothing = []
 
 instance ToQuery a => ToQuery [a] where
-  toQuery [] = Nothing
-  toQuery xs = Just $ Text.intercalate "," $ mapMaybe toQuery xs
+  toQuery _ [] = []
+  toQuery k xs = [(k, Text.intercalate "," $ map snd $ concatMap (toQuery k) xs)]
diff --git a/src/Network/API/Builder/Routes.hs b/src/Network/API/Builder/Routes.hs
--- a/src/Network/API/Builder/Routes.hs
+++ b/src/Network/API/Builder/Routes.hs
@@ -6,7 +6,6 @@
   , routeURL ) where
 
 import Control.Arrow ((***))
-import Data.Maybe (mapMaybe)
 import Data.Monoid ((<>))
 import Data.Text (Text)
 import qualified Data.Text as T
@@ -20,7 +19,7 @@
 
 -- | Alias to @(Text, Maybe Text)@ used to store each query that gets
 --   tacked onto the request.
-type URLParam = (Text, Maybe Text)
+type URLParam = [(Text, Text)]
 
 -- | Convenience function for building @URLParam@s. Right-hand argument must
 --   have a @ToQuery@ instance so it can be converted to the appropriate
@@ -29,8 +28,8 @@
 --
 -- >>> "api_type" =. ("json" :: Text)
 -- ("api_type", Just "json")
-(=.) :: ToQuery a => Text -> a -> (Text, Maybe Text)
-k =. v = (k, toQuery v)
+(=.) :: ToQuery a => Text -> a -> [(Text, Text)]
+k =. v = toQuery k v
 
 -- | Main type for routes in the API. Used to represent the URL minus the actual
 --   endpoint URL as well as the query string and the HTTP method used to communicate
@@ -54,8 +53,4 @@
 pathParamsSep xs = if T.isInfixOf "." (last xs) then "?" else "/?"
 
 buildParams :: [URLParam] -> Text
-buildParams = T.pack . HTTP.urlEncodeVars . map (T.unpack *** T.unpack) . mapMaybe collectParams
-
-collectParams :: URLParam -> Maybe (Text, Text)
-collectParams (a, Just x) = Just (a,x)
-collectParams (_, Nothing) = Nothing
+buildParams = T.pack . HTTP.urlEncodeVars . concatMap (map (T.unpack *** T.unpack))
