Index: uspace/fb/ega.c
===================================================================
--- uspace/fb/ega.c	(revision 5a8b2a2e58c0aff599e30b00eed3a773ff644968)
+++ uspace/fb/ega.c	(revision 319e60e55b0b59b46de5960c99fbbfe193c9017a)
@@ -35,5 +35,4 @@
  */
 
-
 #include <stdlib.h>
 #include <unistd.h>
@@ -63,5 +62,4 @@
 saved_screen saved_screens[MAX_SAVED_SCREENS];
 
-
 #define EGA_IO_ADDRESS 0x3d4
 #define EGA_IO_SIZE 2
@@ -127,10 +125,12 @@
 	int i;
 	if (rows > 0) {
-		memcpy (scr_addr,((char *)scr_addr) + rows * scr_width * 2, scr_width * scr_height * 2 - rows * scr_width * 2);
+		memcpy (scr_addr,((char *)scr_addr) + rows * scr_width * 2,
+			scr_width * scr_height * 2 - rows * scr_width * 2);
 		for (i = 0; i < rows * scr_width ; i ++)
-			(((short *)scr_addr) + scr_width * scr_height - rows * scr_width) [i] = ((style << 8) + ' ');
+			(((short *)scr_addr) + scr_width * scr_height - rows *
+				scr_width) [i] = ((style << 8) + ' ');
 	} else if (rows < 0) {
-
-		memcpy (((char *)scr_addr) - rows * scr_width * 2 ,scr_addr ,scr_width * scr_height * 2 + rows * scr_width * 2);
+		memcpy (((char *)scr_addr) - rows * scr_width * 2, scr_addr,
+			scr_width * scr_height * 2 + rows * scr_width * 2);
 		for (i = 0; i < - rows * scr_width ; i++)
 			((short *)scr_addr) [i] = ((style << 8 ) + ' ');
@@ -309,11 +309,12 @@
 	scr_width=sysinfo_value("fb.width");
 	scr_height=sysinfo_value("fb.height");
-	iospace_enable(task_get_id(),(void *)EGA_IO_ADDRESS,2);
-
-	sz = scr_width*scr_height*2;
-	scr_addr = as_get_mappable_page(sz);
-
-	physmem_map(ega_ph_addr, scr_addr, ALIGN_UP(sz, PAGE_SIZE) >> PAGE_WIDTH,
-		    AS_AREA_READ | AS_AREA_WRITE);
+	iospace_enable(task_get_id(), (void *) EGA_IO_ADDRESS, 2);
+
+	sz = scr_width * scr_height * 2;
+	scr_addr = as_get_mappable_page(sz, (int)
+		sysinfo_value("fb.address.color"));
+
+	physmem_map(ega_ph_addr, scr_addr, ALIGN_UP(sz, PAGE_SIZE) >>
+		PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE);
 
 	async_set_client_connection(ega_client_connection);
Index: uspace/fb/fb.c
===================================================================
--- uspace/fb/fb.c	(revision 5a8b2a2e58c0aff599e30b00eed3a773ff644968)
+++ uspace/fb/fb.c	(revision 319e60e55b0b59b46de5960c99fbbfe193c9017a)
@@ -705,7 +705,8 @@
 		/* We accept one area for data interchange */
 		if (IPC_GET_ARG1(*call) == shm_id) {
-			void *dest = as_get_mappable_page(IPC_GET_ARG2(*call));
+			void *dest = as_get_mappable_page(IPC_GET_ARG2(*call),
+				PAGE_COLOR(IPC_GET_ARG1(*call)));
 			shm_size = IPC_GET_ARG2(*call);
-			if (!ipc_answer_fast(callid, 0, (sysarg_t)dest, 0)) 
+			if (!ipc_answer_fast(callid, 0, (sysarg_t) dest, 0)) 
 				shm = dest;
 			else
@@ -717,5 +718,5 @@
 		} else {
 			intersize = IPC_GET_ARG2(*call);
-			receive_comm_area(callid,call,(void *)&interbuffer);
+			receive_comm_area(callid, call, (void *) &interbuffer);
 		}
 		return 1;
@@ -1283,10 +1284,11 @@
 
 	asz = fb_scanline * fb_height;
-	fb_addr = as_get_mappable_page(asz);
+	fb_addr = as_get_mappable_page(asz, (int) sysinfo_value("fb.address.color"));
 	
 	physmem_map(fb_ph_addr, fb_addr, ALIGN_UP(asz, PAGE_SIZE) >> PAGE_WIDTH,
 		    AS_AREA_READ | AS_AREA_WRITE);
 
-	if (screen_init(fb_addr, fb_width, fb_height, fb_scanline, fb_visual, fb_invert_colors))
+	if (screen_init(fb_addr, fb_width, fb_height, fb_scanline, fb_visual,
+		fb_invert_colors))
 		return 0;
 	
Index: uspace/fb/main.c
===================================================================
--- uspace/fb/main.c	(revision 5a8b2a2e58c0aff599e30b00eed3a773ff644968)
+++ uspace/fb/main.c	(revision 319e60e55b0b59b46de5960c99fbbfe193c9017a)
@@ -44,5 +44,6 @@
 	void *dest;
 
-	dest = as_get_mappable_page(IPC_GET_ARG2(*call));
+	dest = as_get_mappable_page(IPC_GET_ARG2(*call),
+		PAGE_COLOR(IPC_GET_ARG1(*call)));
 	if (ipc_answer_fast(callid, 0, (sysarg_t)dest, 0) == 0) {
 		if (*area)
