diff --git a/lib/geocoder/request.rb b/lib/geocoder/request.rb
index e2b1a9c8db28c09083bc41cdbaadd870ef98aae9..9409074c5b96d851f85a3169c2cc3a20571d34e7 100644
--- a/lib/geocoder/request.rb
+++ b/lib/geocoder/request.rb
@@ -5,12 +5,15 @@ module Geocoder
   module Request
 
     def location
-      if ip.nil? or ip == "0.0.0.0" or ip.match /^127/ # don't look up loopback
-        # but return a Geocoder::Result for consistency
-        Geocoder::Result::Freegeoip.new("ip" => ip)
-      else
-        Geocoder.search(ip).first
+      unless defined?(@location)
+        if ip.nil? or ip == "0.0.0.0" or ip.match /^127/ # don't look up loopback
+          # but return a Geocoder::Result for consistency
+          @location = Geocoder::Result::Freegeoip.new("ip" => ip)
+        else
+          @location = Geocoder.search(ip).first
+        end
       end
+      @location
     end
   end
 end