new refactor version