diff --git a/lib/geocoder/lookups/baidu.rb b/lib/geocoder/lookups/baidu.rb
index 90521f3b33832a13e4c7b539904a20255b96a816..71e26890e8d60d1e8b02f6a15f0ce21b418157fc 100644
--- a/lib/geocoder/lookups/baidu.rb
+++ b/lib/geocoder/lookups/baidu.rb
@@ -24,19 +24,19 @@ module Geocoder::Lookup
       when 0
         return [doc['result']] unless doc['result'].blank?
       when 1, 3, 4
-        raise_error(Geocoder::Error, messages) ||
+        raise_error(Geocoder::Error, "server error.") ||
           warn("Baidu Geocoding API error: server error.")
       when 2
-        raise_error(Geocoder::InvalidRequest, messages) ||
+        raise_error(Geocoder::InvalidRequest, "invalid request.") ||
           warn("Baidu Geocoding API error: invalid request.")
       when 5
-        raise_error(Geocoder::InvalidApiKey, messages) ||
+        raise_error(Geocoder::InvalidApiKey, "invalid api key") ||
           warn("Baidu Geocoding API error: invalid api key.")
       when 101, 102, 200..299
-        raise_error(Geocoder::RequestDenied) ||
+        raise_error(Geocoder::RequestDenied, "request denied") ||
           warn("Baidu Geocoding API error: request denied.")
       when 300..399
-        raise_error(Geocoder::OverQueryLimitError) ||
+        raise_error(Geocoder::OverQueryLimitError, "over query limit.") ||
           warn("Baidu Geocoding API error: over query limit.")
       end
       return []
diff --git a/lib/geocoder/lookups/baidu_ip.rb b/lib/geocoder/lookups/baidu_ip.rb
index 548d26b85244f45c922227ecc356b0c33a0992b8..f72c98c7fe7c9514b0450a93ad001b2b299790a3 100644
--- a/lib/geocoder/lookups/baidu_ip.rb
+++ b/lib/geocoder/lookups/baidu_ip.rb
@@ -24,19 +24,19 @@ module Geocoder::Lookup
       when 0
         return [doc['content']] unless doc['content'].blank?
       when 1, 3, 4
-        raise_error(Geocoder::Error, messages) ||
+        raise_error(Geocoder::Error, "server error.") ||
           warn("Baidu IP Geocoding API error: server error.")
       when 2
-        raise_error(Geocoder::InvalidRequest, messages) ||
+        raise_error(Geocoder::InvalidRequest, "invalid request.") ||
           warn("Baidu IP Geocoding API error: invalid request.")
       when 5
-        raise_error(Geocoder::InvalidApiKey, messages) ||
+        raise_error(Geocoder::InvalidApiKey, "invalid api key.") ||
           warn("Baidu IP Geocoding API error: invalid api key.")
       when 101, 102, 200..299
-        raise_error(Geocoder::RequestDenied) ||
+        raise_error(Geocoder::RequestDenied, "request denied.") ||
           warn("Baidu IP Geocoding API error: request denied.")
       when 300..399
-        raise_error(Geocoder::OverQueryLimitError) ||
+        raise_error(Geocoder::OverQueryLimitError, "over query limit") ||
           warn("Baidu IP Geocoding API error: over query limit.")
       end
       return []
diff --git a/test/lookup_test.rb b/test/lookup_test.rb
index c52a2154ed129223b407ed8cd2326ffd93c73c91..cd8c412ed3a767f7daaa9b1ae9cb6c1213f435c7 100644
--- a/test/lookup_test.rb
+++ b/test/lookup_test.rb
@@ -58,7 +58,7 @@ class LookupTest < Test::Unit::TestCase
   def test_raises_exception_on_invalid_key
     Geocoder.configure(:always_raise => [Geocoder::InvalidApiKey])
     #Geocoder::Lookup.all_services_except_test.each do |l|
-    [:bing, :yahoo, :yandex, :maxmind].each do |l|
+    [:bing, :yahoo, :yandex, :maxmind, :baidu, :baidu_ip].each do |l|
       lookup = Geocoder::Lookup.get(l)
       assert_raises Geocoder::InvalidApiKey do
         lookup.send(:results, Geocoder::Query.new("invalid key"))
@@ -70,7 +70,7 @@ class LookupTest < Test::Unit::TestCase
     # keep test output clean: suppress timeout warning
     orig = $VERBOSE; $VERBOSE = nil
     #Geocoder::Lookup.all_services_except_test.each do |l|
-    [:bing, :yahoo, :yandex, :maxmind, :cloudmade].each do |l|
+    [:bing, :yahoo, :yandex, :maxmind, :cloudmade, :baidu, :baidu_ip].each do |l|
       Geocoder.configure(:lookup => l)
       set_api_key!(l)
       assert_equal [], Geocoder.search("invalid key")
@@ -91,6 +91,18 @@ class LookupTest < Test::Unit::TestCase
     assert_equal "a=1&b=2", g.send(:hash_to_query, {:a => 1, :b => 2})
   end
 
+  def test_baidu_api_key
+    Geocoder.configure(:api_key => "MY_KEY")
+    g = Geocoder::Lookup::BaiduIp.new
+    assert_match "ak=MY_KEY", g.query_url(Geocoder::Query.new("232.65.123.94"))
+  end
+
+  def test_baidu_ip_api_key
+    Geocoder.configure(:api_key => "MY_KEY")
+    g = Geocoder::Lookup::Baidu.new
+    assert_match "ak=MY_KEY", g.query_url(Geocoder::Query.new("Madison Square Garden, New York, NY  10001, United States"))
+  end
+
   def test_google_api_key
     Geocoder.configure(:api_key => "MY_KEY")
     g = Geocoder::Lookup::Google.new
@@ -104,9 +116,11 @@ class LookupTest < Test::Unit::TestCase
   end
 
   def test_raises_configuration_error_on_missing_key
-    assert_raises Geocoder::ConfigurationError do
-      Geocoder.configure(:lookup => :bing, :api_key => nil)
-      Geocoder.search("Madison Square Garden, New York, NY  10001, United States")
+    [:bing, :baidu].each do |l|
+      assert_raises Geocoder::ConfigurationError do
+        Geocoder.configure(:lookup => l, :api_key => nil)
+        Geocoder.search("Madison Square Garden, New York, NY  10001, United States")
+      end
     end
   end