Refactor to protected and private methods