A feature is a unit of functionality that may be added to (or omitted from) a system. Examples of features are plug-ins for software packages or additional services offered by telecommunications providers. Many features override the default behaviour of the system, which may lead to unforeseen behaviour of the system; this is known as feature interaction. We propose a feature construct for defining features, and use it to provide a plug-and-play framework for exploring feature interactions. Our approach to the feature interaction problem has the following characteristics: Features are treated as first-class objects during the development phase. A method is given for integrating a feature into a system description. It allows features to override existing behaviour of the system being developed. A prototype tool has been developed for performing the integration. Interactions between features may be witnessed. In principle, our approach is quite general and need not be tied to any particular system description language. In this paper, however, we develop the approach in the context of the SMV model checking system. We describe two case studies in detail: a lift system and a telephone system. (C) 2001 Elsevier Science B.V. All rights reserved.