Group communication primitives have broad utility as a building block for distributed applications. However, creating and maintaining the distributed structures that support these primitives is challenging, particularly when network and node characteristics are transient. We propose a solution for creating and maintaining multicast structures that uses an unstructured overlay and a novel approach to extract source-specific multicast trees. The strength of our solution comes from the following properties: First, it decouples the overlay construction and maintenance mechanism from the tree-extraction mechanism, allowing for separate component optimization. Second, it relies on soft-state and passive data collection to adapt to the dynamics of the physical network, resulting in low protocol complexity. We implemented our solution and evaluated it on a 65-node PlanetLab testbed and on up to 1024-node emulated ModelNet networks. Experimental and analytical evaluations demonstrate low communication overheads (up to 1%), efficient network usage (low stress and stretch) compared to alternative solutions, and ability to quickly adapt to network changes and recover from node failures. In addition, we built a replica location service on top of this multicast layer to prove the practicality of our solution.