stateChanged now checks source object