Refactored to have better message constructors and use Type better