don't mark as dirty unless the field changed

Fixes #37