add callbacks and validations