updated driver implementation