This is another part of what's causing the 1.8 `method_missing` failure.  If you look at `MethodReference`, you'll see that it defines "implemented" to mean "responds to the message" and "defined" to mean "can get a `Method` or `UnboundMethod` object for the message".  You've conflated the two here, and both `when_defined` and `when_unimplemented` are implemented in terms of whether or not we can get a method object.  `when_unimplemented` should really be something like `yield unless object.respond_to?(method_name)`.  However -- I'm not sure if that'll work because the method definition may have already been redefined as a stub, so the object may respond to the message at this point even though it originally didn't.  Thus, I think you may need to store the `respond_to?` value early, before the method has been stubbed.