The benefits of software reuse is said to increase if reuse is considered early in the development process. Consequently, recent years have seen more work on reusing requirements. However, most of these work focus on reusing just requirements without considering other artifacts, such as design and code. Such artifacts, however, are related to each other, i.e. design and code are created to realize requirements, and software reuse should take this into account. This paper proposes an approach to software reuse based on use cases. Our approach takes an initial set of use cases as "keys" to search for reusable software artifacts, including use cases, class diagrams, and code of previously developed applications. We have implemented a tool called ARC that is based on our proposed approach. It enables the developer to start reuse early in the development process while enabling him/her to use the reused requirements in the design and coding phases.