At the heart of a well-disciplined, systematic methodology that explicitly supports the use of COTS components is a clearly defined process for effectively using components that meet the needs of the system under development. In this paper, we present the CARE/SA approach which supports the iterative matching, ranking, and selection of COTS components, using a representation of COTS components as an aggregate of their functional and non-functional requirements and architecture. The approach is illustrated using a Digital Library System example. 1 This is an extended and improved version of [8]; this extension considers both functional and non-functional requirements as candidates for the matching, ranking, and selection process.