The ICM is an asynchronous communication model for facilitating communication between distributed software processes, especially software agents. It comprises a programming interface (API), a software message handling daemon (the communication server) and a communication protocol. Currently, the bindings of the API are available for APRIL and C. The ICM has features that make it particularly suited for communication across the Internet, such as support for message buffering, intermittently connected devices, mobile agents and communication through firewalls.