diff --git a/PLUGIN_RELEASE-NOTES-3.0.0.txt b/PLUGIN_RELEASE-NOTES-3.0.0.txt
index a161445..1ec39a0 100644
--- a/PLUGIN_RELEASE-NOTES-3.0.0.txt
+++ b/PLUGIN_RELEASE-NOTES-3.0.0.txt
@@ -63,6 +63,9 @@
 Bug Fixed and New Features
 --------------------------
 
+GERONIMODEVTOOLS-652    Can't see icon for GEP in about dialog when install GEP in deployable mode
+GERONIMODEVTOOLS-651    No deployment plan can be generated with 3.0 M1
+GERONIMODEVTOOLS-650    The sections of server editor page "overview" cann't display
 GERONIMODEVTOOLS-647	Synchronize dependency version with Geronimo 3.0 M1
 GERONIMODEVTOOLS-646	Upgrade to eclipse Helios
 GERONIMODEVTOOLS-643	Refactor GEP 3.0 code to decouple various server adapters
diff --git a/assembly/src/main/assembly/deployable.xml b/assembly/src/main/assembly/deployable.xml
index 4645b48..68817b8 100644
--- a/assembly/src/main/assembly/deployable.xml
+++ b/assembly/src/main/assembly/deployable.xml
@@ -88,8 +88,7 @@
          |
          -->
         <dependencySet>
-            <outputFileNameMapping>${artifact.artifactId}_${artifact.version}</outputFileNameMapping>
-            <outputDirectory>eclipse/features/</outputDirectory>
+            <outputDirectory>eclipse/features/${artifact.artifactId}_${artifact.version}</outputDirectory>
             <unpack>true</unpack>
             <includes>
                 <include>org.apache.geronimo.devtools:org.apache.geronimo.v30.feature</include>
diff --git a/plugins/org.apache.geronimo.j2ee.v11.jaxbmodel/.classpath b/plugins/org.apache.geronimo.j2ee.v11.jaxbmodel/.classpath
index af8fcb7..b56d72d 100644
--- a/plugins/org.apache.geronimo.j2ee.v11.jaxbmodel/.classpath
+++ b/plugins/org.apache.geronimo.j2ee.v11.jaxbmodel/.classpath
@@ -1,28 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!-- @version $Rev$ $Date$ -->
-
-<classpath>
-    <classpathentry kind="src" path="src/main/java"/>
-    <classpathentry kind="src" path="src/test/java"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-    <classpathentry kind="var" path="M2_REPO/xmlunit/xmlunit/1.3/xmlunit-1.3.jar"/>
-    <classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/test/java"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="M2_REPO/xmlunit/xmlunit/1.3/xmlunit-1.3.jar"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/plugins/org.apache.geronimo.j2ee.v11.jaxbmodel/META-INF/MANIFEST.MF b/plugins/org.apache.geronimo.j2ee.v11.jaxbmodel/META-INF/MANIFEST.MF
index 34edf3b..94893e4 100644
--- a/plugins/org.apache.geronimo.j2ee.v11.jaxbmodel/META-INF/MANIFEST.MF
+++ b/plugins/org.apache.geronimo.j2ee.v11.jaxbmodel/META-INF/MANIFEST.MF
@@ -28,3 +28,4 @@
  org.apache.geronimo.j2ee.web
 Import-Package: junit.framework;version="3.8.2"
 Bundle-Activator: org.apache.geronimo.j2ee.jaxbmodel.Activator
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.apache.geronimo.jaxbmodel.common/.classpath b/plugins/org.apache.geronimo.jaxbmodel.common/.classpath
index 3215c20..10d7088 100644
--- a/plugins/org.apache.geronimo.jaxbmodel.common/.classpath
+++ b/plugins/org.apache.geronimo.jaxbmodel.common/.classpath
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src/main/java"/>
-        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-        <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-        <classpathentry kind="var" path="M2_REPO/xmlunit/xmlunit/1.3/xmlunit-1.3.jar"/>
-        <classpathentry kind="output" path="target/classes"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="M2_REPO/xmlunit/xmlunit/1.3/xmlunit-1.3.jar"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.apache.geronimo.jaxbmodel.common/src/main/java/org/apache/geronimo/jaxbmodel/common/operations/IJAXBUtilsProvider.java b/plugins/org.apache.geronimo.jaxbmodel.common/src/main/java/org/apache/geronimo/jaxbmodel/common/operations/IJAXBUtilsProvider.java
index ca78b6b..6eaa1a9 100644
--- a/plugins/org.apache.geronimo.jaxbmodel.common/src/main/java/org/apache/geronimo/jaxbmodel/common/operations/IJAXBUtilsProvider.java
+++ b/plugins/org.apache.geronimo.jaxbmodel.common/src/main/java/org/apache/geronimo/jaxbmodel/common/operations/IJAXBUtilsProvider.java
@@ -29,7 +29,5 @@
 public interface IJAXBUtilsProvider {
 	 public JAXBContext getJAXBContext();
 	 public void marshalDeploymentPlan(JAXBElement jaxbElement, IFile file) throws Exception;
-	 public void marshalPlugin(JAXBElement jaxbElement, OutputStream outputStream) throws Exception;
 	 public JAXBElement unmarshalFilterDeploymentPlan(IFile file) throws Exception;
-	 public JAXBElement unmarshalPlugin(InputStream inputStream);
 }
diff --git a/plugins/org.apache.geronimo.jaxbmodel.common/src/main/java/org/apache/geronimo/jaxbmodel/common/operations/JAXBUtils.java b/plugins/org.apache.geronimo.jaxbmodel.common/src/main/java/org/apache/geronimo/jaxbmodel/common/operations/JAXBUtils.java
index 248fe0c..d24ab72 100644
--- a/plugins/org.apache.geronimo.jaxbmodel.common/src/main/java/org/apache/geronimo/jaxbmodel/common/operations/JAXBUtils.java
+++ b/plugins/org.apache.geronimo.jaxbmodel.common/src/main/java/org/apache/geronimo/jaxbmodel/common/operations/JAXBUtils.java
@@ -126,15 +126,15 @@
     	return provider.unmarshalFilterDeploymentPlan(file);
     }
 
-    public static void marshalPlugin(JAXBElement jaxbElement, OutputStream outputStream) throws Exception {
-        //currently only JAXB21Utils provide this method,so invoke it directly
-    	providers.get("2.1").marshalPlugin(jaxbElement, outputStream);
-    }
-
-    public static JAXBElement unmarshalPlugin(InputStream inputStream) {
-    	//currently only JAXB21Utils provide this method,so invoke it directly
-    	return providers.get("2.1").unmarshalPlugin(inputStream);
-    }
+//    public static void marshalPlugin(JAXBElement jaxbElement, OutputStream outputStream) throws Exception {
+//        //currently only JAXB21Utils provide this method,so invoke it directly
+//    	providers.get("2.1").marshalPlugin(jaxbElement, outputStream);
+//    }
+//
+//    public static JAXBElement unmarshalPlugin(InputStream inputStream) {
+//    	//currently only JAXB21Utils provide this method,so invoke it directly
+//    	return providers.get("2.1").unmarshalPlugin(inputStream);
+//    }
 
     public static Object getValue( Object element, String name ) throws Exception {
         try {
diff --git a/plugins/org.apache.geronimo.jee.v21.jaxbmodel/.classpath b/plugins/org.apache.geronimo.jee.v21.jaxbmodel/.classpath
index af8fcb7..b56d72d 100644
--- a/plugins/org.apache.geronimo.jee.v21.jaxbmodel/.classpath
+++ b/plugins/org.apache.geronimo.jee.v21.jaxbmodel/.classpath
@@ -1,28 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!-- @version $Rev$ $Date$ -->
-
-<classpath>
-    <classpathentry kind="src" path="src/main/java"/>
-    <classpathentry kind="src" path="src/test/java"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-    <classpathentry kind="var" path="M2_REPO/xmlunit/xmlunit/1.3/xmlunit-1.3.jar"/>
-    <classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/test/java"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="var" path="M2_REPO/xmlunit/xmlunit/1.3/xmlunit-1.3.jar"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/plugins/org.apache.geronimo.jee.v21.jaxbmodel/META-INF/MANIFEST.MF b/plugins/org.apache.geronimo.jee.v21.jaxbmodel/META-INF/MANIFEST.MF
index 5b20d18..2989c18 100644
--- a/plugins/org.apache.geronimo.jee.v21.jaxbmodel/META-INF/MANIFEST.MF
+++ b/plugins/org.apache.geronimo.jee.v21.jaxbmodel/META-INF/MANIFEST.MF
@@ -5,7 +5,6 @@
 Bundle-Version: 3.0.0
 Bundle-ClassPath: .
 Bundle-Vendor: Apache Software Foundation
-Bundle-Localization: plugin
 Require-Bundle: org.apache.geronimo.runtime.common,
  org.apache.geronimo.jaxbmodel.common,
  org.eclipse.core.runtime,
@@ -22,3 +21,4 @@
  org.apache.geronimo.jee.security,
  org.apache.geronimo.jee.web
 Import-Package: junit.framework;version="3.8.2"
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.apache.geronimo.jee.v21.jaxbmodel/src/main/java/org/apache/geronimo/jee/jaxbmodel/operations/JAXB21Utils.java b/plugins/org.apache.geronimo.jee.v21.jaxbmodel/src/main/java/org/apache/geronimo/jee/jaxbmodel/operations/JAXB21Utils.java
index dc3ec11..e8ae2b3 100644
--- a/plugins/org.apache.geronimo.jee.v21.jaxbmodel/src/main/java/org/apache/geronimo/jee/jaxbmodel/operations/JAXB21Utils.java
+++ b/plugins/org.apache.geronimo.jee.v21.jaxbmodel/src/main/java/org/apache/geronimo/jee/jaxbmodel/operations/JAXB21Utils.java
@@ -18,9 +18,6 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Method;
@@ -64,12 +61,14 @@
 
     // JAXBContext instantiation is costly - must be done only once!
     private static final JAXBContext jaxbContext = newJAXBContext();
-    private static final JAXBContext jaxbPluginContext = newJAXBPluginContext();
+    
     private static final MarshallerListener marshallerListener = new MarshallerListener();
     //private static JAXB21Utils _instance = new JAXB21Utils();
     
     private static JAXBContext newJAXBContext() {
-        try {
+        
+        try {            
+       
             return JAXBContext.newInstance( 
                     "org.apache.geronimo.jee.connector:" +
                     "org.apache.geronimo.jee.loginconfig:" +
@@ -98,16 +97,7 @@
         return jaxbContext;
     }
 
-    private static JAXBContext newJAXBPluginContext() {
-        try {
-            return JAXBContext.newInstance( 
-                    "org.apache.geronimo.system.plugin.model", Activator.class.getClassLoader() );
-        } catch (JAXBException e) {
-            Trace.tracePoint("JAXBException", "JAXBContext.newInstance");
-            e.printStackTrace();
-        }
-        return null;
-    }
+  
     
     public void marshalDeploymentPlan(JAXBElement jaxbElement, IFile file) throws Exception {
         try {
@@ -192,76 +182,7 @@
         }
     }
 
-    public void marshalPlugin(JAXBElement jaxbElement, OutputStream outputStream) throws Exception {
-        try {
-            Marshaller marshaller = jaxbPluginContext.createMarshaller();
-            marshaller.setListener(marshallerListener);
-
-            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-            DocumentBuilder db = dbf.newDocumentBuilder();
-            Document doc = db.newDocument(); 
-
-            marshaller.marshal(jaxbElement, doc);
-
-            TransformerFactory xf = TransformerFactory.newInstance();
-            try {
-                xf.setAttribute("indent-number", new Integer(4));
-            } catch (IllegalArgumentException iae) {
-                //ignore this. http://forums.sun.com/thread.jspa?threadID=562510&messageID=2841867
-            }
-            Transformer xformer = xf.newTransformer();
-            xformer.setOutputProperty(OutputKeys.METHOD, "xml");
-            xformer.setOutputProperty(OutputKeys.INDENT, "yes");
-            xformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
-            xformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "4"); 
-
-            ByteArrayOutputStream outBuffer = new ByteArrayOutputStream();
-            Result out = new StreamResult(new OutputStreamWriter(outBuffer,"UTF-8"));
-
-            xformer.transform(new DOMSource(doc), out);
-            ByteArrayInputStream inBuffer = new ByteArrayInputStream(outBuffer.toByteArray());
-            outputStream.write(outBuffer.toByteArray());
-        } catch (JAXBException jaxbException) {
-            Trace.tracePoint("JAXBException", "JAXBUtils.marshalDeploymentPlan()");
-            throw jaxbException;
-        } catch (IOException coreException) {
-            Trace.tracePoint("IOException", "JAXBUtils.marshalDeploymentPlan()");
-            throw coreException;
-        } catch (ParserConfigurationException e) {
-            Trace.tracePoint("ParserConfigurationException", "JAXBUtils.marshalDeploymentPlan()");
-            throw e;
-        } catch (TransformerConfigurationException e) {
-            Trace.tracePoint("TransformerConfigurationException", "JAXBUtils.marshalDeploymentPlan()");
-            throw e;
-        } catch (TransformerException e) {
-            Trace.tracePoint("TransformerException", "JAXBUtils.marshalDeploymentPlan()");
-            throw e;
-        }
-    }
-
-    public JAXBElement unmarshalPlugin(InputStream inputStream) {
-        try {
-            Unmarshaller unmarshaller = jaxbPluginContext.createUnmarshaller();
-            SAXParserFactory factory = SAXParserFactory.newInstance();
-            factory.setNamespaceAware(true);
-            factory.setValidating(false);
-            SAXParser parser = factory.newSAXParser();
-            NamespaceFilter xmlFilter = new NamespaceFilter(parser.getXMLReader());
-            SAXSource source = new SAXSource(xmlFilter, new InputSource(inputStream));
-            JAXBElement plan = (JAXBElement) unmarshaller.unmarshal(source);
-            return plan;
-        } catch (JAXBException e) {
-            Trace.tracePoint("JAXBException", "JAXBUtils.unmarshalFilterDeploymentPlan()");
-            e.printStackTrace();
-        } catch (ParserConfigurationException e) {
-            Trace.tracePoint("ParserConfigurationException", "JAXBUtils.unmarshalFilterDeploymentPlan()");
-            e.printStackTrace();
-        } catch (SAXException e) {
-            Trace.tracePoint("SAXException", "JAXBUtils.unmarshalFilterDeploymentPlan()");
-            e.printStackTrace();
-        }
-        return null;
-    }
+   
 
     private void prepareFolder(IContainer folder) throws CoreException {
         if (folder.exists() || !(folder instanceof IFolder)) {
diff --git a/plugins/org.apache.geronimo.runtime.common/.classpath b/plugins/org.apache.geronimo.runtime.common/.classpath
index 57db48a..14ca6be 100644
--- a/plugins/org.apache.geronimo.runtime.common/.classpath
+++ b/plugins/org.apache.geronimo.runtime.common/.classpath
@@ -3,9 +3,9 @@
 	<classpathentry exported="true" kind="lib" path="lib/cglib-nodep-2.1_3.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/commons-logging-1.1.1.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/geronimo-activation_1.1_spec-1.1.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/geronimo-jaxb_2.2_spec-1.0.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/geronimo-stax-api_1.2_spec-1.0.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/jaxb-impl-2.2_1.jar" sourcepath="/media/g/tbd/jaxb/jaxb-impl-2.2-sources.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/geronimo-javaee-deployment_1.1MR3_spec-1.0.1.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/geronimo-jaxb_2.2_spec-1.0.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/jaxb-impl-2.2_1.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.apache.geronimo.runtime.common/META-INF/MANIFEST.MF b/plugins/org.apache.geronimo.runtime.common/META-INF/MANIFEST.MF
index f3349ac..b851142 100644
--- a/plugins/org.apache.geronimo.runtime.common/META-INF/MANIFEST.MF
+++ b/plugins/org.apache.geronimo.runtime.common/META-INF/MANIFEST.MF
@@ -3,16 +3,18 @@
 Bundle-Name: Geronimo Common Runtime Plug-in
 Bundle-SymbolicName: org.apache.geronimo.runtime.common;singleton:=true
 Bundle-Version: 3.0.0
-Bundle-ClassPath: 
- lib/commons-logging-1.1.1.jar,
- lib/cglib-nodep-2.1_3.jar,
+Bundle-ClassPath: .,
+ lib/geronimo-stax-api_1.2_spec-1.0.jar,
  lib/geronimo-jaxb_2.2_spec-1.0.jar,
  lib/jaxb-impl-2.2_1.jar,
- lib/geronimo-stax-api_1.2_spec-1.0.jar,
+ lib/commons-logging-1.1.1.jar,
+ lib/cglib-nodep-2.1_3.jar,
  lib/geronimo-activation_1.1_spec-1.1.jar,
  lib/geronimo-javaee-deployment_1.1MR3_spec-1.0.1.jar
 Export-Package: 
  com.sun.istack,
+ com.sun.istack.localization,
+ com.sun.istack.logging,
  com.sun.xml.bind,
  com.sun.xml.bind.annotation,
  com.sun.xml.bind.api,
@@ -34,20 +36,13 @@
  com.sun.xml.bind.v2.runtime.reflect.opt,
  com.sun.xml.bind.v2.runtime.unmarshaller,
  com.sun.xml.bind.v2.schemagen,
+ com.sun.xml.bind.v2.schemagen.episode,
  com.sun.xml.bind.v2.schemagen.xmlschema,
  com.sun.xml.bind.v2.util,
  com.sun.xml.txw2,
  com.sun.xml.txw2.annotation,
  com.sun.xml.txw2.output,
- javax.xml.bind,
- javax.xml.bind.annotation,
- javax.xml.bind.annotation.adapters,
- javax.xml.bind.attachment,
- javax.xml.bind.helpers,
- javax.xml.bind.util,
- javax.xml.stream,
- javax.xml.stream.events,
- javax.xml.stream.util,
+ javax.activation,
  javax.enterprise.deploy.model,
  javax.enterprise.deploy.model.exceptions,
  javax.enterprise.deploy.shared,
@@ -56,6 +51,16 @@
  javax.enterprise.deploy.spi.exceptions,
  javax.enterprise.deploy.spi.factories,
  javax.enterprise.deploy.spi.status,
+ javax.xml.bind,
+ javax.xml.bind.annotation,
+ javax.xml.bind.annotation.adapters,
+ javax.xml.bind.attachment,
+ javax.xml.bind.helpers,
+ javax.xml.bind.util,
+ javax.xml.namespace,
+ javax.xml.stream,
+ javax.xml.stream.events,
+ javax.xml.stream.util,
  net.sf.cglib.asm,
  net.sf.cglib.asm.attrs,
  net.sf.cglib.beans,
@@ -67,5 +72,71 @@
  net.sf.cglib.transform.impl,
  net.sf.cglib.util,
  org.apache.commons.logging,
- org.apache.commons.logging.impl
+ org.apache.commons.logging.impl,
+ org.apache.geronimo.osgi.locator,
+ org.apache.geronimo.specs.activation
 Bundle-Vendor: Apache Software Foundation
+Import-Package: 
+ com.sun.istack,
+ com.sun.istack.localization,
+ com.sun.istack.logging,
+ com.sun.xml.bind,
+ com.sun.xml.bind.annotation,
+ com.sun.xml.bind.api,
+ com.sun.xml.bind.api.impl,
+ com.sun.xml.bind.marshaller,
+ com.sun.xml.bind.unmarshaller,
+ com.sun.xml.bind.util,
+ com.sun.xml.bind.v2,
+ com.sun.xml.bind.v2.bytecode,
+ com.sun.xml.bind.v2.model.annotation,
+ com.sun.xml.bind.v2.model.core,
+ com.sun.xml.bind.v2.model.impl,
+ com.sun.xml.bind.v2.model.nav,
+ com.sun.xml.bind.v2.model.runtime,
+ com.sun.xml.bind.v2.runtime,
+ com.sun.xml.bind.v2.runtime.output,
+ com.sun.xml.bind.v2.runtime.property,
+ com.sun.xml.bind.v2.runtime.reflect,
+ com.sun.xml.bind.v2.runtime.reflect.opt,
+ com.sun.xml.bind.v2.runtime.unmarshaller,
+ com.sun.xml.bind.v2.schemagen,
+ com.sun.xml.bind.v2.schemagen.episode,
+ com.sun.xml.bind.v2.schemagen.xmlschema,
+ com.sun.xml.bind.v2.util,
+ com.sun.xml.txw2,
+ com.sun.xml.txw2.annotation,
+ com.sun.xml.txw2.output,
+ javax.activation,
+ javax.enterprise.deploy.model,
+ javax.enterprise.deploy.model.exceptions,
+ javax.enterprise.deploy.shared,
+ javax.enterprise.deploy.shared.factories,
+ javax.enterprise.deploy.spi,
+ javax.enterprise.deploy.spi.exceptions,
+ javax.enterprise.deploy.spi.factories,
+ javax.enterprise.deploy.spi.status,
+ javax.xml.bind,
+ javax.xml.bind.annotation,
+ javax.xml.bind.annotation.adapters,
+ javax.xml.bind.attachment,
+ javax.xml.bind.helpers,
+ javax.xml.bind.util,
+ javax.xml.namespace,
+ javax.xml.stream,
+ javax.xml.stream.events,
+ javax.xml.stream.util,
+ net.sf.cglib.asm,
+ net.sf.cglib.asm.attrs,
+ net.sf.cglib.beans,
+ net.sf.cglib.core,
+ net.sf.cglib.proxy,
+ net.sf.cglib.reflect,
+ net.sf.cglib.transform,
+ net.sf.cglib.transform.hook,
+ net.sf.cglib.transform.impl,
+ net.sf.cglib.util,
+ org.apache.commons.logging,
+ org.apache.commons.logging.impl,
+ org.apache.geronimo.osgi.locator,
+ org.apache.geronimo.specs.activation
diff --git a/plugins/org.apache.geronimo.runtime.v21/.classpath b/plugins/org.apache.geronimo.runtime.v21/.classpath
index 89d331f..8dd33d0 100644
--- a/plugins/org.apache.geronimo.runtime.v21/.classpath
+++ b/plugins/org.apache.geronimo.runtime.v21/.classpath
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry exported="true" kind="lib" path="lib/geronimo-common-2.1.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/geronimo-crypto-2.1.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/geronimo-deploy-config-2.1.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/geronimo-deploy-jsr88-2.1.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/geronimo-deployment-2.1.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/geronimo-j2ee-schema-2.1.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/geronimo-kernel-2.1.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/geronimo-plugin-2.1.4.jar"/>
-	<classpathentry exported="true" kind="lib" path="lib/geronimo-system-2.1.4.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/geronimo-common-2.1.5.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/geronimo-crypto-2.1.5.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/geronimo-deploy-config-2.1.5.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/geronimo-deploy-jsr88-2.1.5.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/geronimo-deployment-2.1.5.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/geronimo-j2ee-schema-2.1.5.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/geronimo-kernel-2.1.5.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/geronimo-plugin-2.1.5.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/geronimo-system-2.1.5.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/plexus-archiver-1.0-alpha-12.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/slf4j-api-1.5.5.jar"/>
 	<classpathentry exported="true" kind="lib" path="lib/slf4j-simple-1.5.5.jar"/>
diff --git a/plugins/org.apache.geronimo.runtime.v21/META-INF/MANIFEST.MF b/plugins/org.apache.geronimo.runtime.v21/META-INF/MANIFEST.MF
index 9741951..99f44f5 100644
--- a/plugins/org.apache.geronimo.runtime.v21/META-INF/MANIFEST.MF
+++ b/plugins/org.apache.geronimo.runtime.v21/META-INF/MANIFEST.MF
@@ -4,17 +4,17 @@
 Bundle-SymbolicName: org.apache.geronimo.runtime.v21;singleton:=true
 Bundle-Version: 3.0.0
 Require-Bundle: org.apache.geronimo.runtime.common;visibility:=reexport
-Bundle-ClassPath: lib/geronimo-common-2.1.4.jar,
- lib/geronimo-deploy-jsr88-2.1.4.jar,
- lib/geronimo-deployment-2.1.4.jar,
- lib/geronimo-j2ee-schema-2.1.4.jar,
- lib/geronimo-kernel-2.1.4.jar,
- lib/geronimo-plugin-2.1.4.jar,
- lib/geronimo-system-2.1.4.jar,
- lib/geronimo-util-2.1.4.jar,
- lib/geronimo-deploy-config-2.1.4.jar,
+Bundle-ClassPath: lib/geronimo-common-2.1.5.jar,
+ lib/geronimo-deploy-jsr88-2.1.5.jar,
+ lib/geronimo-deployment-2.1.5.jar,
+ lib/geronimo-j2ee-schema-2.1.5.jar,
+ lib/geronimo-kernel-2.1.5.jar,
+ lib/geronimo-plugin-2.1.5.jar,
+ lib/geronimo-system-2.1.5.jar,
+ lib/geronimo-util-2.1.5.jar,
+ lib/geronimo-deploy-config-2.1.5.jar,
  lib/plexus-archiver-1.0-alpha-12.jar,
- lib/geronimo-crypto-2.1.4.jar,
+ lib/geronimo-crypto-2.1.5.jar,
  lib/slf4j-api-1.5.5.jar,
  lib/slf4j-simple-1.5.5.jar
 Export-Package: 
diff --git a/plugins/org.apache.geronimo.runtime.v21/pom.xml b/plugins/org.apache.geronimo.runtime.v21/pom.xml
index 7f339d2..039a66c 100644
--- a/plugins/org.apache.geronimo.runtime.v21/pom.xml
+++ b/plugins/org.apache.geronimo.runtime.v21/pom.xml
@@ -33,7 +33,7 @@
     </parent>
 
     <properties>
-        <geronimoVersion>2.1.4</geronimoVersion>
+        <geronimoVersion>2.1.5</geronimoVersion>
     </properties>
     <build>
         <resources>
diff --git a/plugins/org.apache.geronimo.runtime.v30/META-INF/MANIFEST.MF b/plugins/org.apache.geronimo.runtime.v30/META-INF/MANIFEST.MF
index 3258935..8fe4596 100644
--- a/plugins/org.apache.geronimo.runtime.v30/META-INF/MANIFEST.MF
+++ b/plugins/org.apache.geronimo.runtime.v30/META-INF/MANIFEST.MF
@@ -18,19 +18,39 @@
  lib/geronimo-crypto-3.0-M1.jar,
  lib/slf4j-api-1.5.5.jar,
  lib/slf4j-simple-1.5.5.jar
-Export-Package:  
+Export-Package: 
  org.apache.geronimo.common,
  org.apache.geronimo.common.propertyeditor,
+ org.apache.geronimo.crypto,
+ org.apache.geronimo.crypto.asn1,
+ org.apache.geronimo.crypto.asn1.cryptopro,
+ org.apache.geronimo.crypto.asn1.misc,
+ org.apache.geronimo.crypto.asn1.oiw,
+ org.apache.geronimo.crypto.asn1.pkcs,
+ org.apache.geronimo.crypto.asn1.sec,
+ org.apache.geronimo.crypto.asn1.util,
+ org.apache.geronimo.crypto.asn1.x509,
+ org.apache.geronimo.crypto.asn1.x9,
+ org.apache.geronimo.crypto.crypto,
+ org.apache.geronimo.crypto.crypto.digests,
+ org.apache.geronimo.crypto.crypto.modes,
+ org.apache.geronimo.crypto.crypto.params,
+ org.apache.geronimo.crypto.encoders,
+ org.apache.geronimo.crypto.jce,
+ org.apache.geronimo.crypto.jce.interfaces,
+ org.apache.geronimo.crypto.jce.provider,
  org.apache.geronimo.deployment,
  org.apache.geronimo.deployment.plugin,
  org.apache.geronimo.deployment.plugin.factories,
  org.apache.geronimo.deployment.plugin.jmx,
  org.apache.geronimo.deployment.plugin.local,
  org.apache.geronimo.deployment.plugin.remote,
+ org.apache.geronimo.deployment.spi,
  org.apache.geronimo.deployment.util,
  org.apache.geronimo.deployment.xml,
  org.apache.geronimo.deployment.xmlbeans,
  org.apache.geronimo.gbean,
+ org.apache.geronimo.gbean.annotation,
  org.apache.geronimo.gbean.runtime,
  org.apache.geronimo.kernel,
  org.apache.geronimo.kernel.basic,
@@ -39,6 +59,7 @@
  org.apache.geronimo.kernel.config.xstream,
  org.apache.geronimo.kernel.lifecycle,
  org.apache.geronimo.kernel.management,
+ org.apache.geronimo.kernel.osgi,
  org.apache.geronimo.kernel.proxy,
  org.apache.geronimo.kernel.repository,
  org.apache.geronimo.kernel.rmi,
@@ -48,8 +69,10 @@
  org.apache.geronimo.system.configuration.cli,
  org.apache.geronimo.system.configuration.condition,
  org.apache.geronimo.system.jmx,
+ org.apache.geronimo.system.logging,
  org.apache.geronimo.system.logging.log4j,
  org.apache.geronimo.system.main,
+ org.apache.geronimo.system.osgi,
  org.apache.geronimo.system.plugin,
  org.apache.geronimo.system.plugin.model,
  org.apache.geronimo.system.properties,
@@ -69,5 +92,9 @@
  org.codehaus.plexus.archiver.tar,
  org.codehaus.plexus.archiver.util,
  org.codehaus.plexus.archiver.war,
- org.codehaus.plexus.archiver.zip
+ org.codehaus.plexus.archiver.zip,
+ org.slf4j,
+ org.slf4j.helpers,
+ org.slf4j.impl,
+ org.slf4j.spi
 Bundle-Vendor: Apache Software Foundation
diff --git a/plugins/org.apache.geronimo.st.core/.classpath b/plugins/org.apache.geronimo.st.core/.classpath
index 3800116..4b153cd 100644
--- a/plugins/org.apache.geronimo.st.core/.classpath
+++ b/plugins/org.apache.geronimo.st.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src/main/java"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.apache.geronimo.st.schemas/META-INF/MANIFEST.MF b/plugins/org.apache.geronimo.st.schemas/META-INF/MANIFEST.MF
index cc55532..e68127d 100644
--- a/plugins/org.apache.geronimo.st.schemas/META-INF/MANIFEST.MF
+++ b/plugins/org.apache.geronimo.st.schemas/META-INF/MANIFEST.MF
@@ -5,3 +5,4 @@
 Bundle-Version: 3.0.0
 Require-Bundle: org.eclipse.wst.xml.core
 Bundle-Vendor: Apache Software Foundation
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.apache.geronimo.st.ui/.classpath b/plugins/org.apache.geronimo.st.ui/.classpath
index 065d77c..4b153cd 100644
--- a/plugins/org.apache.geronimo.st.ui/.classpath
+++ b/plugins/org.apache.geronimo.st.ui/.classpath
@@ -1,26 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!-- @version $Rev$ $Date$ -->
-
 <classpath>
-    <classpathentry kind="src" path="src/main/java"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-    <classpathentry kind="output" path="target/classes"/>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.apache.geronimo.st.ui/plugin.xml b/plugins/org.apache.geronimo.st.ui/plugin.xml
index 74905f8..8832a5b 100644
--- a/plugins/org.apache.geronimo.st.ui/plugin.xml
+++ b/plugins/org.apache.geronimo.st.ui/plugin.xml
@@ -123,10 +123,10 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.security" order="10"
             insertionId="org.eclipse.wst.server.editor.overview.left"
-            typeIds="org.apache.geronimo.runtime.11,
-                     org.apache.geronimo.runtime.20,
-                     org.apache.geronimo.runtime.21,
-                     org.apache.geronimo.runtime.22"
+            typeIds="org.apache.geronimo.server.11,
+                     org.apache.geronimo.server.20,
+                     org.apache.geronimo.server.21,
+                     org.apache.geronimo.server.22"
             class="org.apache.geronimo.st.ui.sections.ServerEditorSecuritySection">
         </section>
     </extension>
@@ -134,10 +134,10 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.publishAdvanced" order="10"
             insertionId="org.eclipse.wst.server.editor.overview.right"
-            typeIds="org.apache.geronimo.runtime.11,
-                     org.apache.geronimo.runtime.20,
-                     org.apache.geronimo.runtime.21,
-                     org.apache.geronimo.runtime.22"
+            typeIds="org.apache.geronimo.server.11,
+                     org.apache.geronimo.server.20,
+                     org.apache.geronimo.server.21,
+                     org.apache.geronimo.server.22"
             class="org.apache.geronimo.st.ui.sections.ServerEditorPublishAdvancedSection">
         </section>
     </extension>
@@ -145,10 +145,10 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.port" order="10"
             insertionId="org.eclipse.wst.server.editor.overview.right"
-            typeIds="org.apache.geronimo.runtime.11,
-                     org.apache.geronimo.runtime.20,
-                     org.apache.geronimo.runtime.21,
-                     org.apache.geronimo.runtime.22"
+            typeIds="org.apache.geronimo.server.11,
+                     org.apache.geronimo.server.20,
+                     org.apache.geronimo.server.21,
+                     org.apache.geronimo.server.22"
             class="org.apache.geronimo.st.ui.sections.ServerEditorPortsSection">
         </section>
     </extension>
@@ -156,10 +156,10 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.loglevel" order="20"
             insertionId="org.eclipse.wst.server.editor.overview.right"
-            typeIds="org.apache.geronimo.runtime.11,
-                     org.apache.geronimo.runtime.20,
-                     org.apache.geronimo.runtime.21,
-                     org.apache.geronimo.runtime.22"
+            typeIds="org.apache.geronimo.server.11,
+                     org.apache.geronimo.server.20,
+                     org.apache.geronimo.server.21,
+                     org.apache.geronimo.server.22"
             class="org.apache.geronimo.st.ui.sections.ServerEditorLogLevelSection">
         </section>
     </extension>
@@ -167,10 +167,10 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.security" order="30"
             insertionId="org.eclipse.wst.server.editor.overview.right"
-            typeIds="org.apache.geronimo.runtime.11,
-                     org.apache.geronimo.runtime.20,
-                     org.apache.geronimo.runtime.21,
-                     org.apache.geronimo.runtime.22"
+            typeIds="org.apache.geronimo.server.11,
+                     org.apache.geronimo.server.20,
+                     org.apache.geronimo.server.21,
+                     org.apache.geronimo.server.22"
             class="org.apache.geronimo.st.ui.sections.ServerEditorStartupSection">
         </section>
     </extension>
@@ -178,10 +178,10 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.vmargs" order="40"
             insertionId="org.eclipse.wst.server.editor.overview.right"
-            typeIds="org.apache.geronimo.runtime.11,
-                     org.apache.geronimo.runtime.20,
-                     org.apache.geronimo.runtime.21,
-                     org.apache.geronimo.runtime.22"
+            typeIds="org.apache.geronimo.server.11,
+                     org.apache.geronimo.server.20,
+                     org.apache.geronimo.server.21,
+                     org.apache.geronimo.server.22"
             class="org.apache.geronimo.st.ui.sections.ServerVMArgsSection">
         </section>
     </extension>
@@ -189,10 +189,10 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.testenv" order="20"
             insertionId="org.eclipse.wst.server.editor.overview.left"
-            typeIds="org.apache.geronimo.runtime.11,
-                     org.apache.geronimo.runtime.20,
-                     org.apache.geronimo.runtime.21,
-                     org.apache.geronimo.runtime.22"
+            typeIds="org.apache.geronimo.server.11,
+                     org.apache.geronimo.server.20,
+                     org.apache.geronimo.server.21,
+                     org.apache.geronimo.server.22"
             class="org.apache.geronimo.st.ui.sections.ServerEditorTestEnvSection">
         </section>
     </extension>
diff --git a/plugins/org.apache.geronimo.st.v11.core/.classpath b/plugins/org.apache.geronimo.st.v11.core/.classpath
index 34ffe58..4b153cd 100644
--- a/plugins/org.apache.geronimo.st.v11.core/.classpath
+++ b/plugins/org.apache.geronimo.st.v11.core/.classpath
@@ -1,26 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!-- @version $Rev$ $Date$ -->
-
-<classpath>
-    <classpathentry kind="src" path="src/main/java"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-    <classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/plugins/org.apache.geronimo.st.v11.core/src/main/java/org/apache/geronimo/st/v11/core/GeronimoServer.java b/plugins/org.apache.geronimo.st.v11.core/src/main/java/org/apache/geronimo/st/v11/core/GeronimoServer.java
index c2165d4..4fd46b7 100644
--- a/plugins/org.apache.geronimo.st.v11.core/src/main/java/org/apache/geronimo/st/v11/core/GeronimoServer.java
+++ b/plugins/org.apache.geronimo.st.v11.core/src/main/java/org/apache/geronimo/st/v11/core/GeronimoServer.java
@@ -115,9 +115,8 @@
 	        return getAttribute(PROPERTY_NOT_REDEPLOY_JSP_FILES,false);
 	}
 
-	@Override
-	public IGeronimoServerPluginManager getServerPluginManager() {
-		// TODO:implement GeronimoServlerPluginManager for v11 adapter
-		return null;
-	}
+    public IGeronimoServerPluginManager getServerPluginManager() {
+        return null;
+    }
+
 }
\ No newline at end of file
diff --git a/plugins/org.apache.geronimo.st.v11.schemas/META-INF/MANIFEST.MF b/plugins/org.apache.geronimo.st.v11.schemas/META-INF/MANIFEST.MF
index 390c6e5..904aa5e 100644
--- a/plugins/org.apache.geronimo.st.v11.schemas/META-INF/MANIFEST.MF
+++ b/plugins/org.apache.geronimo.st.v11.schemas/META-INF/MANIFEST.MF
@@ -5,3 +5,4 @@
 Bundle-Version: 3.0.0
 Require-Bundle: org.eclipse.wst.xml.core
 Bundle-Vendor: Apache Software Foundation
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.apache.geronimo.st.v11.ui/.classpath b/plugins/org.apache.geronimo.st.v11.ui/.classpath
index 34ffe58..4b153cd 100644
--- a/plugins/org.apache.geronimo.st.v11.ui/.classpath
+++ b/plugins/org.apache.geronimo.st.v11.ui/.classpath
@@ -1,26 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!-- @version $Rev$ $Date$ -->
-
-<classpath>
-    <classpathentry kind="src" path="src/main/java"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-    <classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/plugins/org.apache.geronimo.st.v20.core/.classpath b/plugins/org.apache.geronimo.st.v20.core/.classpath
index a9f4be7..a6008fa 100644
--- a/plugins/org.apache.geronimo.st.v20.core/.classpath
+++ b/plugins/org.apache.geronimo.st.v20.core/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.apache.geronimo.st.v21.core/.classpath b/plugins/org.apache.geronimo.st.v21.core/.classpath
index 3800116..4b153cd 100644
--- a/plugins/org.apache.geronimo.st.v21.core/.classpath
+++ b/plugins/org.apache.geronimo.st.v21.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src/main/java"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/GeronimoServer.java b/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/GeronimoServer.java
index 16279d6..a7cd107 100644
--- a/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/GeronimoServer.java
+++ b/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/GeronimoServer.java
@@ -206,8 +206,8 @@
         return getAttribute(PROPERTY_NOT_REDEPLOY_JSP_FILES,false);
     }
 
-	@Override
-	public IGeronimoServerPluginManager getServerPluginManager() {
-		return new GeronimoServerV21PluginManager(this.getServer());
-	}
+    public IGeronimoServerPluginManager getServerPluginManager() {
+        return new GeronimoServerV21PluginManager(this.getServer());
+    }
+
 }
\ No newline at end of file
diff --git a/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/operations/GeronimoServerV21PluginManager.java b/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/operations/GeronimoServerV21PluginManager.java
index f6a4760..b42e8a2 100644
--- a/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/operations/GeronimoServerV21PluginManager.java
+++ b/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/operations/GeronimoServerV21PluginManager.java
@@ -58,6 +58,7 @@
 import org.apache.geronimo.st.core.GeronimoServerBehaviourDelegate;
 import org.apache.geronimo.st.core.operations.IGeronimoServerPluginManager;
 import org.apache.geronimo.st.v21.core.internal.Trace;
+import org.apache.geronimo.st.v21.core.plugin.JAXB21PluginUtils;
 import org.apache.geronimo.system.jmx.KernelDelegate;
 import org.apache.geronimo.system.plugin.PluginInstaller;
 import org.apache.geronimo.system.plugin.model.ArtifactType;
@@ -415,7 +416,7 @@
 
     public PluginListType loadPluginList (InputStream in) {
         try {
-            JAXBElement pluginListElement = JAXBUtils.unmarshalPlugin(in);
+            JAXBElement pluginListElement = JAXB21PluginUtils.unmarshalPlugin(in);
             return (PluginListType)pluginListElement.getValue();
         }
         catch (Throwable e) {
@@ -428,7 +429,7 @@
         try {
             ObjectFactory jeeFactory = new ObjectFactory();
             JAXBElement element = jeeFactory.createGeronimoPluginList(pluginList);
-            JAXBUtils.marshalPlugin(element, out);
+            JAXB21PluginUtils.marshalPlugin(element, out);
         }
         catch (Throwable e) {
             e.printStackTrace();
@@ -439,7 +440,7 @@
         try {
             ObjectFactory jeeFactory = new ObjectFactory();
             JAXBElement element = jeeFactory.createGeronimoPlugin(metadata);
-            JAXBUtils.marshalPlugin(element, out);
+            JAXB21PluginUtils.marshalPlugin(element, out);
         }
         catch (Throwable e) {
             e.printStackTrace();
diff --git a/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/plugin/JAXB21PluginUtils.java b/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/plugin/JAXB21PluginUtils.java
new file mode 100644
index 0000000..48479f5
--- /dev/null
+++ b/plugins/org.apache.geronimo.st.v21.core/src/main/java/org/apache/geronimo/st/v21/core/plugin/JAXB21PluginUtils.java
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.geronimo.st.v21.core.plugin;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.geronimo.jaxbmodel.common.operations.NamespaceFilter;
+import org.apache.geronimo.jee.jaxbmodel.operations.MarshallerListener;
+import org.apache.geronimo.st.v21.core.Activator;
+import org.apache.geronimo.st.v21.core.internal.Trace;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/*
+ * This class is used to handle operations on packages org.apache.geronimo.system.plugin.model.
+ * Since this package is version specific, the utils class is not included in v21.jaxbmodel 
+ * 
+ *
+ */
+public class JAXB21PluginUtils {
+
+    private static final JAXBContext jaxbPluginContext = newJAXBPluginContext();
+    private static final MarshallerListener marshallerListener = new MarshallerListener();
+    
+    public static void marshalPlugin(JAXBElement jaxbElement, OutputStream outputStream) throws Exception {
+        try {
+            Marshaller marshaller = jaxbPluginContext.createMarshaller();
+            marshaller.setListener(marshallerListener);
+
+            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+            DocumentBuilder db = dbf.newDocumentBuilder();
+            Document doc = db.newDocument(); 
+
+            marshaller.marshal(jaxbElement, doc);
+
+            TransformerFactory xf = TransformerFactory.newInstance();
+            try {
+                xf.setAttribute("indent-number", new Integer(4));
+            } catch (IllegalArgumentException iae) {
+                //ignore this. http://forums.sun.com/thread.jspa?threadID=562510&messageID=2841867
+            }
+            Transformer xformer = xf.newTransformer();
+            xformer.setOutputProperty(OutputKeys.METHOD, "xml");
+            xformer.setOutputProperty(OutputKeys.INDENT, "yes");
+            xformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+            xformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "4"); 
+
+            ByteArrayOutputStream outBuffer = new ByteArrayOutputStream();
+            Result out = new StreamResult(new OutputStreamWriter(outBuffer,"UTF-8"));
+
+            xformer.transform(new DOMSource(doc), out);
+            ByteArrayInputStream inBuffer = new ByteArrayInputStream(outBuffer.toByteArray());
+            outputStream.write(outBuffer.toByteArray());
+        } catch (JAXBException jaxbException) {
+            Trace.tracePoint("JAXBException", "JAXBUtils.marshalDeploymentPlan()");
+            throw jaxbException;
+        } catch (IOException coreException) {
+            Trace.tracePoint("IOException", "JAXBUtils.marshalDeploymentPlan()");
+            throw coreException;
+        } catch (ParserConfigurationException e) {
+            Trace.tracePoint("ParserConfigurationException", "JAXBUtils.marshalDeploymentPlan()");
+            throw e;
+        } catch (TransformerConfigurationException e) {
+            Trace.tracePoint("TransformerConfigurationException", "JAXBUtils.marshalDeploymentPlan()");
+            throw e;
+        } catch (TransformerException e) {
+            Trace.tracePoint("TransformerException", "JAXBUtils.marshalDeploymentPlan()");
+            throw e;
+        }
+    }
+
+    public static JAXBElement unmarshalPlugin(InputStream inputStream) {
+        try {
+            Unmarshaller unmarshaller = jaxbPluginContext.createUnmarshaller();
+            SAXParserFactory factory = SAXParserFactory.newInstance();
+            factory.setNamespaceAware(true);
+            factory.setValidating(false);
+            SAXParser parser = factory.newSAXParser();
+            NamespaceFilter xmlFilter = new NamespaceFilter(parser.getXMLReader());
+            SAXSource source = new SAXSource(xmlFilter, new InputSource(inputStream));
+            JAXBElement plan = (JAXBElement) unmarshaller.unmarshal(source);
+            return plan;
+        } catch (JAXBException e) {
+            Trace.tracePoint("JAXBException", "JAXBUtils.unmarshalFilterDeploymentPlan()");
+            e.printStackTrace();
+        } catch (ParserConfigurationException e) {
+            Trace.tracePoint("ParserConfigurationException", "JAXBUtils.unmarshalFilterDeploymentPlan()");
+            e.printStackTrace();
+        } catch (SAXException e) {
+            Trace.tracePoint("SAXException", "JAXBUtils.unmarshalFilterDeploymentPlan()");
+            e.printStackTrace();
+        }
+        return null;
+    }
+    
+    private static JAXBContext newJAXBPluginContext() {
+        try {
+            return JAXBContext.newInstance( 
+                    "org.apache.geronimo.system.plugin.model", Activator.class.getClassLoader() );
+        } catch (JAXBException e) {
+            Trace.tracePoint("JAXBException", "JAXBContext.newInstance");
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/plugins/org.apache.geronimo.st.v21.ui/.classpath b/plugins/org.apache.geronimo.st.v21.ui/.classpath
index 34ffe58..4b153cd 100644
--- a/plugins/org.apache.geronimo.st.v21.ui/.classpath
+++ b/plugins/org.apache.geronimo.st.v21.ui/.classpath
@@ -1,26 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!-- @version $Rev$ $Date$ -->
-
-<classpath>
-    <classpathentry kind="src" path="src/main/java"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-    <classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/plugins/org.apache.geronimo.st.v22.core/.classpath b/plugins/org.apache.geronimo.st.v22.core/.classpath
index 3800116..4b153cd 100644
--- a/plugins/org.apache.geronimo.st.v22.core/.classpath
+++ b/plugins/org.apache.geronimo.st.v22.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src/main/java"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.apache.geronimo.st.v22.core/src/main/java/org/apache/geronimo/st/v22/core/operations/GeronimoServerV22PluginManager.java b/plugins/org.apache.geronimo.st.v22.core/src/main/java/org/apache/geronimo/st/v22/core/operations/GeronimoServerV22PluginManager.java
index 0f6ad57..c975ff5 100644
--- a/plugins/org.apache.geronimo.st.v22.core/src/main/java/org/apache/geronimo/st/v22/core/operations/GeronimoServerV22PluginManager.java
+++ b/plugins/org.apache.geronimo.st.v22.core/src/main/java/org/apache/geronimo/st/v22/core/operations/GeronimoServerV22PluginManager.java
@@ -58,6 +58,7 @@
 import org.apache.geronimo.st.core.GeronimoServerBehaviourDelegate;
 import org.apache.geronimo.st.core.operations.IGeronimoServerPluginManager;
 import org.apache.geronimo.st.v21.core.internal.Trace;
+import org.apache.geronimo.st.v22.core.plugin.JAXB22PluginUtils;
 import org.apache.geronimo.system.jmx.KernelDelegate;
 import org.apache.geronimo.system.plugin.PluginInstaller;
 import org.apache.geronimo.system.plugin.model.ArtifactType;
@@ -415,7 +416,7 @@
 
     public PluginListType loadPluginList (InputStream in) {
         try {
-            JAXBElement pluginListElement = JAXBUtils.unmarshalPlugin(in);
+            JAXBElement pluginListElement = JAXB22PluginUtils.unmarshalPlugin(in);
             return (PluginListType)pluginListElement.getValue();
         }
         catch (Throwable e) {
@@ -428,7 +429,7 @@
         try {
             ObjectFactory jeeFactory = new ObjectFactory();
             JAXBElement element = jeeFactory.createGeronimoPluginList(pluginList);
-            JAXBUtils.marshalPlugin(element, out);
+            JAXB22PluginUtils.marshalPlugin(element, out);
         }
         catch (Throwable e) {
             e.printStackTrace();
@@ -439,7 +440,7 @@
         try {
             ObjectFactory jeeFactory = new ObjectFactory();
             JAXBElement element = jeeFactory.createGeronimoPlugin(metadata);
-            JAXBUtils.marshalPlugin(element, out);
+            JAXB22PluginUtils.marshalPlugin(element, out);
         }
         catch (Throwable e) {
             e.printStackTrace();
diff --git a/plugins/org.apache.geronimo.st.v22.core/src/main/java/org/apache/geronimo/st/v22/core/plugin/JAXB22PluginUtils.java b/plugins/org.apache.geronimo.st.v22.core/src/main/java/org/apache/geronimo/st/v22/core/plugin/JAXB22PluginUtils.java
new file mode 100644
index 0000000..42fde8f
--- /dev/null
+++ b/plugins/org.apache.geronimo.st.v22.core/src/main/java/org/apache/geronimo/st/v22/core/plugin/JAXB22PluginUtils.java
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.geronimo.st.v22.core.plugin;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.geronimo.jaxbmodel.common.operations.NamespaceFilter;
+import org.apache.geronimo.jee.jaxbmodel.operations.MarshallerListener;
+import org.apache.geronimo.st.v21.core.Activator;
+import org.apache.geronimo.st.v21.core.internal.Trace;
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/*
+ * This class is used to handle operations on packages org.apache.geronimo.system.plugin.model.
+ * Since this package is version specific, the utils class is not included in v21.jaxbmodel 
+ * 
+ *
+ */
+public class JAXB22PluginUtils {
+
+    private static final JAXBContext jaxbPluginContext = newJAXBPluginContext();
+    private static final MarshallerListener marshallerListener = new MarshallerListener();
+    
+    public static void marshalPlugin(JAXBElement jaxbElement, OutputStream outputStream) throws Exception {
+        try {
+            Marshaller marshaller = jaxbPluginContext.createMarshaller();
+            marshaller.setListener(marshallerListener);
+
+            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+            DocumentBuilder db = dbf.newDocumentBuilder();
+            Document doc = db.newDocument(); 
+
+            marshaller.marshal(jaxbElement, doc);
+
+            TransformerFactory xf = TransformerFactory.newInstance();
+            try {
+                xf.setAttribute("indent-number", new Integer(4));
+            } catch (IllegalArgumentException iae) {
+                //ignore this. http://forums.sun.com/thread.jspa?threadID=562510&messageID=2841867
+            }
+            Transformer xformer = xf.newTransformer();
+            xformer.setOutputProperty(OutputKeys.METHOD, "xml");
+            xformer.setOutputProperty(OutputKeys.INDENT, "yes");
+            xformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
+            xformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "4"); 
+
+            ByteArrayOutputStream outBuffer = new ByteArrayOutputStream();
+            Result out = new StreamResult(new OutputStreamWriter(outBuffer,"UTF-8"));
+
+            xformer.transform(new DOMSource(doc), out);
+            ByteArrayInputStream inBuffer = new ByteArrayInputStream(outBuffer.toByteArray());
+            outputStream.write(outBuffer.toByteArray());
+        } catch (JAXBException jaxbException) {
+            Trace.tracePoint("JAXBException", "JAXBUtils.marshalDeploymentPlan()");
+            throw jaxbException;
+        } catch (IOException coreException) {
+            Trace.tracePoint("IOException", "JAXBUtils.marshalDeploymentPlan()");
+            throw coreException;
+        } catch (ParserConfigurationException e) {
+            Trace.tracePoint("ParserConfigurationException", "JAXBUtils.marshalDeploymentPlan()");
+            throw e;
+        } catch (TransformerConfigurationException e) {
+            Trace.tracePoint("TransformerConfigurationException", "JAXBUtils.marshalDeploymentPlan()");
+            throw e;
+        } catch (TransformerException e) {
+            Trace.tracePoint("TransformerException", "JAXBUtils.marshalDeploymentPlan()");
+            throw e;
+        }
+    }
+
+    public static JAXBElement unmarshalPlugin(InputStream inputStream) {
+        try {
+            Unmarshaller unmarshaller = jaxbPluginContext.createUnmarshaller();
+            SAXParserFactory factory = SAXParserFactory.newInstance();
+            factory.setNamespaceAware(true);
+            factory.setValidating(false);
+            SAXParser parser = factory.newSAXParser();
+            NamespaceFilter xmlFilter = new NamespaceFilter(parser.getXMLReader());
+            SAXSource source = new SAXSource(xmlFilter, new InputSource(inputStream));
+            JAXBElement plan = (JAXBElement) unmarshaller.unmarshal(source);
+            return plan;
+        } catch (JAXBException e) {
+            Trace.tracePoint("JAXBException", "JAXBUtils.unmarshalFilterDeploymentPlan()");
+            e.printStackTrace();
+        } catch (ParserConfigurationException e) {
+            Trace.tracePoint("ParserConfigurationException", "JAXBUtils.unmarshalFilterDeploymentPlan()");
+            e.printStackTrace();
+        } catch (SAXException e) {
+            Trace.tracePoint("SAXException", "JAXBUtils.unmarshalFilterDeploymentPlan()");
+            e.printStackTrace();
+        }
+        return null;
+    }
+    
+    private static JAXBContext newJAXBPluginContext() {
+        try {
+            return JAXBContext.newInstance( 
+                    "org.apache.geronimo.system.plugin.model", Activator.class.getClassLoader() );
+        } catch (JAXBException e) {
+            Trace.tracePoint("JAXBException", "JAXBContext.newInstance");
+            e.printStackTrace();
+        }
+        return null;
+    }
+}
diff --git a/plugins/org.apache.geronimo.st.v30.core/.classpath b/plugins/org.apache.geronimo.st.v30.core/.classpath
index 065d77c..4b153cd 100644
--- a/plugins/org.apache.geronimo.st.v30.core/.classpath
+++ b/plugins/org.apache.geronimo.st.v30.core/.classpath
@@ -1,26 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!-- @version $Rev$ $Date$ -->
-
 <classpath>
-    <classpathentry kind="src" path="src/main/java"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-    <classpathentry kind="output" path="target/classes"/>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.apache.geronimo.st.v30.core/META-INF/MANIFEST.MF b/plugins/org.apache.geronimo.st.v30.core/META-INF/MANIFEST.MF
index 5556e8c..0018283 100644
--- a/plugins/org.apache.geronimo.st.v30.core/META-INF/MANIFEST.MF
+++ b/plugins/org.apache.geronimo.st.v30.core/META-INF/MANIFEST.MF
@@ -7,9 +7,10 @@
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: 
- org.apache.geronimo.runtime.v30,
- org.apache.geronimo.jaxbmodel.common,
+ org.apache.geronimo.runtime.common,
  org.apache.geronimo.jee.v21.jaxbmodel,
+ org.apache.geronimo.runtime.v30,
+ org.apache.geronimo.jaxbmodel.common, 
  org.apache.geronimo.st.v30.jaxbmodel, 
  org.eclipse.core.commands,
  org.eclipse.jst.j2ee,
diff --git a/plugins/org.apache.geronimo.st.v30.jaxbmodel/.classpath b/plugins/org.apache.geronimo.st.v30.jaxbmodel/.classpath
index 7565df0..780170d 100644
--- a/plugins/org.apache.geronimo.st.v30.jaxbmodel/.classpath
+++ b/plugins/org.apache.geronimo.st.v30.jaxbmodel/.classpath
@@ -2,8 +2,8 @@
 <classpath>
 	<classpathentry kind="src" path="src/main/java"/>
 	<classpathentry kind="src" path="src/test/java"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="var" path="M2_REPO/xmlunit/xmlunit/1.3/xmlunit-1.3.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.apache.geronimo.st.v30.jaxbmodel/META-INF/MANIFEST.MF b/plugins/org.apache.geronimo.st.v30.jaxbmodel/META-INF/MANIFEST.MF
index 21c9482..2b7e91f 100644
--- a/plugins/org.apache.geronimo.st.v30.jaxbmodel/META-INF/MANIFEST.MF
+++ b/plugins/org.apache.geronimo.st.v30.jaxbmodel/META-INF/MANIFEST.MF
@@ -3,9 +3,10 @@
 Bundle-Name: Geronimo V30 JAXB Models
 Bundle-SymbolicName: org.apache.geronimo.st.v30.jaxbmodel;singleton:=true
 Bundle-Version: 3.0.0
-Bundle-ClassPath: .
 Bundle-Vendor: Apache Software Foundation
 Export-Package: 
  org.apache.geronimo.jee.jaspi,
  org.apache.geronimo.osgi.blueprint
 Import-Package: junit.framework;version="3.8.2"
+Require-Bundle: org.apache.geronimo.runtime.common
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.apache.geronimo.st.v30.ui/.classpath b/plugins/org.apache.geronimo.st.v30.ui/.classpath
index 065d77c..4b153cd 100644
--- a/plugins/org.apache.geronimo.st.v30.ui/.classpath
+++ b/plugins/org.apache.geronimo.st.v30.ui/.classpath
@@ -1,26 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~    http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!-- @version $Rev$ $Date$ -->
-
 <classpath>
-    <classpathentry kind="src" path="src/main/java"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-    <classpathentry kind="output" path="target/classes"/>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/plugins/org.apache.geronimo.st.v30.ui/plugin.xml b/plugins/org.apache.geronimo.st.v30.ui/plugin.xml
index 7799014..0b36132 100644
--- a/plugins/org.apache.geronimo.st.v30.ui/plugin.xml
+++ b/plugins/org.apache.geronimo.st.v30.ui/plugin.xml
@@ -120,7 +120,7 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.security" order="10"
             insertionId="org.eclipse.wst.server.editor.overview.left"
-            typeIds="org.apache.geronimo.runtime.30"
+            typeIds="org.apache.geronimo.server.30"
             class="org.apache.geronimo.st.v30.ui.sections.ServerEditorSecuritySection">
         </section>
     </extension>
@@ -128,7 +128,7 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.publishAdvanced" order="10"
             insertionId="org.eclipse.wst.server.editor.overview.right"
-            typeIds="org.apache.geronimo.runtime.30"
+            typeIds="org.apache.geronimo.server.30"
             class="org.apache.geronimo.st.v30.ui.sections.ServerEditorPublishAdvancedSection">
         </section>
     </extension>
@@ -136,7 +136,7 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.port" order="10"
             insertionId="org.eclipse.wst.server.editor.overview.right"
-            typeIds="org.apache.geronimo.runtime.30"
+            typeIds="org.apache.geronimo.server.30"
             class="org.apache.geronimo.st.v30.ui.sections.ServerEditorPortsSection">
         </section>
     </extension>
@@ -144,7 +144,7 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.loglevel" order="20"
             insertionId="org.eclipse.wst.server.editor.overview.right"
-            typeIds="org.apache.geronimo.runtime.30"
+            typeIds="org.apache.geronimo.server.30"
             class="org.apache.geronimo.st.v30.ui.sections.ServerEditorLogLevelSection">
         </section>
     </extension>
@@ -152,7 +152,7 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.security" order="30"
             insertionId="org.eclipse.wst.server.editor.overview.right"
-            typeIds="org.apache.geronimo.runtime.30"
+            typeIds="org.apache.geronimo.server.30"
             class="org.apache.geronimo.st.v30.ui.sections.ServerEditorStartupSection">
         </section>
     </extension>
@@ -160,7 +160,7 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.vmargs" order="40"
             insertionId="org.eclipse.wst.server.editor.overview.right"
-            typeIds="org.apache.geronimo.runtime.30"
+            typeIds="org.apache.geronimo.server.30"
             class="org.apache.geronimo.st.v30.ui.sections.ServerVMArgsSection">
         </section>
     </extension>
@@ -168,7 +168,7 @@
     <extension point="org.eclipse.wst.server.ui.editorPageSections">
         <section id="org.apache.server.geronimo.testenv" order="20"
             insertionId="org.eclipse.wst.server.editor.overview.left"
-            typeIds="org.apache.geronimo.runtime.30"
+            typeIds="org.apache.geronimo.server.30"
             class="org.apache.geronimo.st.v30.ui.sections.ServerEditorTestEnvSection">
         </section>
     </extension>
diff --git a/pom.xml b/pom.xml
index 93e9bd4..1d47a67 100644
--- a/pom.xml
+++ b/pom.xml
@@ -591,6 +591,7 @@
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-assembly-plugin</artifactId>
+                    <inherited>false</inherited>
                     <executions>
                         <execution>
                             <goals>
@@ -598,7 +599,7 @@
                             </goals>
                             <phase>package</phase>
                             <configuration>
-                                <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
+                                <runOnlyAtExecutionRoot>false</runOnlyAtExecutionRoot>
                                 <descriptorRefs>
                                     <descriptorRef>source-release</descriptorRef>
                                 </descriptorRefs>
