refactored widget DON'T MERGE