A number of solutions have been proposed to address the free-riding problem in peer-to-peer file sharing systems. The solutions are either imperfect–they allow some users to cheat the system with malicious behavior, or expensive– they require human intervention, require servers, or incur high mental transaction costs. We propose a method to address these weaknesses. Specifically, we introduce a utility function to capture contributions made by a user and an auditing scheme to ensure the integrity of a utility function’s values. Our method enables us to reduce cheating by a malicious peer: we show that our approach can efficiently detect malicious peers with a probability over 98%.