Given a fixed network of routers, a set of multicast sources and their corresponding receivers, the problem of constructing multicast sessions that maximize the multicast throughput of all sessions for different applications has been considered in this book. It is known that for problem with only one source node, heuristic algorithms based on packing maximum-rate Steiner trees may achieve throughput close to network capacity for some networks of interest. As it is investigated thoroughly in this book, direct extension of such successful algorithms for single-source scenarios to multi-source application is inefficient. In this book, it has been proposed and investigated three novel classes of tree packing algorithms, the non-cooperative class, the medium cooperative class and the highly cooperative class, that are distinguished by the degree of cooperation between participating routers. It has been show, how better performance can be achieved when the source nodes act more cooperatively (and less selfishly), as they claim bandwidth resources in the networks. It has been shown that this approach is completely competitive with network coding in IP networks.