Hey, this is an old problem, and, moreover, one that exists in *every* language that allows side-effects. How about : procedure p(var i:integer):integer; begin i := i+1; p := i; end (* p *); begin j := i + p(i); end. Such constructions should *always* be avoided. -- Jack Jansen, {decvax|philabs|seismo}!mcvax!jack The shell is my oyster.