Currently there is one stack for parsing request and response. This stack moves forward and then returns, allowing interceptors to parse both request and response. It should be broken into two stacks: a request stack and a response stack. This gives space for async invocations (see the following suggestions).