needs some optimization, but sync/change seems to be working