rfactroed the messy driver code to bind requirements later - still works