add validations && add callbacks