SELECT comm fdate1=bdate ldate1=edate SELECT master1 ZAP && zap before index on so thewre are less records to index. INDEX ON date TAG master11 & Use a structural index file instead of an IDX file DO WHILE fdate1<=ldate1 SELECT DISTINCT vou_no FROM crsalp WHERE date=fdate1 AND vou_type='SR' INTO CURSOR vf NOFILTER sr1=RECCOUNT("vf") SELECT DISTINCT vou_no FROM cashsalp WHERE date=fdate1 AND vou_type='SR' INTO CURSOR fg NOFILTER sc1=RECCOUNT("fg") SELECT DISTINCT vou_no FROM crprp WHERE date=fdate1 AND vou_type='SR' INTO CURSOR vg NOFILTER pr1=RECCOUNT("vg") SELECT DISTINCT vou_no FROM cashprp WHERE date=fdate1 AND vou_type='SR' INTO CURSOR wg NOFILTER pc1=RECCOUNT("wg") SELECT distinct vou_type, vou_no ; FROM vouchers ; WHERE date=fdate1 AND (vou_type = "CR" OR vou_type = "CP" OR vou_type = "JV") ; GROUP BY vou_type, vou_no INTO CURSOR va SELECT va COUNT FOR vou_type = "CR" TO cr1 COUNT FOR vou_type = "CP" TO cp1 COUNT FOR vou_type = "JV" TO jv1 totals = cr1 + cp1 + jv1 + sr1 + sc1 + pr1 + pc1 IF totals > 0 INSERT INTO Master1 (date, open_dr, open_cr, debit, credit, close_dr, close_cr, wt, balance) ; VALUES (fdate1, cr1, cp1, jv1, sr1, sc1, pr1, pc1, totals) ENDIF fdate1 = fdate1+1 ENDDOI don't know how much faster this will be but it will give you accurate results. The speed will be most affect4ed by the indexes being created.