Clean up the current implementation to make it easy to use and understand. This milestone will probably require some refactoring too,