Index: kernel/generic/src/ipc/ops/conctmeto.c
===================================================================
--- kernel/generic/src/ipc/ops/conctmeto.c	(revision 63e27efdf2fe6d3fa02bbb5ee1da00df5cc07e9d)
+++ kernel/generic/src/ipc/ops/conctmeto.c	(revision 88db88d7da75b0b460726b667120838bfc1b3f63)
@@ -42,13 +42,13 @@
 static int request_preprocess(call_t *call, phone_t *phone)
 {
-	int newphid = phone_alloc(TASK);
+	int cap = phone_alloc(TASK);
 
-	/* Remember the phoneid or the error. */
-	call->priv = newphid;
-	if (newphid < 0)
+	/* Remember the phone capability or the error. */
+	call->priv = cap;
+	if (cap < 0)
 		return ELIMIT;
 		
 	/* Set arg5 for server */
-	IPC_SET_ARG5(call->data, (sysarg_t) &TASK->phones[newphid]);
+	IPC_SET_ARG5(call->data, (sysarg_t) phone_get_current(cap));
 
 	return EOK;
@@ -74,16 +74,16 @@
 static int answer_process(call_t *answer)
 {
-	int newphid = (int) answer->priv;
+	int cap = (int) answer->priv;
 
 	if (IPC_GET_RETVAL(answer->data)) {
-		if (newphid >= 0) {
+		if (cap >= 0) {
 			/*
 			 * The phone was indeed allocated and now needs
 			 * to be deallocated.
 			 */
-			phone_dealloc(newphid);
+			phone_dealloc(cap);
 		}
 	} else {
-		IPC_SET_ARG5(answer->data, newphid);
+		IPC_SET_ARG5(answer->data, cap);
 	}
 	
Index: kernel/generic/src/ipc/ops/concttome.c
===================================================================
--- kernel/generic/src/ipc/ops/concttome.c	(revision 63e27efdf2fe6d3fa02bbb5ee1da00df5cc07e9d)
+++ kernel/generic/src/ipc/ops/concttome.c	(revision 88db88d7da75b0b460726b667120838bfc1b3f63)
@@ -42,7 +42,7 @@
 static int request_process(call_t *call, answerbox_t *box)
 {
-	int phoneid = phone_alloc(TASK);
+	int cap = phone_alloc(TASK);
 
-	IPC_SET_ARG5(call->data, phoneid);
+	IPC_SET_ARG5(call->data, cap);
 	
 	return EOK;
@@ -51,8 +51,8 @@
 static int answer_cleanup(call_t *answer, ipc_data_t *olddata)
 {
-	int phoneid = (int) IPC_GET_ARG5(*olddata);
+	int cap = (int) IPC_GET_ARG5(*olddata);
 
-	if (phoneid >= 0)
-		phone_dealloc(phoneid);
+	if (cap >= 0)
+		phone_dealloc(cap);
 
 	return EOK;
@@ -61,15 +61,15 @@
 static int answer_preprocess(call_t *answer, ipc_data_t *olddata)
 {
-	int phoneid = (int) IPC_GET_ARG5(*olddata);
+	int cap = (int) IPC_GET_ARG5(*olddata);
 
 	if (IPC_GET_RETVAL(answer->data) != EOK) {
 		/* The connection was not accepted */
 		answer_cleanup(answer, olddata);
-	} else if (phoneid >= 0) {
+	} else if (cap >= 0) {
 		/* The connection was accepted */
-		if (phone_connect(phoneid, &answer->sender->answerbox)) {
+		if (phone_connect(cap, &answer->sender->answerbox)) {
 			/* Set 'phone hash' as arg5 of response */
 			IPC_SET_ARG5(answer->data,
-			    (sysarg_t) &TASK->phones[phoneid]);
+			    (sysarg_t) phone_get_current(cap));
 		} else {
 			/* The answerbox is shutting down. */
Index: kernel/generic/src/ipc/ops/connclone.c
===================================================================
--- kernel/generic/src/ipc/ops/connclone.c	(revision 63e27efdf2fe6d3fa02bbb5ee1da00df5cc07e9d)
+++ kernel/generic/src/ipc/ops/connclone.c	(revision 88db88d7da75b0b460726b667120838bfc1b3f63)
@@ -61,11 +61,10 @@
 static int request_preprocess(call_t *call, phone_t *phone)
 {
-	phone_t *cloned_phone;
-
-	if (phone_get(IPC_GET_ARG1(call->data), &cloned_phone) != EOK)
+	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) {
@@ -73,5 +72,5 @@
 		return EINVAL;
 	}
-		
+	
 	/*
 	 * We can be pretty sure now that both tasks exist and we are
@@ -81,16 +80,16 @@
 	 *
 	 */
-	int newphid = phone_alloc(phone->callee->task);
-	if (newphid < 0) {
+	int cap = phone_alloc(phone->callee->task);
+	if (cap < 0) {
 		phones_unlock(cloned_phone, phone);
 		return ELIMIT;
 	}
-		
-	(void) ipc_phone_connect(&phone->callee->task->phones[newphid],
+	
+	(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, newphid);
+	IPC_SET_ARG1(call->data, cap);
 
 	return EOK;
@@ -99,6 +98,6 @@
 static int answer_cleanup(call_t *answer, ipc_data_t *olddata)
 {
-	int phoneid = (int) IPC_GET_ARG1(*olddata);
-	phone_t *phone = &TASK->phones[phoneid];
+	int cap = (int) IPC_GET_ARG1(*olddata);
+	phone_t *phone = phone_get_current(cap);
 
 	/*
Index: kernel/generic/src/ipc/ops/stchngath.c
===================================================================
--- kernel/generic/src/ipc/ops/stchngath.c	(revision 63e27efdf2fe6d3fa02bbb5ee1da00df5cc07e9d)
+++ kernel/generic/src/ipc/ops/stchngath.c	(revision 88db88d7da75b0b460726b667120838bfc1b3f63)
@@ -43,8 +43,8 @@
 static int request_preprocess(call_t *call, phone_t *phone)
 {
-	phone_t *sender_phone;
 	task_t *other_task_s;
 
-	if (phone_get(IPC_GET_ARG5(call->data), &sender_phone) != EOK)
+	phone_t *sender_phone = phone_get_current(IPC_GET_ARG5(call->data));
+	if (!sender_phone)
 		return ENOENT;
 
@@ -75,7 +75,6 @@
 		task_t *other_task_r;
 
-		rc = phone_get(IPC_GET_ARG1(answer->data),
-		    &recipient_phone);
-		if (rc != EOK) {
+		recipient_phone = phone_get_current(IPC_GET_ARG1(answer->data));
+		if (!recipient_phone) {
 			IPC_SET_RETVAL(answer->data, ENOENT);
 			return ENOENT;
