refactor interface