Refactor to separate session from ClientProvider, and clean up public AP...

...I