Motivated by emerging cooperative P2P applications that go beyond file-sharing, we study new uplink allocation algorithms for substituting the rate-based choke/unchoke algorithm of BitTorrent which becomes inefficient in these cases. Our goal is to reduce further the download times. We do so by improving the uplink utilization when it is mostly challenged: in young torrents, and when there exist downlink and network bottlenecks. We develop a new family of uplink allocation algorithms which we call BitMax, to stress the fact that they allocate to each unchoked node the maximum rate it can sustain, instead of an 1/(k+1) equal share as done in the existing BitTorrent. BitMax computes in each interval the number of nodes to be unchoked, and the corresponding allocations, and thus does not need any empirically preset parameters like k. We demonstrate experimentally that BitMax can reduce significantly the download time in a typical reference scenario involving mostly ADSL nodes. We also consider scenarios involving network bottlenecks caused by filtering of P2P traffic at ISP peering points and show that BitMax retains its gains also in these cases.