refactor driver interface