rationalised the driver creation

This isn't tested because I'm getting hang ups again on the driver creation (see issue) but this code should work and tidies up this area of code.