Index: kernel/generic/src/ipc/ops/pagein.c
===================================================================
--- kernel/generic/src/ipc/ops/pagein.c	(revision 5c2af75dfaacd671a4ad11ffb003e457f12d538e)
+++ kernel/generic/src/ipc/ops/pagein.c	(revision 5c2af75dfaacd671a4ad11ffb003e457f12d538e)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2016 Jakub Jermar 
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup genericipc
+ * @{
+ */
+/** @file
+ */
+
+#include <ipc/sysipc_ops.h>
+#include <ipc/ipc.h>
+#include <mm/as.h>
+#include <mm/page.h>
+#include <genarch/mm/page_pt.h>
+#include <genarch/mm/page_ht.h>
+#include <mm/frame.h>
+#include <proc/task.h>
+#include <abi/errno.h>
+#include <arch.h>
+
+static int answer_preprocess(call_t *answer, ipc_data_t *olddata)
+{
+	if (!IPC_GET_RETVAL(answer->data)) {
+		pte_t *pte;
+		uintptr_t frame;
+
+		page_table_lock(AS, true);
+		pte = page_mapping_find(AS, IPC_GET_ARG1(answer->data), false);
+		if (pte) {
+			frame = PTE_GET_FRAME(pte);
+			frame_reference_add(ADDR2PFN(frame));
+			IPC_SET_ARG1(answer->data, frame);
+		} else {
+			IPC_SET_RETVAL(answer->data, ENOENT);
+		}
+		page_table_unlock(AS, true);
+	}
+	
+	return EOK;
+}
+
+sysipc_ops_t ipc_m_page_in_ops = {
+	.request_preprocess = null_request_preprocess,
+	.request_forget = null_request_forget,
+	.request_process = null_request_process,
+	.answer_cleanup = null_answer_cleanup,
+	.answer_preprocess = answer_preprocess,
+	.answer_process = null_answer_process,
+};
+
+/** @}
+ */
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision bc117a5ac32e41495ea60ebd89a93d3ffea64de7)
+++ kernel/generic/src/ipc/sysipc.c	(revision 5c2af75dfaacd671a4ad11ffb003e457f12d538e)
@@ -106,4 +106,5 @@
 {
 	switch (imethod) {
+	case IPC_M_PAGE_IN:
 	case IPC_M_SHARE_OUT:
 	case IPC_M_SHARE_IN:
@@ -137,4 +138,5 @@
 	case IPC_M_CONNECT_TO_ME:
 	case IPC_M_CONNECT_ME_TO:
+	case IPC_M_PAGE_IN:
 	case IPC_M_SHARE_OUT:
 	case IPC_M_SHARE_IN:
Index: kernel/generic/src/ipc/sysipc_ops.c
===================================================================
--- kernel/generic/src/ipc/sysipc_ops.c	(revision bc117a5ac32e41495ea60ebd89a93d3ffea64de7)
+++ kernel/generic/src/ipc/sysipc_ops.c	(revision 5c2af75dfaacd671a4ad11ffb003e457f12d538e)
@@ -42,4 +42,5 @@
 sysipc_ops_t ipc_m_connect_to_me_ops;
 sysipc_ops_t ipc_m_connect_me_to_ops;
+sysipc_ops_t ipc_m_page_in_ops;
 sysipc_ops_t ipc_m_share_out_ops;
 sysipc_ops_t ipc_m_share_in_ops;
@@ -54,4 +55,5 @@
 	[IPC_M_CONNECT_TO_ME] = &ipc_m_connect_to_me_ops,
 	[IPC_M_CONNECT_ME_TO] = &ipc_m_connect_me_to_ops,
+	[IPC_M_PAGE_IN] = &ipc_m_page_in_ops,
 	[IPC_M_SHARE_OUT] = &ipc_m_share_out_ops,
 	[IPC_M_SHARE_IN] = &ipc_m_share_in_ops,
