 
 // This function returns the colours of the different pixels given pixel index, colour mode, input colour and colour iteration
 inline uint32_t getPixColour(uint16_t pixIdx, uint8_t mode, uint32_t colour, uint8_t colourIteration)  {
+	static uint8_t prevIteration = 0;
+	static uint32_t randomSeed = 0;
+	
+	uint32_t randomVal;
+	
+	// Get a new random value whenever we enter a new iteration
+	if(prevIteration != colourIteration) {
+		randomSeed = random();
+		prevIteration = colourIteration;
+	}
+
+	// Perform a hashing operation based on the random seed and the pixIdx
+	randomVal = randomSeed + pixIdx;
+	randomVal += randomVal << 10;
+	randomVal ^= randomVal >> 6;
+	randomVal += randomVal << 3;
+	randomVal ^= randomVal >> 11;
+	randomVal += randomVal << 15;
+	
+	
 	switch(mode) {
 	case CM_ALL_WHITE:
 		return strip.Color(235,   255,   255);

		break;
		
	case CM_PARTY:
		return wheel(random(0, 255));
		break;
		
	default:

	// Loop through every LED
	for(uint16_t pixIdx = 0; pixIdx < MATRIX_HEIGHT * MATRIX_WIDTH; pixIdx++) {
			
		// 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) {
			pixColour = getPixColour(pixIdx, mode, colour, colourIteration);
		}
			
		// Determine the pixel transitions
