refactor!