diff --git a/lib/geocoder/lookups/baidu.rb b/lib/geocoder/lookups/baidu.rb
index 4bd80f21c30e4ffab441822e69e4aa038a2472d5..51b74620155328c4c61054aa0a70c9aafdccdb6b 100644
--- a/lib/geocoder/lookups/baidu.rb
+++ b/lib/geocoder/lookups/baidu.rb
@@ -21,7 +21,7 @@ module Geocoder::Lookup
     def results(query, reverse = false)
       return [] unless doc = fetch_data(query)
       case doc['status']; when 0
-        return [doc['result']]
+        return [doc['result']] unless doc['result'].blank?
       when 1, 3, 4
         raise_error(Geocoder::Error, messages) ||
           warn("Baidu Geocoding API error: server error.")
@@ -46,7 +46,7 @@ module Geocoder::Lookup
         (query.reverse_geocode? ? :location : :address) => query.sanitized_text,
         :ak => configuration.api_key,
         :output => "json"
-      }
+      }.merge(super)
     end
 
   end
diff --git a/lib/geocoder/results/baidu.rb b/lib/geocoder/results/baidu.rb
index 27adbde1ccbd2460065a22e5ad6735290643a6f8..62fbc6f1d6d6920cbd162ed015098e20c0250d37 100644
--- a/lib/geocoder/results/baidu.rb
+++ b/lib/geocoder/results/baidu.rb
@@ -43,6 +43,22 @@ module Geocoder::Result
       @data['addressComponent']
     end
 
+    def state_code
+      ""
+    end
+
+    def postal_code
+      ""
+    end
+
+    def country
+      "China"
+    end
+
+    def country_code
+      "CN"
+    end
+
     ##
     # Get address components of a given type. Valid types are defined in
     # Baidu's Geocoding API documentation and include (among others):
diff --git a/test/fixtures/baidu_invalid_key b/test/fixtures/baidu_invalid_key
new file mode 100644
index 0000000000000000000000000000000000000000..9e70656817e05f28418a2d715415213f51d5002e
--- /dev/null
+++ b/test/fixtures/baidu_invalid_key
@@ -0,0 +1 @@
+{"results":[],"status":5,"msg":"AK Illegal or Not Exist:"}
diff --git a/test/fixtures/baidu_no_results b/test/fixtures/baidu_no_results
new file mode 100644
index 0000000000000000000000000000000000000000..1ab1ab3f79d3e40f8dbbb1f6d7a401fb56d58193
--- /dev/null
+++ b/test/fixtures/baidu_no_results
@@ -0,0 +1 @@
+{"status":0,"result":[]}
diff --git a/test/fixtures/baidu_reverse b/test/fixtures/baidu_reverse
new file mode 100644
index 0000000000000000000000000000000000000000..bf6dcf0c036d9a6ecb608fb545d4baad310cf0fe
--- /dev/null
+++ b/test/fixtures/baidu_reverse
@@ -0,0 +1 @@
+{"status":0,"result":{"location":{"lng":121.48789948569,"lat":31.249161555654},"formatted_address":"上海市闸北区天潼路619号","business":"七浦路,海宁路,北京东路","addressComponent":{"city":"上海市","district":"闸北区","province":"上海市","street":"天潼路","street_number":"619号"},"cityCode":289}}
diff --git a/test/fixtures/baidu_shanghai_pearl_tower b/test/fixtures/baidu_shanghai_pearl_tower
new file mode 100644
index 0000000000000000000000000000000000000000..f5619fe20c8f632efaea75c68ebccea606042905
--- /dev/null
+++ b/test/fixtures/baidu_shanghai_pearl_tower
@@ -0,0 +1,12 @@
+{
+	"status":0,
+		"result":{
+			"location":{
+				"lng":116.30814954222,
+				"lat":40.056885091681
+			},
+			"precise":1,
+			"confidence":80,
+			"level":"\u5546\u52a1\u5927\u53a6"
+		}
+}
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 24ca32c77fd49d49ec9c1aa75299ab2d1c975746..06e3272f94d2d646d565ebcc744d0ced3ed243b9 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -147,6 +147,15 @@ module Geocoder
       end
     end
 
+    class Baidu
+      private
+      def fixture_prefix
+        "baidu"
+      end
+      def default_fixture_filename
+        "baidu_shanghai_pearl_tower"
+      end
+    end
   end
 end