diff --git a/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/dialogs/sortfilter/SortFilterPage.java b/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/dialogs/sortfilter/SortFilterPage.java
index cd223f8..65a39ef 100644
--- a/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/dialogs/sortfilter/SortFilterPage.java
+++ b/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/dialogs/sortfilter/SortFilterPage.java
@@ -20,8 +20,8 @@
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.gef.commands.Command;
-import org.eclipse.gmf.runtime.diagram.ui.commands.CommandProxy;
-import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gef.commands.CompoundCommand;
+import org.eclipse.gef.commands.UnexecutableCommand;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.editparts.ListCompartmentEditPart;
 import org.eclipse.gmf.runtime.diagram.ui.internal.dialogs.sortfilter.SortFilterContentProvider;
@@ -30,7 +30,6 @@
 import org.eclipse.gmf.runtime.diagram.ui.internal.l10n.DiagramUIPluginImages;
 import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
 import org.eclipse.gmf.runtime.diagram.ui.requests.ChangeSortFilterRequest;
-import org.eclipse.gmf.runtime.emf.commands.core.command.CompositeTransactionalCommand;
 import org.eclipse.gmf.runtime.notation.Filtering;
 import org.eclipse.gmf.runtime.notation.FilteringStyle;
 import org.eclipse.gmf.runtime.notation.NotationPackage;
@@ -942,73 +941,20 @@
 	}
 
 	/**
-	 * Applies changes to all pages in the dialog
-	 */
-	public boolean performOk() {
-		if (sortChanged || filterChanged)
-			performApply();
-		return true;
-	}
-
-	/**
 	 * Writes the sorting/filtering specified by the dialog
 	 */
 	protected void performApply() {
 
-		if (pageType == CHILD_PAGE) {
-			Command filteringCommand = getApplyCommand();
-			if (filteringCommand != null && filteringCommand.canExecute()) {				
-				editPart
-					.getRoot()
-					.getViewer()
-					.getEditDomain()
-					.getCommandStack()
-					.execute(
-					filteringCommand);
-			}	
-		} else if (pageType == ROOT_PAGE) {
-
-			PreferenceManager preferenceManager =
-				((SortFilterDialog) getContainer()).getPreferenceManager();
-			Iterator nodes =
-				preferenceManager
-					.getElements(PreferenceManager.PRE_ORDER)
-					.iterator();
-			SortFilterRootPreferenceNode rootNode = null;
-			CompositeTransactionalCommand cc = new CompositeTransactionalCommand(
-                editPart.getEditingDomain(),
-                DiagramUIMessages.Command_SortFilterCommand);
-            while (nodes.hasNext()) {
-				PreferenceNode node = (PreferenceNode) nodes.next();
-				SortFilterPage page = (SortFilterPage) node.getPage();
-				if (page == this) {
-					rootNode = (SortFilterRootPreferenceNode) node;
-					continue;
-				}
-
-				// We must build the page if it is already not done because each
-				// page
-				// in the dialog knows how to filter itself.
-				((SortFilterDialog) rootNode.getPreferenceDialog()).showPage(
-					node);
-
-				// We set the child's filter criteria to the root's
-				// criteria if the child is using the same filtering criteria.
-				if (compareFilters(page.getFilterList())) {
-					page.setFilterCriteria(filters.getItems());
-					page.setCriteria(filterList.getItems());
-					page.filterItemsFromList();
-				}
-				
-				
-				//page.performApply();
-				
-				cc.compose(new CommandProxy(page.getApplyCommand()));
-			}
-			
-			editPart.getRoot().getViewer().getEditDomain().getCommandStack()
-				.execute(new ICommandProxy(cc));
-		}
+		Command filteringCommand = getApplyCommand();
+		if (filteringCommand != null && filteringCommand.canExecute()) {				
+			editPart
+				.getRoot()
+				.getViewer()
+				.getEditDomain()
+				.getCommandStack()
+				.execute(
+				filteringCommand);
+		}	
 	}
 	
 	/**
@@ -1017,47 +963,84 @@
 	 * @return the command
 	 */
 	public Command getApplyCommand() {
-		List newSortedObjects = Collections.EMPTY_LIST; 
-		if (_sorting.equals(Sorting.MANUAL_LITERAL)) {
-				newSortedObjects = new ArrayList();
-				List model = (ArrayList) tableViewer.getInput();
-				for (int j = 0; j < model.size(); j++) {
-					SortFilterElement element = (SortFilterElement) model.get(j);
-					newSortedObjects.add(element.getData());
-				}
-		}
-		
-		List newFilteredObjects = Collections.EMPTY_LIST;
-		if (_filtering.equals(Filtering.MANUAL_LITERAL)) {
-			newFilteredObjects = new ArrayList();
-			List model = (ArrayList) tableViewer.getInput();			
-			for (int i = 0; i < model.size(); i++) {
-				SortFilterElement element = (SortFilterElement) model.get(i);
-				if (!element.isVisible()) {
-					newFilteredObjects.add(element.getData());
-				}
+		if (pageType == CHILD_PAGE) {
+			List newSortedObjects = Collections.EMPTY_LIST; 
+			if (_sorting.equals(Sorting.MANUAL_LITERAL)) {
+					newSortedObjects = new ArrayList();
+					List model = (ArrayList) tableViewer.getInput();
+					for (int j = 0; j < model.size(); j++) {
+						SortFilterElement element = (SortFilterElement) model.get(j);
+						newSortedObjects.add(element.getData());
+					}
 			}
-			if (_filtering.equals(Filtering.MANUAL_LITERAL) && newFilteredObjects.size() == 0) {
-				_filtering = Filtering.NONE_LITERAL;
+			
+			List newFilteredObjects = Collections.EMPTY_LIST;
+			if (_filtering.equals(Filtering.MANUAL_LITERAL)) {
+				newFilteredObjects = new ArrayList();
+				List model = (ArrayList) tableViewer.getInput();			
+				for (int i = 0; i < model.size(); i++) {
+					SortFilterElement element = (SortFilterElement) model.get(i);
+					if (!element.isVisible()) {
+						newFilteredObjects.add(element.getData());
+					}
+				}
+				if (_filtering.equals(Filtering.MANUAL_LITERAL) && newFilteredObjects.size() == 0) {
+					_filtering = Filtering.NONE_LITERAL;
+				}
+			}	
+			
+			// Add the objects filtered otherwise.
+			if (!_shownAsAlternateViewItems.isEmpty()
+				&& Collections.EMPTY_LIST.equals(newFilteredObjects)) {
+				newFilteredObjects = new ArrayList();
 			}
-		}	
-		
-		// Add the objects filtered otherwise.
-		if (!_shownAsAlternateViewItems.isEmpty()
-			&& Collections.EMPTY_LIST.equals(newFilteredObjects)) {
-			newFilteredObjects = new ArrayList();
+			newFilteredObjects.addAll(_shownAsAlternateViewItems);
+	
+			ChangeSortFilterRequest request = new ChangeSortFilterRequest(
+				_filtering, newFilteredObjects, _filteringKeys, _sorting,
+				newSortedObjects, _sortingKeys);
+			
+			sortChanged = false;
+			filterChanged = false;
+			getApplyButton().setEnabled(sortChanged || filterChanged);
+	
+			return editPart.getCommand(request);
+		} else if (pageType == ROOT_PAGE) {
+			PreferenceManager preferenceManager =
+				((SortFilterDialog) getContainer()).getPreferenceManager();
+			Iterator nodes =
+				preferenceManager
+					.getElements(PreferenceManager.PRE_ORDER)
+					.iterator();
+			SortFilterRootPreferenceNode rootNode = null;
+			CompoundCommand cc = new CompoundCommand(
+	            DiagramUIMessages.Command_SortFilterCommand);
+	        while (nodes.hasNext()) {
+				PreferenceNode node = (PreferenceNode) nodes.next();
+				SortFilterPage page = (SortFilterPage) node.getPage();
+				if (page == this) {
+					rootNode = (SortFilterRootPreferenceNode) node;
+					continue;
+				}
+	
+				// We must build the page if it is already not done because each
+				// page
+				// in the dialog knows how to filter itself.
+				((SortFilterDialog) rootNode.getPreferenceDialog()).showPage(
+					node);
+	
+				// We set the child's filter criteria to the root's
+				// criteria if the child is using the same filtering criteria.
+				if (compareFilters(page.getFilterList())) {
+					page.setFilterCriteria(filters.getItems());
+					page.setCriteria(filterList.getItems());
+					page.filterItemsFromList();
+				}				
+				cc.add(page.getApplyCommand());
+			}
+	        return cc;
 		}
-		newFilteredObjects.addAll(_shownAsAlternateViewItems);
-
-		ChangeSortFilterRequest request = new ChangeSortFilterRequest(
-			_filtering, newFilteredObjects, _filteringKeys, _sorting,
-			newSortedObjects, _sortingKeys);
-		
-		sortChanged = false;
-		filterChanged = false;
-		getApplyButton().setEnabled(sortChanged || filterChanged);
-
-		return editPart.getCommand(request);		
+		return UnexecutableCommand.INSTANCE;
 	}
 
 	/**
@@ -1407,4 +1390,16 @@
 		return true;
 	}
 	
+	/**
+	 * Creates the command that needs to be executed for this page when "Ok" is
+	 * pressed. It's different from {@link #getApplyCommand()}, because it checks
+	 * whether the page is dirty or not.
+	 * @return <code>Command</code> to be executed per this page
+	 */
+	public Command getCommand() {
+		if (filterChanged || sortChanged)
+			return getApplyCommand();
+		return null;
+	}
+	
 }
diff --git a/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/internal/dialogs/sortfilter/SortFilterDialog.java b/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/internal/dialogs/sortfilter/SortFilterDialog.java
index bf7cb85..4e92418 100644
--- a/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/internal/dialogs/sortfilter/SortFilterDialog.java
+++ b/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/internal/dialogs/sortfilter/SortFilterDialog.java
@@ -11,9 +11,24 @@
 
 package org.eclipse.gmf.runtime.diagram.ui.internal.dialogs.sortfilter;
 
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.CommandStack;
+import org.eclipse.gef.commands.CompoundCommand;
+import org.eclipse.gmf.runtime.diagram.ui.dialogs.sortfilter.SortFilterPage;
 import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.preference.IPreferenceNode;
+import org.eclipse.jface.preference.IPreferencePage;
 import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.util.Policy;
+import org.eclipse.jface.util.SafeRunnable;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
@@ -29,13 +44,15 @@
 	
 	/** dialog title prefix */
 	private final String title = DiagramUIMessages.SortFilterDialog_title;
+	private CommandStack commandStack = null;
 	
 	/**
 	 * CollectionEditorDialog constructor
 	 * @param parentShell 	the parent shell
 	 */
-	public SortFilterDialog(Shell parentShell) {
+	public SortFilterDialog(Shell parentShell, CommandStack commandStack) {
 		super(parentShell, new SortFilterPageManager());
+		this.commandStack = commandStack;
 	}
 
 	/**
@@ -66,5 +83,82 @@
 		return null;
 	}	
 	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.preference.PreferenceDialog#okPressed()
+	 */
+	protected void okPressed() {
+		SafeRunnable.run(new SafeRunnable() {
+			private boolean errorOccurred;
+
+			
+			 /* (non-Javadoc)
+			 * 
+			 * @see org.eclipse.core.runtime.ISafeRunnable#run()
+			 */
+			 
+			public void run() {
+				getButton(IDialogConstants.OK_ID).setEnabled(false);
+				errorOccurred = false;
+				boolean hasFailedOK = false;
+				try {
+					// Notify all the pages and give them a chance to abort
+					Iterator nodes = getPreferenceManager().getElements(PreferenceManager.PRE_ORDER)
+							.iterator();
+					CompoundCommand cc = new CompoundCommand();
+					while (nodes.hasNext()) {
+						IPreferenceNode node = (IPreferenceNode) nodes.next();
+						IPreferencePage page = node.getPage();
+						if (page != null) {
+							if (page instanceof SortFilterPage) {
+								Command cmd = ((SortFilterPage)page).getCommand();
+								if (cmd != null && cmd.canExecute())
+									cc.add(cmd);
+							}
+							else if (!page.performOk()){
+								hasFailedOK = true;
+								return;
+							}
+						}
+					}
+					if (cc.canExecute())
+						commandStack.execute(cc);
+				} catch (Exception e) {
+					handleException(e);
+				} finally {
+					//Don't bother closing if the OK failed
+					if(hasFailedOK){
+						setReturnCode(FAILED);
+						getButton(IDialogConstants.OK_ID).setEnabled(true);
+						return;
+					}
+					
+					if (!errorOccurred) {
+						//Give subclasses the choice to save the state of the
+					    //preference pages.
+						handleSave();
+					}
+					setReturnCode(OK);
+					close();
+				}
+			}
+
+			
+			 /* (non-Javadoc)
+			 * 
+			 * @see org.eclipse.core.runtime.ISafeRunnable#handleException(java.lang.Throwable)
+			 */
+			 
+			public void handleException(Throwable e) {
+				errorOccurred = true;
+				
+				Policy.getLog().log(new Status(IStatus.ERROR, Policy.JFACE, 0, e.toString(), e));
+
+				setSelectedNodePreference(null);
+				String message = JFaceResources.getString("SafeRunnable.errorMessage"); //$NON-NLS-1$
+				MessageDialog.openError(getShell(), JFaceResources.getString("Error"), message); //$NON-NLS-1$
+
+			}
+		});
+	}
 
 }
diff --git a/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/internal/dialogs/sortfilter/SortFilterDialogUtil.java b/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/internal/dialogs/sortfilter/SortFilterDialogUtil.java
index 223062b..c262b94 100644
--- a/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/internal/dialogs/sortfilter/SortFilterDialogUtil.java
+++ b/org.eclipse.gmf.runtime.diagram.ui/src/org/eclipse/gmf/runtime/diagram/ui/internal/dialogs/sortfilter/SortFilterDialogUtil.java
@@ -52,7 +52,7 @@
 			
 		SortFilterDialog sortFilterDialog =
 			new SortFilterDialog(
-				Display.getCurrent().getActiveShell());
+				Display.getCurrent().getActiveShell(), editPart.getViewer().getEditDomain().getCommandStack());
 				
 		rootPage.setTitle(ROOT_NAME);
 
