Simulation of crowds demands coping with scalability and performance issues that are not usually well supported by general purpose agent based simulation toolkits. On the other side, the use of agent models provides a great degree of flexibility in the specification of the behaviour of the entities and their interactions. The agent architecture that is presented in this work addresses both types of requirements, by taking advantage of the characteristics of its specific problem domain: the simulation of crowds in indoor environments. Several algorithms are implemented to improve the efficiency of the management of a high number of agents in order to cope with the performance in the processing of their movements and their representation. At the same time, different models are supported to specify decision making of the agents in order to allow rich behaviours. Agents can represent different types of entities such as people, sensors and actuators. This is illustrated with a realistic case study of the evacuation of the building of our Faculty of Computer Science, where different types of human behaviours are modelled in this kind of situations.