Client object refactor

Abstract out a few things into a base class.  Not a fan of the inheritance approach (mostly because I don't want to have to call 'super' all the time).  But...abstraction is abstraction.  Work in progress.