lcTextToSearch=padr("REJECTED",20) && change 20 to the length of the cSTATUS field. lcWorkOrderNo=SALEORDER_ITEMS.cWorkOrderNo && Whenever possible keep what you search for in a variable!!! SELECT * FROM ROLLS WHERE UPPER((cSTATUS)==lcTextToSearch AND ROLLS.cWorkOrderID == lcWorkOrderNo ORDER BY nRoll INTO CURSOR tmpRejected lcWorkOrderNo=SALEORDER_ITEMS.cWorkOrderNo && Whenever possible keep what you search for in a variable!!! SELECT * FROM ROLLS WHERE UPPER(cSTATUS)==lcTextToSearch AND ROLLS.cWorkOrderID == lcWorkOrderNo ORDER BY nRoll INTO CURSOR tmpAccepted lcTextToSearch=SALEORDER_ITEMS.cWorkOrderNo && Whenever possible keep what you search for in a variable!!! SELECT nWeight_Roll, ; SUM(nWeight_Roll) AS nWeight_Skid, ; SUM(nWeight_Roll_Metric) AS nWeight_Skid_Metric, ; SUM(nUPerRoll) AS nUnits_Skid, ; SUM(nFootage_Roll) AS nFootage_Skid, ; cSkidID ; FROM ROLLS ; WHERE ROLLS.cWorkOrderID = lcTextToSearch ; GROUP BY 6 ; ORDER BY 6 ; INTO CURSOR tmpSkid>I have such statements when adding production items to my table (ROLLS). These statements undoubtedly slow down the operation which varies from computer to computer, depending on it's speed, but is even relatively slow with a Pentium IV.