Sorry for putting all of this in one commit, but didn't have time nor energy to split these into different ones