refactoring to allow for more interfaces