diff --git a/lib/geocoder/lookups/yandex.rb b/lib/geocoder/lookups/yandex.rb
index 4b306e1ef68d0eb596283c43083a60aec5ffda74..272ecea9725e3da552111841dbe97971b40bfba7 100644
--- a/lib/geocoder/lookups/yandex.rb
+++ b/lib/geocoder/lookups/yandex.rb
@@ -21,7 +21,11 @@ module Geocoder::Lookup
     def results(query)
       return [] unless doc = fetch_data(query)
       if err = doc['error']
-        warn "Yandex Geocoding API error: #{err['status']} (#{err['message']})."
+        if err["status"] == 401 and err["message"] == "invalid key"
+          raise_error(Geocoder::InvalidApiKey) || warn("Invalid API key.")
+        else
+          warn "Yandex Geocoding API error: #{err['status']} (#{err['message']})."
+        end
         return []
       end
       if doc = doc['response']['GeoObjectCollection']
diff --git a/test/services_test.rb b/test/services_test.rb
index 3681c0187742c2b823506ef0931c6d7de78035f2..9c232a8593f3155658a77f3aa70bf023a43c315e 100644
--- a/test/services_test.rb
+++ b/test/services_test.rb
@@ -123,7 +123,7 @@ class ServicesTest < Test::Unit::TestCase
 
   # --- Yandex ---
 
-  def test_yandex_with_invalid_key
+  def test_yandex_warns_about_invalid_key
     # keep test output clean: suppress timeout warning
     orig = $VERBOSE; $VERBOSE = nil
     Geocoder.configure(:lookup => :yandex)
@@ -133,6 +133,14 @@ class ServicesTest < Test::Unit::TestCase
     $VERBOSE = orig
   end
 
+  def test_yandex_raises_exception_on_invalid_key
+    Geocoder.configure(:always_raise => [Geocoder::InvalidApiKey])
+    l = Geocoder::Lookup.get(:yandex)
+    assert_raises Geocoder::InvalidApiKey do
+      l.send(:results, Geocoder::Query.new("invalid key"))
+    end
+  end
+
 
   # --- Geocoder.ca ---