Bug 462288 - [target] "Resetting target platform information: Reading
plug-ins" is always performed at startup
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java
index 8475383..50b9d63 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginModelManager.java
@@ -26,6 +26,7 @@
 import org.eclipse.pde.core.build.IBuildEntry;
 import org.eclipse.pde.core.plugin.*;
 import org.eclipse.pde.core.target.*;
+import org.eclipse.pde.internal.core.target.P2TargetUtils;
 
 public class PluginModelManager implements IModelProviderListener {
 	private static final String fExternalPluginListFile = "SavedExternalPluginList.txt"; //$NON-NLS-1$
@@ -525,7 +526,7 @@
 		} catch (CoreException e) {
 			PDECore.log(e);
 		}
-		if (unresolvedRepoBasedtarget != null) {
+		if (unresolvedRepoBasedtarget != null && !P2TargetUtils.isProfileValid(unresolvedRepoBasedtarget)) {
 			//Workspace target contains unresolved p2 repositories,
 			//set empty fState, fExternalManager, fEntries- scheduling target platform resolve
 			fState = new PDEState(new URL[0], true, true, subMon);
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
index 3103eae..94fef70 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
@@ -640,6 +640,33 @@
 			return false;
 		}
 	}
+	
+	/**
+	 * Return whether or not the given target's matching profile  is in sync
+	 * @param target the target to check
+	 * @return whether or not the target has been resolved at the p2 level
+	 */
+	public static boolean isProfileValid(ITargetDefinition target) {
+		P2TargetUtils synchronizer = getSynchronizer(target);
+		if (synchronizer == null)
+			return false;
+		try {
+			synchronizer.updateProfileFromRegistry(target);
+			return synchronizer.checkProfile(target);
+		} catch (CoreException e) {
+			return false;
+		}
+	}
+
+
+	private void updateProfileFromRegistry(ITargetDefinition target) {
+		if (fProfile == null) {
+			try {
+				fProfile = getProfileRegistry().getProfile(getProfileId(target));
+			} catch (CoreException e) {
+			}
+		}
+	}
 
 	/**
 	 * Get the synchronizer to use for the given target.  If there is already one on a