1. A method for transferring an object O from a source host A to a target host B, comprising of: dividing the object O into multiple blocks; discovering hosts populated with objects, including hosts A and B, and dividing the objects into multiple blocks; identifying those hosts that have at least one of the blocks of object O; and constructing the object O on host B by fetching each block of O from those hosts that have the blocks of O while minimizing a cost function in fetching each block of O.