The protocol starts when operation rmcast() is invoked on some initiator object aRMCObject, passing it a message m and a destination set destSet. In this operation, context aRMCObject first creates a strategy aRMCAlgo, and then invokes operation rmcast() on it, with the arguments it just received. Strategy aRMCAlgo builds message m, containing both m and destSet. It then issues a reliable point-to-point communication with each protocol object referenced in destSet; in order to do this, strategy aRMCAlgo relies on inherited service rSend() of context aRMCObject. When message m reaches aRMCObject, one of the target objects, operation rDeliver() is triggered by the protocol. Operation rDeliver() detects that m is a multicast message and forwards it to aRMCAlgo, the strategy in charge of that particular execution of the reliable multicast protocol. When aRMCAlgo receives m for the first time, it re-issues a reliable point-to-point communication with each protocol object referenced in destSet (extracted from m), and then invokes rmDeliver() on its context aRMCObject, passing it message m (also extracted from m). This retransmission scheme is necessary because of the agreement property of the reliable multicast primitive, which requires that either all correct objects in destSet or none receive message m [2].