diff --git a/java/com/tigervnc/vncviewer/CConn.java b/java/com/tigervnc/vncviewer/CConn.java
index 9278148..e3ab176 100644
--- a/java/com/tigervnc/vncviewer/CConn.java
+++ b/java/com/tigervnc/vncviewer/CConn.java
@@ -165,7 +165,7 @@
     autoSelect = viewer.autoSelect.getValue();
     formatChange = false; encodingChange = false;
     fullScreen = viewer.fullScreen.getValue();
-    menuKey = Keysyms.F8;
+    menuKeyCode = menukey.getMenuKeyCode();
     options = new OptionsDialog(this);
     options.initDialog();
     clipboardDialog = new ClipboardDialog(this);
@@ -876,7 +876,7 @@
     options.viewOnly.setSelected(viewer.viewOnly.getValue());
     options.acceptClipboard.setSelected(viewer.acceptClipboard.getValue());
     options.sendClipboard.setSelected(viewer.sendClipboard.getValue());
-    options.menuKey.setSelectedIndex(menuKey-0xFFBE);
+    options.menuKey.setSelectedItem(KeyEvent.getKeyText(menukey.getMenuKeyCode()));
 
     if (state() == RFBSTATE_NORMAL) {
       options.shared.setEnabled(false);
@@ -1073,8 +1073,8 @@
     }
 
     clipboardDialog.setSendingEnabled(viewer.sendClipboard.getValue());
-    menuKey = (options.menuKey.getSelectedIndex()+0xFFBE);
-    F8Menu.f8.setText("Send F"+(menuKey-Keysyms.F1+1));
+    viewer.menuKey.setParam(menukey.getMenuKeySymbols()[options.menuKey.getSelectedIndex()].name);
+    F8Menu.f8.setText("Send "+KeyEvent.getKeyText(menukey.getMenuKeyCode()));
 
     setShared(options.shared.isSelected());
     viewer.useLocalCursor.setParam(options.useLocalCursor.isSelected());
@@ -1455,7 +1455,7 @@
 
   private boolean supportsSyncFence;
 
-  public int menuKey;
+  public int menuKeyCode;
   ViewportFrame viewport;
   private boolean fullColour;
   private boolean autoSelect;
diff --git a/java/com/tigervnc/vncviewer/DesktopWindow.java b/java/com/tigervnc/vncviewer/DesktopWindow.java
index 178f93d..3ef25f3 100644
--- a/java/com/tigervnc/vncviewer/DesktopWindow.java
+++ b/java/com/tigervnc/vncviewer/DesktopWindow.java
@@ -409,8 +409,7 @@
   public void keyReleased(KeyEvent e) {}
   /** Handle the key-pressed event. */
   public void keyPressed(KeyEvent e) {
-    if (e.getKeyCode() == 
-        (KeyEvent.VK_F1+cc.menuKey-Keysyms.F1)) {
+    if (e.getKeyCode() == menukey.getMenuKeyCode()) {
       int sx = (scaleWidthRatio == 1.00) 
         ? lastX : (int)Math.floor(lastX*scaleWidthRatio);
       int sy = (scaleHeightRatio == 1.00) 
diff --git a/java/com/tigervnc/vncviewer/F8Menu.java b/java/com/tigervnc/vncviewer/F8Menu.java
index 6a06786..ca09ac2 100644
--- a/java/com/tigervnc/vncviewer/F8Menu.java
+++ b/java/com/tigervnc/vncviewer/F8Menu.java
@@ -51,7 +51,7 @@
     addSeparator();
     clipboard  = addMenuItem("Clipboard...");
     addSeparator();
-    f8 = addMenuItem("Send F"+(cc.menuKey-Keysyms.F1+1));
+    f8 = addMenuItem("Send "+KeyEvent.getKeyText(menukey.getMenuKeyCode()), menukey.getMenuKeyCode());
     ctrlAltDel = addMenuItem("Send Ctrl-Alt-Del");
     addSeparator();
     refresh    = addMenuItem("Refresh Screen", KeyEvent.VK_H);
@@ -100,8 +100,8 @@
     } else if (actionMatch(ev, clipboard)) {
       cc.clipboardDialog.showDialog(cc.viewport);
     } else if (actionMatch(ev, f8)) {
-      cc.writeKeyEvent(cc.menuKey, true);
-      cc.writeKeyEvent(cc.menuKey, false);
+      cc.writeKeyEvent(cc.menuKeyCode, true);
+      cc.writeKeyEvent(cc.menuKeyCode, false);
     } else if (actionMatch(ev, ctrlAltDel)) {
       cc.writeKeyEvent(Keysyms.Control_L, true);
       cc.writeKeyEvent(Keysyms.Alt_L, true);
diff --git a/java/com/tigervnc/vncviewer/OptionsDialog.java b/java/com/tigervnc/vncviewer/OptionsDialog.java
index 8cf0b1b..1be5ece 100644
--- a/java/com/tigervnc/vncviewer/OptionsDialog.java
+++ b/java/com/tigervnc/vncviewer/OptionsDialog.java
@@ -132,8 +132,9 @@
     sendClipboard = new JCheckBox("Send clipboard to server");
     sendClipboard.addItemListener(this);
     JLabel menuKeyLabel = new JLabel("Menu Key");
-    String[] menuKeys = 
-      { "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12" };
+    String[] menuKeys = new String[menukey.getMenuKeySymbolCount()]; 
+    for (int i = 0; i < menukey.getMenuKeySymbolCount(); i++)
+      menuKeys[i] = KeyEvent.getKeyText(menukey.getMenuKeySymbols()[i].keycode);
     menuKey  = new JComboBox(menuKeys);
     menuKey.addItemListener(this);
     addGBComponent(viewOnly,InputsPanel,        0, 0, 2, 1, 2, 2, 1, 0, GridBagConstraints.HORIZONTAL, GridBagConstraints.LINE_START, new Insets(4,5,0,5));
diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java
index e433bf9..a15ee58 100644
--- a/java/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/com/tigervnc/vncviewer/VncViewer.java
@@ -445,11 +445,10 @@
   = new BoolParameter("SendClipboard",
                       "Send clipboard changes to the server",
                       true);
-  // FIXME
-  //StringParameter menuKey
-  //= new StringParameter("MenuKey",
-  //                      "The key which brings up the popup menu",
-  //                      "F8");
+  StringParameter menuKey
+  = new StringParameter("MenuKey",
+                        "The key which brings up the popup menu",
+                        "F8");
   StringParameter desktopSize
   = new StringParameter("DesktopSize",
                         "Reconfigure desktop size on the server on "+
diff --git a/java/com/tigervnc/vncviewer/menukey.java b/java/com/tigervnc/vncviewer/menukey.java
new file mode 100644
index 0000000..10f1d10
--- /dev/null
+++ b/java/com/tigervnc/vncviewer/menukey.java
@@ -0,0 +1,86 @@
+/* Copyright 2011 Martin Koegler <mkoegler@auto.tuwien.ac.at>
+ * Copyright 2011 Pierre Ossman <ossman@cendio.se> for Cendio AB
+ * Copyright 2012 Brian P. Hinz
+ * 
+ * This is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this software; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+ * USA.
+ */
+
+package com.tigervnc.vncviewer;
+
+import java.awt.event.KeyEvent;
+
+import com.tigervnc.rfb.*;
+
+public class menukey 
+{
+  static class MenuKeySymbol {
+    public MenuKeySymbol(String name_, int keycode_) {
+      name = name_;
+      keycode = keycode_;
+    }
+    String name;
+    int keycode;
+  }
+
+  private static final MenuKeySymbol[] menuSymbols = {
+    new MenuKeySymbol("F1", KeyEvent.VK_F1),
+    new MenuKeySymbol("F2", KeyEvent.VK_F2),
+    new MenuKeySymbol("F3", KeyEvent.VK_F3),
+    new MenuKeySymbol("F4", KeyEvent.VK_F4),
+    new MenuKeySymbol("F5", KeyEvent.VK_F5),
+    new MenuKeySymbol("F6", KeyEvent.VK_F6),
+    new MenuKeySymbol("F7", KeyEvent.VK_F7),
+    new MenuKeySymbol("F8", KeyEvent.VK_F8),
+    new MenuKeySymbol("F9", KeyEvent.VK_F9),
+    new MenuKeySymbol("F10", KeyEvent.VK_F10),
+    new MenuKeySymbol("F11", KeyEvent.VK_F11),
+    new MenuKeySymbol("F12", KeyEvent.VK_F12),
+    new MenuKeySymbol("Pause", KeyEvent.VK_PAUSE),
+    new MenuKeySymbol("Print", KeyEvent.VK_PRINTSCREEN),
+    new MenuKeySymbol("Scroll_Lock", KeyEvent.VK_SCROLL_LOCK),
+    new MenuKeySymbol("Escape", KeyEvent.VK_ESCAPE),
+    new MenuKeySymbol("Insert", KeyEvent.VK_INSERT),
+    new MenuKeySymbol("Delete", KeyEvent.VK_DELETE),
+    new MenuKeySymbol("Home", KeyEvent.VK_HOME),
+    new MenuKeySymbol("Page_Up", KeyEvent.VK_PAGE_UP),
+    new MenuKeySymbol("Page_Down", KeyEvent.VK_PAGE_DOWN)
+  };
+  
+  static int getMenuKeySymbolCount()
+  {
+    return menuSymbols.length;
+  }
+  
+  public static MenuKeySymbol[] getMenuKeySymbols()
+  {
+    return menuSymbols;
+  }
+  
+  static int getMenuKeyCode()
+  {
+      String menuKeyStr;
+      int menuKeyCode = KeyEvent.VK_F8;
+  
+      menuKeyStr = 
+        Configuration.global().getParam("menuKey").getValueStr();
+      for(int i = 0; i < getMenuKeySymbolCount(); i++)
+        if (menuSymbols[i].name.equals(menuKeyStr))
+          menuKeyCode = menuSymbols[i].keycode;
+  
+      return menuKeyCode;
+  }
+
+}
