refactoring of CrossingOver