only update_positions if changed