As software systems become larger, the interaction of their components becomes more complex. This interaction may limit reuse, and make it difficult to validate the design and correctness of the system. As a result, reengineering of these systems might be inevitable to meet future requirements. There is a general feeling that OOP promotes reuse and expandability by its very nature. This is a misconception as none of these issues is enforced. Rather, a software system must be specifically designed for reuse and expandability. In this paper we describe an aspect-oriented framework where both functional components and system properties are designed relatively separately from each other. This separation of concerns allows for reusability and enables the building of software systems that are manageable, stable and adaptable. Our work concentrates on the decomposition of concurrent object-oriented systems and our goal is to achieve an improved separation of concerns in both design and implementation.