diff --git a/lib/geocoder/exceptions.rb b/lib/geocoder/exceptions.rb
index 7f6a081c2c32a9f3f74c1334c0e7e24732e1479f..f01d7dd7f1c8ee2f5ff5567ea8249eaeda040b13 100644
--- a/lib/geocoder/exceptions.rb
+++ b/lib/geocoder/exceptions.rb
@@ -29,4 +29,7 @@ module Geocoder
   class ServiceUnavailable < Error
   end
 
+  class LookupTimeout < ::Timeout::Error
+  end
+
 end
diff --git a/lib/geocoder/lookups/base.rb b/lib/geocoder/lookups/base.rb
index c6332162072aa9143cdc7456ef8d1a22d07ef476..7f3da3e1e5df624a6f488990d4dfbc73af7a39ae 100644
--- a/lib/geocoder/lookups/base.rb
+++ b/lib/geocoder/lookups/base.rb
@@ -271,20 +271,20 @@ module Geocoder
       # return the response object.
       #
       def make_api_request(query)
-        timeout(configuration.timeout) do
-          uri = URI.parse(query_url(query))
-          Geocoder.log(:debug, "Geocoder: HTTP request being made for #{uri.to_s}")
-          http_client.start(uri.host, uri.port, use_ssl: use_ssl?) do |client|
-            req = Net::HTTP::Get.new(uri.request_uri, configuration.http_headers)
-            if configuration.basic_auth[:user] and configuration.basic_auth[:password]
-              req.basic_auth(
-                configuration.basic_auth[:user],
-                configuration.basic_auth[:password]
-              )
-            end
-            client.request(req)
+        uri = URI.parse(query_url(query))
+        Geocoder.log(:debug, "Geocoder: HTTP request being made for #{uri.to_s}")
+        http_client.start(uri.host, uri.port, use_ssl: use_ssl?, open_timeout: configuration.timeout, read_timeout: configuration.timeout) do |client|
+          req = Net::HTTP::Get.new(uri.request_uri, configuration.http_headers)
+          if configuration.basic_auth[:user] and configuration.basic_auth[:password]
+            req.basic_auth(
+              configuration.basic_auth[:user],
+              configuration.basic_auth[:password]
+            )
           end
+          client.request(req)
         end
+      rescue Net::OpenTimeout, Net::ReadTimeout
+        raise Geocoder::LookupTimeout
       end
 
       def use_ssl?