refactor program collectors (new base class, pull up common behavior / data)