Refactor Reference and introduce Driver