diff --git a/java/com/tigervnc/vncviewer/Dialog.java b/java/com/tigervnc/vncviewer/Dialog.java
index d6fdd1b..563a471 100644
--- a/java/com/tigervnc/vncviewer/Dialog.java
+++ b/java/com/tigervnc/vncviewer/Dialog.java
@@ -41,15 +41,19 @@
     //addWindowListener(this);
   }
 
-  public boolean showDialog() {
+  public boolean showDialog(Component c) {
     ok = false;
     done = false;
     initDialog();
-    Dimension dpySize = getToolkit().getScreenSize();
-    Dimension mySize = getSize();
-    int x = (dpySize.width - mySize.width) / 2;
-    int y = (dpySize.height - mySize.height) / 2;
-    setLocation(x, y);
+    if (c != null) {
+      setLocationRelativeTo(c);
+    } else {
+      Dimension dpySize = getToolkit().getScreenSize();
+      Dimension mySize = getSize();
+      int x = (dpySize.width - mySize.width) / 2;
+      int y = (dpySize.height - mySize.height) / 2;
+      setLocation(x, y);
+    }
     ClassLoader cl = this.getClass().getClassLoader();
     ImageIcon icon = new ImageIcon(cl.getResource("com/tigervnc/vncviewer/tigervnc.ico"));
     setIconImage(icon.getImage());
@@ -69,6 +73,10 @@
     return ok;
   }
 
+  public boolean showDialog() {
+    return showDialog(null);
+  }
+
   public void endDialog() {
     done = true;
     setVisible(false);
diff --git a/java/com/tigervnc/vncviewer/F8Menu.java b/java/com/tigervnc/vncviewer/F8Menu.java
index 375849c..1571761 100644
--- a/java/com/tigervnc/vncviewer/F8Menu.java
+++ b/java/com/tigervnc/vncviewer/F8Menu.java
@@ -96,7 +96,7 @@
       if (cc.fullScreen) cc.toggleFullScreen();
       cc.viewport.setExtendedState(JFrame.MAXIMIZED_BOTH);
     } else if (actionMatch(ev, clipboard)) {
-      cc.clipboardDialog.showDialog();
+      cc.clipboardDialog.showDialog(cc.viewport);
     } else if (actionMatch(ev, f8)) {
       cc.writeKeyEvent(cc.menuKey, true);
       cc.writeKeyEvent(cc.menuKey, false);
@@ -112,7 +112,7 @@
     } else if (actionMatch(ev, newConn)) {
       VncViewer.newViewer(cc.viewer);
     } else if (actionMatch(ev, options)) {
-      cc.options.showDialog();
+      cc.options.showDialog(cc.viewport);
     } else if (actionMatch(ev, info)) {
       cc.showInfo();
     } else if (actionMatch(ev, about)) {
diff --git a/java/com/tigervnc/vncviewer/ServerDialog.java b/java/com/tigervnc/vncviewer/ServerDialog.java
index f5e5614..0f32a96 100644
--- a/java/com/tigervnc/vncviewer/ServerDialog.java
+++ b/java/com/tigervnc/vncviewer/ServerDialog.java
@@ -119,7 +119,7 @@
       ok = false;
       endDialog();
     } else if (s instanceof JButton && (JButton)s == optionsButton) {
-      options.showDialog();
+      options.showDialog(this);
     } else if (s instanceof JButton && (JButton)s == aboutButton) {
       cc.showAbout();
     } else if (s instanceof JComboBox && (JComboBox)s == server) {
