 		if (*buf != endptr && pos >= 0 && pos <= 180) {
 			for (; **buf == ' ' || **buf == '\t'; (*buf)++);
 			servoMoves[servoMoveCount].moveServoFuncPtr = moveServoFuncPtr;
+			servoMoves[servoMoveCount].servoShortName = servoShortName;
 			servoMoves[servoMoveCount].pos = pos;
 			servoMoves[servoMoveCount].servoSpeed = servoSpeedLocal;
 			servoMoveCount++;

	extern int __heap_start, *__brkval; 
	int v; 
	return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

// setup functions

			} while (parseCommandGServo(&endptr, speedControl, wait) && !servoMoveError);
			for (i = 0; !servoMoveError && i < servoMoveCount; ++i) {
				// perform this move, if the last move in the list, use the wait variable value and update display
				servoMoves[i].moveServoFuncPtr(servoMoves[i].pos, servoMoves[i].servoSpeed, false,
					(i == servoMoveCount - 1 ? true : false));
			}
			// do software wait while updating widgets
			if (!servoMoveError && wait) {
				bool done = false;
				while (!done) {
					servoWidgetUpdate();
					done = true;
					for (i = 0; i < servoMoveCount; ++i) {
						switch (servoMoves[i].servoShortName) {
							case 'L':
								if (servoMoves[i].pos != servoL.read())
									done = false;
								break;
							case 'R':
								if (servoMoves[i].pos != servoR.read())
									done = false;
								break;
							case 'O':
								if (servoMoves[i].pos != servoRot.read())
									done = false;
								break;
							case 'T':
								if (servoMoves[i].pos != servoHRot.read())
									done = false;
								break;
							case 'H':
								if (servoMoves[i].pos != servoH.read())
									done = false;
								break;
							default:
								break;
						}
					}
				}
			}
			if (i != 0) {
				sendMsg(F("OK\n"));
