You bring up a valid point.   Unfortunately the `changedAttributes()` internals aren't filled until the internal `set` is called.  What I can do is use a lock to buffer the calls to `save_changes` and then call them after `this._buffered_state_diff` has been set.