Really too much to write here... I did a lot in this commit