Index: kernel/generic/include/ipc/ipc.h
===================================================================
--- kernel/generic/include/ipc/ipc.h	(revision 7e3826d9e2baf0dbb07a924b5e30821ee79b8f0d)
+++ kernel/generic/include/ipc/ipc.h	(revision 05ffb410774ff0c26682afbcb4c7bfc3e315749b)
@@ -43,6 +43,4 @@
 #include <typedefs.h>
 
-#define IPC_MAX_PHONES  64
-
 struct answerbox;
 struct task;
Index: kernel/generic/include/ipc/ipcrsc.h
===================================================================
--- kernel/generic/include/ipc/ipcrsc.h	(revision 7e3826d9e2baf0dbb07a924b5e30821ee79b8f0d)
+++ kernel/generic/include/ipc/ipcrsc.h	(revision 05ffb410774ff0c26682afbcb4c7bfc3e315749b)
@@ -40,5 +40,6 @@
 
 extern call_t *get_call(sysarg_t);
-extern int phone_get(sysarg_t, phone_t **);
+extern phone_t *phone_get_current(int);
+extern phone_t *phone_get(task_t *, int);
 extern int phone_alloc(task_t *);
 extern bool phone_connect(int, answerbox_t *);
Index: kernel/generic/include/kobject/kobject.h
===================================================================
--- kernel/generic/include/kobject/kobject.h	(revision 7e3826d9e2baf0dbb07a924b5e30821ee79b8f0d)
+++ kernel/generic/include/kobject/kobject.h	(revision 05ffb410774ff0c26682afbcb4c7bfc3e315749b)
@@ -37,4 +37,5 @@
 
 #include <typedefs.h>
+#include <ipc/ipc.h>
 
 #define MAX_KERNEL_OBJECTS  64
@@ -44,16 +45,22 @@
 typedef enum {
 	KOBJECT_TYPE_INVALID,
-	KOBJECT_TYPE_ALLOCATED
+	KOBJECT_TYPE_ALLOCATED,
+	KOBJECT_TYPE_PHONE
 } kobject_type_t;
 
-typedef struct {
+typedef struct kobject {
 	kobject_type_t type;
+	bool (* can_reclaim)(struct kobject *);
+
 	union {
+		phone_t phone;
 	};
 } kobject_t;
 
-extern kobject_t *kobject_get_local(int, kobject_type_t);
+struct task;
 
-struct task;
+extern void kobject_init(kobject_t *);
+extern kobject_t *kobject_get(struct task *, int, kobject_type_t);
+extern kobject_t *kobject_get_current(int, kobject_type_t);
 extern int kobject_alloc(struct task *);
 extern void kobject_free(struct task *, int);
Index: kernel/generic/include/proc/task.h
===================================================================
--- kernel/generic/include/proc/task.h	(revision 7e3826d9e2baf0dbb07a924b5e30821ee79b8f0d)
+++ kernel/generic/include/proc/task.h	(revision 05ffb410774ff0c26682afbcb4c7bfc3e315749b)
@@ -105,7 +105,4 @@
 	answerbox_t answerbox;
 
-	/** Sending communication endpoints */
-	phone_t phones[IPC_MAX_PHONES];
-
 	/** Spinlock protecting the active_calls list. */
 	SPINLOCK_DECLARE(active_calls_lock);
