More refactoring.  More tests.  More to come