diff --git a/lib/geocoder/results/test.rb b/lib/geocoder/results/test.rb
index 99ceef0c2e4643931c527a471b45c4ebfe80669b..b0e6bef2fd9c397c415681ae4eb28818a93c0061 100644
--- a/lib/geocoder/results/test.rb
+++ b/lib/geocoder/results/test.rb
@@ -4,12 +4,26 @@ module Geocoder
   module Result
     class Test < Base
 
+      def self.add_result_attribute(attr)
+        return if respond_to?(attr.to_sym)
+
+        define_method(attr) do
+          @data[attr.to_s] || @data[attr.to_sym]
+        end
+      end
+
       %w[latitude longitude neighborhood city state state_code sub_state
       sub_state_code province province_code postal_code country
       country_code address street_address street_number route geometry].each do |attr|
-        define_method(attr) do
-          @data[attr.to_s] || @data[attr.to_sym]
+        add_result_attribute(attr)
+      end
+
+      def initialize(data)
+        data.keys.each do |attr|
+          Test.add_result_attribute(attr)
         end
+
+        super
       end
     end
   end
diff --git a/test/test_mode_test.rb b/test/test_mode_test.rb
index 7f4b611581829c59fbf8ba3ae57f76a38d9d04de..62911c558bd83deb49bc09dc2c8690763944d7f9 100644
--- a/test/test_mode_test.rb
+++ b/test/test_mode_test.rb
@@ -42,6 +42,15 @@ class TestModeTest < Test::Unit::TestCase
     end
   end
 
+  def test_search_with_custom_attributes
+    custom_attributes = mock_attributes.merge(:custom => 'NY, NY')
+    Geocoder::Lookup::Test.add_stub("New York, NY", [custom_attributes])
+
+    result = Geocoder.search("New York, NY").first
+
+    assert_equal 'NY, NY', result.custom
+  end
+
   private
   def mock_attributes
     coordinates = [40.7143528, -74.0059731]