diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java
index ea03ef62031..51edecd6a91 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java
@@ -24,6 +24,7 @@ import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
 import org.eclipse.cdt.core.dom.CDOM;
+import org.eclipse.cdt.core.dom.PDOM;
 import org.eclipse.cdt.core.model.CoreModel;
 import org.eclipse.cdt.core.model.IWorkingCopy;
 import org.eclipse.cdt.core.parser.IScannerInfoProvider;
@@ -291,6 +292,9 @@ public class CCorePlugin extends Plugin {
 
 		//Fired up the indexer
 		fCoreModel.startIndexing();
+		
+		// Fire up the PDOM
+		PDOM.startup();
 
 		// Set the default for using the structual parse mode to build the CModel
 		getPluginPreferences().setDefault(PREF_USE_STRUCTURAL_PARSE_MODE, false);
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/IPDOMProvider.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/IPDOMProvider.java
index 5097154dc85..38bef67a402 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/IPDOMProvider.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/IPDOMProvider.java
@@ -11,6 +11,7 @@
 package org.eclipse.cdt.core.dom;
 
 import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.model.IElementChangedListener;
 import org.eclipse.core.resources.IProject;
 
 /**
@@ -33,5 +34,13 @@ public interface IPDOMProvider {
 	 * @return the PDOM for the project
 	 */
 	public IPDOM getPDOM(IProject project);
+
+	/**
+	 * Return the element changed listener that will handled change
+	 * events that require the PDOM be updated.
+	 * 
+	 * @return the element changed listener
+	 */
+	public IElementChangedListener getElementChangedListener();
 	
 }
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java
new file mode 100644
index 00000000000..4d292b395a4
--- /dev/null
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/dom/PDOM.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2005 QNX Software Systems 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:
+ * QNX - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.core.dom;
+
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.model.IElementChangedListener;
+import org.eclipse.cdt.internal.core.dom.NullPDOMProvider;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+
+/**
+ * @author Doug Schaefer
+ *
+ */
+public class PDOM {
+
+    private static IPDOMProvider pdomProvider;
+    
+    private static synchronized void initPDOMProvider() {
+		IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(IPDOMProvider.ID);
+		IExtension[] extensions = extensionPoint.getExtensions();
+		if (extensions.length > 0) {
+			// For now just take the first one
+			IConfigurationElement[] elements= extensions[0].getConfigurationElements();
+			if (elements.length > 0) {
+				// For now just take the first provider
+				try {
+					pdomProvider = (IPDOMProvider)elements[0].createExecutableExtension("class"); //$NON-NLS-1$
+					return;
+				} catch (CoreException e) {
+				}
+			}
+		}
+		
+		// Couldn't find one
+		pdomProvider = new NullPDOMProvider();
+    }
+    
+    private static IPDOMProvider getPDOMProvider() {
+    	if (pdomProvider == null) {
+    		initPDOMProvider();
+   		}
+
+    	return pdomProvider;
+    }
+
+    /**
+     * Get the PDOM for the given project.
+     * 
+     * @param project
+     * @return the PDOM for the project
+     */
+	public static IPDOM getPDOM(IProject project) {
+		return getPDOMProvider().getPDOM(project);
+	}
+
+	/**
+	 * Startup the PDOM. This mainly sets us up to handle model
+	 * change events.
+	 */
+	public static void startup() {
+		IElementChangedListener listener = getPDOMProvider().getElementChangedListener();
+		if (listener != null) {
+			CoreModel.getDefault().addElementChangedListener(listener);
+		}
+	}
+
+}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/InternalASTServiceProvider.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/InternalASTServiceProvider.java
index 993d1e18c11..1b42ee442ef 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/InternalASTServiceProvider.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/InternalASTServiceProvider.java
@@ -13,8 +13,8 @@ package org.eclipse.cdt.internal.core.dom;
 import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.core.dom.IASTServiceProvider;
 import org.eclipse.cdt.core.dom.ICodeReaderFactory;
-import org.eclipse.cdt.core.dom.IPDOMProvider;
 import org.eclipse.cdt.core.dom.IParserConfiguration;
+import org.eclipse.cdt.core.dom.PDOM;
 import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
 import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
 import org.eclipse.cdt.core.parser.CodeReader;
@@ -43,11 +43,6 @@ import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IStorage;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.content.IContentType;
 
 /**
@@ -64,31 +59,6 @@ public class InternalASTServiceProvider implements IASTServiceProvider {
     	"GNUC++" //$NON-NLS-1$
    	};
 
-    private IPDOMProvider pdomProvider;
-    
-    private IPDOMProvider getPDOMProvider() {
-    	if (pdomProvider == null) {
-    		IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(IPDOMProvider.ID);
-    		IExtension[] extensions = extensionPoint.getExtensions();
-    		if (extensions.length > 0) {
-    			// For now just take the first one
-    			IConfigurationElement[] elements= extensions[0].getConfigurationElements();
-    			if (elements.length > 0) {
-    				// For now just take the first provider
-    				try {
-    					pdomProvider = (IPDOMProvider)elements[0].createExecutableExtension("class"); //$NON-NLS-1$
-    					return pdomProvider;
-    				} catch (CoreException e) {
-    				}
-    			}
-    		}
-    		
-    		// Couldn't find one
-    		pdomProvider = new NullPDOMProvider();
-    	}
-    	return pdomProvider;
-    }
-    
     /* (non-Javadoc)
      * @see org.eclipse.cdt.core.dom.IASTServiceProvider#getName()
      */
@@ -201,7 +171,7 @@ public class InternalASTServiceProvider implements IASTServiceProvider {
 		// Parse
 		IASTTranslationUnit tu = parser.parse();
 		// Set the PDOM if we can find one
-		tu.setPDOM(getPDOMProvider().getPDOM(project));
+		tu.setPDOM(PDOM.getPDOM(project));
 		return tu;
     }
 
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullPDOMProvider.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullPDOMProvider.java
index 25d9a91dd52..6407eb7d103 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullPDOMProvider.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/NullPDOMProvider.java
@@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.dom;
 
 import org.eclipse.cdt.core.dom.IPDOM;
 import org.eclipse.cdt.core.dom.IPDOMProvider;
+import org.eclipse.cdt.core.model.IElementChangedListener;
 import org.eclipse.core.resources.IProject;
 
 /**
@@ -25,4 +26,9 @@ public class NullPDOMProvider implements IPDOMProvider {
 		return null;
 	}
 	
+	public IElementChangedListener getElementChangedListener() {
+		// here too
+		return null;
+	}
+	
 }