The first of the two objects you're dispatching on here makes some sense to me.  I'm not so sure that I'm sold on the second.  How many places is this called?  Would there be a downside to just forcing the second argument to be one of the two types?