   int item_index = 0;
   
   Serial.print("show_menu("); Serial.print(menu->title); Serial.println(")");
-
-  lcd.clear();
-  lcd.setCursor(0, 0);
-  lcd.write(menu->title);
+  // update the menu display
+  Serial.print("Calling menu->display: menu->title=");
+  Serial.print(menu->title);
+  Serial.print(", item_index=");
+  Serial.println(item_index);
   menu->display(menu, item_index);
 
   while (true)
   {
+    // handle any pending event
     if (queue_len() > 0)
     {
       // get next event and handle it

          Serial.println("Menu: vfo_Click");
          if (menu->action)
            (*menu->action)(menu, item_index);
          break;
        case vfo_HoldClick:
          Serial.println("Menu: vfo_HoldClick, exit menu");
          flush_queue();


    if (new_len > max_len)
        max_len = new_len;

    Serial.print("i="); Serial.print(i);
    Serial.print(", new_len="); Serial.print(new_len);
    Serial.print(", max_len="); Serial.println(max_len);
  }
  Serial.print("Max item len="); Serial.println(max_len);

  // write menu title on upper row
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.write(menu->title);

  // write indexed item on lower row, right-justified
  lcd.setCursor(0, 1);
  lcd.setCursor(NUM_COLS - max_len, 1);
  lcd.write(menu->items[slot_num]);
  Serial.print("Setting cursor to column "); Serial.println(NUM_COLS - max_len);
  Serial.print("item text="); Serial.println(menu->items[slot_num]);
}

void menu_select(Menu *menu, int slot_num)
{
  Serial.print("menu_select: slot_num="); Serial.println(slot_num);
  const char *action_text = menu->items[slot_num];

  if (strcmp(action_text, "Save") == 0)
