continue refactoring to introduce generic crossover