Brad, sorry for the long wait time -- I dropped this on the floor while I was out attending various trips. It looks like the problem is my fault: when I updated ECJ's newIndividual(...) mechanisms, I neglected to change how the island model does reading/writing. When an island writes an individual, it originally did so through writeGenotype() rather than writeIndividual (), to avoid having to write the fitness of the individual. When it reads an individual, originally it (naturally) used readGenotype()). I changed that to newIndividual() to be consistent with the rest of ECJ but forgot to change writeGenotype to writeIndividual(). As a result one side was expecting a whole individual, including fitness, and the other side was just writing out the genotype. That's why you were getting corrupted data. I think. For the moment, I've set both sides to read and write individuals. I was considering making both sides just read and write genotypes, but I think that might be dangerous if people are adding funky stuff to their fitnesses. So we'll be a bit less efficient for the time being. Here's a revised version of IslandExchange.java, which I've also put out on CVS.