user refactor