Refactor out some base methods
More configurability and structure