Apply Patch Wizard changes
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
index a482462..9b42ace 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
@@ -74,7 +74,7 @@
 PreviewPatchPage_Right_title= Result
 PreviewPatchPage_PatchOptions_title=Patch options
 PreviewPatchPage_IgnoreSegments_text=&Ignore leading path name segments:
-PreviewPatchPage_ReversePatch_text=&Reverse patch
+PreviewPatchPage_ReversePatch_text=Reverse patch
 PreviewPatchPage_FuzzFactor_text=&Maximum fuzz factor:
 PreviewPatchPage2_RetargetAction=Retarget
 PreviewPatchPage2_IgnoreWSAction=Ignore WhiteSpace
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatcherCompareEditorInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatcherCompareEditorInput.java
index 395c661..95ccbf9 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatcherCompareEditorInput.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatcherCompareEditorInput.java
@@ -28,6 +28,7 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jface.action.Action;
@@ -279,9 +280,25 @@
 				
 			} else {
 				if (projects[j] instanceof MyDiffNode) {
-					Diff diff= ((MyDiffNode) projects[j]).getDiff();
-					hunksToCheck.addAll(diff.reset(patcher, strip, previewPatchPage.getFuzzFactor()));
-					viewer.update(diff, null);
+					MyDiffNode diffNode = (MyDiffNode) projects[j];
+					hunksToCheck.addAll(diffNode.getDiff().reset(patcher, strip, previewPatchPage.getFuzzFactor()));
+					IDiffElement[] diffNodes = diffNode.getChildren();
+					
+					Iterator iter = hunksToCheck.iterator();
+					while (iter.hasNext()){
+						Hunk hunkToMatch = (Hunk) iter.next();
+						Object matchingHunkNode = nodesToDiffs.get(hunkToMatch);
+						if (matchingHunkNode != null)
+							nodesToCheck.add(matchingHunkNode);
+						
+					}
+					for (int i = 0; i < diffNodes.length; i++) {
+						viewer.update(diffNodes[i], null);
+						IDiffElement[] hunkNodes =((MyDiffNode) diffNodes[i]).getChildren();
+						for (int k = 0; k < hunkNodes.length; k++) {
+							viewer.update(hunkNodes[k],null);
+						}
+					}
 				}
 			}
 		}
@@ -385,15 +402,27 @@
 			try {
 				for (int i = 0; i < diffs.length; i++) {
 					Diff diff = diffs[i];
-					IFile tempFile = patcher.existsInTarget(new Path(diff.getLabel(diff)));
-					
+					IPath filePath = new Path(diff.getLabel(diff));
+					IFile tempFile = patcher.existsInTarget(filePath);
+			
 					byte[] bytes = quickPatch(tempFile, patcher, diff);
 					int differencer = Differencer.CHANGE;
 					if (failedHunks.size() != 0) {
 						differencer += Differencer.CONFLICTING;
 					}
-					ResourceNode tempNode = new ResourceNode(tempFile);
-					PatchedFileNode patchedNode = new PatchedFileNode(bytes, tempNode.getType(), tempFile.getProjectRelativePath().toString());
+					
+					ITypedElement tempNode;
+					PatchedFileNode patchedNode;
+					
+					if (tempFile != null){
+						tempNode = new ResourceNode(tempFile);
+						patchedNode = new PatchedFileNode(bytes, tempNode.getType(), tempFile.getProjectRelativePath().toString());
+					}
+					else{ 
+						tempNode = new PatchedFileNode(new byte[]{0}, filePath.getFileExtension(), "File not found");
+						patchedNode = new PatchedFileNode(bytes, tempNode.getType(), "Yeah!");
+					}
+					
 					MyDiffNode allFile = new MyDiffNode(root, differencer, tempNode, tempNode, patchedNode, diff);
 					//Add individual hunks to each Diff node
 					Hunk[] hunks = diff.getHunks();
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
index a482462..9b42ace 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchMessages.properties
@@ -74,7 +74,7 @@
 PreviewPatchPage_Right_title= Result
 PreviewPatchPage_PatchOptions_title=Patch options
 PreviewPatchPage_IgnoreSegments_text=&Ignore leading path name segments:
-PreviewPatchPage_ReversePatch_text=&Reverse patch
+PreviewPatchPage_ReversePatch_text=Reverse patch
 PreviewPatchPage_FuzzFactor_text=&Maximum fuzz factor:
 PreviewPatchPage2_RetargetAction=Retarget
 PreviewPatchPage2_IgnoreWSAction=Ignore WhiteSpace
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatcherCompareEditorInput.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatcherCompareEditorInput.java
index 395c661..95ccbf9 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatcherCompareEditorInput.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatcherCompareEditorInput.java
@@ -28,6 +28,7 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jface.action.Action;
@@ -279,9 +280,25 @@
 				
 			} else {
 				if (projects[j] instanceof MyDiffNode) {
-					Diff diff= ((MyDiffNode) projects[j]).getDiff();
-					hunksToCheck.addAll(diff.reset(patcher, strip, previewPatchPage.getFuzzFactor()));
-					viewer.update(diff, null);
+					MyDiffNode diffNode = (MyDiffNode) projects[j];
+					hunksToCheck.addAll(diffNode.getDiff().reset(patcher, strip, previewPatchPage.getFuzzFactor()));
+					IDiffElement[] diffNodes = diffNode.getChildren();
+					
+					Iterator iter = hunksToCheck.iterator();
+					while (iter.hasNext()){
+						Hunk hunkToMatch = (Hunk) iter.next();
+						Object matchingHunkNode = nodesToDiffs.get(hunkToMatch);
+						if (matchingHunkNode != null)
+							nodesToCheck.add(matchingHunkNode);
+						
+					}
+					for (int i = 0; i < diffNodes.length; i++) {
+						viewer.update(diffNodes[i], null);
+						IDiffElement[] hunkNodes =((MyDiffNode) diffNodes[i]).getChildren();
+						for (int k = 0; k < hunkNodes.length; k++) {
+							viewer.update(hunkNodes[k],null);
+						}
+					}
 				}
 			}
 		}
@@ -385,15 +402,27 @@
 			try {
 				for (int i = 0; i < diffs.length; i++) {
 					Diff diff = diffs[i];
-					IFile tempFile = patcher.existsInTarget(new Path(diff.getLabel(diff)));
-					
+					IPath filePath = new Path(diff.getLabel(diff));
+					IFile tempFile = patcher.existsInTarget(filePath);
+			
 					byte[] bytes = quickPatch(tempFile, patcher, diff);
 					int differencer = Differencer.CHANGE;
 					if (failedHunks.size() != 0) {
 						differencer += Differencer.CONFLICTING;
 					}
-					ResourceNode tempNode = new ResourceNode(tempFile);
-					PatchedFileNode patchedNode = new PatchedFileNode(bytes, tempNode.getType(), tempFile.getProjectRelativePath().toString());
+					
+					ITypedElement tempNode;
+					PatchedFileNode patchedNode;
+					
+					if (tempFile != null){
+						tempNode = new ResourceNode(tempFile);
+						patchedNode = new PatchedFileNode(bytes, tempNode.getType(), tempFile.getProjectRelativePath().toString());
+					}
+					else{ 
+						tempNode = new PatchedFileNode(new byte[]{0}, filePath.getFileExtension(), "File not found");
+						patchedNode = new PatchedFileNode(bytes, tempNode.getType(), "Yeah!");
+					}
+					
 					MyDiffNode allFile = new MyDiffNode(root, differencer, tempNode, tempNode, patchedNode, diff);
 					//Add individual hunks to each Diff node
 					Hunk[] hunks = diff.getHunks();