A Code ID is computed as an MD5 checksum over the actual code, as an byte[] array. (Called a MethodID or mid in the code, probably should be called a 'CapsuleID'.) A Group ID is computed by taking the (capsule) code ids, sorting them, and computing an MD5 checksum over it. A ProtocolID is computed by taking the (code) group ids, sorting them, and computing an MD5 checksum over it. Note: A protocol ID can be computed even if only one code group was transmitted (using DLResponse/DLRequest) because any DLResponseCapsule contains *all* GroupIDs for the Protocol! A Method ID is computed by sending a Code ID, its Group ID, and its Protocol ID through MD5, in that order. Thus, a method ID describes a triple (Capsule_i, Code Group_j, Protocol_k). NOTE: It is the Method ID that is sent in the header of a capsule. It is hence the basis for demultiplexing.