diff --git a/lib/geocoder/lookups/bing.rb b/lib/geocoder/lookups/bing.rb
index 441845086d3541dbeb060c4a745fb97fd8a187c2..b99c8d6ce6e5a8d2df95b3f24f24bc6887827a04 100644
--- a/lib/geocoder/lookups/bing.rb
+++ b/lib/geocoder/lookups/bing.rb
@@ -38,10 +38,10 @@ module Geocoder::Lookup
     end
 
     def query_url_params(query)
-      super.merge(
+      {
         :key => configuration.api_key,
         :query => query.reverse_geocode? ? nil : query.sanitized_text
-      )
+      }.merge(super)
     end
   end
 end
diff --git a/lib/geocoder/lookups/geocoder_ca.rb b/lib/geocoder/lookups/geocoder_ca.rb
index 81e1f8506c641c512526f310624992cb46d5ab82..7ec7c1e97d32b59ac3bb58c005c3dabc70f23096 100644
--- a/lib/geocoder/lookups/geocoder_ca.rb
+++ b/lib/geocoder/lookups/geocoder_ca.rb
@@ -27,12 +27,12 @@ module Geocoder::Lookup
     end
 
     def query_url_params(query)
-      params = super.merge(
+      params = {
         :geoit    => "xml",
         :jsonp    => 1,
         :callback => "test",
         :auth     => configuration.api_key
-      )
+      }.merge(super)
       if query.reverse_geocode?
         lat,lon = query.coordinates
         params[:latt] = lat
diff --git a/lib/geocoder/lookups/google.rb b/lib/geocoder/lookups/google.rb
index 96387c45a7e0a469758c5a41e96188e0a203a5e3..c16bf85f8d23e913acdc10f7cb17a4cdc7e5172e 100644
--- a/lib/geocoder/lookups/google.rb
+++ b/lib/geocoder/lookups/google.rb
@@ -54,9 +54,9 @@ module Geocoder::Lookup
     end
 
     def query_url_params(query)
-      super.merge(query_url_google_params(query)).merge(
+      query_url_google_params(query).merge(
         :key => configuration.api_key
-      )
+      ).merge(super)
     end
   end
 end
diff --git a/lib/geocoder/lookups/google_premier.rb b/lib/geocoder/lookups/google_premier.rb
index d555c6325d2b19adb8da544fe928698727486480..d59adf9d1497007efef8edc2bd8a68ce7899e213 100644
--- a/lib/geocoder/lookups/google_premier.rb
+++ b/lib/geocoder/lookups/google_premier.rb
@@ -22,7 +22,7 @@ module Geocoder::Lookup
     private # ---------------------------------------------------------------
 
     def query_url_params(query)
-      super.merge(query_url_google_params(query)).merge(
+      query_url_google_params(query).merge(super).merge(
         :key => nil, # don't use param inherited from Google lookup
         :client => configuration.api_key[1],
         :channel => configuration.api_key[2]
diff --git a/lib/geocoder/lookups/mapquest.rb b/lib/geocoder/lookups/mapquest.rb
index a0e31f39a2204c62e34b14fd423542613ea26a10..8c325e49ecc5b3c52f1ae94bc409074bb9282ddb 100644
--- a/lib/geocoder/lookups/mapquest.rb
+++ b/lib/geocoder/lookups/mapquest.rb
@@ -27,12 +27,11 @@ module Geocoder::Lookup
     end
 
     def query_url_params(query)
-      key = configuration.api_key
       params = { :location => query.sanitized_text }
-      if key
+      if key = configuration.api_key
         params[:key] = CGI.unescape(key)
       end
-      super.merge(params)
+      params.merge(super)
     end
 
     def results(query)
diff --git a/lib/geocoder/lookups/maxmind.rb b/lib/geocoder/lookups/maxmind.rb
index ba41e40ed4c24fabc58f1f3eef1f4aefb00f6321..e02750336b21c41f6ad223522fe019d1729ef2f6 100644
--- a/lib/geocoder/lookups/maxmind.rb
+++ b/lib/geocoder/lookups/maxmind.rb
@@ -39,10 +39,10 @@ module Geocoder::Lookup
     end
 
     def query_url_params(query)
-      super.merge(
+      {
         :l => configuration.api_key,
         :i => query.sanitized_text
-      )
+      }.merge(super)
     end
   end
 end
diff --git a/lib/geocoder/lookups/nominatim.rb b/lib/geocoder/lookups/nominatim.rb
index aea86e4b7c36c81815e9fa66656e5e0b6ffbb16a..e8d36d00c17b6db7e51a1477b7dbf0358feb0b48 100644
--- a/lib/geocoder/lookups/nominatim.rb
+++ b/lib/geocoder/lookups/nominatim.rb
@@ -26,12 +26,12 @@ module Geocoder::Lookup
     end
 
     def query_url_params(query)
-      params = super.merge(
+      params = {
         :format => "json",
         :polygon => "1",
         :addressdetails => "1",
         :"accept-language" => configuration.language
-      )
+      }.merge(super)
       if query.reverse_geocode?
         lat,lon = query.coordinates
         params[:lat] = lat
diff --git a/lib/geocoder/lookups/yahoo.rb b/lib/geocoder/lookups/yahoo.rb
index a271b776bf4afad90c30ce42ba3dd65531588896..0c27cc0c77cde05e30c85c5a1adfae9852caa9ed 100644
--- a/lib/geocoder/lookups/yahoo.rb
+++ b/lib/geocoder/lookups/yahoo.rb
@@ -60,13 +60,13 @@ module Geocoder::Lookup
     end
 
     def query_url_params(query)
-      super.merge(
+      {
         :location => query.sanitized_text,
         :flags => "JXTSR",
         :gflags => "AC#{'R' if query.reverse_geocode?}",
         :locale => "#{configuration.language}_US",
         :appid => configuration.api_key
-      )
+      }.merge(super)
     end
 
     def cache_key(query)
diff --git a/lib/geocoder/lookups/yandex.rb b/lib/geocoder/lookups/yandex.rb
index 9e93d50f8755b1f8761a561d672ac1eb76a875cb..f5559efbdd865ce4080358acd1b303595f1b1199 100644
--- a/lib/geocoder/lookups/yandex.rb
+++ b/lib/geocoder/lookups/yandex.rb
@@ -43,12 +43,12 @@ module Geocoder::Lookup
       else
         q = query.sanitized_text
       end
-      super.merge(
+      {
         :geocode => q,
         :format => "json",
         :plng => "#{configuration.language}", # supports ru, uk, be
         :key => configuration.api_key
-      )
+      }.merge(super)
     end
   end
 end
diff --git a/test/lookup_test.rb b/test/lookup_test.rb
index eeba7ba5d43e986a19ffa54b2855f3c566fcd114..51c2e0d600ccf58a52ff579a1b4cce277c069b72 100644
--- a/test/lookup_test.rb
+++ b/test/lookup_test.rb
@@ -33,6 +33,27 @@ class LookupTest < Test::Unit::TestCase
     end
   end
 
+  {
+    :bing => :key,
+    :geocoder_ca => :auth,
+    :google => :language,
+    :google_premier => :language,
+    :mapquest => :key,
+    :maxmind => :l,
+    :nominatim => :"accept-language",
+    :yahoo => :locale,
+    :yandex => :plng
+  }.each do |l,p|
+    define_method "test_passing_param_to_#{l}_query_overrides_configuration_value" do
+      set_api_key!(l)
+      url = Geocoder::Lookup.get(l).query_url(Geocoder::Query.new(
+        "test", :params => {p => "xxxx"}
+      ))
+      assert_match /#{p}=xxxx/, url,
+        "Param passed to #{l} lookup does not override configuration value"
+    end
+  end
+
   def test_raises_exception_on_invalid_key
     Geocoder.configure(:always_raise => [Geocoder::InvalidApiKey])
     #Geocoder::Lookup.all_services_except_test.each do |l|