diff --git a/lib/geocoder/results/yandex.rb b/lib/geocoder/results/yandex.rb
index 32d093aadc9ba179a6e24d7339dd5f80fee93766..f9d830eedfb8c844c00a765762d50cb23a474758 100644
--- a/lib/geocoder/results/yandex.rb
+++ b/lib/geocoder/results/yandex.rb
@@ -14,8 +14,10 @@ module Geocoder::Result
     def city
       if state.empty?
         address_details['Locality']['LocalityName']
-      else
-        address_details['AdministrativeArea']['Locality']['LocalityName']
+      elsif sub_state.empty?
+        state['Locality']['LocalityName']
+      else 
+        sub_state['Locality']['LocalityName']
       end
     end
 
@@ -34,6 +36,18 @@ module Geocoder::Result
         ""
       end
     end
+    
+    def sub_state
+      if !state.empty?
+        if state['SubAdministrativeArea']
+          state['SubAdministrativeArea']['SubAdministrativeAreaName']
+        else
+          ""
+        end
+      else
+        ""
+      end
+    end
 
     def state_code
       ""