++ refactor