Constraint programming techniques are widely used to solve real-world problems. It often happens that such problems are over-constrained and do not have any solution. In such a case, the goal is to find a good compromise. A simple theoretical framework is the Max-CSP, where the goal is to minimize the number of constraint violations. However, in real-life problems, complex rules are generally imposed with respect to violations. Solutions which do not satisfy these rules have no practical interest. Therefore, many frameworks deraved from the Max-CSP have been introduced. In this paper, we classify the most usual types of rules, and we sh.ow that some of them are not expressible in existing frameworks. We introduce a new paradigm i n which all these rules can be encoded, through meta-constraints. Moreover, we show that most of existing frameworks can be included into our model. is the finite set of possible values for variable z i , and a set C of m constraints between variables. A constraint C on the set of variables X ( C ) specifies the allowed combinations of values for the variables. Each combination of values is called a tuple on X ( C ) .Given a constraint network, the search for an assignment to all variables that satisfies all the constraints is an NP-Hard problem called the Constraint Satisfaction Problem (CSP). Such an assignment is a solution of the CSP.In many cases, real-life applications are overconstrained. This observation means that when they are coded in terms of CSP, such CSPs have no solution. In this situation, it is necessary to relax the problem in order to obtain a solution. The goal is to find a good compromise, that is, a total assignment that best respects the set of constraints, even if some of them are violated. This assignment is a solution of the overconstrained problem.The most well-known approach is to find an assignment which minimizes the number of violated constraints. The theoretical framework used to do so is called the Maximal Constraint Satisfaction Problem (Max-CSP). Many works have been carried out in order to solve instances of Max-CSP [5, 12, 6, 71. Unfortunately, this framework is not realistic enough: in many real-life applications the goal is much more complex than a minimization of the number of violations.For instance, let us consider an example derived