diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java
index 02d602e..e45f277 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java
@@ -215,7 +215,6 @@
 import org.eclipse.jdt.internal.ui.text.IJavaPartitions;
 import org.eclipse.jdt.internal.ui.text.JavaChangeHover;
 import org.eclipse.jdt.internal.ui.text.JavaPairMatcher;
-import org.eclipse.jdt.internal.ui.text.JavaPresentationReconciler;
 import org.eclipse.jdt.internal.ui.text.JavaWordIterator;
 import org.eclipse.jdt.internal.ui.text.PreferencesAdapter;
 import org.eclipse.jdt.internal.ui.text.java.hover.JavaExpandHover;
@@ -3848,8 +3847,7 @@
 	private void installSemanticHighlighting() {
 		if (fSemanticManager == null) {
 			fSemanticManager= new SemanticHighlightingManager();
-			JavaPresentationReconciler backgroundPresentationReconciler= (JavaPresentationReconciler) new JavaSourceViewerConfiguration(JavaPlugin.getDefault().getJavaTextTools().getColorManager(), getPreferenceStore(), this, IJavaPartitions.JAVA_PARTITIONING).getPresentationReconciler(getSourceViewer());
-			fSemanticManager.install(this, (JavaSourceViewer) getSourceViewer(), JavaPlugin.getDefault().getJavaTextTools().getColorManager(), getPreferenceStore(), backgroundPresentationReconciler);
+			fSemanticManager.install(this, (JavaSourceViewer) getSourceViewer(), JavaPlugin.getDefault().getJavaTextTools().getColorManager(), getPreferenceStore());
 		}
 	}
 	
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingManager.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingManager.java
index bb3ee21..c7a6a68 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingManager.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingManager.java
@@ -31,7 +31,9 @@
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.text.IColorManager;
 import org.eclipse.jdt.ui.text.IColorManagerExtension;
+import org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration;
 
+import org.eclipse.jdt.internal.ui.text.IJavaPartitions;
 import org.eclipse.jdt.internal.ui.text.JavaPresentationReconciler;
 
 /**
@@ -262,6 +264,8 @@
 	private IColorManager fColorManager;
 	/** The preference store */
 	private IPreferenceStore fPreferenceStore;
+	/** The source viewer configuration */
+	private JavaSourceViewerConfiguration fConfiguration;
 	/** The presentation reconciler */
 	private JavaPresentationReconciler fPresentationReconciler;
 	
@@ -277,12 +281,42 @@
 	 * @param preferenceStore The preference store
 	 * @param backgroundPresentationReconciler the background presentation reconciler
 	 */
+	public void install(JavaEditor editor, JavaSourceViewer sourceViewer, IColorManager colorManager, IPreferenceStore preferenceStore) {
+		fEditor= editor;
+		fSourceViewer= sourceViewer;
+		fColorManager= colorManager;
+		fPreferenceStore= preferenceStore;
+		if (fEditor != null) {
+			fConfiguration= new JavaSourceViewerConfiguration(colorManager, preferenceStore, editor, IJavaPartitions.JAVA_PARTITIONING);
+			fPresentationReconciler= (JavaPresentationReconciler) fConfiguration.getPresentationReconciler(sourceViewer);
+		} else {
+			fConfiguration= null;
+			fPresentationReconciler= null;
+		}
+		
+		fPreferenceStore.addPropertyChangeListener(this);
+
+		if (isEnabled())
+			enable();
+	}
+	
+	/**
+	 * Install the semantic highlighting on the given editor infrastructure
+	 * 
+	 * @param editor The Java editor
+	 * @param sourceViewer The source viewer 
+	 * @param colorManager The color manager
+	 * @param preferenceStore The preference store
+	 * @param backgroundPresentationReconciler the background presentation reconciler
+	 * @deprecated As of 3.0.1, use {@link SemanticHighlightingManager#install(JavaEditor, JavaSourceViewer, IColorManager, IPreferenceStore) instead
+	 */
 	public void install(JavaEditor editor, JavaSourceViewer sourceViewer, IColorManager colorManager, IPreferenceStore preferenceStore, JavaPresentationReconciler backgroundPresentationReconciler) {
 		fEditor= editor;
 		fSourceViewer= sourceViewer;
 		fColorManager= colorManager;
 		fPreferenceStore= preferenceStore;
 		fPresentationReconciler= backgroundPresentationReconciler;
+		fConfiguration= null;
 		
 		fPreferenceStore.addPropertyChangeListener(this);
 
@@ -300,7 +334,7 @@
 	 */
 	public void install(JavaSourceViewer sourceViewer, IColorManager colorManager, IPreferenceStore preferenceStore, HighlightedRange[][] hardcodedRanges) {
 		fHardcodedRanges= hardcodedRanges;
-		install(null, sourceViewer, colorManager, preferenceStore, null);
+		install(null, sourceViewer, colorManager, preferenceStore);
 	}
 	
 	/**
@@ -373,6 +407,7 @@
 		fEditor= null;
 		fSourceViewer= null;
 		fColorManager= null;
+		fConfiguration= null;
 		fPresentationReconciler= null;
 	}
 
@@ -453,6 +488,9 @@
 		if (fPreferenceStore == null)
 			return; // Uninstalled during event notification
 		
+		if (fConfiguration != null)
+			fConfiguration.handlePropertyChangeEvent(event);
+		
 		if (PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_ENABLED.equals(event.getProperty())) {
 			if (isEnabled())
 				enable();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCommentScanner.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCommentScanner.java
index 23674d5..bc321c3 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCommentScanner.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaCommentScanner.java
@@ -78,12 +78,12 @@
 		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#clearWords()
 		 * @since 3.0
 		 */
-		public void clearWords() {
+		public synchronized void clearWords() {
 			super.clearWords();
 			fUppercaseWords.clear();
 		}
 	
-		public void addTaskTags(String value) {
+		public synchronized void addTaskTags(String value) {
 			String[] tasks= split(value, ","); //$NON-NLS-1$
 			for (int i= 0; i < tasks.length; i++) {
 				if (tasks[i].length() > 0) {
@@ -106,7 +106,7 @@
 		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#addWord(java.lang.String, org.eclipse.jface.text.rules.IToken)
 		 * @since 3.0
 		 */
-		public void addWord(String word, IToken token) {
+		public synchronized void addWord(String word, IToken token) {
 			Assert.isNotNull(word);
 			Assert.isNotNull(token);		
 		
@@ -118,7 +118,7 @@
 		 * @see org.eclipse.jdt.internal.ui.text.CombinedWordRule.WordMatcher#evaluate(org.eclipse.jface.text.rules.ICharacterScanner, org.eclipse.jdt.internal.ui.text.CombinedWordRule.CharacterBuffer)
 		 * @since 3.0
 		 */
-		public IToken evaluate(ICharacterScanner scanner, CombinedWordRule.CharacterBuffer word) {
+		public synchronized IToken evaluate(ICharacterScanner scanner, CombinedWordRule.CharacterBuffer word) {
 			if (fCaseSensitive)
 				return super.evaluate(scanner, word);
 			
@@ -274,8 +274,10 @@
 		if (fTaskTagMatcher != null && event.getProperty().equals(COMPILER_TASK_TAGS)) {
 			Object value= event.getNewValue();
 			if (value instanceof String) {
-				fTaskTagMatcher.clearWords();
-				fTaskTagMatcher.addTaskTags((String) value);
+				synchronized (fTaskTagMatcher) {
+					fTaskTagMatcher.clearWords();
+					fTaskTagMatcher.addTaskTags((String) value);
+				}
 			}
 		} else if (fTaskTagMatcher != null && event.getProperty().equals(COMPILER_TASK_CASE_SENSITIVE)) {
 			Object value= event.getNewValue();
