First .F. First .T. Second .T. local oObj oObj = createobject("oFirst") ?oObj.Name, transform(pemstatus(oObj,"testpem",5)) ChangeObject(oObj) ?oObj.Name, transform(pemstatus(oObj,"testpem",5)) ChangeObject(@oObj) ?oObj.Name, transform(pemstatus(oObj,"testpem",5)) return function ChangeObject lparam toObj toObj.AddProperty("testpem") toObj = createobject("oSecond") endfunc define class oFirst as custom name = 'First' enddefine define class oSecond as custom name= 'Second' testpem = .T. enddefineSo you can add/modify properties of a passed by value object but you can't modify the object itself. But if you do pass it by reference (@) then you can actually change the object.