lots of changes to structure
lets of refactoring, some additional validations when creating Message objects