Tim,
A quick look at the code makes me wonder why it couldn't work via the perform[with] code. That would make it pass on the same message, which might be good or bad depending on your needs.
Two reasons for not using #perform:[withArguments:] a) It doesn't pass along the receiver of the message. For some of the things I wanted to do this was critical and using "thisContext sender receiver" was too ugly a hack for my taste. b) It would imply that there's a 1-on-1 match between the message sent and the (then implicit) #run: message. I thought about this but didn't like it very much as I could think about cases where I wanted to use #run: in one context and #perform: within another.
Cheers, - Andreas