edit: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/mspec/lib/mspec/mocks/mock.rb;C1086571
File: mock.rb
===================================================================
--- $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/mspec/lib/mspec/mocks/mock.rb;C1086571  (server)    10/13/2009 5:08 PM
+++ Shelved Change: $/Dev10/feature/vs_langs01_s/Merlin/External.LCA_RESTRICTED/Languages/IronRuby/mspec/mspec/lib/mspec/mocks/mock.rb;MSpecBug
@@ -163,20 +163,37 @@
                             "called with unexpected arguments (#{Array(compare).join(' ')})")
     end
   end
+  
+  def self.uninstall_method(obj, sym, replaced)
+    meta = obj.metaclass
+    if mock_respond_to? obj, replaced
+        meta.__send__ :alias_method, sym, replaced
+        meta.__send__ :remove_method, replaced
+      else
+        meta.__send__ :remove_method, sym
+      end
+  end
 
   def self.cleanup
+    replaced_respond_tos = []
+    
     objects.each do |key, obj|
       replaced = key.first
       sym = key.last
-      meta = obj.metaclass
-
-      if mock_respond_to? obj, replaced
-        meta.__send__ :alias_method, sym, replaced
-        meta.__send__ :remove_method, replaced
+      
+      if sym != :respond_to?
+        uninstall_method obj, sym, replaced
       else
-        meta.__send__ :remove_method, sym
+        replaced_respond_tos << [obj, sym, replaced]
       end
     end
+      
+    
+    # remove respond_to? last so that we don't remove it while we still use it in mock_respond_to?
+    replaced_respond_tos.each do |obj, sym, replaced|
+      uninstall_method obj, sym, replaced
+    end
+    
     reset
   end
 end
===================================================================
