diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/target/TargetProvider.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/target/TargetProvider.java
index a3d3e69..b6ca9a1 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/core/target/TargetProvider.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/core/target/TargetProvider.java
@@ -19,7 +19,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.sync.IRemoteResource;
+import org.eclipse.team.core.sync.IRemoteSyncElement;
 
 public abstract class TargetProvider {
 	/**
@@ -136,8 +136,8 @@
 	
 	/**
 	 * Answers true if the base identifier of the given resource is different to the
-	 * current released state of the resource. Also answer true if there was not 
-	 * previously a correspondance between the local and remote resource.
+	 * current released state of the resource. Answer false if there is no correspondence
+	 * between the local and remote resources (i.e. hasBase(resource) returns false).
 	 * 
 	 * @param resource the resource to test
 	 * @param monitor a progress monitor
@@ -155,6 +155,14 @@
 	 * @param resource the resource to test
 	 */
 	public abstract boolean isDirty(IResource resource);
+	
+	/**
+	 * Answer true if the given resource at one time had a remote counterpart and still does
+	 * to the knowledge of the provider.
+	 * 
+	 * @param resource the resource to test
+	 */
+	public abstract boolean hasBase(IResource resource);
 
 	public abstract void deregister(IProject project);
 	
@@ -181,4 +189,10 @@
 			throw new TeamException(e.getStatus());
 		}
 	}
+	
+	/**
+	 * Return an IRemoteSyncElement for the given resource. This element is used to
+	 * compare the state of the local and remote resources.
+	 */
+	public abstract IRemoteSyncElement getRemoteSyncElement(IResource resource);
 }
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteTargetSyncElement.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/RemoteTargetSyncElement.java
similarity index 77%
rename from bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteTargetSyncElement.java
rename to bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/RemoteTargetSyncElement.java
index a56297b..47649e1 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/RemoteTargetSyncElement.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/RemoteTargetSyncElement.java
@@ -8,7 +8,7 @@
  * Contributors:
  * IBM - Initial implementation
  ******************************************************************************/
-package org.eclipse.team.internal.ui.target;
+package org.eclipse.team.internal.core.target;
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -20,8 +20,8 @@
 import org.eclipse.team.core.target.IRemoteTargetResource;
 import org.eclipse.team.core.target.TargetManager;
 import org.eclipse.team.core.target.TargetProvider;
-import org.eclipse.team.internal.ui.Policy;
-import org.eclipse.team.internal.ui.TeamUIPlugin;
+import org.eclipse.team.internal.core.Policy;
+import org.eclipse.team.internal.core.TeamPlugin;
 
 /**
  * Is a synchronization element that can calculate three-way sync
@@ -37,22 +37,17 @@
 	private IResource local;
 	private TargetProvider provider;
 
-	public RemoteTargetSyncElement(IResource local, IRemoteTargetResource remote) {
+	public RemoteTargetSyncElement(TargetProvider provider, IResource local, IRemoteTargetResource remote) {
 		this.local = local;
 		this.remote = remote;
-		try {
-			this.provider = TargetManager.getProvider(local.getProject());
-		} catch (TeamException e) {
-			TeamUIPlugin.log(e.getStatus());
-			this.remote = null;		
-		}
+		this.provider = provider;	
 	}
 	
 	/**
 	 * @see RemoteSyncElement#create(boolean, IResource, IRemoteResource, IRemoteResource, Object)
 	 */
 	public IRemoteSyncElement create(boolean isThreeWay, IResource local, IRemoteResource base, IRemoteResource remote, Object data) {
-		return new RemoteTargetSyncElement(local, (IRemoteTargetResource)remote);
+		return new RemoteTargetSyncElement(provider, local, (IRemoteTargetResource)remote);
 	}
 
 	/**
@@ -73,7 +68,7 @@
 	 * @see LocalSyncElement#create(IResource, IRemoteResource, Object)
 	 */
 	public ILocalSyncElement create(IResource local, IRemoteResource base, Object data) {
-		return new RemoteTargetSyncElement(local, remote);
+		return new RemoteTargetSyncElement(provider, local, (IRemoteTargetResource)base);
 	}
 
 	/**
@@ -125,15 +120,16 @@
 		progress.beginTask(null, 100);
 		int description = IN_SYNC;
 		IResource local = getLocal();
-		boolean isDirty = provider.isDirty(local);
-		boolean isOutOfDate;
-		try{
-			isOutOfDate = provider.isOutOfDate(local, Policy.subMonitorFor(progress, 10));
-		} catch(TeamException e) {
-			isOutOfDate = true; // who knows?
-		}
-		
 		boolean localExists = local.exists();
+		boolean hasBase = provider.hasBase(local);
+		// isDirty and isOutOfDate only have meaning if there is a base
+		// XXX The defaults should give the same behavior as before
+		boolean isDirty = localExists;
+		boolean isOutOfDate = remote != null;
+		if (hasBase) {
+			isDirty = provider.isDirty(local);
+			isOutOfDate = isOutOfDate(Policy.subMonitorFor(progress, 10));
+		}
 		
 		if (remote == null) {
 			if (!localExists) {
@@ -141,7 +137,7 @@
 				// Assert.isTrue(false);
 			} else {
 				// no remote but a local
-				if (!isDirty && isOutOfDate) {
+				if (!isDirty && hasBase) {
 					description = INCOMING | DELETION;
 				} else if (isDirty && isOutOfDate) {
 					description = CONFLICTING | CHANGE;
@@ -179,4 +175,27 @@
 		}
 		return description;
 	}
+	/**
+	 * Returns the provider.
+	 * @return TargetProvider
+	 */
+	protected TargetProvider getProvider() {
+		return provider;
+	}
+
+	/**
+	 * Return true if the resource associated with the receiver is out-of-date
+	 */
+	protected boolean isOutOfDate(IProgressMonitor monitor) {
+		IResource local = getLocal();
+		if (provider.hasBase(local)) {
+			try{
+				return provider.isOutOfDate(local, monitor);
+			} catch(TeamException e) {
+				return true; // who knows?
+			}
+		}
+		return false;
+	}
+
 }
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/ResourceState.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/ResourceState.java
index 71f79de..1795dda 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/ResourceState.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/ResourceState.java
@@ -274,8 +274,8 @@
 	 * @see ITeamProvider#isDirty(IResource)
 	 */
 	public boolean isDirty() {
-		if (!hasLocal())
-			return hasPhantom();
+		if (!hasPhantom()) return false;
+		if (!hasLocal()) return true;
 		if (localBaseTimestamp == EMPTY_LOCALBASETS)
 			return localResource.getType() == IResource.FILE;
 		return localBaseTimestamp != localResource.getModificationStamp();
@@ -286,11 +286,9 @@
 	 * current released state of the resource.
 	 */
 	public boolean isOutOfDate(IProgressMonitor monitor) throws TeamException {
-		if (remoteBaseIdentifier.equals(EMPTY_REMOTEBASEID))
-			 return (localResource.getType() == IResource.FILE && hasRemote(monitor));
-
-		String releasedIdentifier = null;
-		releasedIdentifier = getReleasedIdentifier(monitor);
+		if (!hasPhantom()) return false;
+		if (remoteBaseIdentifier.equals(EMPTY_REMOTEBASEID)) return false;
+		String releasedIdentifier = getReleasedIdentifier(monitor);
 		return !remoteBaseIdentifier.equals(releasedIdentifier);
 	}
 
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/SynchronizedTargetProvider.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/SynchronizedTargetProvider.java
index a86e310..cb7e5f2 100644
--- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/SynchronizedTargetProvider.java
+++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/target/SynchronizedTargetProvider.java
@@ -24,6 +24,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.team.core.TeamException;
+import org.eclipse.team.core.sync.IRemoteSyncElement;
 import org.eclipse.team.core.target.IRemoteTargetResource;
 import org.eclipse.team.core.target.ITargetRunnable;
 import org.eclipse.team.core.target.Site;
@@ -208,4 +209,28 @@
 			TeamPlugin.log(e.getStatus());
 		}
 	}
+	
+	/**
+	 * @see TargetProvider#getRemoteSyncElement(IResource)
+	 */
+	public IRemoteSyncElement getRemoteSyncElement(IResource resource) {
+		return new RemoteTargetSyncElement(this, resource, getRemoteResourceFor(resource));
+	}
+
+
+	/**
+	 * @see TargetProvider#hasBase(IResource)
+	 */
+	public boolean hasBase(IResource resource) {
+		// the project always has a base
+		if (resource.getType() == IResource.PROJECT) return true;
+		try {
+			return getState(resource).hasPhantom();
+		} catch (TeamException e) {
+			TeamPlugin.log(e.getStatus());
+			return true;
+		}
+	}
+
+
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncCompareInput.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncCompareInput.java
index 3a34cd9..fbc1d55 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncCompareInput.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/target/TargetSyncCompareInput.java
@@ -42,11 +42,11 @@
 		monitor = Policy.monitorFor(monitor);
 		try {
 			monitor.beginTask(null, resources.length);
-			RemoteTargetSyncElement[] elements = new RemoteTargetSyncElement[resources.length];
+			IRemoteSyncElement[] elements = new IRemoteSyncElement[resources.length];
 			for (int i = 0; i < resources.length; i++) {
 				IResource resource = resources[i];
 				TargetProvider provider = TargetManager.getProvider(resource.getProject());
-				elements[i] = new RemoteTargetSyncElement(resources[i], provider.getRemoteResourceFor(resource));				
+				elements[i] = provider.getRemoteSyncElement(resource);				
 				monitor.worked(1);
 			}
 			return elements;
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RemoteResourceTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RemoteResourceTests.java
index 3eef2b1..43f0968 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RemoteResourceTests.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/RemoteResourceTests.java
@@ -70,7 +70,7 @@
 		IProject project = createAndPut("getname", new String[] { "file1.txt", "folder1/", "folder1/b.txt" });
 		TargetProvider target = getProvider(project);
 		IRemoteResource remote = target.getRemoteResourceFor(project.getFile("file1.txt"));
-		InputStream jin = remote.getContents(null);
+		InputStream jin = remote.getContents(DEFAULT_MONITOR);
 		try {
 			while (jin.available() > 0) {
 				jin.read();
@@ -85,7 +85,7 @@
 		IProject project = createAndPut("getname", new String[] { "file1.txt", "folder1/", "folder1/b.txt" });
 		TargetProvider target = getProvider(project);
 		IRemoteResource remote = target.getRemoteResource();
-		IRemoteResource[] altResources = remote.members(null);
+		IRemoteResource[] altResources = remote.members(DEFAULT_MONITOR);
 		for (int i = 0; i < altResources.length; i++) {
 			assertEquals(altResources[i], project.findMember(altResources[i].getName()));
 		}
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/SyncElementTest.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/SyncElementTest.java
index 5de7a53..ea37794 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/SyncElementTest.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/SyncElementTest.java
@@ -12,17 +12,27 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.lang.reflect.Member;
 
-import junit.framework.*;
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
+import junit.framework.AssertionFailedError;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.team.core.TeamException;
-import org.eclipse.team.core.sync.*;
+import org.eclipse.team.core.sync.ILocalSyncElement;
+import org.eclipse.team.core.sync.IRemoteSyncElement;
+import org.eclipse.team.core.sync.RemoteSyncElement;
 import org.eclipse.team.core.target.TargetManager;
 import org.eclipse.team.core.target.TargetProvider;
 import org.eclipse.team.internal.core.target.UrlUtil;
-import org.eclipse.team.internal.ui.target.RemoteTargetSyncElement;
 
 public class SyncElementTest extends TeamTest {
 	/*
@@ -103,8 +113,7 @@
 	}
 
 	IRemoteSyncElement getRemoteSyncTree(IProject project, IProgressMonitor monitor) throws TeamException {
-		IRemoteSyncElement result = new RemoteTargetSyncElement(project,getProvider(project).getRemoteResource());
-		return result;
+		return getProvider(project).getRemoteSyncElement(project);
 	}
 	protected IProject checkoutCopy(IProject project, String postfix) throws CoreException,TeamException {
 		TargetProvider provider = getProvider(project);
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetProviderTests.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetProviderTests.java
index 46840a7..951f63e 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetProviderTests.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TargetProviderTests.java
@@ -75,14 +75,14 @@
 		IProject project = getUniqueTestProject("get");
 		IResource[] resources = buildResources(project, new String[] { "file1.txt", "folder1/", "folder1/b.txt" }, false);
 		TargetProvider target = createProvider(project);
-		target.put(resources, null);
+		target.put(resources, DEFAULT_MONITOR);
 		assertLocalEqualsRemote(project);
 		// test get on a new project
-		project.delete(true, true, null);
-		project.create(null);
-		project.open(null);
+		project.delete(true, true, DEFAULT_MONITOR);
+		project.create(DEFAULT_MONITOR);
+		project.open(DEFAULT_MONITOR);
 		target = createProvider(project);
-		target.get(new IResource[] { project }, null);
+		target.get(new IResource[] { project }, DEFAULT_MONITOR);
 		assertLocalEqualsRemote(project);
 	}
 	/**
@@ -97,10 +97,10 @@
 		for (int i = 0; i < resources.length; i++) {
 			assertTrue(target.canPut(resources[i]));
 		}
-		target.put(resources, null);
-		project.delete(true, true, null);
-		project.create(null);
-		project.open(null);
+		target.put(resources, DEFAULT_MONITOR);
+		project.delete(true, true, DEFAULT_MONITOR);
+		project.create(DEFAULT_MONITOR);
+		project.open(DEFAULT_MONITOR);
 		target = createProvider(project);
 		for (int i = 0; i < resources.length; i++) {
 			assertTrue(target.canGet(resources[i]));
diff --git a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
index 28dec26..f7478e9 100644
--- a/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
+++ b/tests/org.eclipse.team.tests.core/src/org/eclipse/team/tests/core/TeamTest.java
@@ -198,9 +198,9 @@
 			// Ignore .project file
 			if (container2.getName().equals(".project"))
 				return;
-			assertTrue(compareContent(container1.getContents(null), ((IFile) container2).getContents()));
+			assertTrue(compareContent(container1.getContents(DEFAULT_MONITOR), ((IFile) container2).getContents()));
 		} else {
-			IRemoteResource[] remoteResources = container1.members(null);
+			IRemoteResource[] remoteResources = container1.members(DEFAULT_MONITOR);
 			IResource[] localResources = ((IFolder) container2).members();
 			for (int i = 0; i < localResources.length; i++) {
 				assertEquals(remoteResources[i], localResources[i]);
@@ -211,7 +211,7 @@
 		IProject project = getUniqueTestProject(projectPrefix);
 		IResource[] resources = buildResources(project, resourceNames, false);
 		TargetProvider target = createProvider(project);
-		target.put(resources, null);
+		target.put(resources, DEFAULT_MONITOR);
 		return project;
 	}
 
