#3 refactoring