This paper develops a model of social norms and cooperation in large societies. Within this framework, the authors use an indirect evolutionary approach to study the endogenous formation of preferences and the co-evolution of norm compliance. They thereby link the multiplicity of equilibria, which emerges in the presence of social norms, to the evolutionary analysis: individuals face situations where many others cooperate as well as situations where a majority free-ride. The evolutionary adaptation to such heterogenous environments will favour conditional cooperators, who condition their pro-social behaviour on the others' cooperation. As conditional cooperators react flexibly to their social environment, they dominate free-riders as well as unconditional cooperators.