Index: uspace/srv/ns/ns.c
===================================================================
--- uspace/srv/ns/ns.c	(revision 482c86fe027ae8daeadd5905411883986a9524ec)
+++ uspace/srv/ns/ns.c	(revision 6071a8f795d4bd0c92c2ca86cdda3afe37e0de79)
@@ -121,16 +121,20 @@
 }
 
-static void get_as_area(ipc_callid_t callid, ipc_call_t *call, char *name, void **addr)
-{
-	void *ph_addr;
-	
-	if (!*addr) {
-		ph_addr = (void *) sysinfo_value(name);
-		if (!ph_addr) {
+static void get_as_area(ipc_callid_t callid, ipc_call_t *call, void *ph_addr, count_t pages, void **addr)
+{
+	if (ph_addr == NULL) {
+		ipc_answer_0(callid, ENOENT);
+		return;
+	}
+	
+	if (*addr == NULL) {
+		*addr = as_get_mappable_page(pages * PAGE_SIZE);
+		
+		if (*addr == NULL) {
 			ipc_answer_0(callid, ENOENT);
 			return;
 		}
-		*addr = as_get_mappable_page(PAGE_SIZE);
-		if (physmem_map(ph_addr, *addr, 1,
+		
+		if (physmem_map(ph_addr, *addr, pages,
 		    AS_AREA_READ | AS_AREA_CACHEABLE) != 0) {
 			ipc_answer_0(callid, ENOENT);
@@ -138,4 +142,5 @@
 		}
 	}
+	
 	ipc_answer_2(callid, EOK, (ipcarg_t) *addr, AS_AREA_READ);
 }
@@ -198,8 +203,8 @@
 			switch (IPC_GET_ARG3(call)) {
 			case SERVICE_MEM_REALTIME:
-				get_as_area(callid, &call, "clock.faddr", &clockaddr);
+				get_as_area(callid, &call, sysinfo_value("clock.faddr"), 1, &clockaddr);
 				break;
 			case SERVICE_MEM_KLOG:
-				get_as_area(callid, &call, "klog.faddr", &klogaddr);
+				get_as_area(callid, &call, sysinfo_value("klog.faddr"), sysinfo_value("klog.pages"), &klogaddr);
 				break;
 			default:
