finally finished this bloody tedious module