 	// Loop through every LED
 	for(uint16_t pixIdx = 0; pixIdx < MATRIX_HEIGHT * MATRIX_WIDTH; pixIdx++) {
 			
-		uint32_t pixColour = 0;
-			
 		// Get the current pixel transition
 		PixelTransition pixTran = pixels.getPixel(pixIdx);
-			
+		
 		// Get the colour for the given pixel
+		uint32_t pixColour = 0;
+		
 		if(pixTran != PIX_OFF) {
-			if(colourUpdate == 0) {
-				// Get new colour if we need to
-				pixColour = getPixColour(pixIdx, mode, colour, colourIteration);
-				
-				ledColours[pixArrIdx] = (uint8_t)(pixColour >> 16);
-				ledColours[pixArrIdx + 1] = (uint8_t)(pixColour >>  8);
-				ledColours[pixArrIdx + 2] = (uint8_t)pixColour;
-			} else {
-				// Get the old colour
-				pixColour = strip.Color(ledColours[pixArrIdx], ledColours[pixArrIdx + 1], ledColours[pixArrIdx + 2]);
-			}
+			pixColour = getPixColour(pixIdx, mode, colour, colourIteration);
 		}
 			
 		// Determine the pixel transitions

	#define COLOUR_UPDATE	5		// Defines the rate at which the colour mode gets updated, in multiples of LETTER_FADE
	
	static uint32_t lastRefresh = 0;
	
	static uint8_t colourIteration = 0;
	static int16_t fadeBrightness = 255;
	static uint8_t colourUpdate = 0;
	static uint8_t ledColours[MATRIX_WIDTH * MATRIX_HEIGHT * 3];
	
	uint32_t currentMillis = millis();
	

		break;
		
	case CM_PARTY:
		return wheel(randomVal & 0xFF);
		break;
		
	default:
