In an evolving object oriented system individual components may change. A system built out of such components needs to be able to use the most recent versions of these components no matter what their source. This paper presents an architecture in which an application will select the most appropriate component version from a variety of sources, including network discovery. The architecture is based on the dynamic class loading mechanisms of Java. It succeeds where current techniques fail due to lack of interoperability and inability to adapt to dynamic environments. The architecture allows an application to dynamically load components from a variety of sources including, local disk, remote service, and personalised techniques. It chooses the most appropriate component by using version control information. Security policies may be used to restrict the actions of components and the policies can be refined as new components are loaded. This ensures that an application can run with zero configuration but be continually updated in a safe manner. We have built a prototype system and show by example how this can he used by a home gateway to allow software upgrades with zero home configuration.