Software Configuration Management suffers from a multitude of models for version identification and control. We propose a unified approach based on feature logic. Using feature logic, version sets are the basic units of reasoning, making attribution models and version repositories special cases of a more general scheme. Version sets are identified by their features, that is, a boolean expression over (name: value) attributions. A system is configured by incrementally narrowing the set of versions until each component is contained in one single version. Feature logic ensures early detection of inconsistencies as well as automatic completion of the configuration thread. We have implemented a tool called ICE, realizing the above approach. As ICE uses the common C preprocessor (CPP) representation, one can select, add, or modify arbitrary version subsets as user-readable entities. ICE deduces features and constraints from existing CPPmanaged sources, providing interactive and incremental exploration of the configuration space.