Abstract. Software architecture decisions hinge more on non-functional requirements (NFRs) than on functional ones, since the architecture stipulates which software to build. Model-Driven Architecture (MDA) aims to automate the derivation/generation of software from high level architectural specifications, but most current MDA implementations start from software design (i.e. how to build a software piece) rather than software architecture. This article presents an approach to extend MDA through the concepts of architectural policies and mechanisms. The key ideas are representation of NFRs through architectural concerns using architectural policies, systematic reification of policies into mechanisms, and multi-dimensional description of components as implementators of mechanisms. A detailed illustrative example is provided. Azimut framework realizes these ideas, supports larger-scale work through catalogs of policies and components, and allows traceability and reuse of architecture by enabling enabling these architecture-level descriptions and reasoning.