Completely rebased on Evolve for 3.10