Set Index to Age nMinAge=30 nMaxAge=40 #DEFINE AdditionalCriteria Salary>100000 .and. Sex="F" SEEK nMinAge If Found() SCAN REST WHILE Age<=nMaxAge FOR AdditionalCriteria && This loop runs very fast ENDSCAN ENDIFThe WHILE clause has precedence and follows the index order. The for clause acts like a filter while the WHILE clause is satisified. When the WHILE clause is not longer satisified, the SCAN terminates. If you know ahead of time that many records meeting the WHILE condition will not meet the FOR condition, then you will actually save time using a FOR condition even if you need to completely re-use the FOR expression as part of a calculation within the SCAN loop. This is because VFP is efficient at how it compiles and applies the FOR condition of a SCAN loop (even without Rushmore) versus *not* using a FOR clause, and instead trying to apply the same logical expression/calculation inside of a SCAN loop with an IF statement.