Updated internal functioning and comments.
TODO: Change the ._ functions to vars to prevent exposure to consumer of object.