refactor crossover opeprators, make them more generic