* Create object oSomeObject ... USE IN (SELECT("ObjectList")) CREATE CURSOR ObjectList ( ; Name C(32), ; BaseClass C(32), ; ObjectHierarchy C(254)) = ObjectList(oSomeObject, "ObjectList") SELECT ObjectList BROWSE LAST NOWAIT ... Function ObjectList LPARAMETERS toObject, tcCursorName LOCAL loControl, loPage, loColumn DO CASE CASE Type("toObject.ControlCount") = "N" FOR EACH loControl IN toObject.Controls = ObjectList(loControl, tcCursorName) ENDFOR CASE Upper(toObject.Baseclass) = Upper("Pageframe") FOR EACH loPage IN toObject.Pages FOR EACH loControl IN loPage.Controls = ObjectList(loControl, tcCursorName) ENDFOR ENDFOR CASE Upper(toObject.Baseclass) = Upper("Grid") FOR EACH loColumn IN toObject.Columns FOR EACH loControl IN loColumn.Controls = ObjectList(loControl, tcCursorName) ENDFOR ENDFOR OTHERWISE INSERT INTO (tcCursorName) VALUES(toObject.Name, toObject.Baseclass, ; SYS(1272, toObject) ) ENDCASE RETURNIt's a sample code only. You'll have to adjust it to your requirements.