diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OTQuickFixTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OTQuickFixTest.java
index 4b977b4..35f9741 100644
--- a/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OTQuickFixTest.java
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests/src/org/eclipse/objectteams/otdt/ui/tests/core/OTQuickFixTest.java
@@ -95,20 +95,20 @@
 		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
 	}
 
-	// variant to test against non-first problem:
-	protected static final ArrayList collectCorrections(ICompilationUnit cu, CompilationUnit astRoot, int nProblems, int iProblem, AssistContext context) throws CoreException {
-		IProblem[] problems= astRoot.getProblems();
-		if (problems.length != nProblems) {
-			StringBuffer buf= new StringBuffer("Wrong number of problems, is: ");
-			buf.append(problems.length).append(", expected: ").append(nProblems).append('\n');
-			for (int i= 0; i < problems.length; i++) {
-				buf.append(problems[i]);
-				buf.append('[').append(problems[i].getSourceStart()).append(" ,").append(problems[i].getSourceEnd()).append(']');
-				buf.append('\n');
-			}
-			assertTrue(buf.toString(), false);
-
-		}
-		return collectCorrections(cu, problems[iProblem], context);
-	}
+//	// variant to test against non-first problem:
+//	protected static final ArrayList collectCorrections(ICompilationUnit cu, CompilationUnit astRoot, int nProblems, int iProblem, AssistContext context) throws CoreException {
+//		IProblem[] problems= astRoot.getProblems();
+//		if (problems.length != nProblems) {
+//			StringBuffer buf= new StringBuffer("Wrong number of problems, is: ");
+//			buf.append(problems.length).append(", expected: ").append(nProblems).append('\n');
+//			for (int i= 0; i < problems.length; i++) {
+//				buf.append(problems[i]);
+//				buf.append('[').append(problems[i].getSourceStart()).append(" ,").append(problems[i].getSourceEnd()).append(']');
+//				buf.append('\n');
+//			}
+//			assertTrue(buf.toString(), false);
+//
+//		}
+//		return collectCorrections(cu, problems[iProblem], context);
+//	}
 }
