As per our discussion, I made all the methods public so that they can be easily tested. The methods that aren't part of the API have an underscore appended to their names.