non-bottleneck update