It did it this way because I could synchronize on the object firing the notifications and make bindings thread-safe. The bindings would deadlock if there was a circular binding, but that was fine because circular bindings would have triggered an infinite feedback loop anyway. I abandoned the idea somewhere along the way because there were too many race conditions anyway, and it never occurred to me swizzling wasn't necessary anymore.