Software reuse and especially the paradigm of software components are promising approaches to increase the efficiency of software development. One of the basic problems of software reuse, is the trade-off between the abstraction from project-specific aspects on the one side, and the actual contribution of a reusable component during the realization of a new system on the other side. Conventional components with fixed properties are trapped within the inherent tension between overly general and less efficient solutions satisfying a large number of niche requirements, and specifically optimized but less reusable designs for each point in the requirements space. Generic components which are designed and implemented to be mechanically adaptable to new application scenarios allow to overcome these limitations and help to drastically increase the efficiency of software development. This paper introduces the fundamental concepts of generic components and particularly discusses viable techniq...