diff --git a/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java b/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java
index 1948c7de9cc043a39dd6bc797d52e811aac1676b..db42fa65a213fd7426ff9557a524d27b78a09e94 100644
--- a/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java
+++ b/xchart/src/main/java/com/xeiam/xchart/XChartPanel.java
@@ -113,11 +113,11 @@ public class XChartPanel extends JPanel {
   private void showSaveAsDialog() {
 
     JFileChooser fileChooser = new JFileChooser();
-    fileChooser.addChoosableFileFilter(new JPGSaveFilter());
-    FileFilter pngFileFilter = new PNGSaveFilter();
+    fileChooser.addChoosableFileFilter(new SuffixSaveFilter("jpg"));
+    FileFilter pngFileFilter = new SuffixSaveFilter("png");
     fileChooser.addChoosableFileFilter(pngFileFilter);
-    fileChooser.addChoosableFileFilter(new BMPSaveFilter());
-    fileChooser.addChoosableFileFilter(new GIFSaveFilter());
+    fileChooser.addChoosableFileFilter(new SuffixSaveFilter("bmp"));
+    fileChooser.addChoosableFileFilter(new SuffixSaveFilter("gif"));
     fileChooser.setAcceptAllFileFilterUsed(false);
 
     fileChooser.setFileFilter(pngFileFilter);
@@ -130,7 +130,8 @@ public class XChartPanel extends JPanel {
           if (fileChooser.getFileFilter() == null) {
             BitmapEncoder.saveBitmap(chart, theFileToSave.getCanonicalPath().toString(), BitmapFormat.PNG);
           } else if (fileChooser.getFileFilter().getDescription().equals("*.jpg,*.JPG")) {
-            BitmapEncoder.saveJPGWithQuality(chart, BitmapEncoder.addFileExtension(theFileToSave.getCanonicalPath().toString(), BitmapFormat.JPG), 1.0f);
+            BitmapEncoder.saveJPGWithQuality(chart, BitmapEncoder.addFileExtension(theFileToSave.getCanonicalPath().toString(), BitmapFormat.JPG),
+                1.0f);
           } else if (fileChooser.getFileFilter().getDescription().equals("*.png,*.PNG")) {
             BitmapEncoder.saveBitmap(chart, theFileToSave.getCanonicalPath().toString(), BitmapFormat.PNG);
           } else if (fileChooser.getFileFilter().getDescription().equals("*.bmp,*.BMP")) {
@@ -146,92 +147,38 @@ public class XChartPanel extends JPanel {
     }
   }
 
-  private class JPGSaveFilter extends FileFilter {
-
-    @Override
-    public boolean accept(File f) {
-
-      if (f.isDirectory()) {
-        return true;
-      }
-
-      String s = f.getName();
-
-      return s.endsWith(".jpg") || s.endsWith(".JPG");
-    }
-
-    @Override
-    public String getDescription() {
-
-      return "*.jpg,*.JPG";
-    }
-
-  }
-
-  private class BMPSaveFilter extends FileFilter {
-
-    @Override
-    public boolean accept(File f) {
-
-      if (f.isDirectory()) {
-        return true;
-      }
-
-      String s = f.getName();
-
-      return s.endsWith(".bmp") || s.endsWith(".BMP");
-    }
-
-    @Override
-    public String getDescription() {
-
-      return "*.bmp,*.BMP";
-    }
-
-  }
-
-  private class GIFSaveFilter extends FileFilter {
-
-    @Override
-    public boolean accept(File f) {
-
-      if (f.isDirectory()) {
-        return true;
-      }
-
-      String s = f.getName();
-
-      return s.endsWith(".gif") || s.endsWith(".GIF");
-    }
-
-    @Override
-    public String getDescription() {
-
-      return "*.gif,*.GIF";
+  /**
+   * File filter based on the suffix of a file. This file filter accepts all files that end with .suffix or the capitalized suffix.
+   *
+   * @author Benedikt Bünz
+   */
+  private class SuffixSaveFilter extends FileFilter {
+    private final String suffix;
+
+    /**
+     * @param suffix This file filter accepts all files that end with .suffix or the capitalized suffix.
+     */
+    public SuffixSaveFilter(String suffix) {
+      this.suffix = suffix;
     }
 
-  }
-
-  private class PNGSaveFilter extends FileFilter {
-
     @Override
     public boolean accept(File f) {
 
       if (f.isDirectory()) {
-        return true;
+        return false;
       }
 
       String s = f.getName();
 
-      return s.endsWith(".png") || s.endsWith(".PNG");
+      return s.endsWith("." + suffix) || s.endsWith("." + suffix.toUpperCase());
     }
 
     @Override
     public String getDescription() {
 
-      return "*.png,*.PNG";
+      return "*." + suffix + ",*." + suffix.toUpperCase();
     }
-
   }
 
   private class PopUpMenuClickListener extends MouseAdapter {