NAKACK and NAKACK2 copy a message (e.g. for retransmission) and then modify the NakackHeader of the copy in place. However, as Message.copy() does not copy the headers themselves, only the array holding the references to the headers, the modification of NakackHeader will also modify the original message !
SOLUTION:
Create a new header off of the exitsing header and call Message.putHeader(), overwriting the old header.