Since Payload is no longer directly parsed, meaning the message IDs can't be guaranteed to be set, the ID field is no longer public. A function has been added to calculate it on first access.
Still requires testing against the reference implementation, and the API needs discussion.