add introduction to user and some re-factoring