Finishing touches
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties
index 7ec78b8..3e6b229 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/messages.properties
@@ -713,6 +713,7 @@
 BranchCategory.Branches_1=Branches
 GroupedByVersionCategory.Versions_1=Versions
 VersionCategory.Versions_1=Versions
+ModulesCategory.label=Modules
 HistoryView.[...]_4=[...]
 
 CVSProjectPropertiesPage.Select_a_Repository_1=Select a Repository
@@ -814,4 +815,7 @@
 WorkingSetSelectionDialog.message.multiSelect= &Select CVS working sets:
 WorkingSetSelectionDialog.detailsButton.label= &Edit...
 WorkingSetSelectionDialog.newButton.label= &New...
-WorkingSetSelectionDialog.removeButton.label= &Remove
\ No newline at end of file
+WorkingSetSelectionDialog.removeButton.label= &Remove
+
+RefreshTagsAction.title=Refresh Branch and Version Tags?
+RefreshTagsAction.message=Repository ''{0}'' has {1} projects to refresh. Continue?
\ No newline at end of file
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java
index 589db2f..c4f4334 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/model/RemoteContentProvider.java
@@ -39,7 +39,9 @@
 			}
 		} else if(element instanceof VersionCategory) {
 			return true;
-		}  else if(element instanceof BranchCategory) {
+		} else if(element instanceof BranchCategory) {
+			return true;
+		} else if(element instanceof ModulesCategory) {
 			return true;
 		} else if(element instanceof CVSTagElement) {
 			return true;
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RefreshTagsAction.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RefreshTagsAction.java
index bb9a10e..3400cf0 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RefreshTagsAction.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/RefreshTagsAction.java
@@ -6,6 +6,7 @@
 
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.team.core.TeamException;
@@ -41,15 +42,17 @@
 						ICVSRepositoryLocation location = locations[j];
 						// todo: This omits defined modules when there is no current working set
 						ICVSRemoteResource[] resources = manager.getWorkingFoldersForTag(location, CVSTag.DEFAULT, Policy.subMonitorFor(monitor, 10));
-						IProgressMonitor subMonitor = Policy.subMonitorFor(monitor, 90);
-						subMonitor.beginTask(null, 100 * resources.length);
-						for (int i = 0; i < resources.length; i++) {
-							ICVSRemoteResource resource = resources[i];
-							if (resource instanceof ICVSFolder) {
-								manager.refreshDefinedTags((ICVSFolder)resource, true /* replace */, true, Policy.subMonitorFor(subMonitor, 100));
+						if (promptToRefresh(location, resources)) {
+							IProgressMonitor subMonitor = Policy.subMonitorFor(monitor, 90);
+							subMonitor.beginTask(null, 100 * resources.length);
+							for (int i = 0; i < resources.length; i++) {
+								ICVSRemoteResource resource = resources[i];
+								if (resource instanceof ICVSFolder) {
+									manager.refreshDefinedTags((ICVSFolder)resource, true /* replace */, true, Policy.subMonitorFor(subMonitor, 100));
+								}
 							}
+							subMonitor.done();
 						}
-						subMonitor.done();
 					}
 					monitor.done();
 				} catch (TeamException e) {
@@ -85,4 +88,17 @@
 		return (ICVSRepositoryLocation[])tags.toArray(new ICVSRepositoryLocation[tags.size()]);
 	}
 
+	private boolean promptToRefresh(final ICVSRepositoryLocation location, final ICVSRemoteResource[] resources) {
+		if (resources.length == 0) return true;
+		final boolean[] result = new boolean[] {false};
+		getShell().getDisplay().syncExec(new Runnable() {
+			public void run() {
+				result[0] = MessageDialog.openQuestion(getShell(), 
+					Policy.bind("RefreshTagsAction.title"), 
+					Policy.bind("RefreshTagsAction.message", location.getLocation(), new Integer(resources.length).toString()));
+			}
+		});
+		return result[0];
+	}
+			
 }