diff --git a/README_API_GUIDE.md b/README_API_GUIDE.md
index c7ca51b92982f3c0f47e888a6f40d78ef0638465..046279151531aa9eb90dde74a7f15b15b661431d 100644
--- a/README_API_GUIDE.md
+++ b/README_API_GUIDE.md
@@ -265,18 +265,6 @@ Data Science Toolkit provides an API whose response format is like Google's but
 * **Terms of Service**: http://smartystreets.com/legal/terms-of-service
 * **Limitations**: No reverse geocoding.
 
-
-### OKF Geocoder (`:okf`)
-
-* **API key**: none
-* **Quota**: none
-* **Region**: FI
-* **SSL support**: no
-* **Languages**: fi
-* **Documentation**: http://books.okf.fi/geocoder/_full/
-* **Terms of Service**: http://www.itella.fi/liitteet/palvelutjatuotteet/yhteystietopalvelut/Postinumeropalvelut-Palvelukuvausjakayttoehdot.pdf
-* **Limitations**: ?
-
 ### Geoportail.lu (`:geoportail_lu`)
 
 * **API key**: none
diff --git a/lib/geocoder/lookup.rb b/lib/geocoder/lookup.rb
index baa85c9d2b4fc14e7d80d820bf154c02463cfde4..df284da443ea109e283a54b5f19b505bfb9e7ec3 100644
--- a/lib/geocoder/lookup.rb
+++ b/lib/geocoder/lookup.rb
@@ -45,7 +45,6 @@ module Geocoder
         :baidu,
         :geocodio,
         :smarty_streets,
-        :okf,
         :postcode_anywhere_uk,
         :postcodes_io,
         :geoportail_lu,
diff --git a/lib/geocoder/lookups/okf.rb b/lib/geocoder/lookups/okf.rb
deleted file mode 100644
index 54909bb2dcd8a330710676155193f1a905ab4f15..0000000000000000000000000000000000000000
--- a/lib/geocoder/lookups/okf.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-require 'geocoder/lookups/base'
-require "geocoder/results/okf"
-
-module Geocoder::Lookup
-  class Okf < Base
-
-    def name
-      "Okf"
-    end
-
-    def query_url(query)
-      "#{protocol}://data.okf.fi/gis/1/geocode/json?" + url_query_string(query)
-    end
-
-    private # ---------------------------------------------------------------
-
-    def valid_response?(response)
-      json = parse_json(response.body)
-      status = json["status"] if json
-      super(response) and ['OK', 'ZERO_RESULTS'].include?(status)
-    end
-
-    def results(query)
-      return [] unless doc = fetch_data(query)
-      case doc['status']; when "OK" # OK status implies >0 results
-        return doc['results']
-      end
-      return []
-    end
-
-    def query_url_okf_params(query)
-      params = {
-        (query.reverse_geocode? ? :latlng : :address) => query.sanitized_text,
-        :sensor => "false",
-        :language => (query.language || configuration.language)
-      }
-      params
-    end
-
-    def query_url_params(query)
-      query_url_okf_params(query).merge(super)
-    end
-  end
-end
diff --git a/lib/geocoder/results/okf.rb b/lib/geocoder/results/okf.rb
deleted file mode 100644
index 973922591474c75897a963e4d0b1aef46cd028ed..0000000000000000000000000000000000000000
--- a/lib/geocoder/results/okf.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-require 'geocoder/results/base'
-
-module Geocoder::Result
-  class Okf < Base
-
-    def coordinates
-      ['lat', 'lng'].map{ |i| geometry['location'][i] }
-    end
-
-    def address(format = :full)
-      formatted_address
-    end
-
-    def city
-      fields = [:locality, :sublocality,
-        :administrative_area_level_3,
-        :administrative_area_level_2]
-      fields.each do |f|
-        if entity = address_components_of_type(f).first
-          return entity['long_name']
-        end
-      end
-      return nil # no appropriate components found
-    end
-
-  def state
-    ""
-  end
-
-  def sub_state
-    ""
-  end
-
-  def state_code
-    ""
-  end
-
-    def country
-      if country = address_components_of_type(:country).first
-        country['long_name']
-      end
-    end
-
-    def country_code
-      if country = address_components_of_type(:country).first
-        country['short_name']
-      end
-    end
-
-    def postal_code
-      if postal = address_components_of_type(:postal_code).first
-        postal['long_name']
-      end
-    end
-
-    def route
-      if route = address_components_of_type(:route).first
-        route['long_name']
-      end
-    end
-
-    def street_number
-      if street_number = address_components_of_type(:street_number).first
-        street_number['long_name']
-      end
-    end
-
-    def street_address
-      [route, street_number].compact.join(' ')
-    end
-
-    def types
-      @data['types']
-    end
-
-    def formatted_address
-      @data['formatted_address']
-    end
-
-    def address_components
-      @data['address_components']
-    end
-
-    ##
-    # Get address components of a given type. Valid types are defined in
-    # Google's Geocoding API documentation and include (among others):
-    #
-    #   :street_number
-    #   :locality
-    #   :neighborhood
-    #   :route
-    #   :postal_code
-    #
-    def address_components_of_type(type)
-      address_components.select{ |c| c['types'].include?(type.to_s) }
-    end
-
-    def geometry
-      @data['geometry']
-    end
-
-    def precision
-      geometry['location_type'] if geometry
-    end
-  end
-end
diff --git a/test/fixtures/okf_kirstinmaki b/test/fixtures/okf_kirstinmaki
deleted file mode 100644
index 79d50b9636c554fb7af243820cfe29ae3d3b6cc7..0000000000000000000000000000000000000000
--- a/test/fixtures/okf_kirstinmaki
+++ /dev/null
@@ -1,67 +0,0 @@
-{
-   "status" : "OK",
-   "results" : [
-      {
-         "formatted_address" : "Kirstinmäki 1, 02760 Espoo, Suomi",
-         "sources" : [
-            {
-               "name" : "National Land Survey of Finland - Topographic Dataset (2013-03-08)",
-               "terms_of_use" : "National Land Survey open data licence - version 1.0 - 1 May 2012\nhttp://www.maanmittauslaitos.fi/en/NLS_open_data_licence_version1_20120501"
-            },
-            {
-               "name" : "Itella perusosoitteisto (2014-02-01)",
-               "terms_of_use" : "http://www.itella.fi/liitteet/palvelutjatuotteet/yhteystietopalvelut/Postinumeropalvelut-Palvelukuvausjakayttoehdot.pdf"
-            }
-         ],
-         "types" : [
-            "street_address"
-         ],
-         "address_components" : [
-            {
-               "types" : [
-                  "street_number"
-               ],
-               "short_name" : "1",
-               "long_name" : "1"
-            },
-            {
-               "types" : [
-                  "route"
-               ],
-               "short_name" : "Kirstinmäki",
-               "long_name" : "Kirstinmäki"
-            },
-            {
-               "types" : [
-                  "administrative_area_level_3",
-                  "political"
-               ],
-               "short_name" : "Espoo",
-               "long_name" : "Espoo"
-            },
-            {
-               "types" : [
-                  "postal_code"
-               ],
-               "short_name" : "02760",
-               "long_name" : "02760"
-            },
-            {
-               "types" : [
-                  "country",
-                  "political"
-               ],
-               "short_name" : "FI",
-               "long_name" : "Suomi"
-            }
-         ],
-         "geometry" : {
-            "location" : {
-               "lat" : 60.2015185792087,
-               "lng" : 24.6667520050026
-            },
-            "location_type" : "RANGE_INTERPOLATED"
-         }
-      }
-   ]
-}
diff --git a/test/fixtures/okf_no_results b/test/fixtures/okf_no_results
deleted file mode 100644
index 184b56deadf96dcb3f8a3138cbe72fe4e610c7a6..0000000000000000000000000000000000000000
--- a/test/fixtures/okf_no_results
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-   "status" : "ZERO_RESULTS",
-   "results" : []
-}
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 1f67af1bbc5b5cb14b397fc5f23a8b1244618785..6274956581d14f176e222974c924f5551329f473 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -318,14 +318,6 @@ module Geocoder
       end
     end
 
-    require 'geocoder/lookups/okf'
-    class Okf
-      private
-      def default_fixture_filename
-        "okf_kirstinmaki"
-      end
-    end
-
     require 'geocoder/lookups/postcode_anywhere_uk'
     class PostcodeAnywhereUk
       private
diff --git a/test/unit/error_handling_test.rb b/test/unit/error_handling_test.rb
index 689d1fe56c46d6ddfbb9f472d1ab4c863d9ea6e2..00066a3f5136455953316fd4a9e54cd94fac4231 100644
--- a/test/unit/error_handling_test.rb
+++ b/test/unit/error_handling_test.rb
@@ -19,7 +19,7 @@ class ErrorHandlingTest < GeocoderTestCase
 
   def test_always_raise_response_parse_error
     Geocoder.configure(:always_raise => [Geocoder::ResponseParseError])
-    [:freegeoip, :google, :ipdata_co, :okf].each do |l|
+    [:freegeoip, :google, :ipdata_co].each do |l|
       lookup = Geocoder::Lookup.get(l)
       set_api_key!(l)
       assert_raises Geocoder::ResponseParseError do
@@ -29,7 +29,7 @@ class ErrorHandlingTest < GeocoderTestCase
   end
 
   def test_never_raise_response_parse_error
-    [:freegeoip, :google, :ipdata_co, :okf].each do |l|
+    [:freegeoip, :google, :ipdata_co].each do |l|
       lookup = Geocoder::Lookup.get(l)
       set_api_key!(l)
       silence_warnings do
diff --git a/test/unit/lookups/okf_test.rb b/test/unit/lookups/okf_test.rb
deleted file mode 100644
index b05cce85d15da5989b0542b4ae747652cbcea653..0000000000000000000000000000000000000000
--- a/test/unit/lookups/okf_test.rb
+++ /dev/null
@@ -1,37 +0,0 @@
-# encoding: utf-8
-require 'test_helper'
-
-class OkfTest < GeocoderTestCase
-
-  def setup
-    Geocoder.configure(lookup: :okf)
-  end
-
-  def test_okf_result_components
-    result = Geocoder.search("Kirstinmäki 11b28").first
-    assert_equal "Espoo",
-      result.address_components_of_type(:administrative_area_level_3).first['long_name']
-  end
-
-  def test_okf_result_components_contains_route
-    result = Geocoder.search("Kirstinmäki 11b28").first
-    assert_equal "Kirstinmäki",
-      result.address_components_of_type(:route).first['long_name']
-  end
-
-  def test_okf_result_components_contains_street_number
-    result = Geocoder.search("Kirstinmäki 11b28").first
-    assert_equal "1",
-      result.address_components_of_type(:street_number).first['long_name']
-  end
-
-  def test_okf_street_address_returns_formatted_street_address
-    result = Geocoder.search("Kirstinmäki 11b28").first
-    assert_equal "Kirstinmäki 1", result.street_address
-  end
-
-  def test_okf_precision
-    result = Geocoder.search("Kirstinmäki 11b28").first
-    assert_equal "RANGE_INTERPOLATED", result.precision
-  end
-end