diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/DependencyPropertiesDialog.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/DependencyPropertiesDialog.java
index 82ae2b8..3033194 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/DependencyPropertiesDialog.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/DependencyPropertiesDialog.java
@@ -16,6 +16,7 @@
 import org.eclipse.jface.dialogs.*;
 import org.eclipse.pde.core.plugin.*;
 import org.eclipse.pde.internal.ui.*;
+import org.eclipse.pde.internal.ui.model.bundle.*;
 import org.eclipse.swt.*;
 import org.eclipse.swt.events.*;
 import org.eclipse.swt.layout.*;
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageSection.java
index f16c91b..b3abe83 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageSection.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageSection.java
@@ -11,34 +11,50 @@
 
 package org.eclipse.pde.internal.ui.editor.plugin;
 
-import java.util.*;
-
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jdt.core.*;
-import org.eclipse.jdt.ui.*;
-import org.eclipse.jface.action.*;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.osgi.service.resolver.*;
-import org.eclipse.osgi.util.*;
-import org.eclipse.pde.core.*;
-import org.eclipse.pde.core.plugin.*;
-import org.eclipse.pde.internal.core.*;
-import org.eclipse.pde.internal.core.bundle.*;
-import org.eclipse.pde.internal.core.ibundle.*;
-import org.eclipse.pde.internal.ui.*;
-import org.eclipse.pde.internal.ui.editor.*;
-import org.eclipse.pde.internal.ui.editor.context.*;
-import org.eclipse.pde.internal.ui.elements.*;
-import org.eclipse.pde.internal.ui.parts.*;
-import org.eclipse.pde.internal.ui.util.*;
-import org.eclipse.swt.*;
-import org.eclipse.swt.graphics.*;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.ui.actions.*;
-import org.eclipse.ui.forms.widgets.*;
-import org.osgi.framework.*;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.ui.ISharedImages;
+import org.eclipse.jdt.ui.JavaElementLabelProvider;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.osgi.service.resolver.ExportPackageDescription;
+import org.eclipse.pde.core.IModelChangedEvent;
+import org.eclipse.pde.core.IModelChangedListener;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.eclipse.pde.internal.core.ICoreConstants;
+import org.eclipse.pde.internal.core.bundle.BundlePluginBase;
+import org.eclipse.pde.internal.core.ibundle.IBundle;
+import org.eclipse.pde.internal.core.ibundle.IBundleModel;
+import org.eclipse.pde.internal.ui.PDEPlugin;
+import org.eclipse.pde.internal.ui.editor.PDEFormPage;
+import org.eclipse.pde.internal.ui.editor.TableSection;
+import org.eclipse.pde.internal.ui.editor.context.InputContextManager;
+import org.eclipse.pde.internal.ui.elements.DefaultTableProvider;
+import org.eclipse.pde.internal.ui.model.bundle.Bundle;
+import org.eclipse.pde.internal.ui.model.bundle.ExportPackageHeader;
+import org.eclipse.pde.internal.ui.model.bundle.ExportPackageObject;
+import org.eclipse.pde.internal.ui.parts.TablePart;
+import org.eclipse.pde.internal.ui.util.SWTUtil;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.actions.ActionFactory;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Version;
 
 public class ExportPackageSection extends TableSection implements IModelChangedListener {
 
@@ -48,27 +64,15 @@
     
 	class ExportPackageContentProvider extends DefaultTableProvider {
 		public Object[] getElements(Object parent) {
-			if (fPackages == null)
-				createExportObjects();
-			return fPackages.values().toArray();
+			if (fHeader == null) {
+                //TODO bad cast
+                Bundle bundle = (Bundle)getBundle();
+                fHeader = (ExportPackageHeader)bundle.getManifestHeader(getExportedPackageHeader());
+            }
+            return fHeader == null ? new Object[0] : fHeader.getPackages();
 		}
-
-		private void createExportObjects() {
-			fPackages = new TreeMap();
-			try {
-				String value = getBundle().getHeader(getExportedPackageHeader());
-				if (value != null) {
-					ManifestElement[] elements = ManifestElement.parseHeader(Constants.IMPORT_PACKAGE, value);
-					for (int i = 0; i < elements.length; i++) {
-						ExportPackageObject p = new ExportPackageObject(elements[i], getVersionAttribute());
-                        fPackages.put(p.getName(), p);
-					}
-				}
-			} catch (BundleException e) {
-			}
-        }
-	}
-
+    }
+    
 	class ExportPackageLabelProvider extends LabelProvider implements
 			ITableLabelProvider {
 		public String getColumnText(Object obj, int index) {
@@ -100,10 +104,10 @@
 
     private TableViewer fPackageViewer;
 
-    private Map fPackages;
     private Action fAddAction;
     private Action fRemoveAction;
     private Action fPropertiesAction;
+    private ExportPackageHeader fHeader;
 
 	public ExportPackageSection(PDEFormPage page, Composite parent) {
 		super(
@@ -222,21 +226,14 @@
         dialog.setTitle(exportObject.getName());
         if (dialog.open() == DependencyPropertiesDialog.OK && isEditable()) {
              exportObject.setVersion(dialog.getVersion());
-             writeExportPackageHeader();
          }
     }
 
 	private void handleRemove() {
-		IStructuredSelection ssel = (IStructuredSelection) fPackageViewer.getSelection();
-		removeExportPackages(ssel.toArray());
-	}
-
-	private void removeExportPackages(Object[] removed) {
-		for (int k = 0; k < removed.length; k++) {
-			ExportPackageObject p = (ExportPackageObject) removed[k];
-			fPackages.remove(p.getName());
-		}
-		writeExportPackageHeader();
+		Object[] removed = ((IStructuredSelection) fPackageViewer.getSelection()).toArray();
+        for (int i = 0; i < removed.length; i++) {
+            fHeader.removePackage((ExportPackageObject) removed[i]);
+        }
 	}
 
 	private void handleAdd() {
@@ -247,16 +244,12 @@
                 ILabelProvider labelProvider = new JavaElementLabelProvider();
                 PackageSelectionDialog dialog = new PackageSelectionDialog(
                         PDEPlugin.getActiveWorkbenchShell(),
-                        labelProvider, JavaCore.create(project), getNames());
+                        labelProvider, JavaCore.create(project), fHeader.getPackageNames());
                 if (dialog.open() == PackageSelectionDialog.OK) {
                     Object[] selected = dialog.getResult();
                     for (int i = 0; i < selected.length; i++) {
                         IPackageFragment candidate = (IPackageFragment) selected[i];
-                        ExportPackageObject p = new ExportPackageObject(candidate, getVersionAttribute());
-                        fPackages.put(p.getName(), p);
-                    }
-                    if (selected.length > 0) {
-                        writeExportPackageHeader();
+                        fHeader.addPackage(new ExportPackageObject(candidate, getVersionAttribute()));
                     }
                 }
                 labelProvider.dispose();
@@ -265,32 +258,9 @@
         }
 	}
     
-    private Vector getNames() {
-        Vector vector = new Vector(fPackages.size());
-        Iterator iter = fPackages.keySet().iterator();
-        for (int i = 0; iter.hasNext(); i++) {
-            vector.add(iter.next().toString());
-        }
-        return vector;
-    }
-
-	public void writeExportPackageHeader() {
-		StringBuffer buffer = new StringBuffer();
-		if (fPackages != null) {
-            Iterator iter = fPackages.values().iterator();
-			while (iter.hasNext()) {
-				buffer.append(((ExportPackageObject)iter.next()).write());
-				if (iter.hasNext()) {
-					buffer.append("," + System.getProperty("line.separator") + " "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				}
-			}
-		}
-		getBundle().setHeader(getExportedPackageHeader(), buffer.toString());
-	}
-
 	public void modelChanged(IModelChangedEvent event) {
 		if (event.getChangeType() == IModelChangedEvent.WORLD_CHANGED) {
-            fPackages = null;
+            fHeader = null;
 			markStale();
 			return;
 		}
diff --git a/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/Bundle.java b/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/Bundle.java
index 91dfc4e..c82e2f8 100644
--- a/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/Bundle.java
+++ b/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/Bundle.java
@@ -13,8 +13,10 @@
 import java.util.*;
 import java.util.jar.*;
 import org.eclipse.jface.text.*;
+import org.eclipse.pde.internal.core.*;
 import org.eclipse.pde.internal.core.ibundle.*;
 import org.eclipse.pde.internal.ui.model.*;
+import org.osgi.framework.*;
 
 public class Bundle implements IBundle {
 	
@@ -34,9 +36,8 @@
 		Iterator iter = attributes.keySet().iterator();
 		while (iter.hasNext()) {
 			Attributes.Name key = (Attributes.Name) iter.next();
-			ManifestHeader header = new ManifestHeader();
-			header.setName(key.toString());
-			header.setValue((String)attributes.get(key));
+            String value = (String)attributes.get(key);
+			ManifestHeader header = createHeader(key.toString(), value);
 			fDocumentHeaders.put(key.toString(), header);
 		}
 		adjustOffsets(fModel.getDocument());		
@@ -103,14 +104,25 @@
 		ManifestHeader header = (ManifestHeader)fDocumentHeaders.get(key);
         String old = header == null ? null : header.getValue();
 		if (header == null) {
-			header = new ManifestHeader();
-		}
-		header.setName(key);
-		header.setValue(value);
+			header = createHeader(key, value);
+		} else {
+            header.setValue(value);
+        }
 		fDocumentHeaders.put(key, header);
 		
 		fModel.fireModelObjectChanged(header, key, old, value);
 	}
+    
+    private ManifestHeader createHeader(String key, String value) {
+        ManifestHeader header = null;
+        if (key.equals(Constants.EXPORT_PACKAGE) || key.equals(ICoreConstants.PROVIDE_PACKAGE)) {
+            header = new ExportPackageHeader(key, value);
+        } else {
+            header = new ManifestHeader(key, value);
+        }
+        header.setBundle(this);
+        return header;
+    }
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.core.ibundle.IBundle#getHeader(java.lang.String)
 	 */
@@ -118,6 +130,10 @@
 		ManifestHeader header = (ManifestHeader)fDocumentHeaders.get(key);
 		return (header != null) ? header.getValue() : null;
 	}
+    
+    public ManifestHeader getManifestHeader(String key) {
+        return (ManifestHeader)fDocumentHeaders.get(key);
+    }
 	
 	public Dictionary getHeaders() {
 		return fDocumentHeaders;
diff --git a/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/EclipseAutoStartHeader.java b/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/EclipseAutoStartHeader.java
deleted file mode 100644
index 4a77925..0000000
--- a/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/EclipseAutoStartHeader.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2004 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.internal.ui.model.bundle;
-
-import java.util.*;
-
-
-public class EclipseAutoStartHeader extends ManifestHeader {
-	
-	private ArrayList fExceptions = new ArrayList();
-	
-	public EclipseAutoStartHeader() {
-		setName("Eclipse-AutoStart"); //$NON-NLS-1$
-	}
-	
-	public void addException(String packageName) {
-		if (!fExceptions.contains(packageName))
-			fExceptions.add(packageName);
-	}
-	
-	public void removeException(String packageName) {
-		fExceptions.remove(packageName);
-	}
-	
-	public String[] getExceptions() {
-		return (String[])fExceptions.toArray(new String[fExceptions.size()]);
-	}
-}
diff --git a/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/ExportPackageHeader.java b/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/ExportPackageHeader.java
new file mode 100644
index 0000000..55955a0
--- /dev/null
+++ b/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/ExportPackageHeader.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2005 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.internal.ui.model.bundle;
+
+import java.util.*;
+
+import org.eclipse.osgi.util.*;
+import org.eclipse.pde.internal.core.*;
+import org.osgi.framework.*;
+
+public class ExportPackageHeader extends ManifestHeader {
+    
+    private TreeMap fPackages = new TreeMap();
+
+    public ExportPackageHeader(int manifestVersion, String value) {
+       this(getExportedPackageHeader(manifestVersion), value);
+    }
+    
+    public ExportPackageHeader(String name, String value) {
+        super(name, value);
+        processValue();
+    }
+
+    private void processValue() {
+        try {
+            if (fValue != null) {
+                ManifestElement[] elements = ManifestElement.parseHeader(fName, fValue);
+                for (int i = 0; i < elements.length; i++) {
+                    ExportPackageObject p = new ExportPackageObject(elements[i], getVersionAttribute());
+                    fPackages.put(p.getName(), p);
+                }
+            }
+        } catch (BundleException e) {
+        }
+    }
+    
+    private String getVersionAttribute() {
+        int manifestVersion = fName.equals(Constants.EXPORT_PACKAGE) ? 2 : 1;
+        return (manifestVersion < 2) ? Constants.PACKAGE_SPECIFICATION_VERSION : Constants.VERSION_ATTRIBUTE;
+    }
+
+    private static String getExportedPackageHeader(int manifestVersion) {
+         return (manifestVersion < 2) ? ICoreConstants.PROVIDE_PACKAGE : Constants.EXPORT_PACKAGE;
+    }
+    
+    public void addPackage(ExportPackageObject object) {
+        fPackages.put(object.getName(), object);
+        getBundle().setHeader(fName, write());
+    }
+    
+    public void removePackage(ExportPackageObject object) {
+        fPackages.remove(object.getName());
+        getBundle().setHeader(fName, write());
+    }
+    
+    public ExportPackageObject[] getPackages() {
+        return (ExportPackageObject[])fPackages.values().toArray(new ExportPackageObject[fPackages.size()]);
+    }
+    
+    public Vector getPackageNames() {
+        Vector vector = new Vector(fPackages.size());
+        Iterator iter = fPackages.keySet().iterator();
+        for (int i = 0; iter.hasNext(); i++) {
+            vector.add(iter.next().toString());
+        }
+        return vector;
+    }
+    
+    public String write() {
+        StringBuffer buffer = new StringBuffer(fName);
+        buffer.append(": ");
+        Iterator iter = fPackages.values().iterator();
+        while (iter.hasNext()) {
+            buffer.append(((ExportPackageObject)iter.next()).write());
+            if (iter.hasNext()) {
+                buffer.append("," + System.getProperty("line.separator") + " "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+            }
+        }
+        return buffer.toString();
+    }
+
+}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageObject.java b/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/ExportPackageObject.java
similarity index 98%
rename from ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageObject.java
rename to ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/ExportPackageObject.java
index 4ad3a79..27f3a2d 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExportPackageObject.java
+++ b/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/ExportPackageObject.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.pde.internal.ui.editor.plugin;
+package org.eclipse.pde.internal.ui.model.bundle;
 
 import java.io.*;
 import java.util.*;
diff --git a/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/ManifestHeader.java b/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/ManifestHeader.java
index 117b777..d3cd2da 100644
--- a/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/ManifestHeader.java
+++ b/ui/org.eclipse.pde.ui/src_Forms/org/eclipse/pde/internal/ui/model/bundle/ManifestHeader.java
@@ -12,13 +12,21 @@
 
 import java.io.*;
 import org.eclipse.pde.internal.core.bundle.*;
+import org.eclipse.pde.internal.core.ibundle.IBundle;
 import org.eclipse.pde.internal.ui.model.*;
 
 public class ManifestHeader extends BundleObject implements IDocumentKey {
 	private int fOffset = -1;
 	private int fLength = -1;
-	private String fName;
-	private String fValue;
+    
+	protected String fName;
+	protected String fValue;
+    private IBundle fBundle;
+    
+    public ManifestHeader(String name, String value) {
+        fName = name;
+        fValue = value;
+    }
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.pde.internal.ui.model.IDocumentKey#setName(java.lang.String)
@@ -75,5 +83,13 @@
 	 */
 	public void write(String indent, PrintWriter writer) {
 	}
+    
+    public void setBundle(IBundle bundle) {
+        fBundle = bundle;
+    }
+    
+    public IBundle getBundle() {
+        return fBundle;
+    }
 	
 }
