Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision 8658f89291d5a3b786eda37c379a32acd5ded14f)
+++ kernel/generic/src/ipc/sysipc.c	(revision e1ab30f8f158334f3d988bcc8214bbdff1fd3cca)
@@ -337,4 +337,24 @@
 }
 
+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);
+}
+
 /** Called before the request is sent.
  *
@@ -356,18 +376,8 @@
 		GET_CHECK_PHONE(cloned_phone, IPC_GET_ARG1(call->data),
 		    return ENOENT);
-		if (cloned_phone < phone) {
-			mutex_lock(&cloned_phone->lock);
-			mutex_lock(&phone->lock);
-		} else if (cloned_phone > phone) {
-			mutex_lock(&phone->lock);
-			mutex_lock(&cloned_phone->lock);
-		} else {
-			mutex_lock(&phone->lock);
-		}
+		phones_lock(cloned_phone, phone);
 		if ((cloned_phone->state != IPC_PHONE_CONNECTED) ||
 		    phone->state != IPC_PHONE_CONNECTED) {
-			if (cloned_phone != phone)
-				mutex_unlock(&cloned_phone->lock);
-			mutex_unlock(&phone->lock);
+			phones_unlock(cloned_phone, phone);
 			return EINVAL;
 		}
@@ -380,14 +390,10 @@
 		newphid = phone_alloc(phone->callee->task);
 		if (newphid < 0) {
-			if (cloned_phone != phone)
-				mutex_unlock(&cloned_phone->lock);
-			mutex_unlock(&phone->lock);
+			phones_unlock(cloned_phone, phone);
 			return ELIMIT;
 		}
 		ipc_phone_connect(&phone->callee->task->phones[newphid],
 		    cloned_phone->callee);
-		if (cloned_phone != phone)
-			mutex_unlock(&cloned_phone->lock);
-		mutex_unlock(&phone->lock);
+		phones_unlock(cloned_phone, phone);
 		/* Set the new phone for the callee. */
 		IPC_SET_ARG1(call->data, newphid);
