So many things. This is ready to merge into master now