diff --git a/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceASTTests.java b/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceASTTests.java
index eab8938..a30c623 100644
--- a/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceASTTests.java
+++ b/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceASTTests.java
@@ -580,12 +580,6 @@
 		ICompilationUnit unit = getCompilationUnit("org.eclipse.jdt.core", "org.eclipse.jdt.internal.compiler.parser", "Parser.java");
 		createAST(unit, AST.JLS2);
 	}
-	public void _testDomAstCreationJLS3() throws JavaModelException {
-		tagAsSummary("DOM>Creation>JLS3", true); // put in fingerprint
-
-		ICompilationUnit unit = getCompilationUnit("org.eclipse.jdt.core", "org.eclipse.jdt.internal.compiler.parser", "Parser.java");
-		createAST(unit, AST.JLS3);
-	}
 
 	private int runAstCreation(int astLevel) throws JavaModelException {
 		int unitsCount = 0;
@@ -640,9 +634,4 @@
 		tagAsSummary("DOM>Creation>JLS2", true); // put in fingerprint
 		runAstCreation(AST.JLS2);
 	}
-
-	public void _testWkspDomAstCreationJLS3() throws JavaModelException {
-		tagAsSummary("DOM>Creation>JLS3", true); // put in fingerprint
-		runAstCreation(AST.JLS3);
-	}
 }
diff --git a/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceBuildTests.java b/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceBuildTests.java
index c4f0368..d5aabb0 100644
--- a/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceBuildTests.java
+++ b/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceBuildTests.java
@@ -468,11 +468,15 @@
 	 * Test performance for SourceElementParser on one file.
 	 * Parse is executed many times ({@link #ITERATIONS_COUNT}) to have significant time for execution.
 	 * This test is repeated several times ({@link #MEASURES_COUNT}) to average time measuring.
+	 * 
+	 * Note: This test has been temporarily removed as there's unexplicable difference between
+	 * HEAD and 3.0 versions for CPU Time results (10% faster) and Elapsed process (25% slower)...
+	 * TODO (frederic) Put back when platform-releng will have stabilized performance results process.
 	 *  
 	 * @throws InvalidInputException
 	 * @throws IOException
 	 */
-	public void testSourceParser() throws InvalidInputException, IOException {
+	public void _testSourceParser() throws InvalidInputException, IOException {
 		tagAsSummary("Compile>SrcParse>Parser>Default", true); // put in fingerprint
 		parseParserFile(1); // SourceElementParser kind
 	}
diff --git a/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceSearchTests.java b/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceSearchTests.java
index fb6324e..73acf5f 100644
--- a/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceSearchTests.java
+++ b/org.eclipse.jdt.core.tests.performance/src/org/eclipse/jdt/core/tests/performance/FullSourceWorkspaceSearchTests.java
@@ -251,6 +251,7 @@
 
 		// Measures
 		for (int i=0; i<MEASURES_COUNT; i++) {
+			cleanCategoryTableCache(true);
 			startMeasuring();
 			for (int j=0; j<ITERATIONS_COUNT; j++) {
 				new SearchEngine().searchAllTypeNames(
@@ -264,7 +265,6 @@
 					null);
 			}
 			stopMeasuring();
-			cleanCategoryTableCache(true);
 		}
 		
 		// Commit
@@ -301,10 +301,10 @@
 
 		// Measures
 		for (int i=0; i<MEASURES_COUNT; i++) {
+			cleanCategoryTableCache(true);
 			startMeasuring();
 			search("JavaCore", TYPE, ALL_OCCURRENCES);
 			stopMeasuring();
-			cleanCategoryTableCache(true);
 		}
 		
 		// Commit
@@ -335,10 +335,10 @@
 
 		// Measures
 		for (int i=0; i<MEASURES_COUNT; i++) {
+			cleanCategoryTableCache(false);
 			startMeasuring();
 			search("FILE", FIELD, ALL_OCCURRENCES);
 			stopMeasuring();
-			cleanCategoryTableCache(false);
 		}
 		
 		// Commit
@@ -369,10 +369,10 @@
 
 		// Measures
 		for (int i=0; i<MEASURES_COUNT; i++) {
+			cleanCategoryTableCache(false);
 			startMeasuring();
 			search("equals", METHOD, ALL_OCCURRENCES);
 			stopMeasuring();
-			cleanCategoryTableCache(false);
 		}
 		
 		// Commit
@@ -403,10 +403,10 @@
 
 		// Measures
 		for (int i=0; i<MEASURES_COUNT; i++) {
+			cleanCategoryTableCache(false);
 			startMeasuring();
 			search("String", CONSTRUCTOR, ALL_OCCURRENCES);
 			stopMeasuring();
-			cleanCategoryTableCache(false);
 		}
 		
 		// Commit
