instancetype and refactoring