diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/DeltaDebugListener.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/DeltaDebugListener.java
deleted file mode 100644
index a5fd0b4..0000000
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/DeltaDebugListener.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation 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:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.core.tests.resources;
-
-import org.eclipse.core.internal.events.ResourceDelta;
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.CoreException;
-
-public class DeltaDebugListener implements IResourceChangeListener {
-	/**
-	 * @see IResourceChangeListener#resourceChanged
-	 */
-	@Override
-	public void resourceChanged(IResourceChangeEvent event) {
-		IResourceDelta delta = event.getDelta();
-		if (delta == null)
-			return;
-		try {
-			System.out.println();
-			visitingProcess(delta);
-		} catch (CoreException e) {
-			// XXX: dropping exceptions
-		}
-	}
-
-	protected boolean visit(IResourceDelta change) {
-		System.out.println(((ResourceDelta) change).toDebugString());
-		return true;
-	}
-
-	/**
-	 * Processes the given change by traversing its nodes and calling
-	 * <code>visit</code> for each.
-	 *
-	 * @see #visit
-	 * @exception CoreException if the operation fails
-	 */
-	protected void visitingProcess(IResourceDelta change) throws CoreException {
-		if (!visit(change))
-			return;
-		int kind = IResourceDelta.ADDED | IResourceDelta.REMOVED | IResourceDelta.CHANGED;
-		int memberFlags = IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS | IContainer.INCLUDE_PHANTOMS;
-		IResourceDelta[] children = change.getAffectedChildren(kind, memberFlags);
-		for (int i = 0; i < children.length; i++)
-			visitingProcess(children[i]);
-	}
-}
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTest.java
index 2b6b172..380c115 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/resources/ResourceTest.java
@@ -22,15 +22,13 @@
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.tests.harness.*;
+import org.eclipse.core.tests.harness.CoreTest;
+import org.eclipse.core.tests.harness.FileSystemHelper;
 
 /**
  * Superclass for tests that use the Eclipse Platform workspace.
  */
 public abstract class ResourceTest extends CoreTest {
-	/** delta change listener if requested */
-	public static IResourceChangeListener deltaListener;
-
 	//nature that installs and runs a builder (regression test for bug 29116)
 	protected static final String NATURE_29116 = "org.eclipse.core.tests.resources.nature29116";
 
@@ -966,10 +964,6 @@
 	@Override
 	protected void setUp() throws Exception {
 		assertNotNull("Workspace was not setup", getWorkspace());
-		if (EclipseTestHarnessApplication.deltasEnabled() && deltaListener == null) {
-			deltaListener = new DeltaDebugListener();
-			getWorkspace().addResourceChangeListener(deltaListener);
-		}
 	}
 
 	@Override
