new refactor