 		delay( 1000 );
 	}
 	
+        if( skipToMode > 0 )
+        {
+          eClipMode = skipToMode;
+          switch( eClipMode )
+          {
+            case EEMODE_HEIGHTONLY:
+            case EEMODE_SERIAL:
+              eRGBMode  = RGBMODE_SCREEN;
+              break;
+            default:
+              eRGBMode  = RGBMODE_NONE;
+          }
+        }
+
 	// Now SWBOT has been released, flicker the colour 3 times.
 	for( int i=0; i<3; i++ )
 	{

 * This will wait for a pulse, and then display colour and height changes
 * as appropriate.
 */
void loopSerialMode() {
	
	// Static variables for the serial mode.
	static bool flippedRead = false;						// Are we reading in "inverted" LDR mode (ie. LDR1 <> LDR2).
	static unsigned int bitsSeen = 0;						// The number of valid bits read.
	static unsigned char cmdBuffer[3] = { 0, 0, 0 };		// The command buffer.
	static int oldState = 0;								// The last 'state' symbol read by the LDR: SYMB_ZERO, SYMB_LOW, SYMB_HIGH
	#ifdef SSMODE_8BIT
	static uint16_t bSerialBuffer = 0x00;					// The buffer to write serial commands into. 16 bit (we need space for frame headers, parity, etc).

	// Debug Mode
	//eClipMode = EEMODE_SYNCPULSE;
	//eRGBMode  = RGBMODE_SCREEN;
	detectAndSetModeChange( -1 );   // -1 == set nothing, blink code; 0 = set nothing, wait for button; >0 == set mode to supplied mode

	// Wait for a random time so that not all clips zero their motor at the same time.
	randomSeed(analogRead(PIN_RND));
