DEFINE cSession AS Session oDE = NULL oForm = NULL FUNCTION Init LPARAMETERS pcDE, pcForm LOCAL llresult SET PROCEDURE TO (pcDE) This.oDE = CREATEOBJECT('cDataEnv') llresult = NOT ISNULL(This.oDe) IF llresult AND PCOUNT() = 2 DO FORM (pcForm) NAME This.oForm NOSHOW llresult = NOT ISNULL(This.oForm) IF llresult This.oForm.DataSessionID = This.DataSessionID This.oForm.Show ENDIF ENDIF RETURN llresult ENDFUNC PROCEDURE oForm_Assign LPARAMETER vNewVal This.oForm = vNewVal IF ISNULL(This.oForm) This.Destroy ENDIF RETURN ENDPROC ENDDEFINEI should note that the actual custom DE's destroy event contains a call to CloseTables, and the Init a call to OpenTables.