A logic of conditional preferences is defined, with a language which allows the compact representation of certain kinds of conditional preference statements, a semantics and a proof theory. CP-nets can be expressed in this language, and the semantics and proof theory generalise those of CP-nets. Despite being substantially more expressive, the formalism maintains important properties of CP-nets; there are simple sufficient conditions for consistency, and, under these conditions, optimal outcomes can be efficiently generated. It is also then easy to find a total order on outcomes which extends the conditional preference order, and an approach to constrained optimisation can be used which generalises a natural approach for CP-nets. Some results regarding the expressive power of CP-nets are also given.