Initial implementation, tests, and docs