*** empty log message ***
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;
+    }
 	
 }