Advances in Computer Science often arise from new ideas and concepts, that prove to be advantageous for the design of complex software systems. The con ception of multi agent systems is particularly attractive, as it prommodul ises arity based on the conceptual speciality of an agent, as well as flexibility in their inte gration through appropriate interaction models. While early systems drew upon co operative agents, recent developments have realised the importance of the notion of autonomy in the design of agent based applications. The emergence of systems of autonomous problem solving agents paves the way for complex Artificial Intelligence applications that allow fosca r lability and at the same time foster the reusability of their components. In consequence, an intelligent multi agent application can be seen as a collec tion of autonomous agents, usually specialised in different tasks, together with a social model of their interactions. This approach implies a dynamic generation of complex relational structures, that agents need to be knowledgeable of in order to successfully achieve their goals. Therefore, a multi agent system designer needs to think carefully about conceptualisation, representation and enactment of the different types of knowledge that its agents rely on, for individual problem solving as well as for mutual co ordination.