When you're using Rushmore and you issue a command with a FOR condition VFP reads the index and creates a "map" of all of the corresponding records in memory before the record pointer is moved to the first record, then when VFP needs to move to a new record it gets the next # from the "map." When you use WHILE logic, VFP simply moves the record pointer through the records in index order. On some occasions the code using FOR will be faster and others WHILE will be faster and it's often data dependent. Incidentally, try your code with the FOR condition with order set to 0 and see what the results are, it should be faster.