Extract to separate classes

Some odd interactions with autobox (maybe?) here.  To investigate.
Merge pull request #6 from osfameron/extract-to-classes

Extract to separate classes