refactoring; start point