Communication is key in a multi-agent system for agents to exchange information and coordinate their activities. In the area of agent programming, the challenge is to introduce communication primitives that are useful to a programmer of agent programs as well as semantically well-defined. Moreover, for agents that derive their choice of action from their beliefs and goals it is natural to introduce primitives that support communication related to both of these attitudes. We introduce a communication approach for multi-agent systems based on mood operators instead of the usual speech act labels and a semantics based on the idea that a message can be used to (re)construct a mental model of the sender. An operational semantics is provided that specifies the precise meaning of the primitives. Finally, to facilitate coordination in multi-agent systems, we introduce the concept of a conversation to synchronize actions and communication among agents. Conversations provide a limited resource at the multi-agent level, and provide a natural approach for multi-agent systems to coordinate agent activities.