B-coloring is a theoretical optimization problem on a graph that, on top of being used to model some real-world applications, is exploited by some bounding techniques embedded into solvers for the classical graph coloring problem. This implies that improved solutions for the b-coloring problem have an impact on an even larger pool of practical applications modelled by graph coloring in several different fields such as scheduling, timetabling and telecommunications. The b-coloring problem aims to maximize the number of colors used to provide a complete coloring for a graph G = (V,E), while preventing adjacent vertices from receiving the same color. Moreover, each color used is associated to a so-called a b-vertex. A vertex can be a b-vertex only if the set of colors assigned to its adjacent vertices includes all the colors used, apart from the one assigned to the vertex itself. In this work we discuss a new Constraint Programming model for the b-coloring problem and we show how such a paradigm can improve state-of-the-art results for several benchmarks instances commonly adopted in the literature.