Activation is not the only way wrappers can be created. A CCW is also created as a side effect when one managed object returns a reference to another managed object from a method call (either as a return value or as an out parameter on a method call). In order to honor COM’s identity rules, it’s important that only one wrapper ever exists for a given managed object. This ensures that all interfaces on the same object have a common IUnknown. Therefore, when a CCW is needed, the runtime always checks for an existing wrapper on the object before creating a new one. This ensures that no more than one wrapper will ever exist for a given managed object.