finally finished! Just have to add commenting