implement crossover