diff --git a/org.eclipse.mylyn.tests.performance/META-INF/MANIFEST.MF b/org.eclipse.mylyn.tests.performance/META-INF/MANIFEST.MF
index 95532bb..f7b59e6 100644
--- a/org.eclipse.mylyn.tests.performance/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.tests.performance/META-INF/MANIFEST.MF
@@ -14,6 +14,7 @@
  org.eclipse.mylyn.commons.ui,
  org.eclipse.mylyn.tasks.core,
  org.eclipse.mylyn.tasks.ui,
+ org.eclipse.mylyn.resources.ui,
  org.eclipse.mylyn.tasks.tests
 Bundle-ClassPath: .
 Export-Package: org.eclipse.mylyn.tasks.tests.performance;x-internal:=true,
diff --git a/org.eclipse.mylyn.tests.performance/src/org/eclipse/mylyn/resources/tests/performance/ResourceChangeMonitorPerformanceTest.java b/org.eclipse.mylyn.tests.performance/src/org/eclipse/mylyn/resources/tests/performance/ResourceChangeMonitorPerformanceTest.java
new file mode 100644
index 0000000..d9377fc
--- /dev/null
+++ b/org.eclipse.mylyn.tests.performance/src/org/eclipse/mylyn/resources/tests/performance/ResourceChangeMonitorPerformanceTest.java
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.resources.tests.performance;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.mylyn.internal.resources.ui.ResourceChangeMonitor;
+import org.eclipse.mylyn.tests.performance.PerformanceConstants;
+import org.eclipse.mylyn.tests.performance.support.CommonTestUtil;
+import org.eclipse.test.performance.PerformanceTestCase;
+
+/**
+ * @author Shawn Minto
+ */
+public class ResourceChangeMonitorPerformanceTest extends PerformanceTestCase {
+
+	private Set<IPath> paths;
+
+	private Set<String> excludedPatterns;
+
+	@Override
+	protected void setUp() throws Exception {
+		super.setUp();
+		excludedPatterns = new HashSet<String>();
+		excludedPatterns.add(ResourceChangeMonitor.createRegexFromPattern("*.class"));
+		excludedPatterns.add(ResourceChangeMonitor.createRegexFromPattern("*.tmp"));
+		excludedPatterns.add(ResourceChangeMonitor.createRegexFromPattern("~*"));
+		excludedPatterns.add(ResourceChangeMonitor.createRegexFromPattern(".*"));
+		excludedPatterns.add(ResourceChangeMonitor.createRegexFromPattern("generated"));
+
+		paths = new HashSet<IPath>();
+		File pathFile = CommonTestUtil.getFile(ResourceChangeMonitorPerformanceTest.class,
+				"resourceExclusionTestPaths.txt");
+		assertNotNull(pathFile);
+
+		BufferedReader br = null;
+		try {
+			br = new BufferedReader(new FileReader(pathFile));
+			String line;
+			while ((line = br.readLine()) != null) {
+				paths.add(new Path(line));
+			}
+		} finally {
+			if (br != null) {
+				br.close();
+			}
+		}
+		assertFalse(paths.isEmpty());
+
+	}
+
+	public void testIsExcluded() {
+
+		for (int i = 0; i < PerformanceConstants.REPEAT; i++) {
+			startMeasuring();
+			boolean excluded = false;
+			for (IPath path : paths) {
+				excluded |= ResourceChangeMonitor.isExcluded(path, null, excludedPatterns);
+			}
+			assertTrue(excluded);
+
+			stopMeasuring();
+		}
+
+		commitMeasurements();
+		assertPerformance();
+	}
+
+}
diff --git a/org.eclipse.mylyn.tests.performance/src/org/eclipse/mylyn/tests/performance/AllPerformanceTests.java b/org.eclipse.mylyn.tests.performance/src/org/eclipse/mylyn/tests/performance/AllPerformanceTests.java
index 1da9cf7..a275224 100644
--- a/org.eclipse.mylyn.tests.performance/src/org/eclipse/mylyn/tests/performance/AllPerformanceTests.java
+++ b/org.eclipse.mylyn.tests.performance/src/org/eclipse/mylyn/tests/performance/AllPerformanceTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 Tasktop Technologies and others.
+ * Copyright (c) 2004, 2009 Tasktop Technologies and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@
 	public static Test suite() {
 		TestSuite suite = new TestSuite("Performance tests for org.eclipse.mylyn.tests.performance");
 		suite.addTest(AllTasksPerformanceTests.suite());
+		suite.addTest(AllResourcesPerformanceTests.suite());
 		return suite;
 	}
 
diff --git a/org.eclipse.mylyn.tests.performance/src/org/eclipse/mylyn/tests/performance/AllResourcesPerformanceTests.java b/org.eclipse.mylyn.tests.performance/src/org/eclipse/mylyn/tests/performance/AllResourcesPerformanceTests.java
new file mode 100644
index 0000000..a1e7811
--- /dev/null
+++ b/org.eclipse.mylyn.tests.performance/src/org/eclipse/mylyn/tests/performance/AllResourcesPerformanceTests.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.tests.performance;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.mylyn.resources.tests.performance.ResourceChangeMonitorPerformanceTest;
+
+/**
+ * @author Shawn Minto
+ */
+public class AllResourcesPerformanceTests {
+	public static Test suite() {
+		TestSuite suite = new TestSuite("Test for org.eclipse.mylyn.resources.tests.performance");
+		suite.addTestSuite(ResourceChangeMonitorPerformanceTest.class);
+		return suite;
+	}
+}
