Most of the callback insanity was happening because of a loop where the widget emitted change events even when nothing had actually changed. The widget communicates to the model, the model communicates to the widget, the widget communicates to the model, etc. Here we check for changes to put a stop to that.