This paper presents the design and evaluation of a cooperative congestion avoidance system suitable for corporate Intranets or home networks. Explicit Congestion Avoidance (ECA) relies on host operating systems to introduce appropriate per-flow virtual bottlenecks, with the intention of keeping queuing out of the network. The network provides an indication of the aggregate demand for resources on each path, and a cooperative distributed algorithm adjusts these virtual bottlenecks in proportion to per-flow weights, so as to maintain network utilization at a level where queuing is rare. In addition, network bandwidth is shared in proportion to the weights of the competing flows and end-to-end latency is greatly reduced. Unmodified higher level protocols merely see a reduced capacity channel and adapt to the available bandwidth. For example, the packets which TCP would normally force into router queues to increase the RTT, are instead voluntarily queued inside the operating system. Experiments show that time sensitive media streams can be protected from contention, and that response times for short HTTP requests can be improved by a factor of 5.