To support multimedia applications in mobile environments, it will be necessary for applications to be aware of the underlying environmental conditions, and also to be able to adapt their behaviour and that of the underlying platform as such conditions change. Many existing distributed systems platforms support such adaptation only in a rather ad hoc manner. This paper presents a principled approach to supporting adaptation through the use of reflection. More specifically, the paper introduces a language-independent, component-based reflective architecture featuring a percomponent meta-space, the use of meta-models to structure meta-space, and a consistent use of component graphs to represent composite components. The paper also reports on a quality of service management framework, providing sophisticated support for monitoring and adaptation functions. Finally, the paper describes a prototype implementation of this architecture using the object-oriented programming language Python.