*** empty log message ***
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java
index 323fd18..7a15f5a 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/TeamUIPlugin.java
@@ -143,15 +143,14 @@
 	 */
 	protected void initializePreferences() {
 		IPreferenceStore store = getPreferenceStore();
-		store.setDefault(IPreferenceIds.SYNCVIEW_BACKGROUND_SYNC, false);
+		store.setDefault(IPreferenceIds.SYNCVIEW_BACKGROUND_SYNC, true);
 		store.setDefault(IPreferenceIds.SYNCVIEW_SCHEDULED_SYNC, false);
 		store.setDefault(IPreferenceIds.SYNCVIEW_DELAY, 60 /* minutes */);
-		store.setDefault(IPreferenceIds.SYNCVIEW_COMPRESS_FOLDERS, false);
+		store.setDefault(IPreferenceIds.SYNCVIEW_COMPRESS_FOLDERS, true);
 		store.setDefault(IPreferenceIds.SYNCVIEW_VIEW_TABLESORT, SyncViewerTableSorter.COL_NAME);
 		store.setDefault(IPreferenceIds.SYNCVIEW_VIEW_TABLESORT_REVERSED, false);
 		store.setDefault(IPreferenceIds.TESTING_SYNCVIEW, false);
-		store.setDefault(IPreferenceIds.SYNCVIEW_BACKGROUND_SYNC, false);
-		store.setDefault(IPreferenceIds.SYNCVIEW_DEFAULT_PERSPECTIVE, "org.eclipse.team.internal.ui.sync.views.TeamSynchronizingPerspective");
+		store.setDefault(IPreferenceIds.SYNCVIEW_DEFAULT_PERSPECTIVE, "org.eclipse.team.internal.ui.sync.views.TeamSynchronizingPerspective"); //$NON-NLS-1$
 	}
 	
 	/**
@@ -193,6 +192,7 @@
 		refreshJob = new RefreshSubscriberInputJob(Policy.bind("ScheduledSyncViewRefresh.taskName")); //$NON-NLS-1$		
 		refreshJob.setRefreshInterval(getPreferenceStore().getInt(IPreferenceIds.SYNCVIEW_DELAY) * 60);
 		if(getPreferenceStore().getBoolean(IPreferenceIds.SYNCVIEW_SCHEDULED_SYNC)) {
+			refreshJob.setRestartOnCancel(true);
 			refreshJob.setReschedule(true);
 			// start once the platform has started and stabilized
 			refreshJob.schedule(20000 /* 20 seconds */);
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/jobs/RefreshSubscriberJob.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/jobs/RefreshSubscriberJob.java
index 220bc16..2b30396 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/jobs/RefreshSubscriberJob.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/jobs/RefreshSubscriberJob.java
@@ -84,7 +84,7 @@
 		this.subscriber = subscriber;
 		
 		setPriority(Job.DECORATE);
-		setRule(new BatchSimilarSchedulingRule("org.eclipse.team.core.refreshsubscribers"));
+		setRule(new BatchSimilarSchedulingRule("org.eclipse.team.core.refreshsubscribers")); //$NON-NLS-1$
 		
 		addJobChangeListener(new JobChangeAdapter() {
 			public void done(IJobChangeEvent event) {
@@ -116,16 +116,16 @@
 	 * and it will continue to refresh the other subscribers.
 	 */
 	public IStatus run(IProgressMonitor monitor) {		
-		MultiStatus status = new MultiStatus(TeamPlugin.ID, TeamException.UNABLE, Policy.bind("Team.errorRefreshingSubscribers"), null);
+		MultiStatus status = new MultiStatus(TeamPlugin.ID, TeamException.UNABLE, Policy.bind("Team.errorRefreshingSubscribers"), null); //$NON-NLS-1$
 		TeamSubscriber subscriber = getSubscriber();
 		IResource[] roots = getResources();
 		
 		// if there are no resources to refresh, just return
-		if(subscriber == null || resources == null) {
+		if(subscriber == null || roots == null) {
 			return Status.OK_STATUS;
 		}
 				
-		monitor.beginTask(Policy.bind("RefreshSubscriber.runTitle", subscriber.getName()), 100);
+		monitor.beginTask(Policy.bind("RefreshSubscriber.runTitle", subscriber.getName()), 100); //$NON-NLS-1$
 		try {
 			lastTimeRun = System.currentTimeMillis();
 			TeamSubscriber[] subscribers = new TeamSubscriber[] {subscriber};
@@ -135,7 +135,7 @@
 					return Status.CANCEL_STATUS;
 				}
 				try {					
-					monitor.setTaskName(Policy.bind("RefreshSubscriber.runTitleSubscriber", s.getName()));
+					monitor.setTaskName(s.getName());
 					s.refresh(roots, IResource.DEPTH_INFINITE, Policy.subMonitorFor(monitor, 100));
 				} catch(TeamException e) {
 					status.merge(e.getStatus());
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties
index 9b9c8d0..91fedb8 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/messages.properties
@@ -382,3 +382,8 @@
 action.changeFilterShowAdditions.label=Show Additions
 action.changeFilterShowDeletions.label=Show Deletions
 action.changeFilterShowChanges.label=Show Changes
+
+SynchronizeView.12=One item selected
+SynchronizeView.13=\ items selected
+SynchronizeView.14=Error opening perspective
+SynchronizeView.16=Error opening view
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/SyncViewerPreferencePage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/SyncViewerPreferencePage.java
index bb2dc25..0337eb8 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/SyncViewerPreferencePage.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/preferences/SyncViewerPreferencePage.java
@@ -22,7 +22,10 @@
 import org.eclipse.jface.preference.IntegerFieldEditor;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.team.internal.ui.IPreferenceIds;
@@ -44,6 +47,8 @@
 	private IntegerFieldEditor2 scheduledDelay = null;
 	private BooleanFieldEditor compressFolders = null;
 	private BooleanFieldEditor useBothMode = null;
+
+	private Group refreshGroup;
 	
 	private static class PerspectiveDescriptorComparator implements Comparator {
 		/*
@@ -60,6 +65,13 @@
 	}
 	
 	class IntegerFieldEditor2 extends IntegerFieldEditor {
+			/* (non-Javadoc)
+			 * @see org.eclipse.jface.preference.FieldEditor#createControl(org.eclipse.swt.widgets.Composite)
+			 */
+			protected void createControl(Composite parent) {
+				super.createControl(parent);
+			}
+
 			public IntegerFieldEditor2(String name, String labelText, Composite parent, int size) {
 				super(name, labelText, parent, size);
 			}
@@ -112,7 +124,6 @@
 	public SyncViewerPreferencePage() {
 		super(GRID);
 		setTitle("Synchronize view preferences");
-		setDescription("Preferences for the Synchronize view");
 		setPreferenceStore(TeamUIPlugin.getPlugin().getPreferenceStore());
 	}
 
@@ -129,27 +140,31 @@
 	 */
 	public void createFieldEditors() {
 		
-		bkgRefresh = new BooleanFieldEditor(SYNCVIEW_BACKGROUND_SYNC, "Refresh with the remote resources in the background", SWT.NONE, getFieldEditorParent());
-		addField(bkgRefresh);
-		
-		bkgScheduledRefresh = new BooleanFieldEditor(SYNCVIEW_SCHEDULED_SYNC, "Enable a background task to refresh with remote resources", SWT.NONE, getFieldEditorParent());
-		addField(bkgScheduledRefresh);
-		
-		scheduledDelay = new IntegerFieldEditor2(SYNCVIEW_DELAY, "How often should the background refresh run? (in minutes)", getFieldEditorParent(), 2);
-		addField(scheduledDelay);
-		
-		updateLastRunTime(new Label(getFieldEditorParent(), SWT.NONE));
-		
-		compressFolders = new BooleanFieldEditor(SYNCVIEW_COMPRESS_FOLDERS, "Compress in-sync folder paths when using the tree view", SWT.NONE, getFieldEditorParent());
+		GridData data;
+		Group displayGroup = createGroup(getFieldEditorParent(), "Display"); 		
+
+		compressFolders = new BooleanFieldEditor(SYNCVIEW_COMPRESS_FOLDERS, "Compress in-sync folder paths when using the tree view", SWT.NONE, displayGroup);
 		addField(compressFolders);
 		
-		useBothMode = new BooleanFieldEditor(SYNCVIEW_USEBOTHMODE, "Use incoming/outgoing mode when synchronizing", SWT.NONE, getFieldEditorParent());
+		useBothMode = new BooleanFieldEditor(SYNCVIEW_USEBOTHMODE, "Use incoming/outgoing mode when synchronizing", SWT.NONE, displayGroup);
 		addField(useBothMode);
+
+		refreshGroup = createGroup(getFieldEditorParent(), "Refreshing with Remote");
 		
-		Label perspectiveSwitchDescription = new Label(getFieldEditorParent(), SWT.WRAP);
-		perspectiveSwitchDescription.setText(Policy.bind("SynchronizationViewPreference.defaultPerspectiveDescription")); //$NON-NLS-1$
+		bkgRefresh = new BooleanFieldEditor(SYNCVIEW_BACKGROUND_SYNC, "Refresh with the remote resources in the background", SWT.NONE, refreshGroup);
+		addField(bkgRefresh);
 		
-		new Label(getFieldEditorParent(), SWT.NONE);
+		bkgScheduledRefresh = new BooleanFieldEditor(SYNCVIEW_SCHEDULED_SYNC, "Enable a background task to refresh with remote resources", SWT.NONE, refreshGroup);
+		addField(bkgScheduledRefresh);
+		
+		scheduledDelay = new IntegerFieldEditor2(SYNCVIEW_DELAY, "How often should the background refresh run? (in minutes)", refreshGroup, 2);
+		addField(scheduledDelay);
+				
+		updateLastRunTime(createLabel(refreshGroup, null, 0));
+									
+		Group perspectiveGroup = createGroup(getFieldEditorParent(), "Perspective Switching");
+		
+		createLabel(perspectiveGroup, Policy.bind("SynchronizationViewPreference.defaultPerspectiveDescription"), 1); //$NON-NLS-1$
 		
 		handleDeletedPerspectives();
 		String[][] perspectiveNamesAndIds = getPerspectiveNamesAndIds();
@@ -157,11 +172,52 @@
 			SYNCVIEW_DEFAULT_PERSPECTIVE,
 			Policy.bind("SynchronizationViewPreference.defaultPerspectiveLabel"), //$NON-NLS-1$
 			perspectiveNamesAndIds,
-			getFieldEditorParent());
+			perspectiveGroup);
 		addField(comboEditor);
-	
+
+		updateLayout(displayGroup);
+		updateLayout(perspectiveGroup);
+		updateLayout(refreshGroup);
+		getFieldEditorParent().layout(true);	
 	}
 	
+	private Label createLabel(Composite parent, String title, int spacer) {
+		GridData data;
+		Label l = new Label(parent, SWT.WRAP);
+		data = new GridData();
+		data.horizontalSpan = 2;
+		if(spacer != 0) {
+			data.verticalSpan = spacer;
+		}
+		data.horizontalAlignment = GridData.FILL;		
+		l.setLayoutData(data);
+		if(title != null) {
+			l.setText(title); //$NON-NLS-1$
+		}
+		return l;
+	}
+
+	private Group createGroup(Composite parent, String title) {
+		Group display = new Group(parent, SWT.NONE);
+		updateLayout(display);
+		GridData data = new GridData();
+		data.horizontalSpan = 2;
+		data.horizontalAlignment = GridData.FILL;
+		display.setLayoutData(data);						
+		display.setText(title);
+		return display;
+	}
+	
+	private void updateLayout(Composite composite) {
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.marginWidth = 5;
+		layout.marginHeight =5;
+		layout.horizontalSpacing = 5;
+		layout.verticalSpacing = 5;
+		composite.setLayout(layout);
+	}
+
 	private void updateLastRunTime(Label label) {
 		String text;
 		long mills = TeamUIPlugin.getPlugin().getRefreshJob().getLastTimeRun();
@@ -210,7 +266,7 @@
 
 	protected void updateEnablements() {
 		boolean enabled = bkgScheduledRefresh.getBooleanValue();
-		scheduledDelay.setEnabled(enabled, getFieldEditorParent());
+		scheduledDelay.setEnabled(enabled, refreshGroup);
 		scheduledDelay.refreshValidState();
 	}
 	
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SyncInfoStatistics.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SyncInfoStatistics.java
new file mode 100644
index 0000000..2b9e16c
--- /dev/null
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SyncInfoStatistics.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * 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.internal.ui.sync.sets;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.team.core.subscribers.SyncInfo;
+
+/**
+ * Counts SyncInfo states and allows for easy querying for different sync states.
+ */
+public class SyncInfoStatistics {
+	//	{int sync kind -> int number of infos with that sync kind in this sync set}
+	protected Map stats = new HashMap();
+
+	/**
+	 * Count this sync kind. Only the type of the sync info is stored.
+	 * @param info the new info
+	 */
+	public void add(SyncInfo info) {
+		// update statistics
+		Long count = (Long)stats.get(new Integer(info.getKind()));
+		if(count == null) {
+			count = new Long(0);
+		}
+		stats.put(new Integer(info.getKind()), new Long(count.longValue() + 1));
+	}
+	
+	/**
+	 * Remove this sync kind.
+	 * @param info the info type to remove 
+	 */	
+	public void remove(SyncInfo info) {
+		// update stats
+		Integer kind = new Integer(info.getKind());
+		Long count = (Long)stats.get(kind);
+		if(count == null) {
+			// error condition, shouldn't be removing if we haven't added yet
+			// programmer error calling remove before add.			
+		} else {						
+			long newCount = count.intValue() - 1;
+			if(newCount > 0) {
+				stats.put(kind, new Long(newCount));
+			} else {
+				stats.remove(kind);
+			}
+		}
+	}
+	
+	/**
+	 * Return the count of sync infos for the specified sync kind. A mask can be used to acucmulate
+	 * counts for specific directions or change types.
+	 * To return the number of outgoing changes:
+	 * 	long outgoingChanges = stats.countFor(SyncInfo.OUTGOING, SyncInfo.DIRECTION_MASK);
+	 *  
+	 * @param kind the sync kind for which to return the count
+	 * @param mask the mask applied to the stored sync kind
+	 * @return the number of sync info types added for the specific kind
+	 */
+	public long countFor(int kind, int mask) {
+		if(mask == 0) {
+			Long count = (Long)stats.get(new Integer(kind));
+			return count == null ? 0 : count.longValue();
+		} else {
+			Iterator it = stats.keySet().iterator();
+			long count = 0;
+			while (it.hasNext()) {
+				Integer key = (Integer) it.next();
+				if((key.intValue() & mask) != 0) {
+					count += ((Integer)stats.get(key)).intValue();
+				}
+			}
+			return count;
+		}
+	}
+
+	/**
+	 * Clear the statistics counts. All calls to countFor() will return 0 until new
+	 * sync infos are added.
+	 */
+	public void clear() {
+		stats.clear();
+	}
+	
+	/**
+	 * For debugging
+	 */
+	public String toString() {
+		StringBuffer out = new StringBuffer();
+		Iterator it = stats.keySet().iterator();
+		while (it.hasNext()) {
+			Integer kind = (Integer) it.next();
+			out.append(SyncInfo.kindToString(kind.intValue()) + ": " + ((Long)stats.get(kind)) + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return out.toString();
+	}
+}
\ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SyncSet.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SyncSet.java
index 8cd0932..01d186a 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SyncSet.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/sets/SyncSet.java
@@ -21,9 +21,7 @@
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.team.core.TeamException;
 import org.eclipse.team.core.subscribers.SyncInfo;
-import org.eclipse.team.internal.ui.TeamUIPlugin;
 
 /**
  * This class keeps track of a set of resources that are associated with 
@@ -43,16 +41,14 @@
 	protected SyncSetChangedEvent changes;
 	protected Set listeners = new HashSet();
 	
-	//	{int sync kind -> int number of infos with that sync kind in this sync set}
-	protected Map stats = new HashMap();
-
+	protected SyncInfoStatistics statistics = new SyncInfoStatistics();
+	
 	public SyncSet() {
 		resetChanges();
 	}
 	
 	protected void resetChanges() {
 		changes = new SyncSetChangedEvent(this);
-		stats.clear();
 	}
 
 	protected void fireChanges() {
@@ -95,24 +91,19 @@
 	private void internalAddSyncInfo(SyncInfo info) {
 		IResource local = info.getLocal();
 		IPath path = local.getFullPath();
-		resources.put(path, info);
-	}
-
-	public int getCount(int directionFlag) {
-		Integer count = (Integer)stats.get(new Integer(directionFlag));
-		if(count == null) {
-			return 0;
+		if(resources.put(path, info) == null) {
+			statistics.add(info);
 		}
-		return count.intValue();
 	}
 
 	protected void remove(IResource local) {
 		IPath path = local.getFullPath();
-		resources.remove(path);
+		SyncInfo info = (SyncInfo)resources.remove(path);
 		changes.removed(local);
+		statistics.remove(info);
 		removeFromParents(local, local);
 	}
-	
+
 	protected void changed(SyncInfo info) {
 		internalAddSyncInfo(info);
 		changes.changed(info);
@@ -123,9 +114,9 @@
 	 */
 	public void reset() {
 		resources.clear();
-		stats.clear();
 		parents.clear();
 		changes.reset();
+		statistics.clear();
 	}
 	
 	protected boolean addToParents(IResource resource, IResource parent) {
@@ -308,4 +299,8 @@
 	public int size() {
 		return resources.size();		
 	}
+	
+	public SyncInfoStatistics getStatistics() {
+		return statistics;
+	}
 }
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/SynchronizeView.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/SynchronizeView.java
index 246893a..8fd441f 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/SynchronizeView.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/SynchronizeView.java
@@ -29,7 +29,6 @@
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.operation.IRunnableContext;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
@@ -236,6 +235,9 @@
 		});
 		updateTitle();
 	}
+	/**
+	 * Toggles between labe/tree/table viewers. 
+	 */
 	public void switchViewerType(int viewerType) {
 		if(viewer == null || viewerType != currentViewType) {
 			if (composite == null || composite.isDisposed()) return;
@@ -329,8 +331,6 @@
 		viewImage = image;
 		fireSafePropertyChange(IWorkbenchPart.PROP_TITLE);
 	}
-
-
 	
 	protected void createViewer(Composite parent) {		
 		if(input == null) {
@@ -457,11 +457,8 @@
 		};
 		initializeSubscriberInput(input);
 	}
-	
-	
-
 	/*
-	 * Live Synchronize - {showing N of M changes} {Subscriber name}
+	 * Synchronize - (showing N of M changes) - {Subscriber name}
 	 */
 	protected void updateTitle() {
 		Display.getDefault().asyncExec(new Runnable() {
@@ -478,29 +475,17 @@
 							changesText = Policy.bind("LiveSyncView.titleChangeNumbers",  //$NON-NLS-1$
 															new Long(statusInformation.getNumShowing()).toString(),
 															new Long(statusInformation.getNumInWorkingSet()).toString(), 
-															new Long(statusInformation.getNumInWorkspace()).toString());
+															new Long(statusInformation.getNumInWorkspace() - statusInformation.getNumInWorkingSet()).toString());
 						} else {
 							changesText = Policy.bind("LiveSyncView.titleChangeNumbersNoWorkingSet",  //$NON-NLS-1$
 																					new Long(statusInformation.getNumShowing()).toString(),
 																					new Long(statusInformation.getNumInWorkingSet()).toString());
 						}
-					 	setTitle(
-					 		Policy.bind("LiveSyncView.titleWithSubscriber", new String[] { //$NON-NLS-1$
-					 				Policy.bind("LiveSyncView.title"),  //$NON-NLS-1$
-					 				changesText,
-					 				subscriber.getName()}));
-					 	IWorkingSet ws = input.getWorkingSet();
-					 	if(ws != null) {
-					 		StringBuffer s = new StringBuffer(Policy.bind("LiveSyncView.titleTooltip", subscriber.getDescription(), ws.getName())); //$NON-NLS-1$
-					 		IResource[] roots = input.workingSetRoots();
-					 		for (int i = 0; i < roots.length; i++) {
-								IResource resource = roots[i];
-								s.append(resource.getFullPath().toString() + "\n"); //$NON-NLS-1$
-							}
-					 		setTitleToolTip(s.toString());
-					 	} else {
-						 	setTitleToolTip(subscriber.getDescription());
-					 	}
+					 	String title = Policy.bind("LiveSyncView.titleWithSubscriber", new String[] {Policy.bind("LiveSyncView.title"), changesText, subscriber.getName()});  //$NON-NLS-1$ //$NON-NLS-2$
+					 	setTitle(title);
+					 	StringBuffer b = new StringBuffer(title + "\n"); //$NON-NLS-1$
+					 	b.append(input.getSubscriberSyncSet().getStatistics().toString());
+					 	setTitleToolTip(b.toString());					 	
 					}
 				} else {
 					setTitle(Policy.bind("LiveSyncView.title")); //$NON-NLS-1$
@@ -509,7 +494,9 @@
 			}
 		});
 	}
-
+	
+	
+	
 	/**
 	 * Passing the focus request to the viewer's control.
 	 */
@@ -553,27 +540,13 @@
 
 	public void run(IRunnableWithProgress runnable) {
 		try {
-			getRunnableContext().run(true, true, runnable);
+			PlatformUI.getWorkbench().getActiveWorkbenchWindow().run(true, true, runnable);
 		} catch (InvocationTargetException e) {
 			handle(getSite().getShell(), e, null, null);
 		} catch (InterruptedException e) {
 			// Nothing to be done
 		}
 	}
-	
-	/**
-	 * Returns the runnableContext.
-	 * @return IRunnableContext
-	 */
-	private IRunnableContext getRunnableContext() {
-		return PlatformUI.getWorkbench().getActiveWorkbenchWindow();									
-	}
-	
-	private boolean hasRunnableContext() {
-		return getRunnableContext() != null;
-	}
-	
-
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.IViewPart#saveState(org.eclipse.ui.IMemento)
@@ -722,13 +695,13 @@
 		if (selection.size() == 1) {
 			IResource resource = getResource(selection.getFirstElement());
 			if (resource == null) {
-				return "One item selected";
+				return Policy.bind("SynchronizeView.12"); //$NON-NLS-1$
 			} else {
 				return resource.getFullPath().makeRelative().toString();
 			}
 		}
 		if (selection.size() > 1) {
-			return selection.size() + " items selected";
+			return selection.size() + Policy.bind("SynchronizeView.13"); //$NON-NLS-1$
 		}
 		return ""; //$NON-NLS-1$
 	}
@@ -753,7 +726,7 @@
 				String pId = TeamUIPlugin.getPlugin().getPreferenceStore().getString(IPreferenceIds.SYNCVIEW_DEFAULT_PERSPECTIVE);
 				activePage = workbench.showPerspective(pId, window);
 			} catch (WorkbenchException e) {
-					Utils.handleError(window.getShell(), e, "Error opening perspective", "Error opening perspective");
+					Utils.handleError(window.getShell(), e, Policy.bind("SynchronizeView.14"), e.getMessage()); //$NON-NLS-1$
 			}
 		}
 		try {
@@ -763,7 +736,7 @@
 			}
 			return (SynchronizeView)activePage.showView(VIEW_ID);
 		} catch (PartInitException pe) {
-			Utils.handleError(window.getShell(), pe, "Error opening view", "Error opening view");
+			Utils.handleError(window.getShell(), pe, Policy.bind("SynchronizeView.16"), pe.getMessage()); //$NON-NLS-1$
 			return null;
 		}
 	}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/TeamSynchronizingPerspective.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/TeamSynchronizingPerspective.java
index ce45b50..4a85311 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/TeamSynchronizingPerspective.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/TeamSynchronizingPerspective.java
@@ -51,12 +51,12 @@
 	 */
 	public void defineLayout(IPageLayout layout) {
 		String editorArea = layout.getEditorArea();
-		IFolderLayout left = layout.createFolder("top", IPageLayout.LEFT, 0.25f, editorArea);	//$NON-NLS-1$
-		left.addView(SynchronizeView.VIEW_ID);
-		layout.addFastView(IPageLayout.ID_PROBLEM_VIEW, 0.25f);
-		layout.addFastView(IPageLayout.ID_TASK_LIST, 0.25f);
-		left.addView(IPageLayout.ID_RES_NAV);
-		left.addView(IPageLayout.ID_OUTLINE);
+		IFolderLayout top = layout.createFolder("top", IPageLayout.TOP, 0.30f, editorArea);	//$NON-NLS-1$
+		top.addView(SynchronizeView.VIEW_ID);
+		top.addView(IPageLayout.ID_PROBLEM_VIEW);
+		top.addView(IPageLayout.ID_TASK_LIST);
+		layout.addFastView(IPageLayout.ID_RES_NAV, 0.25f);
+		layout.addFastView(IPageLayout.ID_OUTLINE, 0.25f);
 		layout.setEditorAreaVisible(true);
 	}
 }
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/ViewStatusInformation.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/ViewStatusInformation.java
index 0d39766..e09f6d1 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/ViewStatusInformation.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/sync/views/ViewStatusInformation.java
@@ -27,7 +27,7 @@
 		if(set != null) {
 			this.workingSetName = set.getName();
 		} else {
-			this.workingSetName = "";
+			this.workingSetName = ""; //$NON-NLS-1$
 		}
 		this.numShowing = input.getFilteredSyncSet().size();
 		this.numInWorkingSet = input.getWorkingSetSyncSet().size();