diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuiltinSpecsDetector.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuiltinSpecsDetector.java
index 332fc2a11c6..b0df7f9e374 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuiltinSpecsDetector.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractBuiltinSpecsDetector.java
@@ -270,6 +270,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
 
 	@Override
 	public void registerListener(ICConfigurationDescription cfgDescription) {
+		// AG FIXME - temporary log to remove before CDT 9.0 release
 		LanguageSettingsLogger.logInfo(getPrefixForLog() + "registerListener [" + System.identityHashCode(this) + "] " + this);
 
 		currentCfgDescription = cfgDescription;
@@ -278,6 +279,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
 
 	@Override
 	public void unregisterListener() {
+		// AG FIXME - temporary log to remove before CDT 9.0 release
 		LanguageSettingsLogger.logInfo(getPrefixForLog() + "unregisterListener [" + System.identityHashCode(this) + "] " + this);
 	}
 
@@ -318,7 +320,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
 		job.setRule(rule);
 		job.schedule();
 
-		// TODO - remove me
+		// AG FIXME - temporary log to remove before CDT 9.0 release
 		LanguageSettingsLogger.logInfo(getPrefixForLog() + "Execution scheduled [" + System.identityHashCode(this) + "] " + this);
 	}
 
@@ -461,6 +463,7 @@ public abstract class AbstractBuiltinSpecsDetector extends AbstractLanguageSetti
 		if (detectedSettingEntries != null && detectedSettingEntries.size() > 0) {
 			collected = detectedSettingEntries.size();
 
+			// AG FIXME - temporary log to remove before CDT 9.0 release
 			LanguageSettingsLogger.logInfo(getPrefixForLog()
 					+ getClass().getSimpleName() + " collected " + detectedSettingEntries.size() + " entries" + " for language " + currentLanguageId);
 
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractLanguageSettingsOutputScanner.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractLanguageSettingsOutputScanner.java
index 0c373948d47..96588e50935 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractLanguageSettingsOutputScanner.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/AbstractLanguageSettingsOutputScanner.java
@@ -320,6 +320,7 @@ public abstract class AbstractLanguageSettingsOutputScanner extends LanguageSett
 	protected void setSettingEntries(List<ICLanguageSettingEntry> entries) {
 		setSettingEntries(currentCfgDescription, currentResource, currentLanguageId, entries);
 
+		// AG FIXME - temporary log to remove before CDT 9.0 release
 		LanguageSettingsLogger.logInfo(getPrefixForLog()
 				+ getClass().getSimpleName() + " collected " + (entries!=null ? ("" + entries.size()) : "null") + " entries for " + currentResource);
 	}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/util/PathEntryTranslator.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/util/PathEntryTranslator.java
index 1f197a9da03..8a29a9ab166 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/util/PathEntryTranslator.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/util/PathEntryTranslator.java
@@ -2041,7 +2041,8 @@ public class PathEntryTranslator {
 			public boolean visit(PathSettingsContainer container) {
 				CResourceData data = (CResourceData)container.getValue();
 				if (data != null) {
-					AG_log(des, kinds, data); // AG FIXME REMOVEME
+					// AG FIXME - temporary log to remove before CDT 9.0 release
+					temporaryLog(des, kinds, data);
 
 					PathEntryCollector child = cr.createChild(container.getPath());
 					for (int kind : kinds) {
@@ -2055,8 +2056,9 @@ public class PathEntryTranslator {
 				return true;
 			}
 
-			// AG FIXME REMOVEME
-			private void AG_log(final ICConfigurationDescription des, final int[] kinds, CResourceData data) {
+			// AG FIXME - temporary log to remove before CDT 9.0 release
+			@Deprecated
+			private void temporaryLog(final ICConfigurationDescription des, final int[] kinds, CResourceData data) {
 				String kindsStr="";
 				for (int kind : kinds) {
 					String kstr = LanguageSettingEntriesSerializer.kindToString(kind);
@@ -2092,7 +2094,7 @@ public class PathEntryTranslator {
 			return false;
 		}
 
-		
+
 		IProject project = des.getProjectDescription().getProject();
 		if (ScannerDiscoveryLegacySupport.isLanguageSettingsProvidersFunctionalityEnabled(project)) {
 			IResource rc = getResource(project, data.getPath());
@@ -2100,7 +2102,7 @@ public class PathEntryTranslator {
 				list.addAll(LanguageSettingsManager.getSettingEntriesByKind(des, rc, lData.getLanguageId(), kind));
 			}
 			return list.size()>0;
-			
+
 		}
 		// Legacy logic
 		boolean supported = false;
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsLogger.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsLogger.java
index 37ab0530aa9..8babc9e1605 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsLogger.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsLogger.java
@@ -8,7 +8,8 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 
 /**
- *  Temporary class for logging language settings providers development.
+ *  AG FIXME -Temporary class for logging language settings providers development.
+ *  To remove before CDT 9.0 release
  *
  */
 @Deprecated
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java
index b25eabb3b19..55082c1fb3a 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsProvidersSerializer.java
@@ -374,34 +374,55 @@ public class LanguageSettingsProvidersSerializer {
 		rawGlobalWorkspaceProviders = rawNewProviders;
 	}
 
-	private static List<LanguageSettingsChangeEvent> createLanguageSettingsChangeEvents(List<LanguageSettingsSerializableProvider> serializableProviders) {
+	/**
+	 * Create event for language settings changes of workspace providers in a project.
+	 */
+	private static LanguageSettingsChangeEvent createEvent(ICProjectDescription prjDescription, List<String> providerIds) {
+		ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations();
+		for (ICConfigurationDescription cfgDescription : cfgDescriptions) {
+			if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
+				for (ILanguageSettingsProvider provider : ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()) {
+					if (isWorkspaceProvider(provider) && providerIds.contains(provider.getId())) {
+						LanguageSettingsChangeEvent event = new LanguageSettingsChangeEvent(prjDescription);
+						if (event.getConfigurationDescriptionIds().length > 0) {
+							return event;
+						}
+						return null;
+					}
+				}
+			}
+		}
+
+		return null;
+	}
+
+	/**
+	 * Compute events for language settings changes in workspace.
+	 */
+	private static List<LanguageSettingsChangeEvent> createLanguageSettingsChangeEvents(List<LanguageSettingsSerializableProvider> providers) {
 		List<LanguageSettingsChangeEvent> events = new ArrayList<LanguageSettingsChangeEvent>();
 
-		List<String> serializableIds = new ArrayList<String>();
-		for (LanguageSettingsSerializableProvider provider : serializableProviders) {
-			serializableIds.add(provider.getId());
+		List<String> providerIds = new ArrayList<String>();
+		for (LanguageSettingsSerializableProvider provider : providers) {
+			providerIds.add(provider.getId());
 		}
 
 		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
 		IProject[] projects = root.getProjects();
-projects:
+
 		for (IProject project : projects) {
 			if (project.isAccessible()) {
 				ICProjectDescription prjDescription = CCorePlugin.getDefault().getProjectDescription(project, false);
 				if (prjDescription != null) {
-					ICConfigurationDescription[] cfgDescriptions = prjDescription.getConfigurations();
-					for (ICConfigurationDescription cfgDescription : cfgDescriptions) {
-						if (cfgDescription instanceof ILanguageSettingsProvidersKeeper) {
-							for (ILanguageSettingsProvider provider : ((ILanguageSettingsProvidersKeeper) cfgDescription).getLanguageSettingProviders()) {
-								if (isWorkspaceProvider(provider) && serializableIds.contains(provider.getId())) {
-									LanguageSettingsChangeEvent event = new LanguageSettingsChangeEvent(prjDescription);
-									if (event.getConfigurationDescriptionIds().length > 0) {
-										events.add(event);
-									}
-									continue projects;
-								}
-							}
+					try {
+						LanguageSettingsChangeEvent event = createEvent(prjDescription, providerIds);
+						if (event != null) {
+							events.add(event);
 						}
+					} catch (Throwable e) {
+						// log and swallow any exception
+						CCorePlugin.log("Error creating event about changes in workspace language settings providers, " //$NON-NLS-1$
+								+ "project=" + project.getName(), e); //$NON-NLS-1$
 					}
 				}
 			}
@@ -416,7 +437,7 @@ projects:
 	 * @throws CoreException
 	 */
 	public static void serializeLanguageSettingsWorkspace() throws CoreException {
-		// FIXME - temporary log to remove before CDT 9.0 release
+		// AG FIXME - temporary log to remove before CDT 9.0 release
 		LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettingsWorkspace()");
 
 		URI uriStoreWsp = getStoreInWorkspaceArea(STORAGE_WORKSPACE_LANGUAGE_SETTINGS);
@@ -588,6 +609,7 @@ projects:
 	 */
 	public static void serializeLanguageSettings(ICProjectDescription prjDescription) throws CoreException {
 		IProject project = prjDescription.getProject();
+		// AG FIXME - temporary log to remove before CDT 9.0 release
 		LanguageSettingsLogger.logWarning("LanguageSettingsProvidersSerializer.serializeLanguageSettings() for " + project);
 
 		try {
@@ -1098,12 +1120,12 @@ projects:
 	 * @param event the ILanguageSettingsChangeEvent event to be broadcast.
 	 */
 	public static void notifyLanguageSettingsChangeListeners(ILanguageSettingsChangeEvent event) {
+		// AG FIXME - temporary log to remove before CDT 9.0 release
 		LanguageSettingsLogger.logWarning("Firing " + event);
 
 		Object[] listeners = fLanguageSettingsChangeListeners.getListeners();
-		for (Object obj : listeners) {
-			ILanguageSettingsChangeListener listener = (ILanguageSettingsChangeListener) obj;
-			listener.handleEvent(event);
+		for (Object listener : listeners) {
+			((ILanguageSettingsChangeListener) listener).handleEvent(event);
 		}
 	}
 
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsScannerInfoProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsScannerInfoProvider.java
index d34a52176b3..ece845d9b5e 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsScannerInfoProvider.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/language/settings/providers/LanguageSettingsScannerInfoProvider.java
@@ -52,8 +52,9 @@ public class LanguageSettingsScannerInfoProvider implements IScannerInfoProvider
 
 	@Override
 	public ExtendedScannerInfo getScannerInformation(IResource rc) {
+		// AG FIXME - temporary log to remove before CDT 9.0 release
 		LanguageSettingsLogger.logScannerInfoProvider(rc, this);
-		
+
 		IProject project = rc.getProject();
 		if (project==null)
 			return DUMMY_SCANNER_INFO;
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/DescriptionScannerInfoProvider.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/DescriptionScannerInfoProvider.java
index 25def77a37c..087656f76c6 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/DescriptionScannerInfoProvider.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/DescriptionScannerInfoProvider.java
@@ -78,9 +78,9 @@ public class DescriptionScannerInfoProvider implements IScannerInfoProvider, ICP
 
 	@Override
 	public IScannerInfo getScannerInformation(IResource resource) {
-		// AG FIXME
+		// AG FIXME - temporary log to remove before CDT 9.0 release
 		LanguageSettingsLogger.logScannerInfoProvider(resource, this);
-		
+
 		if(!fInited)
 			updateProjCfgInfo(CProjectDescriptionManager.getInstance().getProjectDescription(fProject, false));
 
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ScannerProvider.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ScannerProvider.java
index 091ba1e09b8..7a87ec34f65 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ScannerProvider.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/ScannerProvider.java
@@ -98,7 +98,7 @@ public class ScannerProvider extends AbstractCExtension implements IScannerInfoP
 	 */
 	@Override
 	public IScannerInfo getScannerInformation(IResource resource) {
-		// AG FIXME
+		// AG FIXME - temporary log to remove before CDT 9.0 release
 		if (resource instanceof IFile) {
 			LanguageSettingsLogger.logInfo("rc="+resource+" (ScannerProvider.getScannerInformation())");
 		} else {