The efficiency will come from how you manage the data. If you want to go a bit overboard, you could look into Binary Space Partition Trees (BSP Trees), but probably keeping a per page index of token location, aura radius, and id will be plenty fast. Then do your lookup in the index to get the id of all the tokens in range on the page. You would build the index at start up, then adjust it when tokens are added and removed, or their auras are changed. You will probably have a short pretty short list for a given page. One trick you can use is comparing the squared distance, as the square root of in the Pythagorean theorem is the expensive part. (This is what we did in the game industry for distance comparisons.) For example, if the aura is 10 and the token moved is 8 down and 5 right, it's faster to check if (10*10) > ( (8*8) + (5*5) ) , than check if 10 > sqrt( (8*8) + (5*5) ) .