refactor interfaces