make stateChange callbacks unique per-instance