Use cases are the modeling technique of UML for formalizing the functional requirements placed on systems. This technique has limitations in modeling the context of a system, in relating systems involved in a same business process, in reusing use cases, and in specifying various constraints such as execution constraints between use case occurrences. These limitations can be overcome to some extent by the realization of multiple diagrams of various types, but with unclear relationships between them. Thus, the specification activity becomes complex and error prone. In this paper, we show how to overcome the limitations of use cases by making the roles of actors explicit. Interestingly, our contributions not only make UML a more expressive specification language, they also make it simpler to use and more consistent.