added more general device class