non-recursive update