private void saveROM() {
		if (romHandler == null) {
			return; // none loaded
		}
		if (raceModeCB.isSelected() && tpUnchangedRB.isSelected()
				&& wpUnchangedRB.isSelected()) {
			JOptionPane.showMessageDialog(this,
					bundle.getString("RandomizerGUI.raceModeRequirements"));
			return;
		}
		if (pokeLimitCB.isSelected()
				&& (this.currentRestrictions == null || this.currentRestrictions
						.nothingSelected())) {
			JOptionPane.showMessageDialog(this,
					bundle.getString("RandomizerGUI.pokeLimitNotChosen"));
			return;
		}
		romSaveChooser.setSelectedFile(null);
		int returnVal = romSaveChooser.showSaveDialog(this);
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			File fh = romSaveChooser.getSelectedFile();
			// Fix or add extension
			List<String> extensions = new ArrayList<String>(Arrays.asList(
					"sgb", "gbc", "gba", "nds"));
			extensions.remove(this.romHandler.getDefaultExtension());
			fh = FileFunctions.fixFilename(fh,
					this.romHandler.getDefaultExtension(), extensions);
			boolean allowed = true;
			if (this.romHandler instanceof AbstractDSRomHandler) {
				String currentFN = this.romHandler.loadedFilename();
				if (currentFN.equals(fh.getAbsolutePath())) {
					JOptionPane.showMessageDialog(this,
							bundle.getString("RandomizerGUI.cantOverwriteDS"));
					allowed = false;
				}
			}
			if (allowed) {
				// Get a seed
				long seed = RandomSource.pickSeed();
				// Apply it
				RandomSource.seed(seed);
				presetMode = false;
				performRandomization(fh.getAbsolutePath(), seed, null, null,
						null);
			}
		}
	}