forked from: https://github.com/deedwar/evolve