Software evolution is an essential activity that adapts existing software to changes in requirements. Localizing the impact of changes is one of the most efficient strategies for successful evolution. We exploit requirements descriptions in order to extract loosely coupled components and localize changes for evolution. We define a process of elaboration for the goal model that extracts a set of control loops from the requirements descriptions as components that constitute extensible systems. We regard control loops to be independent components that prevent the impact of a change from spreading outside them. To support the elaboration, we introduce two patterns: one to extract control loops from the goal model and another to detect possible conflicts between control loops. We experimentally evaluated our approach in two types of software development and the results demonstrate that our elaboration technique helps us to analyze the impact of changes in the source code and prevent the complexity of the code from increasing.