This paper describes the development and testing of a genetic programming architecture that includes subroutine functionality, implemented as separate island populations. Within the subroutine population, individuals are divided into “castes” based on utilisation. Fitness values for the subroutines are estimated using a function of calling program fitness. This approach differs markedly to previous attempts at enabling subroutine usage by genetic programs, where subroutines (known as Automatically Defined Functions or ADFs) are intrinsic to a program and can only be used by that program. Results obtained using a common genetic programming problem known as WallSearch are presented. The use of subroutines results in a saving in computational effort of up to 50%, compared to a single program population.