Merge branch 'master' into integration
diff --git a/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12/META-INF/MANIFEST.MF
index 038f0f5..5ac6dcf 100644
--- a/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12/META-INF/MANIFEST.MF
+++ b/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %fragmentName
 Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.osgiminimum12
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Vendor: %providerName
 Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12/src/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.2.zip b/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12/src/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.2.zip
index 4d57618..6f2a73e 100644
--- a/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12/src/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.2.zip
+++ b/apitools/org.eclipse.pde.api.tools.ee.osgiminimum12/src/org/eclipse/pde/api/tools/internal/api_stubs/OSGi_Minimum-1.2.zip
Binary files differ
diff --git a/apitools/org.eclipse.pde.api.tools.generator/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.generator/.settings/org.eclipse.jdt.core.prefs
index 6d75609..c49d89e 100644
--- a/apitools/org.eclipse.pde.api.tools.generator/.settings/org.eclipse.jdt.core.prefs
+++ b/apitools/org.eclipse.pde.api.tools.generator/.settings/org.eclipse.jdt.core.prefs
@@ -28,7 +28,7 @@
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning

 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error

 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore

 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled

@@ -37,6 +37,9 @@
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public

 org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore

 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error

+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning

+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore

+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disable

 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore

 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore

 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore

diff --git a/apitools/org.eclipse.pde.api.tools.generator/src/org/eclipse/pde/api/tools/generator/EEGenerator.java b/apitools/org.eclipse.pde.api.tools.generator/src/org/eclipse/pde/api/tools/generator/EEGenerator.java
index 8c9c3e9..5b2ef50 100644
--- a/apitools/org.eclipse.pde.api.tools.generator/src/org/eclipse/pde/api/tools/generator/EEGenerator.java
+++ b/apitools/org.eclipse.pde.api.tools.generator/src/org/eclipse/pde/api/tools/generator/EEGenerator.java
@@ -793,6 +793,12 @@
 			// initialize known packages

 			String osgiProfileName = this.OSGiProfile;

 			Set<String> knownPackages = initializePackages(osgiProfileName);

+			// known packages should be part of the white list by default

+			if (this.whiteList != null && !this.whiteList.isEmpty()) {

+				this.whiteList.addAll(knownPackages);

+			} else {

+				this.whiteList = Collections.unmodifiableSet(knownPackages);

+			}

 			Map<String, Type> allVisibleTypes = new HashMap<String, Type>();

 			Map<String, Type> allTypes = new HashMap<String, Type>();

 			this.totalSize = 0;

@@ -924,7 +930,7 @@
 			return this.blackList.contains(typeName);

 		}

 		private boolean isOnWhiteList(String packageName) {

-			return packageName.startsWith("java.") || this.whiteList.contains(packageName); //$NON-NLS-1$

+			return packageName.startsWith("java.") || packageName.startsWith("javax.") || this.whiteList.contains(packageName); //$NON-NLS-1$ //$NON-NLS-2$

 		}

 		private boolean isOnWhiteList(Type type) {

 			return isOnWhiteList(type.getPackage());

diff --git a/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF
index 221e801..6d2f088 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF
+++ b/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: API Tools Tests
 Bundle-SymbolicName: org.eclipse.pde.api.tools.tests
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-Vendor: Eclipse.org
 Require-Bundle: org.eclipse.core.runtime,
  org.junit,
@@ -42,3 +42,4 @@
  org.eclipse.pde.api.tools.util.tests;uses:="junit.framework"
 Bundle-Activator: org.eclipse.pde.api.tools.tests.ApiTestsPlugin
 Bundle-ActivationPolicy: lazy
+Eclipse-BundleShape: dir
diff --git a/apitools/org.eclipse.pde.api.tools.ui/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.ui/.settings/org.eclipse.jdt.core.prefs
index 2cc99a6..a2dfaff 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/apitools/org.eclipse.pde.api.tools.ui/.settings/org.eclipse.jdt.core.prefs
@@ -28,7 +28,7 @@
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning

 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error

 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore

 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled

diff --git a/apitools/org.eclipse.pde.api.tools/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools/.settings/org.eclipse.jdt.core.prefs
index f5154f4..830fbe4 100644
--- a/apitools/org.eclipse.pde.api.tools/.settings/org.eclipse.jdt.core.prefs
+++ b/apitools/org.eclipse.pde.api.tools/.settings/org.eclipse.jdt.core.prefs
@@ -28,7 +28,7 @@
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning

 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error

 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=ignore

 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled

@@ -37,6 +37,9 @@
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=public

 org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore

 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error

+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning

+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore

+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disable

 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore

 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore

 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore

diff --git a/ds/org.eclipse.pde.ds.tests/.settings/org.eclipse.jdt.core.prefs b/ds/org.eclipse.pde.ds.tests/.settings/org.eclipse.jdt.core.prefs
index 31ed0c7..7098c08 100644
--- a/ds/org.eclipse.pde.ds.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/ds/org.eclipse.pde.ds.tests/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,3 @@
-#Tue Mar 03 18:36:09 CST 2009
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
diff --git a/ds/org.eclipse.pde.ds.ui/.settings/org.eclipse.jdt.core.prefs b/ds/org.eclipse.pde.ds.ui/.settings/org.eclipse.jdt.core.prefs
index 0f49dfe..b1181c0 100644
--- a/ds/org.eclipse.pde.ds.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/ds/org.eclipse.pde.ds.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,3 @@
-#Thu Mar 19 11:34:55 CDT 2009
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
@@ -26,7 +25,7 @@
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
diff --git a/ui/org.eclipse.pde.core/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.core/.settings/org.eclipse.jdt.core.prefs
index 6dcf1a7..6d52a71 100644
--- a/ui/org.eclipse.pde.core/.settings/org.eclipse.jdt.core.prefs
+++ b/ui/org.eclipse.pde.core/.settings/org.eclipse.jdt.core.prefs
@@ -37,7 +37,7 @@
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning

 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error

 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private

diff --git a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
index b8ecbcf..f64c7fe 100644
--- a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %name
 Bundle-SymbolicName: org.eclipse.pde.core; singleton:=true
-Bundle-Version: 3.8.0.qualifier
+Bundle-Version: 3.8.100.qualifier
 Bundle-Activator: org.eclipse.pde.internal.core.PDECore
 Bundle-Vendor: %provider-name
 Bundle-Localization: plugin
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/build/package.html b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/build/package.html
new file mode 100644
index 0000000..bf19f01
--- /dev/null
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/build/package.html
@@ -0,0 +1,15 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="Author" content="IBM">
+   <title>Package-level Javadoc</title>
+</head>
+<body>
+Application programming interfaces for working with PDE's model of build.properties.
+<h2>
+Package Specification</h2>
+Provides interfaces describing the shape of PDE's model of build.properties.  See <strong>org.eclipse.pde.core</strong> for
+the generic models that this package extends from.
+</body>
+</html>
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java
index 70a85f8..457793b 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * Copyright (c) 2003, 2012 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
@@ -165,7 +165,7 @@
 	}
 
 	// creates a map whose key is a Path to the source directory/jar and the value is a Path output directory or jar.
-	private static Map getClasspathMap(IProject project, boolean checkExcluded, boolean onlyJarsIfLinked, boolean absolutePaths) throws JavaModelException {
+	private static Map getClasspathMap(IProject project, boolean checkExcluded, boolean absolutePaths) throws JavaModelException {
 		List excluded = getFoldersToExclude(project, checkExcluded);
 		IJavaProject jProject = JavaCore.create(project);
 		HashMap map = new HashMap();
@@ -190,8 +190,6 @@
 				// make the path either relative or absolute
 				if (file != null) {
 					boolean isLinked = file.isLinked(IResource.CHECK_ANCESTORS);
-					if (entries[i].getEntryKind() != IClasspathEntry.CPE_SOURCE && !isLinked && onlyJarsIfLinked)
-						continue;
 					output = (isLinked || absolutePaths) ? file.getLocation().makeAbsolute() : output.makeRelative();
 				} else
 					continue;
@@ -270,7 +268,7 @@
 		IPluginLibrary[] libraries = base.getLibraries();
 		try {
 			if (project.hasNature(JavaCore.NATURE_ID)) {
-				Map classpathMap = getClasspathMap(project, checkExcluded, !base.getId().equals(PDECore.getDefault().getModelManager().getSystemBundleId()), false);
+				Map classpathMap = getClasspathMap(project, checkExcluded, false);
 				IFile file = PDEProject.getBuildProperties(project);
 				IPath filePath = file.getLocation();
 				boolean searchBuild = filePath != null && filePath.toFile().exists();
@@ -340,7 +338,7 @@
 			if (frags[i].getUnderlyingResource() != null) {
 				try {
 					IProject project = frags[i].getUnderlyingResource().getProject();
-					Map classpathMap = getClasspathMap(project, checkExcluded, false, true);
+					Map classpathMap = getClasspathMap(project, checkExcluded, true);
 					IFile file = PDEProject.getBuildProperties(project);
 					IBuild build = null;
 					if (file.exists()) {
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaTransformer.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaTransformer.java
index 903c49f..3b9f046 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaTransformer.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaTransformer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2012 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
@@ -275,10 +275,13 @@
 					+ name + "</p>"); //$NON-NLS-1$
 			int maxWidth = calculateMaxAttributeWidth(element.getAttributes());
 			for (int i = 0; i < attributes.length; i++) {
+				fWriter.print("<p class=\"code SchemaDtdAttlist\">"); //$NON-NLS-1$
 				appendAttlist(attributes[i], maxWidth);
+				if (i + 1 == attributes.length) {
+					fWriter.print("&gt;"); //$NON-NLS-1$
+				}
+				fWriter.println("</p>"); //$NON-NLS-1$
 			}
-			fWriter.println("&gt;</p>"); //$NON-NLS-1$
-
 		}
 		fWriter.println("<p></p>"); //$NON-NLS-1$
 
@@ -327,8 +330,12 @@
 		return false;
 	}
 
+	/**
+	 * Writes out an attribute for an element's attribute list.  Note that this method does not add newlines.
+	 * @param att the schema attribute to print
+	 * @param maxWidth the length of the largest name in the list so items can be padded out.
+	 */
 	private void appendAttlist(ISchemaAttribute att, int maxWidth) {
-		fWriter.print("<p class=\"code SchemaDtdAttlist\">"); //$NON-NLS-1$
 		// add name
 		fWriter.print(att.getName());
 		// fill spaces to align data type
@@ -363,7 +370,6 @@
 			fWriter.print("\"" + att.getValue() + "\""); //$NON-NLS-1$ //$NON-NLS-2$
 		} else if (!choices)
 			fWriter.print("#IMPLIED"); //$NON-NLS-1$
-		fWriter.print("</p>"); //$NON-NLS-1$
 	}
 
 	private void appendRestriction(ISchemaRestriction restriction) {
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/Bundle.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/Bundle.java
index 49d79a2..4b0633b 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/Bundle.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/Bundle.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2012 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
@@ -10,8 +10,7 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.core.bundle;
 
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
 import org.eclipse.pde.internal.core.ibundle.IBundle;
 import org.eclipse.pde.internal.core.ibundle.IManifestHeader;
 import org.eclipse.pde.internal.core.text.bundle.ManifestHeader;
@@ -20,40 +19,47 @@
 
 public class Bundle extends BundleObject implements IBundle {
 	private static final long serialVersionUID = 1L;
-	private Map fProperties;
+	private Map fDocumentHeaders = new HeaderMap();
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.core.ibundle.IBundle#setHeader(java.lang.String, java.lang.String)
 	 */
 	public void setHeader(String key, String value) {
-		if (fProperties == null)
-			fProperties = new HeaderMap();//TreeMap(new HeaderComparator());
-		Object oldValue = fProperties.get(key);
-		// an empty string removes the header whereas a non-zero length string with spaces is used to generate an empty header
-		if (value == null || value.length() == 0)
-			fProperties.remove(key);
-		else
-			fProperties.put(key, value);
-		getModel().fireModelObjectChanged(this, key, oldValue, value);
+		IManifestHeader header = (ManifestHeader) fDocumentHeaders.get(key);
+		String old = null;
+		if (header == null) {
+			header = getModel().getFactory().createHeader(key, value);
+			fDocumentHeaders.put(key, header);
+			getModel().fireModelObjectChanged(header, key, old, value);
+		} else {
+			old = header.getValue();
+			header.setValue(value);
+		}
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.core.ibundle.IBundle#getHeader(java.lang.String)
 	 */
 	public String getHeader(String key) {
-		if (fProperties == null) {
-			return null;
-		}
-		return (String) fProperties.get(key);
+		ManifestHeader header = (ManifestHeader) fDocumentHeaders.get(key);
+		return (header != null) ? header.getValue() : null;
 	}
 
-	public void load(Map properties) {
-		// Passed dictionary is read-only
-		fProperties = new HeaderMap();//TreeMap(new HeaderComparator());
-		Iterator it = properties.keySet().iterator();
-		while (it.hasNext()) {
-			Object o = it.next();
-			fProperties.put(o, properties.get(o));
+	/**
+	 * Load a map of String key value pairs into the list of known manifest headers.
+	 * Empty value strings will create empty headers.  Null values will be ignored.
+	 * @param headers map<String, String> of manifest key and values
+	 */
+	public void load(Map headers) {
+		Iterator iter = headers.keySet().iterator();
+		while (iter.hasNext()) {
+			String key = iter.next().toString();
+			if (headers.get(key) != null) {
+				String value = headers.get(key).toString();
+				IManifestHeader header = getModel().getFactory().createHeader(key.toString(), value);
+				header.update(); // Format the headers, unknown if this step is necessary for new header objects
+				fDocumentHeaders.put(key.toString(), header);
+			}
 		}
 	}
 
@@ -62,23 +68,36 @@
 		return localization != null ? localization : Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME;
 	}
 
-	public void setLocalization(String localization) {
-		setHeader(Constants.BUNDLE_LOCALIZATION, localization);
-	}
-
 	public void renameHeader(String key, String newKey) {
-		if (fProperties == null)
-			fProperties = new HeaderMap();//TreeMap(new HeaderComparator());
-		if (fProperties.get(key) != null) {
-			fProperties.put(newKey, fProperties.remove(key));
+		ManifestHeader header = (ManifestHeader) getManifestHeader(key);
+		if (header != null) {
+			header.setName(newKey);
+			fDocumentHeaders.put(newKey, fDocumentHeaders.remove(key));
 		}
+		getModel().fireModelObjectChanged(header, newKey, key, newKey);
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.pde.internal.core.ibundle.IBundle#getManifestHeader(java.lang.String)
+	 */
 	public IManifestHeader getManifestHeader(String key) {
-		return new ManifestHeader(key, getHeader(key), this, System.getProperty("line.separator")); //$NON-NLS-1$
+		IManifestHeader header = getModel().getFactory().createHeader(key, getHeader(key));
+		header.update(); // Format the headers, unknown if this step is necessary for new header objects
+		fDocumentHeaders.put(key, header);
+		return header;
 	}
 
+	/**
+	 * @return a map containing all key/value pairs of manifest headers as strings, values may be empty strings, but not <code>null</code>
+	 */
 	protected Map getHeaders() {
-		return fProperties;
+		Map result = new HashMap(fDocumentHeaders.values().size());
+		for (Iterator iterator = fDocumentHeaders.values().iterator(); iterator.hasNext();) {
+			IManifestHeader currentHeader = (IManifestHeader) iterator.next();
+			if (currentHeader.getValue() != null) {
+				result.put(currentHeader.getKey(), currentHeader.getValue());
+			}
+		}
+		return result;
 	}
 }
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundleModel.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundleModel.java
index bacd61d..6962da1 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundleModel.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundleModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2010 IBM Corporation and others.
+ *  Copyright (c) 2000, 2012 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
@@ -12,7 +12,6 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Map;
 import java.util.Properties;
 import org.eclipse.osgi.service.resolver.BundleDescription;
 import org.eclipse.osgi.service.resolver.HostSpecification;
@@ -20,8 +19,8 @@
 import org.eclipse.pde.core.IModelChangedEvent;
 import org.eclipse.pde.core.ModelChangedEvent;
 import org.eclipse.pde.internal.core.*;
-import org.eclipse.pde.internal.core.ibundle.*;
-import org.eclipse.pde.internal.core.text.bundle.BundleModelFactory;
+import org.eclipse.pde.internal.core.ibundle.IBundle;
+import org.eclipse.pde.internal.core.ibundle.IBundleModel;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
 
@@ -54,27 +53,15 @@
 
 	public void load(InputStream source, boolean outOfSync) {
 		try {
+			setLoaded(true); // Must be set before loading the manifest otherwise calls to getModel() cause a stack overflow
 			fBundle.load(ManifestElement.parseBundleManifest(source, null));
 			if (!outOfSync)
 				updateTimeStamp();
-			setLoaded(true);
-			// format headers
-			BundleModelFactory factory = new BundleModelFactory(this);
-			Map headers = fBundle.getHeaders();
-			Object[] keys = headers.keySet().toArray();
-			for (int i = 0; i < keys.length; i++) {
-				String key = (String) keys[i];
-				String value = (String) headers.get(key);
-				IManifestHeader header = factory.createHeader(key, value);
-				header.update();
-				String formatted = header.getValue();
-				if (formatted != null && formatted.trim().length() > 0) {
-					fBundle.setHeader(key, formatted);
-				}
-			}
+
 		} catch (BundleException e) {
+			PDECore.log(e);
 		} catch (IOException e) {
-		} finally {
+			PDECore.log(e);
 		}
 	}
 
@@ -114,9 +101,9 @@
 		if (desc.getHost() != null) {
 			properties.put(Constants.FRAGMENT_HOST, writeFragmentHost(desc.getHost()));
 		}
+		setLoaded(true); // Must set loaded before creating headers as calls to getModel() throw stack overflows
 		fBundle.load(properties);
 		updateTimeStamp();
-		setLoaded(true);
 	}
 
 	private String writeFragmentHost(HostSpecification host) {
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ibundle/IBundle.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ibundle/IBundle.java
index 2059c30..db2f637 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ibundle/IBundle.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ibundle/IBundle.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2003, 2010 IBM Corporation and others.
+ *  Copyright (c) 2003, 2012 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
@@ -16,21 +16,49 @@
 	 * Sets the value of a header in this bundle.  If the value is <code>null</code> the header will be removed from the bundle.
 	 * 
 	 * @param key header name
-	 * @param value value to set the header to, or <code>null</code> or an <b>EMPTY STRING</b> to remove the header.
-	 *   A non-zero length empty string sets an empty header.
+	 * @param value value to set the header to, or <code>null</code> to remove a header
 	 */
 	void setHeader(String key, String value);
 
-	void renameHeader(String key, String newKey);
+	/**
+	 * Convenience method for renaming a manifest header.  Creates newKey if it does not exist.  Removes oldKey if it exists.
+	 * If oldKey exists, the value will be copied to newKey.
+	 * 
+	 * @param oldKey header to rename
+	 * @param newKey new name for the header
+	 */
+	void renameHeader(String oldKey, String newKey);
 
+	/**
+	 * Returns the current value for the specified header or <code>null</code> if the header does not exist. 
+	 * 
+	 * @param key name of the header
+	 * @return value of the header or <code>null</code>, may also be an empty string.
+	 */
 	String getHeader(String key);
 
+	/**
+	 * Returns a {@link IManifestHeader} object for the given header key.  Will return an existing object if this model
+	 * has created it before.  Otherwise a new object will be created.  The returned object is not guaranteed to be
+	 * a specific implementation of IManifestHeader.
+	 * 
+	 * @param key name of the header
+	 * @return the manifest header object this model has for the given key or a new object
+	 */
 	IManifestHeader getManifestHeader(String key);
 
+	/**
+	 * Returns the bundle model that this bundle object belongs to.
+	 * 
+	 * @return the bundle model that this bundle object belongs to
+	 */
 	IBundleModel getModel();
 
+	/**
+	 * Returns the value of the bundle localization header or the default location if no header is found
+	 * 
+	 * @return localization header value or the default value
+	 */
 	String getLocalization();
 
-	void setLocalization(String localization);
-
 }
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/Bundle.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/Bundle.java
index bdf9404..4b8910c 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/Bundle.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/Bundle.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2008 IBM Corporation and others.
+ *  Copyright (c) 2000, 2012 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
@@ -141,10 +141,6 @@
 		return localization != null ? localization : Constants.BUNDLE_LOCALIZATION_DEFAULT_BASENAME;
 	}
 
-	public void setLocalization(String localization) {
-		setHeader(Constants.BUNDLE_LOCALIZATION, localization);
-	}
-
 	public void renameHeader(String key, String newKey) {
 		ManifestHeader header = (ManifestHeader) getManifestHeader(key);
 		if (header != null) {
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/CompositeManifestHeader.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/CompositeManifestHeader.java
index 75d0000..a1278e7 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/CompositeManifestHeader.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/CompositeManifestHeader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2011 IBM Corporation and others.
+ *  Copyright (c) 2005, 2012 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
@@ -46,8 +46,11 @@
 	protected void processValue(String value) {
 		try {
 			ManifestElement[] elements = ManifestElement.parseHeader(fName, value);
-			for (int i = 0; i < elements.length; i++)
-				addManifestElement(createElement(elements[i]), false);
+			if (elements != null) {
+				for (int i = 0; i < elements.length; i++) {
+					addManifestElement(createElement(elements[i]), false);
+				}
+			}
 		} catch (BundleException e) {
 		}
 	}
diff --git a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/SingleManifestHeader.java b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/SingleManifestHeader.java
index f8c586e..147856c 100644
--- a/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/SingleManifestHeader.java
+++ b/ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/SingleManifestHeader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2008 IBM Corporation and others.
+ *  Copyright (c) 2005, 2012 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
@@ -27,7 +27,7 @@
 	protected void processValue(String value) {
 		try {
 			ManifestElement[] elements = ManifestElement.parseHeader(getName(), value);
-			if (elements.length > 0)
+			if (elements != null && elements.length > 0)
 				fElement = new PDEManifestElement(this, elements[0]);
 		} catch (BundleException e) {
 		}
diff --git a/ui/org.eclipse.pde.junit.runtime/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.junit.runtime/.settings/org.eclipse.jdt.core.prefs
index fe7c90c..4d0d0d3 100644
--- a/ui/org.eclipse.pde.junit.runtime/.settings/org.eclipse.jdt.core.prefs
+++ b/ui/org.eclipse.pde.junit.runtime/.settings/org.eclipse.jdt.core.prefs
@@ -37,7 +37,7 @@
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning

 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error

 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private

diff --git a/ui/org.eclipse.pde.launching/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.launching/.settings/org.eclipse.jdt.core.prefs
index ad7d416..650f780 100644
--- a/ui/org.eclipse.pde.launching/.settings/org.eclipse.jdt.core.prefs
+++ b/ui/org.eclipse.pde.launching/.settings/org.eclipse.jdt.core.prefs
@@ -37,7 +37,7 @@
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning

 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error

 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled

diff --git a/ui/org.eclipse.pde.runtime/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.runtime/.settings/org.eclipse.jdt.core.prefs
index 18d544b..ef4b2fc 100644
--- a/ui/org.eclipse.pde.runtime/.settings/org.eclipse.jdt.core.prefs
+++ b/ui/org.eclipse.pde.runtime/.settings/org.eclipse.jdt.core.prefs
@@ -37,7 +37,7 @@
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning

 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error

 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=disabled

diff --git a/ui/org.eclipse.pde.ui.templates/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.ui.templates/.settings/org.eclipse.jdt.core.prefs
index e391828..61aa843 100644
--- a/ui/org.eclipse.pde.ui.templates/.settings/org.eclipse.jdt.core.prefs
+++ b/ui/org.eclipse.pde.ui.templates/.settings/org.eclipse.jdt.core.prefs
@@ -37,7 +37,7 @@
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning

 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error

 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private

diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/ProjectCreationTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/ProjectCreationTests.java
index 9db65d4..da5433f 100644
--- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/ProjectCreationTests.java
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/ProjectCreationTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 IBM Corporation and others.
+ * Copyright (c) 2010, 2012 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
@@ -747,9 +747,92 @@
 		assertFalse("Wrong singleton", d2.isSingleton());
 		assertNull("Wrong export wizard", d2.getExportWizardId());
 		assertNull("Wrong launch shortctus", d2.getLaunchShortcuts());
-	}	
+	}
 	
 	/**
+	 * Modify a simple project to add/remove/clear some entries.
+	 * See bug 380444 where previous settings weren't being cleared
+	 * 
+	 * @throws CoreException
+	 */
+	public void testModifyRequiredBundles() throws CoreException {
+		IBundleProjectDescription description = newProject();
+		IProject project = description.getProject();
+		IBundleProjectService service = getBundleProjectService();
+		
+		IRequiredBundleDescription requireDesc = service.newRequiredBundle("requiredBundleOne", null, false, false);
+		IRequiredBundleDescription requireDesc2 = service.newRequiredBundle("requiredBundleTwo", new VersionRange("[1.0.0,2.0.0)"), false, false);
+		IRequiredBundleDescription requireDesc3 = service.newRequiredBundle("requiredBundleThree", null, true, false);
+		IRequiredBundleDescription requireDesc4 = service.newRequiredBundle("requiredBundleFour", null, false, true);
+		description.setRequiredBundles(new IRequiredBundleDescription[]{requireDesc, requireDesc2, requireDesc3, requireDesc4});
+		
+		IPackageExportDescription ex0 = service.newPackageExport("a.b.c", new Version("2.0.0"), true, null);
+		IPackageExportDescription ex1 = service.newPackageExport("a.b.c.interal", null, false, null);
+		IPackageExportDescription ex2 = service.newPackageExport("a.b.c.interal.x", null, false, new String[]{"x.y.z"});
+		IPackageExportDescription ex3 = service.newPackageExport("a.b.c.interal.y", new Version("1.2.3"), false, new String[]{"d.e.f", "g.h.i"});
+		description.setPackageExports(new IPackageExportDescription[]{ex0, ex1, ex2, ex3});
+		
+		IPackageImportDescription importDesc = service.newPackageImport("importPkgOne", null, false);		
+		IPackageImportDescription importDesc2 = service.newPackageImport("importPkgTwo", new VersionRange("[1.0.0,2.0.0)"), false);
+		IPackageImportDescription importDesc3 = service.newPackageImport("importPkgThree", null, true);
+		IPackageImportDescription importDesc4 = service.newPackageImport("importPkgFour", null, false);
+		description.setPackageImports(new IPackageImportDescription[]{importDesc, importDesc2, importDesc3, importDesc4});
+		
+		description.apply(null);
+		
+		// verify attributes
+		IBundleProjectDescription d2 = service.getDescription(project);
+		assertEquals("Wrong number of required bundles", 4, d2.getRequiredBundles().length);
+		assertEquals("Wrong number of package exports", 4, d2.getPackageExports().length);
+		assertEquals("Wrong number of package imports", 4, d2.getPackageImports().length);
+		
+		// add entries
+		IRequiredBundleDescription requireDesc5 = service.newRequiredBundle("requiredBundleFive", null, false, false);
+		IRequiredBundleDescription requireDesc6 = service.newRequiredBundle("requiredBundleSix", null, false, false);
+		description.setRequiredBundles(new IRequiredBundleDescription[]{requireDesc, requireDesc2, requireDesc3, requireDesc4, requireDesc5, requireDesc6});
+		
+		IPackageExportDescription ex4 = service.newPackageExport("a.b.c.interal.x2", null, false, new String[]{"x.y.z"});
+		IPackageExportDescription ex5 = service.newPackageExport("a.b.c.interal.y2", new Version("1.2.3"), false, new String[]{"d.e.f", "g.h.i"});
+		description.setPackageExports(new IPackageExportDescription[]{ex0, ex1, ex2, ex3, ex4, ex5});
+	
+		IPackageImportDescription importDesc5 = service.newPackageImport("importPkgFive", null, true);
+		IPackageImportDescription importDesc6 = service.newPackageImport("importPkgSix", null, false);
+		description.setPackageImports(new IPackageImportDescription[]{importDesc, importDesc2, importDesc3, importDesc4, importDesc5, importDesc6});
+		
+		description.apply(null);
+		
+		// verify attributes
+		IBundleProjectDescription d3 = service.getDescription(project);
+		assertEquals("Wrong number of required bundles after additions", 6, d3.getRequiredBundles().length);
+		assertEquals("Wrong number of package exports after addtions", 6, d3.getPackageExports().length);
+		assertEquals("Wrong number of package imports after additions", 6, d3.getPackageImports().length);
+		
+		// remove most entries
+		description.setRequiredBundles(new IRequiredBundleDescription[]{requireDesc2, requireDesc5});
+		description.setPackageExports(new IPackageExportDescription[]{ex1, ex4});
+		description.setPackageImports(new IPackageImportDescription[]{importDesc2, importDesc5});
+		description.apply(null);
+		
+		// verify attributes
+		IBundleProjectDescription d4 = service.getDescription(project);
+		assertEquals("Wrong number of required bundles after removals", 2, d4.getRequiredBundles().length);
+		assertEquals("Wrong number of package exports after removals", 2, d4.getPackageExports().length);
+		assertEquals("Wrong number of package imports after removals", 2, d4.getPackageImports().length);
+		
+		// clear entries
+		description.setRequiredBundles(null);
+		description.setPackageExports(null);
+		description.setPackageImports(null);
+		description.apply(null);
+		
+		// verify attributes
+		IBundleProjectDescription d5 = service.getDescription(project);
+		assertNull("Wrong number of required bundles after removals", d5.getRequiredBundles());
+		assertNull("Wrong number of package exports after removals", d5.getPackageExports());
+		assertNull("Wrong number of package imports after removals", d5.getPackageImports());
+	}
+		
+	/**
 	 * Convert a fragment into a bundle
 	 * 
 	 * @throws CoreException
diff --git a/ui/org.eclipse.pde.ui/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.ui/.settings/org.eclipse.jdt.core.prefs
index fe7c90c..4d0d0d3 100644
--- a/ui/org.eclipse.pde.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/ui/org.eclipse.pde.ui/.settings/org.eclipse.jdt.core.prefs
@@ -37,7 +37,7 @@
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning

 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error

 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private

diff --git a/ui/org.eclipse.pde.ui/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.ui/META-INF/MANIFEST.MF
index 96c2e98..41cf46a 100644
--- a/ui/org.eclipse.pde.ui/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %name
 Bundle-SymbolicName: org.eclipse.pde.ui; singleton:=true
-Bundle-Version: 3.7.0.qualifier
+Bundle-Version: 3.7.100.qualifier
 Bundle-Activator: org.eclipse.pde.internal.ui.PDEPlugin
 Bundle-Vendor: %provider-name
 Bundle-Localization: plugin
diff --git a/ui/org.eclipse.pde.ui/icons/dtool16/eclipse_launcher_wiz.gif b/ui/org.eclipse.pde.ui/icons/dtool16/eclipse_launcher_wiz.gif
deleted file mode 100644
index 18aac88..0000000
--- a/ui/org.eclipse.pde.ui/icons/dtool16/eclipse_launcher_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/ui/org.eclipse.pde.ui/icons/etool16/eclipse_launcher_wiz.gif b/ui/org.eclipse.pde.ui/icons/etool16/eclipse_launcher_wiz.gif
deleted file mode 100644
index 4cdb299..0000000
--- a/ui/org.eclipse.pde.ui/icons/etool16/eclipse_launcher_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java
index f3b36df..4fb9439 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java
@@ -200,7 +200,6 @@
 	public static final ImageDescriptor DESC_NEWFTRPRJ_TOOL = create(PATH_TOOL, "newftrprj_wiz.gif"); //$NON-NLS-1$
 	public static final ImageDescriptor DESC_NEWPPRJ_TOOL = create(PATH_TOOL, "newpprj_wiz.gif"); //$NON-NLS-1$
 	public static final ImageDescriptor DESC_NEWFRAGPRJ_TOOL = create(PATH_TOOL, "newfprj_wiz.gif"); //$NON-NLS-1$
-	public static final ImageDescriptor DESC_WORKBENCH_LAUNCHER_WIZ = create(PATH_TOOL, "eclipse_launcher_wiz.gif"); //$NON-NLS-1$
 	public static final ImageDescriptor DESC_NEWEXP_WIZ_TOOL = create(PATH_TOOL, "newexp_wiz.gif"); //$NON-NLS-1$
 	public static final ImageDescriptor DESC_DEPLOYCS_TOOL = create(PATH_TOOL, "new_cheatsheet_wiz.gif"); //$NON-NLS-1$
 	public static final ImageDescriptor DESC_VALIDATE_TOOL = create(PATH_TOOL, "validate.gif"); //$NON-NLS-1$
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/ExternalizeStringsOperation.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/ExternalizeStringsOperation.java
index e5deb32..9e9f5a6 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/ExternalizeStringsOperation.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/ExternalizeStringsOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2012 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
@@ -37,6 +37,7 @@
 import org.eclipse.pde.internal.ui.util.PDEModelUtility;
 import org.eclipse.text.edits.*;
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
+import org.osgi.framework.Constants;
 
 public class ExternalizeStringsOperation extends WorkspaceModifyOperation {
 
@@ -178,7 +179,7 @@
 				if (model instanceof IBundlePluginModelBase) {
 					IBundlePluginModelBase bundleModel = (IBundlePluginModelBase) model;
 					IBundle bundle = bundleModel.getBundleModel().getBundle();
-					bundle.setLocalization(localiz);
+					bundle.setHeader(Constants.BUNDLE_LOCALIZATION, localiz);
 				}
 			}
 		}, mon);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/refactoring/BundleManifestChange.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/refactoring/BundleManifestChange.java
index 832e16f..e898597 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/refactoring/BundleManifestChange.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/refactoring/BundleManifestChange.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2012 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
@@ -155,9 +155,9 @@
 
 	private static void renameLocalization(Bundle bundle, String oldText, String newText) {
 		if (newText.endsWith(".properties")) //$NON-NLS-1$
-			bundle.setLocalization(LocaleUtil.trimLocalization(newText));
+			bundle.setHeader(Constants.BUNDLE_LOCALIZATION, LocaleUtil.trimLocalization(newText));
 		else
-			bundle.setLocalization(null);
+			bundle.setHeader(Constants.BUNDLE_LOCALIZATION, null);
 	}
 
 	private static void resetHeaderValue(IManifestHeader header, boolean isPackage, String oldText, String newText) {
diff --git a/ui/org.eclipse.pde/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde/.settings/org.eclipse.jdt.core.prefs
index c0cb5a6..d1075bf 100644
--- a/ui/org.eclipse.pde/.settings/org.eclipse.jdt.core.prefs
+++ b/ui/org.eclipse.pde/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,3 @@
-#Fri Oct 03 17:34:09 CDT 2008
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -42,7 +41,7 @@
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
diff --git a/ui/org.eclipse.ui.trace/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.ui.trace/.settings/org.eclipse.jdt.core.prefs
index 55a11d7..239445b 100644
--- a/ui/org.eclipse.ui.trace/.settings/org.eclipse.jdt.core.prefs
+++ b/ui/org.eclipse.ui.trace/.settings/org.eclipse.jdt.core.prefs
@@ -43,7 +43,7 @@
 org.eclipse.jdt.core.compiler.problem.includeFieldsInNullAnalysis=disabled

 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled

 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning

-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore

+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error

 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning

 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private

diff --git a/ui/org.eclipse.ui.views.log/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.ui.views.log/.settings/org.eclipse.jdt.core.prefs
index 10c4d00..1eb11a5 100644
--- a/ui/org.eclipse.ui.views.log/.settings/org.eclipse.jdt.core.prefs
+++ b/ui/org.eclipse.ui.views.log/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,3 @@
-#Wed Jan 02 10:20:52 CST 2008
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=warning
@@ -42,7 +41,7 @@
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=error
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
 org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private