diff --git a/lib/geocoder/calculations.rb b/lib/geocoder/calculations.rb
index a01b89158c6072919ee1d61fb3001915c443d692..a3f1ff987c66dc5ae78bdf34eb6b940bf7edbc8d 100644
--- a/lib/geocoder/calculations.rb
+++ b/lib/geocoder/calculations.rb
@@ -24,6 +24,18 @@ module Geocoder
     # Not a number constant
     NAN = defined?(::Float::NAN) ? ::Float::NAN : 0 / 0.0
 
+    ##
+    # Returns true if all given arguments are valid latitude/longitude values.
+    #
+    def coordinates_present?(*args)
+      args.each do |a|
+        # note that Float::NAN != Float::NAN
+        # still, this could probably be improved:
+        return false if (!a.is_a?(Numeric) or a.to_s == "NaN")
+      end
+      true
+    end
+
     ##
     # Distance spanned by one degree of latitude in the given units.
     #
diff --git a/lib/geocoder/stores/active_record.rb b/lib/geocoder/stores/active_record.rb
index 0f710762f159dff083f4a476011d0d16115d21a1..782458f524372f95cd2ac9158dcec8115589e494 100644
--- a/lib/geocoder/stores/active_record.rb
+++ b/lib/geocoder/stores/active_record.rb
@@ -33,7 +33,7 @@ module Geocoder::Store
         #
         scope :near, lambda{ |location, *args|
           latitude, longitude = Geocoder::Calculations.extract_coordinates(location)
-          if latitude and longitude and ![latitude, longitude].include?(Geocoder::Calculations::NAN)
+          if Geocoder::Calculations.coordinates_present?(latitude, longitude)
             near_scope_options(latitude, longitude, *args)
           else
             where(false_condition) # no results if no lat/lon given
@@ -68,7 +68,9 @@ module Geocoder::Store
 
       def distance_from_sql(location, *args)
         latitude, longitude = Geocoder::Calculations.extract_coordinates(location)
-        distance_from_sql_options(latitude, longitude, *args) if latitude and longitude
+        if Geocoder::Calculations.coordinates_present?(latitude, longitude)
+          distance_from_sql_options(latitude, longitude, *args)
+        end
       end
 
       private # ----------------------------------------------------------------
diff --git a/test/calculations_test.rb b/test/calculations_test.rb
index c1be1d58280ced545ae3d65259bee42a64e6d453..ee18f8361e464162cd36b7b3064d3bc8ae7bac4d 100644
--- a/test/calculations_test.rb
+++ b/test/calculations_test.rb
@@ -178,5 +178,11 @@ class CalculationsTest < Test::Unit::TestCase
     assert_in_delta 1.0 / 3, result.first, 1E-5
     assert_in_delta 2.0 / 3, result.last, 1E-5
   end
-end
 
+  def test_coordinates_present
+    assert Geocoder::Calculations.coordinates_present?(3.23)
+    assert !Geocoder::Calculations.coordinates_present?(nil)
+    assert !Geocoder::Calculations.coordinates_present?(Geocoder::Calculations::NAN)
+    assert !Geocoder::Calculations.coordinates_present?(3.23, nil)
+  end
+end