Maybe it should always rely on instanceof TracedMessage, everywhere that involves the message, rather than system.hasTracer.