revert setters to non-virtual. add onSetXXX(...) instead