work drive funtion