>select cpayment >SCAN FOR ((cpay_flag = .t.) and (!empty(cpay_schdate))) > replace cpay_schdate with {} > replace cpay_flag with .f. > if !cpay_update = 'D' then > replace cpay_update with "C" > endif > replace cpay_amt with 0.00 >ENDSCAN >Is there an order or filter set here? My guess is that an order/filter is set and when you change the contents of the fields, the record is then placed outside of the index/filter group and, effectively, past the end of the scan range.