Lots of changes, lazy to document them :)