port over changeset and object_changes from master branch