4335 pull from staging

Could use an Abstract Base Class for this