diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
index 3727425..399cf07 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
@@ -314,6 +314,10 @@
 	 * Progress should be reported to the given progress monitor.
 	 * A request to cancel the operation should be honored and acknowledged 
 	 * by throwing <code>InterruptedException</code>.
+	 * <p>
+	 * Note: this method is typically called in a modal context thread which doesn't have a Display assigned.
+	 * Implementors of this method shouldn't therefore allocated any SWT resources in this method.
+	 * </p>
 	 *
 	 * @param monitor the progress monitor to use to display progress and receive
 	 *   requests for cancelation
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
index 4daf9e5..9db2091 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
@@ -18,6 +18,7 @@
 
 	public void run(IAction action) {
 		if (fInput != null) {
+			fInput.initializeCompareConfiguration();
 			CompareUI.openCompareEditor(fInput);
 			fInput= null;	// don't reuse this input!
 		}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
index 02a07d3..a76a400 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
@@ -125,6 +125,25 @@
 	}
 	
 	/**
+	 * Initializes the images in the compare configuration.
+	 */
+	void initializeCompareConfiguration() {
+		CompareConfiguration cc= getCompareConfiguration();
+		if (fLeftResource != null) {
+			cc.setLeftLabel(buildLabel(fLeftResource));
+			cc.setLeftImage(CompareUIPlugin.getImage(fLeftResource));
+		}
+		if (fRightResource != null) {
+			cc.setRightLabel(buildLabel(fRightResource));
+			cc.setRightImage(CompareUIPlugin.getImage(fRightResource));
+		}
+		if (fThreeWay && fAncestorResource != null) {			
+			cc.setAncestorLabel(buildLabel(fAncestorResource));
+			cc.setAncestorImage(CompareUIPlugin.getImage(fAncestorResource));
+		}
+	}
+	
+	/**
 	 * Returns true if the given arguments cannot be compared.
 	 */
 	private boolean incomparable(IStructureComparator c1, IStructureComparator c2) {
@@ -170,8 +189,6 @@
 	 */
 	public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException {
 				
-		CompareConfiguration cc= (CompareConfiguration) getCompareConfiguration();
-	
 		try {
 			// fix for PR 1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty							
 			fLeftResource.refreshLocal(IResource.DEPTH_INFINITE, pm);
@@ -182,19 +199,11 @@
 				
 			pm.beginTask(Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$
 
-			cc.setLeftLabel(buildLabel(fLeftResource));
-			cc.setLeftImage(CompareUIPlugin.getImage(fLeftResource));
-			
-			cc.setRightLabel(buildLabel(fRightResource));
-			cc.setRightImage(CompareUIPlugin.getImage(fRightResource));
-
 			String leftLabel= fLeftResource.getName();
 			String rightLabel= fRightResource.getName();
 			
 			String title;
 			if (fThreeWay) {			
-				cc.setAncestorLabel(buildLabel(fAncestorResource));
-				cc.setAncestorImage(CompareUIPlugin.getImage(fAncestorResource));
 				String format= Utilities.getString("ResourceCompare.threeWay.title"); //$NON-NLS-1$
 				String ancestorLabel= fAncestorResource.getName();
 				title= MessageFormat.format(format, new String[] {ancestorLabel, leftLabel, rightLabel} );
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java
index d99a4f8..3571ee9 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java
@@ -62,7 +62,20 @@
 		fPatcher= patcher;
 		IResource[] s= Utilities.getResources(selection);
 		if (s.length == 1)
-			fTarget= s[0];	
+			fTarget= s[0];
+		
+		if (fPatcher != null) {
+			String rformat= PatchMessages.getString("PatchCompareInput.RightTitle.format");	//$NON-NLS-1$
+			String rightLabel= MessageFormat.format(rformat, new String[] { fPatcher.getName() } );
+			config.setRightLabel(rightLabel);
+			//cc.setRightImage(CompareUIPlugin.getImage(fRightResource));
+		}
+		
+		if (fTarget != null) {
+			String leftLabel= fTarget.getName();
+			config.setLeftLabel(leftLabel);
+			config.setLeftImage(CompareUIPlugin.getImage(fTarget));
+		}	
 	}
 	
 	/**
@@ -70,8 +83,6 @@
 	 */
 	public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException {
 						
-		CompareConfiguration cc= (CompareConfiguration) getCompareConfiguration();
-		
 		try {				
 			Diff[] diffs= fPatcher.getDiffs();
 			
@@ -101,13 +112,9 @@
 			fTarget.refreshLocal(IResource.DEPTH_INFINITE, pm);
 			
 			String leftLabel= fTarget.getName();
-			cc.setLeftLabel(leftLabel);
-			cc.setLeftImage(CompareUIPlugin.getImage(fTarget));
 			
 			String rformat= PatchMessages.getString("PatchCompareInput.RightTitle.format");	//$NON-NLS-1$
 			String rightLabel= MessageFormat.format(rformat, new String[] { fPatcher.getName() } );
-			cc.setRightLabel(rightLabel);
-			//cc.setRightImage(CompareUIPlugin.getImage(fRightResource));
 			
 			String format= Utilities.getString("ResourceCompare.twoWay.title"); //$NON-NLS-1$
 			String title= MessageFormat.format(format, new String[] {leftLabel, rightLabel} );
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
index 3727425..399cf07 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/CompareEditorInput.java
@@ -314,6 +314,10 @@
 	 * Progress should be reported to the given progress monitor.
 	 * A request to cancel the operation should be honored and acknowledged 
 	 * by throwing <code>InterruptedException</code>.
+	 * <p>
+	 * Note: this method is typically called in a modal context thread which doesn't have a Display assigned.
+	 * Implementors of this method shouldn't therefore allocated any SWT resources in this method.
+	 * </p>
 	 *
 	 * @param monitor the progress monitor to use to display progress and receive
 	 *   requests for cancelation
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
index 4daf9e5..9db2091 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
@@ -18,6 +18,7 @@
 
 	public void run(IAction action) {
 		if (fInput != null) {
+			fInput.initializeCompareConfiguration();
 			CompareUI.openCompareEditor(fInput);
 			fInput= null;	// don't reuse this input!
 		}
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
index 02a07d3..a76a400 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
@@ -125,6 +125,25 @@
 	}
 	
 	/**
+	 * Initializes the images in the compare configuration.
+	 */
+	void initializeCompareConfiguration() {
+		CompareConfiguration cc= getCompareConfiguration();
+		if (fLeftResource != null) {
+			cc.setLeftLabel(buildLabel(fLeftResource));
+			cc.setLeftImage(CompareUIPlugin.getImage(fLeftResource));
+		}
+		if (fRightResource != null) {
+			cc.setRightLabel(buildLabel(fRightResource));
+			cc.setRightImage(CompareUIPlugin.getImage(fRightResource));
+		}
+		if (fThreeWay && fAncestorResource != null) {			
+			cc.setAncestorLabel(buildLabel(fAncestorResource));
+			cc.setAncestorImage(CompareUIPlugin.getImage(fAncestorResource));
+		}
+	}
+	
+	/**
 	 * Returns true if the given arguments cannot be compared.
 	 */
 	private boolean incomparable(IStructureComparator c1, IStructureComparator c2) {
@@ -170,8 +189,6 @@
 	 */
 	public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException {
 				
-		CompareConfiguration cc= (CompareConfiguration) getCompareConfiguration();
-	
 		try {
 			// fix for PR 1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty							
 			fLeftResource.refreshLocal(IResource.DEPTH_INFINITE, pm);
@@ -182,19 +199,11 @@
 				
 			pm.beginTask(Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$
 
-			cc.setLeftLabel(buildLabel(fLeftResource));
-			cc.setLeftImage(CompareUIPlugin.getImage(fLeftResource));
-			
-			cc.setRightLabel(buildLabel(fRightResource));
-			cc.setRightImage(CompareUIPlugin.getImage(fRightResource));
-
 			String leftLabel= fLeftResource.getName();
 			String rightLabel= fRightResource.getName();
 			
 			String title;
 			if (fThreeWay) {			
-				cc.setAncestorLabel(buildLabel(fAncestorResource));
-				cc.setAncestorImage(CompareUIPlugin.getImage(fAncestorResource));
 				String format= Utilities.getString("ResourceCompare.threeWay.title"); //$NON-NLS-1$
 				String ancestorLabel= fAncestorResource.getName();
 				title= MessageFormat.format(format, new String[] {ancestorLabel, leftLabel, rightLabel} );
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java
index d99a4f8..3571ee9 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareInput.java
@@ -62,7 +62,20 @@
 		fPatcher= patcher;
 		IResource[] s= Utilities.getResources(selection);
 		if (s.length == 1)
-			fTarget= s[0];	
+			fTarget= s[0];
+		
+		if (fPatcher != null) {
+			String rformat= PatchMessages.getString("PatchCompareInput.RightTitle.format");	//$NON-NLS-1$
+			String rightLabel= MessageFormat.format(rformat, new String[] { fPatcher.getName() } );
+			config.setRightLabel(rightLabel);
+			//cc.setRightImage(CompareUIPlugin.getImage(fRightResource));
+		}
+		
+		if (fTarget != null) {
+			String leftLabel= fTarget.getName();
+			config.setLeftLabel(leftLabel);
+			config.setLeftImage(CompareUIPlugin.getImage(fTarget));
+		}	
 	}
 	
 	/**
@@ -70,8 +83,6 @@
 	 */
 	public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException {
 						
-		CompareConfiguration cc= (CompareConfiguration) getCompareConfiguration();
-		
 		try {				
 			Diff[] diffs= fPatcher.getDiffs();
 			
@@ -101,13 +112,9 @@
 			fTarget.refreshLocal(IResource.DEPTH_INFINITE, pm);
 			
 			String leftLabel= fTarget.getName();
-			cc.setLeftLabel(leftLabel);
-			cc.setLeftImage(CompareUIPlugin.getImage(fTarget));
 			
 			String rformat= PatchMessages.getString("PatchCompareInput.RightTitle.format");	//$NON-NLS-1$
 			String rightLabel= MessageFormat.format(rformat, new String[] { fPatcher.getName() } );
-			cc.setRightLabel(rightLabel);
-			//cc.setRightImage(CompareUIPlugin.getImage(fRightResource));
 			
 			String format= Utilities.getString("ResourceCompare.twoWay.title"); //$NON-NLS-1$
 			String title= MessageFormat.format(format, new String[] {leftLabel, rightLabel} );
