sorted with a whole bunch of if/else :D