handle storing the preferences on ok pressed
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/PreferencePageContainerDialog.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/PreferencePageContainerDialog.java
index 097aab8..24f7cb4 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/PreferencePageContainerDialog.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/dialogs/PreferencePageContainerDialog.java
@@ -10,11 +10,14 @@
  *******************************************************************************/
 package org.eclipse.team.internal.ui.dialogs;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.IPersistentPreferenceStore;
 import org.eclipse.jface.preference.IPreferencePageContainer;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferenceDialog;
@@ -43,6 +46,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.team.internal.ui.Policy;
 import org.eclipse.team.internal.ui.TeamUIPlugin;
 
 public class PreferencePageContainerDialog extends Dialog implements IPreferencePageContainer {
@@ -120,14 +124,15 @@
 	protected void okPressed() {
 		final List changedProperties = new ArrayList(5);
 		getPreferenceStore().addPropertyChangeListener( new IPropertyChangeListener() {
-			/**
-			 * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
-			 */
 			public void propertyChange(PropertyChangeEvent event) {
 				changedProperties.add(event.getProperty());
 			}
 		});
+			
 		page.performOk();
+		
+		handleSave();
+		
 		super.okPressed();
 	}
 	
@@ -383,4 +388,34 @@
 		fOkButton= createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
 		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
 	}
+	
+	/**
+	 * Save the values specified in the pages.
+	 * <p>
+	 * The default implementation of this framework method saves all
+	 * pages of type <code>PreferencePage</code> (if their store needs saving
+	 * and is a <code>PreferenceStore</code>).
+	 * </p>
+	 * <p>
+	 * Subclasses may override.
+	 * </p>
+	 */
+	protected void handleSave() {
+		if (page instanceof PreferencePage) {
+			// Save now in case tbe workbench does not shutdown cleanly
+			IPreferenceStore store =
+				((PreferencePage) page).getPreferenceStore();
+			if (store != null
+				&& store.needsSaving()
+				&& store instanceof IPersistentPreferenceStore) {
+				try {
+					((IPersistentPreferenceStore) store).save();
+				} catch (IOException e) {
+					MessageDialog.openError(
+						getShell(), Policy.bind("saving"),
+						Policy.bind("saving", page.getTitle(), e.getMessage())); 
+				}
+			}
+		}
+	}
 }