Index: uspace/lib/libdrv/generic/driver.c
===================================================================
--- uspace/lib/libdrv/generic/driver.c	(revision f0317132ad8fdc86fcf1ed428fb9525cf00b9ca9)
+++ uspace/lib/libdrv/generic/driver.c	(revision 08d9525a7da7649306a1aad8a472a5b2c7c3f056)
@@ -253,5 +253,10 @@
 			
 			if (!is_valid_iface_idx(iface_idx)) {
-				// this is not device's interface
+				remote_handler_t *default_handler;
+				if (NULL != (default_handler = device_get_default_handler(dev))) {
+					(*default_handler)(dev, callid, &call);
+					break;
+				}
+				// this is not device's interface and the default handler is not provided
 				printf("%s: driver_connection_gen error - invalid interface id %d.", driver->name, iface_idx);
 				ipc_answer_0(callid, ENOTSUP);
Index: uspace/lib/libdrv/include/driver.h
===================================================================
--- uspace/lib/libdrv/include/driver.h	(revision f0317132ad8fdc86fcf1ed428fb9525cf00b9ca9)
+++ uspace/lib/libdrv/include/driver.h	(revision 08d9525a7da7649306a1aad8a472a5b2c7c3f056)
@@ -56,4 +56,5 @@
 typedef void remote_iface_func_t(device_t*, void *, ipc_callid_t, ipc_call_t *);
 typedef remote_iface_func_t *remote_iface_func_ptr_t;
+typedef void remote_handler_t(device_t*, ipc_callid_t, ipc_call_t *);
 
 typedef struct {
@@ -86,6 +87,9 @@
 	/** Optional callback function called when a client is disconnecting from the device. */
 	void (*close)(device_t *dev);
-	/** The table of interfaces implemented by the device. */
+	/** The table of standard interfaces implemented by the device. */
 	void *interfaces[DEV_IFACE_COUNT];	
+	/** The default handler of remote client requests. If the client's remote request cannot be handled 
+	 * by any of the standard interfaces, the default handler is used.*/
+	remote_handler_t *default_handler;
 } device_class_t;
 
@@ -270,4 +274,16 @@
 int unregister_interrupt_handler(device_t *dev, int irq);
 
+
+// default handler for client requests
+
+static inline remote_handler_t * device_get_default_handler(device_t *dev)
+{
+	if (NULL == dev->class) {
+		return NULL;
+	}
+	
+	return dev->class->default_handler;	
+}
+
 #endif
 
