--- src/netsurf-3.0/gtk/bitmap.c.orig
+++ src/netsurf-3.0/gtk/bitmap.c
@@ -288,27 +288,27 @@
 
 	if (fmt == CAIRO_FORMAT_RGB24) {
 		for (pixel_loop=0; pixel_loop < pixel_count; pixel_loop++) {
-			pixel = pixels[pixel_loop];
-			pixels[pixel_loop] = (pixel & 0xff00ff00) |
-				((pixel & 0xff) << 16) | 
-				((pixel & 0xff0000) >> 16);		
+			pixel =	((uint8_t *)(pixels + pixel_loop))[0] << 16 |
+				((uint8_t *)(pixels + pixel_loop))[1] << 8 |
+				((uint8_t *)(pixels + pixel_loop))[2] |
+				((uint8_t *)(pixels + pixel_loop))[3] << 24;
+			pixels[pixel_loop] = pixel;
 		}
 	} else {
 		uint8_t t, r, g, b;
 		for (pixel_loop=0; pixel_loop < pixel_count; pixel_loop++) {
-			pixel = pixels[pixel_loop];
-			t = (pixel & 0xff000000) >> 24;
+			t = ((uint8_t *)(pixels + pixel_loop))[3];
 			if (t == 0) {
 				pixels[pixel_loop] = 0;
 			} else {
-				r = (pixel & 0xff0000) >> 16;
-				g = (pixel & 0xff00) >> 8;
-				b = pixel & 0xff;
+				r = ((uint8_t *)(pixels + pixel_loop))[0];
+				g = ((uint8_t *)(pixels + pixel_loop))[1];
+				b = ((uint8_t *)(pixels + pixel_loop))[2];
 				
 				pixels[pixel_loop] = (t << 24) | 
-					((r * t) >> 8) | 
+					((r * t) >> 8) << 16 | 
 					((g * t) >> 8) << 8 |
-					((b * t) >> 8) << 16;
+					((b * t) >> 8);
 
 			}
 		}
--- src/netsurf-3.0/image/bmp.c.orig
+++ src/netsurf-3.0/image/bmp.c
@@ -171,7 +171,6 @@
 
 	/* exit as a success */
 	bmp->bitmap = bmp->bmp->bitmap;
-	bitmap_modified(bmp->bitmap);
 
 	content_set_ready(c);
 	content_set_done(c);
@@ -190,6 +189,8 @@
 	if (bmp->bmp->decoded == false)
 		if (bmp_decode(bmp->bmp) != BMP_OK)
 			return false;
+		else
+			bitmap_modified(bmp->bitmap);
 
 	bmp->bitmap = bmp->bmp->bitmap;
 
--- src/netsurf-3.0/image/rsvg.c.orig
+++ src/netsurf-3.0/image/rsvg.c
@@ -135,19 +135,17 @@
 static inline void rsvg_argb_to_abgr(uint8_t *pixels, 
 		int width, int height, size_t rowstride)
 {
-	uint8_t *p = pixels;
+	uint32_t *p = (uint32_t *)pixels;
 
 	for (int y = 0; y < height; y++) {
 		for (int x = 0; x < width; x++) {
-			/* Swap R and B */
-			const uint8_t r = p[x+3];
-
-			p[x+3] = p[x];
-
-			p[x] = r;
+			uint32_t c = *p;
+			((uint8_t *)p)[0] = (c & 0xff0000) >> 16;
+			((uint8_t *)p)[1] = (c & 0xff00) >> 8;
+			((uint8_t *)p)[2] = (c & 0xff);
+			((uint8_t *)p)[3] = (c & 0xff000000) >> 24;
+			p++;
 		}
-
-		p += rowstride;
 	}
 }
 
