Extract to separate classes

Some odd interactions with autobox (maybe?) here.  To investigate.