driver refactoring