A method for obtaining at least one file in a cooperative file distribution system, comprising: obtaining a target delivery rate for said at least one file; identifying one or more unreliable data sources and one or more reliable data sources to transfer at least a portion of said at least one file to a client, wherein each identified unreliable data source is associated with a lower cost than each reliable data source and wherein said identification step is performed by said client; obtaining at least a portion of said file at said client from one or more of said identified unreliable data sources at an unreliable data delivery rate; and selecting an initial throttle rate as the desired rate to receive data from one or more of said reliable sources based on the said target delivery rate; and obtaining at least a portion of said file at said client from one or more of said identified reliable data sources based on the throttle rate if said unreliable data delivery rate is below said target delivery rate, wherein a size or rate of requests for the portion of the file from the one or more reliable data sources are based on the throttle rate; whenever a block arrives from said one or more reliable data source, said client performing: selecting a delta value as the smaller of a delta saturation and a delta target values; wherein the delta target is the difference between the target delivery rate and the measured total delivery rate; and the delta saturation is the difference between the throttle rate and the actual reliable delivery rate; increasing the throttle rate if the selected delta value is positive and reducing the throttle rate if the selected delta value is negative, obtaining a target delivery rate for said at least one file; identifying one or more unreliable data sources and one or more reliable data sources to transfer at least a portion of said at least one file to a client, wherein each identified unreliable data source is associated with a lower cost than each reliable data source and wherein said identification step is performed by said client; obtaining at least a portion of said file at said client from one or more of said identified unreliable data sources at an unreliable data delivery rate; and selecting an initial throttle rate as the desired rate to receive data from one or more of said reliable sources based on the said target delivery rate; and obtaining at least a portion of said file at said client from one or more of said identified reliable data sources based on the throttle rate if said unreliable data delivery rate is below said target delivery rate, wherein a size or rate of requests for the portion of the file from the one or more reliable data sources are based on the throttle rate; whenever a block arrives from said one or more reliable data source, said client performing: selecting a delta value as the smaller of a delta saturation and a delta target values; wherein the delta target is the difference between the target delivery rate and the measured total delivery rate; and the delta saturation is the difference between the throttle rate and the actual reliable delivery rate; increasing the throttle rate if the selected delta value is positive and reducing the throttle rate if the selected delta value is negative, selecting a delta value as the smaller of a delta saturation and a delta target values; wherein the delta target is the difference between the target delivery rate and the measured total delivery rate; and the delta saturation is the difference between the throttle rate and the actual reliable delivery rate; wherein the delta target is the difference between the target delivery rate and the measured total delivery rate; and the delta saturation is the difference between the throttle rate and the actual reliable delivery rate; increasing the throttle rate if the selected delta value is positive and reducing the throttle rate if the selected delta value is negative,