diff --git a/java/com/tigervnc/vncviewer/Dialog.java b/java/com/tigervnc/vncviewer/Dialog.java
index 4419159..6204ba1 100644
--- a/java/com/tigervnc/vncviewer/Dialog.java
+++ b/java/com/tigervnc/vncviewer/Dialog.java
@@ -34,6 +34,7 @@
 import java.io.File;
 import javax.swing.*;
 import javax.swing.border.*;
+import javax.swing.filechooser.*;
 import javax.swing.text.*;
 
 class Dialog extends JDialog implements ActionListener,
@@ -137,17 +138,29 @@
     return width + gap;
   }
 
-  public static File showChooser(String title, File defFile, Container c) {
+  public static File showChooser(String title, File defFile,
+                                 Container c, FileNameExtensionFilter f) {
     JFileChooser fc = new JFileChooser(defFile);
     fc.setDialogTitle(title);
     fc.setApproveButtonText("OK  \u21B5");
     fc.setFileHidingEnabled(false);
+    if (f != null)
+      fc.setFileFilter(f);
     if (fc.showOpenDialog(c) == JFileChooser.APPROVE_OPTION)
       return fc.getSelectedFile();
     else
       return null;
   }
 
+  public static File showChooser(String title, File defFile, Container c) {
+    return showChooser(title, defFile, c, null);
+  }
+
+  protected File showChooser(String title, File defFile,
+                             FileNameExtensionFilter f) {
+    return showChooser(title, defFile, this, f);
+  }
+
   protected File showChooser(String title, File defFile) {
     return showChooser(title, defFile, this);
   }
diff --git a/java/com/tigervnc/vncviewer/F8Menu.java b/java/com/tigervnc/vncviewer/F8Menu.java
index 6aadb2d..d7f9e48 100644
--- a/java/com/tigervnc/vncviewer/F8Menu.java
+++ b/java/com/tigervnc/vncviewer/F8Menu.java
@@ -23,6 +23,7 @@
 import java.awt.Cursor;
 import java.awt.event.*;
 import java.io.File;
+import javax.swing.filechooser.*;
 import javax.swing.JCheckBoxMenuItem;
 import javax.swing.JDialog;
 import javax.swing.JFrame;
@@ -139,7 +140,9 @@
 	    File dflt = new File(FileUtils.getVncHomeDir().concat("default.tigervnc"));
 	    if (!dflt.exists() || !dflt.isFile())
 	      dflt = new File(FileUtils.getVncHomeDir());
-	    File f = Dialog.showChooser(title, dflt, this);
+      FileNameExtensionFilter filter =
+        new FileNameExtensionFilter("TigerVNC configuration (*.tigervnc)", "tigervnc");
+	    File f = Dialog.showChooser(title, dflt, this, filter);
 	    while (f != null && f.exists() && f.isFile()) {
 	      String msg = f.getAbsolutePath();
 	      msg = msg.concat(" already exists. Do you want to overwrite?");
@@ -154,7 +157,7 @@
 	      if (op.getValue() == options[0])
 	        break;
 	      else
-	        f = Dialog.showChooser(title, f, this);
+	        f = Dialog.showChooser(title, f, this, filter);
 	    }
 	    if (f != null && (!f.exists() || f.canWrite()))
 	      saveViewerParameters(f.getAbsolutePath(), vncServerName.getValue());
diff --git a/java/com/tigervnc/vncviewer/OptionsDialog.java b/java/com/tigervnc/vncviewer/OptionsDialog.java
index 8d49a2e..4bcb7d8 100644
--- a/java/com/tigervnc/vncviewer/OptionsDialog.java
+++ b/java/com/tigervnc/vncviewer/OptionsDialog.java
@@ -27,6 +27,7 @@
 import java.text.NumberFormat;
 import javax.swing.*;
 import javax.swing.border.*;
+import javax.swing.filechooser.*;
 import javax.swing.UIManager.*;
 import javax.swing.text.*;
 import java.util.*;
@@ -779,7 +780,9 @@
       public void actionPerformed(ActionEvent e) {
         JComponent c = ((JButton)e.getSource()).getRootPane();
         File dflt = new File(CSecurityTLS.X509CA.getValueStr());
-        File f = showChooser("Path to X509 CA certificate", dflt, c);
+        FileNameExtensionFilter filter =
+          new FileNameExtensionFilter("X.509 certificate", "crt", "cer", "pem");
+        File f = showChooser("Path to X509 CA certificate", dflt, c, filter);
         if (f != null && f.exists() && f.canRead())
           caInput.setText(f.getAbsolutePath());
       }
@@ -791,7 +794,9 @@
       public void actionPerformed(ActionEvent e) {
         JComponent c = ((JButton)e.getSource()).getRootPane();
         File dflt = new File(CSecurityTLS.X509CRL.getValueStr());
-        File f = showChooser("Path to X509 CRL file", dflt, c);
+        FileNameExtensionFilter filter =
+          new FileNameExtensionFilter("X.509 CRL", "crl");
+        File f = showChooser("Path to X509 CRL file", dflt, c, filter);
         if (f != null && f.exists() && f.canRead())
           crlInput.setText(f.getAbsolutePath());
       }
diff --git a/java/com/tigervnc/vncviewer/ServerDialog.java b/java/com/tigervnc/vncviewer/ServerDialog.java
index 338e626..4b3f26b 100644
--- a/java/com/tigervnc/vncviewer/ServerDialog.java
+++ b/java/com/tigervnc/vncviewer/ServerDialog.java
@@ -24,6 +24,7 @@
 import java.io.File;
 import javax.swing.*;
 import javax.swing.border.*;
+import javax.swing.filechooser.*;
 import javax.swing.WindowConstants.*;
 import java.util.*;
 
@@ -221,7 +222,9 @@
   private void handleLoad() {
     String title = "Select a TigerVNC configuration file";
     File dflt = new File(FileUtils.getVncHomeDir().concat("default.tigervnc"));
-    File f = showChooser(title, dflt);
+    FileNameExtensionFilter filter =
+      new FileNameExtensionFilter("TigerVNC configuration (*.tigervnc)", "tigervnc");
+    File f = showChooser(title, dflt, filter);
     if (f != null && f.exists() && f.canRead())
       loadViewerParameters(f.getAbsolutePath());
   }
@@ -231,7 +234,9 @@
     File dflt = new File(FileUtils.getVncHomeDir().concat("default.tigervnc"));
     if (!dflt.exists() || !dflt.isFile())
       dflt = new File(FileUtils.getVncHomeDir());
-    File f = showChooser(title, dflt);
+    FileNameExtensionFilter filter =
+      new FileNameExtensionFilter("TigerVNC configuration (*.tigervnc)", "tigervnc");
+    File f = showChooser(title, dflt, filter);
     while (f != null && f.exists() && f.isFile()) {
       String msg = f.getAbsolutePath();
       msg = msg.concat(" already exists. Do you want to overwrite?");
@@ -246,7 +251,7 @@
       if (op.getValue() == options[0])
         break;
       else
-        f = showChooser(title, f);
+        f = showChooser(title, f, filter);
     }
     if (f != null && (!f.exists() || f.canWrite()))
       saveViewerParameters(f.getAbsolutePath(), (String)server.getSelectedItem());
