diff --git a/lib/geocoder/lookups/yandex.rb b/lib/geocoder/lookups/yandex.rb
index e999a3786402c2179411efce4e638a9c09339f1a..25c31015f42c85b5c8edbdecbe781c09e4bdcd7c 100644
--- a/lib/geocoder/lookups/yandex.rb
+++ b/lib/geocoder/lookups/yandex.rb
@@ -8,6 +8,10 @@ module Geocoder::Lookup
 
     def results(query, reverse = false)
       return [] unless doc = fetch_data(query, reverse)
+      if err = doc['error']
+        warn "Yandex Geocoding API error: #{err['status']} (#{err['message']})."
+        return []
+      end
       if doc = doc['response']['GeoObjectCollection']
         meta = doc['metaDataProperty']['GeocoderResponseMetaData']
         return meta['found'].to_i > 0 ? doc['featureMember'] : []
diff --git a/test/fixtures/yandex_invalid_key.json b/test/fixtures/yandex_invalid_key.json
new file mode 100644
index 0000000000000000000000000000000000000000..c6174d7fd4b82f65904a36b601df7b0d69ddd12b
--- /dev/null
+++ b/test/fixtures/yandex_invalid_key.json
@@ -0,0 +1 @@
+{"error":{"status":401,"message":"invalid key"}}
diff --git a/test/geocoder_test.rb b/test/geocoder_test.rb
index 264647e2d1b3c7102c1f613705c2f656399e9c0a..1d18853eb95c29d420d14b4cbe7f2b6eaf31fef2 100644
--- a/test/geocoder_test.rb
+++ b/test/geocoder_test.rb
@@ -369,6 +369,17 @@ class GeocoderTest < Test::Unit::TestCase
   end
 
 
+  # --- Yandex ---
+
+  def test_yandex_with_invalid_key
+    # keep test output clean: suppress timeout warning
+    orig = $VERBOSE; $VERBOSE = nil
+    Geocoder::Configuration.lookup = :yandex
+    assert_equal [], Geocoder.search("invalid key")
+    $VERBOSE = orig
+  end
+
+
   # --- Geocoder.ca ---
 
   def test_geocoder_ca_result_components
diff --git a/test/test_helper.rb b/test/test_helper.rb
index e638e780f36e8891a77b9471e0d6507f7f9022a5..958fad52f4b44f275cf9e746ddedfd5b6102f4b0 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -75,7 +75,10 @@ module Geocoder
       private #-----------------------------------------------------------------
       def fetch_raw_data(query, reverse = false)
         raise TimeoutError if query == "timeout"
-        file = query == "no results" ? :no_results : :madison_square_garden
+        file = case query
+          when "no results";  :no_results
+          else                :madison_square_garden
+        end
         read_fixture "yahoo_#{file}.json"
       end
     end
@@ -84,7 +87,11 @@ module Geocoder
       private #-----------------------------------------------------------------
       def fetch_raw_data(query, reverse = false)
         raise TimeoutError if query == "timeout"
-        file = query == "no results" ? :no_results : :kremlin
+        file = case query
+          when "no results";  :no_results
+          when "invalid key"; :invalid_key
+          else                :kremlin
+        end
         read_fixture "yandex_#{file}.json"
       end
     end
@@ -96,7 +103,10 @@ module Geocoder
         if reverse
           read_fixture "geocoder_ca_reverse.json"
         else
-          file = query == "no results" ? :no_results : :madison_square_garden
+          file = case query
+            when "no results";  :no_results
+            else                :madison_square_garden
+          end
           read_fixture "geocoder_ca_#{file}.json"
         end
       end