Introduce AbstractMessage to allow more flexibility for transforms