command made immutable
replace direct construction of messages with specialized subclasses