start of base refactor