Major change to api to clarify the different roles of the classes.
Updated Javadoc to reflect changes