The objective of this project is to investigate the combined use of adaptation and preemption mechanisms in the context of best-effort networks, such as the Internet, as complementary tools for reacting to the onset of congestion or link failure. In particular, adaptation is seen as a means of reacting to light congestion, while preemption is useful for heavy congestion or link failure. With adaptation, the link bandwidth is dynamically allocated among competing flows so as to maximize specified QoS metrics, where each stream maintains its current route. With preemption, however, flows are selected to be re-routed based on their assigned priority levels. While preliminary adaptation and preemption policies have each been studied independently, this research project includes a novel combination of these mechanisms into a robust congestion control mechanism capable of handling traffic changes of varying magnitude. In practice, adaptation is essentially a distribution of the excess bandwidth left over after each stream's minimum bandwidth requirements have been satisfied. Preemption is appropriate when the congestion level is too great for adaptation to be viable. Preemption, however, carries a potentially greater impact on network stability and can cause service disruption for the flows selected for rerouting. The goal of this research is to study the tradeoffs between adaptation and preemption both analytically, in simulation, and on a physical testbed. The conclusion will be a recommendation regarding the optimal congestion mechanism for various congestion regimes.