CLEAR oToolBox = NEWOBJECT("ToolBox") * *** this might have been called by other functions previously oToolBox.oGlobalStr.ShowDS() oForm = NEWOBJECT("MyForm") oForm.SHOW() READ EVENTS RELEASE ; oToolBox, ; oForm RETURN DEFINE CLASS MyForm AS FORM DATASESSION = 2 LEFT = 200 ADD OBJECT TestLabel1 AS TestLabel PROCEDURE ACTIVATE * *** some of the objects on the form might be calling this oToolBox.oGlobalStr.ShowDS() ENDPROC PROCEDURE DESTROY CLEAR EVENTS ENDPROC ENDDEFINE define class TestLabel as label Caption = "Gunni Test" procedure DblClick oToolBox.oGlobalStr.ShowDS() wait wind 'finished dbl click' nowait endproc enddefine DEFINE CLASS ToolBox AS CUSTOM oGlobalStr = .NULL. PROCEDURE oGlobalStr_access IF UPPER(PROGRAM(PROGRAM(-1)-1)) <> "TOOLBOX.DESTROY" IF TYPE("THIS.oGlobalStr") <> "O" .OR. ISNULL(THIS.oGlobalStr) THIS.oGlobalStr = NEWOBJECT("GlobalStr") ENDIF *THIS.AssignCaller(THIS.oglobalstr) ENDIF RETURN THIS.oGlobalStr ENDPROC ENDDEFINE DEFINE CLASS GlobalStr AS CUSTOM PROCEDURE ShowDS IF TYPE("_screen.ActiveForm") = "O" AND !ISNULL(_SCREEN.ACTIVEFORM) IF _SCREEN.ACTIVEFORM.DATASESSION = 2 && Private _SCREEN.CLS SET DATASESSION TO _SCREEN.DATASESSIONID _SCREEN.PRINT('Screen: '+TRANS(SET("DataSession"))+CHR(13)) SET DATASESSION TO _SCREEN.ACTIVEFORM.DATASESSIONID _SCREEN.PRINT('ActiveForm: '+TRANS(SET("DataSession"))+CHR(13)) SET DATASESSION TO _SCREEN.PRINT('Current: '+TRANS(SET("DataSession"))+CHR(13)) ENDIF ENDIF ENDPROC ENDDEFINEproblem is - this is also setting the ds correctly. so now i am at a loss as to why this works, but in my app it does not. i am gonna check around a few things and see what the difference is.