Adding many features as well as many fixes.  Too much to list in one commit