diff --git a/lib/geocoder.rb b/lib/geocoder.rb
index d03de3e565d66f6c6832e42e33648805f7a6bee6..9e1f157552313149fc08c6f3725866253c19255e 100644
--- a/lib/geocoder.rb
+++ b/lib/geocoder.rb
@@ -1,8 +1,9 @@
 require "geocoder/configuration"
 require "geocoder/calculations"
 require "geocoder/cache"
-require "geocoder/model"
 require "geocoder/request"
+require "geocoder/models/active_record"
+require "geocoder/models/mongoid"
 
 module Geocoder
   extend self
diff --git a/lib/geocoder/model.rb b/lib/geocoder/model.rb
deleted file mode 100644
index 752ee8213c3bd7d2abd30f4ed9ab99359064b15f..0000000000000000000000000000000000000000
--- a/lib/geocoder/model.rb
+++ /dev/null
@@ -1,110 +0,0 @@
-require 'geocoder'
-
-module Geocoder
-
-  ##
-  # Methods for invoking Geocoder in a model.
-  #
-  module Model
-    module Base
-
-      def geocoder_options
-        @geocoder_options
-      end
-
-      private # ----------------------------------------------------------------
-
-      def geocoder_init(options)
-        unless geocoder_initialized?
-          @geocoder_options = {}
-          require "geocoder/orms/#{geocoder_file_name}"
-          include eval("Geocoder::Orm::" + geocoder_module_name)
-        end
-        @geocoder_options.merge! options
-      end
-
-      def geocoder_initialized?
-        begin
-          included_modules.include? eval("Geocoder::Orm::" + geocoder_module_name)
-        rescue NameError
-          false
-        end
-      end
-    end
-
-    module ActiveRecord
-      include Base
-
-      ##
-      # Set attribute names and include the Geocoder module.
-      #
-      def geocoded_by(address_attr, options = {}, &block)
-        geocoder_init(
-          :geocode       => true,
-          :user_address  => address_attr,
-          :latitude      => options[:latitude]  || :latitude,
-          :longitude     => options[:longitude] || :longitude,
-          :geocode_block => block
-        )
-      end
-
-      ##
-      # Set attribute names and include the Geocoder module.
-      #
-      def reverse_geocoded_by(latitude_attr, longitude_attr, options = {}, &block)
-        geocoder_init(
-          :reverse_geocode => true,
-          :fetched_address => options[:address] || :address,
-          :latitude        => latitude_attr,
-          :longitude       => longitude_attr,
-          :reverse_block   => block
-        )
-      end
-
-      private
-      def geocoder_file_name;   "active_record"; end
-      def geocoder_module_name; "ActiveRecord"; end
-    end
-
-    module Mongoid
-      include Base
-
-      ##
-      # Set attribute names and include the Geocoder module.
-      #
-      def geocoded_by(address_attr, options = {}, &block)
-        geocoder_init(
-          :geocode       => true,
-          :user_address  => address_attr,
-          :coordinates   => options[:coordinates] || :coordinates,
-          :geocode_block => block
-        )
-      end
-
-      ##
-      # Set attribute names and include the Geocoder module.
-      #
-      def reverse_geocoded_by(coordinates_attr, options = {}, &block)
-        geocoder_init(
-          :reverse_geocode => true,
-          :fetched_address => options[:address] || :address,
-          :coordinates     => coordinates_attr,
-          :reverse_block   => block
-        )
-      end
-
-      def self.included(base); base.extend(self); end
-      private
-      def geocoder_file_name;   "mongoid"; end
-      def geocoder_module_name; "Mongoid"; end
-
-      def geocoder_init(options)
-        super(options)
-
-        # create 2d index
-        index [[ geocoder_options[:coordinates], Mongo::GEO2D ]],
-          :min => -180, :max => 180
-      end
-    end
-  end
-end
diff --git a/lib/geocoder/models/active_record.rb b/lib/geocoder/models/active_record.rb
new file mode 100644
index 0000000000000000000000000000000000000000..67a17106accb7e66632091aac450bed5ceb2f699
--- /dev/null
+++ b/lib/geocoder/models/active_record.rb
@@ -0,0 +1,41 @@
+require 'geocoder/models/base'
+
+module Geocoder
+  module Model
+    module ActiveRecord
+      include Base
+
+      ##
+      # Set attribute names and include the Geocoder module.
+      #
+      def geocoded_by(address_attr, options = {}, &block)
+        geocoder_init(
+          :geocode       => true,
+          :user_address  => address_attr,
+          :latitude      => options[:latitude]  || :latitude,
+          :longitude     => options[:longitude] || :longitude,
+          :geocode_block => block
+        )
+      end
+
+      ##
+      # Set attribute names and include the Geocoder module.
+      #
+      def reverse_geocoded_by(latitude_attr, longitude_attr, options = {}, &block)
+        geocoder_init(
+          :reverse_geocode => true,
+          :fetched_address => options[:address] || :address,
+          :latitude        => latitude_attr,
+          :longitude       => longitude_attr,
+          :reverse_block   => block
+        )
+      end
+
+
+      private # --------------------------------------------------------------
+
+      def geocoder_file_name;   "active_record"; end
+      def geocoder_module_name; "ActiveRecord"; end
+    end
+  end
+end
diff --git a/lib/geocoder/models/base.rb b/lib/geocoder/models/base.rb
new file mode 100644
index 0000000000000000000000000000000000000000..aeaf4d9def4002775061bcd2a9d02c5fb17aeb2f
--- /dev/null
+++ b/lib/geocoder/models/base.rb
@@ -0,0 +1,44 @@
+require 'geocoder'
+
+module Geocoder
+
+  ##
+  # Methods for invoking Geocoder in a model.
+  #
+  module Model
+    module Base
+
+      def geocoder_options
+        @geocoder_options
+      end
+
+      def geocoded_by
+        fail
+      end
+
+      def reverse_geocoded_by
+        fail
+      end
+
+
+      private # ----------------------------------------------------------------
+
+      def geocoder_init(options)
+        unless geocoder_initialized?
+          @geocoder_options = {}
+          require "geocoder/orms/#{geocoder_file_name}"
+          include eval("Geocoder::Orm::" + geocoder_module_name)
+        end
+        @geocoder_options.merge! options
+      end
+
+      def geocoder_initialized?
+        begin
+          included_modules.include? eval("Geocoder::Orm::" + geocoder_module_name)
+        rescue NameError
+          false
+        end
+      end
+    end
+  end
+end
diff --git a/lib/geocoder/models/mongoid.rb b/lib/geocoder/models/mongoid.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a3d2b1ffd6dbba6b65862da0febb64bcad40671a
--- /dev/null
+++ b/lib/geocoder/models/mongoid.rb
@@ -0,0 +1,47 @@
+require 'geocoder/models/base'
+
+module Geocoder
+  module Model
+    module Mongoid
+      include Base
+
+      def self.included(base); base.extend(self); end
+
+      ##
+      # Set attribute names and include the Geocoder module.
+      #
+      def geocoded_by(address_attr, options = {}, &block)
+        geocoder_init(
+          :geocode       => true,
+          :user_address  => address_attr,
+          :coordinates   => options[:coordinates] || :coordinates,
+          :geocode_block => block
+        )
+      end
+
+      ##
+      # Set attribute names and include the Geocoder module.
+      #
+      def reverse_geocoded_by(coordinates_attr, options = {}, &block)
+        geocoder_init(
+          :reverse_geocode => true,
+          :fetched_address => options[:address] || :address,
+          :coordinates     => coordinates_attr,
+          :reverse_block   => block
+        )
+      end
+
+
+      private # --------------------------------------------------------------
+
+      def geocoder_file_name;   "mongoid"; end
+      def geocoder_module_name; "Mongoid"; end
+
+      def geocoder_init(options)
+        super(options)
+        index [[ geocoder_options[:coordinates], Mongo::GEO2D ]],
+          :min => -180, :max => 180 # create 2d index
+      end
+    end
+  end
+end
diff --git a/lib/geocoder/railtie.rb b/lib/geocoder/railtie.rb
index 62cc25163ee27202a5c02c56a7bfac04626f44b3..e39eb9d95755635d41da0f579475d0d9bad3c746 100644
--- a/lib/geocoder/railtie.rb
+++ b/lib/geocoder/railtie.rb
@@ -1,5 +1,5 @@
 require 'geocoder'
-require 'geocoder/model'
+require 'geocoder/models/active_record'
 
 module Geocoder
   if defined? Rails::Railtie