Began splitting into separate modules.
Finished factoring the implementation.