diff --git a/lib/geocoder/lookups/base.rb b/lib/geocoder/lookups/base.rb
index 115f914db6ed08cdd309815da0189023d70d8a41..6d1a75abd962ddc272886a201a55e139986adc78 100644
--- a/lib/geocoder/lookups/base.rb
+++ b/lib/geocoder/lookups/base.rb
@@ -225,9 +225,15 @@ module Geocoder
       end
 
       def check_response_for_errors!(response)
-        if response.code.to_i == 401
+        if response.code.to_i == 400
+          raise_error(Geocoder::InvalidRequest) ||
+            warn("Geocoding API error: 400 Invalid Request")
+        elsif response.code.to_i == 401
           raise_error(Geocoder::RequestDenied) ||
             warn("Geocoding API error: 401 Unauthorized")
+        elsif response.code.to_i == 402
+          raise_error(Geocoder::OverQueryLimitError) ||
+            warn("Geocoding API error: 402 Forbidden")
         end
       end
 
diff --git a/test/unit/lookup_test.rb b/test/unit/lookup_test.rb
index 5ece0de4b2c6936aecbbbdf81dafb10712e6b94f..4d1ad3d09f7a935483dd3c0e3c267cce8865ad0b 100644
--- a/test/unit/lookup_test.rb
+++ b/test/unit/lookup_test.rb
@@ -56,12 +56,19 @@ class LookupTest < GeocoderTestCase
     end
   end
 
-  def test_raises_exception_on_401_response
-    Geocoder.configure(always_raise: [Geocoder::RequestDenied])
-    assert_raises Geocoder::RequestDenied do
-      lookup = Geocoder::Lookup.get(:smarty_streets)
-      response = MockHttpResponse.new(code: 401)
-      lookup.send(:check_response_for_errors!, response)
+  def test_raises_exception_on_error_http_status
+    error_statuses = {
+      '400' => Geocoder::InvalidRequest,
+      '401' => Geocoder::RequestDenied,
+      '402' => Geocoder::OverQueryLimitError
+    }
+    Geocoder.configure(always_raise: error_statuses.values)
+    error_statuses.each do |code, err|
+      assert_raises err do
+        lookup = Geocoder::Lookup.get(:smarty_streets)
+        response = MockHttpResponse.new(code: code.to_i)
+        lookup.send(:check_response_for_errors!, response)
+      end
     end
   end