A communication system for effecting communication events between endpoints connected via a communication network, the communication system comprising: a plurality of processing units, each having access to computer storage and holding executable code modules for managing a communication event, the code modules configured, when executed on any one of the processing units, to implement one or more call controllers for establishing a communication event and for managing the established communication event; wherein the computer storage is partitioned into multiple failure-tolerant regions; wherein a first call controller instance is configured to access a first failure-tolerant region of the computer storage in order to store a call state of a communication event, the first call controller instance being configured to store the call state responsive to a first instruction received via the network; and wherein the first call controller instance is further configured to replicate at least part of the call state in a second failure-tolerant region of the computer storage by transmitting the said at least part of the call state to a second call controller instance which is configured to copy the said at least part of the call state in the second failure-tolerant region of the computer storage so that the second call controller instance can access the replicated at least part of the call state from the second failure-tolerant region of the computer storage, the second call controller instance being configured to so access the replicated at least part of the call state responsive to a second instruction received via the network, wherein the first call controller instance is configured to replicate a greater portion of the call state as an elapsed time of the communication event increases. a plurality of processing units, each having access to computer storage and holding executable code modules for managing a communication event, the code modules configured, when executed on any one of the processing units, to implement one or more call controllers for establishing a communication event and for managing the established communication event; wherein the computer storage is partitioned into multiple failure-tolerant regions; wherein a first call controller instance is configured to access a first failure-tolerant region of the computer storage in order to store a call state of a communication event, the first call controller instance being configured to store the call state responsive to a first instruction received via the network; and wherein the first call controller instance is further configured to replicate at least part of the call state in a second failure-tolerant region of the computer storage by transmitting the said at least part of the call state to a second call controller instance which is configured to copy the said at least part of the call state in the second failure-tolerant region of the computer storage so that the second call controller instance can access the replicated at least part of the call state from the second failure-tolerant region of the computer storage, the second call controller instance being configured to so access the replicated at least part of the call state responsive to a second instruction received via the network, wherein the first call controller instance is configured to replicate a greater portion of the call state as an elapsed time of the communication event increases.