cleanup
adding has_changed utility
cleanup
some more cleanup