added support for default values, validations, and other callbacks