The server side of business software systems is commonly implemented today by an ensemble of Java classes distributed over several hosts. In this scenario, it is often necessary, for performance tuning or bug fixing, to update the code or change the location of some classes. Since business systems must typically stay on-line 24 hours a day, changes and updates should be made without stopping system execution. This paper proposes a distributed software architecture which clearly separates the functionalities of the server-side application from its on-line adaptation capabilities. As a result, developers are freed from considering adaptation concerns, which are instead provided by separate, applicationindependent, transparently integrated components. The latter analyse data related to the operational conditions of the application, and, based on available statistics and expected behaviour, trigger changes on the application classes. The bytecode of classes expected to need on-line updat...