Index: test-macruby/cases/hash_test.rb
===================================================================
--- test-macruby/cases/hash_test.rb	(revision 809)
+++ test-macruby/cases/hash_test.rb	(working copy)
@@ -87,5 +87,32 @@
     assert(h.empty?)
     assert_equal(nil, h[1])
   end
+  
+  it "merge should return a merged instance" do
+    h = Hash.new do |h, k|
+      12
+    end
+    h = h.merge({1 => 2})
+    assert_equal(h[1], 2)
+    assert_equal(h[:random], 12)
+  end
+  
+  it "merge! should modify the instance" do
+    h = Hash.new do |h, k|
+      12
+    end
+    h.merge!({1 => 2})
+    assert_equal(h[1], 2)
+    assert_equal(h[:random], 12)
+  end
+  
+  it "merge should not modify the instance" do
+    h = Hash.new do |h, k|
+      12
+    end
+    h.merge({1 => 2})
+    assert_equal(h[1], 12)
+    assert_equal(h[:random], 12)
+  end
 
 end
Index: hash.c
===================================================================
--- hash.c	(revision 809)
+++ hash.c	(working copy)
@@ -1415,7 +1415,7 @@
 static VALUE
 rb_hash_merge(VALUE hash1, VALUE hash2)
 {
-    return rb_hash_update(rb_hash_dup(hash1), hash2);
+    return rb_hash_update(rb_obj_dup(hash1), hash2);
 }
 
 static int
