diff --git a/lib/geocoder/request.rb b/lib/geocoder/request.rb
index 3e1dbc823a7d7d769a289f5dbed9adeadb982e07..f02aab4770dea1c1a563fc653778b130aaaa0bb5 100644
--- a/lib/geocoder/request.rb
+++ b/lib/geocoder/request.rb
@@ -8,7 +8,7 @@ module Geocoder
         if env.has_key?('HTTP_X_REAL_IP')
           @location = Geocoder.search(env['HTTP_X_REAL_IP']).first
         elsif env.has_key?('HTTP_X_FORWARDED_FOR')
-          @location = Geocoder.search(env['HTTP_X_FORWARDED_FOR']).first
+          @location = Geocoder.search(env['HTTP_X_FORWARDED_FOR'].split(/\s*,\s*/)[0]).first
         else
           @location = Geocoder.search(ip).first
         end
diff --git a/test/request_test.rb b/test/request_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3acbe2841a0d9bc307eeb0a0ec3e301cfe70e901
--- /dev/null
+++ b/test/request_test.rb
@@ -0,0 +1,29 @@
+# encoding: utf-8
+require 'test_helper'
+
+class RequestTest < Test::Unit::TestCase
+  class MockRequest
+    include Geocoder::Request
+    attr_accessor :env, :ip
+    def initialize(env={}, ip="")
+      @env = env
+      @ip  = ip
+    end
+  end
+  def test_http_x_real_ip
+    req = MockRequest.new({"HTTP_X_REAL_IP" => "74.200.247.59"})
+    assert req.location.is_a?(Geocoder::Result::Freegeoip)
+  end
+  def test_http_x_forwarded_for_without_proxy
+    req = MockRequest.new({"HTTP_X_FORWARDED_FOR" => "74.200.247.59"})
+    assert req.location.is_a?(Geocoder::Result::Freegeoip)
+  end
+  def test_http_x_forwarded_for_with_proxy
+    req = MockRequest.new({"HTTP_X_FORWARDED_FOR" => "74.200.247.59, 74.200.247.59"})
+    assert req.location.is_a?(Geocoder::Result::Freegeoip)
+  end
+  def test_with_request_ip
+    req = MockRequest.new({}, "74.200.247.59")
+    assert req.location.is_a?(Geocoder::Result::Freegeoip)
+  end
+end
\ No newline at end of file