proper driver layer abstraction