Software system need to change over time to cope with the new requirements. Furthermore, due to design decisions, the new requirements happen to crosscut the system's structure. Understanding how changes appear in the system can reveal hidden dependencies between different parts of the system. We propose to group entities that change together according to a logical expression that specifies the change condition. Furthermore, we can group entities at different levels of abstraction (i.e., method, class, package). Our approach is based on an explicit history meta model that centers around the notion of history and which enables the definition of historical measurements which summarize the changes. We apply our approach on two large case studies and show how we can identify groups of related entities and detect bad smells.