Issue 64: add an audit trail

See #64 

one `if` could by avoided by
```
new_value = diff.get(k)
```