Refactor to Interfaces