Current smart grid proposals threaten user privacy by disclosing fine-grained consumption data to utility providers, primarily for billing. We propose a privacy-preserving protocol for billing and other calculations on fine grained meter readings. Our protocol combines a signed tariff policy from the utility with signed readings from a tamper-resistant meter to output an aggregate bill. It uses zero-knowledge proofs to ensure that the fee is correct without disclosing any consumption data. A wide variety of practical tariff policies can be applied and changed without meter modifications. Tariff structures currently proposed for smart-meters are particularly simple and efficient. Our implementation shows that the scheme is generally practical in terms of both communication and computation cost. It can be integrated in a smart metering system in various ways, and we discuss its suitability for different deployments. Furthermore our construction is sufficiently generic for billing settings such as pay-as-you-drive car insurance or electronic tolling.