     return;
   }
 
-  byte previousMode = settings.mode;
-  byte previousHue = settings.hue;
+  SavedSettings previous = settings;
   if (!Serial.readBytes((byte*)&settings, min(sizeof(settings), len))) {
-    Serial.println("failed to read len bytes");
+    Serial.println(F("failed to read len bytes"));
+    settings = previous;
     return;
   }
   if (settings.mode == 'P') {

    return;
  }
  if (!Serial.find("!")) {
    Serial.println("no !");
    return;
  }
  //Serial.println("found !");
  byte len;
  if (!Serial.readBytes(&len, 1)) {
    Serial.println("no len");
  }
  //Serial.print("len=");
  //Serial.println(len);
  if (!len) {
    // Special case: no length means primary is asking a question.
    byte question;
    if (!Serial.readBytes(&question, 1)) {
      Serial.println("no question");
    } else {
      if (question == 'D') {
        // Send dimensions.

  FastLED.setBrightness(255);
  fill_solid(leds, NUM_LEDS, 0xFF0000);
  FastLED.delay(1000);
  Serial.println(F("did the thing"));
  fill_solid(leds, NUM_LEDS, 0x00FF00);
  FastLED.delay(1000);
  Serial.println(F("yep"));
  fill_solid(leds, NUM_LEDS, 0x0000FF);
  FastLED.delay(1000);
  Serial.println(F("done"));
  fill_solid(leds, NUM_LEDS, 0x000000);
  FastLED.delay(1000);
  Serial.println(F("clear"));
  */
}

