It is common to have to keep the header of a message as it goes through the flow: E.g. pick up a message from the bus, apply command, and post downstream.
It would be great if there was another constructor to GenericMessage which takes a message as its argument and essentially clones it (e.g. copies over the payload + header). The copy can be deep or not.