I am not relying on wrap around. I am just throwing the stack away, just as John Payson says. Another example: SendMessage: // code to send a radio message GetAck: // code to receive a new radio message or an ACK to a transmission Call CheckTimeout // this call appears in several locations in thi s large code block ........ // more code Call CheckTimeout ........ // more code Call CheckTimeout ........ // more code Call CheckTimeout ........ // more code CheckTimeout: // do we need an ACK to a message? If so, did we time out? If ((need ACK to message) && (elapsed time > X)) goto Retry // resend message if (jamming signal && jam timeout) goto ProcessJam // respond to jamming attempt if ((do not need ACK) && (elapsed time > Y) goto SleepAgain // no traffic, go to sleep procedure return Each of the gone to locations is at call level 0: there are no outstanding returns to be executed. I don't want tests on exit conditions to the timeout procedure after each call, I don't have the space. After all, I have got a 10 channel digital radio network 'slave' device implemented on a 16C57. What I want is an emulator that emulates the chip..... A 16C65 does not melt down when stack overflow occurs, whereas the emulator might as well. Fortunately, my 16C65 unit (a loop control unit) has space for me to include a file containing exit condition tests after every call, so I am not hurt by this rather severe limitation. So I'm just nagging.