lots of updates.  Have to rebase this