diff --git a/lib/geocoder/lookups/geolite2.rb b/lib/geocoder/lookups/geolite2.rb
index 83bb05d4b1312d89ea8d28af8f43a22017a15324..c0246b6e49ed5ff8d6412c97c4b89bc02aacd3c4 100644
--- a/lib/geocoder/lookups/geolite2.rb
+++ b/lib/geocoder/lookups/geolite2.rb
@@ -1,4 +1,3 @@
-require 'ipaddr'
 require 'geocoder/lookups/base'
 require 'geocoder/results/geolite2'
 
@@ -11,9 +10,7 @@ module Geocoder
             gem_name = 'hive_geoip2'
             require gem_name
           rescue LoadError
-            raise "Could not load maxminddb dependency. To use MaxMind2 Local \
-            lookup you must add the #{gem_name} gem to your Gemfile or \
-            have it installed in your system."
+            raise "Could not load maxminddb dependency. To use GeoLite2 lookup you must add the #{gem_name} gem to your Gemfile or have it installed in your system."
           end
         end
         super
diff --git a/lib/geocoder/results/geolite2.rb b/lib/geocoder/results/geolite2.rb
index 94dd5db3d9e98ac7cdc94956c916894d8abcc164..3f3d027ce468b06b885556073fe5f2723f858082 100644
--- a/lib/geocoder/results/geolite2.rb
+++ b/lib/geocoder/results/geolite2.rb
@@ -4,7 +4,7 @@ module Geocoder
   module Result
     class Geolite2 < Base
       def address(format = :full)
-        s = state.to_s == '' ? '' : ", #{state}"
+        s = state.to_s == '' ? '' : ", #{state_code}"
         "#{city}#{s} #{postal_code}, #{country}".sub(/^[ ,]*/, '')
       end
 
diff --git a/test/test_helper.rb b/test/test_helper.rb
index b6a68f76e57241cb9d1cb7af832f6c192d0fbc4b..b447cf21b097383e5d626d597e688d262b1ac533 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -150,6 +150,25 @@ module Geocoder
       end
     end
 
+    class Geolite2
+      private
+
+      remove_method(:results)
+
+      def results(query)
+        return [] if query.to_s == 'no results'
+        return [] if query.to_s == '127.0.0.1'
+        [{'city'=>{'names'=>{'en'=>'Mountain View'}},'country'=>{'iso_code'=>'US','names'=>
+        {'en'=>'United States'}},'location'=>{'latitude'=>37.41919999999999,
+        'longitude'=>-122.0574},'postal'=>{'code'=>'94043'},'subdivisions'=>[{
+        'iso_code'=>'CA','names'=>{'en'=>'California'}}]}]
+      end
+
+      def default_fixture_filename
+        'geolite2_74_200_247_59'
+      end
+    end
+
     class Telize
       private
       def default_fixture_filename
diff --git a/test/unit/cache_test.rb b/test/unit/cache_test.rb
index 7777fdb2408899ee5fb09295977ed20ac9943a84..6ad4a11e6457beae4b317a1c7e74a692b807bce4 100644
--- a/test/unit/cache_test.rb
+++ b/test/unit/cache_test.rb
@@ -7,7 +7,7 @@ class CacheTest < GeocoderTestCase
   def test_second_occurrence_of_request_is_cache_hit
     Geocoder.configure(:cache => {})
     Geocoder::Lookup.all_services_except_test.each do |l|
-      next if l == :maxmind_local # local, does not use cache
+      next if l == :maxmind_local || l == :geolite2 # local, does not use cache
       Geocoder.configure(:lookup => l)
       set_api_key!(l)
       results = Geocoder.search("Madison Square Garden")
diff --git a/test/unit/error_handling_test.rb b/test/unit/error_handling_test.rb
index 29f2ccbb1d9878c107bd64b49a942fdc9c849785..63d6346159fa5b0374107ed5b365371fddbf7158 100644
--- a/test/unit/error_handling_test.rb
+++ b/test/unit/error_handling_test.rb
@@ -21,7 +21,7 @@ class ErrorHandlingTest < GeocoderTestCase
   def test_always_raise_timeout_error
     Geocoder.configure(:always_raise => [TimeoutError])
     Geocoder::Lookup.all_services_except_test.each do |l|
-      next if l == :maxmind_local # local, does not raise timeout
+      next if l == :maxmind_local || l == :geolite2 # local, does not use cache
       lookup = Geocoder::Lookup.get(l)
       set_api_key!(l)
       assert_raises TimeoutError do
@@ -33,7 +33,7 @@ class ErrorHandlingTest < GeocoderTestCase
   def test_always_raise_socket_error
     Geocoder.configure(:always_raise => [SocketError])
     Geocoder::Lookup.all_services_except_test.each do |l|
-      next if l == :maxmind_local # local, does not raise timeout
+      next if l == :maxmind_local || l == :geolite2 # local, does not use cache
       lookup = Geocoder::Lookup.get(l)
       set_api_key!(l)
       assert_raises SocketError do
@@ -45,7 +45,7 @@ class ErrorHandlingTest < GeocoderTestCase
   def test_always_raise_connection_refused_error
     Geocoder.configure(:always_raise => [Errno::ECONNREFUSED])
     Geocoder::Lookup.all_services_except_test.each do |l|
-      next if l == :maxmind_local # local, does not raise timeout
+      next if l == :maxmind_local || l == :geolite2 # local, does not use cache
       lookup = Geocoder::Lookup.get(l)
       set_api_key!(l)
       assert_raises Errno::ECONNREFUSED do
diff --git a/test/unit/lookup_test.rb b/test/unit/lookup_test.rb
index b1b30cb90e71d856b55b94d2aa62dc3e55fcd39b..4b36713f94432427a8d9cad3ca5699181077589e 100644
--- a/test/unit/lookup_test.rb
+++ b/test/unit/lookup_test.rb
@@ -23,7 +23,7 @@ class LookupTest < GeocoderTestCase
 
   def test_query_url_contains_values_in_params_hash
     Geocoder::Lookup.all_services_except_test.each do |l|
-      next if [:freegeoip, :maxmind_local, :telize, :pointpin].include? l # does not use query string
+      next if [:freegeoip, :maxmind_local, :telize, :pointpin, :geolite2].include? l # does not use query string
       set_api_key!(l)
       url = Geocoder::Lookup.get(l).query_url(Geocoder::Query.new(
         "test", :params => {:one_in_the_hand => "two in the bush"}
diff --git a/test/unit/lookups/geolite2_test.rb b/test/unit/lookups/geolite2_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..ac9267aaaa3302d95c92c8c3316222fd4a8f3ef7
--- /dev/null
+++ b/test/unit/lookups/geolite2_test.rb
@@ -0,0 +1,27 @@
+# encoding: utf-8
+require 'test_helper'
+
+class Geolite2Test < GeocoderTestCase
+  def setup
+    Geocoder.configure(ip_lookup: :geolite2, file: 'test_file')
+  end
+
+  def test_result_attributes
+    result = Geocoder.search('8.8.8.8').first
+    assert_equal 'Mountain View, CA 94043, United States', result.address
+    assert_equal 'Mountain View', result.city
+    assert_equal 'CA', result.state_code
+    assert_equal 'California', result.state
+    assert_equal 'United States', result.country
+    assert_equal 'US', result.country_code
+    assert_equal '94043', result.postal_code
+    assert_equal 37.41919999999999, result.latitude
+    assert_equal -122.0574, result.longitude
+    assert_equal [37.41919999999999, -122.0574], result.coordinates
+  end
+
+  def test_loopback
+    results = Geocoder.search('127.0.0.1')
+    assert_equal [], results
+  end
+end