update in place!