Building software systems with reusable components brings many advantages. If the reuse concept is utilized on several levels of a system development, the development becomes more efficient, the reliability of the products is enhanced, and the maintenance requirement is significantly reduced. The levels of reuse are spread out from the reuse of source code and common libraries, through the reuse of large business components, up to the reuse of the standard products in the configuration of large systems. Designing, developing and maintaining components for reuse is, however, a very complex process which places high requirements not only for the component functionality and flexibility, but also for the development organization. In this paper, we discuss the different levels of component reuse, and certain aspects of component development. As an illustration of reuse issues, we present a successful implementation of a component-based system, which is widely used for industrial process control.