Because location sets may overlap, more than one location set may refer to the same memory location. Values assigned to one location set must be observed by references to overlapping locations. Thus, when a pointer is dereferenced, we iterate through all of the overlapping locations and look up in the current points-to function the values that have been assigned to each one. However, if the location being dereferenced is a unique location, values assigned to overlapping locations may have been overwritten by a strong update. In that case, we first find the position of the most recent strong update so that the lookup function will not look for assignments to overlapping locations prior to that point. Figure 10 summarizes this part of our algorithm.