This paper presents an extension to genetic programming to allow the evolution of programs containing local variables with static scope which obey the invariant that all variables are bound at time of use. An algorithm is presented for generating trees which obey this invariant, and an extension to the crossover operator is presented which preserves it. New genetic operators are described which abstract subexpressions to variables and delete variables. Finally, extensions of this work to iteration and functional constructs are discussed. 1 BACKGROUND The promise of genetic programming (Koza 1990, Banzhaf, et al. 1998) is the automatic discovery of computer programs that solve arbitrary problems. In practice, however, the ingredients of such programs are typically severely restricted. In the original formulation (Koza 1990, 1992) they were limited expressions formed by applying operators drawn from a fixed set to expressions, with each operator being required to be able to take as an a...