good way to separate the ChangeExtractor purpose