ABSTRACT: A holy grail of component-based software engineering is "write-once, reuse everywhere". However, in modern distributed, component-based systems supporting emerging application areas such as service-oriented e-business, this is difficult. Non-functional requirements (related to quality-of-service (QoS) issues such as security, reliability, and performance) vary with deployment context, and sometimes even at run-time, complicating the task of re-using components. I will present a middleware-based approach to managing changing requirements of components. Functional component interfaces are decorated with links to independently evolvable, declarative assertions (policies) that advertise non-functional capabilities. Middleware enhancements match, interpret, and mediate requirements of clients and servers at deployment time and/or runtime. A programming model for extending existing applications with components to implement new application level protocols or features will also be presented. This approach offers the software engineer a flexible solution to handle changing QoS requirements in a well-structured manner.