This is based on !288 (closed) and vets the changes for API, functionality, testing, and code organization.