finished 3 but its a bit of a hack and not OOP