more accurate change detection for update