Many object-oriented applications require explicit control over the message flow to support flexible wrapping, interceptions, modifications of messages, traces, and other message control tasks. In object systems this control can also be used to express architectural semantics across several objects or classes. But most programming languages do not support such techniques as native language constructs. As a solution, a MESSAGE REDIRECTOR controls the method calls to (and within) the affected subsystems by providing a symbolic indirection and a message dispatch mechanism. Callbacks can be invoked during redirection to modify or extend dispatch-related semantics.