private boolean savePhoto(Photo inPhoto, boolean inOverwriteFlag, boolean inForceFlag)
	{
		// If photos don't have a file, then can't save them
		if (inPhoto.getFile() == null) {
			return false;
		}
		// Check whether photo file still exists
		if (!inPhoto.getFile().exists())
		{
			// photo file doesn't exist any more
			JOptionPane.showMessageDialog(_parentFrame,
				I18nManager.getText("error.saveexif.filenotfound") + " : " + inPhoto.getFile().getAbsolutePath(),
				I18nManager.getText("dialog.saveexif.title"), JOptionPane.ERROR_MESSAGE);
			return false;
		}
		// Warn if file read-only and selected to overwrite
		if (inOverwriteFlag && !inPhoto.getFile().canWrite())
		{
			// eek, can't overwrite file
			int answer = JOptionPane.showConfirmDialog(_parentFrame,
				I18nManager.getText("error.saveexif.cannotoverwrite1") + " " + inPhoto.getFile().getAbsolutePath()
					+ " " + I18nManager.getText("error.saveexif.cannotoverwrite2"),
				I18nManager.getText("dialog.saveexif.title"),
				JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE);
			if (answer == JOptionPane.YES_OPTION)
			{
				// don't overwrite this image but write to copy
				inOverwriteFlag = false;
			}
			else
			{
				// don't do anything with this file
				return false;
			}
		}
		String[] command = null;
		if (inPhoto.getCurrentStatus() == Photo.Status.NOT_CONNECTED)
		{
			// Photo is no longer connected, so delete gps tags
			command = getDeleteGpsExifTagsCommand(inPhoto.getFile(), inOverwriteFlag);
		}
		else
		{
			// Photo is now connected, so write new gps tags
			command = getWriteGpsExifTagsCommand(inPhoto.getFile(), inPhoto.getDataPoint(), inOverwriteFlag, inForceFlag);
		}
		// Execute exif command
		boolean saved = false;
		try
		{
			Process process = Runtime.getRuntime().exec(command);
			// Wait for process to finish so not too many run in parallel
			try {
				process.waitFor();
			}
			catch (InterruptedException ie) {}
			saved = (process.exitValue() == 0);
		}
		catch (Exception e)
		{
			// show error message
			JOptionPane.showMessageDialog(_parentFrame, "Exception: '" + e.getClass().getName() + "' : "
				+ e.getMessage(), I18nManager.getText("dialog.saveexif.title"), JOptionPane.ERROR_MESSAGE);
		}
		return saved;
	}