See Michael Townsend for more details.