broke out msgjob and msgvisit as subclasses of msgbase