diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/BadClassfileTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/BadClassfileTests.java
index 943dfa8..ebb33cd 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/BadClassfileTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/BadClassfileTests.java
@@ -22,6 +22,7 @@
 
 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.MultiStatus;
 import org.eclipse.osgi.service.resolver.ResolverError;
@@ -222,7 +223,7 @@
 			}
 
 			@Override
-			public boolean acceptReference(IReference reference) {
+			public boolean acceptReference(IReference reference, IProgressMonitor monitor) {
 				return true;
 			}
 
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TestSuiteHelper.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TestSuiteHelper.java
index dd97331..32f6b0f 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TestSuiteHelper.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TestSuiteHelper.java
@@ -298,6 +298,11 @@
 				}
 				return fReferences;
 			}
+
+			@Override
+			public boolean isDisposed() {
+				return false;
+			}
 		};
 	}
 
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/search/tests/TestRequestor.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/search/tests/TestRequestor.java
index 4491c61..1742a91 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/search/tests/TestRequestor.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/search/tests/TestRequestor.java
@@ -16,6 +16,7 @@
 import java.util.HashSet;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.pde.api.tools.internal.model.ProjectComponent;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
@@ -78,7 +79,7 @@
 	}
 
 	@Override
-	public boolean acceptReference(IReference reference) {
+	public boolean acceptReference(IReference reference, IProgressMonitor monitor) {
 		try {
 			IApiMember member = reference.getResolvedReference();
 			if(member != null) {
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/UtilTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/UtilTests.java
index c3ba11a..4f6e18c 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/UtilTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/UtilTests.java
@@ -452,6 +452,11 @@
 			public IReferenceCollection getExternalDependencies() {
 				return null;
 			}
+
+			@Override
+			public boolean isDisposed() {
+				return false;
+			}
 		}
 		List<IApiComponent> allComponents = new ArrayList<>();
 		String[] componentNames = new String[] {
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
index cb6d374..73f7205 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
@@ -47,11 +47,13 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.IPreferencesService;
 import org.eclipse.core.runtime.preferences.IScopeContext;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.pde.api.tools.internal.builder.ApiAnalysisBuilder.ApiAnalysisJob;
 import org.eclipse.pde.api.tools.internal.model.ApiBaseline;
 import org.eclipse.pde.api.tools.internal.model.ApiModelCache;
 import org.eclipse.pde.api.tools.internal.model.ApiModelFactory;
@@ -550,6 +552,7 @@
 	 */
 	public void stop() {
 		try {
+			Job.getJobManager().cancel(ApiAnalysisJob.class);
 			if (baselinecache != null) {
 				// we should first dispose all existing baselines
 				for (IApiBaseline iApiBaseline : baselinecache.values()) {
@@ -627,6 +630,7 @@
 			if (ApiPlugin.DEBUG_BASELINE_MANAGER) {
 				System.out.println("disposing workspace baseline"); //$NON-NLS-1$
 			}
+			Job.getJobManager().cancel(ApiAnalysisJob.class);
 			workspacebaseline.dispose();
 			StubApiComponent.disposeAllCaches();
 			workspacebaseline = null;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalMethodReference.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalMethodReference.java
index fd9b911..555199d 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalMethodReference.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalMethodReference.java
@@ -17,6 +17,7 @@
 import java.util.Map;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.pde.api.tools.internal.model.MethodKey;
 import org.eclipse.pde.api.tools.internal.provisional.builder.IReference;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
@@ -85,8 +86,8 @@
 	}
 
 	@Override
-	protected boolean isProblem(IReference reference) {
-		if (!super.isProblem(reference)) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
+		if (!super.isProblem(reference, monitor)) {
 			return false;
 		}
 		IApiMember method = reference.getResolvedReference();
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java
index c126ea1..511017a 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java
@@ -17,6 +17,7 @@
 import java.util.Map;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.ISourceRange;
@@ -80,8 +81,8 @@
 	}
 
 	@Override
-	protected boolean isProblem(IReference reference) {
-		if (!super.isProblem(reference)) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
+		if (!super.isProblem(reference, monitor)) {
 			return false;
 		}
 		IApiMember type = reference.getResolvedReference();
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
index b470445..077aedb 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
@@ -54,6 +54,7 @@
 import org.eclipse.pde.api.tools.internal.provisional.IApiMarkerConstants;
 import org.eclipse.pde.api.tools.internal.provisional.builder.IApiProblemDetector;
 import org.eclipse.pde.api.tools.internal.provisional.builder.IReference;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiField;
@@ -506,16 +507,16 @@
 		List<IApiProblem> problems = new LinkedList<>();
 		Iterator<IReference> iterator = references.iterator();
 		SubMonitor loopMonitor = SubMonitor.convert(monitor, references.size());
-		while (iterator.hasNext()) {
+		while (iterator.hasNext() && !monitor.isCanceled()) {
 			loopMonitor.split(1);
 			IReference reference = iterator.next();
 			if (reference.getResolvedReference() == null) {
 				// unresolved reference ignore it
 			} else {
-				if (isProblem(reference)) {
+				if (isProblem(reference, monitor)) {
+					IApiComponent component = reference.getMember().getApiComponent();
 					try {
 						IApiProblem problem = null;
-						IApiComponent component = reference.getMember().getApiComponent();
 						if (component instanceof ProjectComponent) {
 							ProjectComponent ppac = (ProjectComponent) component;
 							IJavaProject project = ppac.getJavaProject();
@@ -528,6 +529,7 @@
 						}
 					} catch (CoreException e) {
 						ApiPlugin.log(e.getStatus());
+						checkIfDisposed(component, monitor);
 					}
 				}
 			}
@@ -536,12 +538,37 @@
 	}
 
 	/**
+	 * Checks if given component is disposed or belongs to already disposed baseline
+	 * - and if yes, cancels given monitor if the API analysis runs in a job
+	 *
+	 * @param component
+	 * @param monitor
+	 */
+	public static void checkIfDisposed(IApiComponent component, IProgressMonitor monitor) {
+		if (component != null && !monitor.isCanceled() && ApiAnalysisBuilder.isRunningAsJob()) {
+			try {
+				if (component.isDisposed()) {
+					monitor.setCanceled(true);
+					return;
+				}
+				IApiBaseline baseline = component.getBaseline();
+				if (baseline != null && baseline.isDisposed()) {
+					monitor.setCanceled(true);
+				}
+			} catch (CoreException e) {
+				monitor.setCanceled(true);
+			}
+		}
+	}
+
+	/**
 	 * Returns whether the resolved reference is a real problem.
 	 *
 	 * @param reference
+	 * @param monitor
 	 * @return whether a problem
 	 */
-	protected boolean isProblem(IReference reference) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
 		// by default fragment -> host references are not problems
 		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=255659
 		IApiMember member = reference.getResolvedReference();
@@ -553,6 +580,7 @@
 					return !lcomp.getHost().equals(member.getApiComponent());
 				}
 			} catch (CoreException ce) {
+				checkIfDisposed(reference.getMember().getApiComponent(), monitor);
 				ApiPlugin.log(ce);
 			}
 		}
@@ -1032,8 +1060,8 @@
 	 * @return the API problem if problem or null
 	 * @throws CoreException
 	 */
-	public IApiProblem checkAndCreateProblem(IReference reference) throws CoreException {
-		if (isProblem(reference) == false) {
+	public IApiProblem checkAndCreateProblem(IReference reference, IProgressMonitor monitor) throws CoreException {
+		if (isProblem(reference, monitor) == false) {
 			return null;
 		}
 		return createProblem(reference);
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractTypeLeakDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractTypeLeakDetector.java
index 3fa2bf0..255433f 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractTypeLeakDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractTypeLeakDetector.java
@@ -17,6 +17,7 @@
 import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.ISourceRange;
@@ -74,7 +75,7 @@
 	}
 
 	@Override
-	protected boolean isProblem(IReference reference) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
 		IApiMember member = reference.getResolvedReference();
 		try {
 			IApiAnnotations annotations = member.getApiComponent().getApiDescription().resolveAnnotations(member.getHandle());
@@ -98,6 +99,7 @@
 			}
 		} catch (CoreException e) {
 			ApiPlugin.log(e);
+			checkIfDisposed(member.getApiComponent(), monitor);
 		}
 		return false;
 	}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java
index 6c9fcef..e52943b 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java
@@ -396,8 +396,7 @@
 			return projects;
 		}
 		boolean fullBuild = kind == FULL_BUILD;
-		boolean runAsJob = prefs.getBoolean(ICoreConstants.RUN_API_ANALYSIS_AS_JOB);
-		if (runAsJob) {
+		if (isRunningAsJob()) {
 			ApiAnalysisJob job = new ApiAnalysisJob(BuilderMessages.api_analysis_builder, currentproject, fullBuild,
 					wbaseline, projects);
 			job.cancelSimilarJobs(fullBuild);
@@ -555,7 +554,7 @@
 		}
 	}
 
-	class ApiAnalysisJob extends Job {
+	public class ApiAnalysisJob extends Job {
 
 		private boolean fullBuild;
 		private IApiBaseline wbaseline;
@@ -849,7 +848,7 @@
 		return hasFatalProblem;
 	}
 
-	private static boolean isRunningAsJob() {
+	public static boolean isRunningAsJob() {
 		PDEPreferencesManager prefs = PDECore.getDefault().getPreferencesManager();
 		boolean runAsJob = prefs.getBoolean(ICoreConstants.RUN_API_ANALYSIS_AS_JOB);
 		return runAsJob;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalFieldReferenceDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalFieldReferenceDetector.java
index a8aae4c..8279f46 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalFieldReferenceDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalFieldReferenceDetector.java
@@ -18,6 +18,7 @@
 import java.util.StringTokenizer;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
@@ -133,8 +134,8 @@
 	}
 
 	@Override
-	protected boolean isProblem(IReference reference) {
-		if (!super.isProblem(reference)) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
+		if (!super.isProblem(reference, monitor)) {
 			return false;
 		}
 		String componentId = fFieldComponents.get(reference.getResolvedReference().getHandle());
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalImplementsProblemDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalImplementsProblemDetector.java
index 07ef089..006b04b 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalImplementsProblemDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalImplementsProblemDetector.java
@@ -16,6 +16,7 @@
 import java.util.HashMap;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
@@ -84,10 +85,10 @@
 	}
 
 	@Override
-	protected boolean isProblem(IReference reference) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
 		try {
 			if (isIllegalType(reference)) {
-				return super.isProblem(reference);
+				return super.isProblem(reference, monitor);
 			}
 			if (fRestrictedInterfaces.size() > 0) {
 				IApiMember member = reference.getMember();
@@ -101,8 +102,12 @@
 			if (ApiPlugin.DEBUG_PROBLEM_DETECTOR) {
 				ApiPlugin.log(ce);
 			}
+			IApiMember member = reference.getMember();
+			if (member != null) {
+				checkIfDisposed(member.getApiComponent(), monitor);
+			}
 		}
-		return super.isProblem(reference);
+		return super.isProblem(reference, monitor);
 	}
 
 	@Override
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalMethodReferenceDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalMethodReferenceDetector.java
index 502d7e9..9747421 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalMethodReferenceDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/IllegalMethodReferenceDetector.java
@@ -18,6 +18,7 @@
 import java.util.StringTokenizer;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
@@ -63,8 +64,8 @@
 	}
 
 	@Override
-	protected boolean isProblem(IReference reference) {
-		if (super.isProblem(reference)) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
+		if (super.isProblem(reference, monitor)) {
 			return true;
 		}
 		// check the restricted types listing
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakExtendsProblemDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakExtendsProblemDetector.java
index 8522131..de1be2a 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakExtendsProblemDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakExtendsProblemDetector.java
@@ -19,6 +19,7 @@
 import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.pde.api.tools.internal.model.ApiType;
 import org.eclipse.pde.api.tools.internal.model.MethodKey;
@@ -68,8 +69,8 @@
 	}
 
 	@Override
-	public boolean isProblem(IReference reference) {
-		boolean isProb = super.isProblem(reference);
+	public boolean isProblem(IReference reference, IProgressMonitor monitor) {
+		boolean isProb = super.isProblem(reference, monitor);
 		problemFlags = IApiProblem.LEAK_EXTENDS;
 		//check if the no extend type is left to be extended
 		// or if noimplement interface is extended but not marked noimplement
@@ -108,6 +109,7 @@
 			}
 			catch (CoreException e) {
 				ApiPlugin.log(e);
+				checkIfDisposed(member.getApiComponent(), monitor);
 			}
 		}
 		if (isProb) {
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakFieldProblemDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakFieldProblemDetector.java
index bb31d2b..5f0a045 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakFieldProblemDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakFieldProblemDetector.java
@@ -16,6 +16,7 @@
 import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.ISourceRange;
@@ -74,8 +75,8 @@
 	}
 
 	@Override
-	protected boolean isProblem(IReference reference) {
-		if (super.isProblem(reference)) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
+		if (super.isProblem(reference, monitor)) {
 			IApiField field = (IApiField) reference.getMember();
 			if ((Flags.AccProtected & field.getModifiers()) > 0) {
 				// TODO: could do this check before resolution - it's a check on
@@ -89,6 +90,7 @@
 					}
 				} catch (CoreException e) {
 					ApiPlugin.log(e);
+					checkIfDisposed(field.getApiComponent(), monitor);
 				}
 			}
 			return true;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakImplementsProblemDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakImplementsProblemDetector.java
index fea946d..b30325c 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakImplementsProblemDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakImplementsProblemDetector.java
@@ -16,6 +16,7 @@
 import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
@@ -54,8 +55,8 @@
 	}
 
 	@Override
-	public boolean isProblem(IReference reference) {
-		boolean isProb = super.isProblem(reference);
+	public boolean isProblem(IReference reference, IProgressMonitor monitor) {
+		boolean isProb = super.isProblem(reference, monitor);
 		// check if no implement interface is implemented and thereby leaking api
 		// types from noimplement interface
 		if (isProb == false) {
@@ -74,6 +75,7 @@
 			}
 			catch (CoreException e) {
 				ApiPlugin.log(e);
+				checkIfDisposed(member.getApiComponent(), monitor);
 			}
 		}
 		return isProb;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakReturnTypeDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakReturnTypeDetector.java
index a16b233..edb8f43 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakReturnTypeDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/LeakReturnTypeDetector.java
@@ -17,6 +17,7 @@
 import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.pde.api.tools.internal.provisional.builder.IReference;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiType;
@@ -53,8 +54,8 @@
 	}
 
 	@Override
-	protected boolean isProblem(IReference reference) {
-		if (super.isProblem(reference) == true) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
+		if (super.isProblem(reference, monitor) == true) {
 			return true;
 		}
 		IApiType type = (IApiType) reference.getResolvedReference();
@@ -68,7 +69,8 @@
 							return true;
 						}
 					}
-				}catch (CoreException e) {
+				} catch (CoreException e) {
+					checkIfDisposed(reference.getMember().getApiComponent(), monitor);
 					// do nothing, skip it
 				}
 			}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/MethodLeakDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/MethodLeakDetector.java
index e36fdcd..ae90789 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/MethodLeakDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/MethodLeakDetector.java
@@ -17,6 +17,7 @@
 import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jdt.core.Flags;
 import org.eclipse.jdt.core.IType;
@@ -69,7 +70,7 @@
 	}
 
 	@Override
-	protected boolean isProblem(IReference reference) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
 		IApiMethod method = (IApiMethod) reference.getMember();
 		IApiType type = (IApiType) reference.getResolvedReference();
 		try {
@@ -109,6 +110,7 @@
 			}
 		} catch (CoreException e) {
 			ApiPlugin.log(e);
+			checkIfDisposed(method.getApiComponent(), monitor);
 		}
 		return false;
 	}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java
index 6890dbc..6053d3f 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ReferenceAnalyzer.java
@@ -245,6 +245,9 @@
 			localMonitor.subTask(BuilderMessages.ReferenceAnalyzer_analyzing_api_checking_use);
 			SubMonitor loopMonitor = localMonitor.split(1).setWorkRemaining(detectors.length);
 			for (IApiProblemDetector detector : detectors) {
+				if (monitor.isCanceled()) {
+					break;
+				}
 				allProblems.addAll(detector.createProblems(loopMonitor.split(1)));
 			}
 			IApiProblem[] array = allProblems.toArray(new IApiProblem[allProblems.size()]);
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java
index 4f0b5cd..b305f8e 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/SystemApiDetector.java
@@ -314,7 +314,7 @@
 	}
 
 	@Override
-	protected boolean isProblem(IReference reference) {
+	protected boolean isProblem(IReference reference, IProgressMonitor monitor) {
 		// the reference must be in the system library
 		try {
 			IApiMember member = reference.getMember();
@@ -361,6 +361,7 @@
 			}
 		} catch (CoreException e) {
 			ApiPlugin.log(e);
+			checkIfDisposed(reference.getMember().getApiComponent(), monitor);
 		}
 		return false;
 	}
@@ -408,8 +409,11 @@
 		List<IApiProblem> problems = new LinkedList<>();
 		SubMonitor loopMonitor = SubMonitor.convert(monitor, references.size());
 		for (IReference reference : references) {
+			if (monitor.isCanceled()) {
+				break;
+			}
 			loopMonitor.split(1);
-			if (isProblem(reference)) {
+			if (isProblem(reference, monitor)) {
 				try {
 					IApiProblem problem = null;
 					IApiComponent component = reference.getMember().getApiComponent();
@@ -425,6 +429,7 @@
 					}
 				} catch (CoreException e) {
 					ApiPlugin.log(e.getStatus());
+					AbstractProblemDetector.checkIfDisposed(reference.getMember().getApiComponent(), monitor);
 				}
 			}
 		}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java
index fd9dfc3..2caca5a 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java
@@ -820,6 +820,11 @@
 		fState = null;
 	}
 
+	@Override
+	public boolean isDisposed() {
+		return disposed;
+	}
+
 	/**
 	 * performs the actual dispose of mappings and cached elements
 	 */
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java
index 6fa57ba..20078a1 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/BundleComponent.java
@@ -152,8 +152,6 @@
 	 */
 	private long fBundleId;
 
-	private volatile boolean disposed;
-
 	/**
 	 * Constructs a new API component from the specified location in the file
 	 * system in the given baseline.
@@ -189,7 +187,6 @@
 			synchronized (this) {
 				fManifest = null;
 				fBundleDescription = null;
-				disposed = true;
 			}
 		}
 	}
@@ -1275,7 +1272,4 @@
 				NLS.bind(Messages.BundleApiComponent_baseline_disposed, getName(), baseline.getName()), null));
 	}
 
-	protected boolean isDisposed() {
-		return disposed;
-	}
 }
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Component.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Component.java
index a9ad50c..0a63a65 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Component.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/Component.java
@@ -49,6 +49,8 @@
 	 */
 	private volatile IReferenceCollection fReferences;
 
+	private volatile boolean disposed;
+
 	/**
 	 * Constructs an API component in the given {@link IApiBaseline}.
 	 *
@@ -85,6 +87,7 @@
 		} finally {
 			synchronized (this) {
 				fApiDescription = null;
+				disposed = true;
 			}
 		}
 	}
@@ -185,4 +188,9 @@
 		}
 		return fReferences;
 	}
+
+	@Override
+	public boolean isDisposed() {
+		return disposed;
+	}
 }
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiBaseline.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiBaseline.java
index ba5a7b1..59880a1 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiBaseline.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiBaseline.java
@@ -167,4 +167,9 @@
 	 * @param location the new location of the baseline
 	 */
 	public void setLocation(String location);
+
+	/**
+	 * @return true if the current baseline is disposed
+	 */
+	public boolean isDisposed();
 }
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java
index fb322cd..cfd2d4e 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java
@@ -242,4 +242,9 @@
 	 * @return the collection of reference descriptors
 	 */
 	public IReferenceCollection getExternalDependencies();
+
+	/**
+	 * @return true if the current component is disposed
+	 */
+	public boolean isDisposed();
 }
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/ApiSearchEngine.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/ApiSearchEngine.java
index 19d990d..0109709 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/ApiSearchEngine.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/ApiSearchEngine.java
@@ -157,7 +157,7 @@
 		IReference ref = null;
 		SubMonitor localmonitor = SubMonitor.convert(monitor, references.size());
 		IApiMember member = null;
-		for (Iterator<IReference> iter = references.iterator(); iter.hasNext();) {
+		for (Iterator<IReference> iter = references.iterator(); iter.hasNext() && !monitor.isCanceled();) {
 			if (localmonitor.isCanceled()) {
 				return Collections.emptyList();
 			}
@@ -167,7 +167,7 @@
 				continue;
 			}
 			localmonitor.setTaskName(MessageFormat.format(SearchMessages.ApiSearchEngine_searching_for_use_from, fRequestorContext, type.getName()));
-			if (requestor.acceptReference(ref)) {
+			if (requestor.acceptReference(ref, monitor)) {
 				refs.add(ref);
 			}
 			localmonitor.worked(1);
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/IApiSearchRequestor.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/IApiSearchRequestor.java
index 180eaa5..f6fe357 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/IApiSearchRequestor.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/search/IApiSearchRequestor.java
@@ -13,6 +13,7 @@
  *******************************************************************************/
 package org.eclipse.pde.api.tools.internal.provisional.search;
 
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.pde.api.tools.internal.provisional.builder.IReference;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.model.IApiMember;
@@ -94,7 +95,7 @@
 	 * @param reference
 	 * @return true if the reference should be accepted, false otherwise
 	 */
-	public boolean acceptReference(IReference reference);
+	public boolean acceptReference(IReference reference, IProgressMonitor monitor);
 
 	/**
 	 * Returns the or'd listing of {@link IReference} kinds to look for.
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java
index 122a21c..0dc3de7 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/search/UseSearchRequestor.java
@@ -16,6 +16,7 @@
 import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.pde.api.tools.internal.AntFilterStore;
 import org.eclipse.pde.api.tools.internal.builder.AbstractProblemDetector;
 import org.eclipse.pde.api.tools.internal.builder.ProblemDetectorBuilder;
@@ -203,7 +204,7 @@
 	}
 
 	@Override
-	public boolean acceptReference(IReference reference) {
+	public boolean acceptReference(IReference reference, IProgressMonitor monitor) {
 		try {
 			IApiMember member = reference.getResolvedReference();
 			if (member != null) {
@@ -211,7 +212,7 @@
 				if (!fComponentIds.contains(component.getSymbolicName()) || component.equals(reference.getMember().getApiComponent())) {
 					return false;
 				}
-				if (isIllegalUse(reference) || (includesAPI() && includesInternal())) {
+				if (isIllegalUse(reference, monitor) || (includesAPI() && includesInternal())) {
 					return true;
 				}
 				IApiAnnotations annots = component.getApiDescription().resolveAnnotations(member.getHandle());
@@ -226,6 +227,7 @@
 			}
 		} catch (CoreException ce) {
 			ApiPlugin.log(ce);
+			AbstractProblemDetector.checkIfDisposed(reference.getMember().getApiComponent(), monitor);
 		}
 		return false;
 	}
@@ -238,14 +240,17 @@
 	 * @return true if the reference is illegal use false otherwise
 	 * @since 1.1
 	 */
-	boolean isIllegalUse(IReference reference) {
+	boolean isIllegalUse(IReference reference, IProgressMonitor monitor) {
 		IApiProblemDetector[] detectors = fAnalyzer.getProblemDetectors(reference.getReferenceKind());
 		for (IApiProblemDetector detector : detectors) {
+			if (monitor.isCanceled()) {
+				break;
+			}
 			if (detector.considerReference(reference)) {
 				Reference ref = (Reference) reference;
 				ref.setFlags(IReference.F_ILLEGAL);
 				try {
-					IApiProblem pb = ((AbstractProblemDetector) detector).checkAndCreateProblem(reference);
+					IApiProblem pb = ((AbstractProblemDetector) detector).checkAndCreateProblem(reference, monitor);
 					if (pb != null && !isFiltered(pb)) {
 						ref.addProblems(pb);
 					} else {
@@ -253,6 +258,7 @@
 					}
 				} catch (CoreException e) {
 					ApiPlugin.log(e);
+					AbstractProblemDetector.checkIfDisposed(reference.getMember().getApiComponent(), monitor);
 				}
 				return true;
 			}
