added user validations and callbacks