Index: uspace/lib/c/generic/async.c
===================================================================
--- uspace/lib/c/generic/async.c	(revision 7b616e23c349fc3f8cb4c5132825f4f5ef12c96a)
+++ uspace/lib/c/generic/async.c	(revision e27e36e1fb9699de71e9900d126082ea33f88bc2)
@@ -1048,14 +1048,14 @@
  *
  * @param inr     IRQ number.
- * @param devno   Device number of the device generating inr.
  * @param handler Notification handler.
  * @param data    Notification handler client data.
  * @param ucode   Top-half pseudocode handler.
  *
- * @return Zero on success or a negative error code.
- *
- */
-int async_irq_subscribe(int inr, int devno,
-    async_notification_handler_t handler, void *data, const irq_code_t *ucode)
+ * @return IRQ capability handle on success.
+ * @return Negative error code.
+ *
+ */
+int async_irq_subscribe(int inr, async_notification_handler_t handler,
+    void *data, const irq_code_t *ucode)
 {
 	notification_t *notification =
@@ -1077,21 +1077,20 @@
 	futex_up(&async_futex);
 	
-	return ipc_irq_subscribe(inr, devno, imethod, ucode);
+	return ipc_irq_subscribe(inr, imethod, ucode);
 }
 
 /** Unsubscribe from IRQ notification.
  *
- * @param inr     IRQ number.
- * @param devno   Device number of the device generating inr.
+ * @param cap     IRQ capability handle. 
  *
  * @return Zero on success or a negative error code.
  *
  */
-int async_irq_unsubscribe(int inr, int devno)
+int async_irq_unsubscribe(int cap)
 {
 	// TODO: Remove entry from hash table
 	//       to avoid memory leak
 	
-	return ipc_irq_unsubscribe(inr, devno);
+	return ipc_irq_unsubscribe(cap);
 }
 
@@ -1384,14 +1383,4 @@
 		async_new_connection(call->in_task_id, in_phone_hash, callid,
 		    call, handler, data);
-		return;
-	}
-	
-	/* Cloned connection */
-	if (IPC_GET_IMETHOD(*call) == IPC_M_CLONE_ESTABLISH) {
-		// TODO: Currently ignores ports altogether
-		
-		/* Open new connection with fibril, etc. */
-		async_new_connection(call->in_task_id, IPC_GET_ARG5(*call),
-		    callid, call, fallback_port_handler, fallback_port_data);
 		return;
 	}
@@ -2111,76 +2100,4 @@
 	
 	return EOK;
-}
-
-/** Wrapper for making IPC_M_CLONE_ESTABLISH calls using the async framework.
- *
- * Ask for a cloned connection to some service.
- *
- * @param mgmt Exchange management style.
- * @param exch Exchange for sending the message.
- *
- * @return New session on success or NULL on error.
- *
- */
-async_sess_t *async_clone_establish(exch_mgmt_t mgmt, async_exch_t *exch)
-{
-	if (exch == NULL) {
-		errno = ENOENT;
-		return NULL;
-	}
-	
-	async_sess_t *sess = (async_sess_t *) malloc(sizeof(async_sess_t));
-	if (sess == NULL) {
-		errno = ENOMEM;
-		return NULL;
-	}
-	
-	ipc_call_t result;
-	
-	amsg_t *msg = amsg_create();
-	if (!msg) {
-		free(sess);
-		errno = ENOMEM;
-		return NULL;
-	}
-	
-	msg->dataptr = &result;
-	msg->wdata.active = true;
-	
-	ipc_call_async_0(exch->phone, IPC_M_CLONE_ESTABLISH, msg,
-	    reply_received);
-	
-	sysarg_t rc;
-	async_wait_for((aid_t) msg, &rc);
-	
-	if (rc != EOK) {
-		errno = rc;
-		free(sess);
-		return NULL;
-	}
-	
-	int phone = (int) IPC_GET_ARG5(result);
-	
-	if (phone < 0) {
-		errno = phone;
-		free(sess);
-		return NULL;
-	}
-	
-	sess->iface = 0;
-	sess->mgmt = mgmt;
-	sess->phone = phone;
-	sess->arg1 = 0;
-	sess->arg2 = 0;
-	sess->arg3 = 0;
-	
-	fibril_mutex_initialize(&sess->remote_state_mtx);
-	sess->remote_state_data = NULL;
-	
-	list_initialize(&sess->exch_list);
-	fibril_mutex_initialize(&sess->mutex);
-	atomic_set(&sess->refcnt, 0);
-	
-	return sess;
 }
 
@@ -3153,64 +3070,4 @@
 }
 
-/** Wrapper for sending an exchange over different exchange for cloning
- *
- * @param exch       Exchange to be used for sending.
- * @param clone_exch Exchange to be cloned.
- *
- */
-int async_exchange_clone(async_exch_t *exch, async_exch_t *clone_exch)
-{
-	return async_req_1_0(exch, IPC_M_CONNECTION_CLONE, clone_exch->phone);
-}
-
-/** Wrapper for receiving the IPC_M_CONNECTION_CLONE calls.
- *
- * If the current call is IPC_M_CONNECTION_CLONE then a new
- * async session is created for the accepted phone.
- *
- * @param mgmt Exchange management style.
- *
- * @return New async session or NULL on failure.
- *
- */
-async_sess_t *async_clone_receive(exch_mgmt_t mgmt)
-{
-	/* Accept the phone */
-	ipc_call_t call;
-	ipc_callid_t callid = async_get_call(&call);
-	int phone = (int) IPC_GET_ARG1(call);
-	
-	if ((IPC_GET_IMETHOD(call) != IPC_M_CONNECTION_CLONE) ||
-	    (phone < 0)) {
-		async_answer_0(callid, EINVAL);
-		return NULL;
-	}
-	
-	async_sess_t *sess = (async_sess_t *) malloc(sizeof(async_sess_t));
-	if (sess == NULL) {
-		async_answer_0(callid, ENOMEM);
-		return NULL;
-	}
-	
-	sess->iface = 0;
-	sess->mgmt = mgmt;
-	sess->phone = phone;
-	sess->arg1 = 0;
-	sess->arg2 = 0;
-	sess->arg3 = 0;
-	
-	fibril_mutex_initialize(&sess->remote_state_mtx);
-	sess->remote_state_data = NULL;
-	
-	list_initialize(&sess->exch_list);
-	fibril_mutex_initialize(&sess->mutex);
-	atomic_set(&sess->refcnt, 0);
-	
-	/* Acknowledge the cloned phone */
-	async_answer_0(callid, EOK);
-	
-	return sess;
-}
-
 /** Wrapper for receiving the IPC_M_CONNECT_TO_ME calls.
  *
Index: uspace/lib/c/generic/ddi.c
===================================================================
--- uspace/lib/c/generic/ddi.c	(revision 7b616e23c349fc3f8cb4c5132825f4f5ef12c96a)
+++ uspace/lib/c/generic/ddi.c	(revision e27e36e1fb9699de71e9900d126082ea33f88bc2)
@@ -50,14 +50,4 @@
 #include "private/libc.h"
 
-
-/** Return unique device number.
- *
- * @return New unique device number.
- *
- */
-int device_assign_devno(void)
-{
-	return __SYSCALL0(SYS_DEVICE_ASSIGN_DEVNO);
-}
 
 /** Map a piece of physical memory to task.
Index: uspace/lib/c/generic/irq.c
===================================================================
--- uspace/lib/c/generic/irq.c	(revision 7b616e23c349fc3f8cb4c5132825f4f5ef12c96a)
+++ uspace/lib/c/generic/irq.c	(revision e27e36e1fb9699de71e9900d126082ea33f88bc2)
@@ -55,32 +55,29 @@
  *
  * @param inr    IRQ number.
- * @param devno  Device number of the device generating inr.
  * @param method Use this method for notifying me.
  * @param ucode  Top-half pseudocode handler.
+ *
+ * @return IRQ capability handle returned by the kernel.
+ * @return Error code returned by the kernel.
+ *
+ */
+int ipc_irq_subscribe(int inr, sysarg_t method, const irq_code_t *ucode)
+{
+	if (ucode == NULL)
+		ucode = &default_ucode;
+	
+	return __SYSCALL3(SYS_IPC_IRQ_SUBSCRIBE, inr, method, (sysarg_t) ucode);
+}
+
+/** Unsubscribe from IRQ notification.
+ *
+ * @param cap   IRQ capability handle.
  *
  * @return Value returned by the kernel.
  *
  */
-int ipc_irq_subscribe(int inr, int devno, sysarg_t method,
-    const irq_code_t *ucode)
+int ipc_irq_unsubscribe(int cap)
 {
-	if (ucode == NULL)
-		ucode = &default_ucode;
-	
-	return __SYSCALL4(SYS_IPC_IRQ_SUBSCRIBE, inr, devno, method,
-	    (sysarg_t) ucode);
-}
-
-/** Unsubscribe from IRQ notification.
- *
- * @param inr   IRQ number.
- * @param devno Device number of the device generating inr.
- *
- * @return Value returned by the kernel.
- *
- */
-int ipc_irq_unsubscribe(int inr, int devno)
-{
-	return __SYSCALL2(SYS_IPC_IRQ_UNSUBSCRIBE, inr, devno);
+	return __SYSCALL1(SYS_IPC_IRQ_UNSUBSCRIBE, cap);
 }
 
