Added unit tests and got coverage to 80%
Added some comments
Refactored methods to use withSession() instead of duplicating boilerplate
Renamed methdods to follow the withXXXX pattern