introduce IWidget