The main contribution of this paper is the definition of the preference description language PDL. This language allows us to combine qualitative and quantitative, penalty based preferences in a flexible way. This makes it possible to express complex preferences which are needed in many realistic optimization settings. We show that several preference handling methods described in the literature are special cases of our approach. We also demonstrate that PDL expressions can be compiled to logic programs which can be used as tester programs in a generate-and-improve method for finding optimal answer sets.