add user provider and some enhancements