Index: abi/include/abi/ipc/methods.h
===================================================================
--- abi/include/abi/ipc/methods.h	(revision 8a45bf097298bef4ee6d8bd85694bcedb0d88cf1)
+++ abi/include/abi/ipc/methods.h	(revision 4d6629f35433100ab954e68c6ed4fc9bf24accb1)
@@ -58,26 +58,4 @@
 	 */
 	IPC_M_PHONE_HUNGUP = 0,
-
-	/** Clone connection.
-	 *
-	 * The calling task clones one of its phones for the callee.
-	 *
-	 * - ARG1 - The caller sets ARG1 to the phone of the cloned connection.
-	 *        - The callee gets the new phone from ARG1.
-	 *
-	 * - on answer, the callee acknowledges the new connection by sending EOK back
-	 *   or the kernel closes it
-	 */
-	IPC_M_CONNECTION_CLONE,
-
-	/** Protocol for establishing a cloned connection.
-	 *
-	 * Through this call, the recipient learns about the new cloned connection.
-	 *
-	 * - ARG5 - the kernel sets ARG5 to contain the hash of the used phone
-	 * - on answer, the callee acknowledges the new connection by sending EOK back
-	 *   or the kernel closes it
-	 */
-	IPC_M_CLONE_ESTABLISH,
 
 	/** Protocol for initializing callback connections.
Index: kernel/Makefile
===================================================================
--- kernel/Makefile	(revision 8a45bf097298bef4ee6d8bd85694bcedb0d88cf1)
+++ kernel/Makefile	(revision 4d6629f35433100ab954e68c6ed4fc9bf24accb1)
@@ -271,8 +271,6 @@
 	generic/src/ipc/sysipc.c \
 	generic/src/ipc/sysipc_ops.c \
-	generic/src/ipc/ops/clnestab.c \
 	generic/src/ipc/ops/conctmeto.c \
 	generic/src/ipc/ops/concttome.c \
-	generic/src/ipc/ops/connclone.c \
 	generic/src/ipc/ops/dataread.c \
 	generic/src/ipc/ops/datawrite.c \
Index: rnel/generic/src/ipc/ops/clnestab.c
===================================================================
--- kernel/generic/src/ipc/ops/clnestab.c	(revision 8a45bf097298bef4ee6d8bd85694bcedb0d88cf1)
+++ 	(revision )
@@ -1,88 +1,0 @@
-/*
- * Copyright (c) 2012 Jakub Jermar 
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup genericipc
- * @{
- */
-/** @file
- */
-
-#include <ipc/sysipc_ops.h>
-#include <ipc/ipc.h>
-#include <synch/mutex.h>
-#include <abi/errno.h>
-
-static int request_preprocess(call_t *call, phone_t *phone)
-{
-	IPC_SET_ARG5(call->data, (sysarg_t) phone);
-
-	return EOK;	
-}
-
-static int answer_cleanup(call_t *answer, ipc_data_t *olddata)
-{
-	phone_t *phone = (phone_t *) IPC_GET_ARG5(*olddata);
-
-	mutex_lock(&phone->lock);
-	if (phone->state == IPC_PHONE_CONNECTED) {
-		irq_spinlock_lock(&phone->callee->lock, true);
-		list_remove(&phone->link);
-		phone->state = IPC_PHONE_SLAMMED;
-		irq_spinlock_unlock(&phone->callee->lock, true);
-	}
-	mutex_unlock(&phone->lock);
-
-	return EOK;
-}
-
-static int answer_preprocess(call_t *answer, ipc_data_t *olddata)
-{
-
-	if (IPC_GET_RETVAL(answer->data) != EOK) {
-		/*
-		 * The other party on the cloned phone rejected our request
-		 * for connection on the protocol level.  We need to break the
-		 * connection without sending IPC_M_HUNGUP back.
-		 */
-		answer_cleanup(answer, olddata);
-	}
-	
-	return EOK;
-}
-
-sysipc_ops_t ipc_m_clone_establish_ops = {
-	.request_preprocess = request_preprocess,
-	.request_forget = null_request_forget,
-	.request_process = null_request_process,
-	.answer_cleanup = answer_cleanup,
-	.answer_preprocess = answer_preprocess,
-	.answer_process = null_answer_process,
-};
-
-/** @}
- */
Index: rnel/generic/src/ipc/ops/connclone.c
===================================================================
--- kernel/generic/src/ipc/ops/connclone.c	(revision 8a45bf097298bef4ee6d8bd85694bcedb0d88cf1)
+++ 	(revision )
@@ -1,143 +1,0 @@
-/*
- * Copyright (c) 2012 Jakub Jermar 
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup genericipc
- * @{
- */
-/** @file
- */
-
-#include <ipc/sysipc_ops.h>
-#include <ipc/ipc.h>
-#include <ipc/ipcrsc.h>
-#include <synch/mutex.h>
-#include <abi/errno.h>
-#include <arch.h>
-
-static void phones_lock(phone_t *p1, phone_t *p2)
-{
-	if (p1 < p2) {
-		mutex_lock(&p1->lock);
-		mutex_lock(&p2->lock);
-	} else if (p1 > p2) {
-		mutex_lock(&p2->lock);
-		mutex_lock(&p1->lock);
-	} else
-		mutex_lock(&p1->lock);
-}
-
-static void phones_unlock(phone_t *p1, phone_t *p2)
-{
-	mutex_unlock(&p1->lock);
-	if (p1 != p2)
-		mutex_unlock(&p2->lock);
-}
-
-static int request_preprocess(call_t *call, phone_t *phone)
-{
-	phone_t *cloned_phone = phone_get_current(IPC_GET_ARG1(call->data));
-	if (!cloned_phone)
-		return ENOENT;
-	
-	phones_lock(cloned_phone, phone);
-	
-	if ((cloned_phone->state != IPC_PHONE_CONNECTED) ||
-	    phone->state != IPC_PHONE_CONNECTED) {
-		phones_unlock(cloned_phone, phone);
-		return EINVAL;
-	}
-	
-	/*
-	 * We can be pretty sure now that both tasks exist and we are
-	 * connected to them. As we continue to hold the phone locks,
-	 * we are effectively preventing them from finishing their
-	 * potential cleanup.
-	 *
-	 */
-	int cap = phone_alloc(phone->callee->task);
-	if (cap < 0) {
-		phones_unlock(cloned_phone, phone);
-		return ELIMIT;
-	}
-	
-	(void) ipc_phone_connect(phone_get(phone->callee->task, cap),
-	    cloned_phone->callee);
-	phones_unlock(cloned_phone, phone);
-	
-	/* Set the new phone for the callee. */
-	IPC_SET_ARG1(call->data, cap);
-
-	return EOK;
-}
-
-static int answer_cleanup(call_t *answer, ipc_data_t *olddata)
-{
-	int cap = (int) IPC_GET_ARG1(*olddata);
-	phone_t *phone = phone_get_current(cap);
-
-	/*
-	 * In this case, the connection was established at the request
-	 * time and therefore we need to slam the phone.  We don't
-	 * merely hangup as that would result in sending IPC_M_HUNGUP
-	 * to the third party on the other side of the cloned phone.
-	 */
-	mutex_lock(&phone->lock);
-	if (phone->state == IPC_PHONE_CONNECTED) {
-		irq_spinlock_lock(&phone->callee->lock, true);
-		list_remove(&phone->link);
-		phone->state = IPC_PHONE_SLAMMED;
-		irq_spinlock_unlock(&phone->callee->lock, true);
-	}
-	mutex_unlock(&phone->lock);
-
-	return EOK;
-}
-
-static int answer_preprocess(call_t *answer, ipc_data_t *olddata)
-{
-	if (IPC_GET_RETVAL(answer->data) != EOK) {
-		/*
-		 * The recipient of the cloned phone rejected the offer.
-		 */
-		answer_cleanup(answer, olddata);
-	}
-
-	return EOK;
-}
-
-sysipc_ops_t ipc_m_connection_clone_ops = {
-	.request_preprocess = request_preprocess,
-	.request_forget = null_request_forget,
-	.request_process = null_request_process,
-	.answer_cleanup = answer_cleanup,
-	.answer_preprocess = answer_preprocess,
-	.answer_process = null_answer_process,
-};
-
-/** @}
- */
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision 8a45bf097298bef4ee6d8bd85694bcedb0d88cf1)
+++ kernel/generic/src/ipc/sysipc.c	(revision 4d6629f35433100ab954e68c6ed4fc9bf24accb1)
@@ -85,6 +85,4 @@
 {
 	switch (imethod) {
-	case IPC_M_CONNECTION_CLONE:
-	case IPC_M_CLONE_ESTABLISH:
 	case IPC_M_PHONE_HUNGUP:
 		/* This message is meant only for the original recipient. */
@@ -135,6 +133,4 @@
 {
 	switch (IPC_GET_IMETHOD(call->data)) {
-	case IPC_M_CONNECTION_CLONE:
-	case IPC_M_CLONE_ESTABLISH:
 	case IPC_M_CONNECT_TO_ME:
 	case IPC_M_CONNECT_ME_TO:
Index: kernel/generic/src/ipc/sysipc_ops.c
===================================================================
--- kernel/generic/src/ipc/sysipc_ops.c	(revision 8a45bf097298bef4ee6d8bd85694bcedb0d88cf1)
+++ kernel/generic/src/ipc/sysipc_ops.c	(revision 4d6629f35433100ab954e68c6ed4fc9bf24accb1)
@@ -38,6 +38,4 @@
 
 /* Forward declarations. */
-sysipc_ops_t ipc_m_connection_clone_ops;
-sysipc_ops_t ipc_m_clone_establish_ops;
 sysipc_ops_t ipc_m_connect_to_me_ops;
 sysipc_ops_t ipc_m_connect_me_to_ops;
@@ -51,6 +49,4 @@
 
 static sysipc_ops_t *sysipc_ops[] = {
-	[IPC_M_CONNECTION_CLONE] = &ipc_m_connection_clone_ops,
-	[IPC_M_CLONE_ESTABLISH] = &ipc_m_clone_establish_ops,
 	[IPC_M_CONNECT_TO_ME] = &ipc_m_connect_to_me_ops,
 	[IPC_M_CONNECT_ME_TO] = &ipc_m_connect_me_to_ops,
Index: uspace/app/trace/ipc_desc.c
===================================================================
--- uspace/app/trace/ipc_desc.c	(revision 8a45bf097298bef4ee6d8bd85694bcedb0d88cf1)
+++ uspace/app/trace/ipc_desc.c	(revision 4d6629f35433100ab954e68c6ed4fc9bf24accb1)
@@ -40,6 +40,4 @@
 	/* System methods */
 	{ IPC_M_PHONE_HUNGUP,     "PHONE_HUNGUP" },
-	{ IPC_M_CONNECTION_CLONE, "CONNECTION_CLONE" },
-	{ IPC_M_CLONE_ESTABLISH,  "CLONE_ESTABLISH" },
 	{ IPC_M_CONNECT_ME_TO,    "CONNECT_ME_TO" },
 	{ IPC_M_CONNECT_TO_ME,    "CONNECT_TO_ME" },
Index: uspace/lib/c/generic/async.c
===================================================================
--- uspace/lib/c/generic/async.c	(revision 8a45bf097298bef4ee6d8bd85694bcedb0d88cf1)
+++ uspace/lib/c/generic/async.c	(revision 4d6629f35433100ab954e68c6ed4fc9bf24accb1)
@@ -1357,14 +1357,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;
 	}
@@ -2084,76 +2074,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;
 }
 
@@ -3126,64 +3044,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/include/async.h
===================================================================
--- uspace/lib/c/include/async.h	(revision 8a45bf097298bef4ee6d8bd85694bcedb0d88cf1)
+++ uspace/lib/c/include/async.h	(revision 4d6629f35433100ab954e68c6ed4fc9bf24accb1)
@@ -343,5 +343,4 @@
     sysarg_t *, sysarg_t *);
 
-extern async_sess_t *async_clone_establish(exch_mgmt_t, async_exch_t *);
 extern async_sess_t *async_connect_me_to(exch_mgmt_t, async_exch_t *, sysarg_t,
     sysarg_t, sysarg_t);
@@ -472,6 +471,4 @@
     sysarg_t, sysarg_t, sysarg_t, ipc_call_t *);
 
-extern int async_exchange_clone(async_exch_t *, async_exch_t *);
-extern async_sess_t *async_clone_receive(exch_mgmt_t);
 extern async_sess_t *async_callback_receive(exch_mgmt_t);
 extern async_sess_t *async_callback_receive_start(exch_mgmt_t, ipc_call_t *);
