Discipulus, good advice regarding freeing up variables that are no longer in use (it not only was slowing processing, but was also giving me inaccurate results). undef()'ing them at the right places helped. Both, memory and cpu are not constraints (not even close to max'ing out on either with my current approach - tiny footprint on both using simple arrays and loops). Any advice on speeding up the first process of going from 2000 products to 2 million pairs would be greatly appreciated, thanks.