UIMA AS client sendAndReceive() blocks a thread until either a reply is received or there is a timeout. If an application uses multiple threads each blocked in sendAndReceive(), there is no way for an application to correlate onBeforeMessageSend() and onBeforeProcessCAS() callbacks to a specific CAS. The callbacks only expose cas reference Id, which (in this scenario) does not help since the cas reference id is only available when sendAndReceive() returns. Modify UIMA AS to expose CAS instance when calling onBeforeMessageSend() and onBeforeProcessCAS(). The CAS will be available via a new getCAS() method defined in UimaASProcessStatus which is an argument in both callbacks.