refactor not to extend message and delegate instead