 void menu_draw(struct Menu *menu)
 {
   // clear screen and write menu title on upper row
-#if 0
-  tft.clear();
-  tft.setCursor(0, 0);
-  tft.print(menu->title);
-#endif
+
+  tft.fillScreen(SCREEN_BG);
+  tft.setTextWrap(false);
+  tft.setFont(FONT_MENU);
+
+  // start drawing things that don't change
+  tft.fillRect(0, 0, tft.width(), DEPTH_FREQ_DISPLAY, FREQ_BG);
+  tft.setCursor(MHZ_OFFSET_X, FREQ_OFFSET_Y);
+  tft.setTextColor(MENU_FG);
+
+  // draw menuitems
+  for (int i = 0; i < menu->num_items; ++ i)
+  {
+    int16_t x1;
+    int16_t y1;
+    uint16_t w;
+    uint16_t h;
+    int menuitem_y = DEPTH_FREQ_DISPLAY + i*MENUITEM_HEIGHT + MENUITEM_HEIGHT;
+    
+    tft.getTextBounds((char *) menu->items[i]->title, 0, 0, &x1, &y1, &w, &h);
+
+    // write indexed item on lower row, right-justified
+    tft.fillRect(0, menuitem_y - MENUITEM_HEIGHT, ts_width, MENUITEM_HEIGHT, MENU_BG);
+    tft.setCursor(ts_width - w, menuitem_y);
+    tft.print(menu->items[i]->title);
+  }
+
+  
 }
 
 //----------------------------------------

#define MENU_HEIGHT         35
#define MENU_X              (ts_width - MENU_WIDTH)
#define MENU_Y              (ts_height - MENU_HEIGHT)
#define MENU_BG             ILI9341_GREEN
#define MENU_BG2            ILI9341_BLACK
#define MENU_FG             ILI9341_BLACK

// constants for the menu system
#define MENUITEM_HEIGHT     35


void menu_show(struct Menu *menu)
{
  Serial.printf(F("menu_show: called\n"));
  
  // draw the menu page
  menu_draw(menu);

  // get rid of any stray events to this point
  event_flush();
