*** empty log message ***
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProvider.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProvider.java
index d99a404..6bbefed 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProvider.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProvider.java
@@ -164,7 +164,7 @@
 		if (CVSProviderPlugin.getPlugin().getPruneEmptyDirectories()) 
 			localOptions.add(Checkout.PRUNE_EMPTY_DIRECTORIES);
 		// Add the options related to the CVSTag
-		if (tag != null) {
+		if (tag != null && tag.getType() != CVSTag.HEAD) {
 			localOptions.add(Checkout.makeTagOption(tag));
 		}
 		
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java
index 5448ebfe..05e1a58 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java
@@ -45,6 +45,7 @@
 import org.eclipse.team.internal.ccvs.core.client.Update;
 import org.eclipse.team.internal.ccvs.core.client.Command.GlobalOption;
 import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
+import org.eclipse.team.internal.ccvs.core.client.listeners.DiffListener;
 import org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation;
 import org.eclipse.team.internal.ccvs.core.connection.CVSServerException;
 import org.eclipse.team.internal.ccvs.core.resources.CVSRemoteSyncElement;
@@ -502,11 +503,11 @@
 		s.open(progress);
 		try {
 			status = Command.DIFF.execute(s,
-			Command.NO_GLOBAL_OPTIONS,
-			options,
-			arguments,
-			null, // FIXME new DiffListener(stream),
-			progress);
+				Command.NO_GLOBAL_OPTIONS,
+				options,
+				arguments,
+				new DiffListener(stream),
+				progress);
 		} finally {
 			s.close();
 		}
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java
index e9a0696..fded633 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Command.java
@@ -213,7 +213,7 @@
 				try {
 					resources[i] = localRoot.getChild(arguments[i]);
 				} catch (CVSFileNotFoundException e) {
-					// Done to allow non-managed resources to be used as arguments
+					// XXX Temporary fix to allow non-managed resources to be used as arguments
 					resources[i] = localRoot.getFile(arguments[i]);
 				}
 			}
@@ -484,7 +484,7 @@
 		}
 		public void send(Session session) throws CVSException {
 			if (option.length() != 0) super.send(session);
-		}		
+		}
 	}
 	/**
 	 * Option subtype for local options that vary from command to command.
@@ -516,13 +516,16 @@
 	 */
 	public static LocalOption makeTagOption(CVSTag tag) {
 		int type = tag.getType();
-		if (type == CVSTag.BRANCH || type == CVSTag.VERSION || type == CVSTag.HEAD) {
-			return new LocalOption("-r", tag.getName());
-		} else if (type == CVSTag.DATE) {
-			return new LocalOption("-D", tag.getName());
-		} else {
-			// FIXME: can this ever happen??? throw an exception?
-			return null;
+		switch (type) {
+			case CVSTag.BRANCH:
+			case CVSTag.VERSION:
+				return new LocalOption("-r", tag.getName());
+			case CVSTag.DATE:
+				return new LocalOption("-D", tag.getName());
+			default:
+				// tag must not be HEAD
+				throw new IllegalArgumentException("Sticky tag not " +
+					"valid for trunk (HEAD).");
 		}
 	}
 
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Update.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Update.java
index 48fb1b8..953c61d 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Update.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/client/Update.java
@@ -6,6 +6,7 @@
  */
 
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.team.ccvs.core.CVSTag;
 import org.eclipse.team.internal.ccvs.core.CVSException;
 import org.eclipse.team.internal.ccvs.core.client.Command.GlobalOption;
 import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
@@ -18,6 +19,20 @@
 	public static final LocalOption IGNORE_LOCAL_CHANGES = new LocalOption("-C");
 	public static final LocalOption RETRIEVE_ABSENT_DIRECTORIES = new LocalOption("-d");
 
+	/**
+	 * Makes a -r or -D or -A option for a tag.
+	 * Valid for: checkout export history rdiff update
+	 */
+	public static LocalOption makeTagOption(CVSTag tag) {
+		int type = tag.getType();
+		switch (type) {
+			case CVSTag.HEAD:
+				return CLEAR_STICKY;
+			default:
+				return Command.makeTagOption(tag);
+		}
+	}
+	
 	protected Update() { }
 	protected String getCommandId() {
 		return "update";