I should not do this gigantic commit but i had to.