diff --git a/bundles/org.eclipse.releng.tools/src/org/eclipse/releng/tools/FixCopyrightAction.java b/bundles/org.eclipse.releng.tools/src/org/eclipse/releng/tools/FixCopyrightAction.java
index d836d5e..8c13398 100644
--- a/bundles/org.eclipse.releng.tools/src/org/eclipse/releng/tools/FixCopyrightAction.java
+++ b/bundles/org.eclipse.releng.tools/src/org/eclipse/releng/tools/FixCopyrightAction.java
@@ -10,18 +10,51 @@
  *******************************************************************************/
 package org.eclipse.releng.tools;
 
-import java.io.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
-import java.util.*;
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+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.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
 import org.eclipse.team.core.TeamException;
-import org.eclipse.team.internal.ccvs.core.*;
+import org.eclipse.team.internal.ccvs.core.ICVSRemoteFile;
+import org.eclipse.team.internal.ccvs.core.ICVSRemoteResource;
+import org.eclipse.team.internal.ccvs.core.ILogEntry;
 import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
-import org.eclipse.ui.*;
+import org.eclipse.ui.IActionDelegate;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
 
 public class FixCopyrightAction implements IObjectActionDelegate {
@@ -40,6 +73,7 @@
 	private String newLine = System.getProperty("line.separator");
 	private Map log = new HashMap();
 	private boolean swt = false;
+	private String filterString;
 
 	// The current selection
 	protected IStructuredSelection selection;
@@ -116,6 +150,49 @@
 	public void run(IAction action) {
 		log = new HashMap();
 		try {
+			final String[] filterArray = new String[1];
+			Dialog filterCriteria = new Dialog(PlatformUI.getWorkbench()
+					.getActiveWorkbenchWindow()) {
+				Text text;
+
+				protected Control createDialogArea(Composite parent) {
+					Composite parentComposite = (Composite) super
+							.createDialogArea(parent);
+					Composite composite = new Composite(parentComposite,
+							SWT.NONE);
+					composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL,
+							true, true));
+					composite.setLayout(new GridLayout(2, false));
+					Label header = new Label(composite, SWT.WRAP);
+					header.setText(Messages.getString("CopyrightDialog.1"));
+					GridData gridData = new GridData(SWT.FILL, SWT.FILL, true,
+							false);
+					gridData.horizontalSpan = 2;
+					header.setLayoutData(gridData);
+					Label label = new Label(composite, SWT.NONE);
+					label.setText(Messages.getString("CopyrightDialog.2"));
+					text = new Text(composite, SWT.NONE);
+					text.setText("copyright");
+					text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
+							false));
+					return parentComposite;
+				}
+
+				protected void okPressed() {
+					filterArray[0] = text.getText();
+					super.okPressed();
+				}
+				
+			};
+			filterCriteria.setBlockOnOpen(true);
+			int result = filterCriteria.open();
+			if (result == Dialog.CANCEL)
+				return;
+			
+			if (!filterArray[0].trim().equals("")) {
+				filterString = filterArray[0];
+			}
+			
 			final IResource[] results = getSelectedResources();
 			PlatformUI.getWorkbench().getProgressService().run(true, /* fork */
 			true, /* cancellable */
@@ -168,14 +245,23 @@
 				ICVSRemoteResource cvsFile = CVSWorkspaceRoot.getRemoteResourceFor(file);
 				if (cvsFile != null) {
 					// get the log entry for the revision loaded in the workspace
-					ILogEntry entry = ((ICVSRemoteFile) cvsFile).getLogEntry(new SubProgressMonitor(monitor, 100));
-					if (swt) {
-						String logComment = entry.getComment();
-						if (logComment.indexOf("CPL") != -1 && logComment.indexOf("EPL") != -1) {
-							// the last modification was the copyright comment update for the transition from CPL to EPL, so ignore
-							return 0;
-						}
+					ILogEntry entry = ((ICVSRemoteFile) cvsFile)
+							.getLogEntry(new SubProgressMonitor(monitor, 100));
+
+					String logComment = entry.getComment();
+					if (swt && logComment.indexOf("CPL") != -1
+							&& logComment.indexOf("EPL") != -1) {
+						// the last modification was the copyright comment
+						// update for the transition from CPL to EPL, so
+						// ignore
+						return 0;
+
 					}
+					else if (filterString != null && logComment.indexOf(filterString) != -1) {
+						//the last update was a copyright checkin - ignore
+						return 0;
+					}
+					
 					Calendar calendar = Calendar.getInstance();
 					calendar.setTime(entry.getDate());
 					return calendar.get(Calendar.YEAR);
diff --git a/bundles/org.eclipse.releng.tools/src/org/eclipse/releng/tools/messages.properties b/bundles/org.eclipse.releng.tools/src/org/eclipse/releng/tools/messages.properties
index 64e3cf7..cdfbf1e 100644
--- a/bundles/org.eclipse.releng.tools/src/org/eclipse/releng/tools/messages.properties
+++ b/bundles/org.eclipse.releng.tools/src/org/eclipse/releng/tools/messages.properties
@@ -83,3 +83,5 @@
 BuildNotesPage.43=Select the file to update with the new build notes.
 GetBugsOperation.0=Beginning Bug Operation
 GetBugsOperation.1=Fetching Bugzilla Summaries.
+CopyrightDialog.1=Any file whose last comment contains the following as a substring will be excluded from the copyright update.\nLeave empty for no exclusion.
+CopyrightDialog.2=Enter a substring:
