Network coding has been applied successfully in Peer-To-Peer (P2P) systems to shorten the distribution time. Pieces of data, i.e. blocks, are combined, i.e. encoded, by the sending peers before forwarding to other peers. Even though requiring all peers to encode might achieve shortest distribution time, it is not necessarily optimal in terms of computational resource consumption. Short finish time, in many cases, can be achieved with just a subset of carefully chosen peers. P2P systems, in addition, tend to be heterogeneous in which some peers, such as hand-held devices, would not have the required capacity to encode.