diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index 463523f..33ba24f 100644
--- a/vncviewer/Viewport.cxx
+++ b/vncviewer/Viewport.cxx
@@ -24,7 +24,6 @@
 #include <assert.h>
 #include <stdio.h>
 #include <string.h>
-#include <stdint.h>
 
 #include <rfb/CMsgWriter.h>
 #include <rfb/LogWriter.h>
@@ -1061,69 +1060,41 @@
 
 void Viewport::initContextMenu()
 {
-  size_t i;
-  Fl_Menu_Item items[] = {
-    { strdup(_("E&xit viewer")), 0, NULL, (void*)ID_EXIT, FL_MENU_DIVIDER },
+  contextMenu->clear();
+
+  contextMenu->add(_("E&xit viewer"), 0, NULL, (void*)ID_EXIT, FL_MENU_DIVIDER);
 
 #ifdef HAVE_FLTK_FULLSCREEN
-    { strdup(_("&Full screen")), 0, NULL, (void*)ID_FULLSCREEN, FL_MENU_TOGGLE },
+  contextMenu->add(_("&Full screen"), 0, NULL, (void*)ID_FULLSCREEN, 
+		   FL_MENU_TOGGLE | (window()->fullscreen_active()?FL_MENU_VALUE:0));
 #endif
-    { strdup(_("Resize &window to session")), 0, NULL, (void*)ID_RESIZE, FL_MENU_DIVIDER },
-
-    { strdup(_("&Ctrl")), 0, NULL, (void*)ID_CTRL, FL_MENU_TOGGLE },
-    { strdup(_("&Alt")), 0, NULL, (void*)ID_ALT, FL_MENU_TOGGLE },
-
-    { strdup("Menu key"), 0, NULL, (void*)ID_MENUKEY, 0 },
-    { strdup("Secret shortcut menu key"), menuKeyCode, NULL, (void*)ID_MENUKEY, FL_MENU_INVISIBLE },
-    { strdup(_("Send Ctrl-Alt-&Del")), 0, NULL, (void*)ID_CTRLALTDEL, FL_MENU_DIVIDER },
-
-    { strdup(_("&Refresh screen")), 0, NULL, (void*)ID_REFRESH, FL_MENU_DIVIDER },
-
-    { strdup(_("&Options...")), 0, NULL, (void*)ID_OPTIONS, 0 },
-    { strdup(_("Connection &info...")), 0, NULL, (void*)ID_INFO, 0 },
-    { strdup(_("About &TigerVNC viewer...")), 0, NULL, (void*)ID_ABOUT, FL_MENU_DIVIDER },
-
-    { strdup(_("Dismiss &menu")), 0, NULL, (void*)ID_DISMISS, 0 },
-
-    {0}
-  };
-
-  // Update any state
-  for (i = 0;i < sizeof(items)/sizeof(items[0]);i++) {
-    switch ((intptr_t)items[i].user_data_) {
+  contextMenu->add(_("Resize &window to session"), 0, NULL, (void*)ID_RESIZE, 
 #ifdef HAVE_FLTK_FULLSCREEN
-    case ID_FULLSCREEN:
-      if (window()->fullscreen_active())
-        items[i].flags |= FL_MENU_VALUE;
-      break;
-    case ID_RESIZE:
-      if (window()->fullscreen_active())
-        items[i].flags |= FL_MENU_INACTIVE;
-      break;
+       (window()->fullscreen_active()?FL_MENU_INACTIVE:0) |
 #endif
-    case ID_CTRL:
-      if (menuCtrlKey)
-        items[i].flags |= FL_MENU_VALUE;
-      break;
-    case ID_ALT:
-      if (menuAltKey)
-        items[i].flags |= FL_MENU_VALUE;
-      break;
-    case ID_MENUKEY:
-      // The menu key needs to have its fields updated, or the entries hidden
-      if (!menuKeySym)
-        items[i].flags |= FL_MENU_INACTIVE | FL_MENU_INVISIBLE;
-      else if (!(items[i].flags & FL_MENU_INVISIBLE)) {
-        char sendMenuKey[64];
-        snprintf(sendMenuKey, 64, _("Send %s"), (const char *)menuKey);
-        free((void*)items[i].text);
-        items[i].text = strdup(sendMenuKey);
-      }
-      break;
-    }
+		   FL_MENU_DIVIDER);
+
+  contextMenu->add(_("&Ctrl"), 0, NULL, (void*)ID_CTRL, 
+		   FL_MENU_TOGGLE | (menuCtrlKey?FL_MENU_VALUE:0));
+  contextMenu->add(_("&Alt"), 0, NULL, (void*)ID_ALT,
+		   FL_MENU_TOGGLE | (menuAltKey?FL_MENU_VALUE:0));
+
+  if (menuKeySym) {
+    char sendMenuKey[64];
+    snprintf(sendMenuKey, 64, _("Send %s"), (const char *)menuKey);
+    contextMenu->add(sendMenuKey, 0, NULL, (void*)ID_MENUKEY, 0);
+    contextMenu->add("Secret shortcut menu key", menuKeyCode, NULL, (void*)ID_MENUKEY, FL_MENU_INVISIBLE);
   }
 
-  contextMenu->copy(items);
+  contextMenu->add(_("Send Ctrl-Alt-&Del"), 0, NULL, (void*)ID_CTRLALTDEL, FL_MENU_DIVIDER);
+
+  contextMenu->add(_("&Refresh screen"), 0, NULL, (void*)ID_REFRESH, FL_MENU_DIVIDER);
+
+  contextMenu->add(_("&Options..."), 0, NULL, (void*)ID_OPTIONS, 0);
+  contextMenu->add(_("Connection &info..."), 0, NULL, (void*)ID_INFO, 0);
+  contextMenu->add(_("About &TigerVNC viewer..."), 0, NULL, (void*)ID_ABOUT, FL_MENU_DIVIDER);
+
+  contextMenu->add(_("Dismiss &menu"), 0, NULL, (void*)ID_DISMISS, 0);
 }
 
 
