refactor user module