only update when reeealy necessary