more general updating