Under stress, UNICAST2 can deliver messages in incorrect order. The reason is that in UNICAST2.handleDataReceived() 'processing' is set to false in the finally clause, no matter what. This can cause multiple threads to concurrently deliver messages for the same destination.
SOLUTION: copy the code from NAKACK.handleMessage(), which does not set 'processing' to false in finally