Fix: is_dirty() should match state of attributes.