done with user validation