behaviors must modify changedSet
factor threeway to make reusable