re-architecting work
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/ApiTestingEnvironment.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/ApiTestingEnvironment.java
index fc73a95..44c849b 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/ApiTestingEnvironment.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/ApiTestingEnvironment.java
@@ -30,7 +30,7 @@
 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.IApiMarkerConstants;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.tests.util.ProjectUtils;
 import org.eclipse.pde.internal.core.natures.PDE;
 
@@ -306,10 +306,10 @@
 	}
 	
 	/**
-	 * Returns the current workspace {@link IApiProfile}
+	 * Returns the current workspace {@link IApiBaseline}
 	 * @return
 	 */
-	protected IApiProfile getWorkspaceProfile() {
+	protected IApiBaseline getWorkspaceProfile() {
 		return ApiPlugin.getDefault().getApiProfileManager().getWorkspaceProfile();
 	}
 	
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/OSGiLessAnalysisTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/OSGiLessAnalysisTests.java
index 8abe4db..8e41ab3 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/OSGiLessAnalysisTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/OSGiLessAnalysisTests.java
@@ -19,7 +19,7 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.pde.api.tools.internal.builder.BaseApiAnalyzer;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.model.tests.TestSuiteHelper;
 
@@ -31,8 +31,8 @@
 public class OSGiLessAnalysisTests extends TestCase {
 	
 	public void testAnalyzer() throws CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-analyzer-1");
-		IApiProfile current = TestSuiteHelper.createTestingProfile("test-analyzer-2");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-analyzer-1");
+		IApiBaseline current = TestSuiteHelper.createTestingProfile("test-analyzer-2");
 		BaseApiAnalyzer analyzer = new BaseApiAnalyzer();
 		IApiComponent component = current.getApiComponent("test.bundle.a");
 		assertNotNull("Missing API component test.bundle.a", component);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/compatibility/CompatibilityTest.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/compatibility/CompatibilityTest.java
index 87b8ab7..a2e1b49 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/compatibility/CompatibilityTest.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/compatibility/CompatibilityTest.java
@@ -38,8 +38,8 @@
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IApiProfileManager;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.pde.api.tools.model.tests.TestSuiteHelper;
 import org.eclipse.pde.api.tools.tests.ApiTestsPlugin;
@@ -164,10 +164,10 @@
 		// populate the workspace with initial plug-ins/projects
 		createExistingProjects(BASELINE, true);
 		IApiProfileManager manager = ApiPlugin.getDefault().getApiProfileManager();
-		IApiProfile baseline = manager.getDefaultApiProfile();
+		IApiBaseline baseline = manager.getDefaultApiProfile();
 		if (baseline == null) {
 			// create the API baseline
-			IApiProfile profile = manager.getWorkspaceProfile();
+			IApiBaseline profile = manager.getWorkspaceProfile();
 			IProject[] projects = getEnv().getWorkspace().getRoot().getProjects();
 			IPath baselineLocation = ApiTestsPlugin.getDefault().getStateLocation().append(BASELINE);
 			for (int i = 0; i < projects.length; i++) {
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/performance/ApiDescriptionTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/performance/ApiDescriptionTests.java
index a0bbfd2..e80e0e6 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/performance/ApiDescriptionTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/performance/ApiDescriptionTests.java
@@ -17,7 +17,7 @@
 import org.eclipse.pde.api.tools.internal.provisional.ApiDescriptionVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.model.tests.TestSuiteHelper;
 import org.eclipse.test.performance.Dimension;
 
@@ -64,7 +64,7 @@
 		for (int j = 0; j < 2; j++) {
 			// *** clean & visit API description ***
 			proj.build(IncrementalProjectBuilder.CLEAN_BUILD, ApiPlugin.BUILDER_ID, null, null);
-			IApiProfile profile = ApiPlugin.getDefault().getApiProfileManager().getWorkspaceProfile();
+			IApiBaseline profile = ApiPlugin.getDefault().getApiProfileManager().getWorkspaceProfile();
 			IApiComponent component = profile.getApiComponent(proj.getName());
 			component.getApiDescription().accept(visitor);
 		}
@@ -74,7 +74,7 @@
 			
 			// *** clean API description ***
 			proj.build(IncrementalProjectBuilder.CLEAN_BUILD, ApiPlugin.BUILDER_ID, null, null);
-			IApiProfile profile = ApiPlugin.getDefault().getApiProfileManager().getWorkspaceProfile();
+			IApiBaseline profile = ApiPlugin.getDefault().getApiProfileManager().getWorkspaceProfile();
 			IApiComponent component = profile.getApiComponent(proj.getName());
 				
 			// ** Visit API description ***
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/performance/PerformanceTest.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/performance/PerformanceTest.java
index 5c57739..5966115 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/performance/PerformanceTest.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/builder/tests/performance/PerformanceTest.java
@@ -41,8 +41,8 @@
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IApiProfileManager;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.model.tests.TestSuiteHelper;
 import org.eclipse.pde.api.tools.tests.ApiTestsPlugin;
 import org.eclipse.ui.dialogs.IOverwriteQuery;
@@ -174,7 +174,7 @@
 			IApiProfileManager manager = ApiPlugin.getDefault().getApiProfileManager();
 			IPath path = new Path(zipPath);
 			String id = path.lastSegment();
-			IApiProfile perfline = manager.getApiProfile(id);
+			IApiBaseline perfline = manager.getApiProfile(id);
 			if (perfline == null) {
 				// create the API baseline
 				IPath baselineLocation = ApiTestsPlugin.getDefault().getStateLocation().append(id);
@@ -195,7 +195,7 @@
 				manager.addApiProfile(perfline);
 				manager.setDefaultApiProfile(perfline.getName());			
 			}
-			IApiProfile baseline = manager.getDefaultApiProfile();
+			IApiBaseline baseline = manager.getDefaultApiProfile();
 			if (baseline != perfline) {
 				manager.setDefaultApiProfile(perfline.getName());
 			}
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/AnnotationDeltaTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/AnnotationDeltaTests.java
index 186ac82..32f53f5 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/AnnotationDeltaTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/AnnotationDeltaTests.java
@@ -14,10 +14,10 @@
 import junit.framework.TestSuite;
 
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 
 /**
  * Delta tests for annotation
@@ -44,8 +44,8 @@
 	 */
 	public void test1() {
 		deployBundles("test1");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -66,8 +66,8 @@
 	 */
 	public void test2() {
 		deployBundles("test2");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -88,8 +88,8 @@
 	 */
 	public void test3() {
 		deployBundles("test3");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -110,8 +110,8 @@
 	 */
 	public void test4() {
 		deployBundles("test4");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -181,8 +181,8 @@
 	 */
 	public void test5() {
 		deployBundles("test5");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -263,8 +263,8 @@
 	 */
 	public void test6() {
 		deployBundles("test6");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -340,8 +340,8 @@
 	 */
 	public void test7() {
 		deployBundles("test7");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -362,8 +362,8 @@
 	 */
 	public void test8() {
 		deployBundles("test8");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/BundlesDeltaTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/BundlesDeltaTests.java
index 0f18bda..fa510c2 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/BundlesDeltaTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/BundlesDeltaTests.java
@@ -15,12 +15,12 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 
 /**
  * Delta tests for class
@@ -184,8 +184,8 @@
 	 */
 	public void test8() {
 		deployBundles("test8");
-		IApiProfile beforeState = getBeforeState();
-		IApiProfile afterState = getAfterState();
+		IApiBaseline beforeState = getBeforeState();
+		IApiBaseline afterState = getAfterState();
 		IApiComponent referenceComponent = beforeState.getApiComponent("deltatest1");
 		IApiComponent component = afterState.getApiComponent("deltatest1");
 		try {
@@ -478,8 +478,8 @@
 	 */
 	public void test11() {
 		deployBundles("test11");
-		IApiProfile beforeState = getBeforeState();
-		IApiProfile afterState = getAfterState();
+		IApiBaseline beforeState = getBeforeState();
+		IApiBaseline afterState = getAfterState();
 		IApiComponent apiComponent = afterState.getApiComponent("deltatest1");
 		assertNotNull("No api component", apiComponent);
 		IApiComponent refApiComponent = beforeState.getApiComponent("deltatest1");
@@ -500,8 +500,8 @@
 	 */
 	public void test12() {
 		deployBundles("test12");
-		IApiProfile beforeState = getBeforeState();
-		IApiProfile afterState = getAfterState();
+		IApiBaseline beforeState = getBeforeState();
+		IApiBaseline afterState = getAfterState();
 		IApiComponent apiComponent = afterState.getApiComponent("deltatest1");
 		assertNotNull("No api component", apiComponent);
 		IApiComponent refApiComponent = beforeState.getApiComponent("deltatest1");
@@ -521,8 +521,8 @@
 	 */
 	public void test13() {
 		deployBundles("test13");
-		IApiProfile beforeState = getBeforeState();
-		IApiProfile afterState = getAfterState();
+		IApiBaseline beforeState = getBeforeState();
+		IApiBaseline afterState = getAfterState();
 		IApiComponent apiComponent = afterState.getApiComponent("deltatest1");
 		assertNotNull("No api component", apiComponent);
 		IApiComponent refApiComponent = beforeState.getApiComponent("deltatest1");
@@ -542,8 +542,8 @@
 	 */
 	public void test14() {
 		deployBundles("test14");
-		IApiProfile beforeState = getBeforeState();
-		IApiProfile afterState = getAfterState();
+		IApiBaseline beforeState = getBeforeState();
+		IApiBaseline afterState = getAfterState();
 		IApiComponent apiComponent = afterState.getApiComponent("deltatest1");
 		assertNotNull("No api component", apiComponent);
 		IApiComponent refApiComponent = beforeState.getApiComponent("deltatest1");
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/ClassDeltaTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/ClassDeltaTests.java
index 25a37e0..4923a7a 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/ClassDeltaTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/ClassDeltaTests.java
@@ -18,7 +18,6 @@
 import org.eclipse.pde.api.tools.internal.comparator.DeltaXmlVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
@@ -26,6 +25,7 @@
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
 /**
@@ -53,8 +53,8 @@
 	 */
 	public void test1() {
 		deployBundles("test1");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -76,8 +76,8 @@
 	 */
 	public void test2() {
 		deployBundles("test2");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -99,8 +99,8 @@
 	 */
 	public void test3() {
 		deployBundles("test3");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -116,8 +116,8 @@
 	 */
 	public void test4() {
 		deployBundles("test4");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -143,8 +143,8 @@
 	 */
 	public void test5() {
 		deployBundles("test5");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -160,8 +160,8 @@
 	 */
 	public void test6() {
 		deployBundles("test6");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -187,8 +187,8 @@
 	 */
 	public void test7() {
 		deployBundles("test7");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -209,8 +209,8 @@
 	 */
 	public void test8() {
 		deployBundles("test8");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -231,8 +231,8 @@
 	 */
 	public void test9() {
 		deployBundles("test9");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -253,8 +253,8 @@
 	 */
 	public void test10() {
 		deployBundles("test10");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -270,8 +270,8 @@
 	 */
 	public void test11() {
 		deployBundles("test11");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -293,8 +293,8 @@
 	 */
 	public void test12() {
 		deployBundles("test12");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -315,8 +315,8 @@
 	 */
 	public void test13() {
 		deployBundles("test13");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -338,8 +338,8 @@
 	 */
 	public void test14() {
 		deployBundles("test14");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -361,8 +361,8 @@
 	 */
 	public void test15() {
 		deployBundles("test15");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -384,8 +384,8 @@
 	 */
 	public void test16() {
 		deployBundles("test16");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -406,8 +406,8 @@
 	 */
 	public void test17() {
 		deployBundles("test17");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -429,8 +429,8 @@
 	 */
 	public void test18() {
 		deployBundles("test18");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -452,8 +452,8 @@
 	 */
 	public void test19() {
 		deployBundles("test19");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -475,8 +475,8 @@
 	 */
 	public void test20() {
 		deployBundles("test20");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -497,8 +497,8 @@
 	 */
 	public void test21() {
 		deployBundles("test21");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -520,8 +520,8 @@
 	 */
 	public void test22() {
 		deployBundles("test22");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -543,8 +543,8 @@
 	 */
 	public void test23() {
 		deployBundles("test23");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -565,8 +565,8 @@
 	 */
 	public void test24() {
 		deployBundles("test24");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -587,8 +587,8 @@
 	 */
 	public void test25() {
 		deployBundles("test25");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -609,8 +609,8 @@
 	 */
 	public void test26() {
 		deployBundles("test26");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -631,8 +631,8 @@
 	 */
 	public void test27() {
 		deployBundles("test27");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -653,8 +653,8 @@
 	 */
 	public void test28() {
 		deployBundles("test28");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -675,8 +675,8 @@
 	 */
 	public void test29() {
 		deployBundles("test29");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -697,8 +697,8 @@
 	 */
 	public void test30() {
 		deployBundles("test30");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -719,8 +719,8 @@
 	 */
 	public void test31() {
 		deployBundles("test31");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -741,8 +741,8 @@
 	 */
 	public void test32() {
 		deployBundles("test32");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -763,8 +763,8 @@
 	 */
 	public void test33() {
 		deployBundles("test33");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -783,8 +783,8 @@
 	 */
 	public void test34() {
 		deployBundles("test34");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -804,8 +804,8 @@
 	 */
 	public void test35() {
 		deployBundles("test35");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -826,8 +826,8 @@
 	 */
 	public void test36() {
 		deployBundles("test36");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -848,8 +848,8 @@
 	 */
 	public void test37() {
 		deployBundles("test37");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -871,8 +871,8 @@
 	 */
 	public void test38() {
 		deployBundles("test38");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -894,8 +894,8 @@
 	 */
 	public void test39() {
 		deployBundles("test39");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -917,8 +917,8 @@
 	 */
 	public void test40() {
 		deployBundles("test40");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -940,8 +940,8 @@
 	 */
 	public void test41() {
 		deployBundles("test41");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -963,8 +963,8 @@
 	 */
 	public void test42() {
 		deployBundles("test42");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -984,8 +984,8 @@
 	 */
 	public void test43() {
 		deployBundles("test43");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1006,8 +1006,8 @@
 	 */
 	public void test44() {
 		deployBundles("test44");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1028,8 +1028,8 @@
 	 */
 	public void test45() {
 		deployBundles("test45");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1050,8 +1050,8 @@
 	 */
 	public void test46() {
 		deployBundles("test46");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1072,8 +1072,8 @@
 	 */
 	public void test47() {
 		deployBundles("test47");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1094,8 +1094,8 @@
 	 */
 	public void test48() {
 		deployBundles("test48");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1121,8 +1121,8 @@
 	 */
 	public void test49() {
 		deployBundles("test49");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1148,8 +1148,8 @@
 	 */
 	public void test50() {
 		deployBundles("test50");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1185,8 +1185,8 @@
 	 */
 	public void test51() {
 		deployBundles("test51");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1222,8 +1222,8 @@
 	 */
 	public void test52() {
 		deployBundles("test52");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1249,8 +1249,8 @@
 	 */
 	public void test53() {
 		deployBundles("test53");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1271,8 +1271,8 @@
 	 */
 	public void test54() {
 		deployBundles("test54");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1293,8 +1293,8 @@
 	 */
 	public void test55() {
 		deployBundles("test55");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1315,8 +1315,8 @@
 	 */
 	public void test56() {
 		deployBundles("test56");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1343,8 +1343,8 @@
 	 */
 	public void test57() {
 		deployBundles("test57");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1371,8 +1371,8 @@
 	 */
 	public void test58() {
 		deployBundles("test58");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1388,8 +1388,8 @@
 	 */
 	public void test59() {
 		deployBundles("test59");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1405,8 +1405,8 @@
 	 */
 	public void test60() {
 		deployBundles("test60");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1422,8 +1422,8 @@
 	 */
 	public void test61() {
 		deployBundles("test61");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1439,8 +1439,8 @@
 	 */
 	public void test62() {
 		deployBundles("test62");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1462,8 +1462,8 @@
 	 */
 	public void test63() {
 		deployBundles("test63");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1486,8 +1486,8 @@
 	 */
 	public void test64() {
 		deployBundles("test64");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1509,8 +1509,8 @@
 	 */
 	public void test65() {
 		deployBundles("test65");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1531,8 +1531,8 @@
 	 */
 	public void test66() {
 		deployBundles("test66");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1554,8 +1554,8 @@
 	 */
 	public void test67() {
 		deployBundles("test67");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1576,8 +1576,8 @@
 	 */
 	public void test68() {
 		deployBundles("test68");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1599,8 +1599,8 @@
 	 */
 	public void test69() {
 		deployBundles("test69");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1623,8 +1623,8 @@
 	 */
 	public void test70() {
 		deployBundles("test70");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1645,8 +1645,8 @@
 	 */
 	public void test71() {
 		deployBundles("test71");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1674,8 +1674,8 @@
 	 */
 	public void test72() {
 		deployBundles("test72");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1702,8 +1702,8 @@
 	 */
 	public void test73() {
 		deployBundles("test73");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1730,8 +1730,8 @@
 	 */
 	public void test74() {
 		deployBundles("test74");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1753,8 +1753,8 @@
 	 */
 	public void test75() {
 		deployBundles("test75");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1776,8 +1776,8 @@
 	 */
 	public void test76() {
 		deployBundles("test76");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1793,8 +1793,8 @@
 	 */
 	public void test77() {
 		deployBundles("test77");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1815,8 +1815,8 @@
 	 */
 	public void test78() {
 		deployBundles("test78");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1838,8 +1838,8 @@
 	 */
 	public void test79() {
 		deployBundles("test79");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1866,8 +1866,8 @@
 	 */
 	public void test80() {
 		deployBundles("test80");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1894,8 +1894,8 @@
 	 */
 	public void test81() {
 		deployBundles("test81");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1917,8 +1917,8 @@
 	 */
 	public void test82() {
 		deployBundles("test82");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1938,8 +1938,8 @@
 	 */
 	public void test83() {
 		deployBundles("test83");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1961,8 +1961,8 @@
 	 */
 	public void test84() {
 		deployBundles("test84");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1984,8 +1984,8 @@
 	 */
 	public void test85() {
 		deployBundles("test85");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2006,8 +2006,8 @@
 	 */
 	public void test86() {
 		deployBundles("test86");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2029,8 +2029,8 @@
 	 */
 	public void test87() {
 		deployBundles("test87");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2052,8 +2052,8 @@
 	 */
 	public void test88() {
 		deployBundles("test88");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2075,8 +2075,8 @@
 	 */
 	public void test89() {
 		deployBundles("test89");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2098,8 +2098,8 @@
 	 */
 	public void test90() {
 		deployBundles("test90");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2121,8 +2121,8 @@
 	 */
 	public void test91() {
 		deployBundles("test91");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2144,8 +2144,8 @@
 	 */
 	public void test92() {
 		deployBundles("test92");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2167,8 +2167,8 @@
 	 */
 	public void test93() {
 		deployBundles("test93");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2190,8 +2190,8 @@
 	 */
 	public void test94() {
 		deployBundles("test94");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2213,8 +2213,8 @@
 	 */
 	public void test95() {
 		deployBundles("test95");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2236,8 +2236,8 @@
 	 */
 	public void test96() {
 		deployBundles("test96");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2259,8 +2259,8 @@
 	 */
 	public void test97() {
 		deployBundles("test97");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2286,8 +2286,8 @@
 	 */
 	public void test98() {
 		deployBundles("test98");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2333,8 +2333,8 @@
 	 */
 	public void test99() {
 		deployBundles("test99");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2364,8 +2364,8 @@
 	 */
 	public void test100() {
 		deployBundles("test100");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2387,8 +2387,8 @@
 	 */
 	public void test101() {
 		deployBundles("test101");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2409,8 +2409,8 @@
 	 */
 	public void test102() {
 		deployBundles("test102");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2431,8 +2431,8 @@
 	 */
 	public void test103() {
 		deployBundles("test103");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2453,8 +2453,8 @@
 	 */
 	public void test104() {
 		deployBundles("test104");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2478,8 +2478,8 @@
 	 */
 	public void test105() {
 		deployBundles("test105");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2502,8 +2502,8 @@
 	 */
 	public void test106() {
 		deployBundles("test106");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2525,8 +2525,8 @@
 	 */
 	public void test107() {
 		deployBundles("test107");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2549,8 +2549,8 @@
 	 */
 	public void test108() {
 		deployBundles("test108");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2570,8 +2570,8 @@
 	 */
 	public void test109() {
 		deployBundles("test109");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2594,8 +2594,8 @@
 	 */
 	public void test110() {
 		deployBundles("test110");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2618,8 +2618,8 @@
 	 */
 	public void test111() {
 		deployBundles("test111");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2641,8 +2641,8 @@
 	 */
 	public void test112() {
 		deployBundles("test112");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2664,8 +2664,8 @@
 	 */
 	public void test113() {
 		deployBundles("test113");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2688,8 +2688,8 @@
 	 */
 	public void test114() {
 		deployBundles("test114");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2711,8 +2711,8 @@
 	 */
 	public void test115() {
 		deployBundles("test115");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2737,8 +2737,8 @@
 	 */
 	public void test116() {
 		deployBundles("test116");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2759,8 +2759,8 @@
 	 */
 	public void test117() {
 		deployBundles("test117");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2780,8 +2780,8 @@
 	 */
 	public void test118() {
 		deployBundles("test118");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2801,8 +2801,8 @@
 	 */
 	public void test119() {
 		deployBundles("test119");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2816,8 +2816,8 @@
 	 */
 	public void test120() {
 		deployBundles("test120");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2831,8 +2831,8 @@
 	 */
 	public void test121() {
 		deployBundles("test121");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2846,8 +2846,8 @@
 	 */
 	public void test122() {
 		deployBundles("test122");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2873,8 +2873,8 @@
 	 */
 	public void test123() {
 		deployBundles("test123");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2904,8 +2904,8 @@
 	 */
 	public void test124() {
 		deployBundles("test124");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2935,8 +2935,8 @@
 	 */
 	public void test125() {
 		deployBundles("test125");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2956,8 +2956,8 @@
 	 */
 	public void test126() {
 		deployBundles("test126");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2982,8 +2982,8 @@
 	 */
 	public void test127() {
 		deployBundles("test127");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3004,8 +3004,8 @@
 	 */
 	public void test128() {
 		deployBundles("test128");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3027,8 +3027,8 @@
 	 */
 	public void test129() {
 		deployBundles("test129");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3059,8 +3059,8 @@
 	 */
 	public void test130() {
 		deployBundles("test130");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3085,8 +3085,8 @@
 	 */
 	public void test131() {
 		deployBundles("test131");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3106,8 +3106,8 @@
 	 */
 	public void test132() {
 		deployBundles("test132");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3121,8 +3121,8 @@
 	 */
 	public void test133() {
 		deployBundles("test133");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3142,8 +3142,8 @@
 	 */
 	public void test134() {
 		deployBundles("test134");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3163,8 +3163,8 @@
 	 */
 	public void test135() {
 		deployBundles("test135");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3178,8 +3178,8 @@
 	 */
 	public void test136() {
 		deployBundles("test136");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3199,8 +3199,8 @@
 	 */
 	public void test137() {
 		deployBundles("test137");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -3214,8 +3214,8 @@
 	 */
 	public void test138() {
 		deployBundles("test138");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/DeltaTestSetup.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/DeltaTestSetup.java
index a3c3794..5b1432b 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/DeltaTestSetup.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/DeltaTestSetup.java
@@ -22,9 +22,9 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.pde.api.tools.internal.builder.BuilderMessages;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.model.tests.TestSuiteHelper;
 
 public abstract class DeltaTestSetup extends TestCase {
@@ -114,8 +114,8 @@
 		}
 	}
 	
-	protected IApiProfile getBeforeState() {
-		IApiProfile state = null;
+	protected IApiBaseline getBeforeState() {
+		IApiBaseline state = null;
 		try {
 			state = TestSuiteHelper.createTestingProfile(getBaseLineFolder(BEFORE));
 		} catch (CoreException e) {
@@ -125,8 +125,8 @@
 		return state;
 	}
 	
-	protected IApiProfile getAfterState() {
-		IApiProfile state = null;
+	protected IApiBaseline getAfterState() {
+		IApiBaseline state = null;
 		try {
 			state = TestSuiteHelper.createTestingProfile(getBaseLineFolder(AFTER));
 		} catch (CoreException e) {
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/EnumDeltaTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/EnumDeltaTests.java
index 15046c3..f5f8684 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/EnumDeltaTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/EnumDeltaTests.java
@@ -14,11 +14,11 @@
 import junit.framework.TestSuite;
 
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
 /**
@@ -46,8 +46,8 @@
 	 */
 	public void test1() {
 		deployBundles("test1");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -68,8 +68,8 @@
 	 */
 	public void test2() {
 		deployBundles("test2");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -95,8 +95,8 @@
 	 */
 	public void test3() {
 		deployBundles("test3");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -124,8 +124,8 @@
 	 */
 	public void test4() {
 		deployBundles("test4");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -153,8 +153,8 @@
 	 */
 	public void test5() {
 		deployBundles("test5");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -175,8 +175,8 @@
 	 */
 	public void test6() {
 		deployBundles("test6");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -192,8 +192,8 @@
 	 */
 	public void test7() {
 		deployBundles("test7");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -215,8 +215,8 @@
 	 */
 	public void test8() {
 		deployBundles("test8");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -237,8 +237,8 @@
 	 */
 	public void test9() {
 		deployBundles("test9");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -259,8 +259,8 @@
 	 */
 	public void test10() {
 		deployBundles("test10");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -274,8 +274,8 @@
 	 */
 	public void test11() {
 		deployBundles("test11");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -296,8 +296,8 @@
 	 */
 	public void test12() {
 		deployBundles("test12");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/FieldDeltaTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/FieldDeltaTests.java
index 3cc86bb..b4900ab 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/FieldDeltaTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/FieldDeltaTests.java
@@ -14,12 +14,12 @@
 import junit.framework.TestSuite;
 
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
 /**
@@ -46,8 +46,8 @@
 	 */
 	public void test1() {
 		deployBundles("test1");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -68,8 +68,8 @@
 	 */
 	public void test2() {
 		deployBundles("test2");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -90,8 +90,8 @@
 	 */
 	public void test3() {
 		deployBundles("test3");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -113,8 +113,8 @@
 	 */
 	public void test4() {
 		deployBundles("test4");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -136,8 +136,8 @@
 	 */
 	public void test5() {
 		deployBundles("test5");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -153,8 +153,8 @@
 	 */
 	public void test6() {
 		deployBundles("test6");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -175,8 +175,8 @@
 	 */
 	public void test7() {
 		deployBundles("test7");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -197,8 +197,8 @@
 	 */
 	public void test8() {
 		deployBundles("test8");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -219,8 +219,8 @@
 	 */
 	public void test9() {
 		deployBundles("test9");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -241,8 +241,8 @@
 	 */
 	public void test10() {
 		deployBundles("test10");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -263,8 +263,8 @@
 	 */
 	public void test11() {
 		deployBundles("test11");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -285,8 +285,8 @@
 	 */
 	public void test12() {
 		deployBundles("test12");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -312,8 +312,8 @@
 	 */
 	public void test13() {
 		deployBundles("test13");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -339,8 +339,8 @@
 	 */
 	public void test14() {
 		deployBundles("test14");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -366,8 +366,8 @@
 	 */
 	public void test15() {
 		deployBundles("test15");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -388,8 +388,8 @@
 	 */
 	public void test16() {
 		deployBundles("test16");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -410,8 +410,8 @@
 	 */
 	public void test17() {
 		deployBundles("test17");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -432,8 +432,8 @@
 	 */
 	public void test18() {
 		deployBundles("test18");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -454,8 +454,8 @@
 	 */
 	public void test19() {
 		deployBundles("test19");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -476,8 +476,8 @@
 	 */
 	public void test20() {
 		deployBundles("test20");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -498,8 +498,8 @@
 	 */
 	public void test21() {
 		deployBundles("test21");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -520,8 +520,8 @@
 	 */
 	public void test22() {
 		deployBundles("test22");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -547,8 +547,8 @@
 	 */
 	public void test23() {
 		deployBundles("test23");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -575,8 +575,8 @@
 	 */
 	public void test24() {
 		deployBundles("test24");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -598,8 +598,8 @@
 	 */
 	public void test25() {
 		deployBundles("test25");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -626,8 +626,8 @@
 	 */
 	public void test26() {
 		deployBundles("test26");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -649,8 +649,8 @@
 	 */
 	public void test27() {
 		deployBundles("test27");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -678,8 +678,8 @@
 	 */
 	public void test28() {
 		deployBundles("test28");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -701,8 +701,8 @@
 	 */
 	public void test29() {
 		deployBundles("test29");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -722,8 +722,8 @@
 	 */
 	public void test30() {
 		deployBundles("test30");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -744,8 +744,8 @@
 	 */
 	public void test31() {
 		deployBundles("test31");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -765,8 +765,8 @@
 	 */
 	public void test32() {
 		deployBundles("test32");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -787,8 +787,8 @@
 	 */
 	public void test33() {
 		deployBundles("test33");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -809,8 +809,8 @@
 	 */
 	public void test34() {
 		deployBundles("test34");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -836,8 +836,8 @@
 	 */
 	public void test35() {
 		deployBundles("test35");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -860,8 +860,8 @@
 	 */
 	public void test36() {
 		deployBundles("test36");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -888,8 +888,8 @@
 	 */
 	public void test37() {
 		deployBundles("test37");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -912,8 +912,8 @@
 	 */
 	public void test38() {
 		deployBundles("test38");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -942,8 +942,8 @@
 	 */
 	public void test39() {
 		deployBundles("test39");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -974,8 +974,8 @@
 	 */
 	public void test40() {
 		deployBundles("test40");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1021,8 +1021,8 @@
 	 */
 	public void test41() {
 		deployBundles("test41");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1044,8 +1044,8 @@
 	 */
 	public void test42() {
 		deployBundles("test42");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1065,8 +1065,8 @@
 	 */
 	public void test43() {
 		deployBundles("test43");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1087,8 +1087,8 @@
 	 */
 	public void test44() {
 		deployBundles("test44");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1108,8 +1108,8 @@
 	 */
 	public void test45() {
 		deployBundles("test45");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1129,8 +1129,8 @@
 	 */
 	public void test46() {
 		deployBundles("test46");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1145,8 +1145,8 @@
 	 */
 	public void test47() {
 		deployBundles("test47");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1166,8 +1166,8 @@
 	 */
 	public void test48() {
 		deployBundles("test48");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1187,8 +1187,8 @@
 	 */
 	public void test49() {
 		deployBundles("test49");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1202,8 +1202,8 @@
 	 */
 	public void test50() {
 		deployBundles("test50");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1223,8 +1223,8 @@
 	 */
 	public void test51() {
 		deployBundles("test51");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1244,8 +1244,8 @@
 	 */
 	public void test52() {
 		deployBundles("test52");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1265,8 +1265,8 @@
 	 */
 	public void test53() {
 		deployBundles("test53");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1287,8 +1287,8 @@
 	 */
 	public void test54() {
 		deployBundles("test54");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1309,8 +1309,8 @@
 	 */
 	public void test55() {
 		deployBundles("test55");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1324,8 +1324,8 @@
 	 */
 	public void test56() {
 		deployBundles("test56");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1346,8 +1346,8 @@
 	 */
 	public void test57() {
 		deployBundles("test57");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1362,8 +1362,8 @@
 	 */
 	public void test58() {
 		deployBundles("test58");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1377,8 +1377,8 @@
 	 */
 	public void test59() {
 		deployBundles("test59");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1399,8 +1399,8 @@
 	 */
 	public void test60() {
 		deployBundles("test60");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1425,8 +1425,8 @@
 	 */
 	public void test61() {
 		deployBundles("test61");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1451,8 +1451,8 @@
 	 */
 	public void test62() {
 		deployBundles("test62");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1466,8 +1466,8 @@
 	 */
 	public void test63() {
 		deployBundles("test63");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1489,8 +1489,8 @@
 	 */
 	public void test64() {
 		deployBundles("test64");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1511,8 +1511,8 @@
 	 */
 	public void test65() {
 		deployBundles("test65");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1541,8 +1541,8 @@
 	 */
 	public void test66() {
 		deployBundles("test66");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1564,8 +1564,8 @@
 	 */
 	public void test67() {
 		deployBundles("test67");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1587,8 +1587,8 @@
 	 */
 	public void test68() {
 		deployBundles("test68");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1617,8 +1617,8 @@
 	 */
 	public void test69() {
 		deployBundles("test69");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1640,8 +1640,8 @@
 	 */
 	public void test70() {
 		deployBundles("test70");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1663,8 +1663,8 @@
 	 */
 	public void test71() {
 		deployBundles("test71");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1686,8 +1686,8 @@
 	 */
 	public void test72() {
 		deployBundles("test72");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1709,8 +1709,8 @@
 	 */
 	public void test73() {
 		deployBundles("test73");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1732,8 +1732,8 @@
 	 */
 	public void test74() {
 		deployBundles("test74");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/InterfaceDeltaTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/InterfaceDeltaTests.java
index 4d1282f..4f9e335 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/InterfaceDeltaTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/InterfaceDeltaTests.java
@@ -14,11 +14,11 @@
 import junit.framework.TestSuite;
 
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 
 /**
  * Delta tests for interface
@@ -44,8 +44,8 @@
 	 */
 	public void test1() {
 		deployBundles("test1");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -66,8 +66,8 @@
 	 */
 	public void test2() {
 		deployBundles("test2");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -88,8 +88,8 @@
 	 */
 	public void test3() {
 		deployBundles("test3");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -105,8 +105,8 @@
 	 */
 	public void test4() {
 		deployBundles("test4");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -127,8 +127,8 @@
 	 */
 	public void test5() {
 		deployBundles("test5");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -149,8 +149,8 @@
 	 */
 	public void test6() {
 		deployBundles("test6");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -176,8 +176,8 @@
 	 */
 	public void test7() {
 		deployBundles("test7");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -198,8 +198,8 @@
 	 */
 	public void test8() {
 		deployBundles("test8");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -235,8 +235,8 @@
 	 */
 	public void test9() {
 		deployBundles("test9");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -262,8 +262,8 @@
 	 */
 	public void test10() {
 		deployBundles("test10");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -284,8 +284,8 @@
 	 */
 	public void test11() {
 		deployBundles("test11");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -306,8 +306,8 @@
 	 */
 	public void test12() {
 		deployBundles("test12");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -328,8 +328,8 @@
 	 */
 	public void test13() {
 		deployBundles("test13");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -350,8 +350,8 @@
 	 */
 	public void test14() {
 		deployBundles("test14");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -373,8 +373,8 @@
 	 */
 	public void test15() {
 		deployBundles("test15");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -396,8 +396,8 @@
 	 */
 	public void test16() {
 		deployBundles("test16");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -424,8 +424,8 @@
 	 */
 	public void test17() {
 		deployBundles("test17");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -452,8 +452,8 @@
 	 */
 	public void test18() {
 		deployBundles("test18");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -475,8 +475,8 @@
 	 */
 	public void test19() {
 		deployBundles("test19");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -498,8 +498,8 @@
 	 */
 	public void test20() {
 		deployBundles("test20");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -527,8 +527,8 @@
 	 */
 	public void test21() {
 		deployBundles("test21");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -549,8 +549,8 @@
 	 */
 	public void test22() {
 		deployBundles("test22");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -578,8 +578,8 @@
 	 */
 	public void test23() {
 		deployBundles("test23");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -606,8 +606,8 @@
 	 */
 	public void test24() {
 		deployBundles("test24");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/MethodDeltaTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/MethodDeltaTests.java
index 23b875e..307903c 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/MethodDeltaTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/MethodDeltaTests.java
@@ -14,12 +14,12 @@
 import junit.framework.TestSuite;
 
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
 /**
@@ -47,8 +47,8 @@
 	 */
 	public void test1() {
 		deployBundles("test1");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -64,8 +64,8 @@
 	 */
 	public void test2() {
 		deployBundles("test2");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -81,8 +81,8 @@
 	 */
 	public void test3() {
 		deployBundles("test3");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -109,8 +109,8 @@
 	 */
 	public void test4() {
 		deployBundles("test4");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -137,8 +137,8 @@
 	 */
 	public void test5() {
 		deployBundles("test5");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -165,8 +165,8 @@
 	 */
 	public void test6() {
 		deployBundles("test6");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -193,8 +193,8 @@
 	 */
 	public void test7() {
 		deployBundles("test7");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -221,8 +221,8 @@
 	 */
 	public void test8() {
 		deployBundles("test8");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -243,8 +243,8 @@
 	 */
 	public void test9() {
 		deployBundles("test9");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -265,8 +265,8 @@
 	 */
 	public void test10() {
 		deployBundles("test10");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -287,8 +287,8 @@
 	 */
 	public void test11() {
 		deployBundles("test11");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -309,8 +309,8 @@
 	 */
 	public void test12() {
 		deployBundles("test12");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -326,8 +326,8 @@
 	 */
 	public void test13() {
 		deployBundles("test13");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -348,8 +348,8 @@
 	 */
 	public void test14() {
 		deployBundles("test14");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -370,8 +370,8 @@
 	 */
 	public void test15() {
 		deployBundles("test15");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -392,8 +392,8 @@
 	 */
 	public void test16() {
 		deployBundles("test16");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -414,8 +414,8 @@
 	 */
 	public void test17() {
 		deployBundles("test17");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -436,8 +436,8 @@
 	 */
 	public void test18() {
 		deployBundles("test18");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -459,8 +459,8 @@
 	 */
 	public void test19() {
 		deployBundles("test19");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -481,8 +481,8 @@
 	 */
 	public void test20() {
 		deployBundles("test20");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -504,8 +504,8 @@
 	 */
 	public void test21() {
 		deployBundles("test21");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -526,8 +526,8 @@
 	 */
 	public void test22() {
 		deployBundles("test22");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -548,8 +548,8 @@
 	 */
 	public void test23() {
 		deployBundles("test23");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -570,8 +570,8 @@
 	 */
 	public void test24() {
 		deployBundles("test24");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -593,8 +593,8 @@
 	 */
 	public void test25() {
 		deployBundles("test25");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -615,8 +615,8 @@
 	 */
 	public void test26() {
 		deployBundles("test26");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -637,8 +637,8 @@
 	 */
 	public void test27() {
 		deployBundles("test27");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -659,8 +659,8 @@
 	 */
 	public void test28() {
 		deployBundles("test28");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -681,8 +681,8 @@
 	 */
 	public void test29() {
 		deployBundles("test29");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -703,8 +703,8 @@
 	 */
 	public void test30() {
 		deployBundles("test30");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -725,8 +725,8 @@
 	 */
 	public void test31() {
 		deployBundles("test31");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -747,8 +747,8 @@
 	 */
 	public void test32() {
 		deployBundles("test32");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -769,8 +769,8 @@
 	 */
 	public void test33() {
 		deployBundles("test33");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -791,8 +791,8 @@
 	 */
 	public void test34() {
 		deployBundles("test34");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -813,8 +813,8 @@
 	 */
 	public void test35() {
 		deployBundles("test35");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -835,8 +835,8 @@
 	 */
 	public void test36() {
 		deployBundles("test36");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -882,8 +882,8 @@
 	 */
 	public void test37() {
 		deployBundles("test37");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -904,8 +904,8 @@
 	 */
 	public void test38() {
 		deployBundles("test38");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -926,8 +926,8 @@
 	 */
 	public void test39() {
 		deployBundles("test39");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -948,8 +948,8 @@
 	 */
 	public void test40() {
 		deployBundles("test40");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -970,8 +970,8 @@
 	 */
 	public void test41() {
 		deployBundles("test41");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -992,8 +992,8 @@
 	 */
 	public void test42() {
 		deployBundles("test42");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1014,8 +1014,8 @@
 	 */
 	public void test43() {
 		deployBundles("test43");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1036,8 +1036,8 @@
 	 */
 	public void test44() {
 		deployBundles("test44");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1058,8 +1058,8 @@
 	 */
 	public void test45() {
 		deployBundles("test45");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1080,8 +1080,8 @@
 	 */
 	public void test46() {
 		deployBundles("test46");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1102,8 +1102,8 @@
 	 */
 	public void test47() {
 		deployBundles("test47");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1131,8 +1131,8 @@
 	 */
 	public void test48() {
 		deployBundles("test48");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1154,8 +1154,8 @@
 	 */
 	public void test49() {
 		deployBundles("test49");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1177,8 +1177,8 @@
 	 */
 	public void test50() {
 		deployBundles("test50");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1193,8 +1193,8 @@
 	 */
 	public void test51() {
 		deployBundles("test51");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1217,8 +1217,8 @@
 	 */
 	public void test52() {
 		deployBundles("test52");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1240,8 +1240,8 @@
 	 */
 	public void test53() {
 		deployBundles("test53");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1264,8 +1264,8 @@
 	 */
 	public void test54() {
 		deployBundles("test54");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1287,8 +1287,8 @@
 	 */
 	public void test55() {
 		deployBundles("test55");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1310,8 +1310,8 @@
 	 */
 	public void test56() {
 		deployBundles("test56");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1333,8 +1333,8 @@
 	 */
 	public void test57() {
 		deployBundles("test57");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1356,8 +1356,8 @@
 	 */
 	public void test58() {
 		deployBundles("test58");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1379,8 +1379,8 @@
 	 */
 	public void test59() {
 		deployBundles("test59");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1400,8 +1400,8 @@
 	 */
 	public void test60() {
 		deployBundles("test60");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1421,8 +1421,8 @@
 	 */
 	public void test61() {
 		deployBundles("test61");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1444,8 +1444,8 @@
 	 */
 	public void test62() {
 		deployBundles("test62");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1467,8 +1467,8 @@
 	 */
 	public void test63() {
 		deployBundles("test63");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1489,8 +1489,8 @@
 	 */
 	public void test64() {
 		deployBundles("test64");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1511,8 +1511,8 @@
 	 */
 	public void test65() {
 		deployBundles("test65");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1526,8 +1526,8 @@
 	 */
 	public void test66() {
 		deployBundles("test66");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1548,8 +1548,8 @@
 	 */
 	public void test67() {
 		deployBundles("test67");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1570,8 +1570,8 @@
 	 */
 	public void test68() {
 		deployBundles("test68");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1592,8 +1592,8 @@
 	 */
 	public void test69() {
 		deployBundles("test69");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1607,8 +1607,8 @@
 	 */
 	public void test70() {
 		deployBundles("test70");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1629,8 +1629,8 @@
 	 */
 	public void test71() {
 		deployBundles("test71");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1651,8 +1651,8 @@
 	 */
 	public void test72() {
 		deployBundles("test72");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1673,8 +1673,8 @@
 	 */
 	public void test73() {
 		deployBundles("test73");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1688,8 +1688,8 @@
 	 */
 	public void test74() {
 		deployBundles("test74");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1710,8 +1710,8 @@
 	 */
 	public void test75() {
 		deployBundles("test75");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1732,8 +1732,8 @@
 	 */
 	public void test76() {
 		deployBundles("test76");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1754,8 +1754,8 @@
 	 */
 	public void test77() {
 		deployBundles("test77");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1769,8 +1769,8 @@
 	 */
 	public void test78() {
 		deployBundles("test78");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1791,8 +1791,8 @@
 	 */
 	public void test79() {
 		deployBundles("test79");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1813,8 +1813,8 @@
 	 */
 	public void test80() {
 		deployBundles("test80");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1828,8 +1828,8 @@
 	 */
 	public void test81() {
 		deployBundles("test81");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1856,8 +1856,8 @@
 	 */
 	public void test82() {
 		deployBundles("test82");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1890,8 +1890,8 @@
 	 */
 	public void test83() {
 		deployBundles("test83");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1918,8 +1918,8 @@
 	 */
 	public void test84() {
 		deployBundles("test84");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1952,8 +1952,8 @@
 	 */
 	public void test85() {
 		deployBundles("test85");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1967,8 +1967,8 @@
 	 */
 	public void test86() {
 		deployBundles("test86");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -1990,8 +1990,8 @@
 	 */
 	public void test87() {
 		deployBundles("test87");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2014,8 +2014,8 @@
 	 */
 	public void test88() {
 		deployBundles("test88");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2036,8 +2036,8 @@
 	 */
 	public void test89() {
 		deployBundles("test89");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2058,8 +2058,8 @@
 	 */
 	public void test90() {
 		deployBundles("test90");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2081,8 +2081,8 @@
 	 */
 	public void test91() {
 		deployBundles("test91");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2104,8 +2104,8 @@
 	 */
 	public void test92() {
 		deployBundles("test92");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2127,8 +2127,8 @@
 	 */
 	public void test93() {
 		deployBundles("test93");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2150,8 +2150,8 @@
 	 */
 	public void test94() {
 		deployBundles("test94");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2173,8 +2173,8 @@
 	 */
 	public void test95() {
 		deployBundles("test95");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2196,8 +2196,8 @@
 	 */
 	public void test96() {
 		deployBundles("test96");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2219,8 +2219,8 @@
 	 */
 	public void test97() {
 		deployBundles("test97");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2242,8 +2242,8 @@
 	 */
 	public void test98() {
 		deployBundles("test98");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2265,8 +2265,8 @@
 	 */
 	public void test99() {
 		deployBundles("test99");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2287,8 +2287,8 @@
 	 */
 	public void test100() {
 		deployBundles("test100");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2309,8 +2309,8 @@
 	 */
 	public void test101() {
 		deployBundles("test101");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2331,8 +2331,8 @@
 	 */
 	public void test102() {
 		deployBundles("test102");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2353,8 +2353,8 @@
 	 */
 	public void test103() {
 		deployBundles("test103");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2375,8 +2375,8 @@
 	 */
 	public void test104() {
 		deployBundles("test104");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2398,8 +2398,8 @@
 	 */
 	public void test105() {
 		deployBundles("test105");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2413,8 +2413,8 @@
 	 */
 	public void test106() {
 		deployBundles("test105");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2428,8 +2428,8 @@
 	 */
 	public void test107() {
 		deployBundles("test107");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2443,8 +2443,8 @@
 	 */
 	public void test108() {
 		deployBundles("test108");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2458,8 +2458,8 @@
 	 */
 	public void test109() {
 		deployBundles("test109");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2481,8 +2481,8 @@
 	 */
 	public void test110() {
 		deployBundles("test110");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2505,8 +2505,8 @@
 	 */
 	public void test111() {
 		deployBundles("test111");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2528,8 +2528,8 @@
 	 */
 	public void test112() {
 		deployBundles("test112");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2543,8 +2543,8 @@
 	 */
 	public void test113() {
 		deployBundles("test113");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2565,8 +2565,8 @@
 	 */
 	public void test114() {
 		deployBundles("test114");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -2580,8 +2580,8 @@
 	 */
 	public void test115() {
 		deployBundles("test115");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/MixedTypesDeltaTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/MixedTypesDeltaTests.java
index 2571e31..f3dde62 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/MixedTypesDeltaTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/MixedTypesDeltaTests.java
@@ -14,10 +14,10 @@
 import junit.framework.TestSuite;
 
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 
 /**
  * Delta tests for mixed types (conversion from interface to other types, and so on)
@@ -44,8 +44,8 @@
 	 */
 	public void test1() {
 		deployBundles("test1");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -66,8 +66,8 @@
 	 */
 	public void test2() {
 		deployBundles("test2");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -88,8 +88,8 @@
 	 */
 	public void test3() {
 		deployBundles("test3");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -110,8 +110,8 @@
 	 */
 	public void test4() {
 		deployBundles("test4");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -132,8 +132,8 @@
 	 */
 	public void test5() {
 		deployBundles("test5");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -154,8 +154,8 @@
 	 */
 	public void test6() {
 		deployBundles("test6");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -176,8 +176,8 @@
 	 */
 	public void test7() {
 		deployBundles("test7");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -198,8 +198,8 @@
 	 */
 	public void test8() {
 		deployBundles("test8");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -220,8 +220,8 @@
 	 */
 	public void test9() {
 		deployBundles("test9");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -242,8 +242,8 @@
 	 */
 	public void test10() {
 		deployBundles("test10");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -264,8 +264,8 @@
 	 */
 	public void test11() {
 		deployBundles("test11");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -286,8 +286,8 @@
 	 */
 	public void test12() {
 		deployBundles("test12");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/RestrictionsDeltaTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/RestrictionsDeltaTests.java
index 2c47d9f..21b97d1 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/RestrictionsDeltaTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/RestrictionsDeltaTests.java
@@ -14,11 +14,11 @@
 import junit.framework.TestSuite;
 
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 
 /**
  * Delta tests for restrictions delta
@@ -45,8 +45,8 @@
 	 */
 	public void test1() {
 		deployBundles("test1");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -72,8 +72,8 @@
 	 */
 	public void test2() {
 		deployBundles("test3");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -99,8 +99,8 @@
 	 */
 	public void test3() {
 		deployBundles("test3");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		IApiComponent afterApiComponent = after.getApiComponent(BUNDLE_NAME);
@@ -126,8 +126,8 @@
 	 */
 	public void test4() {
 		deployBundles("test4");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		assertTrue("Has no description", beforeApiComponent.hasApiDescription());
@@ -149,8 +149,8 @@
 	 */
 	public void test5() {
 		deployBundles("test5");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		assertTrue("Has no description", beforeApiComponent.hasApiDescription());
@@ -172,8 +172,8 @@
 	 */
 	public void test6() {
 		deployBundles("test6");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		assertTrue("Has no description", beforeApiComponent.hasApiDescription());
@@ -189,8 +189,8 @@
 	 */
 	public void test7() {
 		deployBundles("test7");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		assertTrue("Has no description", beforeApiComponent.hasApiDescription());
@@ -206,8 +206,8 @@
 	 */
 	public void test8() {
 		deployBundles("test8");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		assertTrue("Has no description", beforeApiComponent.hasApiDescription());
@@ -223,8 +223,8 @@
 	 */
 	public void test9() {
 		deployBundles("test9");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		assertTrue("Has no description", beforeApiComponent.hasApiDescription());
@@ -241,8 +241,8 @@
 	 */
 	public void test10() {
 		deployBundles("test10");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		assertTrue("Has no description", beforeApiComponent.hasApiDescription());
@@ -258,8 +258,8 @@
 	 */
 	public void test11() {
 		deployBundles("test11");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		assertTrue("Has no description", beforeApiComponent.hasApiDescription());
@@ -276,8 +276,8 @@
 	 */
 	public void test12() {
 		deployBundles("test12");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		assertTrue("Has no description", beforeApiComponent.hasApiDescription());
@@ -300,8 +300,8 @@
 	 */
 	public void test13() {
 		deployBundles("test13");
-		IApiProfile before = getBeforeState();
-		IApiProfile after = getAfterState();
+		IApiBaseline before = getBeforeState();
+		IApiBaseline after = getAfterState();
 		IApiComponent beforeApiComponent = before.getApiComponent(BUNDLE_NAME);
 		assertNotNull("no api component", beforeApiComponent);
 		assertTrue("Has no description", beforeApiComponent.hasApiDescription());
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiDescriptionTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiDescriptionTests.java
index 4c0b2e2..ce6f06a 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiDescriptionTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiDescriptionTests.java
@@ -22,20 +22,20 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.jdt.core.Signature;
-import org.eclipse.pde.api.tools.internal.ApiDescription;
 import org.eclipse.pde.api.tools.internal.ApiSettingsXmlVisitor;
 import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
+import org.eclipse.pde.api.tools.internal.model.ApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.ApiDescriptionVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.scanner.ApiDescriptionProcessor;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
@@ -267,7 +267,7 @@
 		path = path.append("test-xml");
 		File file = path.toFile();
 		assertTrue("Missing xml directory", file.exists());
-		IApiProfile baseline = TestSuiteHelper.newApiProfile("test", TestSuiteHelper.getEEDescriptionFile());
+		IApiBaseline baseline = TestSuiteHelper.newApiProfile("test", TestSuiteHelper.getEEDescriptionFile());
 		IApiComponent component = baseline.newApiComponent(file.getAbsolutePath());
 		baseline.addApiComponents(new IApiComponent[] { component });
 		
@@ -788,7 +788,7 @@
 	 * tests that a binary bundle with no .api_description file has no API description
 	 */
 	public void testBinaryHasNoApiDescription() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		assertFalse("Should have no .api_description file", componentA.hasApiDescription());
 	}
@@ -797,7 +797,7 @@
 	 * tests that a binary bundle with an .api_description file has an API description
 	 */
 	public void testBinaryHasApiDescription() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins-with-desc");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins-with-desc");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		assertTrue("Should have an .api_description file", componentA.hasApiDescription());
 	}	
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiFilterStoreTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiFilterStoreTests.java
index 32b6e22..a43d81f 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiFilterStoreTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiFilterStoreTests.java
@@ -25,10 +25,10 @@
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter;
 import org.eclipse.pde.api.tools.tests.AbstractApiTest;
@@ -262,7 +262,7 @@
 			IProject project = getTestingJavaProject(TESTING_PLUGIN_PROJECT_NAME).getProject();
 			IResource jar = project.findMember("component_c_1.0.0.jar");
 			assertNotNull("the component_c jar cannot be null", jar);
-			IApiProfile profile = ApiPlugin.getDefault().getApiProfileManager().getWorkspaceProfile();
+			IApiBaseline profile = ApiPlugin.getDefault().getApiProfileManager().getWorkspaceProfile();
 			IApiComponent component = profile.newApiComponent(jar.getLocation().toOSString());
 			profile.addApiComponents(new IApiComponent[] { component });
 			assertNotNull("the new component cannot be null", component);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiProfileTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiProfileTests.java
index 826e258..8d7883a 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiProfileTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ApiProfileTests.java
@@ -22,12 +22,12 @@
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
 import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 
 /**
  * Test creation of states and components.
@@ -43,7 +43,7 @@
 	 * @throws CoreException
 	 */
 	public void testCreateBaseline() throws FileNotFoundException, CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		assertNotNull("the testing baseline should exist", baseline);
 		List<IRequiredComponentDescription> reqs = new ArrayList<IRequiredComponentDescription>();
 		reqs.add(new RequiredComponentDescription("org.eclipse.core.runtime", new BundleVersionRange("")));
@@ -63,7 +63,7 @@
 	 * @throws CoreException
 	 */
 	public void testResolvePackage() throws FileNotFoundException, CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		assertNotNull("the testing baseline should exist", baseline);
 		IApiComponent[] components = baseline.resolvePackage(baseline.getApiComponent("component.b"), "component.a");
 		assertNotNull("No component", components);
@@ -78,7 +78,7 @@
 	 * @throws CoreException
 	 */
 	public void testResolvePackageWithinComponent() throws FileNotFoundException, CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		assertNotNull("the testing baseline should exist", baseline);
 		IApiComponent[] components = baseline.resolvePackage(baseline.getApiComponent("component.a"), "a.b.c");
 		assertNotNull("No component", components);
@@ -93,7 +93,7 @@
 	 * @throws CoreException
 	 */
 	public void testResolveJavaLangPackage() throws FileNotFoundException, CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		assertNotNull("the testing baseline should exist", baseline);
 		IApiComponent[] components = baseline.resolvePackage(baseline.getApiComponent("component.b"), "java.lang");
 		assertNotNull("No component", components);
@@ -108,7 +108,7 @@
 	 * @throws CoreException
 	 */
 	public void testResolveSystemPackage() throws FileNotFoundException, CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		assertNotNull("the testing baseline should exist", baseline);
 		IApiComponent[] components = baseline.resolvePackage(baseline.getApiComponent("component.b"), "org.w3c.dom");
 		assertNotNull("No component", components);
@@ -123,7 +123,7 @@
 	 * @throws CoreException
 	 */
 	public void testFindJavaLangObject() throws FileNotFoundException, CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		assertNotNull("the testing baseline should exist", baseline);
 		IApiComponent[] components = baseline.resolvePackage(baseline.getApiComponent("component.b"), "java.lang");
 		assertNotNull("No component", components);
@@ -145,7 +145,7 @@
 	 * @param requiredComponents list of {@link IRequiredComponentDescription}
 	 * @throws CoreException 
 	 */
-	private void validateComponent(IApiProfile baseline, String id, String name, String version, String environment, List<IRequiredComponentDescription> requiredComponents) throws CoreException {
+	private void validateComponent(IApiBaseline baseline, String id, String name, String version, String environment, List<IRequiredComponentDescription> requiredComponents) throws CoreException {
 		IApiComponent component = baseline.getApiComponent(id);
 		
 		assertEquals("Id: ", id , component.getId());
@@ -170,7 +170,7 @@
 	 * @throws CoreException
 	 */
 	public void testNestedJarComponent() throws CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-nested-jars");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-nested-jars");
 		IApiComponent component = baseline.getApiComponent("component.a");
 		assertNotNull("missing component.a", component);
 		IClassFileContainer[] containers = component.getClassFileContainers();
@@ -201,7 +201,7 @@
 	 * @throws CoreException 
 	 */
 	public void testXFriendsDirective() throws CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent component = baseline.getApiComponent("component.a");
 		assertNotNull("Missing component.a", component);
 		IApiDescription description = component.getApiDescription();
@@ -218,7 +218,7 @@
 	 * @throws CoreException 
 	 */
 	public void testXInternalDirective() throws CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent component = baseline.getApiComponent("component.a");
 		assertNotNull("Missing component.a", component);
 		IApiDescription description = component.getApiDescription();
@@ -235,7 +235,7 @@
 	 * @throws CoreException 
 	 */
 	public void testUsesDirective() throws CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent component = baseline.getApiComponent("component.a");
 		assertNotNull("Missing component.a", component);
 		IApiDescription description = component.getApiDescription();
@@ -252,7 +252,7 @@
 	 * @throws CoreException 
 	 */
 	public void testNotExported() throws CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent component = baseline.getApiComponent("component.a");
 		assertNotNull("Missing component.a", component);
 		IApiDescription description = component.getApiDescription();
@@ -268,7 +268,7 @@
 	 * @throws CoreException
 	 */
 	public void testPrerequisites() throws CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent component = baseline.getApiComponent("component.a");
 		IApiComponent[] prerequisiteComponents = baseline.getPrerequisiteComponents(new IApiComponent[]{component});
 		for (int i = 0; i < prerequisiteComponents.length; i++) {
@@ -287,7 +287,7 @@
 	 * @throws CoreException
 	 */
 	public void testDependents() throws CoreException {
-		IApiProfile baseline = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline baseline = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent component = baseline.getApiComponent("component.a");
 		IApiComponent[] dependents = baseline.getDependentComponents(new IApiComponent[]{component});
 		assertEquals("Wrong number of dependents", 2, dependents.length);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ClassFileScannerTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ClassFileScannerTests.java
index 4417d1a..1f323e4 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ClassFileScannerTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ClassFileScannerTests.java
@@ -21,13 +21,13 @@
 import org.eclipse.pde.api.tools.internal.DirectoryClassFileContainer;
 import org.eclipse.pde.api.tools.internal.provisional.ClassFileContainerVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
 import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter;
 import org.eclipse.pde.api.tools.internal.provisional.search.ILocation;
@@ -195,7 +195,7 @@
 			}
 			public void dispose() {
 			}
-			public IApiProfile getProfile() {
+			public IApiBaseline getProfile() {
 				return null;
 			}
 			public IApiFilterStore getFilterStore() {
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ComponentManifestTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ComponentManifestTests.java
index a109e16..090eb9b 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ComponentManifestTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/ComponentManifestTests.java
@@ -24,8 +24,8 @@
 import org.eclipse.pde.api.tools.internal.BundleVersionRange;
 import org.eclipse.pde.api.tools.internal.RequiredComponentDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 
 /**
  * @since 1.0.0
@@ -49,7 +49,7 @@
 		path = path.append("test-manifests");
 		File file = path.toFile();
 		assertTrue("Missing manifest directory", file.exists());
-		IApiProfile baseline = TestSuiteHelper.newApiProfile("test", TestSuiteHelper.getEEDescriptionFile());
+		IApiBaseline baseline = TestSuiteHelper.newApiProfile("test", TestSuiteHelper.getEEDescriptionFile());
 		IApiComponent component = baseline.newApiComponent(file.getAbsolutePath());
 		baseline.addApiComponents(new IApiComponent[] { component });
 		assertEquals("Id: ", "org.eclipse.debug.ui" , component.getId());
@@ -86,7 +86,7 @@
 		path = path.append("test-manifests");
 		File file = path.toFile();
 		assertTrue("Missing manifest directory", file.exists());
-		IApiProfile baseline = TestSuiteHelper.newApiProfile("test", TestSuiteHelper.getEEDescriptionFile());
+		IApiBaseline baseline = TestSuiteHelper.newApiProfile("test", TestSuiteHelper.getEEDescriptionFile());
 		IApiComponent component = baseline.newApiComponent(file.getAbsolutePath());
 		baseline.addApiComponents(new IApiComponent[] { component });
 		
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TagScannerTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TagScannerTests.java
index 5c639d2..b88761e 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TagScannerTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TagScannerTests.java
@@ -15,18 +15,18 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.pde.api.tools.internal.ApiDescription;
 import org.eclipse.pde.api.tools.internal.ArchiveClassFileContainer;
 import org.eclipse.pde.api.tools.internal.CompilationUnit;
 import org.eclipse.pde.api.tools.internal.DirectoryClassFileContainer;
+import org.eclipse.pde.api.tools.internal.model.ApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.ClassFileContainerVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.scanner.TagScanner;
 
 import com.ibm.icu.text.MessageFormat;
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TestSuiteHelper.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TestSuiteHelper.java
index 5dc5663..f92397a 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TestSuiteHelper.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/model/tests/TestSuiteHelper.java
@@ -42,12 +42,12 @@
 import org.eclipse.pde.api.tools.internal.provisional.ClassFileContainerVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
 import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter;
 import org.eclipse.pde.api.tools.internal.util.Util;
@@ -72,9 +72,9 @@
 	 * @return API profile
 	 * @throws CoreException
 	 */
-	public static IApiProfile createProfile(String name, File rootDirectory) throws CoreException {
+	public static IApiBaseline createProfile(String name, File rootDirectory) throws CoreException {
 		File eeFile = getEEDescriptionFile();
-		IApiProfile baseline = newApiProfile(name, eeFile);
+		IApiBaseline baseline = newApiProfile(name, eeFile);
 		// create a component for each jar/directory in the folder
 		File[] files = rootDirectory.listFiles();
 		List<IApiComponent> components = new ArrayList<IApiComponent>();
@@ -104,7 +104,7 @@
 	 * @return
 	 * @throws CoreException
 	 */
-	public static IApiProfile createTestingProfile(String testDirectory) throws CoreException {
+	public static IApiBaseline createTestingProfile(String testDirectory) throws CoreException {
 		return createTestingProfile(new Path(testDirectory));
 	}
 	
@@ -159,7 +159,7 @@
 			}
 			public void dispose() {
 			}
-			public IApiProfile getProfile() {
+			public IApiBaseline getProfile() {
 				return null;
 			}
 			public IApiFilterStore getFilterStore() {
@@ -197,13 +197,13 @@
 	 * <code>null</code> is returned
 	 * @throws CoreException
 	 */
-	public static IApiProfile createTestingProfile(IPath testDirectory) throws CoreException {
+	public static IApiBaseline createTestingProfile(IPath testDirectory) throws CoreException {
 		IPath path = TestSuiteHelper.getPluginDirectoryPath();
 		path = path.append(testDirectory);
 		File file = path.toFile();
 		if(file.exists()) {
 			File eeFile = getEEDescriptionFile();
-			IApiProfile baseline = newApiProfile("test", eeFile);
+			IApiBaseline baseline = newApiProfile("test", eeFile);
 			// create a component for each jar/directory in the folder
 			File[] files = file.listFiles();
 			List<IApiComponent> components = new ArrayList<IApiComponent>();
@@ -233,7 +233,7 @@
 	}
 
 	/**
-	 * Constructs a new {@link IApiProfile} with the given name, id, version, and environment.
+	 * Constructs a new {@link IApiBaseline} with the given name, id, version, and environment.
 	 * <p>
 	 * Attempts to locate OSGi execution environment profile when not running in 
 	 * an OSGi framework.
@@ -243,7 +243,7 @@
 	 * @return API baseline
 	 * @exception CoreException if unable to create a baseline
 	 */
-	public static IApiProfile newApiProfile(String name, File eeFile) throws CoreException {
+	public static IApiBaseline newApiProfile(String name, File eeFile) throws CoreException {
 		return Factory.newApiProfile(name, eeFile);
 	}
 
@@ -318,7 +318,7 @@
 	 * @param collection collection to add prerequisites to.
 	 * @throws CoreException 
 	 */
-	public static void addAllRequired(IApiProfile baseline, Set<String> done, IApiComponent component, List<IApiComponent> collection) throws CoreException {
+	public static void addAllRequired(IApiBaseline baseline, Set<String> done, IApiComponent component, List<IApiComponent> collection) throws CoreException {
 		IRequiredComponentDescription[] descriptions = component.getRequiredComponents();
 		boolean error = false;
 		StringBuffer buffer = new StringBuffer();
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/DiscouragedAccessTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/DiscouragedAccessTests.java
index 22a8480..630b8ef 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/DiscouragedAccessTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/DiscouragedAccessTests.java
@@ -25,9 +25,9 @@
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchCriteria;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchEngine;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchScope;
@@ -53,7 +53,7 @@
 		// build baseline
 		File jdt = TestSuiteHelper.getBundle("org.eclipse.jdt.debug.ui");
 		assertNotNull("Missing jdt.debug.ui", jdt);
-		IApiProfile profile = TestSuiteHelper.createProfile("eclipse", jdt.getParentFile());
+		IApiBaseline profile = TestSuiteHelper.createProfile("eclipse", jdt.getParentFile());
 		
 		// search
 		IApiComponent jdtComponent = profile.getApiComponent("org.eclipse.jdt.debug.ui");
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/SearchEngineTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/SearchEngineTests.java
index 630e49e..678dc98 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/SearchEngineTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/SearchEngineTests.java
@@ -20,7 +20,6 @@
 import org.eclipse.pde.api.tools.internal.builder.ApiUseAnalyzer;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
@@ -28,6 +27,7 @@
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchCriteria;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchEngine;
@@ -52,7 +52,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchForExtenders() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IApiSearchScope sourceScope = Factory.newScope(new IApiComponent[]{componentB});
@@ -76,7 +76,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchForExtendersByName() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IApiSearchScope sourceScope = Factory.newScope(new IApiComponent[]{componentB});
 		IApiSearchEngine engine = Factory.newSearchEngine();
@@ -97,7 +97,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchForCallersByRegEx() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IApiSearchScope sourceScope = Factory.newScope(new IApiComponent[]{componentB});
 		IApiSearchEngine engine = Factory.newSearchEngine();
@@ -117,7 +117,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchForExtendersInPackageByName() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IApiSearchScope sourceScope = Factory.newScope(new IApiComponent[]{componentB});
 		IApiSearchEngine engine = Factory.newSearchEngine();
@@ -139,7 +139,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchForMethodExtenders() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IApiSearchScope sourceScope = Factory.newScope(new IApiComponent[]{componentB});
@@ -181,7 +181,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchIllegalInstantiate() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IReferenceTypeDescriptor noInst = Factory.packageDescriptor("component.a").getType("NoInstantiateClass");
@@ -205,7 +205,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchIllegalExtendsClass() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IReferenceTypeDescriptor noInst = Factory.packageDescriptor("component.a").getType("NoExtendClass");
@@ -229,7 +229,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchIllegalImplementInterface() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IReferenceTypeDescriptor noInst = Factory.packageDescriptor("component.a").getType("INoImplementInterface");
@@ -256,7 +256,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchIllegalImplementWithinComponent() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IReferenceTypeDescriptor noInst = Factory.packageDescriptor("component.a").getType("INoImplementInterface");
 		componentA.getApiDescription().setRestrictions(noInst, RestrictionModifiers.NO_IMPLEMENT);
@@ -280,7 +280,7 @@
 	 * @throws CoreException
 	 */
 	public void testIgnoreIllegalImplementWithinComponent() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IReferenceTypeDescriptor noInst = Factory.packageDescriptor("component.a").getType("INoImplementInterface");
 		componentA.getApiDescription().setRestrictions(noInst, RestrictionModifiers.NO_IMPLEMENT);
@@ -302,7 +302,7 @@
 	 * @throws CoreException 
 	 */
 	public void testXMLReferences() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IReferenceTypeDescriptor noInst = Factory.packageDescriptor("component.a").getType("INoImplementInterface");
@@ -340,7 +340,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchIllegalMethodReference() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IReferenceTypeDescriptor noCall = Factory.packageDescriptor("component.a").getType("MethodNoReference");
@@ -376,7 +376,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchIllegalFieldReference() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IReferenceTypeDescriptor noCall = Factory.packageDescriptor("component.a").getType("FieldNoReference");
@@ -411,7 +411,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchIllegalInterfaceMethodReference() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IReferenceTypeDescriptor noCall = Factory.packageDescriptor("component.a").getType("MethodNoReferenceInterface");
@@ -441,7 +441,7 @@
 	 * @throws CoreException
 	 */
 	public void testSearchSystemLibrary() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent[] components = profile.getApiComponents();
 		IApiComponent systemComp = null;
 		for (int i = 0; i < components.length; i++) {
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/SearchScopeTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/SearchScopeTests.java
index d604e01..88b5263 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/SearchScopeTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/reference/tests/SearchScopeTests.java
@@ -19,7 +19,6 @@
 import org.eclipse.pde.api.tools.internal.provisional.ClassFileContainerVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
@@ -27,6 +26,7 @@
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchScope;
 import org.eclipse.pde.api.tools.model.tests.TestSuiteHelper;
 
@@ -44,7 +44,7 @@
 	 * @throws CoreException
 	 */
 	public void testVisitEntireComponentsScope() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiComponent componentB = profile.getApiComponent("component.b");
 		IApiComponent[] components = new IApiComponent[]{componentA, componentB};
@@ -90,7 +90,7 @@
 	 * @throws CoreException
 	 */
 	public void testVisitPackageScope() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IApiSearchScope scope = Factory.newScope(componentA, new IElementDescriptor[]{Factory.packageDescriptor("a.b.c")});
 		final Collection<String> expectedPackages = new HashSet<String>();
@@ -118,7 +118,7 @@
 	 * @throws CoreException
 	 */
 	public void testVisitTypeScope() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IPackageDescriptor pkg = Factory.packageDescriptor("component.a");
 		IReferenceTypeDescriptor type = pkg.getType("A");
@@ -140,7 +140,7 @@
 	 * @throws CoreException
 	 */
 	public void testVisitMethodScope() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IPackageDescriptor pkg = Factory.packageDescriptor("component.a");
 		IReferenceTypeDescriptor type = pkg.getType("Activator");
@@ -164,7 +164,7 @@
 	 * @throws CoreException
 	 */
 	public void testAddingWiderScope() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IPackageDescriptor pkg = Factory.packageDescriptor("component.a");
 		IReferenceTypeDescriptor type = pkg.getType("Activator");
@@ -185,7 +185,7 @@
 	 * @throws CoreException
 	 */
 	public void testEnclosesSiblingScope() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IPackageDescriptor pkg = Factory.packageDescriptor("component.a");
 		IReferenceTypeDescriptor type = pkg.getType("Activator");
@@ -202,7 +202,7 @@
 	 * @throws CoreException
 	 */
 	public void testEnclosesChildrenScope() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		IPackageDescriptor pkg = Factory.packageDescriptor("component.a");
 		IReferenceTypeDescriptor type = pkg.getType("Activator");
@@ -220,7 +220,7 @@
 	 * @throws CoreException
 	 */
 	public void testVisitSpecificTypes() throws CoreException {
-		IApiProfile profile = TestSuiteHelper.createTestingProfile("test-plugins");
+		IApiBaseline profile = TestSuiteHelper.createTestingProfile("test-plugins");
 		IApiComponent componentA = profile.getApiComponent("component.a");
 		Collection<String> expectedPackages = new HashSet<String>();
 		expectedPackages.add("a.b.c");
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/tests/AbstractApiTest.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/tests/AbstractApiTest.java
index c76776b..b85e1b9 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/tests/AbstractApiTest.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/tests/AbstractApiTest.java
@@ -26,7 +26,7 @@
 import org.eclipse.ltk.core.refactoring.Refactoring;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 
 /**
  * Abstract class with commonly used methods for API Tooling tests
@@ -70,7 +70,7 @@
 	 */
 	protected IApiComponent getProjectApiComponent(String projectname) {
 		IJavaProject project = getTestingJavaProject(projectname);
-		IApiProfile profile = ApiPlugin.getDefault().getApiProfileManager().getWorkspaceProfile();
+		IApiBaseline profile = ApiPlugin.getDefault().getApiProfileManager().getWorkspaceProfile();
 		assertNotNull("the workspace profile must exist", profile);
 		return profile.getApiComponent(project.getElementName());
 	}
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/ApiProfileManagerTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/ApiProfileManagerTests.java
index f1a2132..be30704 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/ApiProfileManagerTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/ApiProfileManagerTests.java
@@ -57,11 +57,11 @@
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IApiProfileManager;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.pde.api.tools.model.tests.TestSuiteHelper;
 import org.eclipse.pde.api.tools.tests.AbstractApiTest;
@@ -79,7 +79,7 @@
 import org.osgi.framework.Constants;
 
 /**
- * Tests the {@link ApiProfileManager} without the framework running
+ * Tests the {@link ApiBaselineManager} without the framework running
  */
 public class ApiProfileManagerTests extends AbstractApiTest {
 
@@ -180,7 +180,7 @@
 	 * @return the {@link IApiDescription} for the testing project
 	 */
 	private IApiDescription getTestProjectApiDescription()  throws CoreException {
-		IApiProfile profile = getWorkspaceProfile();
+		IApiBaseline profile = getWorkspaceProfile();
 		assertNotNull("the workspace profile must exist", profile);
 		IApiComponent component = profile.getApiComponent(TESTING_PLUGIN_PROJECT_NAME);
 		if(component != null) {
@@ -194,7 +194,7 @@
 	 * 
 	 * @return workspace profile
 	 */
-	private IApiProfile getWorkspaceProfile() {
+	private IApiBaseline getWorkspaceProfile() {
 		return fPMmanager.getWorkspaceProfile();
 	}
 	
@@ -204,8 +204,8 @@
 	 * @param id
 	 * @return
 	 */
-	protected IApiProfile getTestProfile(String id) {
-		IApiProfile profile = null;
+	protected IApiBaseline getTestProfile(String id) {
+		IApiBaseline profile = null;
 		profile = Factory.newApiProfile(id);
 		fPMmanager.addApiProfile(profile);
 		return profile;
@@ -215,7 +215,7 @@
 	 * Tests trying to get the workspace profile without the framework running 
 	 */
 	public void testGetWorkspaceComponent() {
-		IApiProfile profile = getWorkspaceProfile();
+		IApiBaseline profile = getWorkspaceProfile();
 		assertTrue("the workspace profile must not be null", profile != null);
 	}
 	
@@ -223,7 +223,7 @@
 	 * Tests that an api profile can be added and retrieved successfully 
 	 */
 	public void testAddProfile() {
-		IApiProfile profile = getTestProfile("addtest");
+		IApiBaseline profile = getTestProfile("addtest");
 		assertTrue("the test profile must have been created", profile != null);
 		profile = fPMmanager.getApiProfile("addtest");
 		assertTrue("the testadd profile must be in the manager", profile != null);
@@ -233,7 +233,7 @@
 	 * Tests that an api profile can be added/removed successfully
 	 */
 	public void testRemoveProfile() {
-		IApiProfile profile = getTestProfile("removetest");
+		IApiBaseline profile = getTestProfile("removetest");
 		assertTrue("the testremove profile must exist", profile != null);
 		profile = fPMmanager.getApiProfile("removetest");
 		assertTrue("the testremove profile must be in the manager", profile != null);
@@ -244,7 +244,7 @@
 	 * Tests that the default profile can be set/retrieved
 	 */
 	public void testSetDefaultProfile() {
-		IApiProfile profile = getTestProfile("testdefault");
+		IApiBaseline profile = getTestProfile("testdefault");
 		assertTrue("the testdefault profile must exist", profile != null);
 		fPMmanager.setDefaultApiProfile("testdefault");
 		profile = fPMmanager.getDefaultApiProfile();
@@ -256,7 +256,7 @@
 	 */
 	public void testGetAllProfiles() {
 		getTestProfile("three");
-		IApiProfile[] profiles = fPMmanager.getApiProfiles();
+		IApiBaseline[] profiles = fPMmanager.getApiProfiles();
 		assertTrue("there should be three profiles", profiles.length == 3);
 	}
 	
@@ -305,7 +305,7 @@
 	        IVMInstall vm = JavaRuntime.getDefaultVMInstall();
 	        assertNotNull("No default JRE", vm);
 	        ProjectUtils.addContainerEntry(project, new Path(JavaRuntime.JRE_CONTAINER));
-	        IApiProfile profile = getWorkspaceProfile();
+	        IApiBaseline profile = getWorkspaceProfile();
 	        assertNotNull("the workspace profile cannot be null", profile);
 	        IApiComponent component = profile.getApiComponent(TESTING_PLUGIN_PROJECT_NAME);
 	        assertNotNull("the test project api component must exist in the workspace profile", component);
@@ -466,7 +466,7 @@
 			project.getProject().open(new NullProgressMonitor());
 			Object obj = waiter.waitForEvent();
 			assertNotNull("the opened event was not received", obj);
-			IApiProfile profile = getWorkspaceProfile();
+			IApiBaseline profile = getWorkspaceProfile();
 			assertNotNull("the workspace profile must not be null", profile);
 			IApiComponent component = profile.getApiComponent(TESTING_PLUGIN_PROJECT_NAME);
 			assertNotNull("the test project api component must exist in the workspace profile", component);
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/HeadlessApiProfileManagerTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/HeadlessApiProfileManagerTests.java
index 762f560..fdf32f5 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/HeadlessApiProfileManagerTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/HeadlessApiProfileManagerTests.java
@@ -10,19 +10,19 @@
  *******************************************************************************/
 package org.eclipse.pde.api.tools.util.tests;
 
-import org.eclipse.pde.api.tools.internal.ApiProfileManager;
+import org.eclipse.pde.api.tools.internal.ApiBaselineManager;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.tests.AbstractApiTest;
 
 /**
- * Tests that the {@link ApiProfileManager} is usable in a predictable way in a headless
+ * Tests that the {@link ApiBaselineManager} is usable in a predictable way in a headless
  * environment
  */
 public class HeadlessApiProfileManagerTests extends AbstractApiTest {
 	
-	private ApiProfileManager fManager = ApiProfileManager.getManager();
+	private ApiBaselineManager fManager = ApiBaselineManager.getManager();
 	
 	/* (non-Javadoc)
 	 * @see junit.framework.TestCase#tearDown()
@@ -36,7 +36,7 @@
 	 * Tests that we can get an API profile that exists from the manager 
 	 */
 	public void testGetApiProfile() {
-		IApiProfile profile = Factory.newApiProfile("test1");
+		IApiBaseline profile = Factory.newApiProfile("test1");
 		fManager.addApiProfile(profile);
 		profile = fManager.getApiProfile("test1");
 		assertNotNull("the test1 profile must exist in the manager", profile);
@@ -47,7 +47,7 @@
 	 * Tests that looking up a profile that does not exist in the manager returns null
 	 */
 	public void testGetNonExistantProfile() {
-		IApiProfile profile = fManager.getApiProfile("fooprofile");
+		IApiBaseline profile = fManager.getApiProfile("fooprofile");
 		assertNull("There should be no profile found", profile);
 	}
 	
@@ -55,7 +55,7 @@
 	 * Tests that setting the default profile works
 	 */
 	public void testSetDefaultProfile() {
-		IApiProfile profile = Factory.newApiProfile("test2");
+		IApiBaseline profile = Factory.newApiProfile("test2");
 		fManager.addApiProfile(profile);
 		fManager.setDefaultApiProfile(profile.getName());
 		profile = fManager.getDefaultApiProfile();
@@ -69,7 +69,7 @@
 	 */
 	public void testGetWrongDefault() {
 		fManager.setDefaultApiProfile("fooprofile");
-		IApiProfile profile = fManager.getDefaultApiProfile();
+		IApiBaseline profile = fManager.getDefaultApiProfile();
 		assertNull("the default profile should be null for a non-existant id", profile);
 	}
 	
@@ -77,11 +77,11 @@
 	 * Tests getting all profiles from the manager
 	 */
 	public void testGetAllProfiles() {
-		IApiProfile profile = Factory.newApiProfile("test1");
+		IApiBaseline profile = Factory.newApiProfile("test1");
 		fManager.addApiProfile(profile);
 		profile = Factory.newApiProfile("test2");
 		fManager.addApiProfile(profile);
-		IApiProfile[] profiles = fManager.getApiProfiles();
+		IApiBaseline[] profiles = fManager.getApiProfiles();
 		assertEquals("there should be 2 profiles", 2, profiles.length);
 	}
 	
@@ -89,7 +89,7 @@
 	 * Tests removing an existing profile from the manager
 	 */
 	public void testRemoveApiProfile() {
-		IApiProfile profile = Factory.newApiProfile("test2");
+		IApiBaseline profile = Factory.newApiProfile("test2");
 		fManager.addApiProfile(profile);
 		boolean result = fManager.removeApiProfile("test2");
 		assertTrue("the profile test2 should have been removed from the manager", result);
@@ -100,7 +100,7 @@
 	 * Tests that isExistingProfileName(..) returns return true when expected to 
 	 */
 	public void testIsExistingName() {
-		IApiProfile profile = Factory.newApiProfile("test1");
+		IApiBaseline profile = Factory.newApiProfile("test1");
 		fManager.addApiProfile(profile);
 		boolean result = fManager.isExistingProfileName("test1");
 		assertTrue("the name test1 should be an existing name", result);
@@ -204,7 +204,7 @@
 	 * Tests that the workspace profile is null in headless mode
 	 */
 	public void testGetWorkspaceProfile() {
-		IApiProfile profile = fManager.getWorkspaceProfile();
+		IApiBaseline profile = fManager.getWorkspaceProfile();
 		if(ApiPlugin.isRunningInFramework()) {
 			assertNotNull("the workspace profile must not be null with the framework running", profile);
 		}
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ApiToolsLabelProvider.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ApiToolsLabelProvider.java
index 73a223c..6746851 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ApiToolsLabelProvider.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/ApiToolsLabelProvider.java
@@ -21,11 +21,11 @@
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.search.ILocation;
 import org.eclipse.pde.api.tools.ui.internal.wizards.ApiProfileWizardPage.EEEntry;
 import org.eclipse.swt.SWT;
@@ -46,7 +46,7 @@
 public class ApiToolsLabelProvider extends BaseLabelProvider implements ILabelProvider, IFontProvider {
 
 	/**
-	 * Font for the default {@link IApiProfile} 
+	 * Font for the default {@link IApiBaseline} 
 	 */
 	private Font font = null;
 	
@@ -77,7 +77,7 @@
 		if (element instanceof File) {
 			return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
 		}
-		if(element instanceof IApiProfile) {
+		if(element instanceof IApiBaseline) {
 			return ApiUIPlugin.getSharedImage(IApiToolsConstants.IMG_OBJ_ECLIPSE_PROFILE);
 		}
 		if(element instanceof EEEntry) {
@@ -113,8 +113,8 @@
 				return ((File)element).getName();
 			}
 		}
-		if(element instanceof IApiProfile) {
-			IApiProfile profile  = (IApiProfile) element;
+		if(element instanceof IApiBaseline) {
+			IApiBaseline profile  = (IApiBaseline) element;
 			return profile.getName();
 		}
 		if(element instanceof EEEntry) {
@@ -141,14 +141,14 @@
 	}
 
 	/**
-	 * Returns if the specified {@link IApiProfile} is the default profile or not
+	 * Returns if the specified {@link IApiBaseline} is the default profile or not
 	 * @param element
 	 * @return if the profile is the default or not
 	 */
 	protected boolean isDefaultProfile(Object element) {
-		if(element instanceof IApiProfile) {
-			IApiProfile profile = (IApiProfile) element;
-			IApiProfile def = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
+		if(element instanceof IApiBaseline) {
+			IApiBaseline profile = (IApiBaseline) element;
+			IApiBaseline def = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
 			if(def != null) {
 				return profile.getName().equals(def.getName());
 			}
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiProfilesPreferencePage.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiProfilesPreferencePage.java
index f26a74b..66778c7 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiProfilesPreferencePage.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiProfilesPreferencePage.java
@@ -34,8 +34,8 @@
 import org.eclipse.jface.viewers.ViewerComparator;
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IApiProfileManager;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.pde.api.tools.ui.internal.ApiToolsLabelProvider;
 import org.eclipse.pde.api.tools.ui.internal.ApiUIPlugin;
@@ -57,12 +57,12 @@
 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
 
 /**
- * This preference page allows {@link IApiProfile}s to be created/removed/edited
+ * This preference page allows {@link IApiBaseline}s to be created/removed/edited
  * @since 1.0.0
  */
 public class ApiProfilesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
 	/**
-	 * Override to tell the label provider about uncommitted {@link IApiProfile}s that might have been set to 
+	 * Override to tell the label provider about uncommitted {@link IApiBaseline}s that might have been set to 
 	 * be the new default
 	 */
 	class ProfileLabelProvider extends ApiToolsLabelProvider {
@@ -112,12 +112,12 @@
 		tableviewer.addDoubleClickListener(new IDoubleClickListener() {
 			public void doubleClick(DoubleClickEvent event) {
 				IStructuredSelection ss = (IStructuredSelection) event.getSelection();
-				doEdit((IApiProfile) ss.getFirstElement());
+				doEdit((IApiBaseline) ss.getFirstElement());
 			}
 		});
 		tableviewer.addCheckStateListener(new ICheckStateListener() {
 			public void checkStateChanged(CheckStateChangedEvent event) {
-				IApiProfile profile = (IApiProfile) event.getElement();
+				IApiBaseline profile = (IApiBaseline) event.getElement();
 				if(event.getChecked()) {
 					tableviewer.setCheckedElements(new Object[] {profile});
 					newdefault = profile.getName();
@@ -133,14 +133,14 @@
 		});
 		tableviewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
-				IApiProfile[] state = getCurrentSelection();
+				IApiBaseline[] state = getCurrentSelection();
 				removebutton.setEnabled(state.length > 0);
 				editbutton.setEnabled(state.length == 1);
 			}
 		});
 		tableviewer.setComparator(new ViewerComparator() {
 			public int compare(Viewer viewer, Object e1, Object e2) {
-				return ((IApiProfile)e1).getName().compareTo(((IApiProfile)e2).getName());
+				return ((IApiBaseline)e1).getName().compareTo(((IApiBaseline)e2).getName());
 			}
 		});
 		BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
@@ -156,7 +156,7 @@
 				ApiProfileWizard wizard = new ApiProfileWizard(null);
 				WizardDialog dialog = new WizardDialog(ApiUIPlugin.getShell(), wizard);
 				if(dialog.open() == IDialogConstants.OK_ID) {
-					IApiProfile profile = wizard.getProfile();
+					IApiBaseline profile = wizard.getProfile();
 					if(profile != null) {
 						backingcollection.add(profile);
 						tableviewer.refresh();
@@ -175,14 +175,14 @@
 		editbutton = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiProfilesPreferencePage_4, null);
 		editbutton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				doEdit((IApiProfile)getCurrentSelection()[0]);
+				doEdit((IApiBaseline)getCurrentSelection()[0]);
 			}
 		});
 		editbutton.setEnabled(false);
 		removebutton = SWTFactory.createPushButton(bcomp, PreferenceMessages.ApiProfilesPreferencePage_3, null);
 		removebutton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				IApiProfile[] states = getCurrentSelection();
+				IApiBaseline[] states = getCurrentSelection();
 				for(int i = 0; i < states.length; i++) {
 					if(isDefault(states[i])) {
 						newdefault = null;
@@ -197,7 +197,7 @@
 			}
 		});
 		removebutton.setEnabled(false);
-		IApiProfile profile = manager.getDefaultApiProfile();
+		IApiBaseline profile = manager.getDefaultApiProfile();
 		origdefault = newdefault = (profile == null ? null : profile.getName());
 		initialize();
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(comp, IApiToolsHelpContextIds.APIPROFILES_PREF_PAGE);
@@ -210,9 +210,9 @@
 	}
 	
 	/**
-	 * Returns if the {@link IApiProfile} with the given name has been removed, but not yet committed back to the manager
-	 * @param name the name of the {@link IApiProfile}
-	 * @return true if the {@link IApiProfile} has been removed from the page, false otherwise
+	 * Returns if the {@link IApiBaseline} with the given name has been removed, but not yet committed back to the manager
+	 * @param name the name of the {@link IApiBaseline}
+	 * @return true if the {@link IApiBaseline} has been removed from the page, false otherwise
 	 */
 	public static boolean isRemovedBaseline(String name) {
 		return removed.contains(name);
@@ -222,11 +222,11 @@
 	 * Performs the edit operation for the edit button and the double click listener for the table
 	 * @param profile
 	 */
-	protected void doEdit(final IApiProfile profile) {
+	protected void doEdit(final IApiBaseline profile) {
 		ApiProfileWizard wizard = new ApiProfileWizard(profile);
 		WizardDialog dialog = new WizardDialog(ApiUIPlugin.getShell(), wizard);
 		if(dialog.open() == IDialogConstants.OK_ID) {
-			IApiProfile newprofile = wizard.getProfile();
+			IApiBaseline newprofile = wizard.getProfile();
 			if(newprofile != null) {
 				//clear any pending edit updates
 				removed.add(profile.getName());
@@ -250,22 +250,22 @@
 	 * updates the buttons on the page
 	 */
 	protected void initialize() {
-		IApiProfile def = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
+		IApiBaseline def = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
 		if(def != null) {
 			tableviewer.setCheckedElements(new Object[] {def});
 		}
 	}
 	
 	/**
-	 * Returns if the specified {@link IApiProfile} is the default profile or not
+	 * Returns if the specified {@link IApiBaseline} is the default profile or not
 	 * @param element
 	 * @return if the profile is the default or not
 	 */
 	protected boolean isDefault(Object element) {
-		if(element instanceof IApiProfile) {
-			IApiProfile profile = (IApiProfile) element;
+		if(element instanceof IApiBaseline) {
+			IApiBaseline profile = (IApiBaseline) element;
 			if(newdefault == null) {
-				IApiProfile def = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
+				IApiBaseline def = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
 				if(def != null) {
 					return profile.getName().equals(def.getName());
 				}
@@ -280,12 +280,12 @@
 	/**
 	 * @return the current selection from the table viewer
 	 */
-	protected IApiProfile[] getCurrentSelection() {
+	protected IApiBaseline[] getCurrentSelection() {
 		IStructuredSelection ss = (IStructuredSelection) tableviewer.getSelection();
 		if(ss.isEmpty()) {
-			return new IApiProfile[0];
+			return new IApiBaseline[0];
 		}
-		return (IApiProfile[]) ((IStructuredSelection) tableviewer.getSelection()).toList().toArray(new IApiProfile[ss.size()]);
+		return (IApiBaseline[]) ((IStructuredSelection) tableviewer.getSelection()).toList().toArray(new IApiBaseline[ss.size()]);
 	}
 	
 	/* (non-Javadoc)
@@ -307,7 +307,7 @@
 	}
 
 	/**
-	 * Applies the changes from the current change set to the {@link ApiProfileManager}. When done
+	 * Applies the changes from the current change set to the {@link ApiBaselineManager}. When done
 	 * the current change set is cleared.
 	 */
 	protected void applyChanges() {
@@ -320,9 +320,9 @@
 		}
 		//add the new / changed ones
 		for(Iterator iter = backingcollection.iterator(); iter.hasNext();) {
-			manager.addApiProfile((IApiProfile) iter.next());
+			manager.addApiProfile((IApiBaseline) iter.next());
 		}
-		IApiProfile def = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
+		IApiBaseline def = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
 		if(def != null && !def.getName().equals(newdefault)) {
 			manager.setDefaultApiProfile(newdefault);
 			needsbuild = true;
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiProfileWizard.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiProfileWizard.java
index 0f50239..c0d28c0 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiProfileWizard.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiProfileWizard.java
@@ -14,7 +14,7 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.ui.internal.ApiUIPlugin;
 
 /**
@@ -23,13 +23,13 @@
  */
 public class ApiProfileWizard extends Wizard {
 
-	private IApiProfile profile = null;
+	private IApiBaseline profile = null;
 	
 	/**
 	 * Constructor
 	 * @param profile
 	 */
-	public ApiProfileWizard(IApiProfile profile) {
+	public ApiProfileWizard(IApiBaseline profile) {
 		this.profile = profile;
 		if(profile == null) {
 			setWindowTitle(WizardMessages.ApiProfileWizard_0);
@@ -44,7 +44,7 @@
 	 * @return the current profile in the wizard. The current profile 
 	 * can be <code>null</code> if the wizard has just been opened to create a new API profile
 	 */
-	public IApiProfile getProfile() {
+	public IApiBaseline getProfile() {
 		return profile;
 	}
 	
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiProfileWizardPage.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiProfileWizardPage.java
index c4ed9a3..ac53b77 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiProfileWizardPage.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/ApiProfileWizardPage.java
@@ -40,12 +40,12 @@
 import org.eclipse.jface.viewers.ViewerComparator;
 import org.eclipse.jface.viewers.ViewerFilter;
 import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.pde.api.tools.internal.ApiProfileManager;
+import org.eclipse.pde.api.tools.internal.ApiBaselineManager;
 import org.eclipse.pde.api.tools.internal.SystemLibraryApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.ui.internal.ApiToolsLabelProvider;
 import org.eclipse.pde.api.tools.ui.internal.ApiUIPlugin;
 import org.eclipse.pde.api.tools.ui.internal.IApiToolsConstants;
@@ -208,18 +208,18 @@
 	}
 	
 	/**
-	 * Operation that creates a new working copy for an {@link IApiProfile} that is being edited
+	 * Operation that creates a new working copy for an {@link IApiBaseline} that is being edited
 	 */
 	class WorkingCopyOperation implements IRunnableWithProgress {
 		
-		IApiProfile original = null, 
+		IApiBaseline original = null, 
 					workingcopy = null;
 		
 		/**
 		 * Constructor
 		 * @param original
 		 */
-		public WorkingCopyOperation(IApiProfile original) {
+		public WorkingCopyOperation(IApiBaseline original) {
 			this.original = original;
 		}
 		
@@ -251,15 +251,15 @@
 		}
 		
 		/**
-		 * Returns the newly created {@link IApiProfile} working copy or <code>null</code>
+		 * Returns the newly created {@link IApiBaseline} working copy or <code>null</code>
 		 * @return the working copy or <code>null</code>
 		 */
-		public IApiProfile getWorkingCopy() {
+		public IApiBaseline getWorkingCopy() {
 			return workingcopy;
 		}
 	}
 	
-	private IApiProfile fProfile = null;
+	private IApiBaseline fProfile = null;
 	private String originalname = null;
 	
 	/**
@@ -274,7 +274,7 @@
 	 * Constructor
 	 * @param profile
 	 */
-	protected ApiProfileWizardPage(IApiProfile profile) {
+	protected ApiProfileWizardPage(IApiBaseline profile) {
 		super(WizardMessages.ApiProfileWizardPage_1);
 		this.fProfile = profile;
 		setTitle(WizardMessages.ApiProfileWizardPage_1);
@@ -485,7 +485,7 @@
 			setErrorMessage(WizardMessages.ApiProfileWizardPage_20);
 			return false;
 		}
-		if(!name.equals(originalname) && (((ApiProfileManager)ApiPlugin.getDefault().getApiProfileManager()).isExistingProfileName(name) &&
+		if(!name.equals(originalname) && (((ApiBaselineManager)ApiPlugin.getDefault().getApiProfileManager()).isExistingProfileName(name) &&
 				!ApiProfilesPreferencePage.isRemovedBaseline(name))) {
 			setErrorMessage(WizardMessages.ApiProfileWizardPage_profile_with_that_name_exists);
 			return false;
@@ -520,10 +520,10 @@
 	
 	/**
 	 * Creates or edits the profile and returns it
-	 * @return a new {@link IApiProfile} or <code>null</code> if an error was encountered
+	 * @return a new {@link IApiBaseline} or <code>null</code> if an error was encountered
 	 * creating the new profile
 	 */
-	public IApiProfile finish() throws IOException, CoreException {
+	public IApiBaseline finish() throws IOException, CoreException {
 		if(fProfile != null) {
 			fProfile.setName(nametext.getText().trim());
 		}	
diff --git a/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
index dafcc0e..fa2de5c 100644
--- a/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
+++ b/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
@@ -21,12 +21,16 @@
  org.eclipse.pde.api.tools.internal.builder;x-friends:="org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.api.tools.internal.comparator;x-internal:=true,
  org.eclipse.pde.api.tools.internal.descriptors;x-friends:="org.eclipse.pde.api.tools.tests,org.eclipse.pde.api.tools.ui",
+ org.eclipse.pde.api.tools.internal.model;x-friends:="org.eclipse.pde.api.tools.ui,org.eclipse.pde.api.tools.tests",
+ org.eclipse.pde.api.tools.internal.model.cache;x-internal:=true,
+ org.eclipse.pde.api.tools.internal.model.infos;x-internal:=true,
  org.eclipse.pde.api.tools.internal.natures;x-internal:=true,
  org.eclipse.pde.api.tools.internal.problems;x-friends:="org.eclipse.pde.api.tools.ui,org.eclipse.pde.api.tools.tests",
  org.eclipse.pde.api.tools.internal.provisional;x-friends:="org.eclipse.pde.api.tools.tests,org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.api.tools.internal.provisional.builder;x-friends:="org.eclipse.pde.api.tools.tests,org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.api.tools.internal.provisional.comparator;x-friends:="org.eclipse.pde.api.tools.tests,org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.api.tools.internal.provisional.descriptors;x-friends:="org.eclipse.pde.api.tools.tests,org.eclipse.pde.api.tools.ui",
+ org.eclipse.pde.api.tools.internal.provisional.model;x-friends:="org.eclipse.pde.api.tools.ui,org.eclipse.pde.api.tools.tests",
  org.eclipse.pde.api.tools.internal.provisional.problems;x-friends:="org.eclipse.pde.api.tools.ui,org.eclipse.pde.api.tools.tests",
  org.eclipse.pde.api.tools.internal.provisional.scanner;x-friends:="org.eclipse.pde.api.tools.tests,org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.api.tools.internal.provisional.search;x-friends:="org.eclipse.pde.api.tools.tests,org.eclipse.pde.api.tools.ui",
@@ -37,7 +41,7 @@
  org.eclipse.pde.api.tools.internal.util;x-friends:="org.eclipse.pde.api.tools.tests,org.eclipse.pde.api.tools.ui",
  org.eclipse.pde.api.tools.internal.util.profiles;x-internal:=true
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
-Import-Package: com.ibm.icu.text
+Import-Package: com.ibm.icu.text;version="3.6.1"
 Bundle-Activator: org.eclipse.pde.api.tools.internal.provisional.ApiPlugin
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
diff --git a/apitools/org.eclipse.pde.api.tools/buildnotes_api_tools.html b/apitools/org.eclipse.pde.api.tools/buildnotes_api_tools.html
index 296dae9..5f25f83 100644
--- a/apitools/org.eclipse.pde.api.tools/buildnotes_api_tools.html
+++ b/apitools/org.eclipse.pde.api.tools/buildnotes_api_tools.html
@@ -12,18 +12,6 @@
 <h2>Summary of API changes</h2>
 <p>None.</p>
 
-<h2>Sept 30, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247607">Bug 247607</a>: Make it easier to find filter removal UI<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=226406">Bug 226406</a>: API Tooling Setup dialog improvements<br>
-
-<h2>Sept 23, 2008</h2>
-<h3>Problem Reports Fixed</h3>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247685">Bug 247685</a>: @nooverride  should not be proposed for a static method<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=243766">Bug 243766</a>: Need to clean up api descriptions when projects are deleted<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247505">Bug 247505</a>: remove export code from AbstractApiComponent<br>
-<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=229815">Bug 229815</a>: removing the last filter should remove the parent<br>
-
 <h2>Sept 18 2008</h2>
 <h3>Problem Reports Fixed</h3>
 <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=247654">Bug 247654</a>: Adding @noextend and removing final modifier is not a pb if the class was a final class<br>
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/AbstractApiComponent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/AbstractApiComponent.java
index 3da1cbd..bd0042d 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/AbstractApiComponent.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/AbstractApiComponent.java
@@ -15,10 +15,10 @@
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.ClassFileContainerVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter;
 
@@ -42,14 +42,14 @@
 	/**
 	 * Owning profile
 	 */
-	private IApiProfile fProfile = null;
+	private IApiBaseline fProfile = null;
 	
 	/**
 	 * Constructs an API component in the given profile.
 	 * 
 	 * @param profile API profile
 	 */
-	public AbstractApiComponent(IApiProfile profile) {
+	public AbstractApiComponent(IApiBaseline profile) {
 		fProfile = profile;
 	}
 	
@@ -66,7 +66,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.model.component.IApiComponent#getProfile()
 	 */
-	public IApiProfile getProfile() {
+	public IApiBaseline getProfile() {
 		return fProfile;
 	}
 
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiProfileManager.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
similarity index 80%
rename from apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiProfileManager.java
rename to apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
index 2f2a39e..2dcc37d 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiProfileManager.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiBaselineManager.java
@@ -16,10 +16,13 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -49,11 +52,12 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.pde.api.tools.internal.builder.ApiAnalysisBuilder;
+import org.eclipse.pde.api.tools.internal.model.ApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IApiProfileManager;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.plugin.PluginRegistry;
@@ -74,7 +78,7 @@
  * @since 1.0.0
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
-public final class ApiProfileManager implements IApiProfileManager, ISaveParticipant, IElementChangedListener, IPluginModelListener, IResourceChangeListener {
+public final class ApiBaselineManager implements IApiProfileManager, ISaveParticipant, IElementChangedListener, IPluginModelListener, IResourceChangeListener {
 	
 	/**
 	 * Constant used for controlling tracing in the API tool builder
@@ -95,7 +99,7 @@
 	private static final String DEFAULT_PROFILE = "default_api_profile"; //$NON-NLS-1$
 	
 	/**
-	 * Constant representing the id of the workspace {@link IApiProfile}.
+	 * Constant representing the id of the workspace {@link IApiBaseline}.
 	 * Value is: <code>workspace</code>
 	 */
 	public static final String WORKSPACE_API_PROFILE_ID = "workspace"; //$NON-NLS-1$
@@ -104,20 +108,20 @@
 	 * The main cache for the manager.
 	 * The form of the cache is: 
 	 * <pre>
-	 * HashMap<String(profileid), ApiProfile>
+	 * HashMap<String(profileid), ApiBaseline>
 	 * </pre>
 	 */
 	private HashMap profilecache = null;
 	
 	/**
-	 * The current default {@link IApiProfile}
+	 * The current default {@link IApiBaseline}
 	 */
 	private String defaultprofile = null;
 	
 	/**
 	 * The current workspace profile
 	 */
-	private IApiProfile workspaceprofile = null;
+	private IApiBaseline workspaceprofile = null;
 	
 	/**
 	 * The default save location for persisting the cache from this manager.
@@ -132,12 +136,12 @@
 	/**
 	 * The singleton instance
 	 */
-	private static ApiProfileManager fInstance = null;
+	private static ApiBaselineManager fInstance = null;
 	
 	/**
 	 * Constructor
 	 */
-	private ApiProfileManager(boolean framework) {
+	private ApiBaselineManager(boolean framework) {
 		if(framework) {
 			ApiPlugin.getDefault().addSaveParticipant(this);
 			JavaCore.addElementChangedListener(this, ElementChangedEvent.POST_CHANGE);
@@ -151,9 +155,9 @@
 	 * Returns the singleton instance of the manager
 	 * @return the singleton instance of the manager
 	 */
-	public static synchronized ApiProfileManager getManager() {
+	public static synchronized ApiBaselineManager getManager() {
 		if(fInstance == null) {
-			fInstance = new ApiProfileManager(ApiPlugin.isRunningInFramework());
+			fInstance = new ApiBaselineManager(ApiPlugin.isRunningInFramework());
 		}
 		return fInstance;
 	}
@@ -161,23 +165,23 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.IApiProfileManager#getApiProfile(java.lang.String)
 	 */
-	public synchronized IApiProfile getApiProfile(String name) {
+	public synchronized IApiBaseline getApiProfile(String name) {
 		initializeStateCache();
-		return (ApiProfile) profilecache.get(name);
+		return (ApiBaseline) profilecache.get(name);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.IApiProfileManager#getApiProfiles()
 	 */
-	public synchronized IApiProfile[] getApiProfiles() {
+	public synchronized IApiBaseline[] getApiProfiles() {
 		initializeStateCache();
-		return (IApiProfile[]) profilecache.values().toArray(new IApiProfile[profilecache.size()]);
+		return (IApiBaseline[]) profilecache.values().toArray(new IApiBaseline[profilecache.size()]);
 	}
 	
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.IApiProfileManager#addApiProfile(org.eclipse.pde.api.tools.model.component.IApiProfile)
 	 */
-	public synchronized void addApiProfile(IApiProfile newprofile) {
+	public synchronized void addApiProfile(IApiBaseline newprofile) {
 		if(newprofile != null) {
 			initializeStateCache();
 			profilecache.put(newprofile.getName(), newprofile);
@@ -191,7 +195,7 @@
 	public synchronized boolean removeApiProfile(String name) {
 		if(name != null) {
 			initializeStateCache();
-			IApiProfile profile = (IApiProfile) profilecache.remove(name);
+			IApiBaseline profile = (IApiBaseline) profilecache.remove(name);
 			if(profile != null) {
 				profile.dispose();
 				boolean success = true;
@@ -230,7 +234,7 @@
 			});
 			if(profiles != null) {
 				InputStream fin = null;
-				IApiProfile newprofile = null;
+				IApiBaseline newprofile = null;
 				for(int i = 0; i < profiles.length; i++) {
 					File profile = profiles[i];
 					if(profile.exists()) {
@@ -249,7 +253,7 @@
 				}
 			}
 			String def = ApiPlugin.getDefault().getPluginPreferences().getString(DEFAULT_PROFILE);
-			IApiProfile profile = (IApiProfile) profilecache.get(def);
+			IApiBaseline profile = (IApiBaseline) profilecache.get(def);
 			defaultprofile = (profile != null ? def : null);
 			if(DEBUG) {
 				System.out.println("Time to initialize state cache: " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -281,17 +285,17 @@
 			String id = null;
 			File file = null;
 			FileOutputStream fout = null;
-			IApiProfile profile = null;
+			IApiBaseline baseline = null;
 			for(Iterator iter = profilecache.keySet().iterator(); iter.hasNext();) {
 				id = (String) iter.next();
-				profile = (IApiProfile) profilecache.get(id);
+				baseline = (IApiBaseline) profilecache.get(id);
 				file = savelocation.append(id+".profile").toFile(); //$NON-NLS-1$
 				if(!file.exists()) {
 					file.createNewFile();
 				}
 				try {
 					fout = new FileOutputStream(file);
-					profile.writeProfileDescription(fout);
+					writeBaselineDescription(baseline, fout);
 					fout.flush();
 				}
 				finally {
@@ -302,6 +306,92 @@
 	}	
 	
 	/**
+	 * Writes the given {@link IApiBaseline} out as XML
+	 * @param baseline
+	 * @param stream
+	 * @throws CoreException
+	 */
+	public void writeBaselineDescription(IApiBaseline baseline, OutputStream stream) throws CoreException {
+		String xml = getBaselineXML(baseline);
+		try {
+			stream.write(xml.getBytes(IApiCoreConstants.UTF_8));
+		} catch (UnsupportedEncodingException e) {
+			abort("Error writing pofile descrition", e); //$NON-NLS-1$
+		} catch (IOException e) {
+			abort("Error writing pofile descrition", e); //$NON-NLS-1$
+		}
+	}
+	
+	/**
+	 * Returns an XML description of the given profile.
+	 * 
+	 * @param profile API profile
+	 * @return XML
+	 * @throws CoreException
+	 */
+	private String getBaselineXML(IApiBaseline baseline) throws CoreException {
+		// pool bundles by location
+		Map pools = new HashMap();
+		List unRooted = new ArrayList();
+		IApiComponent[] components = baseline.getApiComponents();
+		for(int i = 0; i < components.length; i++) {
+			if(!components[i].isSystemComponent()) {
+				String location = components[i].getLocation();
+				File file = new File(location);
+				if (file.exists()) {
+					File dir = file.getParentFile();
+					if (dir != null) {
+						List pool = (List) pools.get(dir);
+						if (pool == null) {
+							pool = new ArrayList();
+							pools.put(dir, pool);
+						}
+						pool.add(components[i]);
+					} else {
+						unRooted.add(components[i]);
+					}
+				}
+				
+			}
+		}
+		Document document = Util.newDocument();
+		Element root = document.createElement(IApiXmlConstants.ELEMENT_APIPROFILE);
+		document.appendChild(root);
+		root.setAttribute(IApiXmlConstants.ATTR_NAME, baseline.getName());
+		root.setAttribute(IApiXmlConstants.ATTR_VERSION, IApiXmlConstants.API_PROFILE_CURRENT_VERSION);
+		// dump component pools
+		Element subroot = null;
+		File dir = null;
+		List comps = null;
+		IApiComponent comp = null;
+		Element celement = null;
+		for(Iterator iter = pools.keySet().iterator(); iter.hasNext();) {
+			dir = (File) iter.next();
+			subroot = document.createElement(IApiXmlConstants.ELEMENT_POOL);
+			root.appendChild(subroot);
+			subroot.setAttribute(IApiXmlConstants.ATTR_LOCATION, new Path(dir.getAbsolutePath()).toPortableString());
+			comps = (List) pools.get(dir);
+			for(Iterator iter2 = comps.iterator(); iter2.hasNext();) {
+				comp = (IApiComponent) iter2.next();
+				celement = document.createElement(IApiXmlConstants.ELEMENT_APICOMPONENT);
+				celement.setAttribute(IApiXmlConstants.ATTR_ID, comp.getId());
+				celement.setAttribute(IApiXmlConstants.ATTR_VERSION, comp.getVersion());
+				subroot.appendChild(celement);
+			}
+		}
+		// dump un-pooled components
+		for(Iterator iter = unRooted.iterator(); iter.hasNext();) {
+			comp = (IApiComponent) iter.next();
+			celement = document.createElement(IApiXmlConstants.ELEMENT_APICOMPONENT);
+			celement.setAttribute(IApiXmlConstants.ATTR_ID, comp.getId());
+			celement.setAttribute(IApiXmlConstants.ATTR_VERSION, comp.getVersion());
+			celement.setAttribute(IApiXmlConstants.ATTR_LOCATION, new Path(comp.getLocation()).toPortableString());
+			root.appendChild(celement);
+		}
+		return Util.serializeDocument(document);
+	}
+	
+	/**
 	 * Throws a core exception with the given message and underlying exception,
 	 * if any.
 	 * 
@@ -320,7 +410,7 @@
 	 * @return API profile
 	 * @throws CoreException if unable to restore the profile
 	 */
-	public static IApiProfile restoreProfile(InputStream stream) throws CoreException {
+	public static IApiBaseline restoreProfile(InputStream stream) throws CoreException {
 		long start = System.currentTimeMillis();
 		DocumentBuilder parser = null;
 		try {
@@ -331,12 +421,12 @@
 		} catch (FactoryConfigurationError e) {
 			abort("Error restoring API profile", e); //$NON-NLS-1$
 		}
-		IApiProfile profile = null;
+		IApiBaseline profile = null;
 		try {
 			Document document = parser.parse(stream);
 			Element root = document.getDocumentElement();
 			if(root.getNodeName().equals(IApiXmlConstants.ELEMENT_APIPROFILE)) {
-				profile = new ApiProfile(root.getAttribute(IApiXmlConstants.ATTR_NAME));
+				profile = new ApiBaseline(root.getAttribute(IApiXmlConstants.ATTR_NAME));
 				// un-pooled components
 				NodeList children = root.getElementsByTagName(IApiXmlConstants.ELEMENT_APICOMPONENT);
 				List components = new ArrayList();
@@ -434,7 +524,7 @@
 			if(profilecache != null) {
 				// we should first dispose all existing profiles
 				for (Iterator iterator = this.profilecache.values().iterator(); iterator.hasNext();) {
-					IApiProfile profile = (IApiProfile) iterator.next();
+					IApiBaseline profile = (IApiBaseline) iterator.next();
 					profile.dispose();
 				}
 				this.profilecache.clear();
@@ -471,9 +561,9 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.IApiProfileManager#getDefaultApiProfile()
 	 */
-	public synchronized IApiProfile getDefaultApiProfile() {
+	public synchronized IApiBaseline getDefaultApiProfile() {
 		initializeStateCache();
-		return (IApiProfile) profilecache.get(defaultprofile);
+		return (IApiBaseline) profilecache.get(defaultprofile);
 	}
 
 	/* (non-Javadoc)
@@ -487,7 +577,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.internal.provisional.IApiProfileManager#getWorkspaceProfile()
 	 */
-	public synchronized IApiProfile getWorkspaceProfile() {
+	public synchronized IApiBaseline getWorkspaceProfile() {
 		if(ApiPlugin.isRunningInFramework()) {
 			if(this.workspaceprofile == null) {
 				this.workspaceprofile = createWorkspaceProfile();
@@ -509,14 +599,14 @@
 	}
 
 	/**
-	 * Creates a workspace {@link IApiProfile}
-	 * @return a new workspace {@link IApiProfile} or <code>null</code>
+	 * Creates a workspace {@link IApiBaseline}
+	 * @return a new workspace {@link IApiBaseline} or <code>null</code>
 	 */
-	private IApiProfile createWorkspaceProfile() {
+	private IApiBaseline createWorkspaceProfile() {
 		long time = System.currentTimeMillis();
-		IApiProfile profile = null; 
+		IApiBaseline profile = null; 
 		try {
-			profile = Factory.newApiProfile(ApiProfileManager.WORKSPACE_API_PROFILE_ID);
+			profile = Factory.newApiProfile(ApiBaselineManager.WORKSPACE_API_PROFILE_ID);
 			// populate it with only projects that are API aware
 			IPluginModelBase[] models = PluginRegistry.getActiveModels();
 			List componentsList = new ArrayList(models.length);
@@ -645,7 +735,7 @@
 		if(DEBUG) {
 			System.out.println("processed package fragment REMOVE delta: ["+fragment.getElementName()+"]"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
-		((ApiProfile)getWorkspaceProfile()).clearPackage(fragment.getElementName());
+		((ApiBaseline)getWorkspaceProfile()).clearPackage(fragment.getElementName());
 	}
 	
 	/**
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionManager.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionManager.java
index df75006..0441d14 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionManager.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionManager.java
@@ -37,13 +37,12 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.osgi.service.resolver.BundleDescription;
-import org.eclipse.pde.api.tools.internal.ApiDescription.ManifestNode;
 import org.eclipse.pde.api.tools.internal.ProjectApiDescription.TypeNode;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.scanner.ScannerMessages;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.w3c.dom.Element;
@@ -151,10 +150,7 @@
 				.append(IApiCoreConstants.API_DESCRIPTION_XML_NAME).toFile();
 			if (file.exists()) {
 				file.delete();
-			}
-			file = API_DESCRIPTIONS_CONTAINER_PATH.append(project.getElementName()).toFile();
-			if(file.exists() && file.isDirectory()) {
-				file.delete();
+				file.getParentFile().delete();
 			}
 		}
 	}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiModelManager.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiModelManager.java
new file mode 100644
index 0000000..d0b6d43
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiModelManager.java
@@ -0,0 +1,183 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal;
+
+import java.io.File;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.pde.api.tools.internal.model.ApiBaseline;
+import org.eclipse.pde.api.tools.internal.model.ApiComponent;
+import org.eclipse.pde.api.tools.internal.model.ApiResource;
+import org.eclipse.pde.api.tools.internal.model.cache.ApiToolsCache;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiResource;
+
+/**
+ * Manager to help with model elements / infos caching
+ * 
+ * @since 1.0.0
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public final class ApiModelManager {
+
+	/**
+	 * The singleton instance of this manager
+	 */
+	private static ApiModelManager fInstance = null;
+	
+	/**
+	 * The cache of {@link ApiElementInfo}s for the workspace
+	 */
+	private ApiToolsCache fCache = new ApiToolsCache();
+	
+	/**
+	 * Constructor, made private for no instantiation
+	 */
+	private ApiModelManager() {}
+	
+	/**
+	 * Returns the available instance of this manager
+	 * @return the manager instance
+	 */
+	public static synchronized ApiModelManager getManager() {
+		if(fInstance == null) {
+			fInstance = new ApiModelManager();
+		}
+		return fInstance;
+	}
+	
+	/**
+	 * Returns the cached {@link ApiElementInfo} for the given {@link IApiElement}
+	 * or <code>null</code> if there is no entry in the cache.
+	 * This method does not create new element infos.
+	 * @param element
+	 * @return the {@link ApiElementInfo} for the given {@link IApiElement} or <code>null</code>
+	 */
+	public synchronized ApiElementInfo getInfo(IApiElement element) {
+		return fCache.getInfo(element);
+	}
+	
+	/**
+	 * Adds the given {@link ApiElementInfo} to the cache for the given {@link IApiElement}
+	 * @param element
+	 * @param info
+	 */
+	public synchronized void addInfo(IApiElement element, ApiElementInfo info) {
+		fCache.putInfo(element, info);
+	}
+	
+	/**
+	 * Removes the cached {@link ApiElementInfo} for the given {@link IApiElement} and returns
+	 * the removed info, or <code>null</code> if there was no entry in the cache for the given element.
+	 * @param element
+	 * @return the removed {@link ApiElementInfo} or <code>null</code> if nothing was removed
+	 */
+	public synchronized ApiElementInfo removeInfo(IApiElement element) {
+		return fCache.removeInfo(element);
+	}
+	
+	/**
+	 * Creates and returns a new {@link IApiComponent} handle or <code>null</code>
+	 * if the given project is <code>null</code>.
+	 * The returned handle is not guaranteed to exist. 
+	 * @param baseline
+	 * @param project
+	 * @return a new {@link IApiComponent} handle or <code>null</code>
+	 */
+	public IApiComponent create(IApiBaseline baseline, IProject project) {
+		if(project == null) {
+			return null;
+		}
+		return new ApiComponent(baseline, project.getName());
+	}
+	
+	/**
+	 * Creates and returns a new {@link IApiComponent} handle or <code>null</code>
+	 * if the given project is <code>null</code>.
+	 * The returned handle is not guaranteed to exist. 
+	 * @param baseline
+	 * @param name
+	 * @return a new {@link IApiComponent} handle or <code>null</code>
+	 */
+	public IApiComponent create(IApiBaseline baseline, String name) {
+		if(name == null) {
+			return null;
+		}
+		return new ApiComponent(baseline, name);
+	}
+	
+	/**
+	 * Creates and returns a new {@link IApiComponent} handle or <code>null</code>
+	 * if the given project is <code>null</code>.
+	 * The returned handle is not guaranteed to exist. 
+	 * @param project
+	 * @return a new {@link IApiComponent} handle or <code>null</code>
+	 */
+	public IApiComponent create(IProject project) {
+		return create((IApiBaseline)null, project);
+	}
+	
+	/**
+	 * Creates and returns a new {@link IApiComponent} handle or <code>null</code>
+	 * if the given project is <code>null</code>.
+	 * The returned handle is not guaranteed to exist. 
+	 * @param name
+	 * @return a new {@link IApiComponent} handle or <code>null</code>
+	 */
+	public IApiComponent create(String name) {
+		return create(null, name);
+	}
+	
+	/**
+	 * Creates and returns a new {@link IApiResource} handle or <code>null</code> 
+	 * if the given resource is <code>null</code>.
+	 * The returned handle is not guaranteed to exist.
+	 * @param resource
+	 * @param project
+	 * @return a new {@link IApiResource} handle or <code>null</code>
+	 */
+	public IApiResource create(IResource resource, IProject project) {
+		if(resource == null) {
+			return null;
+		}
+		return new ApiResource(create(project), resource);
+	}
+	
+	/**
+	 * Creates and returns a new {@link IApiResource} handle with
+	 * an undetermined parent project or <code>null</code> if the
+	 * given resource is <code>null</code>
+	 * @param resource
+	 * @return a new {@link IApiResource} handle or <code>null</code>
+	 */
+	public IApiResource create(IResource resource) {
+		return create(resource, null);
+	}
+	
+	/**
+	 * Creates and returns a new {@link IApiBaseline} handle
+	 * or <code>null</code> if the given name is <code>null</code>
+	 * @param name
+	 * @param eefile the optional execution environment description file to initialize
+	 * resulting infos from.
+	 * @return a new {@link IApiBaseline} handle or <code>null</code>
+	 */
+	public IApiBaseline create(String name, File eefile) {
+		if(name == null) {
+			return null;
+		}
+		return new ApiBaseline(name, eefile);
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiProfile.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiProfile.java
deleted file mode 100644
index 82b3b87..0000000
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiProfile.java
+++ /dev/null
@@ -1,1106 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.pde.api.tools.internal;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Dictionary;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.Map.Entry;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.launching.EEVMType;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.IVMInstall2;
-import org.eclipse.jdt.launching.IVMInstallChangedListener;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jdt.launching.PropertyChangeEvent;
-import org.eclipse.jdt.launching.VMStandin;
-import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
-import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager;
-import org.eclipse.osgi.service.resolver.BundleDescription;
-import org.eclipse.osgi.service.resolver.ExportPackageDescription;
-import org.eclipse.osgi.service.resolver.ResolverError;
-import org.eclipse.osgi.service.resolver.State;
-import org.eclipse.osgi.service.resolver.StateHelper;
-import org.eclipse.osgi.service.resolver.StateObjectFactory;
-import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
-import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
-import org.eclipse.pde.api.tools.internal.util.Util;
-import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Constants;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import com.ibm.icu.text.MessageFormat;
-
-/**
- * Implementation of an API profile.
- * 
- * @since 1.0
- */
-public class ApiProfile implements IApiProfile, IVMInstallChangedListener {
-	/**
-	 * Constant used for controlling tracing in the example class
-	 */
-	private static boolean DEBUG = Util.DEBUG;
-	
-	/**
-	 * Method used for initializing tracing in the example class
-	 */
-	public static void setDebug(boolean debugValue) {
-		DEBUG = debugValue || Util.DEBUG;
-	}
-
-	public static IWorkspaceRoot ROOT;
-	public static IPath ROOT_LOCATION_PATH;
-
-	static {
-		try {
-			ROOT = ResourcesPlugin.getWorkspace().getRoot();
-			ROOT_LOCATION_PATH = ROOT.getLocation();
-		} catch(IllegalStateException e) {
-			// ignore
-		}
-	}
-	private IApiComponent[] EMPTY_COMPONENTS = new IApiComponent[0];
-	
-	/**
-	 * profile name
-	 */
-	private String fName;
-	
-	/**
-	 * OSGi bundle state
-	 */
-	private State fState;
-	
-	/**
-	 * Next available bundle id
-	 */
-	private long fNextId = 0L; 
-	
-	/**
-	 * Execution environment identifier
-	 */
-	private String fExecutionEnvironment;
-	
-	/**
-	 * Component representing the system library
-	 */
-	private IApiComponent fSystemLibraryComponent;
-	
-	/**
-	 * Whether an execution environment should be automatically resolved 
-	 * as API components are added.
-	 */
-	private boolean fAutoResolve = false;
-	
-	/**
-	 * Execution environment status
-	 */
-	private IStatus fEEStatus = null;
-
-	/**
-	 * Constant to match any value for ws, os, arch.
-	 */
-	private AnyValue ANY_VALUE = new AnyValue("*"); //$NON-NLS-1$
-	
-	/**
-	 * Cache of resolved packages. 
-	 * <p>Map of <code>PackageName -> Map(componentName -> IApiComponent[])</code></p>
-	 * For each package the cache contains a map of API components that provide that package,
-	 * by source component name (including the <code>null</code> component name).
-	 */
-	private HashMap fComponentsCache = null;
-	
-	/**
-	 * Maps bundle descriptions to components.
-	 * <p>Map of <code>BundleDescription.getSymbolicName() + BundleDescription.getVersion().toString() -> {@link IApiComponent}</code></p>
-	 */
-	private Map fComponents = null;
-	
-	/**
-	 * Maps component id's to components.
-	 * <p>Map of <code>componentId -> {@link IApiComponent}</code></p>
-	 */
-	private Map fComponentsById = null;
-	
-	/**
-	 * Cache of system package names
-	 */
-	private Set fSystemPackageNames = null;
-	
-	/**
-	 * The VM install this profile is bound to for system libraries or <code>null</code>.
-	 * Only used in the IDE when OSGi is running.
-	 */
-	private IVMInstall fVMBinding = null;
-
-	/**
-	 * Constructs a new API profile with the given name.
-	 * 
-	 * @param name profile name
-	 */
-	public ApiProfile(String name) {
-		fName = name;
-		fAutoResolve = true;
-		fEEStatus = new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, CoreMessages.ApiProfile_0);
-		fState = StateObjectFactory.defaultFactory.createState(true);
-	}	
-		
-	/**
-	 * Constructs a new API profile with the given attributes.
-	 * 
-	 * @param name profile name
-	 * @param eeDescriptoin execution environment description file
-	 * @throws CoreException if unable to create a profile with the given attributes
-	 */
-	public ApiProfile(String name, File eeDescription) throws CoreException {
-		this(name);
-		fAutoResolve = false;
-		EEVMType.clearProperties(eeDescription);
-		String profile = EEVMType.getProperty(EEVMType.PROP_CLASS_LIB_LEVEL, eeDescription);
-		initialize(profile, eeDescription);
-		fEEStatus = new Status(IStatus.OK, ApiPlugin.PLUGIN_ID,
-				MessageFormat.format(CoreMessages.ApiProfile_1, new String[]{profile}));
-	}
-	
-	/**
-	 * Initializes this profile to resolve in the execution environment
-	 * associated with the given symbolic name.
-	 * 
-	 * @param environmentId execution environment symbolic name
-	 * @param eeFile execution environment description file
-	 * @throws CoreException if unable to initialize based on the given id
-	 */
-	private void initialize(String environmentId, File eeFile) throws CoreException {
-		Properties properties = null;
-		if (ApiPlugin.isRunningInFramework()) {
-			properties = getJavaProfileProperties(environmentId);
-		} else {
-			properties = Util.getEEProfile(eeFile);
-		}
-		if (properties == null) {
-			abort("Unknown execution environment: " + environmentId, null); //$NON-NLS-1$
-		} else {
-			initialize(properties, eeFile);
-		}
-	}
-	
-	/**
-	 * Throws a core exception with the given message and underlying exception,
-	 * if any.
-	 * 
-	 * @param message error message
-	 * @param e underlying exception or <code>null</code>
-	 * @throws CoreException
-	 */
-	private static void abort(String message, Throwable e) throws CoreException {
-		throw new CoreException(new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, message, e));
-	}	
-	
-	/**
-	 * Returns the property file for the given environment or <code>null</code>.
-	 * 
-	 * @param ee execution environment symbolic name
-	 * @return properties file or <code>null</code> if none
-	 */
-	public static Properties getJavaProfileProperties(String ee) throws CoreException {
-		Bundle osgiBundle = Platform.getBundle("org.eclipse.osgi"); //$NON-NLS-1$
-		if (osgiBundle == null) 
-			return null;
-		URL profileURL = osgiBundle.getEntry(ee.replace('/', '_') + ".profile"); //$NON-NLS-1$
-		if (profileURL != null) {
-			InputStream is = null;
-			try {
-				profileURL = FileLocator.resolve(profileURL);
-				URLConnection openConnection = profileURL.openConnection();
-				openConnection.setUseCaches(false);
-				is = openConnection.getInputStream();
-				if (is != null) {
-					Properties profile = new Properties();
-					profile.load(is);
-					return profile;
-				}
-			} catch (IOException e) {
-				abort("Unable to read profile: " + ee, e); //$NON-NLS-1$
-			} finally {
-				try {
-					if (is != null) {
-						is.close();
-					}
-				} catch (IOException e) {
-					ApiPlugin.log(e);
-				}
-			}
-		}
-		return null;
-	}		
-	
-	/**
-	 * Initializes this profile from the given properties.
-	 * 
-	 * @param profile OGSi profile properties
-	 * @param description execution environment description file
-	 * @throws CoreException if unable to initialize
-	 */
-	private void initialize(Properties profile, File description) throws CoreException {
-		String value = profile.getProperty(Constants.FRAMEWORK_SYSTEMPACKAGES);
-		Dictionary dictionary = new Hashtable();
-		String[] systemPackages = null;
-		if (value != null) {
-			systemPackages = value.split(","); //$NON-NLS-1$
-			dictionary.put(Constants.FRAMEWORK_SYSTEMPACKAGES, value);
-		}
-		value = profile.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT);
-		if (value != null) {
-			dictionary.put(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, value);
-		}
-		fExecutionEnvironment = profile.getProperty("osgi.java.profile.name"); //$NON-NLS-1$
-		if (fExecutionEnvironment == null) {
-			abort("Profile file missing 'osgi.java.profile.name'" , null); //$NON-NLS-1$
-		}
-		dictionary.put("osgi.os", ANY_VALUE); //$NON-NLS-1$
-		dictionary.put("osgi.arch", ANY_VALUE); //$NON-NLS-1$
-		dictionary.put("osgi.ws", ANY_VALUE); //$NON-NLS-1$
-		dictionary.put("osgi.nl", ANY_VALUE); //$NON-NLS-1$
-		fState.setPlatformProperties(dictionary);
-		// clean up previous system library
-		if (fSystemLibraryComponent != null && fComponentsById != null) {
-			fComponentsById.remove(fSystemLibraryComponent.getId());
-		}
-		if(fSystemPackageNames != null) {
-			fSystemPackageNames.clear();
-			fSystemPackageNames = null;
-		}
-		clearComponentsCache();
-		// set new system library
-		fSystemLibraryComponent = new SystemLibraryApiComponent(this, description, systemPackages);
-		addComponent(fSystemLibraryComponent);
-	}
-
-	/**
-	 * Clears the package -> components cache and sets it to <code>null</code>
-	 */
-	private void clearComponentsCache() {
-		if(fComponentsCache != null) {
-			fComponentsCache.clear();
-			fComponentsCache = null;
-		}
-	}
-	
-	/**
-	 * Adds an {@link IApiComponent} to the fComponentsById mapping
-	 * @param component
-	 */
-	private void addComponent(IApiComponent component) {
-		if(component == null) {
-			return;
-		}
-		if(fComponentsById == null) {
-			fComponentsById = new HashMap();
-		}
-		fComponentsById.put(component.getId(), component);
-	}
-	
-	/* (non-Javadoc)
-	 * @see IApiProfile#addApiComponents(org.eclipse.pde.api.tools.model.component.IApiComponent[], boolean)
-	 */
-	public void addApiComponents(IApiComponent[] components) {
-		HashSet ees = new HashSet();
-		for (int i = 0; i < components.length; i++) {
-			BundleApiComponent component = (BundleApiComponent) components[i];
-			if (component.isSourceComponent()) {
-				continue;
-			}
-			BundleDescription description = component.getBundleDescription();
-			fState.addBundle(description);
-			storeBundleDescription(description, component);
-			addComponent(component);
-			ees.addAll(Arrays.asList(component.getExecutionEnvironments()));
-		}
-		resolveSystemLibrary(ees);
-		fState.resolve();
-		if (DEBUG) {
-			ResolverError[] errors = getErrors();
-			int length = errors.length;
-			if (length != 0) {
-				System.out.println("Errors found during state resolution"); //$NON-NLS-1$
-				for (int i = 0; i < length; i++) {
-					ResolverError resolverError = errors[i];
-					System.err.println(resolverError);
-				}
-				System.out.println("All components added to the state"); //$NON-NLS-1$
-				BundleDescription[] bundles = fState.getBundles();
-				Arrays.sort(bundles, new Comparator() {
-					public int compare(Object o1, Object o2) {
-						BundleDescription bundleDescription1 = (BundleDescription) o1;
-						BundleDescription bundleDescription2 = (BundleDescription) o2;
-						return bundleDescription1.getSymbolicName().compareTo(bundleDescription2.getSymbolicName());
-					}
-				});
-				for (int i = 0, max = bundles.length; i < max; i++) {
-					BundleDescription bundleDescription = bundles[i];
-					System.out.println("bundle descriptions added to the state[" + i + "] : " + bundleDescription.getSymbolicName()); //$NON-NLS-1$ //$NON-NLS-2$
-				}
-				System.out.println("All available components"); //$NON-NLS-1$
-				Arrays.sort(components, new Comparator() {
-					public int compare(Object o1, Object o2) {
-						IApiComponent component1 = (IApiComponent) o1;
-						IApiComponent component2 = (IApiComponent) o2;
-						return component1.getId().compareTo(component2.getId());
-					}
-				});
-				for (int i = 0, max = components.length; i < max; i++) {
-					IApiComponent component = components[i];
-					if (component instanceof PluginProjectApiComponent) {
-						System.out.println("workspace component[" + i + "] : " + component); //$NON-NLS-1$ //$NON-NLS-2$
-					} else {
-						System.out.println("Binary component   [" + i + "] : " + component); //$NON-NLS-1$ //$NON-NLS-2$
-					}
-				}
-			} else {
-				System.out.println("No errors found during state resolution"); //$NON-NLS-1$
-			}
-		}
-	}
-
-	/**
-	 * Resolves and initializes the system library to use based on API component requirements.
-	 * Only works when running in the framework. Has no effect if not running in the framework.
-	 */
-	private void resolveSystemLibrary(HashSet ees) {
-		if (ApiPlugin.isRunningInFramework() && fAutoResolve) {
-			IStatus error = null;
-			IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
-			Iterator iterator = ees.iterator();
-			Map VMsToEEs = new HashMap();
-			while (iterator.hasNext()) {
-				String ee = (String) iterator.next();
-				IExecutionEnvironment environment = manager.getEnvironment(ee);
-				if (environment != null) {
-					IVMInstall[] compatibleVMs = environment.getCompatibleVMs();
-					for (int i = 0; i < compatibleVMs.length; i++) {
-						IVMInstall vm = compatibleVMs[i];
-						Set EEs = (Set) VMsToEEs.get(vm);
-						if (EEs == null) {
-							EEs = new HashSet();
-							VMsToEEs.put(vm, EEs);
-						}
-						EEs.add(ee);
-					}
-				}
-			}
-			// select VM that is compatible with most required environments
-			iterator = VMsToEEs.entrySet().iterator();
-			IVMInstall bestFit = null;
-			int bestCount = 0;
-			while (iterator.hasNext()) {
-				Entry entry = (Entry) iterator.next();
-				Set EEs = (Set)entry.getValue();
-				if (EEs.size() > bestCount) {
-					bestCount = EEs.size();
-					bestFit = (IVMInstall)entry.getKey();
-				}
-			}
-			String systemEE = null;
-			if (bestFit != null) {
-				// find the EE this VM is strictly compatible with
-				IExecutionEnvironment[] environments = manager.getExecutionEnvironments();
-				for (int i = 0; i < environments.length; i++) {
-					IExecutionEnvironment environment = environments[i];
-					if (environment.isStrictlyCompatible(bestFit)) {
-						systemEE = environment.getId();
-						break;
-					}
-				}
-				if (systemEE == null) {
-					// a best fit, but not strictly compatible with any environment (e.g.
-					// a 1.7 VM for which there is no profile yet). This is a bit of a hack
-					// until an OSGi profile exists for 1.7.
-					if (bestFit instanceof IVMInstall2) {
-			            String javaVersion = ((IVMInstall2)bestFit).getJavaVersion();
-			            if (javaVersion != null) {
-			            	if (javaVersion.startsWith(JavaCore.VERSION_1_7)) {
-			            		// set EE to 1.6 when 1.7 is detected
-			            		systemEE = "JavaSE-1.6"; //$NON-NLS-1$
-			            	}
-			            }
-					}
-				}
-				if (systemEE != null) {
-					// only update if different from current or missing VM binding
-					if (!systemEE.equals(getExecutionEnvironment()) || fVMBinding == null) {
-						try {
-							File file = Util.createEEFile(bestFit, systemEE);
-							JavaRuntime.addVMInstallChangedListener(this);
-							fVMBinding = bestFit;
-							initialize(systemEE, file);
-						} catch (CoreException e) {
-							error = new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, CoreMessages.ApiProfile_2, e);
-						} catch (IOException e) {
-							error = new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, CoreMessages.ApiProfile_2, e);
-						}
-					}
-				} else {
-					// VM is not strictly compatible with any EE
-					error = new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, CoreMessages.ApiProfile_4);
-				}
-			} else {
-				// no VMs match any required EE
-				error = new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, CoreMessages.ApiProfile_4);
-			}
-			if (error == null) {
-				// build status for unbound required EE's
-				Set missing = new HashSet(ees);
-				Set covered = new HashSet((Set)VMsToEEs.get(bestFit));
-				missing.removeAll(covered);
-				if (missing.isEmpty()) {
-					fEEStatus = new Status(IStatus.OK, ApiPlugin.PLUGIN_ID,
-							MessageFormat.format(CoreMessages.ApiProfile_1, new String[]{systemEE}));
-				} else {
-					iterator = missing.iterator();
-					MultiStatus multi = new MultiStatus(ApiPlugin.PLUGIN_ID, 0, CoreMessages.ApiProfile_7, null);
-					while (iterator.hasNext()) {
-						String id = (String) iterator.next();
-						multi.add(new Status(IStatus.WARNING, ApiPlugin.PLUGIN_ID,
-								MessageFormat.format(CoreMessages.ApiProfile_8, new String[]{id})));
-					}
-					fEEStatus = multi;
-				}
-			} else {
-				fEEStatus = error;
-			}
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see IApiProfile#getApiComponents()
-	 */
-	public IApiComponent[] getApiComponents() {
-		if(fComponentsById == null) {
-			return EMPTY_COMPONENTS;
-		}
-		Collection values = fComponentsById.values();
-		return (IApiComponent[]) values.toArray(new IApiComponent[values.size()]);
-	}
-	
-	/* (non-Javadoc)
-	 * @see IApiProfile#getName()
-	 */
-	public String getName() {
-		return fName;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.api.tools.internal.provisional.IApiProfile#resolvePackage(org.eclipse.pde.api.tools.internal.provisional.IApiComponent, java.lang.String)
-	 */
-	public synchronized IApiComponent[] resolvePackage(IApiComponent sourceComponent, String packageName) throws CoreException {
-		HashMap componentsForPackage = null;
-		if(fComponentsCache != null){
-			componentsForPackage = (HashMap) fComponentsCache.get(packageName);
-		}
-		else {
-			fComponentsCache = new HashMap(8);
-		}
-		IApiComponent[] cachedComponents = null;
-		if (componentsForPackage != null) {
-			cachedComponents = (IApiComponent[]) componentsForPackage.get(sourceComponent);
-			if (cachedComponents != null) {
-				return cachedComponents;
-			}
-		} else {
-			componentsForPackage = new HashMap(8);
-			fComponentsCache.put(packageName, componentsForPackage);
-		}
-		// check system packages first
-		if (isSystemPackage(packageName)) {
-			if (fSystemLibraryComponent != null) {
-				cachedComponents = new IApiComponent[] { fSystemLibraryComponent };
-			} else {
-				return EMPTY_COMPONENTS;
-			}
-		} else {
-			if (sourceComponent != null) {
-				List componentsList = new ArrayList();
-				resolvePackage0(sourceComponent, packageName, componentsList);
-				if (componentsList.size() != 0) {
-					cachedComponents = new IApiComponent[componentsList.size()];
-					componentsList.toArray(cachedComponents);
-				}
-			}
-		}
-		if (cachedComponents == null) {
-			cachedComponents = EMPTY_COMPONENTS;
-		}
-		componentsForPackage.put(sourceComponent, cachedComponents);
-		return cachedComponents;
-	}
-
-	/**
-	 * Resolves the listing of {@link IApiComponent}s that export the given package name. The collection 
-	 * of {@link IApiComponent}s is written into the specified list <code>componentList</code> 
-	 * @param component
-	 * @param packageName
-	 * @param componentsList
-	 * @throws CoreException
-	 */
-	private void resolvePackage0(IApiComponent component, String packageName, List componentsList) throws CoreException {
-		if (component instanceof BundleApiComponent) {
-			BundleDescription bundle = ((BundleApiComponent)component).getBundleDescription();
-			if (bundle != null) {
-				StateHelper helper = fState.getStateHelper();
-				ExportPackageDescription[] visiblePackages = helper.getVisiblePackages(bundle);
-				for (int i = 0; i < visiblePackages.length; i++) {
-					ExportPackageDescription pkg = visiblePackages[i];
-					if (packageName.equals(pkg.getName())) {
-						BundleDescription bundleDescription = pkg.getExporter();
-						IApiComponent exporter = getBundleDescription(bundleDescription);
-						if (exporter != null) {
-							componentsList.add(exporter);
-						}
-					}
-				}
-				// check for package within the source component
-				String[] packageNames = component.getPackageNames();
-				// TODO: would be more efficient to have containsPackage(...) or something
-				for (int i = 0; i < packageNames.length; i++) {
-					if (packageName.equals(packageNames[i])) {
-						componentsList.add(component);
-					}
-				}
-			}
-		}
-	}
-	/**
-	 * Returns whether the specified package is supplied by the system
-	 * library.
-	 * 
-	 * @param packageName package name
-	 * @return whether the specified package is supplied by the system
-	 * 	library 
-	 */
-	private boolean isSystemPackage(String packageName) {
-		if (packageName.startsWith("java.")) { //$NON-NLS-1$
-			return true;
-		}
-		if (fSystemPackageNames == null) {
-			ExportPackageDescription[] systemPackages = fState.getSystemPackages();
-			fSystemPackageNames = new HashSet(systemPackages.length);
-			for (int i = 0; i < systemPackages.length; i++) {
-				fSystemPackageNames.add(systemPackages[i].getName());
-			}
-		}
-		return fSystemPackageNames.contains(packageName);
-	}
-
-	
-	/* (non-Javadoc)
-	 * @see IApiProfile#newApiComponent(java.lang.String)
-	 */
-	public IApiComponent newApiComponent(String location) throws CoreException {
-		BundleApiComponent component = new BundleApiComponent(this, location);
-		if(component.isValidBundle()) {
-			component.init(fState, nextId());
-			return component;
-		}
-		return null;
-	}
-
-	
-	/* (non-Javadoc)
-	 * @see IApiProfile#newApiComponent(IPluginModelBase)
-	 */
-	public IApiComponent newApiComponent(IPluginModelBase model) throws CoreException {
-		BundleDescription bundleDescription = model.getBundleDescription();
-		if (bundleDescription == null) {
-			return null;
-		}
-		String location = bundleDescription.getLocation();
-		if (location == null) {
-			return null;
-		}
-		IPath pathForLocation = new Path(location);
-		BundleApiComponent component = null;
-		if (ROOT_LOCATION_PATH != null && ROOT_LOCATION_PATH.isPrefixOf(pathForLocation)) {
-			if(isValidProject(location)) {
-				component = new PluginProjectApiComponent(this, location, model);
-			}
-		} else {
-			component = new BundleApiComponent(this, location);
-		}
-		if(component != null && component.isValidBundle()) {
-			component.init(fState, nextId());
-			return component;
-		}
-		return null;
-	}
-
-	/**
-	 * Returns if the specified location is a valid API project or not.
-	 * <p>
-	 * We accept projects that are plug-ins even if not API enabled (i.e.
-	 * with API nature), as we still need them to make a complete
-	 * API profile without resolution errors.
-	 * </p> 
-	 * @param location
-	 * @return true if the location is valid, false otherwise
-	 * @throws CoreException
-	 */
-	private boolean isValidProject(String location) throws CoreException {
-		IPath path = new Path(location);
-		IProject project = ApiProfile.ROOT.getProject(path.lastSegment());
-		return project != null && project.exists();
-	}
-	
-	/**
-	 * Returns the next available bundle identifier.
-	 * 
-	 * @return next available bundle identifier
-	 */
-	private long nextId() {
-		return ++fNextId;
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.api.tools.internal.provisional.IApiProfile#getApiComponent(java.lang.String)
-	 */
-	public IApiComponent getApiComponent(String id) {
-		if(fComponentsById == null) {
-			return null;
-		}
-		return (IApiComponent) fComponentsById.get(id);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.api.tools.model.component.IApiState#getExecutionEnvironment()
-	 */
-	public String getExecutionEnvironment() {
-		return fExecutionEnvironment;
-	}
-	
-	/**
-	 * Returns all errors in the state.
-	 * 
-	 * @return state errors
-	 */
-	public ResolverError[] getErrors() {
-		List errs = new ArrayList();
-		BundleDescription[] bundles = fState.getBundles();
-		for (int i = 0; i < bundles.length; i++) {
-			ResolverError[] errors = fState.getResolverErrors(bundles[i]);
-			for (int j = 0; j < errors.length; j++) {
-				errs.add(errors[j]);
-			}
-		}
-		return (ResolverError[]) errs.toArray(new ResolverError[errs.size()]);
-	}
-
-	/* (non-Javadoc)
-	 * @see IApiProfile#setName(java.lang.String)
-	 */
-	public void setName(String name) {
-		if(name != null) {
-			fName = name;
-		}
-	}
-
-	/**
-	 * Returns a file to the root of the specified bundle or <code>null</code>
-	 * if none. Searches for plug-ins based on the "requiredBundles" system
-	 * property.
-	 * 
-	 * @param bundleName symbolic name
-	 * @return bundle root or <code>null</code>
-	 */
-	static File getBundle(String bundleName) {
-		String root = System.getProperty("requiredBundles"); //$NON-NLS-1$
-		if (root != null) {
-			File bundlesRoot = new File(root);
-			if (bundlesRoot.exists() && bundlesRoot.isDirectory()) {
-				File[] bundles = bundlesRoot.listFiles();
-				if (bundles != null) {
-					StringBuffer buffer = new StringBuffer(bundleName);
-					buffer.append('_');
-					String key = String.valueOf(buffer);
-					for (int i = 0; i < bundles.length; i++) {
-						File file = bundles[i];
-						if (file.getName().startsWith(key)) {
-							return file;
-						}
-					}
-				}
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * Retrieve the properties from the OSGi bundle (jar)
-	 * 
-	 * @param location the location to look
-	 * @param ee the id of the execution environment
-	 * @return the ee properties file or <code>null</code> if it could not be created 
-	 * @throws CoreException
-	 */
-	static Properties getEEProfile(File location, String ee) throws CoreException {
-		String filename = ee + ".profile"; //$NON-NLS-1$
-		InputStream is = null;
-		ZipFile zipFile = null;
-		try {
-			// find the input stream to the profile properties file
-			if (location.isDirectory()) {
-				File file = new File(location, filename);
-				if (file.exists())
-					is = new FileInputStream(file);
-			} else {
-				try {
-					zipFile = new ZipFile(location, ZipFile.OPEN_READ);
-					ZipEntry entry = zipFile.getEntry(filename);
-					if (entry != null)
-						is = zipFile.getInputStream(entry);
-				} catch (IOException e) {
-					// nothing to do
-				}
-			}
-			if (is != null) {
-				Properties profile = new Properties();
-				profile.load(is);
-				return profile;
-			}
-		} catch (IOException e) {
-			// nothing to do
-		} finally {
-			if (is != null)
-				try {
-					is.close();
-				} catch (IOException e) {
-					ApiPlugin.log(e);
-				}
-			if (zipFile != null)
-				try {
-					zipFile.close();
-				} catch (IOException e) {
-					ApiPlugin.log(e);
-				}
-		}
-		return null;
-	}
-
-	/* (non-Javadoc)
-	 * @see IApiProfile#dispose()
-	 */
-	public void dispose() {
-		if (ApiPlugin.isRunningInFramework()) {
-			JavaRuntime.removeVMInstallChangedListener(this);
-		}
-		IApiComponent[] components = getApiComponents();
-		for (int i = 0; i < components.length; i++) {
-			components[i].dispose();
-		}
-		if(fComponents != null) {
-			fComponents.clear();
-			fComponents = null;
-		}
-		clearComponentsCache();
-		if(fComponentsById != null) {
-			fComponentsById.clear();
-			fComponentsById = null;
-		}
-		if (fSystemPackageNames != null) {
-			fSystemPackageNames.clear();
-		}
-		if(fSystemLibraryComponent != null) {
-			fSystemLibraryComponent.dispose();
-			fSystemLibraryComponent = null;
-		}
-		fState = null;
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.api.tools.internal.provisional.IApiProfile#close()
-	 */
-	public void close() throws CoreException {
-		IApiComponent[] components = getApiComponents();
-		for (int i = 0; i < components.length; i++) {
-			components[i].close();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.api.tools.IApiProfile#writeProfileDescription(java.io.OutputStream)
-	 */
-	public void writeProfileDescription(OutputStream stream) throws CoreException {
-		String xml = getProfileXML(this);
-		try {
-			stream.write(xml.getBytes(IApiCoreConstants.UTF_8));
-		} catch (UnsupportedEncodingException e) {
-			abort("Error writing pofile descrition", e); //$NON-NLS-1$
-		} catch (IOException e) {
-			abort("Error writing pofile descrition", e); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Returns an XML description of the given profile.
-	 * 
-	 * @param profile API profile
-	 * @return XML
-	 * @throws CoreException
-	 */
-	private String getProfileXML(IApiProfile profile) throws CoreException {
-		// pool bundles by location
-		Map pools = new HashMap();
-		List unRooted = new ArrayList();
-		IApiComponent[] components = profile.getApiComponents();
-		for(int i = 0; i < components.length; i++) {
-			if(!components[i].isSystemComponent()) {
-				String location = components[i].getLocation();
-				File file = new File(location);
-				if (file.exists()) {
-					File dir = file.getParentFile();
-					if (dir != null) {
-						List pool = (List) pools.get(dir);
-						if (pool == null) {
-							pool = new ArrayList();
-							pools.put(dir, pool);
-						}
-						pool.add(components[i]);
-					} else {
-						unRooted.add(components[i]);
-					}
-				}
-				
-			}
-		}
-		Document document = Util.newDocument();
-		Element root = document.createElement(IApiXmlConstants.ELEMENT_APIPROFILE);
-		document.appendChild(root);
-		root.setAttribute(IApiXmlConstants.ATTR_NAME, profile.getName());
-		root.setAttribute(IApiXmlConstants.ATTR_VERSION, IApiXmlConstants.API_PROFILE_CURRENT_VERSION);
-		// dump component pools
-		Element subroot = null;
-		File dir = null;
-		List comps = null;
-		IApiComponent comp = null;
-		Element celement = null;
-		for(Iterator iter = pools.keySet().iterator(); iter.hasNext();) {
-			dir = (File) iter.next();
-			subroot = document.createElement(IApiXmlConstants.ELEMENT_POOL);
-			root.appendChild(subroot);
-			subroot.setAttribute(IApiXmlConstants.ATTR_LOCATION, new Path(dir.getAbsolutePath()).toPortableString());
-			comps = (List) pools.get(dir);
-			for(Iterator iter2 = comps.iterator(); iter2.hasNext();) {
-				comp = (IApiComponent) iter2.next();
-				celement = document.createElement(IApiXmlConstants.ELEMENT_APICOMPONENT);
-				celement.setAttribute(IApiXmlConstants.ATTR_ID, comp.getId());
-				celement.setAttribute(IApiXmlConstants.ATTR_VERSION, comp.getVersion());
-				subroot.appendChild(celement);
-			}
-		}
-		// dump un-pooled components
-		for(Iterator iter = unRooted.iterator(); iter.hasNext();) {
-			comp = (IApiComponent) iter.next();
-			celement = document.createElement(IApiXmlConstants.ELEMENT_APICOMPONENT);
-			celement.setAttribute(IApiXmlConstants.ATTR_ID, comp.getId());
-			celement.setAttribute(IApiXmlConstants.ATTR_VERSION, comp.getVersion());
-			celement.setAttribute(IApiXmlConstants.ATTR_LOCATION, new Path(comp.getLocation()).toPortableString());
-			root.appendChild(celement);
-		}
-		return Util.serializeDocument(document);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.api.tools.IApiProfile#getDependentComponents(org.eclipse.pde.api.tools.IApiComponent[])
-	 */
-	public IApiComponent[] getDependentComponents(IApiComponent[] components) {
-		ArrayList bundles = getBundleDescriptions(components);
-		BundleDescription[] bundleDescriptions = fState.getStateHelper().getDependentBundles((BundleDescription[]) bundles.toArray(new BundleDescription[bundles.size()]));
-		return getApiComponents(bundleDescriptions);
-	}
-
-	/**
-	 * Returns an array of API components corresponding to the given bundle descriptions.
-	 * 
-	 * @param bundles bundle descriptions
-	 * @return corresponding API components
-	 */
-	private IApiComponent[] getApiComponents(BundleDescription[] bundles) {
-		ArrayList dependents = new ArrayList(bundles.length);
-		for (int i = 0; i < bundles.length; i++) {
-			BundleDescription bundle = bundles[i];
-			IApiComponent component = getApiComponent(bundle.getSymbolicName());
-			if (component != null) {
-				dependents.add(component);
-			}
-		}
-		return (IApiComponent[]) dependents.toArray(new IApiComponent[dependents.size()]);
-	}
-
-	/**
-	 * Returns an array of bundle descriptions corresponding to the given API components.
-	 * 
-	 * @param components API components
-	 * @return corresponding bundle descriptions
-	 */
-	private ArrayList getBundleDescriptions(IApiComponent[] components) {
-		ArrayList bundles = new ArrayList(components.length);
-		for (int i = 0; i < components.length; i++) {
-			IApiComponent component = components[i];
-			if (component instanceof BundleApiComponent) {
-				bundles.add(((BundleApiComponent)component).getBundleDescription());
-			}
-		}
-		return bundles;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.api.tools.IApiProfile#getPrerequisiteComponents(org.eclipse.pde.api.tools.IApiComponent[])
-	 */
-	public IApiComponent[] getPrerequisiteComponents(IApiComponent[] components) {
-		ArrayList bundles = getBundleDescriptions(components);
-		BundleDescription[] bundlesDescriptions = fState.getStateHelper().getPrerequisites((BundleDescription[]) bundles.toArray(new BundleDescription[bundles.size()]));
-		return getApiComponents(bundlesDescriptions);
-	}
-	
-	/**
-	 * Gets the {@link BundleDescription} from the cache, if present
-	 * @param bundleDescription
-	 * @return the {@link BundleDescription} or <code>null</code>
-	 */
-	private IApiComponent getBundleDescription(BundleDescription bundleDescription) {
-		if(fComponents == null) {
-			return null;
-		}
-		return (IApiComponent) fComponents.get(bundleDescription.getSymbolicName() + bundleDescription.getVersion().toString());
-	}
-	
-	/**
-	 * Stores the given component in the cache keyed by {@link BundleDescription} symbolic name + version 
-	 * @param bundleDescription
-	 * @param component
-	 */
-	private void storeBundleDescription(BundleDescription bundleDescription, IApiComponent component) {
-		if(fComponents == null) {
-			fComponents = new HashMap(8);
-		}
-		fComponents.put(bundleDescription.getSymbolicName() + bundleDescription.getVersion().toString(), component);
-	}
-	
-	/**
-	 * Clear cached settings for the given package.
-	 * 
-	 * @param packageName
-	 */
-	protected synchronized void clearPackage(String packageName) {
-		if(fComponentsCache != null) {
-			fComponentsCache.remove(packageName);
-		}
-	}
-	
-	/* (non-Javadoc)
-	 * @see java.lang.Object#toString()
-	 */
-	public String toString() {
-		return getName();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.api.tools.internal.provisional.IApiProfile#getExecutionEnvironmentStatus()
-	 */
-	public IStatus getExecutionEnvironmentStatus() {
-		return fEEStatus;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.launching.IVMInstallChangedListener#defaultVMInstallChanged(org.eclipse.jdt.launching.IVMInstall, org.eclipse.jdt.launching.IVMInstall)
-	 */
-	public void defaultVMInstallChanged(IVMInstall previous, IVMInstall current) {
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.launching.IVMInstallChangedListener#vmAdded(org.eclipse.jdt.launching.IVMInstall)
-	 */
-	public void vmAdded(IVMInstall vm) {
-		if (!(vm instanceof VMStandin)) {
-			// there may be a better fit for VMs/EEs
-			rebindVM();
-		}
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.launching.IVMInstallChangedListener#vmChanged(org.eclipse.jdt.launching.PropertyChangeEvent)
-	 */
-	public void vmChanged(PropertyChangeEvent event) {
-		if (!(event.getSource() instanceof VMStandin)) {
-			String property = event.getProperty();
-			if (IVMInstallChangedListener.PROPERTY_INSTALL_LOCATION.equals(property) ||
-					IVMInstallChangedListener.PROPERTY_LIBRARY_LOCATIONS.equals(property)) {
-				rebindVM();
-			}
-		}
-	}
-
-	/**
-	 * Re-binds the VM this profile is bound to.
-	 */
-	private void rebindVM() {
-		fVMBinding = null;
-		IApiComponent[] components = getApiComponents();
-		HashSet ees = new HashSet();
-		for (int i = 0; i < components.length; i++) {
-			ees.addAll(Arrays.asList(components[i].getExecutionEnvironments()));
-		}
-		resolveSystemLibrary(ees);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.jdt.launching.IVMInstallChangedListener#vmRemoved(org.eclipse.jdt.launching.IVMInstall)
-	 */
-	public void vmRemoved(IVMInstall vm) {
-		if (vm.equals(fVMBinding)) {
-			rebindVM();
-		}
-	}
-}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/BundleApiComponent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/BundleApiComponent.java
index 2ebf0fa..dfe9767 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/BundleApiComponent.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/BundleApiComponent.java
@@ -46,15 +46,16 @@
 import org.eclipse.osgi.service.resolver.State;
 import org.eclipse.osgi.service.resolver.StateObjectFactory;
 import org.eclipse.osgi.util.ManifestElement;
+import org.eclipse.pde.api.tools.internal.model.ApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
 import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.scanner.ApiDescriptionProcessor;
 import org.eclipse.pde.api.tools.internal.util.SourceDefaultHandler;
 import org.eclipse.pde.api.tools.internal.util.Util;
@@ -99,7 +100,7 @@
 	 * @param location directory or jar file
 	 * @exception CoreException if unable to create a component from the specified location
 	 */
-	public BundleApiComponent(IApiProfile profile, String location) throws CoreException {
+	public BundleApiComponent(IApiBaseline profile, String location) throws CoreException {
 		super(profile);
 		fLocation = location;
 	}
@@ -152,10 +153,10 @@
 	 * @param state PDE state
 	 * @throws CoreException on failure
 	 */
-	protected void init(State state, long bundleId) throws CoreException {
+	public void init(State state, long bundleId) throws CoreException {
 		try {
 			Dictionary manifest = getManifest();
-			if (isBinaryBundle() && ApiProfileManager.WORKSPACE_API_PROFILE_ID.equals(getProfile().getName())) {
+			if (isBinaryBundle() && ApiBaselineManager.WORKSPACE_API_PROFILE_ID.equals(getProfile().getName())) {
 				// must account for bundles in development mode - look for class files in output
 				// folders rather than jars
 				TargetWeaver.weaveManifest(manifest);
@@ -751,7 +752,7 @@
 	 * 
 	 * @return bundle description
 	 */
-	protected BundleDescription getBundleDescription() {
+	public BundleDescription getBundleDescription() {
 		return fBundleDescription;
 	}
 
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/CompositeApiDescription.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/CompositeApiDescription.java
index eafbb48..331a1ff 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/CompositeApiDescription.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/CompositeApiDescription.java
@@ -10,13 +10,19 @@
  *******************************************************************************/
 package org.eclipse.pde.api.tools.internal;
 
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.pde.api.tools.internal.model.ApiElement;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
 import org.eclipse.pde.api.tools.internal.provisional.ApiDescriptionVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
 
 /**
  * A host API description combines descriptions of a host and all its
@@ -24,7 +30,7 @@
  * 
  * @since 1.0
  */
-public class CompositeApiDescription implements IApiDescription {
+public class CompositeApiDescription extends ApiElement implements IApiDescription {
 	
 	private IApiDescription[] fDescriptions;
 	
@@ -34,6 +40,7 @@
 	 * @param descriptions
 	 */
 	public CompositeApiDescription(IApiDescription[] descriptions) {
+		super(null, "composite description", IApiElement.COMPONENT);
 		fDescriptions = descriptions;
 	}
 
@@ -102,4 +109,46 @@
 			}
 		}
 	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#getChildren()
+	 */
+	public IApiElement[] getChildren() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#hasChildren()
+	 */
+	public boolean hasChildren() throws CoreException {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getPath()
+	 */
+	public IPath getPath() {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getResource()
+	 */
+	public IResource getResource() {
+		return null;
+	}
 }
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiCoreConstants.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiCoreConstants.java
index 1b51f1a..e19ed51 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiCoreConstants.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/IApiCoreConstants.java
@@ -55,7 +55,7 @@
 	public static final String ECLIPSE_SOURCE_BUNDLE = "Eclipse-SourceBundle"; //$NON-NLS-1$
 	
 	/**
-	 * Constant representing the name of the {@link IApiProfile} used in headless ant builds.
+	 * Constant representing the name of the {@link IApiBaseline} used in headless ant builds.
 	 * Value is: <code>ant_build_profile</code>
 	 */
 	public static final String ANT_BUILD_PROFILE_NAME = "ant_build_profile"; //$NON-NLS-1$
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ManifestNode.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ManifestNode.java
new file mode 100644
index 0000000..f313622
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ManifestNode.java
@@ -0,0 +1,167 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal;
+
+import java.util.HashMap;
+
+import org.eclipse.pde.api.tools.internal.descriptors.ElementDescriptorImpl;
+import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IFieldDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;
+import org.eclipse.pde.api.tools.internal.util.Util;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * Represents a single node in the tree of mapped manifest items
+ */
+public class ManifestNode implements Comparable {
+	public IElementDescriptor element = null;
+	public int visibility, restrictions;
+	public ManifestNode parent = null;
+	public HashMap children = new HashMap(1);
+	
+	public ManifestNode(ManifestNode parent, IElementDescriptor element, int visibility, int restrictions) {
+		this.element = element;
+		this.visibility = visibility;
+		this.restrictions = restrictions;
+		this.parent = parent;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 * This method is safe to override, as the name of an element is unique within its branch of the tree
+	 * and does not change over time.
+	 */
+	public boolean equals(Object obj) {
+		if(obj instanceof ManifestNode) {
+			return ((ManifestNode)obj).element.equals(element);
+		}
+		return false;
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 * This method is safe to override, as the name of an element is unique within its branch of the tree
+	 * and does not change over time.
+	 */
+	public int hashCode() {
+		return element.hashCode();
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		String type = null;
+		String name = null;
+		switch(element.getElementType()) {
+			case IElementDescriptor.T_FIELD: {
+				type = "Field"; //$NON-NLS-1$
+				name = ((IMemberDescriptor) element).getName();
+				break;
+			}
+			case IElementDescriptor.T_METHOD: {
+				type = "Method"; //$NON-NLS-1$
+				name = ((IMemberDescriptor) element).getName();
+				break;
+			}
+			case IElementDescriptor.T_PACKAGE: {
+				type = "Package"; //$NON-NLS-1$
+				name = ((IPackageDescriptor) element).getName();
+				break;
+			}
+			case IElementDescriptor.T_REFERENCE_TYPE: {
+				type = "Type"; //$NON-NLS-1$
+				name = ((IMemberDescriptor) element).getName();
+				break;
+			}
+		}
+		StringBuffer buffer = new StringBuffer();
+		buffer.append(type == null ? "Unknown" : type).append(" Node: ").append(name == null ? "Unknown Name" : name); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		buffer.append("\nVisibility: ").append(Util.getVisibilityKind(visibility)); //$NON-NLS-1$
+		buffer.append("\nRestrictions: ").append(Util.getRestrictionKind(restrictions)); //$NON-NLS-1$
+		if(parent != null) {
+			String pname = parent.element.getElementType() == IElementDescriptor.T_PACKAGE ? 
+					((IPackageDescriptor)parent.element).getName() : ((IMemberDescriptor)parent.element).getName();
+			buffer.append("\nParent: ").append(parent == null ? null : pname); //$NON-NLS-1$
+		}
+		return buffer.toString();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Comparable#compareTo(java.lang.Object)
+	 */
+	public int compareTo(Object o) {
+		if (o instanceof ManifestNode) {
+			ManifestNode node = (ManifestNode) o;
+			return ((ElementDescriptorImpl)element).compareTo(node.element);
+		}
+		return -1;
+	}
+	
+	/**
+	 * Ensure this node is up to date. Default implementation does
+	 * nothing. Subclasses should override as required.
+	 * 
+	 * Returns the resulting node if the node is valid, or <code>null</code>
+	 * if the node no longer exists.
+	 * 
+	 * @return up to date node, or <code>null</code> if no longer exists
+	 */
+	public ManifestNode refresh() {
+		return this;
+	}
+	
+	/**
+	 * Persists this node as a child of the given element.
+	 * 
+	 * @param document XML document
+	 * @param parent parent element in the document
+	 * @param component component the description is for or <code>null</code>
+	 */
+	void persistXML(Document document, Element parent) {
+		if(restrictions == RestrictionModifiers.NO_RESTRICTIONS) { 
+			return;
+		}
+		switch (element.getElementType()) {
+		case IElementDescriptor.T_METHOD:
+			IMethodDescriptor md = (IMethodDescriptor) element;
+			Element method = document.createElement(IApiXmlConstants.ELEMENT_METHOD);
+			method.setAttribute(IApiXmlConstants.ATTR_NAME, md.getName());
+			method.setAttribute(IApiXmlConstants.ATTR_SIGNATURE, md.getSignature());
+			persistAnnotations(method);
+			parent.appendChild(method);
+			break;
+		case IElementDescriptor.T_FIELD:
+			IFieldDescriptor fd = (IFieldDescriptor) element;
+			Element field = document.createElement(IApiXmlConstants.ELEMENT_FIELD);
+			field.setAttribute(IApiXmlConstants.ATTR_NAME, fd.getName());
+			persistAnnotations(field);
+			parent.appendChild(field);
+			break;
+		}
+	}
+	
+	/**
+	 * Adds visibility and restrictions to the XML element.
+	 * 
+	 * @param element XML element to annotate
+	 * @param component the component the description is for or <code>null</code>
+	 */
+	void persistAnnotations(Element element) {
+		element.setAttribute(IApiXmlConstants.ATTR_VISIBILITY, Integer.toString(visibility));
+		element.setAttribute(IApiXmlConstants.ATTR_RESTRICTIONS, Integer.toString(restrictions));
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/PluginProjectApiComponent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/PluginProjectApiComponent.java
index 5a71ae0..c6b20a1 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/PluginProjectApiComponent.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/PluginProjectApiComponent.java
@@ -34,10 +34,10 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.scanner.TagScanner;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.pde.core.build.IBuild;
@@ -95,10 +95,10 @@
 	 * @param project java project
 	 * @throws CoreException if unable to create the API component
 	 */
-	public PluginProjectApiComponent(IApiProfile profile, String location, IPluginModelBase model) throws CoreException {
+	public PluginProjectApiComponent(IApiBaseline profile, String location, IPluginModelBase model) throws CoreException {
 		super(profile,location);
 		IPath path = new Path(location);
-		IProject project = ApiProfile.ROOT.getProject(path.lastSegment());
+		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(path.lastSegment());
 		this.fProject = JavaCore.create(project);
 		this.fModel = model;
 	}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ProjectApiDescription.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ProjectApiDescription.java
index 0b42b19..0cc68a9 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ProjectApiDescription.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ProjectApiDescription.java
@@ -34,6 +34,7 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.pde.api.tools.internal.model.ApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.ApiDescriptionVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
@@ -120,7 +121,7 @@
 		/* (non-Javadoc)
 		 * @see org.eclipse.pde.api.tools.internal.ApiDescription.ManifestNode#refresh()
 		 */
-		protected ManifestNode refresh() {
+		public ManifestNode refresh() {
 			refreshPackages();
 			for (int i = 0; i < fFragments.length; i++) {
 				if (!fFragments[i].exists()) {
@@ -201,7 +202,7 @@
 		/* (non-Javadoc)
 		 * @see org.eclipse.pde.api.tools.internal.ApiDescription.ManifestNode#refresh()
 		 */
-		protected synchronized ManifestNode refresh() {
+		public synchronized ManifestNode refresh() {
 			if (fRefreshing) {
 				return this;
 			}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/SystemLibraryApiComponent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/SystemLibraryApiComponent.java
index fd68f14..e89d852 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/SystemLibraryApiComponent.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/SystemLibraryApiComponent.java
@@ -17,13 +17,14 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jdt.internal.launching.EEVMType;
 import org.eclipse.jdt.launching.LibraryLocation;
+import org.eclipse.pde.api.tools.internal.model.ApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 
 /**
  * An API component for a system library.
@@ -64,7 +65,7 @@
 	 * @param description EE file
 	 * @param systemPackages exported system packages
 	 */
-	public SystemLibraryApiComponent(IApiProfile profile, File description, String[] systemPackages) {
+	public SystemLibraryApiComponent(IApiBaseline profile, File description, String[] systemPackages) {
 		super(profile);
 		init(description);
 		fSystemPackages = systemPackages;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java
index 240216c..06fdf09 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiAnalysisBuilder.java
@@ -66,8 +66,8 @@
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.IApiMarkerConstants;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.builder.IApiAnalyzer;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
@@ -373,13 +373,13 @@
 	 * @param monitor
 	 */
 	private void buildAll(IProgressMonitor monitor) throws CoreException {
-		IApiProfile wsprofile = null;
+		IApiBaseline wsprofile = null;
 		try {
 			clearLastState();
 			fBuildState = new BuildState();
 			SubMonitor localMonitor = SubMonitor.convert(monitor, BuilderMessages.api_analysis_on_0, 4);
 			localMonitor.subTask(NLS.bind(BuilderMessages.ApiAnalysisBuilder_initializing_analyzer, fCurrentProject.getName()));
-			IApiProfile profile = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
+			IApiBaseline profile = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
 			cleanupMarkers(fCurrentProject);
 			cleanupUnsupportedTagMarkers(fCurrentProject);
 			IPluginModelBase currentModel = getCurrentModel();
@@ -586,7 +586,7 @@
 	 * @param monitor
 	 */
 	private void build(final State state, IProgressMonitor monitor) throws CoreException {
-		IApiProfile wsprofile = null;
+		IApiBaseline wsprofile = null;
 		try {
 			clearLastState(); // so if the build fails, a full build will be triggered
 			SubMonitor localMonitor = SubMonitor.convert(monitor, BuilderMessages.api_analysis_on_0, 6);
@@ -613,7 +613,7 @@
 						 cnames = new ArrayList(fChangedTypes.size());
 					collectAllQualifiedNames(fTypesToCheck, fChangedTypes, tnames, cnames, localMonitor.newChild(1));
 					updateMonitor(localMonitor, 1);
-					IApiProfile profile = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
+					IApiBaseline profile = ApiPlugin.getDefault().getApiProfileManager().getDefaultApiProfile();
 					fAnalyzer.analyzeComponent(fBuildState, null, profile, apiComponent, (String[])tnames.toArray(new String[tnames.size()]), (String[])cnames.toArray(new String[cnames.size()]), localMonitor.newChild(1));
 					updateMonitor(localMonitor, 1);
 					createMarkers();
@@ -933,9 +933,9 @@
 	}
 
 	/**
-	 * @return the workspace {@link IApiProfile}
+	 * @return the workspace {@link IApiBaseline}
 	 */
-	private IApiProfile getWorkspaceProfile() {
+	private IApiBaseline getWorkspaceProfile() {
 		return ApiPlugin.getDefault().getApiProfileManager().getWorkspaceProfile();
 	}
 	
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiUseAnalyzer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiUseAnalyzer.java
index 2556c9a..9023888 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiUseAnalyzer.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/ApiUseAnalyzer.java
@@ -35,7 +35,6 @@
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiMarkerConstants;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
@@ -44,6 +43,7 @@
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchCriteria;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
index ece72b9..8274646 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
@@ -50,7 +50,7 @@
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.osgi.util.NLS;
-import org.eclipse.pde.api.tools.internal.ApiProfileManager;
+import org.eclipse.pde.api.tools.internal.ApiBaselineManager;
 import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
 import org.eclipse.pde.api.tools.internal.PluginProjectApiComponent;
 import org.eclipse.pde.api.tools.internal.comparator.Delta;
@@ -60,10 +60,8 @@
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
 import org.eclipse.pde.api.tools.internal.provisional.IApiMarkerConstants;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IApiProfileManager;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.IRequiredComponentDescription;
@@ -75,6 +73,8 @@
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchScope;
@@ -147,7 +147,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.api.tools.internal.provisional.builder.IApiAnalyzer#analyzeComponent(org.eclipse.pde.api.tools.internal.builder.BuildState, org.eclipse.pde.api.tools.internal.provisional.IApiProfile, org.eclipse.pde.api.tools.internal.provisional.IApiComponent, java.lang.String[], java.lang.String[], org.eclipse.core.runtime.IProgressMonitor)
 	 */
-	public void analyzeComponent(final BuildState state, final IApiFilterStore filterStore, final IApiProfile baseline,	final IApiComponent component,
+	public void analyzeComponent(final BuildState state, final IApiFilterStore filterStore, final IApiBaseline baseline,	final IApiComponent component,
 			final String[] typenames, final String[] changedtypes, IProgressMonitor monitor) {
 		try {
 			SubMonitor localMonitor = SubMonitor.convert(monitor, BuilderMessages.BaseApiAnalyzer_analyzing_api, 6 + (changedtypes == null ? 0 : changedtypes.length));
@@ -214,8 +214,8 @@
 		int length = requiredComponents.length;
 		ReexportedBundleVersionInfo info = null;
 		if (length != 0) {
-			IApiProfile profile = component.getProfile();
-			IApiProfile baseline = reference.getProfile();
+			IApiBaseline profile = component.getProfile();
+			IApiBaseline baseline = reference.getProfile();
 			loop: for (int i = 0; i < length; i++) {
 				IRequiredComponentDescription description = requiredComponents[i];
 				if (description.isExported()) {
@@ -1513,8 +1513,8 @@
 			return true;
 		}
 
-		IApiProfileManager manager = ApiProfileManager.getManager();
-		IApiProfile profile = manager.getWorkspaceProfile();
+		IApiProfileManager manager = ApiBaselineManager.getManager();
+		IApiBaseline profile = manager.getWorkspaceProfile();
 		if(profile == null) {
 			return false;
 		}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java
index cbdf6a1..08edf12 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BuilderMessages.java
@@ -38,8 +38,6 @@
 	public static String TagValidator_a_final_field;
 	public static String TagValidator_a_final_method;
 	public static String TagValidator_a_method;
-	public static String TagValidator_a_static_final_method;
-	public static String TagValidator_a_static_method;
 	public static String TagValidator_an_abstract_class;
 	public static String TagValidator_an_annotation;
 	public static String TagValidator_an_annotation_method;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/TagValidator.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/TagValidator.java
index 43d81f7..1ae469b 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/TagValidator.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/TagValidator.java
@@ -98,6 +98,7 @@
 				String context = BuilderMessages.TagValidator_an_interface;
 				if(!type.isInterface()) {
 					context = BuilderMessages.TagValidator_a_class;
+					
 					if(Flags.isAbstract(type.getModifiers())) {
 						context = BuilderMessages.TagValidator_an_abstract_class;
 						invalidtags.add("@noinstantiate"); //$NON-NLS-1$
@@ -141,11 +142,9 @@
 				MethodDeclaration method = (MethodDeclaration) node;
 				int pkind = getParentKind(node);
 				String context = null;
-				int mods = method.getModifiers();
-				boolean isprivate = Flags.isPrivate(mods);
+				boolean isprivate = Flags.isPrivate(method.getModifiers());
 				boolean isconstructor = method.isConstructor();
-				boolean isfinal = Flags.isFinal(mods);
-				boolean isstatic = Flags.isStatic(mods);
+				boolean isfinal = Flags.isFinal(method.getModifiers());
 				switch(pkind) {
 					case IApiJavadocTag.TYPE_ENUM: {
 						context = isprivate ? BuilderMessages.TagValidator_private_enum_method : BuilderMessages.TagValidator_an_enum_method;
@@ -159,15 +158,9 @@
 						if(isprivate) {
 							context = isconstructor ? BuilderMessages.TagValidator_private_constructor : BuilderMessages.TagValidator_private_method;
 						}
-						else if(isstatic && isfinal) {
-							context = BuilderMessages.TagValidator_a_static_final_method;
-						}
 						else if (isfinal) {
 							context = BuilderMessages.TagValidator_a_final_method;
 						}
-						else if(isstatic) {
-							context = BuilderMessages.TagValidator_a_static_method;
-						}
 						else {
 							context = isconstructor ? BuilderMessages.TagValidator_a_constructor : BuilderMessages.TagValidator_a_method;
 						}
@@ -178,7 +171,7 @@
 				if(!isprivate) {
 					validtags = jtm.getTagsForType(pkind, isconstructor ? IApiJavadocTag.MEMBER_CONSTRUCTOR : IApiJavadocTag.MEMBER_METHOD);
 				}
-				if(isfinal || isstatic) {
+				if(isfinal) {
 					ArrayList ttags = new ArrayList(validtags.length);
 					for(int i = 0; i < validtags.length; i++) {
 						if(!validtags[i].getTagName().equals("@nooverride")) { //$NON-NLS-1$
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties
index 96d0550..19d0026 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/buildermessages.properties
@@ -30,8 +30,6 @@
 TagValidator_a_final_field=a final field
 TagValidator_a_final_method=a final method
 TagValidator_a_method=a method
-TagValidator_a_static_final_method=a static final method
-TagValidator_a_static_method=a static method
 TagValidator_an_abstract_class=an abstract class
 TagValidator_an_annotation=an annotation
 TagValidator_an_annotation_method=an annotation method
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java
index 1312adc..1512cc2 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java
@@ -27,8 +27,6 @@
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
@@ -36,13 +34,15 @@
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.objectweb.asm.signature.SignatureReader;
 
 import com.ibm.icu.text.MessageFormat;
 
 /**
- * Compares class files from the workspace to those in the default {@link IApiProfile}
+ * Compares class files from the workspace to those in the default {@link IApiBaseline}
  * 
  * @since 1.0.0
  */
@@ -73,7 +73,7 @@
 		DEBUG = debugValue || Util.DEBUG;
 	}
 
-	private boolean isCheckedException(IApiProfile profile, IApiComponent apiComponent, String exceptionName) {
+	private boolean isCheckedException(IApiBaseline profile, IApiComponent apiComponent, String exceptionName) {
 		if (profile == null) {
 			return true;
 		}
@@ -112,8 +112,8 @@
 		return true;
 	}
 
-	private IApiProfile apiProfile = null;
-	private IApiProfile apiProfile2 = null;
+	private IApiBaseline apiProfile = null;
+	private IApiBaseline apiProfile2 = null;
 
 	private IClassFile classFile = null;
 	
@@ -141,7 +141,7 @@
 	 * @param visibilityModifiers any modifiers from the class file
 	 * @throws CoreException if the contents of the specified class files cannot be acquired
 	 */
-	public ClassFileComparator(IClassFile classFile, IClassFile classFile2, IApiComponent component, IApiComponent component2, IApiProfile apiState, IApiProfile apiState2, int visibilityModifiers) throws CoreException {
+	public ClassFileComparator(IClassFile classFile, IClassFile classFile2, IApiComponent component, IApiComponent component2, IApiBaseline apiState, IApiBaseline apiState2, int visibilityModifiers) throws CoreException {
 		this.component = component;
 		this.component2 = component2;
 		this.descriptor1 = new TypeDescriptor(classFile.getContents());
@@ -163,7 +163,7 @@
 	 * @param visibilityModifiers any modifiers from the class file
 	 * @throws CoreException if the contents of the specified class file cannot be acquired
 	 */
-	public ClassFileComparator(TypeDescriptor typeDescriptor, IClassFile classFile2, IApiComponent component, IApiComponent component2, IApiProfile apiState, IApiProfile apiState2, int visibilityModifiers) throws CoreException {
+	public ClassFileComparator(TypeDescriptor typeDescriptor, IClassFile classFile2, IApiComponent component, IApiComponent component2, IApiBaseline apiState, IApiBaseline apiState2, int visibilityModifiers) throws CoreException {
 		this.component = component;
 		this.component2 = component2;
 		this.descriptor1 = typeDescriptor;
@@ -902,7 +902,7 @@
 	 * @param profile
 	 * @param set
 	 */
-	private void collectAllInterfaces(TypeDescriptor typeDescriptor, IApiComponent apiComponent, IApiProfile profile, Set set) {
+	private void collectAllInterfaces(TypeDescriptor typeDescriptor, IApiComponent apiComponent, IApiBaseline profile, Set set) {
 		Set interfaces = typeDescriptor.interfaces;
 		try {
 			IApiComponent sourceComponent = apiComponent;
@@ -2650,7 +2650,7 @@
 	 * @param profile
 	 * @return the complete super-interface set for the given descriptor, or <code>null</code>
 	 */
-	private Set getInterfacesSet(TypeDescriptor typeDescriptor, IApiComponent apiComponent, IApiProfile profile) {
+	private Set getInterfacesSet(TypeDescriptor typeDescriptor, IApiComponent apiComponent, IApiBaseline profile) {
 		HashSet set = new HashSet();
 		this.status = null;
 		collectAllInterfaces(typeDescriptor, apiComponent, profile, set);
@@ -2710,13 +2710,13 @@
 		signatureReader.accept(new SignatureDecoder(signatureDescriptor));
 		return signatureDescriptor;
 	}
-	private List getSuperclassList(TypeDescriptor typeDescriptor, IApiComponent apiComponent, IApiProfile profile) {
+	private List getSuperclassList(TypeDescriptor typeDescriptor, IApiComponent apiComponent, IApiBaseline profile) {
 		return getSuperclassList(typeDescriptor, apiComponent, profile, false);
 	}
-	private List getSuperclassList(TypeDescriptor typeDescriptor, IApiComponent apiComponent, IApiProfile profile, boolean includeObject) {
+	private List getSuperclassList(TypeDescriptor typeDescriptor, IApiComponent apiComponent, IApiBaseline profile, boolean includeObject) {
 		return getSuperclassList(typeDescriptor, apiComponent, profile, includeObject, false);
 	}
-	private List getSuperclassList(TypeDescriptor typeDescriptor, IApiComponent apiComponent, IApiProfile profile, boolean includeObject, boolean includePrivate) {
+	private List getSuperclassList(TypeDescriptor typeDescriptor, IApiComponent apiComponent, IApiBaseline profile, boolean includeObject, boolean includePrivate) {
 		TypeDescriptor descriptor = typeDescriptor;
 		this.status = null;
 		String superName = descriptor.superName;
@@ -3051,7 +3051,7 @@
 		return null;
 	}
 	
-	private LookupResult getType(String typeName, IApiComponent component, IApiProfile profile) throws CoreException {
+	private LookupResult getType(String typeName, IApiComponent component, IApiBaseline profile) throws CoreException {
 		IApiComponent sourceComponent = component;
 		String packageName = Util.getPackageName(typeName);
 		IApiComponent[] components = profile.resolvePackage(component, packageName);
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java
new file mode 100644
index 0000000..e667794
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java
@@ -0,0 +1,619 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMInstallChangedListener;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.PropertyChangeEvent;
+import org.eclipse.jdt.launching.VMStandin;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.service.resolver.ExportPackageDescription;
+import org.eclipse.osgi.service.resolver.ResolverError;
+import org.eclipse.osgi.service.resolver.State;
+import org.eclipse.osgi.service.resolver.StateHelper;
+import org.eclipse.pde.api.tools.internal.BundleApiComponent;
+import org.eclipse.pde.api.tools.internal.PluginProjectApiComponent;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiBaselineInfo;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
+import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.util.Util;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+
+/**
+ * Implementation of an API profile.
+ * 
+ * @since 1.0
+ */
+public class ApiBaseline extends ApiElement implements IApiBaseline, IVMInstallChangedListener {
+	/**
+	 * Constant used for controlling tracing in the example class
+	 */
+	private static boolean DEBUG = Util.DEBUG;
+	
+	/**
+	 * Method used for initializing tracing in the example class
+	 */
+	public static void setDebug(boolean debugValue) {
+		DEBUG = debugValue || Util.DEBUG;
+	}
+
+	private IApiComponent[] EMPTY_COMPONENTS = new IApiComponent[0];
+	
+	/**
+	 * Next available bundle id
+	 */
+	private long fNextId = 0L; 
+	
+	/**
+	 * Cache of resolved packages. 
+	 * <p>Map of <code>PackageName -> Map(componentName -> IApiComponent[])</code></p>
+	 * For each package the cache contains a map of API components that provide that package,
+	 * by source component name (including the <code>null</code> component name).
+	 */
+	private HashMap fComponentsCache = null;
+	
+	/**
+	 * Maps bundle descriptions to components.
+	 * <p>Map of <code>BundleDescription.getSymbolicName() + BundleDescription.getVersion().toString() -> {@link IApiComponent}</code></p>
+	 */
+	private Map fComponents = null;
+	
+	/**
+	 * Maps component id's to components.
+	 * <p>Map of <code>componentId -> {@link IApiComponent}</code></p>
+	 */
+	private Map fComponentsById = null;
+	
+	/**
+	 * Cache of system package names
+	 */
+	private Set fSystemPackageNames = null;
+	
+	/**
+	 * The EE file to use for EE resolution
+	 */
+	private File fEeFile = null;
+	/**
+	 * Whether an execution environment should be automatically resolved 
+	 * as API components are added.
+	 */
+	private boolean fAutoResolve = false;
+	/**
+	 * The VM install this profile is bound to for system libraries or <code>null</code>.
+	 * Only used in the IDE when OSGi is running.
+	 */
+	private IVMInstall fVMBinding = null;
+	
+	/**
+	 * Constructs a new API profile with the given name.
+	 * 
+	 * @param name profile name
+	 */
+	public ApiBaseline(String name) {
+		super(null, name, IApiElement.BASELINE);
+		fAutoResolve = true;
+	}	
+		
+	/**
+	 * Constructs a new API profile with the given attributes.
+	 * 
+	 * @param name profile name
+	 * @param eeFile execution environment description file
+	 */
+	public ApiBaseline(String name, File eeFile) {
+		this(name);
+		fEeFile = eeFile;
+	}
+
+	/**
+	 * Clears the package -> components cache and sets it to <code>null</code>
+	 */
+	private void clearComponentsCache() {
+		if(fComponentsCache != null) {
+			fComponentsCache.clear();
+			fComponentsCache = null;
+		}
+	}
+	
+	/**
+	 * Adds an {@link IApiComponent} to the fComponentsById mapping
+	 * @param component
+	 */
+	private void addComponent(IApiComponent component) {
+		if(component == null) {
+			return;
+		}
+		if(fComponentsById == null) {
+			fComponentsById = new HashMap();
+		}
+		fComponentsById.put(component.getId(), component);
+	}
+	
+	/* (non-Javadoc)
+	 * @see IApiBaseline#addApiComponents(org.eclipse.pde.api.tools.model.component.IApiComponent[], boolean)
+	 */
+	public void addApiComponents(IApiComponent[] components) {
+		HashSet ees = new HashSet();
+		ApiBaselineInfo info = getInfo();
+		State state = info.getState();
+		for (int i = 0; i < components.length; i++) {
+			BundleApiComponent component = (BundleApiComponent) components[i];
+			if (component.isSourceComponent()) {
+				continue;
+			}
+			BundleDescription description = component.getBundleDescription();
+			state.addBundle(description);
+			storeBundleDescription(description, component);
+			addComponent(component);
+			ees.addAll(Arrays.asList(component.getExecutionEnvironments()));
+		}
+		info.resolveSystemLibrary(ees);
+		state.resolve();
+	}
+
+	/* (non-Javadoc)
+	 * @see IApiBaseline#getApiComponents()
+	 */
+	public IApiComponent[] getApiComponents() {
+		if(fComponentsById == null) {
+			return EMPTY_COMPONENTS;
+		}
+		Collection values = fComponentsById.values();
+		return (IApiComponent[]) values.toArray(new IApiComponent[values.size()]);
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline#resolvePackage(org.eclipse.pde.api.tools.internal.provisional.IApiComponent, java.lang.String)
+	 */
+	public synchronized IApiComponent[] resolvePackage(IApiComponent sourceComponent, String packageName) throws CoreException {
+		HashMap componentsForPackage = null;
+		if(fComponentsCache != null){
+			componentsForPackage = (HashMap) fComponentsCache.get(packageName);
+		}
+		else {
+			fComponentsCache = new HashMap(8);
+		}
+		IApiComponent[] cachedComponents = null;
+		if (componentsForPackage != null) {
+			cachedComponents = (IApiComponent[]) componentsForPackage.get(sourceComponent);
+			if (cachedComponents != null) {
+				return cachedComponents;
+			}
+		} else {
+			componentsForPackage = new HashMap(8);
+			fComponentsCache.put(packageName, componentsForPackage);
+		}
+		// check system packages first
+		if (isSystemPackage(packageName)) {
+			if (fSystemLibraryComponent != null) {
+				cachedComponents = new IApiComponent[] { fSystemLibraryComponent };
+			} else {
+				return EMPTY_COMPONENTS;
+			}
+		} else {
+			if (sourceComponent != null) {
+				List componentsList = new ArrayList();
+				resolvePackage0(sourceComponent, packageName, componentsList);
+				if (componentsList.size() != 0) {
+					cachedComponents = new IApiComponent[componentsList.size()];
+					componentsList.toArray(cachedComponents);
+				}
+			}
+		}
+		if (cachedComponents == null) {
+			cachedComponents = EMPTY_COMPONENTS;
+		}
+		componentsForPackage.put(sourceComponent, cachedComponents);
+		return cachedComponents;
+	}
+
+	/**
+	 * Resolves the listing of {@link IApiComponent}s that export the given package name. The collection 
+	 * of {@link IApiComponent}s is written into the specified list <code>componentList</code> 
+	 * @param component
+	 * @param packageName
+	 * @param componentsList
+	 * @throws CoreException
+	 */
+	private void resolvePackage0(IApiComponent component, String packageName, List componentsList) throws CoreException {
+		if (component instanceof BundleApiComponent) {
+			BundleDescription bundle = ((BundleApiComponent)component).getBundleDescription();
+			if (bundle != null) {
+				StateHelper helper = getInfo().getState().getStateHelper();
+				ExportPackageDescription[] visiblePackages = helper.getVisiblePackages(bundle);
+				for (int i = 0; i < visiblePackages.length; i++) {
+					ExportPackageDescription pkg = visiblePackages[i];
+					if (packageName.equals(pkg.getName())) {
+						BundleDescription bundleDescription = pkg.getExporter();
+						IApiComponent exporter = getBundleDescription(bundleDescription);
+						if (exporter != null) {
+							componentsList.add(exporter);
+						}
+					}
+				}
+				// check for package within the source component
+				String[] packageNames = component.getPackageNames();
+				// TODO: would be more efficient to have containsPackage(...) or something
+				for (int i = 0; i < packageNames.length; i++) {
+					if (packageName.equals(packageNames[i])) {
+						componentsList.add(component);
+					}
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Returns whether the specified package is supplied by the system
+	 * library.
+	 * 
+	 * @param packageName package name
+	 * @return whether the specified package is supplied by the system
+	 * 	library 
+	 */
+	private boolean isSystemPackage(String packageName) {
+		if (packageName.startsWith("java.")) { //$NON-NLS-1$
+			return true;
+		}
+		if (fSystemPackageNames == null) {
+			ExportPackageDescription[] systemPackages = getInfo().getState().getSystemPackages();
+			fSystemPackageNames = new HashSet(systemPackages.length);
+			for (int i = 0; i < systemPackages.length; i++) {
+				fSystemPackageNames.add(systemPackages[i].getName());
+			}
+		}
+		return fSystemPackageNames.contains(packageName);
+	}
+
+	
+	/* (non-Javadoc)
+	 * @see IApiBaseline#newApiComponent(java.lang.String)
+	 */
+	public IApiComponent newApiComponent(String location) throws CoreException {
+		BundleApiComponent component = new BundleApiComponent(this, location);
+		if(component.isValidBundle()) {
+			component.init(getInfo().getState(), nextId());
+			return component;
+		}
+		return null;
+	}
+
+	
+	/* (non-Javadoc)
+	 * @see IApiBaseline#newApiComponent(IPluginModelBase)
+	 */
+	public IApiComponent newApiComponent(IPluginModelBase model) throws CoreException {
+		BundleDescription bundleDescription = model.getBundleDescription();
+		if (bundleDescription == null) {
+			return null;
+		}
+		String location = bundleDescription.getLocation();
+		if (location == null) {
+			return null;
+		}
+		IPath pathForLocation = new Path(location);
+		BundleApiComponent component = null;
+		IPath path = ResourcesPlugin.getWorkspace().getRoot().getLocation();
+		if (path != null && path.isPrefixOf(pathForLocation)) {
+			if(isValidProject(location)) {
+				component = new PluginProjectApiComponent(this, location, model);
+			}
+		} else {
+			component = new BundleApiComponent(this, location);
+		}
+		if(component != null && component.isValidBundle()) {
+			component.init(getInfo().getState(), nextId());
+			return component;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns if the specified location is a valid API project or not.
+	 * <p>
+	 * We accept projects that are plug-ins even if not API enabled (i.e.
+	 * with API nature), as we still need them to make a complete
+	 * API profile without resolution errors.
+	 * </p> 
+	 * @param location
+	 * @return true if the location is valid, false otherwise
+	 * @throws CoreException
+	 */
+	private boolean isValidProject(String location) throws CoreException {
+		IPath path = new Path(location);
+		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(path.lastSegment());
+		return project != null && project.exists();
+	}
+	
+	/**
+	 * Returns the next available bundle identifier.
+	 * 
+	 * @return next available bundle identifier
+	 */
+	private long nextId() {
+		return ++fNextId;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.provisional.IApiProfile#getApiComponent(java.lang.String)
+	 */
+	public IApiComponent getApiComponent(String id) {
+		if(fComponentsById == null) {
+			return null;
+		}
+		return (IApiComponent) fComponentsById.get(id);
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline#getExecutionEnvironment()
+	 */
+	public String getExecutionEnvironment() {
+		return getInfo().getExecutionEnvironment();
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline#getResolutionErrors()
+	 */
+	public ResolverError[] getResolutionErrors() {
+		return getInfo().getResolutionErrors();
+	}
+
+	/* (non-Javadoc)
+	 * @see IApiBaseline#setName(java.lang.String)
+	 */
+	public void setName(String name) {
+		if(name != null) {
+			fName = name;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see IApiBaseline#dispose()
+	 */
+	public void dispose() {
+		if (ApiPlugin.isRunningInFramework()) {
+			JavaRuntime.removeVMInstallChangedListener(this);
+		}
+		getInfo().dispose();
+		
+		IApiComponent[] components = getApiComponents();
+		for (int i = 0; i < components.length; i++) {
+			components[i].dispose();
+		}
+		if(fComponents != null) {
+			fComponents.clear();
+			fComponents = null;
+		}
+		clearComponentsCache();
+		if(fComponentsById != null) {
+			fComponentsById.clear();
+			fComponentsById = null;
+		}
+		if (fSystemPackageNames != null) {
+			fSystemPackageNames.clear();
+		}
+		if(fSystemLibraryComponent != null) {
+			fSystemLibraryComponent.dispose();
+			fSystemLibraryComponent = null;
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.internal.provisional.IApiProfile#close()
+	 */
+	public void close() throws CoreException {
+		IApiComponent[] components = getApiComponents();
+		for (int i = 0; i < components.length; i++) {
+			components[i].close();
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.IApiProfile#getDependentComponents(org.eclipse.pde.api.tools.IApiComponent[])
+	 */
+	public IApiComponent[] getDependentComponents(IApiComponent[] components) {
+		ArrayList bundles = getBundleDescriptions(components);
+		BundleDescription[] bundleDescriptions = getInfo().getState().getStateHelper().getDependentBundles((BundleDescription[]) bundles.toArray(new BundleDescription[bundles.size()]));
+		return getApiComponents(bundleDescriptions);
+	}
+
+	/**
+	 * Returns an array of API components corresponding to the given bundle descriptions.
+	 * 
+	 * @param bundles bundle descriptions
+	 * @return corresponding API components
+	 */
+	private IApiComponent[] getApiComponents(BundleDescription[] bundles) {
+		ArrayList dependents = new ArrayList(bundles.length);
+		for (int i = 0; i < bundles.length; i++) {
+			BundleDescription bundle = bundles[i];
+			IApiComponent component = getApiComponent(bundle.getSymbolicName());
+			if (component != null) {
+				dependents.add(component);
+			}
+		}
+		return (IApiComponent[]) dependents.toArray(new IApiComponent[dependents.size()]);
+	}
+
+	/**
+	 * Returns an array of bundle descriptions corresponding to the given API components.
+	 * 
+	 * @param components API components
+	 * @return corresponding bundle descriptions
+	 */
+	private ArrayList getBundleDescriptions(IApiComponent[] components) {
+		ArrayList bundles = new ArrayList(components.length);
+		for (int i = 0; i < components.length; i++) {
+			IApiComponent component = components[i];
+			if (component instanceof BundleApiComponent) {
+				bundles.add(((BundleApiComponent)component).getBundleDescription());
+			}
+		}
+		return bundles;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.api.tools.IApiProfile#getPrerequisiteComponents(org.eclipse.pde.api.tools.IApiComponent[])
+	 */
+	public IApiComponent[] getPrerequisiteComponents(IApiComponent[] components) {
+		ArrayList bundles = getBundleDescriptions(components);
+		BundleDescription[] bundlesDescriptions = getInfo().getState().getStateHelper().getPrerequisites((BundleDescription[]) bundles.toArray(new BundleDescription[bundles.size()]));
+		return getApiComponents(bundlesDescriptions);
+	}
+	
+	/**
+	 * Gets the {@link BundleDescription} from the cache, if present
+	 * @param bundleDescription
+	 * @return the {@link BundleDescription} or <code>null</code>
+	 */
+	private IApiComponent getBundleDescription(BundleDescription bundleDescription) {
+		if(fComponents == null) {
+			return null;
+		}
+		return (IApiComponent) fComponents.get(bundleDescription.getSymbolicName() + bundleDescription.getVersion().toString());
+	}
+	
+	/**
+	 * Stores the given component in the cache keyed by {@link BundleDescription} symbolic name + version 
+	 * @param bundleDescription
+	 * @param component
+	 */
+	private void storeBundleDescription(BundleDescription bundleDescription, IApiComponent component) {
+		if(fComponents == null) {
+			fComponents = new HashMap(8);
+		}
+		fComponents.put(bundleDescription.getSymbolicName() + bundleDescription.getVersion().toString(), component);
+	}
+	
+	/**
+	 * Clear cached settings for the given package.
+	 * 
+	 * @param packageName
+	 */
+	public synchronized void clearPackage(String packageName) {
+		if(fComponentsCache != null) {
+			fComponentsCache.remove(packageName);
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	public String toString() {
+		return getName();
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.launching.IVMInstallChangedListener#defaultVMInstallChanged(org.eclipse.jdt.launching.IVMInstall, org.eclipse.jdt.launching.IVMInstall)
+	 */
+	public void defaultVMInstallChanged(IVMInstall previous, IVMInstall current) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.launching.IVMInstallChangedListener#vmAdded(org.eclipse.jdt.launching.IVMInstall)
+	 */
+	public void vmAdded(IVMInstall vm) {
+		if (!(vm instanceof VMStandin)) {
+			// there may be a better fit for VMs/EEs
+			rebindVM();
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.launching.IVMInstallChangedListener#vmChanged(org.eclipse.jdt.launching.PropertyChangeEvent)
+	 */
+	public void vmChanged(PropertyChangeEvent event) {
+		if (!(event.getSource() instanceof VMStandin)) {
+			String property = event.getProperty();
+			if (IVMInstallChangedListener.PROPERTY_INSTALL_LOCATION.equals(property) ||
+					IVMInstallChangedListener.PROPERTY_LIBRARY_LOCATIONS.equals(property)) {
+				rebindVM();
+			}
+		}
+	}
+
+	/**
+	 * Re-binds the VM this profile is bound to.
+	 */
+	private void rebindVM() {
+		fVMBinding = null;
+		IApiComponent[] components = getApiComponents();
+		HashSet ees = new HashSet();
+		for (int i = 0; i < components.length; i++) {
+			ees.addAll(Arrays.asList(components[i].getExecutionEnvironments()));
+		}
+		getInfo().resolveSystemLibrary(ees);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jdt.launching.IVMInstallChangedListener#vmRemoved(org.eclipse.jdt.launching.IVMInstall)
+	 */
+	public void vmRemoved(IVMInstall vm) {
+		if (vm.equals(fVMBinding)) {
+			rebindVM();
+		}
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#getChildren()
+	 */
+	public IApiElement[] getChildren() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#hasChildren()
+	 */
+	public boolean hasChildren() throws CoreException {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return new ApiBaselineInfo(this, fEeFile, fAutoResolve);
+	}
+	
+	/**
+	 * @return the info for this element
+	 */
+	private ApiBaselineInfo getInfo() {
+		return (ApiBaselineInfo) getElementInfo();
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiComponent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiComponent.java
new file mode 100644
index 0000000..44b2146
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiComponent.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
+
+/**
+ * Base implementation of {@link IApiProject}
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiComponent extends ApiElement implements IApiComponent {
+
+	/**
+	 * Constructor
+	 * @param parent
+	 * @param name
+	 * @param type
+	 */
+	public ApiComponent(IApiElement parent, String name) {
+		super(parent, name, IApiElement.COMPONENT);
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#getChildren()
+	 */
+	public IApiElement[] getChildren() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#hasChildren()
+	 */
+	public boolean hasChildren() throws CoreException {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getPath()
+	 */
+	public IPath getPath() {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getResource()
+	 */
+	public IResource getResource() {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return null;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescription.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiDescription.java
similarity index 63%
rename from apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescription.java
rename to apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiDescription.java
index 46f7ff1..34dda3b 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescription.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiDescription.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.pde.api.tools.internal;
+package org.eclipse.pde.api.tools.internal.model;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -17,23 +17,21 @@
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.pde.api.tools.internal.descriptors.ElementDescriptorImpl;
+import org.eclipse.pde.api.tools.internal.ApiAnnotations;
+import org.eclipse.pde.api.tools.internal.ManifestNode;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
 import org.eclipse.pde.api.tools.internal.provisional.ApiDescriptionVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
-import org.eclipse.pde.api.tools.internal.provisional.descriptors.IFieldDescriptor;
-import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMemberDescriptor;
-import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
-import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
 import org.eclipse.pde.api.tools.internal.util.Util;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 
 import com.ibm.icu.text.MessageFormat;
 
@@ -45,7 +43,7 @@
  * @see IApiDescription
  * @since 1.0.0
  */
-public class ApiDescription implements IApiDescription {
+public class ApiDescription extends ApiElement implements IApiDescription {
 	
 	// flag to indicate visibility should be inherited from parent node
 	protected static final int VISIBILITY_INHERITED = 0;
@@ -69,155 +67,12 @@
 	private boolean fModified = false;
 	
 	/**
-	 * Represents a single node in the tree of mapped manifest items
-	 */
-	class ManifestNode implements Comparable {
-		protected IElementDescriptor element = null;
-		protected int visibility, restrictions;
-		protected ManifestNode parent = null;
-		protected HashMap children = new HashMap(1);
-		
-		public ManifestNode(ManifestNode parent, IElementDescriptor element, int visibility, int restrictions) {
-			this.element = element;
-			this.visibility = visibility;
-			this.restrictions = restrictions;
-			this.parent = parent;
-		}
-	
-		/* (non-Javadoc)
-		 * @see java.lang.Object#equals(java.lang.Object)
-		 * This method is safe to override, as the name of an element is unique within its branch of the tree
-		 * and does not change over time.
-		 */
-		public boolean equals(Object obj) {
-			if(obj instanceof ManifestNode) {
-				return ((ManifestNode)obj).element.equals(element);
-			}
-			return false;
-		}
-		
-		/* (non-Javadoc)
-		 * @see java.lang.Object#hashCode()
-		 * This method is safe to override, as the name of an element is unique within its branch of the tree
-		 * and does not change over time.
-		 */
-		public int hashCode() {
-			return element.hashCode();
-		}
-		
-		/* (non-Javadoc)
-		 * @see java.lang.Object#toString()
-		 */
-		public String toString() {
-			String type = null;
-			String name = null;
-			switch(element.getElementType()) {
-				case IElementDescriptor.T_FIELD: {
-					type = "Field"; //$NON-NLS-1$
-					name = ((IMemberDescriptor) element).getName();
-					break;
-				}
-				case IElementDescriptor.T_METHOD: {
-					type = "Method"; //$NON-NLS-1$
-					name = ((IMemberDescriptor) element).getName();
-					break;
-				}
-				case IElementDescriptor.T_PACKAGE: {
-					type = "Package"; //$NON-NLS-1$
-					name = ((IPackageDescriptor) element).getName();
-					break;
-				}
-				case IElementDescriptor.T_REFERENCE_TYPE: {
-					type = "Type"; //$NON-NLS-1$
-					name = ((IMemberDescriptor) element).getName();
-					break;
-				}
-			}
-			StringBuffer buffer = new StringBuffer();
-			buffer.append(type == null ? "Unknown" : type).append(" Node: ").append(name == null ? "Unknown Name" : name); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			buffer.append("\nVisibility: ").append(Util.getVisibilityKind(visibility)); //$NON-NLS-1$
-			buffer.append("\nRestrictions: ").append(Util.getRestrictionKind(restrictions)); //$NON-NLS-1$
-			if(parent != null) {
-				String pname = parent.element.getElementType() == IElementDescriptor.T_PACKAGE ? 
-						((IPackageDescriptor)parent.element).getName() : ((IMemberDescriptor)parent.element).getName();
-				buffer.append("\nParent: ").append(parent == null ? null : pname); //$NON-NLS-1$
-			}
-			return buffer.toString();
-		}
-
-		/* (non-Javadoc)
-		 * @see java.lang.Comparable#compareTo(java.lang.Object)
-		 */
-		public int compareTo(Object o) {
-			if (o instanceof ManifestNode) {
-				ManifestNode node = (ManifestNode) o;
-				return ((ElementDescriptorImpl)element).compareTo(node.element);
-			}
-			return -1;
-		}
-		
-		/**
-		 * Ensure this node is up to date. Default implementation does
-		 * nothing. Subclasses should override as required.
-		 * 
-		 * Returns the resulting node if the node is valid, or <code>null</code>
-		 * if the node no longer exists.
-		 * 
-		 * @return up to date node, or <code>null</code> if no longer exists
-		 */
-		protected ManifestNode refresh() {
-			return this;
-		}
-		
-		/**
-		 * Persists this node as a child of the given element.
-		 * 
-		 * @param document XML document
-		 * @param parent parent element in the document
-		 * @param component component the description is for or <code>null</code>
-		 */
-		void persistXML(Document document, Element parent) {
-			if(restrictions == RestrictionModifiers.NO_RESTRICTIONS) { 
-				return;
-			}
-			switch (element.getElementType()) {
-			case IElementDescriptor.T_METHOD:
-				IMethodDescriptor md = (IMethodDescriptor) element;
-				Element method = document.createElement(IApiXmlConstants.ELEMENT_METHOD);
-				method.setAttribute(IApiXmlConstants.ATTR_NAME, md.getName());
-				method.setAttribute(IApiXmlConstants.ATTR_SIGNATURE, md.getSignature());
-				persistAnnotations(method);
-				parent.appendChild(method);
-				break;
-			case IElementDescriptor.T_FIELD:
-				IFieldDescriptor fd = (IFieldDescriptor) element;
-				Element field = document.createElement(IApiXmlConstants.ELEMENT_FIELD);
-				field.setAttribute(IApiXmlConstants.ATTR_NAME, fd.getName());
-				persistAnnotations(field);
-				parent.appendChild(field);
-				break;
-			}
-		}
-		
-		/**
-		 * Adds visibility and restrictions to the XML element.
-		 * 
-		 * @param element XML element to annotate
-		 * @param component the component the description is for or <code>null</code>
-		 */
-		void persistAnnotations(Element element) {
-			element.setAttribute(IApiXmlConstants.ATTR_VISIBILITY, Integer.toString(visibility));
-			element.setAttribute(IApiXmlConstants.ATTR_RESTRICTIONS, Integer.toString(restrictions));
-		}
-	}
-		
-	/**
 	 * This is a map of component names to a map of package names to package node objects represented as:
 	 * <pre>
 	 * HashMap<IElementDescriptor(package), ManifestNode(package)>
 	 * </pre>
 	 */
-	protected HashMap fPackageMap = new HashMap();
+	public HashMap fPackageMap = new HashMap();
 
 	/**
 	 * Constructs an API description owned by the specified component.
@@ -226,6 +81,7 @@
 	 * is no specific owner.
 	 */
 	public ApiDescription(String owningComponentId) {
+		super(null, owningComponentId, IApiElement.COMPONENT);
 		fOwningComponentId = owningComponentId;
 	}
 
@@ -444,7 +300,35 @@
 	 * 
 	 * @return
 	 */
-	protected synchronized boolean isModified() {
+	public synchronized boolean isModified() {
 		return fModified;
 	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#getChildren()
+	 */
+	public IApiElement[] getChildren() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#hasChildren()
+	 */
+	public boolean hasChildren() throws CoreException {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return null;
+	}
 }
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiElement.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiElement.java
new file mode 100644
index 0000000..d9a58fd
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiElement.java
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.pde.api.tools.internal.ApiModelManager;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+
+/**
+ * Base implementation of {@link IApiElement}
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public abstract class ApiElement implements IApiElement {
+
+	/**
+	 * The name of the element
+	 */
+	private String fName = null;
+	/**
+	 * The parent {@link IApiElement}
+	 */
+	private IApiElement fParent = null;
+	/**
+	 * The type of the element
+	 * @see IApiElement for complete listing of element types
+	 */
+	private int fType = -1;
+	
+	/**
+	 * Constructor
+	 * @param parent the parent element
+	 * @param name the name of the element
+	 * @param type the type of the element
+	 * @see IApiElement for type constants
+	 */
+	protected ApiElement(IApiElement parent, String name, int type) {
+		fParent = parent;
+		fName = name;
+		fType = type;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getName()
+	 */
+	public String getName() {
+		return fName;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getParent()
+	 */
+	public IApiElement getParent() {
+		return fParent;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getAncestor(int)
+	 */
+	public IApiElement getAncestor(int ancestorType) {
+		IApiElement element = this;
+		while(element != null && element.getType() != ancestorType) {
+			element  = element.getParent();
+		}
+		return element;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getType()
+	 */
+	public int getType() {
+		return fType;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getDescriptor()
+	 */
+	public String getDescriptor() {
+		return fName;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getPath()
+	 */
+	public IPath getPath() {
+		return null;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getResource()
+	 */
+	public IResource getResource() {
+		return null;
+	}
+	
+	/**
+	 * Returns the current {@link ApiElementInfo} for this element. If there
+	 * is no info currently in the cache, a call to createElementInfo() is made
+	 * to lazily create an info object. If new infos are created they will automatically
+	 * be added to the cache.
+	 * @return the {@link ApiElementInfo} for this element
+	 */
+	public ApiElementInfo getElementInfo() {
+		ApiModelManager manager = ApiModelManager.getManager();
+		ApiElementInfo info = manager.getInfo(this);
+		if(info != null) {
+			return info;
+		}
+		info = createElementInfo();
+		manager.addInfo(this, info);
+ 		return info;
+	}
+	
+	/**
+	 * Creates and return the new element info for this element.
+	 * This method is called if a call to getElementInfo(..) returns <code>null</code>
+	 * 
+	 * @return the new {@link ApiElementInfo} for this element
+	 */
+	public abstract ApiElementInfo createElementInfo();
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiField.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiField.java
new file mode 100644
index 0000000..9f603aa
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiField.java
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiField;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiType;
+
+/**
+ * Base implementation of {@link IApiField}
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiField extends ApiMember implements IApiField {
+
+	/**
+	 * Constructor
+	 * @param parent
+	 * @param name
+	 * @param flags
+	 */
+	protected ApiField(IApiElement parent, String name, int flags) {
+		super(parent, name, IApiElement.FIELD, flags);
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiField#isEnumConstant()
+	 */
+	public boolean isEnumConstant() throws CoreException {
+		return (Flags.isEnum(getFlags()));
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiMember#getDeclaringType()
+	 */
+	public IApiType getDeclaringType() throws CoreException {
+		return (IApiType) getParent();
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getPath()
+	 */
+	public IPath getPath() {
+		return getParent().getPath();
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getResource()
+	 */
+	public IResource getResource() {
+		return getParent().getResource();
+	}
+	
+	/**
+	 * @see java.lang.Object#hashCode()
+	 */
+	public int hashCode() {
+		IApiType type = null;
+		try {
+			type = getDeclaringType();
+		}
+		catch(CoreException ce) {}
+		return getName().hashCode() + (type == null ? 0 : type.hashCode());
+	}	
+	
+	/**
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	public boolean equals(Object obj) {
+		if (obj instanceof IApiField) {
+			IApiField field = (IApiField) obj;
+			IApiType type = null, ftype = null;
+			try {
+				type = getDeclaringType();
+				ftype = field.getDeclaringType();
+			}
+			catch(CoreException ce) {}
+			return getName().equals(field.getName()) && (type == null ? true : type.equals(ftype));
+		}
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return null;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiInitializer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiInitializer.java
new file mode 100644
index 0000000..86c4b20
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiInitializer.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiInitializer;
+
+/**
+ * Base implementation of {@link IApiInitializer}
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiInitializer extends ApiMember implements IApiInitializer {
+
+	/**
+	 * Constructor
+	 * @param parent
+	 * @param name
+	 * @param flags
+	 */
+	protected ApiInitializer(IApiElement parent, String name, int flags) {
+		super(parent, name, IApiElement.INITIALIZER, flags);
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return null;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiMember.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiMember.java
new file mode 100644
index 0000000..c15193b
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiMember.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiMember;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiType;
+
+/**
+ * Base implementation of {@link IApiMember}
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public abstract class ApiMember extends ApiElement implements IApiMember {
+
+	private int fFlags = -1;
+	
+	protected ApiMember(IApiElement parent, String name, int type, int flags) {
+		super(parent, name, type);
+		fFlags = flags;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiMember#getDeclaringType()
+	 */
+	public IApiType getDeclaringType() throws CoreException {
+		IApiElement tparent = getParent();
+		while(tparent.getParent() != null && tparent.getType() == IApiElement.TYPE) {
+			tparent = tparent.getParent();
+		}
+		return (IApiType)tparent;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiMember#getFlags()
+	 */
+	public int getFlags() throws CoreException {
+		return fFlags;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#getChildren()
+	 */
+	public IApiElement[] getChildren() throws CoreException {
+		return new IApiElement[0];
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#hasChildren()
+	 */
+	public boolean hasChildren() throws CoreException {
+		return false;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getResource()
+	 */
+	public IResource getResource() {
+		return null;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getPath()
+	 */
+	public IPath getPath() {
+		return null;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiMethod.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiMethod.java
new file mode 100644
index 0000000..4eee41a
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiMethod.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiMethod;
+import org.eclipse.pde.api.tools.internal.util.Util;
+
+/**
+ * Base implementation of {@link IApiMethod}
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiMethod extends ApiMember implements IApiMethod {
+
+	private String fSignature = null;
+	
+	/**
+	 * Constructor
+	 * @param parent
+	 * @param name
+	 * @param signature
+	 * @param flags
+	 */
+	protected ApiMethod(IApiElement parent, String name, String signature, int flags) {
+		super(parent, name, IApiElement.METHOD, flags);
+		fSignature = signature;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiMethod#getSignature()
+	 */
+	public String getSignature() throws CoreException {
+		return fSignature;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiMethod#isConstructor()
+	 */
+	public boolean isConstructor() throws CoreException {
+		return getName().equals("<init>"); //$NON-NLS-1$
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiMethod#isSimilar(org.eclipse.pde.api.tools.internal.provisional.model.IApiMethod)
+	 */
+	public boolean isSimilar(IApiMethod method) {
+		try {
+			return Util.matchesSignatures(getSignature(), method.getSignature());
+		}
+		catch(CoreException ce) {}
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getDescriptor()
+	 */
+	public String getDescriptor() {
+		return fSignature;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return null;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiPackageFragment.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiPackageFragment.java
new file mode 100644
index 0000000..d9bcdd7
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiPackageFragment.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiPackageFragment;
+
+/**
+ * Base implementation of {@link IApiPackageFragment}
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiPackageFragment extends ApiElement implements IApiPackageFragment {
+
+	/**
+	 * Constructor
+	 * @param parent
+	 * @param name
+	 */
+	protected ApiPackageFragment(IApiElement parent, String name) {
+		super(parent, name, IApiElement.PACKAGE);
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#getChildren()
+	 */
+	public IApiElement[] getChildren() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#hasChildren()
+	 */
+	public boolean hasChildren() throws CoreException {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getPath()
+	 */
+	public IPath getPath() {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getResource()
+	 */
+	public IResource getResource() {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return null;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiPackageFragmentRoot.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiPackageFragmentRoot.java
new file mode 100644
index 0000000..d5eb078
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiPackageFragmentRoot.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiPackageFragmentRoot;
+
+/**
+ * Base implementation of {@link IApiPackageFragmentRoot}
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiPackageFragmentRoot extends ApiElement implements IApiPackageFragmentRoot {
+
+	/**
+	 * Constructor
+	 * @param parent
+	 * @param name
+	 */
+	protected ApiPackageFragmentRoot(IApiElement parent, String name) {
+		super(parent, name, IApiElement.PACKAGE_ROOT);
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#getChildren()
+	 */
+	public IApiElement[] getChildren() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#hasChildren()
+	 */
+	public boolean hasChildren() throws CoreException {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return false;
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getPath()
+	 */
+	public IPath getPath() {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getResource()
+	 */
+	public IResource getResource() {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return null;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiResource.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiResource.java
new file mode 100644
index 0000000..83d040e
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiResource.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiResourceInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiResource;
+
+/**
+ * Base implementation of {@link IApiResource}
+ * 
+ * @since 1.0.0
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class ApiResource extends ApiElement implements IApiResource {
+
+	/**
+	 * The backing {@link IResource} handle
+	 */
+	private IResource fResource = null;
+	
+	/**
+	 * Constructor
+	 * @param parent
+	 * @param name
+	 * @param type
+	 */
+	public ApiResource(IApiElement parent, IResource resource) {
+		super(parent, resource.getName(), IApiElement.RESOURCE);
+		fResource = resource;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return fResource != null && fResource.exists();
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getPath()
+	 */
+	public IPath getPath() {
+		if(fResource != null && fResource.exists()) {
+			return fResource.getFullPath();
+		}
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getResource()
+	 */
+	public IResource getResource() {
+		return fResource;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#getChildren()
+	 */
+	public IApiElement[] getChildren() throws CoreException {
+		return ((ApiResourceInfo)getElementInfo()).getChildren();
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#hasChildren()
+	 */
+	public boolean hasChildren() throws CoreException {
+		return ((ApiResourceInfo)getElementInfo()).hasChildren();
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return new ApiResourceInfo(this, fResource);
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiType.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiType.java
new file mode 100644
index 0000000..ed7589e
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiType.java
@@ -0,0 +1,160 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiField;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiMethod;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiPackageFragment;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiType;
+
+/**
+ * Base implementation of {@link IApiType}
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiType extends ApiMember implements IApiType {
+
+	/**
+	 * Constructor
+	 * @param parent
+	 * @param name
+	 * @param flags
+	 */
+	protected ApiType(IApiElement parent, String name, int flags) {
+		super(parent, name, IApiElement.TYPE, flags);
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#getFields()
+	 */
+	public IApiField[] getFields() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#getFullyQualifiedName()
+	 */
+	public String getFullyQualifiedName() {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#getMethods()
+	 */
+	public IApiMethod[] getMethods() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#getPackageFragment()
+	 */
+	public IApiPackageFragment getPackageFragment() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#getSuperClass()
+	 */
+	public IApiType getSuperClass() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#getSuperInterfaces()
+	 */
+	public IApiType[] getSuperInterfaces() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#getTypes()
+	 */
+	public IApiType[] getTypes() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#isAnnotation()
+	 */
+	public boolean isAnnotation() throws CoreException {
+		return Flags.isAnnotation(getFlags());
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#isClass()
+	 */
+	public boolean isClass() throws CoreException {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#isEnum()
+	 */
+	public boolean isEnum() throws CoreException {
+		return Flags.isEnum(getFlags());
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#isInterface()
+	 */
+	public boolean isInterface() throws CoreException {
+		return Flags.isInterface(getFlags());
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiType#isMember()
+	 */
+	public boolean isMember() throws CoreException {
+		IApiElement parent = getParent();
+		return (parent != null && parent.getType() == IApiElement.TYPE);
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#getChildren()
+	 */
+	public IApiElement[] getChildren() throws CoreException {
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiParent#hasChildren()
+	 */
+	public boolean hasChildren() throws CoreException {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#exists()
+	 */
+	public boolean exists() {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.provisional.model.IApiElement#getDescriptor()
+	 */
+	public String getDescriptor() {
+		return getFullyQualifiedName();
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.ApiElement#createElementInfo()
+	 */
+	public ApiElementInfo createElementInfo() {
+		return null;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ApiElementCache.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ApiElementCache.java
new file mode 100644
index 0000000..f0f9b29
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ApiElementCache.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.cache;
+
+/**
+ * A cache of loaded {@link IApiElement} infos
+ * 
+ * @since 1.0.0
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public final class ApiElementCache extends OverflowingLRUCache {
+
+	/**
+	 * Constructor
+	 * @param size
+	 */
+	public ApiElementCache(int size) {
+		super(size);
+	}
+
+	/**
+	 * Constructor
+	 * @param size
+	 * @param overflow
+	 */
+	public ApiElementCache(int size, int overflow) {
+		super(size, overflow);
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.OverflowingLRUCache#close(org.eclipse.jdt.internal.core.util.LRUCache.LRUCacheEntry)
+	 */
+	protected boolean close(LRUCacheEntry entry) {
+		return true;
+	}
+
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.OverflowingLRUCache#newInstance(int, int)
+	 */
+	protected LRUCache newInstance(int size, int newOverflow) {
+		return new ApiElementCache(size, newOverflow);
+	}
+
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ApiToolsCache.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ApiToolsCache.java
new file mode 100644
index 0000000..05cb7d6
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ApiToolsCache.java
@@ -0,0 +1,173 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.cache;
+
+import java.util.HashMap;
+
+import org.eclipse.pde.api.tools.internal.model.infos.ApiElementInfo;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+
+/**
+ * Cache of {@link IApiElement} infos, API descriptions and {@link IApiBaseline}s
+ * 
+ * @since 1.0.0
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public final class ApiToolsCache {
+	
+	public static final int DEFAULT_CACHE_SIZE = 20;
+	public static final int DEFAULT_MEMBER_CACHE_SIZE = 100;
+	
+	/**
+	 * The cache of {@link IApiDescription}s
+	 */
+	private ApiElementCache fDescriptionCache = new ApiElementCache(DEFAULT_CACHE_SIZE);
+	
+	/**
+	 * The cache of {@link IApiComponent} infos
+	 */
+	private ApiElementCache fComponentCache = new ApiElementCache(DEFAULT_CACHE_SIZE);
+	
+	/**
+	 * The cache of {@link IApiMember} infos
+	 */
+	private HashMap fMemberCache = new HashMap(DEFAULT_MEMBER_CACHE_SIZE);
+
+	/**
+	 * Returns the cached {@link IApiDescription} for the given component or <code>null</code>
+	 * if there is no {@link IApiDescription} cached for the given component.
+	 * 
+	 * @param component
+	 * @return the cached {@link IApiDescription} for the given component or <code>null</code> if none.
+	 */
+	public IApiDescription getApiDescription(IApiComponent component) {
+		return (IApiDescription) fDescriptionCache.get(component);
+	}
+	
+	/**
+	 * Adds a new cached {@link IApiDescription} for the given component
+	 * @param component
+	 * @param description
+	 */
+	public void addApiDescription(IApiComponent component, IApiDescription description) {
+		fDescriptionCache.put(component, description);
+	}
+	
+	/**
+	 * Removes the cached {@link IApiDescription} for the given component and returns 
+	 * the cached description, or <code>null</code> if nothing was removed
+	 * @param component
+	 * @return the removed {@link IApiDescription} or <code>null</code> if nothing was removed
+	 */
+	public IApiDescription removeApiDescription(IApiComponent component) {
+		return (IApiDescription) fDescriptionCache.remove(component);
+	}
+	
+	/**
+	 * Returns the {@link ApiElementInfo} for the given {@link IApiElement} or <code>null</code>
+	 * if the info was not in the cache
+	 * @param element
+	 * @return the {@link ApiElementInfo} or <code>null</code>
+	 */
+	public ApiElementInfo getInfo(IApiElement element) {
+		switch(element.getType()) {
+			case IApiElement.COMPONENT: {
+				return (ApiElementInfo) fComponentCache.get(element);
+			}
+			case IApiElement.PACKAGE_ROOT: {
+				break;
+			}
+			case IApiElement.PACKAGE: {
+				break;
+			}
+			case IApiElement.TYPE: {
+				break;
+			}
+			case IApiElement.INITIALIZER:
+			case IApiElement.FIELD: 
+			case IApiElement.METHOD: {
+				return (ApiElementInfo) fMemberCache.get(element);
+			}
+			case IApiElement.RESOURCE: {
+				break;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Adds new {@link ApiElementInfo}s to the cache
+	 * @param element
+	 * @param info
+	 */
+	public void putInfo(IApiElement element, ApiElementInfo info) {
+		switch(element.getType()) {
+			case IApiElement.COMPONENT: {
+				fComponentCache.put(element, info);
+				break;
+			}
+			case IApiElement.PACKAGE_ROOT: {
+				break;
+			}
+			case IApiElement.PACKAGE: {
+				break;
+			}
+			case IApiElement.TYPE: {
+				break;
+			}
+			case IApiElement.INITIALIZER:
+			case IApiElement.FIELD: 
+			case IApiElement.METHOD: {
+				fMemberCache.put(element, info);
+				break;
+			}
+			case IApiElement.RESOURCE: {
+				break;
+			}
+		}
+	}
+	
+	/**
+	 * Removes the {@link ApiElementInfo} from the cache for the specified 
+	 * {@link IApiElement}. Returns the removed info or <code>null</code> if there 
+	 * was nothing removed.
+	 * 
+	 * @param element
+	 * @return the removed {@link ApiElementInfo} or <code>null</code> if nothing was removed
+	 */
+	public ApiElementInfo removeInfo(IApiElement element) {
+		switch(element.getType()) {
+			case IApiElement.COMPONENT: {
+				return (ApiElementInfo) fComponentCache.remove(element);
+			}
+			case IApiElement.PACKAGE_ROOT: {
+				break;
+			}
+			case IApiElement.PACKAGE: {
+				break;
+			}
+			case IApiElement.TYPE: {
+				break;
+			}
+			case IApiElement.INITIALIZER:
+			case IApiElement.FIELD: 
+			case IApiElement.METHOD: {
+				return (ApiElementInfo) fMemberCache.remove(element);
+			}
+			case IApiElement.RESOURCE: {
+				break;
+			}
+		}
+		return null;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ICacheEnumeration.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ICacheEnumeration.java
new file mode 100644
index 0000000..b2003a2
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ICacheEnumeration.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.cache;
+
+import java.util.Enumeration;
+
+/**
+ * The <code>ICacheEnumeration</code> is used to iterate over both the keys
+ * and values in an LRUCache.  The <code>getValue()</code> method returns the
+ * value of the last key to be retrieved using <code>nextElement()</code>.
+ * The <code>nextElement()</code> method must be called before the
+ * <code>getValue()</code> method.
+ *
+ * <p>The iteration can be made efficient by making use of the fact that values in
+ * the cache (instances of <code>LRUCacheEntry</code>), know their key.  For this reason,
+ * Hashtable lookups don't have to be made at each step of the iteration.
+ *
+ * <p>Modifications to the cache must not be performed while using the
+ * enumeration.  Doing so will lead to an illegal state.
+ *
+ * @see LRUCache
+ * 
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ICacheEnumeration extends Enumeration {
+	/**
+	 * Returns the value of the previously accessed key in the enumeration.
+	 * Must be called after a call to nextElement().
+	 *
+	 * @return Value of current cache entry
+	 */
+	public Object getValue();
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ILRUCacheable.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ILRUCacheable.java
new file mode 100644
index 0000000..78bee92
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ILRUCacheable.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.cache;
+
+/**
+ * Types implementing this interface can occupy a variable amount of space
+ * in an LRUCache.  Cached items that do not implement this interface are
+ * considered to occupy one unit of space.
+ *
+ * @see LRUCache
+ * 
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface ILRUCacheable {
+	/**
+	 * Returns the space the receiver consumes in an LRU Cache.  The default space
+	 * value is 1.
+	 *
+	 * @return int Amount of cache space taken by the receiver
+	 */
+	public int getCacheFootprint();
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/LRUCache.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/LRUCache.java
new file mode 100644
index 0000000..c61734c
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/LRUCache.java
@@ -0,0 +1,545 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.cache;
+
+import java.text.NumberFormat;
+import java.util.Enumeration;
+import java.util.Hashtable;
+
+import org.eclipse.pde.api.tools.internal.model.ApiElement;
+
+
+/**
+ * The <code>LRUCache</code> is a hashtable that stores a finite number of elements.
+ * When an attempt is made to add values to a full cache, the least recently used values
+ * in the cache are discarded to make room for the new values as necessary.
+ *
+ * <p>The data structure is based on the LRU virtual memory paging scheme.
+ *
+ * <p>Objects can take up a variable amount of cache space by implementing
+ * the <code>ILRUCacheable</code> interface.
+ *
+ * <p>This implementation is NOT thread-safe.  Synchronization wrappers would
+ * have to be added to ensure atomic insertions and deletions from the cache.
+ * 
+ * @since 1.0.0
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public class LRUCache implements Cloneable {
+
+	/**
+	 * This type is used internally by the LRUCache to represent entries
+	 * stored in the cache.
+	 * It is static because it does not require a pointer to the cache
+	 * which contains it.
+	 *
+	 * @see LRUCache
+	 */
+	protected static class LRUCacheEntry {
+
+		/**
+		 * Hash table key
+		 */
+		public Object key;
+
+		/**
+		 * Hash table value (an LRUCacheEntry object)
+		 */
+		public Object value;
+
+		/**
+		 * Time value for queue sorting
+		 */
+		public int timestamp;
+
+		/**
+		 * Cache footprint of this entry
+		 */
+		public int space;
+
+		/**
+		 * Previous entry in queue
+		 */
+		public LRUCacheEntry previous;
+
+		/**
+		 * Next entry in queue
+		 */
+		public LRUCacheEntry next;
+
+		/**
+		 * Creates a new instance of the receiver with the provided values
+		 * for key, value, and space.
+		 */
+		public LRUCacheEntry (Object key, Object value, int space) {
+			this.key = key;
+			this.value = value;
+			this.space = space;
+		}
+
+		/**
+		 * Returns a String that represents the value of this object.
+		 */
+		public String toString() {
+
+			return "LRUCacheEntry [" + this.key + "-->" + this.value + "]"; //$NON-NLS-3$ //$NON-NLS-1$ //$NON-NLS-2$
+		}
+	}
+
+	/**
+	 * Amount of cache space used so far
+	 */
+	protected int currentSpace;
+
+	/**
+	 * Maximum space allowed in cache
+	 */
+	protected int spaceLimit;
+
+	/**
+	 * Counter for handing out sequential time-stamps
+	 */
+	protected int timestampCounter;
+
+	/**
+	 * Hash table for fast random access to cache entries
+	 */
+	protected Hashtable entryTable;
+
+	/**
+	 * Start of queue (most recently used entry)
+	 */
+	protected LRUCacheEntry entryQueue;
+
+	/**
+	 * End of queue (least recently used entry)
+	 */
+	protected LRUCacheEntry entryQueueTail;
+
+	/**
+	 * Default amount of space in the cache
+	 * TODO what should our default space limit be?
+	 */
+	protected static final int DEFAULT_SPACELIMIT = 100;
+	
+	/**
+	 * Creates a new cache.  Size of cache is defined by
+	 * <code>DEFAULT_SPACELIMIT</code>.
+	 */
+	public LRUCache() {
+		this(DEFAULT_SPACELIMIT);
+	}
+	
+	/**
+	 * Creates a new cache.
+	 * @param size Size of Cache
+	 */
+	public LRUCache(int size) {
+		this.timestampCounter = this.currentSpace = 0;
+		this.entryQueue = this.entryQueueTail = null;
+		this.entryTable = new Hashtable(size);
+		this.spaceLimit = size;
+	}
+	
+	/**
+	 * Returns a new cache containing the same contents.
+	 *
+	 * @return New copy of object.
+	 */
+	public Object clone() {
+
+		LRUCache newCache = newInstance(this.spaceLimit);
+		LRUCacheEntry qEntry;
+
+		/* Preserve order of entries by copying from oldest to newest */
+		qEntry = this.entryQueueTail;
+		while (qEntry != null) {
+			newCache.privateAdd (qEntry.key, qEntry.value, qEntry.space);
+			qEntry = qEntry.previous;
+		}
+		return newCache;
+	}
+	
+	/**
+	 * TODO adjust for new spacing considerations
+	 * @return
+	 */
+	public double fillingRatio() {
+		return (this.currentSpace) * 100.0 / this.spaceLimit;
+	}
+	
+	/**
+	 * Flushes all entries from the cache.
+	 */
+	public void flush() {
+
+		this.currentSpace = 0;
+		LRUCacheEntry entry = this.entryQueueTail; // Remember last entry
+		this.entryTable = new Hashtable();  // Clear it out
+		this.entryQueue = this.entryQueueTail = null;
+		while (entry != null) {  // send deletion notifications in LRU order
+			entry = entry.previous;
+		}
+	}
+	
+	/**
+	 * Flushes the given entry from the cache.  Does nothing if entry does not
+	 * exist in cache.
+	 *
+	 * @param key Key of object to flush
+	 */
+	public void flush (Object key) {
+
+		LRUCacheEntry entry;
+
+		entry = (LRUCacheEntry) this.entryTable.get(key);
+
+		/* If entry does not exist, return */
+		if (entry == null) return;
+
+		privateRemoveEntry (entry, false);
+	}
+	
+	/*
+	 * Answers the existing key that is equals to the given key.
+	 * If the key is not in the cache, returns the given key
+	 */
+	public Object getKey(Object key) {
+		LRUCacheEntry entry = (LRUCacheEntry) this.entryTable.get(key);
+		if (entry == null) {
+			return key;
+		}
+		return entry.key;
+	}
+	
+	/**
+	 * Answers the value in the cache at the given key.
+	 * If the value is not in the cache, returns null
+	 *
+	 * @param key Hash table key of object to retrieve
+	 * @return retrieved object, or null if object does not exist
+	 */
+	public Object get(Object key) {
+
+		LRUCacheEntry entry = (LRUCacheEntry) this.entryTable.get(key);
+		if (entry == null) {
+			return null;
+		}
+
+		updateTimestamp (entry);
+		return entry.value;
+	}
+	/**
+	 * Returns the amount of space that is current used in the cache.
+	 */
+	public int getCurrentSpace() {
+		return this.currentSpace;
+	}
+	/**
+	 * Returns the maximum amount of space available in the cache.
+	 */
+	public int getSpaceLimit() {
+		return this.spaceLimit;
+	}
+	/**
+	 * Returns an Enumeration of the keys currently in the cache.
+	 */
+	public Enumeration keys() {
+
+		return this.entryTable.keys();
+	}
+	/**
+	 * Returns an enumeration that iterates over all the keys and values
+	 * currently in the cache.
+	 */
+	public ICacheEnumeration keysAndValues() {
+		return new ICacheEnumeration() {
+
+			Enumeration values = LRUCache.this.entryTable.elements();
+			LRUCacheEntry entry;
+
+			public boolean hasMoreElements() {
+				return this.values.hasMoreElements();
+			}
+
+			public Object nextElement() {
+				this.entry = (LRUCacheEntry) this.values.nextElement();
+				return this.entry.key;
+			}
+
+			public Object getValue() {
+				if (this.entry == null) {
+					throw new java.util.NoSuchElementException();
+				}
+				return this.entry.value;
+			}
+		};
+	}
+	/**
+	 * Ensures there is the specified amount of free space in the receiver,
+	 * by removing old entries if necessary.  Returns true if the requested space was
+	 * made available, false otherwise.
+	 *
+	 * @param space Amount of space to free up
+	 */
+	protected boolean makeSpace (int space) {
+
+		int limit;
+
+		limit = getSpaceLimit();
+
+		/* if space is already available */
+		if (this.currentSpace + space <= limit) {
+			return true;
+		}
+
+		/* if entry is too big for cache */
+		if (space > limit) {
+			return false;
+		}
+
+		/* Free up space by removing oldest entries */
+		while (this.currentSpace + space > limit && this.entryQueueTail != null) {
+			privateRemoveEntry (this.entryQueueTail, false);
+		}
+		return true;
+	}
+	/**
+	 * Returns a new LRUCache instance
+	 */
+	protected LRUCache newInstance(int size) {
+		return new LRUCache(size);
+	}
+	/**
+	 * Answers the value in the cache at the given key.
+	 * If the value is not in the cache, returns null
+	 *
+	 * This function does not modify time-stamps.
+	 */
+	public Object peek(Object key) {
+
+		LRUCacheEntry entry = (LRUCacheEntry) this.entryTable.get(key);
+		if (entry == null) {
+			return null;
+		}
+		return entry.value;
+	}
+	/**
+	 * Adds an entry for the given key/value/space.
+	 */
+	protected void privateAdd (Object key, Object value, int space) {
+
+		LRUCacheEntry entry;
+
+		entry = new LRUCacheEntry(key, value, space);
+		privateAddEntry (entry, false);
+	}
+	/**
+	 * Adds the given entry from the receiver.
+	 * @param shuffle Indicates whether we are just shuffling the queue
+	 * (in which case, the entry table is not modified).
+	 */
+	protected void privateAddEntry (LRUCacheEntry entry, boolean shuffle) {
+
+		if (!shuffle) {
+			this.entryTable.put (entry.key, entry);
+			this.currentSpace += entry.space;
+		}
+
+		entry.timestamp = this.timestampCounter++;
+		entry.next = this.entryQueue;
+		entry.previous = null;
+
+		if (this.entryQueue == null) {
+			/* this is the first and last entry */
+			this.entryQueueTail = entry;
+		} else {
+			this.entryQueue.previous = entry;
+		}
+
+		this.entryQueue = entry;
+	}
+	/**
+	 * Removes the entry from the entry queue.
+	 * @param shuffle indicates whether we are just shuffling the queue
+	 * (in which case, the entry table is not modified).
+	 */
+	protected void privateRemoveEntry (LRUCacheEntry entry, boolean shuffle) {
+
+		LRUCacheEntry previous, next;
+
+		previous = entry.previous;
+		next = entry.next;
+
+		if (!shuffle) {
+			this.entryTable.remove(entry.key);
+			this.currentSpace -= entry.space;
+		}
+
+		/* if this was the first entry */
+		if (previous == null) {
+			this.entryQueue = next;
+		} else {
+			previous.next = next;
+		}
+
+		/* if this was the last entry */
+		if (next == null) {
+			this.entryQueueTail = previous;
+		} else {
+			next.previous = previous;
+		}
+	}
+	/**
+	 * Sets the value in the cache at the given key. Returns the value.
+	 *
+	 * @param key Key of object to add.
+	 * @param value Value of object to add.
+	 * @return added value.
+	 */
+	public Object put(Object key, Object value) {
+
+		int newSpace, oldSpace, newTotal;
+		LRUCacheEntry entry;
+
+		/* Check whether there's an entry in the cache */
+		newSpace = spaceFor(value);
+		entry = (LRUCacheEntry) this.entryTable.get (key);
+
+		if (entry != null) {
+
+			/**
+			 * Replace the entry in the cache if it would not overflow
+			 * the cache.  Otherwise flush the entry and re-add it so as
+			 * to keep cache within budget
+			 */
+			oldSpace = entry.space;
+			newTotal = getCurrentSpace() - oldSpace + newSpace;
+			if (newTotal <= getSpaceLimit()) {
+				updateTimestamp (entry);
+				entry.value = value;
+				entry.space = newSpace;
+				this.currentSpace = newTotal;
+				return value;
+			} else {
+				privateRemoveEntry (entry, false);
+			}
+		}
+		if (makeSpace(newSpace)) {
+			privateAdd (key, value, newSpace);
+		}
+		return value;
+	}
+	/**
+	 * Removes and returns the value in the cache for the given key.
+	 * If the key is not in the cache, returns null.
+	 *
+	 * @param key Key of object to remove from cache.
+	 * @return Value removed from cache.
+	 */
+	public Object removeKey (Object key) {
+
+		LRUCacheEntry entry = (LRUCacheEntry) this.entryTable.get(key);
+		if (entry == null) {
+			return null;
+		}
+		Object value = entry.value;
+		privateRemoveEntry (entry, false);
+		return value;
+	}
+	/**
+	 * Sets the maximum amount of space that the cache can store
+	 *
+	 * @param limit Number of units of cache space
+	 */
+	public void setSpaceLimit(int limit) {
+		if (limit < this.spaceLimit) {
+			makeSpace(this.spaceLimit - limit);
+		}
+		this.spaceLimit = limit;
+	}
+	/**
+	 * Returns the space taken by the given value.
+	 */
+	protected int spaceFor (Object value) {
+
+		if (value instanceof ILRUCacheable) {
+			return ((ILRUCacheable) value).getCacheFootprint();
+		} else {
+			return 1;
+		}
+	}
+	/**
+	 * Returns a String that represents the value of this object.  This method
+	 * is for debugging purposes only.
+	 */
+	public String toString() {
+		return
+			toStringFillingRation("LRUCache") + //$NON-NLS-1$
+			toStringContents();
+	}
+
+	/**
+	 * Returns a String that represents the contents of this object.  This method
+	 * is for debugging purposes only.
+	 */
+	protected String toStringContents() {
+		StringBuffer result = new StringBuffer();
+		int length = this.entryTable.size();
+		Object[] unsortedKeys = new Object[length];
+		String[] unsortedToStrings = new String[length];
+		Enumeration e = keys();
+		for (int i = 0; i < length; i++) {
+			Object key = e.nextElement();
+			unsortedKeys[i] = key;
+			unsortedToStrings[i] =
+				(key instanceof ApiElement) ?
+					((ApiElement)key).getName() :
+					key.toString();
+		}
+		ToStringSorter sorter = new ToStringSorter();
+		sorter.sort(unsortedKeys, unsortedToStrings);
+		for (int i = 0; i < length; i++) {
+			String toString = sorter.sortedStrings[i];
+			Object value = get(sorter.sortedObjects[i]);
+			result.append(toString);
+			result.append(" -> "); //$NON-NLS-1$
+			result.append(value);
+			result.append("\n"); //$NON-NLS-1$
+		}
+		return result.toString();
+	}
+
+	public String toStringFillingRation(String cacheName) {
+		StringBuffer buffer = new StringBuffer(cacheName);
+		buffer.append('[');
+		buffer.append(getSpaceLimit());
+		buffer.append("]: "); //$NON-NLS-1$
+		buffer.append(NumberFormat.getInstance().format(fillingRatio()));
+		buffer.append("% full"); //$NON-NLS-1$
+		return buffer.toString();
+	}
+
+	/**
+	 * Updates the timestamp for the given entry, ensuring that the queue is
+	 * kept in correct order.  The entry must exist
+	 */
+	protected void updateTimestamp (LRUCacheEntry entry) {
+
+		entry.timestamp = this.timestampCounter++;
+		if (this.entryQueue != entry) {
+			privateRemoveEntry (entry, true);
+			privateAddEntry (entry, true);
+		}
+		return;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/LRUCacheEnumerator.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/LRUCacheEnumerator.java
new file mode 100644
index 0000000..dbf2483
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/LRUCacheEnumerator.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.cache;
+
+import java.util.Enumeration;
+
+/**
+ *	The <code>LRUCacheEnumerator</code> returns its elements in
+ *	the order they are found in the <code>LRUCache</code>, with the
+ *	most recent elements first.
+ *
+ *	Once the enumerator is created, elements which are later added
+ *	to the cache are not returned by the enumerator.  However,
+ *	elements returned from the enumerator could have been closed
+ *	by the cache.
+ *
+ * @since 1.0.0
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public final class LRUCacheEnumerator implements Enumeration {
+	/**
+	 *	Current element;
+	 */
+	protected LRUEnumeratorElement elementQueue;
+
+	/**
+	 * Element in an LRU enumeration
+	 */
+	public static class LRUEnumeratorElement {
+		/**
+		 *	Value returned by <code>nextElement()</code>;
+		 */
+		public Object value;
+
+		/**
+		 *	Next element
+		 */
+		public LRUEnumeratorElement next;
+
+		/**
+		 * Constructor
+		 */
+		public LRUEnumeratorElement(Object value) {
+			this.value = value;
+		}
+	}
+	
+	/**
+	 *	Creates a CacheEnumerator on the list of <code>LRUEnumeratorElements</code>.
+	 */
+	public LRUCacheEnumerator(LRUEnumeratorElement firstElement) {
+		this.elementQueue = firstElement;
+	}
+	
+	/**
+	 * Returns true if more elements exist.
+	 */
+	public boolean hasMoreElements() {
+		return this.elementQueue != null;
+	}
+	
+	/**
+	 * Returns the next element.
+	 */
+	public Object nextElement() {
+		Object temp = this.elementQueue.value;
+		this.elementQueue = this.elementQueue.next;
+		return temp;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/OverflowingLRUCache.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/OverflowingLRUCache.java
new file mode 100644
index 0000000..5763cac
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/OverflowingLRUCache.java
@@ -0,0 +1,387 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.cache;
+
+import java.util.Enumeration;
+
+/**
+ *	The <code>OverflowingLRUCache</code> is an LRUCache which attempts
+ *	to maintain a size equal or less than its <code>fSpaceLimit</code>
+ *	by removing the least recently used elements.
+ *
+ *	<p>The cache will remove elements which successfully close and all
+ *	elements which are explicitly removed.
+ *
+ *	<p>If the cache cannot remove enough old elements to add new elements
+ *	it will grow beyond <code>fSpaceLimit</code>. Later, it will attempt to
+ *	shrink back to the maximum space limit.
+ *
+ *	The method <code>close</code> should attempt to close the element.  If
+ *	the element is successfully closed it will return true and the element will
+ *	be removed from the cache.  Otherwise the element will remain in the cache.
+ *
+ *	<p>The cache implicitly attempts shrinks on calls to <code>put</code>and
+ *	<code>setSpaceLimit</code>.  Explicitly calling the <code>shrink</code> method
+ *	will also cause the cache to attempt to shrink.
+ *
+ *	<p>The cache calculates the used space of all elements which implement
+ *	<code>ILRUCacheable</code>.  All other elements are assumed to be of size one.
+ *
+ *	<p>Use the <code>#peek(Object)</code> and <code>#disableTimestamps()</code> method to
+ *	circumvent the timestamp feature of the cache.  This feature is intended to be used
+ *	only when the <code>#close(LRUCacheEntry)</code> method causes changes to the cache.
+ *	For example, if a parent closes its children when </code>#close(LRUCacheEntry)</code> is called,
+ *	it should be careful not to change the LRU linked list.  It can be sure it is not causing
+ *	problems by calling <code>#peek(Object)</code> instead of <code>#get(Object)</code> method.
+ *
+ *	@see LRUCache
+ */
+public abstract class OverflowingLRUCache extends LRUCache {
+	/**
+	 * Indicates if the cache has been over filled and by how much.
+	 */
+	protected int overflow = 0;
+	/**
+	 *	Indicates whether or not time-stamps should be updated
+	 */
+	protected boolean timestampsOn = true;
+	/**
+	 *	Indicates how much space should be reclaimed when the cache overflows.
+	 *	Initial load factor of one third.
+	 */
+	protected double loadFactor = 0.333;
+	
+	/**
+	 * Creates a OverflowingLRUCache.
+	 * @param size Size limit of cache.
+	 */
+	public OverflowingLRUCache(int size) {
+		this(size, 0);
+	}
+	
+	/**
+	 * Creates a OverflowingLRUCache.
+	 * @param size Size limit of cache.
+	 * @param overflow Size of the overflow.
+	 */
+	public OverflowingLRUCache(int size, int overflow) {
+		super(size);
+		this.overflow = overflow;
+	}
+	
+	/**
+	 * Returns true if the element is successfully closed and
+	 * removed from the cache, otherwise false.
+	 *
+	 * <p>NOTE: this triggers an external remove from the cache
+	 * by closing the object.
+	 *
+	 */
+	protected abstract boolean close(LRUCacheEntry entry);
+	
+	/**
+	 * Returns a new instance of the receiver.
+	 */
+	protected abstract LRUCache newInstance(int size, int newOverflow);
+	
+	/**
+	 * Returns a new cache containing the same contents.
+	 *
+	 * @return New copy of this object.
+	 */
+	public Object clone() {
+
+		OverflowingLRUCache newCache = (OverflowingLRUCache)newInstance(this.spaceLimit, this.overflow);
+		LRUCacheEntry qEntry;
+
+		/* Preserve order of entries by copying from oldest to newest */
+		qEntry = this.entryQueueTail;
+		while (qEntry != null) {
+			newCache.privateAdd (qEntry.key, qEntry.value, qEntry.space);
+			qEntry = qEntry.previous;
+		}
+		return newCache;
+	}
+	
+	/**
+	 *	Returns an enumerator of the values in the cache with the most
+	 *	recently used first.
+	 */
+	public Enumeration elements() {
+		if (this.entryQueue == null)
+			return new LRUCacheEnumerator(null);
+		LRUCacheEnumerator.LRUEnumeratorElement head =
+			new LRUCacheEnumerator.LRUEnumeratorElement(this.entryQueue.value);
+		LRUCacheEntry currentEntry = this.entryQueue.next;
+		LRUCacheEnumerator.LRUEnumeratorElement currentElement = head;
+		while(currentEntry != null) {
+			currentElement.next = new LRUCacheEnumerator.LRUEnumeratorElement(currentEntry.value);
+			currentElement = currentElement.next;
+
+			currentEntry = currentEntry.next;
+		}
+		return new LRUCacheEnumerator(head);
+	}
+	
+	/**
+	 * @see org.eclipse.pde.api.tools.internal.model.cache.LRUCache#fillingRatio()
+	 */
+	public double fillingRatio() {
+		return (this.currentSpace + this.overflow) * 100.0 / this.spaceLimit;
+	}
+	
+	/**
+	 * For internal testing only.
+	 * This method exposed only for testing purposes!
+	 *
+	 * @return Hashtable of entries
+	 */
+	public java.util.Hashtable getEntryTable() {
+		return this.entryTable;
+	}
+	
+	/**
+	 * Returns the load factor for the cache.  The load factor determines how
+	 * much space is reclaimed when the cache exceeds its space limit.
+	 * @return double
+	 */
+	public double getLoadFactor() {
+		return this.loadFactor;
+	}
+	
+	/**
+	 *	@return The space by which the cache has over-flown.
+	 */
+	public int getOverflow() {
+		return this.overflow;
+	}
+	
+	/**
+	 * Ensures there is the specified amount of free space in the receiver,
+	 * by removing old entries if necessary.  Returns true if the requested space was
+	 * made available, false otherwise.  May not be able to free enough space
+	 * since some elements cannot be removed until they are saved.
+	 *
+	 * @param space Amount of space to free up
+	 */
+	protected boolean makeSpace(int space) {
+
+		int limit = this.spaceLimit;
+		if (this.overflow == 0 && this.currentSpace + space <= limit) {
+			/* if space is already available */
+			return true;
+		}
+
+		/* Free up space by removing oldest entries */
+		int spaceNeeded = (int)((1 - this.loadFactor) * limit);
+		spaceNeeded = (spaceNeeded > space) ? spaceNeeded : space;
+		LRUCacheEntry entry = this.entryQueueTail;
+
+		try {
+			// disable time-stamps update while making space so that the previous and next links are not changed
+			// (by a call to get(Object) for example)
+			this.timestampsOn = false;
+
+			while (this.currentSpace + spaceNeeded > limit && entry != null) {
+				this.privateRemoveEntry(entry, false, false);
+				entry = entry.previous;
+			}
+		} finally {
+			this.timestampsOn = true;
+		}
+
+		/* check again, since we may have acquired enough space */
+		if (this.currentSpace + space <= limit) {
+			this.overflow = 0;
+			return true;
+		}
+
+		/* update fOverflow */
+		this.overflow = this.currentSpace + space - limit;
+		return false;
+	}
+	
+	/**
+	 *	Removes the entry from the entry queue.
+	 *	Calls <code>privateRemoveEntry</code> with the external functionality enabled.
+	 *
+	 * @param shuffle indicates whether we are just shuffling the queue
+	 * (in which case, the entry table is not modified).
+	 */
+	protected void privateRemoveEntry (LRUCacheEntry entry, boolean shuffle) {
+		privateRemoveEntry(entry, shuffle, true);
+	}
+	
+	/**
+	 *	Removes the entry from the entry queue.  If <i>external</i> is true, the entry is removed
+	 *	without checking if it can be removed.  It is assumed that the client has already closed
+	 *	the element it is trying to remove (or will close it promptly).
+	 *
+	 *	If <i>external</i> is false, and the entry could not be closed, it is not removed and the
+	 *	pointers are not changed.
+	 *
+	 *	@param shuffle indicates whether we are just shuffling the queue
+	 *	(in which case, the entry table is not modified).
+	 */
+	protected void privateRemoveEntry(LRUCacheEntry entry, boolean shuffle, boolean external) {
+	
+		if (!shuffle) {
+			if (external) {
+				this.entryTable.remove(entry.key);
+				this.currentSpace -= entry.space;
+			} else {
+				if (!close(entry)) return;
+				// buffer close will recursively call #privateRemoveEntry with external==true
+				// thus entry will already be removed if reaching this point.
+				if (this.entryTable.get(entry.key) == null){
+					return;
+				} else {
+					// basic removal
+					this.entryTable.remove(entry.key);
+					this.currentSpace -= entry.space;
+				}
+			}
+		}
+		LRUCacheEntry previous = entry.previous;
+		LRUCacheEntry next = entry.next;
+	
+		/* if this was the first entry */
+		if (previous == null) {
+			this.entryQueue = next;
+		} else {
+			previous.next = next;
+		}
+		/* if this was the last entry */
+		if (next == null) {
+			this.entryQueueTail = previous;
+		} else {
+			next.previous = previous;
+		}
+	}
+	
+	/**
+	 * Sets the value in the cache at the given key. Returns the value.
+	 *
+	 * @param key Key of object to add.
+	 * @param value Value of object to add.
+	 * @return added value.
+	 */
+	public Object put(Object key, Object value) {
+		/* attempt to rid ourselves of the overflow, if there is any */
+		if (this.overflow > 0)
+			shrink();
+
+		/* Check whether there's an entry in the cache */
+		int newSpace = spaceFor(value);
+		LRUCacheEntry entry = (LRUCacheEntry) this.entryTable.get (key);
+
+		if (entry != null) {
+
+			/**
+			 * Replace the entry in the cache if it would not overflow
+			 * the cache.  Otherwise flush the entry and re-add it so as
+			 * to keep cache within budget
+			 */
+			int oldSpace = entry.space;
+			int newTotal = this.currentSpace - oldSpace + newSpace;
+			if (newTotal <= this.spaceLimit) {
+				updateTimestamp (entry);
+				entry.value = value;
+				entry.space = newSpace;
+				this.currentSpace = newTotal;
+				this.overflow = 0;
+				return value;
+			} else {
+				privateRemoveEntry (entry, false, false);
+			}
+		}
+
+		// attempt to make new space
+		makeSpace(newSpace);
+
+		// add without worring about space, it will
+		// be handled later in a makeSpace call
+		privateAdd (key, value, newSpace);
+
+		return value;
+	}
+	
+	/**
+	 * Removes and returns the value in the cache for the given key.
+	 * If the key is not in the cache, returns null.
+	 *
+	 * @param key Key of object to remove from cache.
+	 * @return Value removed from cache.
+	 */
+	public Object remove(Object key) {
+		return removeKey(key);
+	}
+	
+	/**
+	 * Sets the load factor for the cache.  The load factor determines how
+	 * much space is reclaimed when the cache exceeds its space limit.
+	 * @param newLoadFactor double
+	 * @throws IllegalArgumentException when the new load factor is not in (0.0, 1.0]
+	 */
+	public void setLoadFactor(double newLoadFactor) throws IllegalArgumentException {
+		if(newLoadFactor <= 1.0 && newLoadFactor > 0.0)
+			this.loadFactor = newLoadFactor;
+		else
+			throw new IllegalArgumentException("Incorrect load factor"); //$NON-NLS-1$
+	}
+	
+	/**
+	 * Sets the maximum amount of space that the cache can store
+	 *
+	 * @param limit Number of units of cache space
+	 */
+	public void setSpaceLimit(int limit) {
+		if (limit < this.spaceLimit) {
+			makeSpace(this.spaceLimit - limit);
+		}
+		this.spaceLimit = limit;
+	}
+	/**
+	 * Attempts to shrink the cache if it has over-flown.
+	 * Returns true if the cache shrinks to less than or equal to <code>fSpaceLimit</code>.
+	 */
+	public boolean shrink() {
+		if (this.overflow > 0)
+			return makeSpace(0);
+		return true;
+	}
+	
+	/**
+	 * Returns a String that represents the value of this object.  This method
+	 * is for debugging purposes only.
+	 */
+	public String toString() {
+		return
+			toStringFillingRation("OverflowingLRUCache ") + //$NON-NLS-1$
+			toStringContents();
+	}
+	
+	/**
+	 * Updates the timestamp for the given entry, ensuring that the queue is
+	 * kept in correct order.  The entry must exist.
+	 *
+	 * <p>This method will do nothing if time-stamps have been disabled.
+	 */
+	protected void updateTimestamp(LRUCacheEntry entry) {
+		if (this.timestampsOn) {
+			entry.timestamp = this.timestampCounter++;
+			if (this.entryQueue != entry) {
+				this.privateRemoveEntry(entry, true);
+				privateAddEntry(entry, true);
+			}
+		}
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ToStringSorter.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ToStringSorter.java
new file mode 100644
index 0000000..bb91947
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/cache/ToStringSorter.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.cache;
+
+/**
+ * The SortOperation takes a collection of objects and returns
+ * a sorted collection of these objects. The sorting of these
+ * objects is based on their toString(). They are sorted in
+ * alphabetical order.
+ * 
+ * @since 1.0.0
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public final class ToStringSorter {
+	
+	Object[] sortedObjects;
+	String[] sortedStrings;
+	/**
+	 *  Returns true if stringTwo is 'greater than' stringOne
+	 *  This is the 'ordering' method of the sort operation.
+	 */
+	public boolean compare(String stringOne, String stringTwo) {
+		return stringOne.compareTo(stringTwo) < 0;
+	}
+	
+	/**
+	 *  Sort the objects in sorted collection and return that collection.
+	 */
+	private void quickSort(int left, int right) {
+		int originalLeft = left;
+		int originalRight = right;
+		int midIndex =  left + (right - left) / 2;
+		String midToString = this.sortedStrings[midIndex];
+	
+		do {
+			while (compare(this.sortedStrings[left], midToString))
+				left++;
+			while (compare(midToString, this.sortedStrings[right]))
+				right--;
+			if (left <= right) {
+				Object tmp = this.sortedObjects[left];
+				this.sortedObjects[left] = this.sortedObjects[right];
+				this.sortedObjects[right] = tmp;
+				String tmpToString = this.sortedStrings[left];
+				this.sortedStrings[left] = this.sortedStrings[right];
+				this.sortedStrings[right] = tmpToString;
+				left++;
+				right--;
+			}
+		} while (left <= right);
+	
+		if (originalLeft < right)
+			quickSort(originalLeft, right);
+		if (left < originalRight)
+			quickSort(left, originalRight);
+	}
+	
+	/**
+	 *  Return a new sorted collection from this unsorted collection.
+	 *  Sort using quick sort.
+	 */
+	public void sort(Object[] unSortedObjects, String[] unsortedStrings) {
+		int size = unSortedObjects.length;
+		this.sortedObjects = new Object[size];
+		this.sortedStrings = new String[size];
+	
+		//copy the array so can return a new sorted collection
+		System.arraycopy(unSortedObjects, 0, this.sortedObjects, 0, size);
+		System.arraycopy(unsortedStrings, 0, this.sortedStrings, 0, size);
+		if (size > 1)
+			quickSort(0, size - 1);
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiBaselineInfo.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiBaselineInfo.java
new file mode 100644
index 0000000..3e8fbe1
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiBaselineInfo.java
@@ -0,0 +1,394 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.infos;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.launching.EEVMType;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMInstall2;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
+import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager;
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.service.resolver.ResolverError;
+import org.eclipse.osgi.service.resolver.State;
+import org.eclipse.osgi.service.resolver.StateObjectFactory;
+import org.eclipse.pde.api.tools.internal.AnyValue;
+import org.eclipse.pde.api.tools.internal.CoreMessages;
+import org.eclipse.pde.api.tools.internal.SystemLibraryApiComponent;
+import org.eclipse.pde.api.tools.internal.model.ApiBaseline;
+import org.eclipse.pde.api.tools.internal.model.cache.ApiElementCache;
+import org.eclipse.pde.api.tools.internal.model.cache.ApiToolsCache;
+import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
+import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
+import org.eclipse.pde.api.tools.internal.util.Util;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * {@link IApiBaseline} specific info object
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiBaselineInfo extends ApiElementInfo {
+
+	/**
+	 * OSGi bundle state
+	 */
+	private State fState = null;
+	/**
+	 * Execution environment identifier
+	 */
+	private String fExecutionEnvironment = null;
+	/**
+	 * Component representing the system library
+	 */
+	private IApiComponent fSystemLibraryComponent = null;
+	/**
+	 * The ee description file to use to init the ee
+	 */
+	private File fEeFile = null;
+	/**
+	 * if the profile should be auto-resolving or not
+	 */
+	private boolean fAutoresolve = false;
+	/**
+	 * The current collection of status from the profile
+	 */
+	private MultiStatus fStatus = null;
+	
+	/**
+	 * The current set of cached {@link IApiComponent}s
+	 */
+	private ApiElementCache fComponents = null;
+	
+	/**
+	 * The current set of cached {@link IApiPackageFragment}s
+	 */
+	private ApiElementCache fPackages = null;
+	
+	/**
+	 * Constant to match any value for ws, os, arch.
+	 */
+	private AnyValue ANY_VALUE = new AnyValue("*"); //$NON-NLS-1$
+	
+	/**
+	 * Constructor
+	 */
+	public ApiBaselineInfo(IApiBaseline owner, File eefile, boolean autoresolve) {
+		super(owner);
+		fEeFile = eefile;
+		fAutoresolve = autoresolve;
+		fState = StateObjectFactory.defaultFactory.createState(true);
+		if(!fAutoresolve) {
+			addStatus(new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, CoreMessages.ApiProfile_0));
+		}
+		fComponents = new ApiElementCache(ApiToolsCache.DEFAULT_CACHE_SIZE);
+	}
+	
+	/**
+	 * Initializes this profile info to resolve in the execution environment
+	 * associated with the given symbolic name.
+	 * 
+	 * @param environmentId execution environment symbolic name
+	 * @param eeFile execution environment description file
+	 * @throws CoreException if unable to initialize based on the given id
+	 */
+	private void initialize(String environmentId, File eeFile) {
+		try {
+			EEVMType.clearProperties(eeFile);
+			String profile = EEVMType.getProperty(EEVMType.PROP_CLASS_LIB_LEVEL, eeFile);
+			Properties properties = null;
+			if (ApiPlugin.isRunningInFramework()) {
+				properties = getJavaProfileProperties(environmentId);
+			} else {
+				properties = Util.getEEProfile(eeFile);
+			}
+			if (properties == null) {
+				addStatus(new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, MessageFormat.format("Unknown execution environment: ", new String[] {environmentId})));
+			} else {
+				initialize(properties, eeFile);
+			}
+			addStatus(new Status(IStatus.OK, ApiPlugin.PLUGIN_ID, MessageFormat.format(CoreMessages.ApiProfile_1, new String[]{profile})));
+		}
+		catch(CoreException ce) {}
+	}
+	
+	/**
+	 * Initializes this profile from the given properties.
+	 * 
+	 * @param profile OGSi profile properties
+	 * @param description execution environment description file
+	 * @throws CoreException if unable to initialize
+	 */
+	private void initialize(Properties profile, File description) throws CoreException {
+		String value = profile.getProperty(Constants.FRAMEWORK_SYSTEMPACKAGES);
+		Dictionary dictionary = new Hashtable();
+		String[] systemPackages = null;
+		if (value != null) {
+			systemPackages = value.split(","); //$NON-NLS-1$
+			dictionary.put(Constants.FRAMEWORK_SYSTEMPACKAGES, value);
+		}
+		value = profile.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT);
+		if (value != null) {
+			dictionary.put(Constants.FRAMEWORK_EXECUTIONENVIRONMENT, value);
+		}
+		fExecutionEnvironment = profile.getProperty("osgi.java.profile.name"); //$NON-NLS-1$
+		if (fExecutionEnvironment == null) {
+			addStatus(new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, "Profile file missing 'osgi.java.profile.name'"));
+		}
+		dictionary.put("osgi.os", ANY_VALUE); //$NON-NLS-1$
+		dictionary.put("osgi.arch", ANY_VALUE); //$NON-NLS-1$
+		dictionary.put("osgi.ws", ANY_VALUE); //$NON-NLS-1$
+		dictionary.put("osgi.nl", ANY_VALUE); //$NON-NLS-1$
+		fState.setPlatformProperties(dictionary);
+		// clean up previous system library
+		if (fSystemLibraryComponent != null && fComponentsById != null) {
+			fComponentsById.remove(fSystemLibraryComponent.getId());
+		}
+		if(fSystemPackageNames != null) {
+			fSystemPackageNames.clear();
+			fSystemPackageNames = null;
+		}
+		clearComponentsCache();
+		// set new system library
+		fSystemLibraryComponent = new SystemLibraryApiComponent((IApiBaseline) getOwner(), description, systemPackages);
+		addComponent(fSystemLibraryComponent);
+	}
+	
+	/**
+	 * Returns the property file for the given environment or <code>null</code>.
+	 * 
+	 * @param ee execution environment symbolic name
+	 * @return properties file or <code>null</code> if none
+	 */
+	public Properties getJavaProfileProperties(String ee) throws CoreException {
+		Bundle osgiBundle = Platform.getBundle("org.eclipse.osgi"); //$NON-NLS-1$
+		if (osgiBundle == null) 
+			return null;
+		URL profileURL = osgiBundle.getEntry(ee.replace('/', '_') + ".profile"); //$NON-NLS-1$
+		if (profileURL != null) {
+			InputStream is = null;
+			try {
+				profileURL = FileLocator.resolve(profileURL);
+				URLConnection openConnection = profileURL.openConnection();
+				openConnection.setUseCaches(false);
+				is = openConnection.getInputStream();
+				if (is != null) {
+					Properties profile = new Properties();
+					profile.load(is);
+					return profile;
+				}
+			} catch (IOException e) {
+				addStatus(new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, MessageFormat.format("Unable to read profile: ", new String[] {ee})));
+			} finally {
+				try {
+					if (is != null) {
+						is.close();
+					}
+				} catch (IOException e) {
+					ApiPlugin.log(e);
+				}
+			}
+		}
+		return null;
+	}	
+	
+	/**
+	 * Resolves and initializes the system library to use based on API component requirements.
+	 * Only works when running in the framework. Has no effect if not running in the framework.
+	 */
+	public void resolveSystemLibrary(HashSet ees) {
+		if (ApiPlugin.isRunningInFramework() && fAutoresolve) {
+			IStatus error = null;
+			IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
+			Iterator iterator = ees.iterator();
+			Map VMsToEEs = new HashMap();
+			while (iterator.hasNext()) {
+				String ee = (String) iterator.next();
+				IExecutionEnvironment environment = manager.getEnvironment(ee);
+				if (environment != null) {
+					IVMInstall[] compatibleVMs = environment.getCompatibleVMs();
+					for (int i = 0; i < compatibleVMs.length; i++) {
+						IVMInstall vm = compatibleVMs[i];
+						Set EEs = (Set) VMsToEEs.get(vm);
+						if (EEs == null) {
+							EEs = new HashSet();
+							VMsToEEs.put(vm, EEs);
+						}
+						EEs.add(ee);
+					}
+				}
+			}
+			// select VM that is compatible with most required environments
+			iterator = VMsToEEs.entrySet().iterator();
+			IVMInstall bestFit = null;
+			int bestCount = 0;
+			while (iterator.hasNext()) {
+				Entry entry = (Entry) iterator.next();
+				Set EEs = (Set)entry.getValue();
+				if (EEs.size() > bestCount) {
+					bestCount = EEs.size();
+					bestFit = (IVMInstall)entry.getKey();
+				}
+			}
+			String systemEE = null;
+			if (bestFit != null) {
+				// find the EE this VM is strictly compatible with
+				IExecutionEnvironment[] environments = manager.getExecutionEnvironments();
+				for (int i = 0; i < environments.length; i++) {
+					IExecutionEnvironment environment = environments[i];
+					if (environment.isStrictlyCompatible(bestFit)) {
+						systemEE = environment.getId();
+						break;
+					}
+				}
+				if (systemEE == null) {
+					// a best fit, but not strictly compatible with any environment (e.g.
+					// a 1.7 VM for which there is no profile yet). This is a bit of a hack
+					// until an OSGi profile exists for 1.7.
+					if (bestFit instanceof IVMInstall2) {
+			            String javaVersion = ((IVMInstall2)bestFit).getJavaVersion();
+			            if (javaVersion != null) {
+			            	if (javaVersion.startsWith(JavaCore.VERSION_1_7)) {
+			            		// set EE to 1.6 when 1.7 is detected
+			            		systemEE = "JavaSE-1.6"; //$NON-NLS-1$
+			            	}
+			            }
+					}
+				}
+				if (systemEE != null) {
+					// only update if different from current or missing VM binding
+					if (!systemEE.equals(getExecutionEnvironment()) || fVMBinding == null) {
+						try {
+							File file = Util.createEEFile(bestFit, systemEE);
+							JavaRuntime.addVMInstallChangedListener((ApiBaseline)getOwner());
+							fVMBinding = bestFit;
+							initialize(systemEE, file);
+						}
+						catch (IOException e) {
+							error = new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, CoreMessages.ApiProfile_2, e);
+						}
+					}
+				} else {
+					// VM is not strictly compatible with any EE
+					error = new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, CoreMessages.ApiProfile_4);
+				}
+			} else {
+				// no VMs match any required EE
+				error = new Status(IStatus.ERROR, ApiPlugin.PLUGIN_ID, CoreMessages.ApiProfile_4);
+			}
+			if (error == null) {
+				// build status for unbound required EE's
+				Set missing = new HashSet(ees);
+				Set covered = new HashSet((Set)VMsToEEs.get(bestFit));
+				missing.removeAll(covered);
+				if (missing.isEmpty()) {
+					addStatus(new Status(IStatus.OK, ApiPlugin.PLUGIN_ID, MessageFormat.format(CoreMessages.ApiProfile_1, new String[]{systemEE})));
+				} else {
+					iterator = missing.iterator();
+					MultiStatus multi = new MultiStatus(ApiPlugin.PLUGIN_ID, 0, CoreMessages.ApiProfile_7, null);
+					while (iterator.hasNext()) {
+						String id = (String) iterator.next();
+						multi.add(new Status(IStatus.WARNING, ApiPlugin.PLUGIN_ID,
+								MessageFormat.format(CoreMessages.ApiProfile_8, new String[]{id})));
+					}
+					addStatus(multi);
+				}
+			} else {
+				addStatus(error);
+			}
+		}
+	}
+	
+	/**
+	 * cleans up residents of this info
+	 */
+	public void dispose() {
+		fState = null;
+	}
+	
+	/**
+	 * @return the id of the currently bound EE
+	 */
+	public String getExecutionEnvironment() {
+		return fExecutionEnvironment;
+	}
+	
+	/**
+	 * @return the current OSGi state in use in this info
+	 */
+	public State getState() {
+		return fState;
+	}
+	
+	/**
+	 * @return the complete listing of errors from attempted resolution of the backing OSGi state
+	 */
+	public ResolverError[] getResolutionErrors() {
+		List errs = new ArrayList();
+		BundleDescription[] bundles = fState.getBundles();
+		for (int i = 0; i < bundles.length; i++) {
+			ResolverError[] errors = fState.getResolverErrors(bundles[i]);
+			for (int j = 0; j < errors.length; j++) {
+				errs.add(errors[j]);
+			}
+		}
+		return (ResolverError[]) errs.toArray(new ResolverError[errs.size()]);
+	}
+	
+	/**
+	 * Adds a new status to the profiles' overall status
+	 * @param newstatus
+	 */
+	private void addStatus(IStatus newstatus) {
+		if(fStatus == null) {
+			fStatus = new MultiStatus(ApiPlugin.PLUGIN_ID, IStatus.ERROR, "API Baseline Problems", null);
+		}
+		fStatus.add(newstatus);
+	}
+	
+	/**
+	 * @return the complete status of the profile at the time this method is called
+	 */
+	public MultiStatus getStatus() {
+		return fStatus;
+	}
+	
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiComponentInfo.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiComponentInfo.java
new file mode 100644
index 0000000..368b906
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiComponentInfo.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.infos;
+
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+
+/**
+ * {@link IApiComponent} specific info.
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiComponentInfo extends ApiElementInfo {
+
+	/**
+	 * Constructor
+	 * @param owner
+	 */
+	public ApiComponentInfo(IApiElement owner) {
+		super(owner);
+	}
+
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiDescriptionInfo.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiDescriptionInfo.java
new file mode 100644
index 0000000..e7123d2
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiDescriptionInfo.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.infos;
+
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+
+/**
+ * {@link IApiDescription} specific info
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiDescriptionInfo extends ApiElementInfo {
+
+	/**
+	 * Constructor
+	 * @param owner
+	 */
+	public ApiDescriptionInfo(IApiElement owner) {
+		super(owner);
+	}
+
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiElementInfo.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiElementInfo.java
new file mode 100644
index 0000000..2938c8a
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiElementInfo.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.infos;
+
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+
+/**
+ * Describes backing non-handle information for an {@link IApiElement}
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+public abstract class ApiElementInfo {
+
+	private IApiElement fOwner = null;
+	
+	/**
+	 * Constructor
+	 */
+	public ApiElementInfo(IApiElement owner) {
+		fOwner = owner;
+	}
+	
+	/**
+	 * @return the {@link IApiElement} that owns this info
+	 */
+	protected IApiElement getOwner() {
+		return fOwner;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiResourceInfo.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiResourceInfo.java
new file mode 100644
index 0000000..ad6dc8a
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/infos/ApiResourceInfo.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.model.infos;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.pde.api.tools.internal.model.ApiResource;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiElement;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiResource;
+
+/**
+ * {@link IApiResource} element info.
+ * 
+ * @since 1.0.0
+ * @noextend This class is not intended to be subclassed by clients.
+ * @noinstantiate This class is not intended to be instantiated by clients.
+ */
+public class ApiResourceInfo extends ApiElementInfo {
+
+	private IResource fResource = null;
+	
+	/**
+	 * Constructor
+	 */
+	public ApiResourceInfo(IApiResource owner, IResource resource) {
+		super(owner);
+		fResource = resource;
+	}
+	
+	/**
+	 * @return if the resource has children
+	 */
+	public boolean hasChildren() throws CoreException {
+		switch(fResource.getType()) {
+			case IResource.PROJECT: {
+				return ((IProject)fResource).members().length > 0;
+			}
+			case IResource.FOLDER: {
+				return ((IFolder)fResource).members().length > 0;
+			}
+		}
+		return false;
+	}
+	
+	private IResource[] getMembers() throws CoreException {
+		switch(fResource.getType()) {
+			case IResource.PROJECT: {
+				return ((IProject)fResource).members();
+			}
+			case IResource.FOLDER: {
+				return ((IFolder)fResource).members();
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * @return the children of this resource
+	 */
+	public IApiElement[] getChildren() throws CoreException {
+		IApiElement[] children = null;
+		if(hasChildren()) {
+			IResource[] members = getMembers();
+			if(members == null) {
+				return null;
+			}
+			children = new IApiElement[members.length];
+			IApiResource owner = (IApiResource) getOwner();
+			for(int i = 0; i < members.length; i++) {
+				//TODO should we cache the children of a resource element?
+				children[i] = new ApiResource(owner, members[i]);
+			}
+		}
+		return children;
+	}
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java
index 685d71f..ccc979a 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java
@@ -30,13 +30,13 @@
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.pde.api.tools.internal.ApiDescriptionManager;
 import org.eclipse.pde.api.tools.internal.ApiFilterStore;
-import org.eclipse.pde.api.tools.internal.ApiProfile;
-import org.eclipse.pde.api.tools.internal.ApiProfileManager;
+import org.eclipse.pde.api.tools.internal.ApiBaselineManager;
 import org.eclipse.pde.api.tools.internal.JavadocTagManager;
 import org.eclipse.pde.api.tools.internal.PluginProjectApiComponent;
 import org.eclipse.pde.api.tools.internal.builder.ApiAnalysisBuilder;
 import org.eclipse.pde.api.tools.internal.comparator.ClassFileComparator;
 import org.eclipse.pde.api.tools.internal.descriptors.ElementDescriptorImpl;
+import org.eclipse.pde.api.tools.internal.model.ApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemTypes;
 import org.eclipse.pde.api.tools.internal.provisional.scanner.TagScanner;
@@ -304,12 +304,12 @@
 
 	/**
 	 * Returns the {@link IApiProfileManager}, allowing clients to add/remove and search
-	 * for {@link IApiProfile}s stored in the manager.
+	 * for {@link IApiBaseline}s stored in the manager.
 	 * 
 	 * @return the singleton instance of the {@link IApiProfileManager}
 	 */
 	public IApiProfileManager getApiProfileManager() {
-		return ApiProfileManager.getManager();
+		return ApiBaselineManager.getManager();
 	}
 	
 	/**
@@ -516,12 +516,12 @@
 			
 			option = Platform.getDebugOption(API_PROFILE_MANAGER_DEBUG);
 			if(option != null) {
-				ApiProfileManager.setDebug(option.equalsIgnoreCase(TRUE));
+				ApiBaselineManager.setDebug(option.equalsIgnoreCase(TRUE));
 			}
 			
 			option = Platform.getDebugOption(API_PROFILE_DEBUG);
 			if(option != null) {
-				ApiProfile.setDebug(option.equalsIgnoreCase(TRUE));
+				ApiBaseline.setDebug(option.equalsIgnoreCase(TRUE));
 			}
 			option = Platform.getDebugOption(API_FILTER_STORE_DEBUG);
 			if(option != null) {
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/Factory.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/Factory.java
index 803071b..4917a00 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/Factory.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/Factory.java
@@ -15,16 +15,17 @@
 
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.pde.api.tools.internal.ApiProfile;
-import org.eclipse.pde.api.tools.internal.ApiProfileManager;
+import org.eclipse.pde.api.tools.internal.ApiBaselineManager;
 import org.eclipse.pde.api.tools.internal.descriptors.PackageDescriptorImpl;
 import org.eclipse.pde.api.tools.internal.descriptors.ResourceDescriptorImpl;
+import org.eclipse.pde.api.tools.internal.model.ApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IFieldDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IResourceDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchCriteria;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchEngine;
 import org.eclipse.pde.api.tools.internal.provisional.search.IApiSearchScope;
@@ -54,8 +55,8 @@
 	 *
 	 * @param name profile name
 	 */
-	public static IApiProfile newApiProfile(String name) {
-		return new ApiProfile(name);
+	public static IApiBaseline newApiProfile(String name) {
+		return new ApiBaseline(name);
 	}
 	
 	/**
@@ -71,8 +72,8 @@
 	 * @return API profile
 	 * @throws CoreException if unable to create a new profile with the specified attributes 
 	 */
-	public static IApiProfile newApiProfile(String name, File eeDescription) throws CoreException {
-		return new ApiProfile(name, eeDescription);
+	public static IApiBaseline newApiProfile(String name, File eeDescription) throws CoreException {
+		return new ApiBaseline(name, eeDescription);
 	}
 	
 	/**
@@ -189,14 +190,14 @@
 	/**
 	 * Creates and returns an API profile from the given input stream. The
 	 * contents of the stream must have been created with
-	 * {@link IApiProfile#writeProfileDescription(java.io.OutputStream)}.
+	 * {@link IApiBaseline#writeProfileDescription(java.io.OutputStream)}.
 	 * 
 	 * @param descriptionStream profile description
 	 * @return API profile
 	 * @exception CoreException if unable to create a profile from the stream
 	 */
-	public static IApiProfile createProfile(InputStream descriptionStream) throws CoreException {
-		return ApiProfileManager.restoreProfile(descriptionStream);
+	public static IApiBaseline createProfile(InputStream descriptionStream) throws CoreException {
+		return ApiBaselineManager.restoreProfile(descriptionStream);
 	}
 	
 	/**
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiComponent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiComponent.java
index 8b26189..c3337f1 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiComponent.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiComponent.java
@@ -11,6 +11,8 @@
 package org.eclipse.pde.api.tools.internal.provisional;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter;
 
@@ -138,7 +140,7 @@
 	public boolean isSourceComponent();
 	/**
 	 * Disposes this API component. Clients must call this method when done
-	 * with an API component. Note that disposing an {@link IApiProfile} will dispose all of
+	 * with an API component. Note that disposing an {@link IApiBaseline} will dispose all of
 	 * its components. 
 	 */
 	public void dispose();
@@ -148,7 +150,7 @@
 	 * 
 	 * @return API profile
 	 */
-	public IApiProfile getProfile();
+	public IApiBaseline getProfile();
 		
 	/**
 	 * Returns a store of problem filters defined for this component or <code>null</code>
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiProfileManager.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiProfileManager.java
index b4f4566..d46638b 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiProfileManager.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiProfileManager.java
@@ -10,9 +10,11 @@
  *******************************************************************************/
 package org.eclipse.pde.api.tools.internal.provisional;
 
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
+
 
 /**
- * Interface describing the {@link ApiProfileManager}
+ * Interface describing the {@link ApiBaselineManager}
  * 
  * @noimplement this interface is not to be implemented by clients
  * @since 1.0.0
@@ -22,33 +24,33 @@
 	/**
 	 * Allows a new profile to be added to the managers' cache of profiles.
 	 * New profiles are added to the cache on a replace policy, meaning if there
-	 * already exists an {@link IApiProfile} entry it will be replaced with the 
+	 * already exists an {@link IApiBaseline} entry it will be replaced with the 
 	 * new profile provided. If <code>null</code> is passed in as a new profile 
 	 * no work is done.
 	 * 
 	 * @param newprofile the new profile to add to the manager
 	 */
-	public void addApiProfile(IApiProfile newprofile);
+	public void addApiProfile(IApiBaseline newprofile);
 	
 	/**
-	 * Returns the complete listing of {@link IApiProfile}s contained in the 
+	 * Returns the complete listing of {@link IApiBaseline}s contained in the 
 	 * manager or an empty array, never <code>null</code>.
 	 * 
-	 * @return the complete listing of {@link IApiProfile}s or an empty array
+	 * @return the complete listing of {@link IApiBaseline}s or an empty array
 	 */
-	public IApiProfile[] getApiProfiles();
+	public IApiBaseline[] getApiProfiles();
 	
 	/**
-	 * Returns the {@link IApiProfile} object with the given id, or
+	 * Returns the {@link IApiBaseline} object with the given id, or
 	 * <code>null</code> if there is no profile with the given id.
 	 * 
 	 * @param name the name of the profile to fetch
-	 * @return the {@link IApiProfile} with the given id or <code>null</code>
+	 * @return the {@link IApiBaseline} with the given id or <code>null</code>
 	 */
-	public IApiProfile getApiProfile(String name);
+	public IApiBaseline getApiProfile(String name);
 	
 	/**
-	 * Removes the {@link IApiProfile} with the given id from 
+	 * Removes the {@link IApiBaseline} with the given id from 
 	 * the manager, which propagates to the file-system to remove the 
 	 * underlying stored profile (if it exists).
 	 * 
@@ -60,20 +62,20 @@
 	public boolean removeApiProfile(String name);
 	
 	/**
-	 * Allows the {@link IApiProfile} with the specified id to be set as 
+	 * Allows the {@link IApiBaseline} with the specified id to be set as 
 	 * the default profile. This method will accept <code>null</code>, which will remove
-	 * a default {@link IApiProfile} setting.
-	 * @param name the name of the {@link IApiProfile} to be the default
+	 * a default {@link IApiBaseline} setting.
+	 * @param name the name of the {@link IApiBaseline} to be the default
 	 */
 	public void setDefaultApiProfile(String name);
 	
 	/**
-	 * Returns the {@link IApiProfile} that is the current default, or <code>null</code>
+	 * Returns the {@link IApiBaseline} that is the current default, or <code>null</code>
 	 * if one has not been set, or the currently specified id for the default profile no longer exists.
 	 * 
-	 * @return the default {@link IApiProfile} or <code>null</code>
+	 * @return the default {@link IApiBaseline} or <code>null</code>
 	 */
-	public IApiProfile getDefaultApiProfile();
+	public IApiBaseline getDefaultApiProfile();
 	
 	/**
 	 * Returns the workspace profile. Creates a new one if one does not exist.
@@ -86,5 +88,5 @@
 	 * </p>
 	 * @return the workspace profile or <code>null</code>
 	 */
-	public IApiProfile getWorkspaceProfile();
+	public IApiBaseline getWorkspaceProfile();
 }
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/builder/IApiAnalyzer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/builder/IApiAnalyzer.java
index b51af2d..ff3e06c 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/builder/IApiAnalyzer.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/builder/IApiAnalyzer.java
@@ -14,7 +14,7 @@
 import org.eclipse.pde.api.tools.internal.builder.BuildState;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 
 /**
@@ -43,7 +43,7 @@
 	 * @see PluginProjectApiComponent
 	 * @see BundleApiComponent
 	 */
-	public void analyzeComponent(final BuildState buildState, final IApiFilterStore filterStore, final IApiProfile baseline, final IApiComponent component, final String[] typenames, final String[] changedtypes, IProgressMonitor monitor);
+	public void analyzeComponent(final BuildState buildState, final IApiFilterStore filterStore, final IApiBaseline baseline, final IApiComponent component, final String[] typenames, final String[] changedtypes, IProgressMonitor monitor);
 	
 	/**
 	 * Returns the complete set of {@link IApiProblem}s found by this analyzer, or an empty
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
index 1595dff..e2921f1 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
@@ -24,12 +24,12 @@
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.osgi.framework.Version;
 
@@ -74,8 +74,8 @@
 			final IClassFile classFile2,
 			final IApiComponent component,
 			final IApiComponent component2,
-			final IApiProfile referenceProfile,
-			final IApiProfile profile,
+			final IApiBaseline referenceProfile,
+			final IApiBaseline profile,
 			final int visibilityModifiers) {
 		
 		if (classFile2 == null) {
@@ -218,8 +218,8 @@
 			final IClassFile classFile2,
 			final IApiComponent component,
 			final IApiComponent component2,
-			final IApiProfile referenceProfile,
-			final IApiProfile profile,
+			final IApiBaseline referenceProfile,
+			final IApiBaseline profile,
 			final int visibilityModifiers) {
 		
 		if (classFile == null || classFile2 == null) {
@@ -265,8 +265,8 @@
 	 * @throws IllegalArgumentException if one of the two profiles is null
 	 */
 	public static IDelta compare(
-			final IApiProfile referenceProfile,
-			final IApiProfile profile,
+			final IApiBaseline referenceProfile,
+			final IApiBaseline profile,
 			final boolean force) {
 		return compare(referenceProfile, profile, VisibilityModifiers.ALL_VISIBILITIES, force);
 	}
@@ -283,8 +283,8 @@
 	 * @throws IllegalArgumentException if one of the two profiles is null
 	 */
 	public static IDelta compare(
-			final IApiProfile referenceProfile,
-			final IApiProfile profile) {
+			final IApiBaseline referenceProfile,
+			final IApiBaseline profile) {
 		return compare(referenceProfile, profile, VisibilityModifiers.ALL_VISIBILITIES, false);
 	}
 
@@ -301,8 +301,8 @@
 	 * @throws IllegalArgumentException if one of the two profiles is null
 	 */
 	public static IDelta compare(
-			final IApiProfile referenceProfile,
-			final IApiProfile profile,
+			final IApiBaseline referenceProfile,
+			final IApiBaseline profile,
 			final int visibilityModifiers) {
 		return compare(referenceProfile, profile, visibilityModifiers, false);
 	}
@@ -319,8 +319,8 @@
 	 * @throws IllegalArgumentException if one of the two profiles is null
 	 */
 	public static IDelta compare(
-			final IApiProfile referenceProfile,
-			final IApiProfile profile,
+			final IApiBaseline referenceProfile,
+			final IApiBaseline profile,
 			final int visibilityModifiers,
 			final boolean force) {
 		if (referenceProfile == null || profile == null) {
@@ -456,7 +456,7 @@
 	 */
 	public static IDelta compare(
 			final IApiComponent component,
-			final IApiProfile referenceProfile,
+			final IApiBaseline referenceProfile,
 			final int visibilityModifiers,
 			final boolean force) {
 		
@@ -544,8 +544,8 @@
 	public static IDelta compare(
 			final IApiComponent referenceComponent,
 			final IApiComponent component2,
-			final IApiProfile referenceProfile,
-			final IApiProfile profile) {
+			final IApiBaseline referenceProfile,
+			final IApiBaseline profile) {
 		return compare(referenceComponent, component2, referenceProfile, profile, VisibilityModifiers.ALL_VISIBILITIES);
 	}
 
@@ -568,8 +568,8 @@
 	public static IDelta compare(
 			final IApiComponent referenceComponent,
 			final IApiComponent component2,
-			final IApiProfile referenceProfile,
-			final IApiProfile profile,
+			final IApiBaseline referenceProfile,
+			final IApiBaseline profile,
 			final int visibilityModifiers) {
 	
 		if (referenceProfile == null || profile == null) {
@@ -646,8 +646,8 @@
 	private static IDelta internalCompare(
 			final IApiComponent component,
 			final IApiComponent component2,
-			final IApiProfile referenceProfile,
-			final IApiProfile profile,
+			final IApiBaseline referenceProfile,
+			final IApiBaseline profile,
 			final int visibilityModifiers,
 			final Delta globalDelta) throws CoreException {
 
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/Compare.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/Compare.java
index 3336a3a..80015bc 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/Compare.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/Compare.java
@@ -19,11 +19,11 @@
 import java.io.IOException;
 
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.pde.api.tools.internal.ApiProfileManager;
+import org.eclipse.pde.api.tools.internal.ApiBaselineManager;
 import org.eclipse.pde.api.tools.internal.comparator.DeltaXmlVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 
 /**
  * Java application to compare two API profiles
@@ -143,10 +143,10 @@
 	private void process() {
 		// processing the comparison
 		BufferedInputStream inputStream = null;
-		IApiProfile baseline = null;
+		IApiBaseline baseline = null;
 		try {
 			inputStream = new BufferedInputStream(new FileInputStream(this.baseline));
-			baseline = ApiProfileManager.restoreProfile(inputStream);
+			baseline = ApiBaselineManager.restoreProfile(inputStream);
 		} catch (FileNotFoundException e) {
 			ApiPlugin.log(e);
 		} catch (CoreException e) {
@@ -161,10 +161,10 @@
 			}
 		}
 		inputStream = null;
-		IApiProfile profile = null;
+		IApiBaseline profile = null;
 		try {
 			inputStream = new BufferedInputStream(new FileInputStream(this.profile));
-			profile = ApiProfileManager.restoreProfile(inputStream);
+			profile = ApiBaselineManager.restoreProfile(inputStream);
 		} catch (FileNotFoundException e) {
 			ApiPlugin.log(e);
 		} catch (CoreException e) {
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiProfile.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiBaseline.java
similarity index 88%
rename from apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiProfile.java
rename to apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiBaseline.java
index cdebc93..654acd7 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiProfile.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiBaseline.java
@@ -8,12 +8,12 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.pde.api.tools.internal.provisional;
-
-import java.io.OutputStream;
+package org.eclipse.pde.api.tools.internal.provisional.model;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.osgi.service.resolver.ResolverError;
+import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 
 /**
@@ -22,7 +22,7 @@
  * 
  * @since 1.0.0
  */
-public interface IApiProfile {
+public interface IApiBaseline extends IApiParent, IApiElement {
 	
 	/**
 	 * Returns all API components in this profile. The components
@@ -115,14 +115,6 @@
 	public String getExecutionEnvironment();
 	
 	/**
-	 * Returns a status describing how the execution environment bound to this API
-	 * profile satisfies the requirements of the components in this profile.
-	 * 
-	 * @return status describing execution environment bound to this profile
-	 */
-	public IStatus getExecutionEnvironmentStatus();
-	
-	/**
 	 * Disposes this API profile. Clients must call this method when done
 	 * with a profile in order to free system resources.
 	 * <p>
@@ -141,15 +133,6 @@
 	public void close() throws CoreException;	
 	
 	/**
-	 * Writes a description of this profile to the given output stream.
-	 * The profile can be recreated using the {@link Factory}.
-	 * 
-	 * @param stream output stream to write description to
-	 * @throws CoreException if something goes terribly wrong
-	 */
-	public void writeProfileDescription(OutputStream stream) throws CoreException;
-	
-	/**
 	 * Returns all components in this profile depending on the given components.
 	 * The returned collection includes the given components and all dependents.
 	 * 
@@ -169,4 +152,20 @@
 	 */
 	public IApiComponent[] getPrerequisiteComponents(IApiComponent[] components);
 	
+	/**
+	 * Returns all errors in the underlying {@link org.eclipse.osgi.service.resolver.State}
+	 * from an attempt to resolve the state. 
+	 * 
+	 * If there are no resolution errors an empty array is returned.
+	 * 
+	 * @return state errors
+	 */
+	public ResolverError[] getResolutionErrors();
+	
+	/**
+	 * Returns the combined status of the {@link IApiBaseline}
+	 * 
+	 * @return the combined status of this baseline
+	 */
+	public IStatus getStatus();
 }
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java
new file mode 100644
index 0000000..99b1f52
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiComponent.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+/**
+ * Describes an {@link IApiProject} as it appears in an {@link org.eclipse.pde.api.tools.internal.provisional.IApiProfile}
+ * 
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiComponent extends IApiElement, IApiParent {
+
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiDescription.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiDescription.java
similarity index 90%
rename from apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiDescription.java
rename to apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiDescription.java
index 87dce18..7e2f451 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/IApiDescription.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiDescription.java
@@ -8,9 +8,11 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.pde.api.tools.internal.provisional;
+package org.eclipse.pde.api.tools.internal.provisional.model;
 
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.pde.api.tools.internal.provisional.ApiDescriptionVisitor;
+import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
 
 
@@ -22,7 +24,7 @@
  * 
  * @since 1.0
  */
-public interface IApiDescription {
+public interface IApiDescription extends IApiParent, IApiElement {
 	
 	/**
 	 * Status code indicating an element was not found when attempting to
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiElement.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiElement.java
new file mode 100644
index 0000000..6dedf08
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiElement.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+
+/**
+ * Describes an element that can appear in the API tooling model.
+ * <p>
+ * Methods annotated as "handle-only" do not require underlying elements to exist.
+ * Methods that require underlying elements to exist throw
+ * a <code>CoreException</code> when an underlying element is missing.
+ * </p>
+ * 
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiElement {
+
+	/**
+	 * Constant representing a package.
+	 */
+	public int PACKAGE = 1;
+	
+	/**
+	 * Constant representing a reference type.
+	 */
+	public int TYPE = 2;		
+	
+	/**
+	 * Constant representing a package container 
+	 */
+	public int PACKAGE_ROOT = 3;
+	
+	/**
+	 * Constant representing a static initializer
+	 */
+	public int INITIALIZER = 4;
+	
+	/**
+	 * Constant representing a field.
+	 */
+	public int FIELD = 5;	
+	
+	/**
+	 * Constant representing a method.
+	 */
+	public int METHOD = 6;	
+	
+	/**
+	 * Constant representing an {@link IResource}
+	 */
+	public int RESOURCE = 7;
+	
+	/**
+	 * Constant representing an API component
+	 */
+	public int COMPONENT = 8;
+	
+	/**
+	 * Constant representing an {@link IApiBaseline}
+	 */
+	public int BASELINE = 9;
+	
+	/**
+	 * Returns the name of this element. This is a handle-only method.
+	 *
+	 * @return the element name
+	 */
+	public String getName();
+
+	/**
+	 * Returns this element's kind encoded as an integer.
+	 * This is a handle-only method.
+	 *
+	 * @return the kind of element; one of the constants declared in <code>IApiElement</code>
+	 * @see IApiElement
+	 */
+	public int getType();
+	
+	/**
+	 * Returns whether this {@link IApiElement} exists in the current model or not.
+	 * 
+	 * @return true if this element exists in the current model, false otherwise
+	 */
+	public boolean exists();
+	
+	/**
+	 * Returns the immediate parent {@link IApiElement} of this element,
+	 * or <code>null</code> if this parent has no parent.
+	 * This is a handle-only method.
+	 * 
+	 * @return the immediate parent of this element or <code>null</code>
+	 */
+	public IApiElement getParent();
+	
+	/**
+	 * Returns the first ancestor of this API element that has the given type.
+	 * Returns <code>null</code> if no such an ancestor can be found.
+	 * This is a handle-only method.
+	 *
+	 * @param ancestorType the given type
+	 * @return the first ancestor of this Java element that has the given type, null if no such an ancestor can be found
+	 */
+	public IApiElement getAncestor(int ancestorType);
+	
+	/**
+	 * Returns the path to the innermost resource enclosing this element.
+	 * This is a handle-only method.
+	 * 
+	 * @return the path to the innermost resource enclosing this element or <code>null</code>
+	 */
+	public IPath getPath();
+	
+	/**
+	 * Returns the innermost resource enclosing this element.
+	 * This is a handle-only method.
+	 *
+	 * @return the innermost resource enclosing this element
+	 */
+	public IResource getResource();	
+	
+	/**
+	 * Returns a signature-like description of the element. Can be used to persist and restore 
+	 * {@link IApiElement}s.
+	 * 
+	 * @return a signature-like description of this element
+	 */
+	public String getDescriptor();
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiField.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiField.java
new file mode 100644
index 0000000..b0f00cd
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiField.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * Describes a field with an {@link IApiType}
+ * 
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiField extends IApiMember {
+
+	/**
+	 * Returns if this field is an enum constant.
+	 * 
+	 * @return true if this field is an enum constant, false otherwise
+	 * @throws CoreException if this element does not exist or if an exception occurs while accessing its corresponding resource.
+	 */
+	public boolean isEnumConstant() throws CoreException;
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiInitializer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiInitializer.java
new file mode 100644
index 0000000..aa4f137
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiInitializer.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+/**
+ * Describes a static initializer inside an {@link IApiType}
+ * 
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiInitializer extends IApiMember {
+
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiMember.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiMember.java
new file mode 100644
index 0000000..7656476
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiMember.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * Description of elements that can be members of {@link IApiType}s
+ * <p>
+ * This set consists of:
+ * <ul>
+ * <li>{@link IApiType}</li>
+ * <li>{@link IApiField}</li>
+ * <li>{@link IApiMethod}</li>
+ * </ul>
+ * </p>
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiMember extends IApiParent, IApiElement {
+
+	/**
+	 * Returns the smallest enclosing {@link IApiType} that encloses this element or 
+	 * <code>null</code> if the enclosing type is a top-level type.
+	 * 
+	 * @return the smallest enclosing {@link IApiType} of this element or <code>null</code>
+	 * @throws CoreException
+	 */
+	public IApiType getDeclaringType() throws CoreException;
+	
+	/**
+	 * Returns the modifier flags for this member. The flags can be examined using the class
+	 * <code>Flags</code>.
+	 * <p>
+	 * Note that only flags as indicated in the source are returned. Thus if an interface
+	 * defines a method <code>void myMethod();</code> the flags don't include the
+	 * 'public' flag.
+	 *
+	 * @exception CoreException if this element does not exist or if an exception occurs while accessing its corresponding resource.
+	 * @return the modifier flags for this member
+	 * @see Flags
+	 */
+	public int getFlags() throws CoreException;
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiMethod.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiMethod.java
new file mode 100644
index 0000000..3ee97ff
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiMethod.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * Describes a method.
+ * 
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiMethod extends IApiMember {
+
+	/**
+	 * Returns if this method is a constructor or not.
+	 * 
+	 * @return is this method is a constructor
+	 * @throws CoreException if this element does not exist or if an exception occurs while accessing its corresponding resource.
+	 */
+	public boolean isConstructor() throws CoreException;
+	
+	/**
+	 * Returns the signature of this method.
+	 * 
+	 * @return the signature of this method
+	 * @throws CoreException if this element does not exist or if an exception occurs while accessing its corresponding resource.
+	 */
+	public String getSignature() throws CoreException;
+	
+	/**
+	 * Returns whether this method is similar to the given method.
+	 * Two methods are similar if:
+	 * <ul>
+	 * <li>their element names are equal</li>
+	 * <li>they have the same number of parameters</li>
+	 * <li>the simple names of their parameter types are equal</li>
+	 * </ul>
+	 * This is a handle-only method.
+	 *
+	 * @param method the given method
+	 * @return true if this method is similar to the given method.
+	 */
+	public boolean isSimilar(IApiMethod method);
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiPackageFragment.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiPackageFragment.java
new file mode 100644
index 0000000..d30ab21
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiPackageFragment.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+/**
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiPackageFragment extends IApiParent, IApiElement {
+
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiPackageFragmentRoot.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiPackageFragmentRoot.java
new file mode 100644
index 0000000..fa8ee67
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiPackageFragmentRoot.java
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+/**
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiPackageFragmentRoot extends IApiParent, IApiElement {
+
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiParent.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiParent.java
new file mode 100644
index 0000000..5a903a4
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiParent.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * Describes an {@link IApiElement} that can have other {@link IApiElement}s as children
+ * 
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiParent {
+
+	/**
+	 * Returns the immediate children of this element.
+	 * Unless otherwise specified by the implementing element the children are in no particular order.
+	 *
+	 * @exception CoreException if this element does not exist or if an exception occurs while accessing its corresponding resource
+	 * @return the immediate children of this element
+	 */
+	public IApiElement[] getChildren() throws CoreException;
+	
+	/**
+	 * Returns whether this element has one or more immediate children.
+	 *
+	 * @exception CoreException if this element does not exist or if an exception occurs while accessing its corresponding resource
+	 * @return true if the immediate children of this element, false otherwise
+	 */
+	public boolean hasChildren() throws CoreException;	
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiResource.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiResource.java
new file mode 100644
index 0000000..c02e897
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiResource.java
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+/**
+ * Describes a general resource: i.e. a MANIFEST.MF file
+ * 
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiResource extends IApiElement, IApiParent {
+
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiType.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiType.java
new file mode 100644
index 0000000..8d9f86b
--- /dev/null
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/model/IApiType.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.api.tools.internal.provisional.model;
+
+import org.eclipse.core.runtime.CoreException;
+
+/**
+ * Describes a Java type (class, interface, enum or annotation).
+ * 
+ * @since 1.0.0
+ * @noimplement This interface is not intended to be implemented by clients.
+ */
+public interface IApiType extends IApiMember {
+
+	/**
+	 * Returns whether this type represents a class.
+	 * <p>
+	 * Note that a class can neither be an interface, an enumeration class, nor an annotation type.
+	 * </p>
+	 * @throws CoreException if this element does not exist or if an exception occurs while accessing its corresponding resource.
+	 * @return true if this type represents a class, false otherwise
+	 */
+	public boolean isClass() throws CoreException;
+	
+	/**
+	 * Returns whether this type represents an interface.
+	 * <p>
+	 * Note that an interface can also be an annotation type, but it can neither be a class nor an enumeration class.
+	 * </p>
+	 * @return true if this type represents an interface, false otherwise
+	 * @throws CoreException
+	 */
+	public boolean isInterface() throws CoreException;
+	
+	/**
+	 * Returns whether this type represents an enumeration class.
+	 * <p>
+	 * Note that an enumeration class can neither be a class, an interface, nor an annotation type.
+	 * </p>
+	 * @throws CoreExeption if this element does not exist or if an exception occurs while accessing its corresponding resource.
+	 * @return true if this type represents an enumeration class, false otherwise
+	 */
+	public boolean isEnum() throws CoreException;
+
+	/**
+	 * Returns whether this type represents an annotation type.
+	 * <p>
+	 * Note that an annotation type is also an interface, but it can neither be a class nor an enumeration class.
+	 * </p>
+	 * @return true if this type represents an annotation type, false otherwise
+	 * @throws CoreException
+	 */
+	public boolean isAnnotation() throws CoreException;
+	
+	/**
+	 * Returns whether this type represents a member type.
+	 * 
+	 * @return true if this type represents a member type, false otherwise
+	 * @throws CoreException
+	 */
+	public boolean isMember() throws CoreException;
+	
+	/**
+	 * Returns the fully qualified name of this type.
+	 * Member types are denoted using '$'. For example a.b.c.C$InnerC
+	 * 
+	 * @return the fully qualified name of the type
+	 */
+	public String getFullyQualifiedName();
+	
+	/**
+	 * Returns the immediate member types declared by this type.
+	 * The results are listed in the order in which they appear in the source or class file.
+	 *
+	 * @throws CoreException if this element does not exist or if an exception occurs while accessing its corresponding resource.
+	 * @return the immediate member types declared by this type
+	 */
+	public IApiType[] getTypes() throws CoreException;
+	
+	/**
+	 * Returns all of the {@link IApiField}s directly enclosed by this type.
+	 * 
+	 * @return all of the {@link IApiField}s of this type
+	 * @throws CoreException if the element does not exist or an exception occurs while accessing its corresponding resource.
+	 */
+	public IApiField[] getFields() throws CoreException;
+	
+	/**
+	 * Returns all of the {@link IApiMethod}s directly enclosed by this type.
+	 * 
+	 * @return all of the {@link IApiMethod}s of this type
+	 * @throws CoreException if the element does not exist or an exception occurs while accessing its corresponding resource.
+	 */
+	public IApiMethod[] getMethods() throws CoreException;
+	
+	/**
+	 * Returns the immediate enclosing {@link IApiPackageFragment} that this type resides in.
+	 * 
+	 * @return the immediate parent {@link IApiPackageFragment} this type resides in
+	 * @throws CoreException if the element does not exist or an exception occurs while accessing its corresponding resource. 
+	 */
+	public IApiPackageFragment getPackageFragment() throws CoreException;
+	
+	/**
+	 * Returns the super-class of this type if there is one, <code>null</code> otherwise.
+	 * 
+	 * @return the super-class of this type or <code>null</code> for types that do not have super-classes
+	 * @throws CoreException if the element does not exist or an exception occurs while accessing its corresponding resource. 
+	 */
+	public IApiType getSuperClass() throws CoreException;
+	
+	/**
+	 * Returns the super-interface set of this type if there is one, <code>null</code> otherwise.
+	 * 
+	 * @return the super-interface set of this type or <code>null</code> if there isn't one
+	 * @throws CoreException if the element does not exist or an exception occurs while accessing its corresponding resource. 
+	 */
+	public IApiType[] getSuperInterfaces() throws CoreException;
+}
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/ApiDescriptionProcessor.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/ApiDescriptionProcessor.java
index 4a72cc5..9e312e5 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/ApiDescriptionProcessor.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/ApiDescriptionProcessor.java
@@ -56,16 +56,15 @@
 import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
-import org.eclipse.pde.api.tools.internal.ApiDescription;
 import org.eclipse.pde.api.tools.internal.ApiSettingsXmlVisitor;
 import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
 import org.eclipse.pde.api.tools.internal.IApiXmlConstants;
 import org.eclipse.pde.api.tools.internal.JavadocTagManager;
+import org.eclipse.pde.api.tools.internal.model.ApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.ApiDescriptionVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiAnnotations;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiJavadocTag;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
@@ -74,6 +73,7 @@
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
 import org.eclipse.pde.api.tools.internal.util.Util;
 import org.eclipse.text.edits.TextEdit;
 import org.w3c.dom.Element;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java
index 6ade1e1..d0f0569 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java
@@ -47,7 +47,6 @@
 import org.eclipse.pde.api.tools.internal.JavadocTagManager;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
-import org.eclipse.pde.api.tools.internal.provisional.IApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.IApiJavadocTag;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFile;
 import org.eclipse.pde.api.tools.internal.provisional.IClassFileContainer;
@@ -56,6 +55,7 @@
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IMethodDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IPackageDescriptor;
 import org.eclipse.pde.api.tools.internal.provisional.descriptors.IReferenceTypeDescriptor;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiDescription;
 import org.eclipse.pde.api.tools.internal.search.MethodExtractor;
 import org.eclipse.pde.api.tools.internal.util.HashtableOfInt;
 import org.eclipse.pde.api.tools.internal.util.Util;
diff --git a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeTask.java b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeTask.java
index 49f3dd6..bf451e2 100644
--- a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeTask.java
+++ b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeTask.java
@@ -33,12 +33,12 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.pde.api.tools.internal.comparator.DeltaXmlVisitor;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.RestrictionModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.DeltaProcessor;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
 /**
@@ -298,8 +298,8 @@
 		}
 		// run the comparison
 		// create profile for the reference
-		IApiProfile referenceProfile = createProfile(REFERENCE_PROFILE_NAME, getInstallDir(tempDir, REFERENCE), this.eeFileLocation);
-		IApiProfile currentProfile = createProfile(CURRENT_PROFILE_NAME, getInstallDir(tempDir, CURRENT), this.eeFileLocation);
+		IApiBaseline referenceProfile = createProfile(REFERENCE_PROFILE_NAME, getInstallDir(tempDir, REFERENCE), this.eeFileLocation);
+		IApiBaseline currentProfile = createProfile(CURRENT_PROFILE_NAME, getInstallDir(tempDir, CURRENT), this.eeFileLocation);
 		
 		IDelta delta = null;
 		if (this.debug) {
diff --git a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIToolsVerificationTask.java b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIToolsVerificationTask.java
index e429219..5cfcb8c 100644
--- a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIToolsVerificationTask.java
+++ b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIToolsVerificationTask.java
@@ -48,8 +48,8 @@
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
 import org.eclipse.pde.api.tools.internal.provisional.IApiFilterStore;
 import org.eclipse.pde.api.tools.internal.provisional.IApiMarkerConstants;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
 import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter;
 import org.eclipse.pde.api.tools.internal.util.Util;
@@ -509,8 +509,8 @@
 		}
 		// run the comparison
 		// create profile for the reference
-		IApiProfile referenceProfile = createProfile(REFERENCE_PROFILE_NAME, getInstallDir(tempDir, REFERENCE), this.eeFileLocation);
-		IApiProfile currentProfile = createProfile(CURRENT_PROFILE_NAME, getInstallDir(tempDir, CURRENT), this.eeFileLocation);
+		IApiBaseline referenceProfile = createProfile(REFERENCE_PROFILE_NAME, getInstallDir(tempDir, REFERENCE), this.eeFileLocation);
+		IApiBaseline currentProfile = createProfile(CURRENT_PROFILE_NAME, getInstallDir(tempDir, CURRENT), this.eeFileLocation);
 		
 		if (this.debug) {
 			System.out.println("Creation of both profiles : " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiFileGeneratorTask.java b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiFileGeneratorTask.java
index fa3bc39..85d09c2 100644
--- a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiFileGeneratorTask.java
+++ b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/ApiFileGeneratorTask.java
@@ -32,11 +32,11 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.osgi.util.ManifestElement;
-import org.eclipse.pde.api.tools.internal.ApiDescription;
 import org.eclipse.pde.api.tools.internal.ApiSettingsXmlVisitor;
 import org.eclipse.pde.api.tools.internal.CompilationUnit;
 import org.eclipse.pde.api.tools.internal.DirectoryClassFileContainer;
 import org.eclipse.pde.api.tools.internal.IApiCoreConstants;
+import org.eclipse.pde.api.tools.internal.model.ApiDescription;
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.scanner.TagScanner;
 import org.eclipse.pde.api.tools.internal.util.Util;
diff --git a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CommonUtilsTask.java b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CommonUtilsTask.java
index 6aeb671..ff489f1 100644
--- a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CommonUtilsTask.java
+++ b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CommonUtilsTask.java
@@ -21,7 +21,7 @@
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
 /**
@@ -55,9 +55,9 @@
 		return new File(new File(new File(dir, profileInstallName), ECLIPSE_FOLDER_NAME), PLUGINS_FOLDER_NAME).getAbsolutePath();
 	}
 
-	public static IApiProfile createProfile(String profileName, String fileName, String eeFileLocation) {
+	public static IApiBaseline createProfile(String profileName, String fileName, String eeFileLocation) {
 		try {
-			IApiProfile baseline = null;
+			IApiBaseline baseline = null;
 			if (ApiPlugin.isRunningInFramework()) {
 				baseline = Factory.newApiProfile(profileName);
 			} else if (eeFileLocation != null) {
diff --git a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareProfilesTask.java b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareProfilesTask.java
index 96404b3..d095774 100644
--- a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareProfilesTask.java
+++ b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareProfilesTask.java
@@ -26,10 +26,10 @@
 import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
 import org.eclipse.pde.api.tools.internal.provisional.Factory;
 import org.eclipse.pde.api.tools.internal.provisional.IApiComponent;
-import org.eclipse.pde.api.tools.internal.provisional.IApiProfile;
 import org.eclipse.pde.api.tools.internal.provisional.VisibilityModifiers;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.ApiComparator;
 import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
+import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
 import org.eclipse.pde.api.tools.internal.util.Util;
 
 /**
@@ -97,8 +97,8 @@
 
 		// run the comparison
 		// create profile for the reference
-		IApiProfile referenceProfile = createProfile(REFERENCE_PROFILE_NAME, getInstallDir(tempDir, REFERENCE), this.eeFileLocation);
-		IApiProfile currentProfile = createProfile(CURRENT_PROFILE_NAME, getInstallDir(tempDir, CURRENT), this.eeFileLocation);
+		IApiBaseline referenceProfile = createProfile(REFERENCE_PROFILE_NAME, getInstallDir(tempDir, REFERENCE), this.eeFileLocation);
+		IApiBaseline currentProfile = createProfile(CURRENT_PROFILE_NAME, getInstallDir(tempDir, CURRENT), this.eeFileLocation);
 		
 		IDelta delta = null;
 		
@@ -171,9 +171,9 @@
 		return new File(new File(new File(dir, profileInstallName), ECLIPSE_FOLDER_NAME), PLUGINS_FOLDER_NAME).getAbsolutePath();
 	}
 
-	private static IApiProfile createProfile(String profileName, String fileName, String eeFileLocation) {
+	private static IApiBaseline createProfile(String profileName, String fileName, String eeFileLocation) {
 		try {
-			IApiProfile baseline = null;
+			IApiBaseline baseline = null;
 			if (ApiPlugin.isRunningInFramework()) {
 				baseline = Factory.newApiProfile(profileName);
 			} else if (eeFileLocation != null) {