Index: kernel/arch/ia32/src/drivers/vesa.c
===================================================================
--- kernel/arch/ia32/src/drivers/vesa.c	(revision dd2cfa70168c246f78a3a28187b10d9f5ced94e0)
+++ kernel/arch/ia32/src/drivers/vesa.c	(revision 19490cea4251de33ed19741087be0c03ff4d2a4f)
@@ -86,7 +86,7 @@
 		    && (vesa_green_mask == 5) && (vesa_green_pos == 5)
 		    && (vesa_blue_mask == 5) && (vesa_blue_pos == 0))
-			visual = VISUAL_BGR_5_5_5;
+			visual = VISUAL_RGB_5_5_5_LE;
 		else
-			visual = VISUAL_BGR_5_6_5;
+			visual = VISUAL_RGB_5_6_5_LE;
 		break;
 	case 24:
Index: kernel/arch/ppc32/src/ppc32.c
===================================================================
--- kernel/arch/ppc32/src/ppc32.c	(revision dd2cfa70168c246f78a3a28187b10d9f5ced94e0)
+++ kernel/arch/ppc32/src/ppc32.c	(revision 19490cea4251de33ed19741087be0c03ff4d2a4f)
@@ -93,5 +93,5 @@
 				break;
 			case 16:
-				visual = VISUAL_BGR_5_5_5;
+				visual = VISUAL_RGB_5_5_5_BE;
 				break;
 			case 24:
Index: kernel/arch/sparc64/src/drivers/scr.c
===================================================================
--- kernel/arch/sparc64/src/drivers/scr.c	(revision dd2cfa70168c246f78a3a28187b10d9f5ced94e0)
+++ kernel/arch/sparc64/src/drivers/scr.c	(revision 19490cea4251de33ed19741087be0c03ff4d2a4f)
@@ -134,5 +134,5 @@
 		case 16:
 			fb_scanline = fb_linebytes * (fb_depth >> 3);
-			visual = VISUAL_BGR_5_6_5;
+			visual = VISUAL_RGB_5_6_5_BE;
 			break;
 		case 24:
@@ -178,5 +178,5 @@
 		case 16:
 			fb_scanline = fb_linebytes * (fb_depth >> 3);
-			visual = VISUAL_BGR_5_6_5;
+			visual = VISUAL_RGB_5_6_5_BE;
 			break;
 		case 24:
Index: kernel/genarch/include/fb/visuals.h
===================================================================
--- kernel/genarch/include/fb/visuals.h	(revision dd2cfa70168c246f78a3a28187b10d9f5ced94e0)
+++ kernel/genarch/include/fb/visuals.h	(revision 19490cea4251de33ed19741087be0c03ff4d2a4f)
@@ -38,6 +38,8 @@
 typedef enum {
 	VISUAL_INDIRECT_8,
-	VISUAL_BGR_5_5_5,
-	VISUAL_BGR_5_6_5,
+	VISUAL_RGB_5_5_5_LE,
+	VISUAL_RGB_5_5_5_BE,
+	VISUAL_RGB_5_6_5_LE,
+	VISUAL_RGB_5_6_5_BE,
 	VISUAL_BGR_8_8_8,
 	VISUAL_BGR_0_8_8_8,
Index: kernel/genarch/src/fb/fb.c
===================================================================
--- kernel/genarch/src/fb/fb.c	(revision dd2cfa70168c246f78a3a28187b10d9f5ced94e0)
+++ kernel/genarch/src/fb/fb.c	(revision 19490cea4251de33ed19741087be0c03ff4d2a4f)
@@ -146,16 +146,26 @@
 }
 
-static void bgr_555(void *dst, uint32_t rgb)
-{
-	uint8_t hi = (BLUE(rgb, 5) | (GREEN(rgb, 5) << 5)) & 0xff;
-	uint8_t lo = (GREEN(rgb, 5) >> 3) | (RED(rgb, 5) << 2);
-	*((uint16_t *) dst) = host2uint16_t_be((hi << 8) | lo);
-}
-
-static void bgr_565(void *dst, uint32_t rgb)
-{
-	uint8_t hi = (BLUE(rgb, 5) | (GREEN(rgb, 6) << 5)) & 0xff;
-	uint8_t lo = (GREEN(rgb, 6) >> 3) | (RED(rgb, 5) << 3);
-	*((uint16_t *) dst) = host2uint16_t_be((hi << 8) | lo);
+static void rgb_555_be(void *dst, uint32_t rgb)
+{
+	*((uint16_t *) dst) = host2uint16_t_be(RED(rgb, 5) << 10 |
+	    GREEN(rgb, 5) << 5 | BLUE(rgb, 5));
+}
+
+static void rgb_555_le(void *dst, uint32_t rgb)
+{
+	*((uint16_t *) dst) = host2uint16_t_le(RED(rgb, 5) << 10 |
+	    GREEN(rgb, 5) << 5 | BLUE(rgb, 5));
+}
+
+static void rgb_565_be(void *dst, uint32_t rgb)
+{
+	*((uint16_t *) dst) = host2uint16_t_be(RED(rgb, 5) << 11 |
+	    GREEN(rgb, 6) << 5 | BLUE(rgb, 5));
+}
+
+static void rgb_565_le(void *dst, uint32_t rgb)
+{
+	*((uint16_t *) dst) = host2uint16_t_le(RED(rgb, 5) << 11 |
+	    GREEN(rgb, 6) << 5 | BLUE(rgb, 5));
 }
 
@@ -455,10 +465,18 @@
 		pixelbytes = 1;
 		break;
-	case VISUAL_BGR_5_5_5:
-		rgb_conv = bgr_555;
+	case VISUAL_RGB_5_5_5_LE:
+		rgb_conv = rgb_555_le;
 		pixelbytes = 2;
 		break;
-	case VISUAL_BGR_5_6_5:
-		rgb_conv = bgr_565;
+	case VISUAL_RGB_5_5_5_BE:
+		rgb_conv = rgb_555_be;
+		pixelbytes = 2;
+		break;
+	case VISUAL_RGB_5_6_5_LE:
+		rgb_conv = rgb_565_le;
+		pixelbytes = 2;
+		break;
+	case VISUAL_RGB_5_6_5_BE:
+		rgb_conv = rgb_565_be;
 		pixelbytes = 2;
 		break;
Index: uspace/srv/fb/fb.c
===================================================================
--- uspace/srv/fb/fb.c	(revision dd2cfa70168c246f78a3a28187b10d9f5ced94e0)
+++ uspace/srv/fb/fb.c	(revision 19490cea4251de33ed19741087be0c03ff4d2a4f)
@@ -290,26 +290,36 @@
 }
 
-static void bgr_555(void *dst, uint32_t rgb)
-{
-	uint8_t hi = (BLUE(rgb, 5) | (GREEN(rgb, 5) << 5)) & 0xff;
-	uint8_t lo = (GREEN(rgb, 5) >> 3) | (RED(rgb, 5) << 2);
-	*((uint16_t *) dst) = host2uint16_t_be((hi << 8) | lo);
+static void rgb_555_be(void *dst, uint32_t rgb)
+{
+	*((uint16_t *) dst) = host2uint16_t_be(RED(rgb, 5) << 10 |
+	    GREEN(rgb, 5) << 5 | BLUE(rgb, 5));
+}
+
+static void rgb_555_le(void *dst, uint32_t rgb)
+{
+	*((uint16_t *) dst) = host2uint16_t_le(RED(rgb, 5) << 10 |
+	    GREEN(rgb, 5) << 5 | BLUE(rgb, 5));
+}
+
+static void rgb_565_be(void *dst, uint32_t rgb)
+{
+	*((uint16_t *) dst) = host2uint16_t_be(RED(rgb, 5) << 11 |
+	    GREEN(rgb, 6) << 5 | BLUE(rgb, 5));
+}
+
+static void rgb_565_le(void *dst, uint32_t rgb)
+{
+	*((uint16_t *) dst) = host2uint16_t_le(RED(rgb, 5) << 11 |
+	    GREEN(rgb, 6) << 5 | BLUE(rgb, 5));
 }
 
 static void mask_555(void *dst, bool mask)
 {
-	bgr_555(dst, mask ? 0xffffff : 0);
-}
-
-static void bgr_565(void *dst, uint32_t rgb)
-{
-	uint8_t hi = (BLUE(rgb, 5) | (GREEN(rgb, 6) << 5)) & 0xff;
-	uint8_t lo = (GREEN(rgb, 6) >> 3) | (RED(rgb, 5) << 3);
-	*((uint16_t *) dst) = host2uint16_t_be((hi << 8) | lo);
+	rgb_555_be(dst, mask ? 0xffffff : 0);
 }
 
 static void mask_565(void *dst, bool mask)
 {
-	bgr_565(dst, mask ? 0xffffff : 0);
+	rgb_565_be(dst, mask ? 0xffffff : 0);
 }
 
@@ -622,11 +632,21 @@
 		screen.pixelbytes = 1;
 		break;
-	case VISUAL_BGR_5_5_5:
-		screen.rgb_conv = bgr_555;
+	case VISUAL_RGB_5_5_5_LE:
+		screen.rgb_conv = rgb_555_le;
 		screen.mask_conv = mask_555;
 		screen.pixelbytes = 2;
 		break;
-	case VISUAL_BGR_5_6_5:
-		screen.rgb_conv = bgr_565;
+	case VISUAL_RGB_5_5_5_BE:
+		screen.rgb_conv = rgb_555_be;
+		screen.mask_conv = mask_555;
+		screen.pixelbytes = 2;
+		break;
+	case VISUAL_RGB_5_6_5_LE:
+		screen.rgb_conv = rgb_565_le;
+		screen.mask_conv = mask_565;
+		screen.pixelbytes = 2;
+		break;
+	case VISUAL_RGB_5_6_5_BE:
+		screen.rgb_conv = rgb_565_be;
 		screen.mask_conv = mask_565;
 		screen.pixelbytes = 2;
