UML provides very little support for modelling evolvable or reusable specifications and designs. To cope with this problem, the UML needs to be extended with support for reuse and evolution of model components. As a first step, this paper enhances the UML metamodel with the "reuse contract" formalism to deal with evolution of collaborating class components. Such a formal semantics for reuse allows us to detect evolution and composition conflicts automatically.