The heterogeneous, large-scale and decentralised nature of peerto-peer systems creates significant issues when deploying new functionality and adapting peer behaviour. The ability to autonomously deploy new adaptive functionality is therefore highly beneficial. This paper investigates middleware support for evolving and adapting peers in divergent systems through reflective component based design. This approach allows selfcontained functionality to exist in the network as a primary entity. This functionality is autonomously propagated to suitable peers, allowing nodes to be evolved and adapted to their individual constraints and the specific requirements of their environment. This results in effective functionality flourishing whilst suboptimal functionality dies out. By this, a self-managed infrastructure is created that supports the deployment of functionality following the evolutionary theory of natural selection. This approach is evaluated through simulations to highlight the potential of using natural selection for the deployment and management of software evolution.