Second commit.  Nearly complete.  Ready for tests.