add common methods, statics, virtuals and validations