Made a start completely rewriting the driver