diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMManager.java
index cfced162bc8..7823d08cef7 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMManager.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/IPDOMManager.java
@@ -13,8 +13,6 @@ package org.eclipse.cdt.core.dom;
 
 import org.eclipse.cdt.core.model.ICProject;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
 
 /**
  * @author Doug Schaefer
@@ -38,10 +36,4 @@ public interface IPDOMManager {
 	// Enqueue and indexer sub job
 	public void enqueue(IPDOMIndexerTask subjob);
 
-	// Scheduling rule used by indexers to make sure we don't get
-	// Too much indexing going on.
-	public ISchedulingRule getIndexerSchedulingRule();
-	
-	public IProgressMonitor getProgressGroup();
-	
 }
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java
index 8ddf20b5809..d31bd5aa44d 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java
@@ -38,7 +38,6 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.IPreferencesService;
@@ -62,17 +61,6 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener {
 	private static final QualifiedName pdomProperty
 	= new QualifiedName(CCorePlugin.PLUGIN_ID, "pdom"); //$NON-NLS-1$
 
-	private IProgressMonitor group;
-	
-	private final ISchedulingRule indexerSchedulingRule = new ISchedulingRule() {
-		public boolean contains(ISchedulingRule rule) {
-			return rule == this;
-		}
-		public boolean isConflicting(ISchedulingRule rule) {
-			return rule == this;
-		}
-	};
-	
 	public synchronized IPDOM getPDOM(ICProject project) throws CoreException {
 		IProject rproject = project.getProject();
 		PDOM pdom = (PDOM)rproject.getSessionProperty(pdomProperty);
@@ -316,16 +304,6 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener {
 		}
     }
     
-    public ISchedulingRule getIndexerSchedulingRule() {
-    	return indexerSchedulingRule;
-    }
-    
-    public IProgressMonitor getProgressGroup() {
-    	if (group == null)
-    		group = Platform.getJobManager().createProgressGroup();
-    	return group;
-    }
-    
 	/**
 	 * Startup the PDOM. This mainly sets us up to handle model
 	 * change events.
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ctags/CtagsIndexerJob.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ctags/CtagsIndexerJob.java
index db26bfb3f9a..108cffcaec2 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ctags/CtagsIndexerJob.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ctags/CtagsIndexerJob.java
@@ -42,7 +42,6 @@ public abstract class CtagsIndexerJob extends Job {
 		super("ctags Indexer: " + indexer.getProject().getElementName());
 		this.indexer = indexer;
 		this.pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(indexer.getProject());
-		setRule(CCorePlugin.getPDOMManager().getIndexerSchedulingRule());
 	}
 
 	// Indexing functions
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullHandleDelta.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullHandleDelta.java
index 320d9570351..9e5ff642a3c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullHandleDelta.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullHandleDelta.java
@@ -31,10 +31,8 @@ import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
 
 /**
  * @author Doug Schaefer
@@ -54,7 +52,7 @@ public class PDOMFullHandleDelta extends PDOMFullIndexerJob {
 		this.delta = delta;
 	}
 
-	protected IStatus run(IProgressMonitor monitor) {
+	public void run(IProgressMonitor monitor) {
 		try {
 			long start = System.currentTimeMillis();
 		
@@ -63,42 +61,40 @@ public class PDOMFullHandleDelta extends PDOMFullIndexerJob {
 			int count = changed.size() + added.size() + removed.size();
 
 			if (count > 0) {
-				monitor.beginTask("Indexing", count);
-					
 				Iterator i = changed.values().iterator();
 				while (i.hasNext()) {
+					if (monitor.isCanceled())
+						return;
 					ITranslationUnit tu = (ITranslationUnit)i.next();
-					monitor.subTask(tu.getElementName());
 					try {
 						changeTU(tu);
 					} catch (Throwable e) {
 						CCorePlugin.log(e);
 						if (++errorCount > MAX_ERRORS)
-							return Status.CANCEL_STATUS;
+							return;
 					}
-					monitor.worked(1);
 				}
 				
 				i = added.iterator();
 				while (i.hasNext()) {
+					if (monitor.isCanceled())
+						return;
 					ITranslationUnit tu = (ITranslationUnit)i.next();
-					monitor.subTask(tu.getElementName());
 					try {
 						addTU(tu);
 					} catch (Throwable e) {
 						CCorePlugin.log(e);
 						if (++errorCount > MAX_ERRORS)
-							return Status.CANCEL_STATUS;
+							return;
 					}
-					monitor.worked(1);
 				}
 				
 				i = removed.iterator();
 				while (i.hasNext()) {
+					if (monitor.isCanceled())
+						return;
 					ITranslationUnit tu = (ITranslationUnit)i.next();
-					monitor.subTask(tu.getElementName());
 					removeTU(tu);
-					monitor.worked(1);
 				}
 				
 				String showTimings = Platform.getDebugOption(CCorePlugin.PLUGIN_ID
@@ -106,12 +102,9 @@ public class PDOMFullHandleDelta extends PDOMFullIndexerJob {
 				if (showTimings != null && showTimings.equalsIgnoreCase("true")) //$NON-NLS-1$
 					System.out.println("PDOM Full Delta Time: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$
 			}
-		
-			return Status.OK_STATUS;
 		} catch (CoreException e) {
-			return e.getStatus();
+			CCorePlugin.log(e);
 		} catch (InterruptedException e) {
-			return Status.CANCEL_STATUS;
 		}
 	}
 
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexer.java
index 6f7d5602998..3ec17e21233 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexer.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexer.java
@@ -11,6 +11,7 @@
 
 package org.eclipse.cdt.internal.core.pdom.indexer.full;
 
+import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.core.dom.IPDOMIndexer;
 import org.eclipse.cdt.core.model.ICElementDelta;
 import org.eclipse.cdt.core.model.ICProject;
@@ -36,11 +37,12 @@ public class PDOMFullIndexer implements IPDOMIndexer {
 	}
 	
 	public void handleDelta(ICElementDelta delta) throws CoreException {
-		new PDOMFullHandleDelta(this, delta).schedule();
+		CCorePlugin.getPDOMManager().enqueue(
+				new PDOMFullHandleDelta(this, delta));
 	}
 
 	public void reindex() throws CoreException {
-		new PDOMFullReindex(this).schedule();
+		CCorePlugin.getPDOMManager().enqueue(new PDOMFullReindex(this));
 	}
 
 }
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerJob.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerJob.java
index 0fbea27aa1f..ead0a56dbe2 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerJob.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerJob.java
@@ -12,6 +12,7 @@
 package org.eclipse.cdt.internal.core.pdom.indexer.full;
 
 import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.dom.IPDOMIndexerTask;
 import org.eclipse.cdt.core.dom.ast.ASTVisitor;
 import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
 import org.eclipse.cdt.core.dom.ast.IASTName;
@@ -24,13 +25,12 @@ import org.eclipse.cdt.internal.core.pdom.PDOM;
 import org.eclipse.cdt.internal.core.pdom.dom.PDOMFile;
 import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.jobs.Job;
 
 /**
  * @author Doug Schaefer
  *
  */
-public abstract class PDOMFullIndexerJob extends Job {
+public abstract class PDOMFullIndexerJob implements IPDOMIndexerTask {
 
 	protected final PDOMFullIndexer indexer;
 	protected final PDOM pdom;
@@ -40,10 +40,8 @@ public abstract class PDOMFullIndexerJob extends Job {
 	protected final int MAX_ERRORS = 10;
 	
 	public PDOMFullIndexerJob(PDOMFullIndexer indexer) throws CoreException {
-		super("Full Indexer: " + indexer.getProject().getElementName());
 		this.indexer = indexer;
 		this.pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(indexer.getProject());
-		setRule(CCorePlugin.getPDOMManager().getIndexerSchedulingRule());
 	}
 
 	protected IASTTranslationUnit parse(ITranslationUnit tu) throws CoreException {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullReindex.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullReindex.java
index 98dc690a149..6d1683b6f15 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullReindex.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullReindex.java
@@ -18,7 +18,6 @@ import org.eclipse.cdt.core.model.ITranslationUnit;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 
@@ -32,33 +31,13 @@ public class PDOMFullReindex extends PDOMFullIndexerJob {
 		super(indexer);
 	}
 
-	protected IStatus run(final IProgressMonitor monitor) {
+	public void run(final IProgressMonitor monitor) {
 		try {
 			long start = System.currentTimeMillis();
 			
 			// First clear out the PDOM
 			pdom.clear();
 			
-			// Get a count of all the elements that we'll be visiting for the monitor
-			final int[] count = { 0 };
-			indexer.getProject().accept(new ICElementVisitor() {
-				public boolean visit(ICElement element) throws CoreException {
-					if (monitor.isCanceled())
-						throw new CoreException(Status.CANCEL_STATUS);
-					switch (element.getElementType()) {
-					case ICElement.C_UNIT:
-						++count[0];
-						return false;
-					case ICElement.C_CCONTAINER:
-					case ICElement.C_PROJECT:
-						return true;
-					}
-					return false;
-				}
-			});
-			
-			monitor.beginTask("Indexing", count[0]);
-			
 			// First index all the source files (i.e. not headers)
 			indexer.getProject().accept(new ICElementVisitor() {
 				public boolean visit(ICElement element) throws CoreException {
@@ -68,7 +47,6 @@ public class PDOMFullReindex extends PDOMFullIndexerJob {
 					case ICElement.C_UNIT:
 						ITranslationUnit tu = (ITranslationUnit)element;
 						if (tu.isSourceUnit()) {
-							monitor.subTask(tu.getElementName());
 							try {
 								addTU(tu);
 							} catch (Throwable e) {
@@ -76,7 +54,6 @@ public class PDOMFullReindex extends PDOMFullIndexerJob {
 								if (++errorCount > MAX_ERRORS)
 									throw new CoreException(Status.CANCEL_STATUS);
 							}
-							monitor.worked(1);
 						}
 						return false;
 					case ICElement.C_CCONTAINER:
@@ -99,7 +76,6 @@ public class PDOMFullReindex extends PDOMFullIndexerJob {
 							IFile rfile = (IFile)tu.getUnderlyingResource();
 							String filename = rfile.getLocation().toOSString();
 							if (pdom.getFile(filename) == null) {
-								monitor.subTask(tu.getElementName());
 								try {
 									addTU(tu);
 								} catch (InterruptedException e) {
@@ -108,7 +84,6 @@ public class PDOMFullReindex extends PDOMFullIndexerJob {
 										throw new CoreException(Status.CANCEL_STATUS);
 								}
 							}
-							monitor.worked(1);
 						}
 						return false;
 					case ICElement.C_CCONTAINER:
@@ -122,11 +97,11 @@ public class PDOMFullReindex extends PDOMFullIndexerJob {
 			String showTimings = Platform.getDebugOption(CCorePlugin.PLUGIN_ID
 					+ "/debug/pdomtimings"); //$NON-NLS-1$
 			if (showTimings != null && showTimings.equalsIgnoreCase("true")) //$NON-NLS-1$
-				System.out.println("PDOM Full Reindex Time: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$
-
-			return Status.OK_STATUS;
+				System.out.println("PDOM Full Reindex Time: " + (System.currentTimeMillis() - start) //$NON-NLS-1$
+						+ " " + indexer.getProject().getElementName()); //$NON-NLS-1$
 		} catch (CoreException e) {
-			return e.getStatus();
+			if (e.getStatus() != Status.CANCEL_STATUS)
+				CCorePlugin.log(e);
 		}
 	}