Abstract. Design by contract, as introduced by B.Meyer, is of increasing importance to the OO community in the specification, reuse, and monitoring of classes. We strongly feel that class libraries of all programming languages should be equipped with contracts, insofar as these constitute a powerful and simple interface definition. Very powerful and expressive contracts can be written using the OCL language, although for operations with many effects on the system state, these contracts can become unmanageable and incomprehensible. In order to maintain contracts at a manageable level of complexity, we claim that the OCL powerful mechanism of navigation through associations should be used moderately when building contracts, and that the effects of non-query operations should be allowed to be referred to within pre-and post-conditions. To achieve that purpose, we propose an extension to OCL and present a formal semantics for it.