Existing solutions for streaming on overlay networks adopt the idea of application level multicast, where participating peers form a topologically aware tree structure to minimize overall delay. These approaches are unable to maximize quality of delivered stream to individual peers because of the inherent bandwidth limitation of the tree structure. This project designs, develops and evaluates a receiver-driven framework to construct "bandwidth-aware" overlays for streaming in Peer-to-Peer (P2P) networks, called PALS. PALS departs from the common tree-based approach to overlay construction and allows each peer to independently and selfishly determine the best way to connect to the overlay in order to maximize its own delivered quality. Similar to a group of competing TCP flows, independent and selfishly competing peers in an overlay reach an ``equilibrium'' in which not only delivered bandwidth to each peer is maximized to its fair share of available bandwidth, but also the resulting unstructured overlay is globally efficient. This project investigates three broad areas: (i) techniques for adaptive streaming from multiple congestion controlled senders, (ii) techniques for scalable resource discovery and adaptive resource selection, and (iii) distributed multimedia caching schemes for seamless support of asynchronous peers. Furthermore, this project delivers a prototyped implementation of PALS framework as an open-source modular middleware that will be made publicly available. The prototype enables researchers to conduct Internet-wide experiments and investigate interactions between PALS and various encoding schemes. The prototype also serves as an educational tool in the classroom to bring hands-on experience with P2P streaming technology to students.