Improve the capability of software developers to evolve and maintain programs by splitting the programs into several architectural aspects, including behavior, structure, coordination and remote invocation. Provide programming language support for structure-generic and flexibly composable collaborations to control tangling between collaborations and between collaborations and structure.. Leverage existing commercial technology such as Java, and the Unified Modeling Language.