pcMyVar=.F. myObj = createobject( "myObj" ) ? myObj.Process(@pcMyVar) && returned value ? pcMyVar && altered value ? myObj.cMyVar && .f. pcMyVar = "something new" ? myObj.Process( pcMyVar) && returned value ? pcMyVar && something new, because it was not passed by reference ? myObj.cMyVar && something new define class myObj as Custom cMyVar="" PROCEDURE Process( rcMyVar ) this.cMyVar = rcMyVar && this is going to assign the current value of the parameter to the property rcMyVar = "altered value" && the value can be changed because return "returned value" ENDPROC ENDDEFINEI use r as the prefix to indicate the parameter was passed by reference and can therefore be changed by the routine.