We address the issue of incorporating domain-specific preferences in planning systems, where a preference may be seen as a "soft" constraint that it is desirable, but not necessary, to satisfy. To this end, we identify two types of preferences, choice preferences that give a preference over which formulas (typically subgoals) to establish, and temporal preferences, which specify a desirable ordering on the establishment of formulas. Preferences may be constructed from actions or fluents but, as we show, this distinction is immaterial. In fact, we allow preferences on arbitrary formulas build from action and fluent names. These preference orderings induce preference ordering on resulting plans, the maximal elements of which yield the preferred plans. We argue that the approach is general and flexible; as well, it handles conditional preferences. Our framework is developed in the context of transition systems; hence, it is applicable to a large number of different action languages, including the well-known language C. Furthermore, our results are applicable to general planning formalisms.