refactored interface