Lots of additions, some complete, some TODO