Reflective middleware provides an effective way to support adaptation in distributed systems. However, as distributed systems become increasingly complex, certain drawbacks of the reflective middleware approach are becoming evident. In particular, reflective APIs are found to impose a steep learning curve, and to place too much expressive power in the hands of developers. Recently, researchers in the field of Aspect-Oriented Programming (AOP) have argued that 'dynamic aspects' show promise in alleviating these drawbacks. In this paper, we report on work that attempts to combine the reflective middleware and AOP approaches. We build an AOP support layer on top of an underlying reflective middleware substrate in such a way that it can be dynamically deployed/undeployed where and when required, and imposes no overhead when it is not used. Our AOP approach involves aspects that can be dynamically (un)weaved across a distributed system on the basis of pointcut expressions that are inherently distributed in nature, and it supports the composition of advice that is remote from the advised joinpoint. An overall goal of the work is to effectively combine reflective middleware and AOP in a way that maximises the benefits and minimises the drawbacks of each.