I have not read all of the code, just changes here and I feel like model should not be even aware of `toWidgetId` I would expect that to
be part of the view code. Maybe I'm missing a reason why not, if so I'd like to see comments in code giving some clues on why.