Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision 0c509d026e5d9e0ccb1ecfb89d06482723dd41d8)
+++ kernel/generic/src/ipc/ipc.c	(revision 1b4196dba5fb41ff03a455e1ed5bbc0db6d31015)
@@ -161,11 +161,11 @@
 bool ipc_phone_connect(phone_t *phone, answerbox_t *box)
 {
-	bool active;
+	bool connected;
 
 	mutex_lock(&phone->lock);
 	irq_spinlock_lock(&box->lock, true);
 
-	active = box->active;
-	if (active) {
+	connected = box->active && (phone->state == IPC_PHONE_CONNECTING);
+	if (connected) {
 		phone->state = IPC_PHONE_CONNECTED;
 		phone->callee = box;
@@ -177,10 +177,10 @@
 	mutex_unlock(&phone->lock);
 
-	if (!active) {
+	if (!connected) {
 		/* We still have phone->kobject's reference; drop it */
 		kobject_put(phone->kobject);
 	}
 
-	return active;
+	return connected;
 }
 
Index: kernel/generic/src/ipc/ipcrsc.c
===================================================================
--- kernel/generic/src/ipc/ipcrsc.c	(revision 0c509d026e5d9e0ccb1ecfb89d06482723dd41d8)
+++ kernel/generic/src/ipc/ipcrsc.c	(revision 1b4196dba5fb41ff03a455e1ed5bbc0db6d31015)
@@ -216,13 +216,4 @@
 		return false;
 
-	if (phone_obj->phone->state != IPC_PHONE_CONNECTING) {
-		/*
-		 * This looks like another phone. The one we were expecting
-		 * under this handle must be in the IPC_PHONE_CONNECTING state.
-		 */
-		kobject_put(phone_obj);
-		return false;
-	}
-
 	/* Hand over phone_obj reference to the answerbox */
 	return ipc_phone_connect(phone_obj->phone, box);
