Refactored model ui parts
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangesSection.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangesSection.java
index b087af9..fd73823 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangesSection.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/ChangesSection.java
@@ -153,7 +153,7 @@
 	public void setViewer(Viewer viewer) {
 		this.changesViewer = viewer;
 		calculateDescription();
-		page.getViewerAdviser().addInputChangedListener(changedListener);
+		page.getViewerAdvisor().addInputChangedListener(changedListener);
 		participant.getSubscriberSyncInfoCollector().getSubscriberSyncInfoSet().addSyncSetChangedListener(subscriberListener);
 		participant.getSubscriberSyncInfoCollector().getSyncInfoTree().addSyncSetChangedListener(outputSetListener);
 	}
@@ -288,7 +288,7 @@
 	
 	public void dispose() {
 		super.dispose();
-		page.getViewerAdviser().removeInputChangedListener(changedListener);
+		page.getViewerAdvisor().removeInputChangedListener(changedListener);
 		participant.getSubscriberSyncInfoCollector().getSubscriberSyncInfoSet().removeSyncSetChangedListener(subscriberListener);
 	}
 	
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SubscriberParticipantPage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SubscriberParticipantPage.java
index 47e360b..e1ce476 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SubscriberParticipantPage.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SubscriberParticipantPage.java
@@ -256,7 +256,7 @@
 			statusLine.fillActionBars(actionBars);
 			
 			// allow the advisor to contribute
-			getViewerConfiguration().setActionBars(actionBars);
+			getViewerAdvisor().setActionBars(actionBars);
 		}		
 	}
 
@@ -322,7 +322,7 @@
 		return viewer;
 	}
 	
-	public StructuredViewerAdvisor getViewerConfiguration() {
+	public StructuredViewerAdvisor getViewerAdvisor() {
 		return viewerAdvisor;
 	}
 	
@@ -331,6 +331,6 @@
 	}
 
 	public void setSelection(Object[] objects, boolean reveal) {
-		getViewerConfiguration().setSelection(objects, reveal);
+		getViewerAdvisor().setSelection(objects, reveal);
 	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoModelElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SyncInfoModelElement.java
similarity index 97%
rename from bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoModelElement.java
rename to bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SyncInfoModelElement.java
index fd3c93b..f6cc756 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoModelElement.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SyncInfoModelElement.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.team.ui.synchronize.viewers;
+package org.eclipse.team.internal.ui.synchronize;
 
 import org.eclipse.compare.ITypedElement;
 import org.eclipse.compare.ResourceNode;
@@ -19,8 +19,6 @@
 import org.eclipse.team.core.synchronize.SyncInfo;
 import org.eclipse.team.core.variants.IResourceVariant;
 import org.eclipse.team.internal.ui.Policy;
-import org.eclipse.team.internal.ui.synchronize.LocalResourceTypedElement;
-import org.eclipse.team.internal.ui.synchronize.RemoteResourceTypedElement;
 
 /**
  * A diff node used to display the synchronization state for resources described by
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElement.java
similarity index 94%
rename from bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelElement.java
rename to bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElement.java
index 0c05f4a..5988331 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelElement.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElement.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.team.ui.synchronize.viewers;
+package org.eclipse.team.internal.ui.synchronize;
 
 import org.eclipse.compare.structuremergeviewer.*;
 import org.eclipse.core.resources.IResource;
@@ -16,7 +16,7 @@
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.util.*;
 import org.eclipse.team.core.synchronize.SyncInfo;
-import org.eclipse.team.internal.ui.TeamUIPlugin;
+import org.eclipse.team.ui.synchronize.viewers.*;
 import org.eclipse.ui.model.IWorkbenchAdapter;
 
 /**
@@ -24,11 +24,8 @@
  *  
  * @since 3.0
  */
-public abstract class SynchronizeModelElement extends DiffNode implements IAdaptable {
+public abstract class SynchronizeModelElement extends DiffNode implements IAdaptable, ISynchronizeModelElement {
 
-	public static final String BUSY_PROPERTY = TeamUIPlugin.ID + ".busy"; //$NON-NLS-1$
-	public static final String PROPAGATED_CONFLICT_PROPERTY = TeamUIPlugin.ID + ".conflict"; //$NON-NLS-1$
-	
 	/*
 	 * Internal flags bits for stroing properties in the flags variable
 	 */
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelElementLabelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElementLabelProvider.java
similarity index 78%
rename from bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelElementLabelProvider.java
rename to bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElementLabelProvider.java
index e703cda..f84d1b8 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelElementLabelProvider.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElementLabelProvider.java
@@ -8,25 +8,27 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.team.ui.synchronize.viewers;
+package org.eclipse.team.internal.ui.synchronize;
 
 import java.util.*;
 
 import org.eclipse.compare.CompareConfiguration;
 import org.eclipse.compare.structuremergeviewer.DiffNode;
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.viewers.IColorProvider;
+import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.*;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.team.core.synchronize.SyncInfo;
 import org.eclipse.team.internal.ui.*;
 import org.eclipse.team.ui.ISharedImages;
+import org.eclipse.team.ui.synchronize.viewers.ISynchronizeModelElement;
 import org.eclipse.ui.model.WorkbenchLabelProvider;
 
 /**
  * A label provider that decorates viewers showing 
- * {@link org.eclipse.team.ui.synchronize.viewers.SynchronizeModelElement}.
+ * {@link ISynchronizeModelElement}.
  * 
  * @since 3.0
  */
@@ -42,40 +44,6 @@
 	// the workbench adapter.
 	private WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider();
 
-	/**
-	 * Decorating label provider that also support color providers
-	 */
-	public static class DecoratingColorLabelProvider extends DecoratingLabelProvider implements IColorProvider {
-
-		public DecoratingColorLabelProvider(ILabelProvider provider, ILabelDecorator decorator) {
-			super(provider, decorator);
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
-		 */
-		public Color getForeground(Object element) {
-			ILabelProvider p = getLabelProvider();
-			if (p instanceof IColorProvider) {
-				return ((IColorProvider) p).getForeground(element);
-			}
-			return null;
-		}
-
-		/*
-		 * (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
-		 */
-		public Color getBackground(Object element) {
-			ILabelProvider p = getLabelProvider();
-			if (p instanceof IColorProvider) {
-				return ((IColorProvider) p).getBackground(element);
-			}
-			return null;
-		}
-	}
-
 	public SynchronizeModelElementLabelProvider() {
 	}
 
@@ -84,9 +52,9 @@
 	 * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
 	 */
 	public Color getForeground(Object element) {
-		if (element instanceof SynchronizeModelElement) {
-			SynchronizeModelElement node = (SynchronizeModelElement)element;
-			if(node.getProperty(SynchronizeModelElement.BUSY_PROPERTY)) {
+		if (element instanceof ISynchronizeModelElement) {
+			ISynchronizeModelElement node = (ISynchronizeModelElement)element;
+			if(node.getProperty(ISynchronizeModelElement.BUSY_PROPERTY)) {
 				return Display.getCurrent().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
 			}
 		}
@@ -184,8 +152,8 @@
 	 * @return whether the node has descendant conflicts
 	 */
 	private boolean hasDecendantConflicts(DiffNode node) {
-		if(node instanceof SynchronizeModelElement) {
-			return ((SynchronizeModelElement)node).getProperty(SynchronizeModelElement.PROPAGATED_CONFLICT_PROPERTY);
+		if(node instanceof ISynchronizeModelElement) {
+			return ((ISynchronizeModelElement)node).getProperty(ISynchronizeModelElement.PROPAGATED_CONFLICT_PROPERTY);
 		}
 		return false;
 	}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelElementSorter.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElementSorter.java
similarity index 96%
rename from bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelElementSorter.java
rename to bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElementSorter.java
index 7056320..43ce736 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelElementSorter.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelElementSorter.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.team.ui.synchronize.viewers;
+package org.eclipse.team.internal.ui.synchronize;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.jface.viewers.Viewer;
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelProvider.java
index 576117c..3119110 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelProvider.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizeModelProvider.java
@@ -27,7 +27,8 @@
 import org.eclipse.team.internal.core.Assert;
 import org.eclipse.team.internal.ui.Policy;
 import org.eclipse.team.internal.ui.TeamUIPlugin;
-import org.eclipse.team.ui.synchronize.viewers.*;
+import org.eclipse.team.ui.synchronize.viewers.ISynchronizeModelElement;
+import org.eclipse.team.ui.synchronize.viewers.ISynchronizeModelProvider;
 import org.eclipse.ui.progress.UIJob;
 
 /**
@@ -154,7 +155,7 @@
 		/**
 	 * Builds the viewer model based on the contents of the sync set.
 	 */
-	public SynchronizeModelElement prepareInput(IProgressMonitor monitor) {
+	public ISynchronizeModelElement prepareInput(IProgressMonitor monitor) {
 		// Connect to the sync set which will register us as a listener and give us a reset event
 		// in a background thread
 		getSyncInfoSet().connect(this, monitor);
@@ -188,7 +189,7 @@
 	 * {@link #prepareInput(IProgressMonitor)} hasn't been called on this object yet.
 	 * @return
 	 */
-	public SynchronizeModelElement getModelRoot() {
+	public ISynchronizeModelElement getModelRoot() {
 		return root;
 	}
 
@@ -201,8 +202,8 @@
 	 *            the resource
 	 * @return the <code>SyncInfoModelElement</code> for the given resource
 	 */
-	protected SynchronizeModelElement getModelObject(IResource resource) {
-		return (SynchronizeModelElement) resourceMap.get(resource);
+	protected ISynchronizeModelElement getModelObject(IResource resource) {
+		return (ISynchronizeModelElement) resourceMap.get(resource);
 	}
 
 	public void syncInfoChanged(final ISyncInfoSetChangeEvent event, IProgressMonitor monitor) {
@@ -217,7 +218,9 @@
 							BusyIndicator.showWhile(ctrl.getDisplay(), new Runnable() {
 								public void run() {
 									handleChanges((ISyncInfoTreeChangeEvent)event);
-									getModelRoot().fireChanges();
+									ISynchronizeModelElement root = getModelRoot();
+									if(root instanceof SynchronizeModelElement)
+										((SynchronizeModelElement)root).fireChanges();
 								}
 							});
 						}
@@ -232,13 +235,13 @@
 	 * @param node
 	 * @return
 	 */
-	protected abstract IDiffElement[] buildModelObjects(SynchronizeModelElement node);
+	protected abstract IDiffElement[] buildModelObjects(ISynchronizeModelElement node);
 
-	protected abstract void doAdd(SynchronizeModelElement parent, SynchronizeModelElement element);
+	protected abstract void doAdd(ISynchronizeModelElement parent, ISynchronizeModelElement element);
 	
-	protected abstract void doRemove(SynchronizeModelElement element);
+	protected abstract void doRemove(ISynchronizeModelElement element);
 	
-	protected void associateDiffNode(SynchronizeModelElement node) {
+	protected void associateDiffNode(ISynchronizeModelElement node) {
 		IResource resource = node.getResource();
 		if(resource != null) {
 			resourceMap.put(resource, node);
@@ -286,7 +289,7 @@
 	 */
 	protected abstract void handleResourceChanges(ISyncInfoTreeChangeEvent event);
 
-	protected boolean isConflicting(SynchronizeModelElement diffNode) {
+	protected boolean isConflicting(ISynchronizeModelElement diffNode) {
 		return (diffNode.getKind() & SyncInfo.DIRECTION_MASK) == SyncInfo.CONFLICTING;
 	}
 
@@ -308,7 +311,7 @@
 			// remove all from tree viewer
 			IDiffElement[] elements = getModelRoot().getChildren();
 			for (int i = 0; i < elements.length; i++) {
-				doRemove((SynchronizeModelElement)elements[i]);
+				doRemove((ISynchronizeModelElement)elements[i]);
 			}
 			
 			// Rebuild the model
@@ -316,7 +319,10 @@
 			buildModelObjects(getModelRoot());
 			
 			// Notify listeners that model has changed
-			getModelRoot().fireChanges();
+			ISynchronizeModelElement root = getModelRoot();
+			if(root instanceof SynchronizeModelElement) {
+				((SynchronizeModelElement)root).fireChanges();
+			}
 		} finally {
 			refreshViewer = true;
 		}
@@ -337,7 +343,7 @@
 	 * @param resource
 	 */
 	protected void removeFromViewer(IResource resource) {
-		SynchronizeModelElement node = getModelObject(resource);
+		ISynchronizeModelElement node = getModelObject(resource);
 		if (node == null) return;
 		if (isConflicting(node)) {
 			setParentConflict(node, false);
@@ -356,12 +362,12 @@
 	 * @param node
 	 *            the root node
 	 */
-	protected void clearModelObjects(SynchronizeModelElement node) {
+	protected void clearModelObjects(ISynchronizeModelElement node) {
 		IDiffElement[] children = node.getChildren();
 		for (int i = 0; i < children.length; i++) {
 			IDiffElement element = children[i];
-			if (element instanceof SynchronizeModelElement) {
-				clearModelObjects((SynchronizeModelElement) element);
+			if (element instanceof ISynchronizeModelElement) {
+				clearModelObjects((ISynchronizeModelElement) element);
 			}
 		}
 		IResource resource = node.getResource();
@@ -374,7 +380,7 @@
 		}
 	}
 	
-	protected void addToViewer(SynchronizeModelElement node) {
+	protected void addToViewer(ISynchronizeModelElement node) {
 		associateDiffNode(node);
 		node.addPropertyChangeListener(listener);
 		if (isConflicting(node)) {
@@ -406,7 +412,7 @@
 	 * are accumulated and updated in a single call.
 	 * @param diffNode the diff node to be updated
 	 */
-	protected void updateLabel(SynchronizeModelElement diffNode) {
+	protected void updateLabel(ISynchronizeModelElement diffNode) {
 		pendingLabelUpdates.add(diffNode);
 	}
 	
@@ -433,15 +439,15 @@
 		}
 	}
 
-	protected void setParentConflict(SynchronizeModelElement diffNode, boolean value) {
-		diffNode.setPropertyToRoot(SynchronizeModelElement.PROPAGATED_CONFLICT_PROPERTY, value);
+	protected void setParentConflict(ISynchronizeModelElement diffNode, boolean value) {
+		diffNode.setPropertyToRoot(ISynchronizeModelElement.PROPAGATED_CONFLICT_PROPERTY, value);
 		updateParentLabels(diffNode);
 	}
 
-	private void updateParentLabels(SynchronizeModelElement diffNode) {
+	private void updateParentLabels(ISynchronizeModelElement diffNode) {
 		updateLabel(diffNode);
 		while (diffNode.getParent() != null) {
-			diffNode = (SynchronizeModelElement)diffNode.getParent();
+			diffNode = (ISynchronizeModelElement)diffNode.getParent();
 			updateLabel(diffNode);
 		}
 	}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/UnchangedResourceModelElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/UnchangedResourceModelElement.java
similarity index 95%
rename from bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/UnchangedResourceModelElement.java
rename to bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/UnchangedResourceModelElement.java
index a2b17e0..a9f0459 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/UnchangedResourceModelElement.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/UnchangedResourceModelElement.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.team.ui.synchronize.viewers;
+package org.eclipse.team.internal.ui.synchronize;
 
 import org.eclipse.compare.structuremergeviewer.IDiffContainer;
 import org.eclipse.core.resources.IResource;
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/NavigateAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/NavigateAction.java
index 6da1e0f..85f3a14 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/NavigateAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/NavigateAction.java
@@ -18,8 +18,8 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.team.core.synchronize.SyncInfo;
 import org.eclipse.team.internal.ui.Utils;
+import org.eclipse.team.internal.ui.synchronize.SyncInfoModelElement;
 import org.eclipse.team.ui.synchronize.ISynchronizeView;
-import org.eclipse.team.ui.synchronize.viewers.SyncInfoModelElement;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IKeyBindingService;
 import org.eclipse.ui.actions.ActionFactory;
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenInCompareAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenInCompareAction.java
index 0a99a1f..c697b36 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenInCompareAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenInCompareAction.java
@@ -18,10 +18,10 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.team.core.synchronize.SyncInfo;
 import org.eclipse.team.internal.ui.Utils;
+import org.eclipse.team.internal.ui.synchronize.SyncInfoModelElement;
 import org.eclipse.team.ui.synchronize.ISynchronizeParticipant;
 import org.eclipse.team.ui.synchronize.ISynchronizeView;
 import org.eclipse.team.ui.synchronize.viewers.SyncInfoCompareInput;
-import org.eclipse.team.ui.synchronize.viewers.SyncInfoModelElement;
 import org.eclipse.ui.*;
 
 /**
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenWithActionGroup.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenWithActionGroup.java
index 1d1fd9c..31a0e8c 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenWithActionGroup.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/actions/OpenWithActionGroup.java
@@ -16,9 +16,9 @@
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.team.internal.ui.Utils;
+import org.eclipse.team.internal.ui.synchronize.SubscriberParticipantPage;
 import org.eclipse.team.ui.synchronize.ISynchronizeParticipant;
 import org.eclipse.team.ui.synchronize.ISynchronizeView;
-import org.eclipse.team.ui.synchronize.subscriber.SubscriberParticipantPage;
 import org.eclipse.ui.actions.ActionGroup;
 import org.eclipse.ui.actions.OpenWithMenu;
 import org.eclipse.ui.views.navigator.ResourceNavigatorMessages;
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SubscriberParticipant.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SubscriberParticipant.java
index 0733997..e030eae 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SubscriberParticipant.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SubscriberParticipant.java
@@ -19,10 +19,12 @@
 import org.eclipse.team.core.subscribers.SubscriberSyncInfoCollector;
 import org.eclipse.team.core.synchronize.*;
 import org.eclipse.team.internal.ui.*;
+import org.eclipse.team.internal.ui.synchronize.*;
 import org.eclipse.team.internal.ui.synchronize.RefreshUserNotificationPolicy;
 import org.eclipse.team.internal.ui.synchronize.RefreshUserNotificationPolicyInModalDialog;
 import org.eclipse.team.ui.TeamUI;
 import org.eclipse.team.ui.synchronize.*;
+import org.eclipse.team.ui.synchronize.viewers.StructuredViewerAdvisor;
 import org.eclipse.ui.*;
 import org.eclipse.ui.part.IPageBookViewPage;
 
@@ -111,7 +113,7 @@
 	}
 	
 	protected SubscriberParticipantPage doCreatePage(ISynchronizeView view) {
-		return new SubscriberParticipantPage(this, view);
+		return new SubscriberParticipantPage(this, view,  createSynchronizeViewerAdvisor(view));
 	}
 	
 	/* (non-Javadoc)
@@ -235,6 +237,14 @@
 	}
 	
 	/**
+	 * Returns the viewer advisor which will be used to configure the display of the participant.
+	 * @return
+	 */
+	protected StructuredViewerAdvisor createSynchronizeViewerAdvisor(ISynchronizeView view) {
+		return new SynchronizeViewerAdvisor(view, this);
+	}
+	
+	/**
 	 * Get the <code>Subscriber</code> for this participant
 	 * @return a <code>TamSubscriber</code>
 	 */
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SynchronizeViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SynchronizeViewerAdvisor.java
index 1c93d6a..88a3eed 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SynchronizeViewerAdvisor.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SynchronizeViewerAdvisor.java
@@ -16,10 +16,10 @@
 import org.eclipse.jface.viewers.*;
 import org.eclipse.team.internal.ui.Policy;
 import org.eclipse.team.internal.ui.Utils;
+import org.eclipse.team.internal.ui.synchronize.SyncInfoModelElement;
 import org.eclipse.team.internal.ui.synchronize.actions.OpenWithActionGroup;
 import org.eclipse.team.internal.ui.synchronize.actions.RefactorActionGroup;
 import org.eclipse.team.ui.synchronize.ISynchronizeView;
-import org.eclipse.team.ui.synchronize.viewers.SyncInfoModelElement;
 import org.eclipse.team.ui.synchronize.viewers.TreeViewerAdvisor;
 
 /**
@@ -33,7 +33,6 @@
 	private OpenWithActionGroup openWithActions;
 	private RefactorActionGroup refactorActions;
 	private Action refreshSelectionAction;
-	private IToolBarManager toolbarMgr;
 
 	public SynchronizeViewerAdvisor(ISynchronizeView view, SubscriberParticipant participant) {
 		super(participant.getId(), view.getViewSite(), participant.getSubscriberSyncInfoCollector().getSyncInfoTree());
@@ -62,6 +61,10 @@
 		Utils.initAction(refreshSelectionAction, "action.refreshWithRemote."); //$NON-NLS-1$
 	}
 
+	protected ISynchronizeView getSynchronizeView() {
+		return view;
+	}
+	
 	protected void fillContextMenu(StructuredViewer viewer, IMenuManager manager) {
 		openWithActions.fillContextMenu(manager);
 		refactorActions.fillContextMenu(manager);
@@ -69,10 +72,6 @@
 		manager.add(new Separator());
 		super.fillContextMenu(viewer, manager);
 	}
-
-	public void updateToolbar(IToolBarManager mgr) {
-		
-	}
 	
 	/*
 	 * (non-Javadoc)
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/DecoratingColorLabelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/DecoratingColorLabelProvider.java
new file mode 100644
index 0000000..dc1cd6e
--- /dev/null
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/DecoratingColorLabelProvider.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.ui.synchronize.viewers;
+
+import org.eclipse.jface.viewers.*;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+
+/**
+ * Decorating label provider that also support color providers
+ * 
+ * @since 3.0
+ */
+public class DecoratingColorLabelProvider extends DecoratingLabelProvider implements IColorProvider, IFontProvider {
+
+	public DecoratingColorLabelProvider(ILabelProvider provider, ILabelDecorator decorator) {
+		super(provider, decorator);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
+	 */
+	public Color getForeground(Object element) {
+		ILabelProvider p = getLabelProvider();
+		if (p instanceof IColorProvider) {
+			return ((IColorProvider) p).getForeground(element);
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
+	 */
+	public Color getBackground(Object element) {
+		ILabelProvider p = getLabelProvider();
+		if (p instanceof IColorProvider) {
+			return ((IColorProvider) p).getBackground(element);
+		}
+		return null;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
+	 */
+	public Font getFont(Object element) {
+		ILabelProvider p = getLabelProvider();
+		if (p instanceof IFontProvider) {
+			return ((IFontProvider) p).getFont(element);
+		}
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelChangeListener.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelChangeListener.java
index 189aa11..54c00ab 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelChangeListener.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelChangeListener.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.team.ui.synchronize.viewers;
 
+
 /**
  * Listener that gets informed when the model created by the model provider is created or updated.
  * <p>
@@ -23,5 +24,5 @@
 	 *
 	 * @param input the root <code>DiffNode</code> of the model.
 	 */
-	public void modelChanged(SynchronizeModelElement root);
+	public void modelChanged(ISynchronizeModelElement root);
 }
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelElement.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelElement.java
new file mode 100644
index 0000000..1e978d4
--- /dev/null
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelElement.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.team.ui.synchronize.viewers;
+
+import org.eclipse.compare.ITypedElement;
+import org.eclipse.compare.structuremergeviewer.ICompareInput;
+import org.eclipse.compare.structuremergeviewer.IDiffContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.team.internal.ui.TeamUIPlugin;
+
+public interface ISynchronizeModelElement extends IDiffContainer, ITypedElement, ICompareInput {
+
+	public static final String BUSY_PROPERTY = TeamUIPlugin.ID + ".busy"; //$NON-NLS-1$
+	public static final String PROPAGATED_CONFLICT_PROPERTY = TeamUIPlugin.ID + ".conflict"; //$NON-NLS-1$
+
+	public abstract void addPropertyChangeListener(IPropertyChangeListener listener);
+
+	public abstract void removePropertyChangeListener(IPropertyChangeListener listener);
+
+	public void setPropertyToRoot(String propertyName, boolean value);
+	
+	public void setProperty(String propertyName, boolean value);
+	
+	/**
+	 * Return whether this node has the given property set.
+	 * @param propertyName the flag to test
+	 * @return <code>true</code> if the property is set
+	 */
+	public abstract boolean getProperty(String propertyName);
+
+	public abstract ImageDescriptor getImageDescriptor(Object object);
+
+	public abstract IResource getResource();
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelProvider.java
index 63a204a..43e565e 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelProvider.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/ISynchronizeModelProvider.java
@@ -37,7 +37,7 @@
 	/**
 	 * Builds the viewer model based on the contents of the sync set.
 	 */
-	public abstract SynchronizeModelElement prepareInput(IProgressMonitor monitor);
+	public abstract ISynchronizeModelElement prepareInput(IProgressMonitor monitor);
 
 	/**
 	 * The provider can try and return a mapping for the provided object. Providers often use mappings
@@ -61,7 +61,7 @@
 	 * {@link #prepareInput(IProgressMonitor)} hasn't been called on this object yet.
 	 * @return
 	 */
-	public abstract SynchronizeModelElement getModelRoot();
+	public abstract ISynchronizeModelElement getModelRoot();
 
 	public abstract ViewerSorter getViewerSorter();
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/StructuredViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/StructuredViewerAdvisor.java
index 49f9aa3..cd2ed05 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/StructuredViewerAdvisor.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/StructuredViewerAdvisor.java
@@ -25,7 +25,8 @@
 import org.eclipse.team.internal.core.Assert;
 import org.eclipse.team.internal.ui.TeamUIPlugin;
 import org.eclipse.team.internal.ui.Utils;
-import org.eclipse.team.internal.ui.synchronize.SynchronizeModelProvider;
+import org.eclipse.team.internal.ui.synchronize.SynchronizeModelElementLabelProvider;
+import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.internal.PluginAction;
 import org.eclipse.ui.model.BaseWorkbenchContentProvider;
@@ -77,7 +78,7 @@
 	// in the viewer.
 	private SyncInfoSet set;
 	private StructuredViewer viewer;
-	private SynchronizeModelProvider modelProvider;
+	private ISynchronizeModelProvider modelProvider;
 	
 	// Listeners for model changes
 	private ListenerList listeners;
@@ -271,7 +272,16 @@
 	 * @param viewer the viewer in which the context menu is being shown.
 	 * @param manager the menu manager to which actions can be added.
 	 */
-	protected void fillContextMenu(final StructuredViewer viewer, IMenuManager manager) {
+	protected void fillContextMenu(StructuredViewer viewer, IMenuManager manager) {
+	}
+	
+	/**
+	 * Allows the advisor to make contributions to the given action bars. Note that some of the 
+	 * items in the action bar may not be accessible.
+	 * 
+	 * @param actionBars the toolbar manager to which to add actions.
+	 */
+	public void setActionBars(IActionBars actionBars) {	
 	}
 	
 	/**
@@ -303,7 +313,7 @@
 	 * for the adviser's viewer.
 	 * @return the model provider
 	 */
-	protected abstract SynchronizeModelProvider getModelProvider();
+	protected abstract ISynchronizeModelProvider getModelProvider();
 	
 	
 	/**
@@ -442,12 +452,14 @@
 	protected final void setInput(StructuredViewer viewer) {
 		modelProvider.setViewer(viewer);
 		viewer.setSorter(modelProvider.getViewerSorter());
-		DiffNode input = modelProvider.getModelRoot();
-		input.addCompareInputChangeListener(new ICompareInputChangeListener() {
-			public void compareInputChanged(ICompareInput source) {
-				fireChanges();
-			}
-		});
+		ISynchronizeModelElement input = modelProvider.getModelRoot();
+		if (input instanceof DiffNode) {
+			((DiffNode) input).addCompareInputChangeListener(new ICompareInputChangeListener() {
+				public void compareInputChanged(ICompareInput source) {
+					fireChanges();
+				}
+			});
+		}
 		viewer.setInput(modelProvider.getModelRoot());
 	}
 	
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoCompareInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoCompareInput.java
index e3c9c9f..02ac0fc 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoCompareInput.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SyncInfoCompareInput.java
@@ -24,6 +24,7 @@
 import org.eclipse.team.core.synchronize.SyncInfo;
 import org.eclipse.team.internal.core.Assert;
 import org.eclipse.team.internal.ui.*;
+import org.eclipse.team.internal.ui.synchronize.*;
 import org.eclipse.team.internal.ui.synchronize.LocalResourceTypedElement;
 import org.eclipse.team.ui.ISharedImages;
 import org.eclipse.ui.*;
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeCompareInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeCompareInput.java
index b3d6fb7..22a5711 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeCompareInput.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeCompareInput.java
@@ -19,8 +19,7 @@
 import org.eclipse.compare.structuremergeviewer.IDiffElement;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.*;
-import org.eclipse.jface.action.Separator;
-import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.action.*;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.swt.SWT;
@@ -29,8 +28,10 @@
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.internal.ui.Utils;
 import org.eclipse.team.internal.ui.synchronize.LocalResourceTypedElement;
+import org.eclipse.team.internal.ui.synchronize.SyncInfoModelElement;
 import org.eclipse.team.ui.ISharedImages;
 import org.eclipse.team.ui.TeamImages;
+import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.progress.IProgressService;
 
@@ -182,6 +183,8 @@
 			tbm.removeAll();
 			tbm.add(new Separator("navigation")); //$NON-NLS-1$
 			contributeToToolBar(tbm);
+			IActionBars bars = getActionBars(tbm);
+			getViewerConfiguration().setActionBars(bars);
 			tbm.update(true);
 		}
 	}
@@ -216,10 +219,10 @@
 	 */
 	public void saveChanges(IProgressMonitor pm) throws CoreException {
 		super.saveChanges(pm);
-		SynchronizeModelElement root = (SynchronizeModelElement)diffViewerConfiguration.getViewer().getInput();
-		if (root != null) {
+		ISynchronizeModelElement root = (ISynchronizeModelElement)diffViewerConfiguration.getViewer().getInput();
+		if (root != null && root instanceof DiffNode) {
 			try {
-				commit(pm, root);
+				commit(pm, (DiffNode)root);
 			} finally {
 				setDirty(false);
 			}
@@ -273,4 +276,27 @@
 	public boolean isBuffered() {
 		return buffered;
 	}
+	
+	private IActionBars getActionBars(final IToolBarManager toolbar) {
+		return new IActionBars() {
+			public void clearGlobalActionHandlers() {
+			}
+			public IAction getGlobalActionHandler(String actionId) {
+				return null;
+			}
+			public IMenuManager getMenuManager() {
+				return null;
+			}
+			public IStatusLineManager getStatusLineManager() {
+				return null;
+			}
+			public IToolBarManager getToolBarManager() {
+				return toolbar;
+			}
+			public void setGlobalActionHandler(String actionId, IAction handler) {
+			}
+			public void updateActionBars() {
+			}
+		};
+	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SubscriberAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelAction.java
similarity index 89%
rename from bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SubscriberAction.java
rename to bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelAction.java
index 20f799f..20aeeac 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SubscriberAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelAction.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.team.ui.synchronize.subscriber;
+package org.eclipse.team.ui.synchronize.viewers;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
@@ -20,24 +20,24 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.team.core.synchronize.*;
 import org.eclipse.team.internal.ui.Utils;
-import org.eclipse.team.ui.synchronize.viewers.SyncInfoModelElement;
+import org.eclipse.team.internal.ui.synchronize.SyncInfoModelElement;
 import org.eclipse.ui.*;
 
 /**
  * This action provides utilities for performing operations on selections that
  * are obtained from a view populated by a 
  * {@link org.eclipse.team.ui.synchronize.viewers.SynchronizeModelProvider}.
- * The {@link org.eclipse.team.ui.synchronize.subscriber.SubscriberParticipantPage} is an example of such a view.
+ * The {@link org.eclipse.team.internal.ui.synchronize.SubscriberParticipantPage} is an example of such a view.
  * Subclasses can use this support to filter the selection in order to 
- * determine action enablement and generate the input for a {@link SubscriberOperation}.
+ * determine action enablement and generate the input for a {@link SynchronizeModelOperation}.
  * @see SyncInfo
  * @see SyncInfoSet
  * @see org.eclipse.team.ui.synchronize.viewers.SynchronizeModelProvider
- * @see org.eclipse.team.ui.synchronize.subscriber.SubscriberParticipantPage
- * @see org.eclipse.team.ui.synchronize.subscriber.SubscriberOperation
+ * @see org.eclipse.team.internal.ui.synchronize.SubscriberParticipantPage
+ * @see org.eclipse.team.ui.synchronize.viewers.SynchronizeModelOperation
  * @since 3.0
  */
-public abstract class SubscriberAction implements IObjectActionDelegate, IViewActionDelegate, IEditorActionDelegate {
+public abstract class SynchronizeModelAction implements IObjectActionDelegate, IViewActionDelegate, IEditorActionDelegate {
 	
 	private IStructuredSelection selection;
 	private IWorkbenchPart part;
@@ -61,11 +61,11 @@
 	 * Return the subscriber operation associated with this action. This operation
 	 * will be run when the action is run. Subclass may implement this method and provide 
 	 * an operation subclass or may override the <code>run(IAction)</code> method directly
-	 * if they choose not to implement a <code>SubscriberOperation</code>.
+	 * if they choose not to implement a <code>SynchronizeModelOperation</code>.
 	 * @param elements the selected diff element for which this action is enabled.
 	 * @return the subscriber operation to be run by this action.
 	 */
-	protected abstract SubscriberOperation getSubscriberOperation(IWorkbenchPart part, IDiffElement[] elements);
+	protected abstract SynchronizeModelOperation getSubscriberOperation(IWorkbenchPart part, IDiffElement[] elements);
 	
 	/** 
 	 * Generic error handling code that uses an error dialog to show the error to the 
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SubscriberOperation.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelOperation.java
similarity index 80%
rename from bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SubscriberOperation.java
rename to bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelOperation.java
index 0d1aee2..a08fdf4 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/subscriber/SubscriberOperation.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/SynchronizeModelOperation.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.team.ui.synchronize.subscriber;
+package org.eclipse.team.ui.synchronize.viewers;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -17,23 +17,22 @@
 import org.eclipse.core.runtime.jobs.IJobChangeEvent;
 import org.eclipse.team.core.synchronize.SyncInfo;
 import org.eclipse.team.core.synchronize.SyncInfoSet;
-import org.eclipse.team.ui.*;
-import org.eclipse.team.ui.synchronize.viewers.SyncInfoModelElement;
-import org.eclipse.team.ui.synchronize.viewers.SynchronizeModelElement;
+import org.eclipse.team.internal.ui.synchronize.SyncInfoModelElement;
+import org.eclipse.team.ui.TeamOperation;
 import org.eclipse.ui.IWorkbenchPart;
 
 /**
  * A subscriber operation provides access to a {@link SyncInfoSet} containing
- * the selection from a {@link SubscriberAction}.
- * When used in conjuntion with a {@link SubscriberAction}, the selected
+ * the selection from a {@link SynchronizeModelAction}.
+ * When used in conjuntion with a {@link SynchronizeModelAction}, the selected
  * elements in the view will show busy indication if this 
  * operation is run as a job.
  * 
  * @see SyncInfoSet
- * @see SubscriberAction
+ * @see SynchronizeModelAction
  * @since 3.0
  */
-public abstract class SubscriberOperation extends TeamOperation {
+public abstract class SynchronizeModelOperation extends TeamOperation {
 	
 	private IDiffElement[] elements;
 	
@@ -43,7 +42,7 @@
 	 * {@link org.eclipse.team.ui.synchronize.viewers.SynchronizeModelProvider}.
 	 * @param elements
 	 */
-	protected SubscriberOperation(IWorkbenchPart part, IDiffElement[] elements) {
+	protected SynchronizeModelOperation(IWorkbenchPart part, IDiffElement[] elements) {
 		super(part);
 		this.elements = elements;
 	}
@@ -75,8 +74,8 @@
 	private void markBusy(IDiffElement[] elements, boolean isBusy) {
 		for (int i = 0; i < elements.length; i++) {
 			IDiffElement element = elements[i];
-			if (element instanceof SynchronizeModelElement) {
-				((SynchronizeModelElement)element).setPropertyToRoot(SynchronizeModelElement.BUSY_PROPERTY, isBusy);
+			if (element instanceof ISynchronizeModelElement) {
+				((ISynchronizeModelElement)element).setPropertyToRoot(ISynchronizeModelElement.BUSY_PROPERTY, isBusy);
 			}
 		}
 	}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/TreeViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/TreeViewerAdvisor.java
index db098cf..32f611d 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/TreeViewerAdvisor.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/viewers/TreeViewerAdvisor.java
@@ -19,7 +19,8 @@
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.core.synchronize.SyncInfoTree;
 import org.eclipse.team.internal.ui.*;
-import org.eclipse.team.internal.ui.synchronize.*;
+import org.eclipse.team.internal.ui.synchronize.CompressedFoldersModelProvider;
+import org.eclipse.team.internal.ui.synchronize.HierarchicalModelProvider;
 import org.eclipse.team.internal.ui.synchronize.actions.ExpandAllAction;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.eclipse.ui.IWorkbenchPartSite;
@@ -164,7 +165,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.team.ui.synchronize.viewers.StructuredViewerAdvisor#getDiffNodeController()
 	 */
-	protected SynchronizeModelProvider getModelProvider() {
+	protected ISynchronizeModelProvider getModelProvider() {
 		if(getShowCompressedFolders()) {
 			return new CompressedFoldersModelProvider((SyncInfoTree)getSyncInfoSet());
 		}
diff --git a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/SynchronizeViewTestAdapter.java b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/SynchronizeViewTestAdapter.java
index 7fc692f..5937a44 100644
--- a/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/SynchronizeViewTestAdapter.java
+++ b/tests/org.eclipse.team.tests.cvs.core/src/org/eclipse/team/tests/ccvs/ui/SynchronizeViewTestAdapter.java
@@ -20,27 +20,17 @@
 import org.eclipse.team.core.TeamException;
 import org.eclipse.team.core.subscribers.Subscriber;
 import org.eclipse.team.core.subscribers.SubscriberSyncInfoCollector;
-import org.eclipse.team.core.synchronize.SyncInfo;
-import org.eclipse.team.core.synchronize.SyncInfoSet;
-import org.eclipse.team.core.synchronize.SyncInfoTree;
-import org.eclipse.team.internal.ccvs.core.CVSCompareSubscriber;
-import org.eclipse.team.internal.ccvs.core.CVSMergeSubscriber;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
+import org.eclipse.team.core.synchronize.*;
+import org.eclipse.team.internal.ccvs.core.*;
 import org.eclipse.team.internal.ccvs.ui.subscriber.CompareParticipant;
 import org.eclipse.team.internal.ccvs.ui.subscriber.MergeSynchronizeParticipant;
 import org.eclipse.team.internal.ui.TeamUIPlugin;
-import org.eclipse.team.internal.ui.synchronize.SynchronizeModelProvider;
-import org.eclipse.team.internal.ui.synchronize.SynchronizeView;
+import org.eclipse.team.internal.ui.synchronize.*;
 import org.eclipse.team.tests.ccvs.core.EclipseTest;
 import org.eclipse.team.tests.ccvs.core.subscriber.SyncInfoSource;
 import org.eclipse.team.ui.TeamUI;
-import org.eclipse.team.ui.synchronize.ISynchronizeManager;
-import org.eclipse.team.ui.synchronize.ISynchronizeParticipant;
-import org.eclipse.team.ui.synchronize.ISynchronizeView;
+import org.eclipse.team.ui.synchronize.*;
 import org.eclipse.team.ui.synchronize.subscriber.SubscriberParticipant;
-import org.eclipse.team.ui.synchronize.subscriber.SubscriberParticipantPage;
-import org.eclipse.team.ui.synchronize.viewers.SyncInfoModelElement;
-import org.eclipse.team.ui.synchronize.viewers.SynchronizeModelElement;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.part.IPage;
@@ -204,7 +194,7 @@
 			IPage page = ((SynchronizeView)view).getPage(participant);
 			if (page instanceof SubscriberParticipantPage) {
 				SubscriberParticipantPage subscriberPage = (SubscriberParticipantPage)page;
-				ISelection selection = subscriberPage.getViewerAdviser().getSelection(new Object[] { resource });
+				ISelection selection = subscriberPage.getViewerAdvisor().getSelection(new Object[] { resource });
 				if (!selection.isEmpty() && selection instanceof StructuredSelection) {
 					StructuredSelection ss = (StructuredSelection)selection;
 					Object o = ss.getFirstElement();