separate trigger responsibilities and move trigger collection to a set