Much cleanup, functionally working.  Need Unit-testing