 // Set the current contrast and save to EEPROM if 'actioned'.
 //   menu      address of 'calling' menu
 //   item_num  index of MenuItem we were actioned from
+// We show immediately what the changes mean, but only update the
+// actual contrast if we do a vfo_Click action.
+//
+// We limit the allowed range for LcdContrast to [0, 128].
 //----------------------------------------
 
 void contrast_action(struct Menu *menu, int item_num)
 {
-  // convert contrast value to a display value in [1, 16]
-  int index = 16 - LcdContrast / 8;
+  // save old contrast just in case we don't set it here
+  int old_contrast = LcdContrast;
+  
+  // convert contrast value to a display value in [0, 16]
+  int index = LcdContrast / 8;
+
+  if (index > 16)   // ensure in range
+    index = 16;
+  if (index < 1)
+    index = 1;
  
   // get rid of any stray events to this point
   event_flush();

      switch (event)
      {
        case vfo_RLeft:
          if (--index < 1)
            index = 1;
          break;
        case vfo_RRight:
          if (++index > 16)
            index = 16;
          break;
        case vfo_Click:
          save_to_eeprom();
          display_flash();
          break;
        case vfo_HoldClick:
          event_flush();
          return;
        default:


void banner(void)
{
  Serial.printf(F("\n"));
  Serial.printf(F("*************************************************\n"));
  Serial.printf(F("*           %s %s%s (%s)          *\n"),
                ProgramName, Version, MinorVersion, Callsign);
  Serial.printf(F("*************************************************\n"));
  Serial.printf(F("\n"));

  show_credits();
  delay(900);    // wait a bit
