diff -ur fbv-1.0b/fb_display.c fbv-1.0b-avr32/fb_display.c
--- fbv-1.0b/fb_display.c	2004-09-07 14:09:43.000000000 +0200
+++ fbv-1.0b-avr32/fb_display.c	2006-05-04 13:30:25.000000000 +0200
@@ -276,9 +276,6 @@
 	    for(i = 0; i < yc; i++, fbptr += scr_xs * cpp, imptr += pic_xs * cpp)
 			memcpy(fbptr, imptr, xc * cpp);
 		
-	if(cpp == 1)
-	    set8map(fh, &map_back);
-	
 	munmap(fb, scr_xs * scr_ys * cpp);
 }
 
@@ -293,17 +290,17 @@
 inline static unsigned short make15color(unsigned char r, unsigned char g, unsigned char b)
 {
     return (
-	(((r >> 3) & 31) << 10) |
+	(((r >> 3) & 31)) |
 	(((g >> 3) & 31) << 5)  |
-	 ((b >> 3) & 31)        );
+	 ((b >> 3) & 31) << 10);
 }
 
 inline static unsigned short make16color(unsigned char r, unsigned char g, unsigned char b)
 {
     return (
-	(((r >> 3) & 31) << 11) |
-	(((g >> 2) & 63) << 5)  |
-	 ((b >> 3) & 31)        );
+	(((r >> 3) & 31))      |
+	(((g >> 3) & 31) << 5) |
+	 ((b >> 3) & 31) << 10);
 }
 
 void* convertRGB2FB(int fh, unsigned char *rgbbuff, unsigned long count, int bpp, int *cpp)
@@ -342,9 +339,9 @@
 	    *cpp = 4;
 	    i_fbbuff = (unsigned int *) malloc(count * sizeof(unsigned int));
 	    for(i = 0; i < count ; i++)
-		i_fbbuff[i] = ((rgbbuff[i*3] << 16) & 0xFF0000) |
+		i_fbbuff[i] = ((rgbbuff[i*3+2] << 16) & 0xFF0000) |
 			    ((rgbbuff[i*3+1] << 8) & 0xFF00) |
-			    (rgbbuff[i*3+2] & 0xFF);
+			    (rgbbuff[i*3] & 0xFF);
 	    fbbuff = (void *) i_fbbuff;
 	    break;
 	default:
