Split evolution logic from problem