diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifferencer.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
index 0035ef9..eb62f64 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
@@ -89,7 +89,7 @@
 	 * The differences are returned as an array of <code>RangeDifference</code>s.
 	 * If no differences are detected an empty array is returned.
 	 *
-	 * @param factory
+	 * @param factory factory to instantiate new {@link RangeDifference}s
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param left the left range comparator
 	 * @param right the right range comparator
@@ -141,7 +141,7 @@
 	 * If the ancestor range comparator is <code>null</code>, a two-way
 	 * comparison is performed.
 	 *
-	 * @param factory
+	 * @param factory factory to instantiate new {@link RangeDifference}s
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param ancestor the ancestor range comparator or <code>null</code>
 	 * @param left the left range comparator
@@ -278,7 +278,7 @@
 	 * In contrast to <code>findDifferences</code>, the result
 	 * contains <code>RangeDifference</code> elements for non-differing ranges too.
 	 *
-	 * @param factory
+	 * @param factory factory to instantiate new {@link RangeDifference}s
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param left the left range comparator
 	 * @param right the right range comparator
@@ -352,7 +352,7 @@
 	 * If the ancestor range comparator is <code>null</code>, a two-way
 	 * comparison is performed.
 	 *
-	 * @param factory
+	 * @param factory factory to instantiate new {@link RangeDifference}s
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param ancestor the ancestor range comparator or <code>null</code>
 	 * @param left the left range comparator
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
index 826bd9d..e28f944 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
@@ -333,8 +333,8 @@
 	 * additions and deletions.
 	 * <p>
 	 * Note: this method is for internal use only. Clients should not call this method.
-	 * @param differencer
-	 * @param root
+	 * @param differencer the differencer used to rewrite
+	 * @param root the root to rewrite
 	 */
 	public void rewriteTree(Differencer differencer, IDiffContainer root) {
 		// empty default implementation
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
index df6cb20..a153f12 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
@@ -1209,7 +1209,7 @@
 	 * Note: this method is for internal use only. Clients should not call this method.
 	 *
 	 * @param monitor a progress monitor
-	 * @throws CoreException
+	 * @throws CoreException not thrown anymore
 	 * @deprecated use {@link IFlushable#flush(IProgressMonitor)}.
 	 */
 	@Deprecated
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator2.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator2.java
index fd79f15..d3714b1 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator2.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator2.java
@@ -55,7 +55,7 @@
 	 * @param monitor a progress monitor or <code>null</code> if progress and cancelation is not required
 	 * @return the root node of the structure or <code>null</code> in case of
 	 *         error
-	 * @throws CoreException
+	 * @throws CoreException if structure creation failed; depends on actual implementation
 	 * @see IStructureCreator#getStructure(Object)
 	 * @see #destroy(Object)
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureCreator.java
index 824323d..7e0a209 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureCreator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureCreator.java
@@ -152,7 +152,7 @@
 	 * @param monitor a progress monitor or <code>null</code> if progress is not required
 	 *
 	 * @return a structure comparator
-	 * @throws CoreException
+	 * @throws CoreException if creating the comparator failed; depends on actual implementation
 	 */
 	protected abstract IStructureComparator createStructureComparator(
 			final Object element, IDocument document,
diff --git a/bundles/org.eclipse.jsch.core/src/org/eclipse/jsch/core/IJSchService.java b/bundles/org.eclipse.jsch.core/src/org/eclipse/jsch/core/IJSchService.java
index 8bbcc8e..da6f833 100644
--- a/bundles/org.eclipse.jsch.core/src/org/eclipse/jsch/core/IJSchService.java
+++ b/bundles/org.eclipse.jsch.core/src/org/eclipse/jsch/core/IJSchService.java
@@ -110,7 +110,7 @@
    * @param monitor
    *          a progress monitor or <code>null</code> if progress and
    *          cancelation is not desired
-   * @throws JSchException
+   * @throws JSchException if errors occur
    */
   public abstract void connect(Proxy proxy, String host, int port, int timeout,
       IProgressMonitor monitor) throws JSchException;
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/IProjectSetSerializer.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/IProjectSetSerializer.java
index e9f1f0a..f1c3aeb 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/IProjectSetSerializer.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/IProjectSetSerializer.java
@@ -47,7 +47,7 @@
 	 *                 com.ibm.swt.widgets.Shell or it will be null.
 	 * @param monitor  a progress monitor
 	 * @return String[] an array of serialized reference strings uniquely identifying the projects
-	 * @throws TeamException
+	 * @throws TeamException on failures; depends on concrete implementation
 	 */
 	public String[] asReference(IProject[] providerProjects, Object context, IProgressMonitor monitor) throws TeamException;
 
@@ -67,7 +67,7 @@
 	 *                 com.ibm.swt.widgets.Shell or it will be null.
 	 * @param monitor  a progress monitor
 	 * @return IProject[]  an array of projects that were created
-	 * @throws TeamException
+	 * @throws TeamException on failures; depends on concrete implementation
 	 */
 	public IProject[] addToWorkspace(String[] referenceStrings, String filename, Object context, IProgressMonitor monitor) throws TeamException;
 }
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetCapability.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetCapability.java
index 1c3bbcc..011c419 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetCapability.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetCapability.java
@@ -230,7 +230,7 @@
 	 * @return
 	 * 		an array of confirmed projects to be loaded
 	 * 		or <code>null</code> if the operation is to be canceled.
-	 * @throws TeamException
+	 * @throws TeamException on failure
 	 */
 	protected IProject[] confirmOverwrite(
 		ProjectSetSerializationContext context,
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetSerializationContext.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetSerializationContext.java
index 752f543..a4e19a3 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetSerializationContext.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/ProjectSetSerializationContext.java
@@ -62,7 +62,7 @@
 	 * @return
 	 * 		an array of zero or more projects that should be overwritten
 	 * 		or <code>null</code> if the operation is to be canceled
-	 * @throws TeamException
+	 * @throws TeamException on failure
 	 */
 	public IProject[] confirmOverwrite(IProject[] projects) throws TeamException {
 		return new IProject[0];
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java
index 9ce3469..de380d5 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/RepositoryProvider.java
@@ -271,7 +271,7 @@
 	}
 	/**
 	 * Disassociates project with the repository provider its currently mapped to.
-	 * @param project
+	 * @param project project to unmap
 	 * @throws TeamException The project isn't associated with any repository provider.
 	 */
 	public static void unmap(IProject project) throws TeamException {
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ChangeTracker.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ChangeTracker.java
index dbf9c7b..d5df945 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ChangeTracker.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ChangeTracker.java
@@ -269,7 +269,7 @@
 	 * @param project the project
 	 * @param name the unique name used to identify the change set
 	 * @param files the change files to be grouped
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	protected void ensureGrouped(IProject project, String name, IFile[] files) throws CoreException {
 		IChangeGroupingRequestor collector = getCollector(project);
@@ -287,7 +287,8 @@
 	 * repository provider associated with the file's project.
 	 * @param file the file
 	 * @return whether the given file is modified
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs while trying to determine the modification state
+	 * of the file
 	 */
 	protected boolean isModified(IFile file) throws CoreException {
 		IChangeGroupingRequestor collector = getCollector(file.getProject());
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/DelegatingStorageMerger.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/DelegatingStorageMerger.java
index 6256fec..d42d8f3 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/DelegatingStorageMerger.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/DelegatingStorageMerger.java
@@ -104,7 +104,7 @@
 	 * to create the merger to which the merge should be delegated.
 	 * @param target the storage that contains the target contents of the merge.
 	 * @return a merger for the given storage or <code>null</code>
-	 * @throws CoreException
+	 * @throws CoreException no merger found
 	 */
 	protected IStorageMerger createDelegateMerger(IStorage target) throws CoreException {
 		IStorageMerger merger = null;
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/IMergeContext.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/IMergeContext.java
index f304079..20df86e 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/IMergeContext.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/IMergeContext.java
@@ -306,7 +306,7 @@
 	 * match the local state.
 	 * @param diff the diff
 	 * @param monitor a progress monitor
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	public void reject(IDiff diff, IProgressMonitor monitor) throws CoreException;
 
@@ -316,7 +316,7 @@
 	 * each diff.
 	 * @param diffs the diffs
 	 * @param monitor a progress monitor
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	public void reject(IDiff[] diffs, IProgressMonitor monitor) throws CoreException;
 
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ISynchronizationScopeManager.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ISynchronizationScopeManager.java
index b345b50..ee91d50 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ISynchronizationScopeManager.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/ISynchronizationScopeManager.java
@@ -58,7 +58,7 @@
 	 * @param monitor a progress monitor
 	 * when building the scope
 	 *
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	void initialize(IProgressMonitor monitor) throws CoreException;
 
@@ -72,7 +72,7 @@
 	 * @param mappings the mappings to be refreshed
 	 * @param monitor a progress monitor
 	 * @return a set of traversals that cover the given mappings
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	ResourceTraversal[] refresh(ResourceMapping[] mappings, IProgressMonitor monitor) throws CoreException;
 
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/MergeContext.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/MergeContext.java
index 41ff492..37e15e3 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/MergeContext.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/MergeContext.java
@@ -316,7 +316,7 @@
 	 *            the diff whose local is to be replaced
 	 * @param monitor
 	 *            a progress monitor
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	protected void performReplace(final IDiff diff, IProgressMonitor monitor) throws CoreException {
 		IResourceDiff d;
@@ -356,7 +356,7 @@
 	 *            the diff whose local is now in-sync
 	 * @param monitor
 	 *            a progress monitor
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	protected abstract void makeInSync(IDiff diff, IProgressMonitor monitor) throws CoreException;
 
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/SynchronizationScopeManager.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/SynchronizationScopeManager.java
index 7477394..9228d7d 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/SynchronizationScopeManager.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/mapping/provider/SynchronizationScopeManager.java
@@ -92,7 +92,7 @@
 	 * @param context the resource mapping context
 	 * @param monitor a progress monitor
 	 * @return the resource mappings
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	public static ResourceMapping[] getMappingsFromProviders(ResourceTraversal[] traversals,
 			ResourceMappingContext context,
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/Subscriber.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/Subscriber.java
index 3a3271f..fa888f1 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/Subscriber.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/Subscriber.java
@@ -99,7 +99,7 @@
 	 * @param resource the resource being tested
 	 * @return <code>true</code> if this resource is supervised, and <code>false</code>
 	 *               otherwise
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	abstract public boolean isSupervised(IResource resource) throws TeamException;
 
@@ -114,7 +114,7 @@
 	 * </p>
 	 * @param resource the resource
 	 * @return a list of member resources
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	abstract public IResource[] members(IResource resource) throws TeamException;
 
@@ -150,7 +150,7 @@
 	 *
 	 * @param resource the resource of interest
 	 * @return sync info
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 * @see #getDiff(IResource)
 	 */
 	abstract public SyncInfo getSyncInfo(IResource resource) throws TeamException;
@@ -372,7 +372,7 @@
 	 *
 	 * @param resource the resource of interest
 	 * @return the diff for the resource or <code>null</code>
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 * @throws TeamException if errors occur
 	 * @since 3.2
 	 */
@@ -395,7 +395,7 @@
 	 * </ul>
 	 * @param traversals the traversals to be visited
 	 * @param visitor the visitor
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 * @throws TeamException if errors occur
 	 * @since 3.2
 	 */
@@ -495,7 +495,7 @@
 	 * @param stateMask the mask that identifies the state flags of interested
 	 * @param monitor a progress monitor
 	 * @return the synchronization state of the given resource mapping
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 * @since 3.2
 	 * @see IDiff
 	 * @see IThreeWayDiff
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/SubscriberMergeContext.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/SubscriberMergeContext.java
index 6f13997..e133455 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/SubscriberMergeContext.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/SubscriberMergeContext.java
@@ -109,7 +109,7 @@
 	 * Return the sync info for the given resource.
 	 * @param resource the resource
 	 * @return the sync info for the resource obtained from the subscriber
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	protected SyncInfo getSyncInfo(IResource resource) throws CoreException {
 		return handler.getSubscriber().getSyncInfo(resource);
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/SubscriberResourceMappingContext.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/SubscriberResourceMappingContext.java
index 695368f..baf7b5f 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/SubscriberResourceMappingContext.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/subscribers/SubscriberResourceMappingContext.java
@@ -162,7 +162,10 @@
 	 * @param depth the depth of the refresh
 	 * @param flags the flags that indicate extra state that should be fetched
 	 * @param monitor a progress monitor
-	 * @throws TeamException
+	 * @throws TeamException if this method fails. Reasons include:
+	 * <ul>
+	 * <li>The server could not be contacted.</li>
+	 * </ul>
 	 */
 	protected void refresh(IResource[] resources, int depth, int flags, IProgressMonitor monitor) throws TeamException {
 		subscriber.refresh(resources, depth, monitor);
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/AbstractResourceVariantTree.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/AbstractResourceVariantTree.java
index 396edd2..8bfdabf 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/AbstractResourceVariantTree.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/AbstractResourceVariantTree.java
@@ -59,7 +59,7 @@
 	 * <code>IResource.DEPTH_ONE</code>, or <code>IResource.DEPTH_INFINITE</code>)
 	 * @param monitor a progress monitor
 	 * @return the array of resources whose corresponding variants have changed
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	@Override
 	public IResource[] refresh(IResource[] resources, int depth, IProgressMonitor monitor) throws TeamException {
@@ -87,7 +87,7 @@
 	 * <code>IResource.DEPTH_ONE</code>, or <code>IResource.DEPTH_INFINITE</code>)
 	 * @param monitor a progress monitor
 	 * @return the resource's whose variants have changed
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	protected IResource[] refresh(IResource resource, int depth, IProgressMonitor monitor) throws TeamException {
 		IResource[] changedResources = null;
@@ -121,7 +121,7 @@
 	 * <code>IResource.DEPTH_ONE</code>, or <code>IResource.DEPTH_INFINITE</code>)
 	 * @param monitor a progress monitor
 	 * @return the resource's whose variants have changed
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	protected IResource[] collectChanges(IResource local, IResourceVariant remote, int depth, IProgressMonitor monitor) throws TeamException {
 		List<IResource> changedResources = new ArrayList<>();
@@ -175,7 +175,7 @@
 	 * @param local the local resource
 	 * @param remote the newly fetched resource variant
 	 * @return <code>true</code> if the resource variant changed
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	protected abstract boolean setVariant(IResource local, IResourceVariant remote) throws TeamException;
 
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/CachedResourceVariant.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/CachedResourceVariant.java
index fb17d43..b270711 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/CachedResourceVariant.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/CachedResourceVariant.java
@@ -148,7 +148,7 @@
 	 * This method is not intended to be overridden by clients.
 	 * @param stream the stream containing the contents of the resource variant
 	 * @param monitor a progress monitor
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	protected void setContents(InputStream stream, IProgressMonitor monitor) throws TeamException {
 		// Ensure that there is a cache entry to receive the contents
@@ -186,7 +186,7 @@
 	 * <p>
 	 * This method is not intended to be overridden by clients.
 	 * @return the cached contents or <code>null</code>
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	protected InputStream getCachedContents() throws TeamException {
 		if (isContainer() || !isContentsCached()) return null;
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/IResourceVariant.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/IResourceVariant.java
index bc67053..46e900f 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/IResourceVariant.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/IResourceVariant.java
@@ -58,7 +58,7 @@
 	 *
 	 * @return an <code>IStorage</code> that provides access to the contents of
 	 * the remote resource or <code>null</code> if the remote resource is a container.
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public IStorage getStorage(IProgressMonitor monitor) throws TeamException;
 
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/IResourceVariantTree.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/IResourceVariantTree.java
index dc6c5fb..f687e78 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/IResourceVariantTree.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/IResourceVariantTree.java
@@ -43,7 +43,7 @@
 	 * members can be retrieved using <code>getResourceVariant(IResource)</code>.
 	 * @param resource the local resource
 	 * @return the members of the local resource for which this tree contains resource variants
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public abstract IResource[] members(IResource resource) throws TeamException;
 
@@ -52,7 +52,7 @@
 	 * <code>null</code> if there is no variant for the resource.
 	 * @param resource the local resource
 	 * @return the resource's variant in this tree
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public abstract IResourceVariant getResourceVariant(IResource resource) throws TeamException;
 
@@ -60,7 +60,7 @@
 	 * Return whether the local resource has a variant in this tree.
 	 * @param resource the local resource
 	 * @return <code>true</code> if the tree contains a variant for the resource
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public boolean hasResourceVariant(IResource resource) throws TeamException;
 
@@ -73,7 +73,7 @@
 	 * @param monitor a progress monitor
 	 * @return the array of resources whose corresponding variants have changed
 	 * as a result of the refresh
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public IResource[] refresh(
 			IResource[] resources,
@@ -86,7 +86,7 @@
 	 * @param resource the resource
 	 * @param depth the flush depth (one of <code>IResource.DEPTH_ZERO</code>,
 	 * <code>IResource.DEPTH_ONE</code>, or <code>IResource.DEPTH_INFINITE</code>)
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public void flushVariants(IResource resource, int depth) throws TeamException;
 }
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/PersistantResourceVariantByteStore.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/PersistantResourceVariantByteStore.java
index 3080d96..a64ed1d 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/PersistantResourceVariantByteStore.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/PersistantResourceVariantByteStore.java
@@ -105,13 +105,19 @@
 	}
 
 	/**
-	 * Return whether the resource variant state for this resource is known.
-	 * This is used to differentiate the case where a resource variant has never been fetched
-	 * from the case where the resource variant is known to not exist. In the later
-	 * case, this method returns <code>true</code> while <code>getBytes</code> returns <code>null</code>
+	 * Return whether the resource variant state for this resource is known. This is
+	 * used to differentiate the case where a resource variant has never been
+	 * fetched from the case where the resource variant is known to not exist. In
+	 * the later case, this method returns <code>true</code> while
+	 * <code>getBytes</code> returns <code>null</code>
+	 * 
 	 * @param resource the local resource
 	 * @return whether the resource variant state for this resource is known
-	 * @throws TeamException
+	 * @throws TeamException if this operation fails. Reasons include:
+	 *                       <ul>
+	 *                       <li><code>IResourceStatus.PARTNER_NOT_REGISTERED</code>
+	 *                       The sync partner is not registered.</li>
+	 *                       </ul>
 	 */
 	public boolean isVariantKnown(IResource resource) throws TeamException {
 		return internalGetSyncBytes(resource) != null;
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ResourceVariantByteStore.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ResourceVariantByteStore.java
index 275603a..2b4deac 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ResourceVariantByteStore.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ResourceVariantByteStore.java
@@ -51,7 +51,7 @@
 	 * fetched or otherwise determined yet.
 	 * @param resource the local resource
 	 * @return the bytes that represent the resource's variant
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public abstract byte[] getBytes(IResource resource) throws TeamException;
 
@@ -64,7 +64,7 @@
 	 * @param resource the local resource
 	 * @param bytes the bytes that represent the resource's variant
 	 * @return <code>true</code> if the bytes changed
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public abstract boolean setBytes(IResource resource, byte[] bytes) throws TeamException;
 
@@ -77,7 +77,7 @@
 	 * @param depth the depth of the operation (one of <code>IResource.DEPTH_ZERO</code>,
 	 * <code>IResource.DEPTH_ONE</code>, or <code>IResource.DEPTH_INFINITE</code>)
 	 * @return <code>true</code> if there were bytes present which were removed
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public abstract boolean flushBytes(IResource resource, int depth) throws TeamException;
 
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySubscriber.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySubscriber.java
index 297a045..89d4f01 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySubscriber.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySubscriber.java
@@ -111,7 +111,7 @@
 	 * @param resource the local resource
 	 * @param bytes the bytes that identify a variant of the resource
 	 * @return the resource variant handle recreated from the bytes
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public abstract IResourceVariant getResourceVariant(IResource resource, byte[] bytes) throws TeamException;
 
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySynchronizer.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySynchronizer.java
index 94b4572..38a258c 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySynchronizer.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/variants/ThreeWaySynchronizer.java
@@ -134,7 +134,7 @@
 	 *
 	 * @param resource the resource
 	 * @return the base bytes cached with the resource or <code>null</code>
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public byte[] getBaseBytes(IResource resource) throws TeamException {
 		try {
@@ -160,7 +160,7 @@
 	 *
 	 * @param resource the resource
 	 * @param baseBytes the base bytes that identify the base resource variant
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public void setBaseBytes(IResource resource, byte[] baseBytes) throws TeamException {
 		Assert.isNotNull(baseBytes);
@@ -194,7 +194,7 @@
 	 * @param resource the resource
 	 * @return <code>true</code> if the resource has been modified since the
 	 * last time the base bytes were set.
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public boolean isLocallyModified(IResource resource) throws TeamException {
 		return ((internalGetSyncBytes(resource) == null && ! isIgnored(resource)) ||
@@ -210,7 +210,7 @@
 	 *
 	 * @param resource the resource
 	 * @return the remote bytes cached with the resource or <code>null</code>
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public byte[] getRemoteBytes(IResource resource) throws TeamException {
 		try {
@@ -236,7 +236,7 @@
 	 * @param resource the resource
 	 * @param remoteBytes the base bytes that identify the remote resource variant
 	 * @return <code>true</code> if the remote bytes changed as a result of the set
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public boolean setRemoteBytes(IResource resource, byte[] remoteBytes) throws TeamException {
 		Assert.isNotNull(remoteBytes);
@@ -274,7 +274,7 @@
 	 * done when the corresponding remote resource variant no longer exists.
 	 * @param resource the resource
 	 * @return <code>true</code> if the remote bytes changed as a result of the removal
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public boolean removeRemoteBytes(IResource resource) throws TeamException {
 		ISchedulingRule rule = null;
@@ -304,7 +304,7 @@
 	 * Return whether the given resource has sync bytes in the synchronizer.
 	 * @param resource the local resource
 	 * @return whether there are sync bytes cached for the local resources.
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public boolean hasSyncBytes(IResource resource) throws TeamException {
 		return internalGetSyncBytes(resource) != null;
@@ -315,7 +315,7 @@
 	 * using <code>setIgnored(IResource)</code>.
 	 * @param resource the resource
 	 * @return <code>true</code> if the resource is ignored.
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public boolean isIgnored(IResource resource) throws TeamException {
 		byte[] bytes = cache.getBytes(resource);
@@ -328,7 +328,7 @@
 	 * are never dirty (see <code>isLocallyModified</code>) and
 	 * do not have base or remote bytes cached for them.
 	 * @param resource the resource to be ignored
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public void setIgnored(IResource resource) throws TeamException {
 		internalSetSyncBytes(resource, IGNORED_BYTES);
@@ -340,7 +340,7 @@
 	 * @param resource the local resource
 	 * @return the children of the local resource that have cached sync bytes
 	 * or are not ignored
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public IResource[] members(IResource resource) throws TeamException {
 		if (resource.getType() == IResource.FILE) {
@@ -370,7 +370,7 @@
 	 * @param resource the resource
 	 * @param depth the depth of the flush (one of <code>IResource.DEPTH_ZERO</code>,
 	 * <code>IResource.DEPTH_ONE</code>, or <code>IResource.DEPTH_INFINITE</code>)
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public void flush(IResource resource, int depth) throws TeamException {
 		ISchedulingRule rule = null;
@@ -395,7 +395,7 @@
 	 * @param resourceRule the scheduling rule that encompasses all modifications
 	 * @param runnable the runnable that performs the sync state modifications
 	 * @param monitor a progress monitor
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public void run(IResource resourceRule, IWorkspaceRunnable runnable, IProgressMonitor monitor) throws TeamException {
 		monitor = Policy.monitorFor(monitor);
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/PageCompareEditorInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/PageCompareEditorInput.java
index 2017ccd..cb0dd3d 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/PageCompareEditorInput.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/PageCompareEditorInput.java
@@ -275,7 +275,7 @@
 	 * @param input the input
 	 * @param configuration the compare configuration
 	 * @param monitor a progress monitor
-	 * @throws InvocationTargetException
+	 * @throws InvocationTargetException if an error occurs
 	 */
 	protected abstract void prepareInput(ICompareInput input, CompareConfiguration configuration, IProgressMonitor monitor) throws InvocationTargetException;
 
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/PageSaveablePart.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/PageSaveablePart.java
index 2221dad..bd5d1d2 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/PageSaveablePart.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/PageSaveablePart.java
@@ -285,7 +285,7 @@
 	 * @param input the input
 	 * @param configuration the compare configuration
 	 * @param monitor a progress monitor
-	 * @throws InvocationTargetException
+	 * @throws InvocationTargetException if an error occurs
 	 */
 	protected abstract void prepareInput(ICompareInput input, CompareConfiguration configuration, IProgressMonitor monitor) throws InvocationTargetException;
 
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/history/ElementLocalHistoryPageSource.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/history/ElementLocalHistoryPageSource.java
index 8bbb71e..d911a08 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/history/ElementLocalHistoryPageSource.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/history/ElementLocalHistoryPageSource.java
@@ -31,7 +31,7 @@
 	 * @param file the file containing the element
 	 * @param element the element
 	 * @return the previous edition of the element from the local history or <code>null</code>
-	 * @throws TeamException
+	 * @throws TeamException if an error occurs
 	 */
 	public static ITypedElement getPreviousEdition(IFile file, Object element) throws TeamException {
 		return EditionHistoryPage.getPreviousState(file, element);
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/history/RevisionAnnotationController.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/history/RevisionAnnotationController.java
index aba0d32..b76de29 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/history/RevisionAnnotationController.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/history/RevisionAnnotationController.java
@@ -100,7 +100,7 @@
 	 * @param file
 	 *            the file to be edited
 	 * @return the open editor on the file
-	 * @throws PartInitException
+	 * @throws PartInitException swallowed
 	 */
 	public static AbstractDecoratedTextEditor openEditor(IWorkbenchPage page, IFile file) throws PartInitException {
 		if (file == null)
@@ -153,7 +153,7 @@
 	 * @param storage
 	 *            the storage that provides access to the contents of the file revision
 	 * @return the open editor on the file revision
-	 * @throws PartInitException
+	 * @throws PartInitException if an error occurs
 	 */
 	public static AbstractDecoratedTextEditor openEditor(IWorkbenchPage page,
 			Object fileRevision, IStorage storage) throws PartInitException {
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ISynchronizationCompareAdapter.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ISynchronizationCompareAdapter.java
index 2cfd699..55b5abc 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ISynchronizationCompareAdapter.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ISynchronizationCompareAdapter.java
@@ -123,7 +123,7 @@
 	 *            a progress monitor
 	 * @return the synchronization state of the element or -1 if the calculation
 	 *         of the state should be done using the resources of the mapping.
-	 * @throws CoreException
+	 * @throws CoreException on failures; depends on concrete implementation
 	 *
 	 * @since 3.3
 	 */
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ISynchronizationCompareInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ISynchronizationCompareInput.java
index a913a43..160a411 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ISynchronizationCompareInput.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ISynchronizationCompareInput.java
@@ -45,7 +45,7 @@
 	 * the compare configuration.
 	 * @param configuration the compare configuration for the editor that will display the input
 	 * @param monitor a progress monitor
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	void prepareInput(CompareConfiguration configuration, IProgressMonitor monitor) throws CoreException;
 
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ITeamContentProviderDescriptor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ITeamContentProviderDescriptor.java
index 01b26bb..25f8fa1 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ITeamContentProviderDescriptor.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ITeamContentProviderDescriptor.java
@@ -56,7 +56,7 @@
 	 * the content provider of this extension.
 	 * @return a preference page that can be displayed to configure
 	 * the content provider of this extension
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	public IPreferencePage createPreferencePage() throws CoreException;
 
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ITeamStateProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ITeamStateProvider.java
index 9cdcf52..f2ebcac 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ITeamStateProvider.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/ITeamStateProvider.java
@@ -70,7 +70,7 @@
 	 * @param element
 	 *            the element being decorated
 	 * @return whether the given element has any decorated state
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	public boolean hasDecoratedState(Object element) throws CoreException;
 
@@ -137,7 +137,7 @@
 	 * @param monitor
 	 *            a progress monitor
 	 * @return the state for the given element or <code>null</code>
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	public ITeamStateDescription getStateDescription(Object element,
 			int stateMask, String[] properties, IProgressMonitor monitor)
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationCompareAdapter.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationCompareAdapter.java
index 1a47ec6..51b256d 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationCompareAdapter.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationCompareAdapter.java
@@ -159,7 +159,7 @@
 	 *            a progress monitor
 	 * @return the synchronization state of the element or -1 if the calculation
 	 *         of the state should be done using the resources of the mapping.
-	 * @throws CoreException
+	 * @throws CoreException on failures
 	 *
 	 * @since 3.3
 	 */
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationOperation.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationOperation.java
index 6086f3b..3d1e6a2 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationOperation.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationOperation.java
@@ -170,8 +170,8 @@
 	 * execute method. Clients should call either {@link #run()} or {@link #run(IProgressMonitor)}
 	 * to invoke the operation.
 	 * @param monitor a progress monitor
-	 * @throws InvocationTargetException
-	 * @throws InterruptedException
+	 * @throws InvocationTargetException if an error occurs
+	 * @throws InterruptedException if operation is interrupted
 	 */
 	protected abstract void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException;
 
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationStateTester.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationStateTester.java
index 3b76935..4f17db8 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationStateTester.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationStateTester.java
@@ -151,7 +151,7 @@
 	 *            present
 	 * @param monitor a progress monitor
 	 * @return the synchronization state of the given element
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	public int getState(Object element, int stateMask, IProgressMonitor monitor) throws CoreException {
 		ITeamStateDescription desc = getTeamStateProvider().getStateDescription(element, stateMask, new String[0], monitor);
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePage.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePage.java
index 095e9ca..e9d0e4d 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePage.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePage.java
@@ -32,7 +32,7 @@
 	 * but before <code>Page#createControl(Composite)</code>
 	 *
 	 * @param site the workbench part for the view containing the page
-	 * @throws PartInitException
+	 * @throws PartInitException if an error occurs
 	 */
 	public void init(ISynchronizePageSite site) throws PartInitException;
 
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelMergeOperation.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelMergeOperation.java
index 2c3d941..050d0e8 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelMergeOperation.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelMergeOperation.java
@@ -199,7 +199,7 @@
 	 * method must return an instance of {@link IMergeContext}
 	 * that is fully initialized.
 	 * @param monitor a progress monitor
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	protected abstract void initializeContext(IProgressMonitor monitor) throws CoreException;
 
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelOperation.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelOperation.java
index 0888ad1..3df4fdf 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelOperation.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelOperation.java
@@ -127,7 +127,7 @@
 	 * {@link ISynchronizationScopeManager} for this operation
 	 * is initialized if it was not previously initialized.
 	 * @param monitor a progress monitor
-	 * @throws InvocationTargetException
+	 * @throws InvocationTargetException if an error occurs
 	 */
 	protected void beginOperation(IProgressMonitor monitor) throws InvocationTargetException {
 		initializeScope(monitor);
@@ -410,8 +410,8 @@
 	 * Execute the operation. This method is invoked after the
 	 * scope has been generated.
 	 * @param monitor a progress monitor
-	 * @throws InvocationTargetException
-	 * @throws InterruptedException
+	 * @throws InvocationTargetException if an error occurs
+	 * @throws InterruptedException if operation is interrupted
 	 */
 	protected abstract void execute(IProgressMonitor monitor) throws InvocationTargetException,
 			InterruptedException;
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelParticipantAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelParticipantAction.java
index 70a645c..211afc6 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelParticipantAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelParticipantAction.java
@@ -144,8 +144,8 @@
 	 * Check to see if the target saveable differs from the currently
 	 * active saveable. If it does, prompt to save changes in the
 	 * active saveable if it is dirty.
-	 * @throws InterruptedException
-	 * @throws InvocationTargetException
+	 * @throws InterruptedException if operation is interrupted
+	 * @throws InvocationTargetException if an error occurs
 	 */
 	protected void handleTargetSaveableChange() throws InvocationTargetException, InterruptedException {
 		final SaveableComparison targetSaveable = getTargetSaveable();
@@ -171,8 +171,8 @@
 	 * @param activeSaveable the current saveable
 	 * @param allowCancel whether canceling the action is an option
 	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 * @throws InterruptedException
+	 * @throws CoreException if an error occurs
+	 * @throws InterruptedException if operation is interrupted
 	 */
 	public static void handleTargetSaveableChange(Shell shell, SaveableComparison targetSaveable, SaveableComparison activeSaveable, boolean allowCancel, IProgressMonitor monitor) throws CoreException, InterruptedException {
 		if (activeSaveable != null && targetSaveable != activeSaveable) {
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java
index d58d58b..ebb642e 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ModelSynchronizeParticipant.java
@@ -547,7 +547,7 @@
 	 * with a progress monitor, long running operations should be avoided.
 	 * @param manager the restored scope
 	 * @return the context for this participant
-	 * @throws CoreException
+	 * @throws CoreException if restoring context failed
 	 */
 	protected MergeContext restoreContext(ISynchronizationScopeManager manager) throws CoreException {
 		throw new PartInitException(NLS.bind(TeamUIMessages.ModelSynchronizeParticipant_1, getId()));
@@ -619,7 +619,7 @@
 	 * @param cancelAllowed whether the display of the compare input can be canceled
 	 * @param monitor a progress monitor or <code>null</code> if progress reporting is not required
 	 * @return whether the user choose to continue with the display of the given compare input
-	 * @throws CoreException
+	 * @throws CoreException if an error occurs
 	 */
 	public boolean checkForBufferChange(Shell shell, ISynchronizationCompareInput input, boolean cancelAllowed, IProgressMonitor monitor) throws CoreException {
 		SaveableComparison currentBuffer = getActiveSaveable();
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SaveableCompareEditorInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SaveableCompareEditorInput.java
index 91a6ca4..ae1bf61 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SaveableCompareEditorInput.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SaveableCompareEditorInput.java
@@ -310,8 +310,8 @@
 	 *
 	 * @param monitor a progress monitor
 	 * @return the compare input
-	 * @throws InvocationTargetException
-	 * @throws InterruptedException
+	 * @throws InvocationTargetException if an error occurs
+	 * @throws InterruptedException if operation is interrupted
 	 */
 	protected abstract ICompareInput prepareCompareInput(IProgressMonitor monitor)
 		throws InvocationTargetException, InterruptedException;
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SubscriberParticipant.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SubscriberParticipant.java
index 84e9134..8e89841 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SubscriberParticipant.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SubscriberParticipant.java
@@ -169,12 +169,12 @@
 
 	/**
 	 * Refresh this participants synchronization state and displays the result in a model dialog.
-	 * @param shell
 	 *
+	 * @param shell parent shell for the dialog
 	 * @param resources the resources to be refreshed.
-	 * @param jobName
+	 * @param jobName the job name or <code>null</code>
 	 * @param taskName the task name to be shown to the user
-	 * @param configuration
+	 * @param configuration the configuration
 	 * @param site the site in which to run the refresh
 	 */
 	public final void refreshInDialog(Shell shell, IResource[] resources, String jobName, String taskName, ISynchronizePageConfiguration configuration, IWorkbenchSite site) {
@@ -205,9 +205,10 @@
 
 	/**
 	 * Refresh a participant. The returned status describes the result of the refresh.
-	 * @param resources
-	 * @param taskName
-	 * @param monitor
+	 *
+	 * @param resources the resources to be refreshed.
+	 * @param taskName the task name to be shown to the user
+	 * @param monitor monitor for job progress
 	 * @return a status
 	 */
 	public final IStatus refreshNow(IResource[] resources, String taskName, IProgressMonitor monitor) {
@@ -412,7 +413,7 @@
 	 * Returns the long task name to describe the behavior of the
 	 * refresh operation to the user. This is typically shown in the status line when this subscriber is refreshed
 	 * in the background.
-	 * @param resources
+	 * @param resources resources we are working on to get meaningful task name from
 	 * @return the long task name
 	 * @since 3.1
 	 */
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SubscriberTeamStateProvider.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SubscriberTeamStateProvider.java
index 23e5562..93db55a 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SubscriberTeamStateProvider.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SubscriberTeamStateProvider.java
@@ -86,7 +86,7 @@
 	 * @param stateMask the state mask that indicates which state flags are desired
 	 * @param monitor a progress monitor
 	 * @return the synchronization state of the element
-	 * @throws CoreException
+	 * @throws CoreException if operation failed
 	 */
 	protected final int getSynchronizationState(Object element, int stateMask,
 			IProgressMonitor monitor) throws CoreException {
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizeModelAction.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizeModelAction.java
index 1a7392e..f9f5530 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizeModelAction.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/SynchronizeModelAction.java
@@ -106,8 +106,8 @@
 	 * by calling <code>getSubscriberOperation</code> and then run. Subclasses may
 	 * override.
 	 *
-	 * @throws InvocationTargetException
-	 * @throws InterruptedException
+	 * @throws InvocationTargetException if an error occurs
+	 * @throws InterruptedException if operation is interrupted
 	 * @since 3.1
 	 */
 	protected void runOperation() throws InvocationTargetException, InterruptedException {
