diff --git a/lib/geocoder/query.rb b/lib/geocoder/query.rb
index 242ff0e7018ca9ea58d361bf884b4fddf94d47e9..61710ef922f742b82c9f2d3210f5864c0da12ac6 100644
--- a/lib/geocoder/query.rb
+++ b/lib/geocoder/query.rb
@@ -32,7 +32,7 @@ module Geocoder
     # appropriate to the Query text.
     #
     def lookup
-      if options[:ip_address] || ip_address?
+      if !options[:street_address] and (options[:ip_address] or ip_address?)
         name = options[:ip_lookup] || Configuration.ip_lookup || Geocoder::Lookup.ip_services.first
       else
         name = options[:lookup] || Configuration.lookup || Geocoder::Lookup.street_services.first
diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb
index 1e731d39057effb012cd0aac08f3800843405a45..14a707e89209c0e69512e463c1ed977ad0d8869a 100644
--- a/test/unit/query_test.rb
+++ b/test/unit/query_test.rb
@@ -57,6 +57,13 @@ class QueryTest < GeocoderTestCase
     assert_instance_of Geocoder::Lookup::Google, query.lookup
   end
 
+  def test_force_specify_street_address
+    Geocoder.configure({:lookup => :google, :ip_lookup => :freegeoip})
+    query = Geocoder::Query.new("4.1.0.2", {street_address: true})
+    assert query.ip_address?
+    assert_instance_of Geocoder::Lookup::Google, query.lookup
+  end
+
   def test_force_specify_ip_address_with_ip_lookup
     query = Geocoder::Query.new("address", {:ip_address => true, :ip_lookup => :google})
     assert !query.ip_address?