diff --git a/lib/geocoder/stores/active_record.rb b/lib/geocoder/stores/active_record.rb
index cbbb5914296a60ebc64f968c046920fa394369fc..67b78e76eccc7cd8345a63675e3fff5fd229d1f6 100644
--- a/lib/geocoder/stores/active_record.rb
+++ b/lib/geocoder/stores/active_record.rb
@@ -217,12 +217,13 @@ module Geocoder::Store
     #
     def geocode
       do_lookup(false) do |o,rs|
-        r = rs.first
-        unless r.latitude.nil? or r.longitude.nil?
-          o.send :write_attribute, self.class.geocoder_options[:latitude],  r.latitude
-          o.send :write_attribute, self.class.geocoder_options[:longitude], r.longitude
+        if r = rs.first
+          unless r.latitude.nil? or r.longitude.nil?
+            o.send :write_attribute, self.class.geocoder_options[:latitude],  r.latitude
+            o.send :write_attribute, self.class.geocoder_options[:longitude], r.longitude
+          end
+          r.coordinates
         end
-        r.coordinates
       end
     end
 
diff --git a/lib/geocoder/stores/base.rb b/lib/geocoder/stores/base.rb
index 13a0a3532c56d07ed3e8489aa0467e13ab4bc826..f7726c645153738566b4d8468e2e506720a6704b 100644
--- a/lib/geocoder/stores/base.rb
+++ b/lib/geocoder/stores/base.rb
@@ -98,18 +98,17 @@ module Geocoder
           return
         end
 
-        if (results = Geocoder.search(query)).size > 0
+        results = Geocoder.search(query)
 
-          # execute custom block, if specified in configuration
-          block_key = reverse ? :reverse_block : :geocode_block
-          if custom_block = options[block_key]
-            custom_block.call(self, results)
+        # execute custom block, if specified in configuration
+        block_key = reverse ? :reverse_block : :geocode_block
+        if custom_block = options[block_key]
+          custom_block.call(self, results)
 
-          # else execute block passed directly to this method,
-          # which generally performs the "auto-assigns"
-          elsif block_given?
-            yield(self, results)
-          end
+        # else execute block passed directly to this method,
+        # which generally performs the "auto-assigns"
+        elsif block_given?
+          yield(self, results)
         end
       end
     end
diff --git a/lib/geocoder/stores/mongo_base.rb b/lib/geocoder/stores/mongo_base.rb
index 9203e2147b8dc0a0a4542bb76576cefbceaaef68..fa84801402f831f1006f9750904e9460b8fb8ac6 100644
--- a/lib/geocoder/stores/mongo_base.rb
+++ b/lib/geocoder/stores/mongo_base.rb
@@ -56,11 +56,12 @@ module Geocoder::Store
     #
     def geocode
       do_lookup(false) do |o,rs|
-        r = rs.first
-        unless r.coordinates.nil?
-          o.send :write_attribute, self.class.geocoder_options[:coordinates], r.coordinates.reverse
+        if r = rs.first
+          unless r.coordinates.nil?
+            o.send :write_attribute, self.class.geocoder_options[:coordinates], r.coordinates.reverse
+          end
+          r.coordinates
         end
-        r.coordinates
       end
     end
 
diff --git a/test/geocoder_test.rb b/test/geocoder_test.rb
index fe1682004ef4c537d7d6882e320c3c4b40d680a5..a31b82c184a2a5635ece5b536b5d8de9643dbe09 100644
--- a/test/geocoder_test.rb
+++ b/test/geocoder_test.rb
@@ -32,6 +32,12 @@ class GeocoderTest < Test::Unit::TestCase
     assert_equal coords, [v.latitude, v.longitude]
   end
 
+  def test_geocode_block_executed_when_no_results
+    v = Event.new("Nowhere", "no results")
+    v.geocode
+    assert_equal "NOT FOUND", v.coords_string
+  end
+
   def test_reverse_geocode_assigns_and_returns_address
     v = Landmark.new(*landmark_params(:msg))
     address = "4 Penn Plaza, New York, NY 10001, USA"
diff --git a/test/test_helper.rb b/test/test_helper.rb
index a6fe5ceabc11e5a1fe7fd188e01aae10e4265b47..d34b63c0359256e40432bea7c691d83042dc94ad 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -200,6 +200,8 @@ class Event < ActiveRecord::Base
   geocoded_by :address do |obj,results|
     if result = results.first
       obj.coords_string = "#{result.latitude},#{result.longitude}"
+    else
+      obj.coords_string = "NOT FOUND"
     end
   end