We present two new cooperative caching algorithms that allow a cluster of file system clients to cache chunks (i.e., fixed-size portions) of files instead of directly accessing them from (potentially remote) origin file servers. The first algorithm, Cooperative- LRU, moves a chunk's position closer to the tail of its local LRU list when the number of copies increases, instead of leaving the position unchanged as in the existing Distributed-LRU algorithm. The second algorithm, RobinHood, explicitly targets chunks cached at many clients for replacement when forwarding a singlet (i.e., a chunk cached at only one client) to a peer, instead of selecting a peer at random as in the existing N-Chance algorithm. We run these algorithms on a variety of workloads, including several publicly available traces. We evaluate these algorithms' loads on different components of the system. We show that the new algorithms significantly outperform their predecessors. Finally, we examine some workload properties that affect how well cooperative caching algorithms can perform.