PROCEDURE MyBase.Save() IF THIS.oDataObject.Save() WITH THIS .lNew = .F. && Properties that failed to rollback if invoice details save failed. .lDirty = .F. ENDIF RETURN .T. ELSE RETURN .F. ENDIF ENDPROC **Subclass of MyBase PROCEDURE InvoiceBO.Save() THIS.BeginTrasaction() && BEGIN TRANSACTION IF NOT DODEFAULT() RETURN .F. ENDIF IF THIS.oInvoiceDetails.Save() THIS.Commit() && END TRANSACTION RETURN .T. ELSE THIS.RollBack() && ROLLBACK RETURN .F. ENDIF ENDPROC **Subclass of MyBase PROCEDURE InvoiceDetailsBO.Save() ENDPROCI used to think of "rollback" the properties lNew and lDirty in InvoiceBO.Save if transaction failed. It seem works since here. However, if that is more than one BO.property need to be rollback ex. CustomerBO that may be within invoiceBo, then how could I rollback property especially if that may be PROTECTED property?