clean widget refactoring