Abstract. Today’s software systems have to deal with an increasing diversity and complexity of execution environments. Next generation applications will have to deal with the unknown, with execution conditions which can not be predicted at the time they are written: they must be adaptable. In this paper, we present our current answer to this problem, in the form of an infrastructure for adaptable middleware. This infrastructure distinguishes functional components from non-functional services and enables dynamic reconfiguration of the associations between them. These associations are controlled by an adaptation engine which monitors both the execution environment and the application, and adapts the associations according to adaptation policies.