Changed exercise 3 to use message conventions instead of deriving from IMessage