The constraint diagram language was designed to be used in conjunction with the Unified Modelling Language (UML), primarily for placing formal constraints on software models. In particular, constraint diagrams play a similar role to the textual Object Constraint Language in that they can be used for specifying system invariants and operation contracts in the context of a UML model. Constraint diagrams can also be used independently of the UML. In this paper, we illustrate a range of counter-intuitive features of constraint diagrams and highlight some (potential) expressiveness limitations. We propose a generalized version of the constraint diagram language that overcomes the illustrated counter-intuitive features and limitations.