still working on refactory.
more refactoring.
more fun