rework widget inheritance