Lots of improvements from Damian Conway's IVB 2013 talk