Software product line engineering is mostly about the systematic management of commonality and variability between product line members. The effectiveness of this approach thus very much depends on how well variability within the family of similar products is implemented and managed. Variability often has widespread impact, crosscutting not only multiple parts of individual artifacts but also multiple artifacts in multiple stages of the development lifecycle. This paper presents an approach that facilitates variability implementation, management, and tracing by integrating model-driven and aspect-oriented software development. We demonstrate means for effectively dealing with variability on model, model transformation, and code generation level. The concepts are illustrated with a case study of a home automation system. Categories and Subject Descriptors D.2.13 [Software Engineering]: Reusable Software--domain engineering, reusable libraries, reuse models General Terms Design, Economi...