do while !isnull(this.ToDoObjects[1]) > lnTopOfStack = alen(this.ToDoObjects) > loCurrent = this.ToDoObjects[lnTopOfStack] > loTopOfStack = lnTopOfStack - 1 > if lnTopOfStack = 0 > this.todo[1] = null > else > dimension this.ToDoObjects[lnTopOfStack] > endif > * do whatever with loCurrent >enddo ></pre >If you don't want to constantly redimension the array, create and maintain a corresponding ToDoObjectCount property. Hi Albert, This is very good! Something like<PRE> *-- .aCalcBuffer is the array that contains references to controls requiring * notice of a value change. * * .aCalcBuffer[x,1] - A reference to the control whose value has changed * .aCalcBuffer[x,2] - the new value * .aCalcBuffer[x,3] - A reference to the control requesting notice of the * change * WITH this DO WHILE .T. IF TYPE(.aCalcBuffer[1,3]) = "O" IF PEMSTATUS(.aCalcBuffer[1,3],"ReceiveValueChange",5) * If the control requesting notice of the change has a * ReceiveValueChange() method, and can thus process the notice * of change, send a reference to the control whose value has * changed and the new value to the control requesting notice * of the change .aCalcBuffer[1,3].ReceiveValueChange(; .aCalcBuffer[1,1],.aCalcBuffer[1,2]) ENDIF ENDIF IF ALEN(aCalcBuffer) > 1 *-- Delete the element just sent... ADEL(.aCalcBuffer,1) *-- and redimension the array DIMENSION .aCalcBuffer(ALEN(.aCalcBuffer)) ELSE .aCalcBuffer = .NULL. EXIT ENDIF ENDDO ENDWITHThanks,