continued refactor and clean up; split out base