#define UseWorkAround 0 && change to 1 or 2 or 3 CLEAR SET MULTILOCKS ON CREATE CURSOR foo (f1 I) CURSORSETPROP("Buffering",5) INSERT INTO foo VALUES (1) INSERT INTO foo VALUES (2) liRecNo = GETNEXTMODIFIED(0,ALIAS(),.t.) DO WHILE liRecNo <> 0 liRecNo = GETNEXTMODIFIED(liRecNo,ALIAS(),.t.) ENDDO * dirty the second record GO 2 replace f1 WITH f1 IF UseWorkAround = 1 && Do not disable rules. There is no reason to disable them in this scenario. && lNoFire essentially means leave the current record dirty, but the next REPLACE && should save it anyway. liRecNo = GETNEXTMODIFIED(0,ALIAS()) ?[RECNO],RECNO() ELSE IF UseWorkAround = 2 * Force the current record to be saved into buffer GO RECNO() ENDIF liRecNo = GETNEXTMODIFIED(0,ALIAS(),.t.) IF UseWorkAround = 3 * just reread the current record GO 2 && RECNO() won't help because it returns negative number ENDIF ENDIF * try to modify the first record GO 1 replace f1 WITH f1 && <== Cursor cannot be modified because it contains an unsaved record. RETURNThanks,