First cut.

Resolves #1, #2, #3