Refactor again into interfaces