* from RevertBuffers() IF AUSED(laWorkAreas) > 0 LOCAL lnHowMany, lcAlias FOR lnHowMany = 1 TO ALEN(laWorkAreas, 1) lcAlias = laWorkAreas[m.lnHowMany, 1] * TABLEREVERT() only works with buffered cursors: IF (CURSORGETPROP('Buffering', m.lcAlias) > 1) ; AND ThisForm.IsBufferDirty(m.lcAlias) loRecNo = CREATEOBJECT('cusPushPopRecno', m.lcAlias) && push TABLEREVERT(.T., m.lcAlias) RELEASE loRecNo && pop ENDIF && this alias is buffered ENDFOR ENDIF && there are open tables/views * (push code...below results in .inSaveRecNo being -1 as appended record) WITH This .inSaveRecNo = IIF(EOF(.icSaveAlias), 0, RECNO(.icSaveAlias)) * (pop code...a GOTO is tried but it fails) WITH This TRY GOTO RECORD (.inSaveRecNo) IN (.icSaveAlias) CATCH llSuccess = .F. ENDTRY * (and so later in code, if m.llSuccess = .F., it goes to bottom and skips leaving at EOF() IF (NOT m.llSuccess) AND (NOT EOF(.icSaveAlias)) GOTO BOTTOM IN (.icSaveAlias) IF NOT EOF(.icSaveAlias) SKIP 1 IN (.icSaveAlias) ENDIF ENDIFSo either I live with it (fairly rare condition). Before I understood what was going on, I was just forcing the form back to page 1 to and since the record on .icMainAlias is pushed/popped, nothing looked too amiss (other than the form jumping to the first page). So either I keep that code or I augment the .CancelAfterSuccess() to do a LOCATE to get back on the original record (because in these forms, there is only ever 1 record in .icMainViewAlias). Or I mess with doing my own push/pop of the original record in .icMainViewAlias which I really do not want to do.