This is updated by me(Shagor)