Index: kernel/generic/include/mm/as.h
===================================================================
--- kernel/generic/include/mm/as.h	(revision 2a2fbc84d3b2a2ff06b9bb236ff8e813c17ce223)
+++ kernel/generic/include/mm/as.h	(revision b1956e379e62b427bc1ee130d2d755579cd92ebd)
@@ -188,5 +188,5 @@
 	/** user_backend members */
 	struct {
-		int pager;	/**< Phone to the pager. */
+		as_area_pager_info_t pager_info;
 	};
 
@@ -310,5 +310,5 @@
 /* Address space area related syscalls. */
 extern sysarg_t sys_as_area_create(uintptr_t, size_t, unsigned int, uintptr_t,
-    int);
+    as_area_pager_info_t *);
 extern sysarg_t sys_as_area_resize(uintptr_t, size_t, unsigned int);
 extern sysarg_t sys_as_area_change_flags(uintptr_t, unsigned int);
Index: kernel/generic/src/mm/as.c
===================================================================
--- kernel/generic/src/mm/as.c	(revision 2a2fbc84d3b2a2ff06b9bb236ff8e813c17ce223)
+++ kernel/generic/src/mm/as.c	(revision b1956e379e62b427bc1ee130d2d755579cd92ebd)
@@ -2187,5 +2187,5 @@
 
 sysarg_t sys_as_area_create(uintptr_t base, size_t size, unsigned int flags,
-    uintptr_t bound, int pager)
+    uintptr_t bound, as_area_pager_info_t *pager_info)
 {
 	uintptr_t virt = base;
@@ -2193,9 +2193,12 @@
 	mem_backend_data_t backend_data;
 
-	if (pager == AS_AREA_UNPAGED)
+	if (pager_info == AS_AREA_UNPAGED)
 		backend = &anon_backend;
 	else {
 		backend = &user_backend;
-		backend_data.pager = pager;
+		if (copy_from_uspace(&backend_data.pager_info, pager_info,
+			sizeof(as_area_pager_info_t)) != EOK) {
+			return (sysarg_t) AS_MAP_FAILED;
+		}
 	}
 	as_area_t *area = as_area_create(AS, flags, size,
Index: kernel/generic/src/mm/backend_user.c
===================================================================
--- kernel/generic/src/mm/backend_user.c	(revision 2a2fbc84d3b2a2ff06b9bb236ff8e813c17ce223)
+++ kernel/generic/src/mm/backend_user.c	(revision b1956e379e62b427bc1ee130d2d755579cd92ebd)
@@ -39,4 +39,5 @@
 #include <mm/as.h>
 #include <mm/page.h>
+#include <abi/mm/as.h>
 #include <abi/ipc/methods.h>
 #include <ipc/sysipc.h>
@@ -132,10 +133,15 @@
 		return AS_PF_FAULT;
 
+	as_area_pager_info_t *pager_info = &area->backend_data.pager_info;
+
 	ipc_data_t data = {};
 	IPC_SET_IMETHOD(data, IPC_M_PAGE_IN);
 	IPC_SET_ARG1(data, upage - area->base);
 	IPC_SET_ARG2(data, PAGE_SIZE);
+	IPC_SET_ARG3(data, pager_info->id1);
+	IPC_SET_ARG4(data, pager_info->id2);
+	IPC_SET_ARG5(data, pager_info->id3);
 
-	int rc = ipc_req_internal(area->backend_data.pager, &data);
+	int rc = ipc_req_internal(pager_info->pager, &data);
 
 	if (rc != EOK) {
@@ -143,5 +149,5 @@
 		    "Page-in request for page %#" PRIxn
 		    " at pager %d failed with error %d.",
-		    upage, area->backend_data.pager, rc);
+		    upage, pager_info->pager, rc);
 		return AS_PF_FAULT;
 	}
