Configuration management (CM) is concerned with identifying the configuration of a system, at discrete points in time, for the purpose of systematically controlling changes to the configuration and maintaining the integrity of the configuration throughout the system life cycle, i.e. CM is concerned with controlling the evolution of complex systems ; software configuration management is its specialization for computer programs and associated documents. The basic elements of CM are the following six functions : identification, control, status accounting, auditing, version selection and baselining, and software manufacture.\\ Version selection is currently an active research area within CM, which deals with the selection of the appropriate object versions in order to produce viable system configurations. The general approach is to associate constraints with system models. The constraints are conditions on attributes of software objects that select appropriate variants and revisions. Our approach applies a partially ordered algebra on the version labels of the objects. A particular version of an entire system is formed by combining the most relevant existing versions of each of the various components of the system. The selection of the most relevant version is decided by the algebra.\\ A weakness of the original algebra model lies in its inability to express certain basic concepts of CM, in particular version selection. For example, it cannot distinguish between variants and revisions. In the present work we have designed a CM model (implemented in the TELOS knowledge representation language), which deals with the problems of the original model and introduces the concepts of incompatibility constraints and optional objects. We demonstrate the utility of this approach through a system for CM, which we have developed. The system manages object versions, inserts data (incompatibility constraints) into the database, and selects object versions for the construction of a system version, checking the existence of constraints between object versions.