 		// Do CRE updates ;
 
 		if (isTextToSay) updateTextToSay();
-		if (isTextToScroll) updateTextToScroll();
+		if (isTextToScroll) updateTextToScroll(false);
 		if (isArmsSwing) updateArmsSwing();
 		if (isHeadSwing) updateHeadSwing();
+		if (isMelodyToPlay) updateMelodyToPlay();
 	}
 	
 #ifdef FIRMATA_SERIAL_FEATURE

		Firmata.write(STRING_DATA);
		Serial.println((byte)range);  // Can we use Firmata.write(ULTRASOUND); Firmata.write(range);?
		Firmata.write(END_SYSEX);
		}
		break;
	case CRE_SAY:
	{
		uint8_t i = 0;
		for (i; (i < argc) && (i < TEXT_TO_SAY_BUFFER_LEN); i++) { // Stay silent if text is longer than buffer
			textToSayBuffer[i] = argv[i];
		}
		textToSayLen = i;
		isTextToSay = true;
	}
		break;
	case CRE_LED_DISPLAY:
		mode = argv[0];
		switch (mode) {
		case LED_SET_IMAGE:
			if (argv[1] < LED_DISPLAY_IMAGES_LEN) { // Stay silent if argv value greater than display images
				uint64_t character;
				character = pgm_read_dword(&(LED_DISPLAY_IMAGES[argv[1]][0])); // High
				character = (character << 32) | pgm_read_dword(&(LED_DISPLAY_IMAGES[argv[1]][1])); // Low
				setLEDisplay(character);
			}
			break;
		case LED_SET_SCROLL_TEXT:
		{
			for (uint8_t i = 1; (i < argc) && (i < TEXT_TO_SCROLL_BUFFER_LEN); i++) { // Stay silent if text is longer than buffer
				textToScrollBuffer[i - 1] = argv[i];
			}
			textToScrollLen = argc - 1;
			isTextToScroll = true;
		}
			break;
		case LED_SET_NUMBER:
			// Construct a two digit number for display
			if (argv[1] < LED_DIGITS_LEN && argv[2] < LED_DIGITS_LEN) {
				uint64_t digit_tens, digit_units;
				digit_tens = pgm_read_dword(&(LED_DISPLAY_DIGITS[argv[1]][0])); // High
				digit_tens = (digit_tens << 32) | pgm_read_dword(&(LED_DISPLAY_DIGITS[argv[1]][1])); // Low
				digit_units = pgm_read_dword(&(LED_DISPLAY_DIGITS[argv[2]][0])); // High
				digit_units = (digit_units << 32) | pgm_read_dword(&(LED_DISPLAY_DIGITS[argv[2]][1])); // Low
				setLEDisplay((digit_tens >> 4) | digit_units);
			}
			break;
		case LED_SET_ROW_DATA:
		{
			if ((argc - 1) == MAX72XX_WIDTH) {
				uint64_t rowData = 0; 
				for (uint8_t i = 1; i < argc; i++) {
					rowData = (rowData << 8) | (argv[i] & 0xFF);
				}
				setLEDisplay(rowData);
			}
		}
			break;
		case LED_SET_SET_PIXEL:
			if (argv[1] < MAX72XX_WIDTH && argv[2] < MAX72XX_HEIGHT) {
				ledDisplay.setLed(0, argv[1], argv[2], argv[3]);
			}
			break;
		case LED_SET_CLEAR:
			isTextToScroll = false;
			setLEDisplay(0x0);
			break;
		}
		break;
	case CRE_SWING_ARMS:
		if (argc == 2) {
			if (argv[1] == true) {

		break;
	case SERVO_CONFIG:
		if (argc > 4) {

			// these vars are here for clarity, they'll optimized away by the compiler
			byte pin = argv[0];
			int minPulse = argv[1] + (argv[2] << 7);
