*** empty log message ***
diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProviderPlugin.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProviderPlugin.java
index d940676..f01fc83 100644
--- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProviderPlugin.java
+++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSProviderPlugin.java
@@ -26,6 +26,8 @@
 import java.util.Map;
 import java.util.Properties;
 
+import org.eclipse.core.internal.settings.ExternalSettingsStore;
+import org.eclipse.core.internal.settings.ProjectSettingsStore;
 import org.eclipse.core.internal.settings.SettingsStore;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
@@ -39,7 +41,6 @@
 import org.eclipse.core.runtime.IPluginDescriptor;
 import org.eclipse.core.runtime.ISafeRunnable;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.Preferences;
@@ -957,7 +958,7 @@
 
 	public SettingsStore getPluginSettings() {
 		if (settings == null) {
-			settings = new SettingsStore(getSettingsLocation().toFile());
+			settings = new ExternalSettingsStore(getSettingsLocation().toFile());
 			// populate the settings with any preferences
 			Preferences prefs = getPluginPreferences();
 			String[] names = prefs.propertyNames();
@@ -989,9 +990,11 @@
 	}
 	
 	public IPath getSettingsLocation() {
+		// TODO: Could just be the state location
 		return getStateLocation().append("settings");
 	}
 	
+	// TODO: Can't be in core.runtime because of reference to IProject
 	public SettingsStore getProjectSettings(IProject project) throws CoreException {
 		QualifiedName settingsPropertyName = new QualifiedName(ID, "settings");
 		Object cached = project.getSessionProperty(settingsPropertyName);
@@ -999,12 +1002,14 @@
 			return (SettingsStore)cached;
 		}
 		try {
-			final SettingsStore store = new SettingsStore(project.getFolder(new Path(".settings").append(ID)).getLocation().toFile());
+			final SettingsStore store = new ProjectSettingsStore(project, this);
 			store.load();
 			project.setSessionProperty(settingsPropertyName, store);
 			store.addPropertyChangeListener(new Preferences.IPropertyChangeListener() {
 				public void propertyChange(PropertyChangeEvent event) {
 					try {
+						// TODO: Could be a change caused by a load from a repo
+						// which doesn't require a store
 						store.store(ID);
 					} catch (IOException e) {
 						log(IStatus.ERROR, "Error storing plugin settings", e);
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 7009c72..9d47c94 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
@@ -30,6 +30,7 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import org.eclipse.core.internal.settings.SettingsStore;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFileModificationValidator;
@@ -48,7 +49,6 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.team.core.RepositoryProvider;
 import org.eclipse.team.core.TeamException;
@@ -129,11 +129,9 @@
 	private static IFileModificationValidator fileModificationValidator;
 	
 	// property used to indicate whether new directories should be discovered for the project
-	private final static QualifiedName FETCH_ABSENT_DIRECTORIES_PROP_KEY = 
-		new QualifiedName("org.eclipse.team.cvs.core", "fetch_absent_directories");  //$NON-NLS-1$  //$NON-NLS-2$
+	private final static String FETCH_ABSENT_DIRECTORIES_SETTING = "fetch_absent_directories";  //$NON-NLS-1$
 	// property used to indicate whether the project is configured to use Watch/edit
-	private final static QualifiedName WATCH_EDIT_PROP_KEY = 
-		new QualifiedName("org.eclipse.team.cvs.core", "watch_edit");  //$NON-NLS-1$  //$NON-NLS-2$
+	private final static String WATCH_EDIT_SETTING = "watch_edit"; //$NON-NLS-1$
 
 	private static IFileModificationValidator getPluggedInValidator() {
 		IExtension[] extensions = Platform.getPluginRegistry().getExtensionPoint(CVSProviderPlugin.ID, CVSProviderPlugin.PT_FILE_MODIFICATION_VALIDATOR).getExtensions();
@@ -1418,9 +1416,9 @@
 	 */
 	public boolean getFetchAbsentDirectories() throws CVSException {
 		try {
-			String property = getProject().getPersistentProperty(FETCH_ABSENT_DIRECTORIES_PROP_KEY);
-			if (property == null) return CVSProviderPlugin.getPlugin().getFetchAbsentDirectories();
-			return Boolean.valueOf(property).booleanValue();
+			IProject project = getProject();
+			SettingsStore store = CVSProviderPlugin.getPlugin().getProjectSettings(getProject());
+			return store.getBoolean(FETCH_ABSENT_DIRECTORIES_SETTING);
 		} catch (CoreException e) {
 			throw new CVSException(new CVSStatus(IStatus.ERROR, Policy.bind("CVSTeamProvider.errorGettingFetchProperty", project.getName()), e)); //$NON-NLS-1$
 		}
@@ -1428,11 +1426,13 @@
 	
 	/**
 	 * Sets the fetchAbsentDirectories.
-	 * @param etchAbsentDirectories The etchAbsentDirectories to set
+	 * @param fetchAbsentDirectories The fetchAbsentDirectories to set
 	 */
 	public void setFetchAbsentDirectories(boolean fetchAbsentDirectories) throws CVSException {
 		try {
-			getProject().setPersistentProperty(FETCH_ABSENT_DIRECTORIES_PROP_KEY, fetchAbsentDirectories ? Boolean.TRUE.toString() : Boolean.FALSE.toString());
+			IProject project = getProject();
+			SettingsStore store = CVSProviderPlugin.getPlugin().getProjectSettings(getProject());
+			store.setValue(FETCH_ABSENT_DIRECTORIES_SETTING, fetchAbsentDirectories);
 		} catch (CoreException e) {
 			throw new CVSException(new CVSStatus(IStatus.ERROR, Policy.bind("CVSTeamProvider.errorSettingFetchProperty", project.getName()), e)); //$NON-NLS-1$
 		}
@@ -1574,18 +1574,8 @@
 	public boolean isWatchEditEnabled() throws CVSException {
 		try {
 			IProject project = getProject();
-			String property = (String)project.getSessionProperty(WATCH_EDIT_PROP_KEY);
-			if (property == null) {
-				property = project.getPersistentProperty(WATCH_EDIT_PROP_KEY);
-				if (property == null) {
-					// The persistant property for the project was never set (i.e. old project)
-					// Use the global preference to determinw if the project is using watch/edit
-					return CVSProviderPlugin.getPlugin().isWatchEditEnabled();
-				} else {
-					project.setSessionProperty(WATCH_EDIT_PROP_KEY, property);
-				}
-			}
-			return Boolean.valueOf(property).booleanValue();
+			SettingsStore store = CVSProviderPlugin.getPlugin().getProjectSettings(getProject());
+			return store.getBoolean(WATCH_EDIT_SETTING);
 		} catch (CoreException e) {
 			throw new CVSException(new CVSStatus(IStatus.ERROR, Policy.bind("CVSTeamProvider.errorGettingWatchEdit", project.getName()), e)); //$NON-NLS-1$
 		}
@@ -1594,8 +1584,8 @@
 	public void setWatchEditEnabled(boolean enabled) throws CVSException {
 		try {
 			IProject project = getProject();
-			project.setPersistentProperty(WATCH_EDIT_PROP_KEY, enabled ? Boolean.TRUE.toString() : Boolean.FALSE.toString());
-			project.setSessionProperty(WATCH_EDIT_PROP_KEY, enabled ? Boolean.TRUE.toString() : Boolean.FALSE.toString());
+			SettingsStore store = CVSProviderPlugin.getPlugin().getProjectSettings(getProject());
+			store.setValue(WATCH_EDIT_SETTING, enabled);
 		} catch (CoreException e) {
 			throw new CVSException(new CVSStatus(IStatus.ERROR, Policy.bind("CVSTeamProvider.errorSettingWatchEdit", project.getName()), e)); //$NON-NLS-1$
 		}