use trait change events rather than handlers in addition to class hierarchy changes