diff --git a/lib/json/common.rb b/lib/json/common.rb
index 39f6336..ddc2d19 100644
--- a/lib/json/common.rb
+++ b/lib/json/common.rb
@@ -118,7 +118,7 @@ module JSON
   #   to false.
   # * *create_additions*: If set to false, the Parser doesn't create
   #   additions even if a matchin class and create_id was found. This option
-  #   defaults to true.
+  #   defaults to false.
   def parse(source, opts = {})
     JSON.parser.new(source, opts).parse
   end
@@ -137,7 +137,7 @@ module JSON
   #   to true.
   # * *create_additions*: If set to false, the Parser doesn't create
   #   additions even if a matchin class and create_id was found. This option
-  #   defaults to true.
+  #   defaults to false.
   def parse!(source, opts = {})
     opts = {
       :max_nesting => false,
@@ -253,11 +253,18 @@ module JSON
   # Load a ruby data structure from a JSON _source_ and return it. A source can
   # either be a string-like object, an IO like object, or an object responding
   # to the read method. If _proc_ was given, it will be called with any nested
-  # Ruby object as an argument recursively in depth first order.
+  # Ruby object as an argument recursively in depth first order. To modify the
+  # default options pass in the optional _options_ argument as well.
   #
   # This method is part of the implementation of the load/dump interface of
   # Marshal and YAML.
-  def load(source, proc = nil)
+  def load(source, proc = nil, options = {})
+    load_default_options = {
+      :max_nesting      => false,
+      :allow_nan        => true,
+      :create_additions => false
+    }
+    opts = load_default_options.merge options
     if source.respond_to? :to_str
       source = source.to_str
     elsif source.respond_to? :to_io
@@ -265,7 +272,7 @@ module JSON
     else
       source = source.read
     end
-    result = parse(source, :max_nesting => false, :allow_nan => true)
+    result = parse(source, opts)
     recurse_proc(result, &proc) if proc
     result
   end
diff --git a/lib/json/pure/parser.rb b/lib/json/pure/parser.rb
index 7a09f2f..1e8c7d6 100644
--- a/lib/json/pure/parser.rb
+++ b/lib/json/pure/parser.rb
@@ -62,7 +62,7 @@ module JSON
       #   to false.
       # * *create_additions*: If set to false, the Parser doesn't create
       #   additions even if a matchin class and create_id was found. This option
-      #   defaults to true.
+      #   defaults to false.
       # * *object_class*: Defaults to Hash
       # * *array_class*: Defaults to Array
       def initialize(source, opts = {})
@@ -109,7 +109,7 @@ module JSON
           @max_nesting = 0
         end
         @allow_nan = !!opts[:allow_nan]
-        ca = true
+        ca = false
         ca = opts[:create_additions] if opts.key?(:create_additions)
         @create_id = ca ? JSON.create_id : nil
         @object_class = opts[:object_class] || Hash
diff --git a/tests/test_json_addition.rb b/tests/test_json_addition.rb
index 51e4a67..2560c73 100755
--- a/tests/test_json_addition.rb
+++ b/tests/test_json_addition.rb
@@ -64,7 +64,7 @@ class TC_JSONAddition < Test::Unit::TestCase
     a = A.new(666)
     assert A.json_creatable?
     json = generate(a)
-    a_again = JSON.parse(json)
+    a_again = JSON.parse(json, :create_additions => true)
     assert_kind_of a.class, a_again
     assert_equal a, a_again
   end
@@ -88,14 +88,14 @@ class TC_JSONAddition < Test::Unit::TestCase
     b = B.new
     assert !B.json_creatable?
     json = generate(b)
-    assert_equal({ "json_class"=>"TC_JSONAddition::B" }, JSON.parse(json))
+    assert_equal({ "json_class"=>"TC_JSONAddition::B" }, JSON.parse(json, :create_additions => true))
   end
 
   def test_extended_json_fail2
     c = C.new
     assert !C.json_creatable?
     json = generate(c)
-    assert_raises(ArgumentError) { JSON.parse(json) }
+    assert_raises(ArgumentError) { JSON.parse(json, :create_additions => true) }
   end
 
   def test_raw_strings
@@ -115,7 +115,7 @@ class TC_JSONAddition < Test::Unit::TestCase
 EOT
 # "
     assert_equal json_raw, json
-    raw_again = JSON.parse(json)
+    raw_again = JSON.parse(json, :create_additions => true)
     assert_equal raw, raw_again
   end
 
@@ -123,17 +123,17 @@ EOT
 
   def test_core
     t = Time.now
-    assert_equal t.inspect, JSON(JSON(t)).inspect
+    assert_equal t, JSON(JSON(t), :create_additions => true)
     d = Date.today
-    assert_equal d, JSON(JSON(d))
+    assert_equal d, JSON(JSON(d), :create_additions => true)
     d = DateTime.civil(2007, 6, 14, 14, 57, 10, Rational(1, 12), 2299161)
-    assert_equal d, JSON(JSON(d))
-    assert_equal 1..10, JSON(JSON(1..10))
-    assert_equal 1...10, JSON(JSON(1...10))
-    assert_equal "a".."c", JSON(JSON("a".."c"))
-    assert_equal "a"..."c", JSON(JSON("a"..."c"))
+    assert_equal d, JSON(JSON(d), :create_additions => true)
+    assert_equal 1..10, JSON(JSON(1..10), :create_additions => true)
+    assert_equal 1...10, JSON(JSON(1...10), :create_additions => true)
+    assert_equal "a".."c", JSON(JSON("a".."c"), :create_additions => true)
+    assert_equal "a"..."c", JSON(JSON("a"..."c"), :create_additions => true)
     s = MyJsonStruct.new 4711, 'foot'
-    assert_equal s, JSON(JSON(s))
+    assert_equal s, JSON(JSON(s), :create_additions => true)
     struct = Struct.new :foo, :bar
     s = struct.new 4711, 'foot'
     assert_raises(JSONError) { JSON(s) }
@@ -141,24 +141,24 @@ EOT
       raise TypeError, "test me"
     rescue TypeError => e
       e_json = JSON.generate e
-      e_again = JSON e_json
+      e_again = JSON e_json, :create_additions => true
       assert_kind_of TypeError, e_again
       assert_equal e.message, e_again.message
       assert_equal e.backtrace, e_again.backtrace
     end
-    assert_equal(/foo/, JSON(JSON(/foo/)))
-    assert_equal(/foo/i, JSON(JSON(/foo/i)))
+    assert_equal(/foo/, JSON(JSON(/foo/), :create_additions => true))
+    assert_equal(/foo/i, JSON(JSON(/foo/i), :create_additions => true))
   end
 
   def test_utc_datetime
     now = Time.now
-    d = DateTime.parse(now.to_s)                    # usual case
-    assert d, JSON.parse(d.to_json)
+    d = DateTime.parse(now.to_s, :create_additions => true)   # usual case
+    assert d, JSON.parse(d.to_json, :create_additions => true)
     d = DateTime.parse(now.utc.to_s)                # of = 0
-    assert d, JSON.parse(d.to_json)
+    assert d, JSON.parse(d.to_json, :create_additions => true)
     d = DateTime.civil(2008, 6, 17, 11, 48, 32, 1)  # of = 1 / 12 => 1/12
-    assert d, JSON.parse(d.to_json)
+    assert d, JSON.parse(d.to_json, :create_additions => true)
     d = DateTime.civil(2008, 6, 17, 11, 48, 32, 12) # of = 12 / 12 => 12
-    assert d, JSON.parse(d.to_json)
+    assert d, JSON.parse(d.to_json, :create_additions => true)
   end
 end
diff --git a/tests/test_json_rails.rb b/tests/test_json_rails.rb
index d33402d..fc857aa 100755
--- a/tests/test_json_rails.rb
+++ b/tests/test_json_rails.rb
@@ -73,7 +73,7 @@ class TC_JSONRails < Test::Unit::TestCase
     assert A.json_creatable?
     assert_equal 666, a.a
     json = generate(a)
-    a_again = JSON.parse(json)
+    a_again = JSON.parse(json, :create_additions => true)
     assert_kind_of a.class, a_again
     assert_equal a, a_again
     assert_equal 666, a_again.a
@@ -84,7 +84,7 @@ class TC_JSONRails < Test::Unit::TestCase
     assert D.json_creatable?
     assert_equal 666, d.foo
     json = generate(d)
-    d_again = JSON.parse(json)
+    d_again = JSON.parse(json, :create_additions => true)
     assert_kind_of d.class, d_again
     assert_equal d, d_again
     assert_equal 666, d_again.foo
@@ -109,14 +109,14 @@ class TC_JSONRails < Test::Unit::TestCase
     b = B.new
     assert !B.json_creatable?
     json = generate(b)
-    assert_equal({ 'json_class' => B.name }, JSON.parse(json))
+    assert_equal({ 'json_class' => B.name }, JSON.parse(json, :create_additions => true))
   end
 
   def test_extended_json_fail2
     c = C.new # with rails addition all objects are theoretically creatable
     assert C.json_creatable?
     json = generate(c)
-    assert_raises(ArgumentError) { JSON.parse(json) }
+    assert_raises(ArgumentError) { JSON.parse(json, :create_additions => true) }
   end
 
   def test_raw_strings
@@ -136,7 +136,7 @@ class TC_JSONRails < Test::Unit::TestCase
 EOT
 # "
     assert_equal json_raw, json
-    raw_again = JSON.parse(json)
+    raw_again = JSON.parse(json, :create_additions => true)
     assert_equal raw, raw_again
   end
 
