refactored change detection for source object