factor out driver, add special components, other changes