Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision 692c40cb5e60d999a7e4a4bf37fd265a6b8548cb)
+++ uspace/lib/drv/generic/driver.c	(revision 5159ae9cfe175971e2b16fd2a8cf120ffefe7cf2)
@@ -224,6 +224,6 @@
 	int ret = EOK;
 	// open the device
-	if (NULL != dev->class && NULL != dev->class->open) {
-		ret = (*dev->class->open)(dev);
+	if (NULL != dev->ops && NULL != dev->ops->open) {
+		ret = (*dev->ops->open)(dev);
 	}
 	
@@ -240,6 +240,6 @@
 		case IPC_M_PHONE_HUNGUP:		
 			// close the device
-			if (NULL != dev->class && NULL != dev->class->close) {
-				(*dev->class->close)(dev);
+			if (NULL != dev->ops && NULL != dev->ops->close) {
+				(*dev->ops->close)(dev);
 			}			
 			ipc_answer_0(callid, EOK);
Index: uspace/lib/drv/include/driver.h
===================================================================
--- uspace/lib/drv/include/driver.h	(revision 692c40cb5e60d999a7e4a4bf37fd265a6b8548cb)
+++ uspace/lib/drv/include/driver.h	(revision 5159ae9cfe175971e2b16fd2a8cf120ffefe7cf2)
@@ -80,8 +80,6 @@
 // device class
 
-/** Devices belonging to the same class should implement the same set of interfaces.*/
-typedef struct device_class {
-	/** Unique identification of the class. */
-	int id;
+/** Devices operations. */
+typedef struct device_ops {
 	/** Optional callback function called when a client is connecting to the device. */
 	int (*open)(device_t *dev);
@@ -93,5 +91,5 @@
 	 * by any of the standard interfaces, the default handler is used.*/
 	remote_handler_t *default_handler;
-} device_class_t;
+} device_ops_t;
 
 
@@ -112,6 +110,6 @@
 	/** The device driver's data associated with this device.*/
 	void *driver_data;
-	/** Device class consist of class id and table of interfaces supported by the device.*/
-	device_class_t *class;
+	/** The implementation of operations provided by this device.*/
+	device_ops_t *ops;
 	/** Pointer to the previous and next device in the list of devices handled by the driver */
 	link_t link;
@@ -168,8 +166,8 @@
 {
 	assert(is_valid_iface_idx(idx));	
-	if (NULL == dev->class) {
+	if (NULL == dev->ops) {
 		return NULL;
 	}
-	return dev->class->interfaces[idx];	
+	return dev->ops->interfaces[idx];	
 }
 
@@ -280,9 +278,9 @@
 static inline remote_handler_t * device_get_default_handler(device_t *dev)
 {
-	if (NULL == dev->class) {
+	if (NULL == dev->ops) {
 		return NULL;
 	}
 	
-	return dev->class->default_handler;	
+	return dev->ops->default_handler;	
 }
 
Index: uspace/srv/drivers/isa/isa.c
===================================================================
--- uspace/srv/drivers/isa/isa.c	(revision 692c40cb5e60d999a7e4a4bf37fd265a6b8548cb)
+++ uspace/srv/drivers/isa/isa.c	(revision 5159ae9cfe175971e2b16fd2a8cf120ffefe7cf2)
@@ -87,5 +87,5 @@
 };
 
-static device_class_t isa_child_class;
+static device_ops_t isa_child_dev_ops;
 
 static int isa_add_device(device_t *dev);
@@ -449,6 +449,6 @@
 	}
 	
-	// set a class (including the corresponding set of interfaces) to the device
-	dev->class = &isa_child_class;
+	// set device operations to the device
+	dev->ops = &isa_child_dev_ops;
 	
 	printf(NAME ": child_device_register(dev, parent); device is %s.\n", dev->name);
@@ -487,6 +487,5 @@
 static void isa_init() 
 {
-	isa_child_class.id = 0; // TODO
-	isa_child_class.interfaces[HW_RES_DEV_IFACE] = &isa_child_res_iface;
+	isa_child_dev_ops.interfaces[HW_RES_DEV_IFACE] = &isa_child_res_iface;
 }
 
Index: uspace/srv/drivers/ns8250/ns8250.c
===================================================================
--- uspace/srv/drivers/ns8250/ns8250.c	(revision 692c40cb5e60d999a7e4a4bf37fd265a6b8548cb)
+++ uspace/srv/drivers/ns8250/ns8250.c	(revision 5159ae9cfe175971e2b16fd2a8cf120ffefe7cf2)
@@ -228,5 +228,5 @@
 }
 
-static device_class_t ns8250_dev_class;
+static device_ops_t ns8250_dev_ops;
 
 /** The character interface's callbacks. 
@@ -758,5 +758,6 @@
 	}	
 	
-	dev->class = &ns8250_dev_class;
+	// set device operations
+	dev->ops = &ns8250_dev_ops;
 	
 	add_device_to_class(dev, "serial");
@@ -900,16 +901,14 @@
 /** Initialize the serial port driver.
  * 
- * Initialize class structures with callback methods for handling 
+ * Initialize device operations structures with callback methods for handling 
  * client requests to the serial port devices.
  */
 static void ns8250_init() 
 {
-	// TODO
-	ns8250_dev_class.id = 0;
-	ns8250_dev_class.open = &ns8250_open;
-	ns8250_dev_class.close = &ns8250_close;	
-	
-	ns8250_dev_class.interfaces[CHAR_DEV_IFACE] = &ns8250_char_iface;
-	ns8250_dev_class.default_handler = &ns8250_default_handler;
+	ns8250_dev_ops.open = &ns8250_open;
+	ns8250_dev_ops.close = &ns8250_close;	
+	
+	ns8250_dev_ops.interfaces[CHAR_DEV_IFACE] = &ns8250_char_iface;
+	ns8250_dev_ops.default_handler = &ns8250_default_handler;
 }
 
Index: uspace/srv/drivers/pciintel/pci.c
===================================================================
--- uspace/srv/drivers/pciintel/pci.c	(revision 692c40cb5e60d999a7e4a4bf37fd265a6b8548cb)
+++ uspace/srv/drivers/pciintel/pci.c	(revision 5159ae9cfe175971e2b16fd2a8cf120ffefe7cf2)
@@ -82,5 +82,5 @@
 };
 
-static device_class_t pci_child_class;
+static device_ops_t pci_child_ops;
 
 
@@ -398,5 +398,5 @@
 			pci_read_interrupt(dev);
 			
-			dev->class = &pci_child_class;			
+			dev->ops = &pci_child_ops;			
 			
 			printf(NAME ": adding new child device %s.\n", dev->name);
@@ -491,6 +491,5 @@
 static void pciintel_init() 
 {
-	pci_child_class.id = 0; // TODO
-	pci_child_class.interfaces[HW_RES_DEV_IFACE] = &pciintel_child_res_iface;
+	pci_child_ops.interfaces[HW_RES_DEV_IFACE] = &pciintel_child_res_iface;
 }
 
Index: uspace/srv/drivers/rootia32/rootia32.c
===================================================================
--- uspace/srv/drivers/rootia32/rootia32.c	(revision 692c40cb5e60d999a7e4a4bf37fd265a6b8548cb)
+++ uspace/srv/drivers/rootia32/rootia32.c	(revision 5159ae9cfe175971e2b16fd2a8cf120ffefe7cf2)
@@ -113,5 +113,5 @@
 
 // initialized in root_ia32_init() function
-static device_class_t rootia32_child_class;
+static device_ops_t rootia32_child_ops;
 
 static bool rootia32_add_child(
@@ -140,6 +140,6 @@
 	add_match_id(&child->match_ids, match_id);	
 	
-	// set class to the device
-	child->class = &rootia32_child_class;
+	// set provided operations to the device
+	child->ops = &rootia32_child_ops;
 	
 	// register child  device
@@ -188,7 +188,5 @@
 
 static void root_ia32_init() {
-	// initialize child device class		
-	rootia32_child_class.id = 0;	// TODO 
-	rootia32_child_class.interfaces[HW_RES_DEV_IFACE] = &child_res_iface;
+	rootia32_child_ops.interfaces[HW_RES_DEV_IFACE] = &child_res_iface;
 }
 
