public synchronized void save() {
		if (image == null) return;
		
		if (fc == null) {
			String[] paths = {
					System.getProperty("user.home") + File.separator + "Pictures",
					System.getProperty("user.home") + File.separator + "My Pictures",
					System.getProperty("user.home") + File.separator + "Documents" + File.separator + "Pictures",
					System.getProperty("user.home") + File.separator + "My Documents" + File.separator + "My Pictures",
					System.getProperty("user.home") + File.separator + "Desktop",
					"."
			};
			File pics = null;
			for (String path : paths) {
				pics = new File(path);
				if (pics.exists())
					break;
			}
				
			fc = new JFileChooser(pics);
		}

		int approve = fc.showSaveDialog(this);
		if (approve != JFileChooser.APPROVE_OPTION)
			return;
		
		File f = fc.getSelectedFile();
		if (!f.getName().toLowerCase().endsWith(".png"))
			f = new File(f.getAbsolutePath() + ".png");
		if (f.exists()) {
			int overwrite = JOptionPane.showConfirmDialog(this, 
					"The file \"" + f.getName() + "\" already exists. Would you like to overwrite it?", 
					"Confirm Overwrite", JOptionPane.YES_NO_OPTION);
			if (overwrite != JOptionPane.YES_OPTION)
				return;
		}
		
		try {
			ImageIO.write(image, "png", f);
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this, 
					"Error writing file: " + e, 
					"Oops", JOptionPane.ERROR_MESSAGE);
		}
	}