- with refactoring