Huge commit.

this is kind of Spike.
Need to split into smaller steps.
Need to find a way to test-drive the small steps.