This commit was manufactured by cvs2svn to create tag 'v20051129'.
diff --git a/plugins/org.eclipse.jst.server.core/.classpath b/plugins/org.eclipse.jst.server.core/.classpath
index a74595e..8eae546 100644
--- a/plugins/org.eclipse.jst.server.core/.classpath
+++ b/plugins/org.eclipse.jst.server.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="sjavacore/"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.jst.server.core/.cvsignore b/plugins/org.eclipse.jst.server.core/.cvsignore
index 8d1d585..1697fa1 100644
--- a/plugins/org.eclipse.jst.server.core/.cvsignore
+++ b/plugins/org.eclipse.jst.server.core/.cvsignore
@@ -3,3 +3,5 @@
 org.eclipse.jst.server.core_3.0.0.jar
 sjavacore.jar
 temp.folder
+@dot
+src.zip
diff --git a/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
index 0f52185..d7b7697 100644
--- a/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
@@ -7,11 +7,15 @@
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jst.server.core,
- org.eclipse.jst.server.core.internal
-Require-Bundle: org.eclipse.core.resources,
+ org.eclipse.jst.server.core.internal;x-friends:="org.eclipse.jst.server.ui",
+ org.eclipse.jst.server.core.internal.cactus;x-friends:="org.eclipse.jst.server.ui"
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources,
+ org.eclipse.core.expressions,
  org.eclipse.debug.core,
- org.eclipse.wst.server.core,
  org.eclipse.jdt.core,
  org.eclipse.jdt.launching,
- org.eclipse.core.runtime
+ org.eclipse.wst.server.core,
+ org.eclipse.wst.common.project.facet.core,
+ org.eclipse.jst.common.project.facet.core
 Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.jst.server.core/about.html b/plugins/org.eclipse.jst.server.core/about.html
new file mode 100644
index 0000000..6f6b96c
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/about.html
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>February 24, 2005</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/build.properties b/plugins/org.eclipse.jst.server.core/build.properties
index b501cce..0ba4473 100644
--- a/plugins/org.eclipse.jst.server.core/build.properties
+++ b/plugins/org.eclipse.jst.server.core/build.properties
@@ -11,11 +11,11 @@
 bin.includes = plugin.xml,\
                plugin.properties,\
                .,\
-               META-INF/
+               META-INF/,\
+               about.html
 bin.excludes = bin/**,\
                @dot/**,\
                temp.folder/**
 src.includes = schema/,\
-               build.properties,\
                component.xml
 source.. = sjavacore/
diff --git a/plugins/org.eclipse.jst.server.core/component.xml b/plugins/org.eclipse.jst.server.core/component.xml
index ea5f29c..eee873a 100644
--- a/plugins/org.eclipse.jst.server.core/component.xml
+++ b/plugins/org.eclipse.jst.server.core/component.xml
@@ -1 +1,32 @@
-<?xml version="1.0" encoding="UTF-8"?><component xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.jst.server"><component-depends unrestricted="true"></component-depends><plugin id="org.eclipse.jst.server.core" fragment="false"/><plugin id="org.eclipse.jst.server.generic.core" fragment="false"/><plugin id="org.eclipse.jst.server.generic.serverdefinitions" fragment="false"/><plugin id="org.eclipse.jst.server.generic.ui" fragment="false"/><plugin id="org.eclipse.jst.server.tomcat.core" fragment="false"/><plugin id="org.eclipse.jst.server.tomcat.ui" fragment="false"/><plugin id="org.eclipse.jst.server.ui" fragment="false"/><package name="org.eclipse.jst.server.core"><type name="IConnectorModule"/><type name="IEJBModule"/><type name="IJ2EEModule"/><type name="Servlet"/><type name="ILooseArchiveSupport"/><type name="ILooseArchive"/><type name="IWebModule"/><type name="IEnterpriseApplication"/><type name="JndiObject"/><type name="ClasspathRuntimeTargetHandler"/><type name="IApplicationClientModule"/><type name="EJBBean"/><type name="JndiLaunchable"/></package><package name="org.eclipse.jst.server.generic.servertype.definition"></package></component>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<component xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.jst.server">
+<component-depends unrestricted="true"/>
+  <plugin id="org.eclipse.jst.server.core" fragment="false"/>
+<!--  <package name="org.eclipse.jst.server.core">
+    <type name="IConnectorModule"/>
+    <type name="IEJBModule"/>
+    <type name="IJ2EEModule"/>
+    <type name="Servlet"/>
+    <type name="IWebModule"/>
+    <type name="IEnterpriseApplication"/>
+    <type name="JndiObject"/>
+    <type name="ClasspathRuntimeTargetHandler"/>
+    <type name="IApplicationClientModule"/>
+    <type name="EJBBean"/>
+    <type name="JndiLaunchable"/>
+    <type name="PublishUtil"/>
+    <type name="IJavaRuntime"/>
+  </package>-->
+
+  <plugin id="org.eclipse.jst.server.ui" fragment="false"/>
+
+  <plugin id="org.eclipse.jst.server.generic.core" fragment="false"/>
+
+  <plugin id="org.eclipse.jst.server.generic.serverdefinitions" fragment="false"/>
+
+  <plugin id="org.eclipse.jst.server.generic.ui" fragment="false"/>
+
+  <plugin id="org.eclipse.jst.server.tomcat.core" fragment="false"/>
+
+  <plugin id="org.eclipse.jst.server.tomcat.ui" fragment="false"/>
+</component>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/plugin.properties b/plugins/org.eclipse.jst.server.core/plugin.properties
index 0bd3822..21465ad 100644
--- a/plugins/org.eclipse.jst.server.core/plugin.properties
+++ b/plugins/org.eclipse.jst.server.core/plugin.properties
@@ -11,9 +11,18 @@
 pluginName=Java Server Support
 providerName=Eclipse.org
 
+extensionPointRuntimeClasspathProviders=Runtime Classpath Providers
+extensionPointRuntimeFacetMapping=Runtime Facet Mappings
+
 runtimeTypeName=J2EE Runtime Library
 runtimeTypeDescription=A runtime that represents a set of J2EE runtime libraries.
 
 moduleTypeJ2EEWebName=J2EE Web module
 moduleTypeJ2EEEJBName=J2EE EJB module
-moduleTypeJ2EEEARName=J2EE Enterprise application
\ No newline at end of file
+moduleTypeJ2EERARName=J2EE Connector module
+moduleTypeJ2EEClientName=J2EE Application Client module
+moduleTypeJ2EEEARName=J2EE Enterprise application
+moduleTypeJ2EEUtilityName=J2EE utility jar
+
+launchableJndi=JNDI Object
+launchableJndiDescription=Silently start an object locatable by JNDI.
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/plugin.xml b/plugins/org.eclipse.jst.server.core/plugin.xml
index c7960f6..4ac7247 100644
--- a/plugins/org.eclipse.jst.server.core/plugin.xml
+++ b/plugins/org.eclipse.jst.server.core/plugin.xml
@@ -2,6 +2,9 @@
 <?eclipse version="3.0"?>
 
 <plugin>
+  <extension-point id="runtimeClasspathProviders" name="%extensionPointRuntimeClasspathProviders" schema="schema/runtimeClasspathProviders.exsd"/>
+  <extension-point id="runtimeFacetMappings" name="%extensionPointRuntimeFacetMappings" schema="schema/runtimeFacetMappings.exsd"/>
+
   <extension point="org.eclipse.jdt.core.classpathContainerInitializer">
     <classpathContainerInitializer
       id="org.eclipse.jst.server.core.container"
@@ -10,14 +13,23 @@
 
   <extension point="org.eclipse.wst.server.core.moduleTypes">
     <moduleType
-       id="j2ee.web"
+       id="jst.web"
        name="%moduleTypeJ2EEWebName"/>
     <moduleType
-       id="j2ee.ejb"
+       id="jst.ejb"
        name="%moduleTypeJ2EEEJBName"/>
     <moduleType
-       id="j2ee.ear"
+       id="jst.appclient"
+       name="%moduleTypeJ2EEClientName"/>
+    <moduleType
+       id="jst.connector"
+       name="%moduleTypeJ2EERARName"/>
+    <moduleType
+       id="jst.ear"
        name="%moduleTypeJ2EEEARName"/>
+    <moduleType
+       id="jst.utility"
+       name="%moduleTypeJ2EEUtilityName"/>
   </extension>
 
   <extension point="org.eclipse.wst.server.core.runtimeTypes">
@@ -27,19 +39,138 @@
        description="%runtimeTypeDescription"
        class="org.eclipse.jst.server.core.internal.GenericRuntime">
        <moduleType
-         types="j2ee.*"
-         versions="*"/>
-       <moduleType
-         types="utility"
+         types="jst.*"
          versions="*"/>
     </runtimeType>
   </extension>
 
-  <extension point="org.eclipse.wst.server.core.runtimeTargetHandlers">
-    <runtimeTargetHandler
+  <extension point="org.eclipse.jst.server.core.runtimeClasspathProviders">
+    <runtimeClasspathProvider
       id="org.eclipse.jst.server.core.runtimeTarget"
       runtimeTypeIds="org.eclipse.jst.server.core.runtimeType"
-      class="org.eclipse.jst.server.core.internal.GenericRuntimeTargetHandler"/>
+      class="org.eclipse.jst.server.core.internal.GenericRuntimeClasspathProvider"/>
+  </extension>
+
+  <extension point="org.eclipse.core.expressions.propertyTesters">
+    <propertyTester
+      namespace="org.eclipse.jst.cactus.expressions"
+      type="org.eclipse.core.runtime.IAdaptable"
+      class="org.eclipse.jst.server.core.internal.cactus.ServletTestCasePropertyTester"
+      properties="isServletTestCase"
+      id="org.eclipse.jst.server.cactus.expression"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.moduleArtifactAdapters">
+    <moduleArtifactAdapter
+      id="org.eclipse.jst.server.cactus.moduleArtifactAdapter"
+      class="org.eclipse.jst.server.core.internal.cactus.CactusModuleArtifactAdapterDelegate"
+      priority="10">
+      <enablement>
+         <or>
+            <instanceof value="org.eclipse.jdt.core.IMethod"/>
+            <instanceof value="org.eclipse.jdt.core.ICompilationUnit"/>
+            <instanceof value="org.eclipse.jdt.core.IType"/>
+         </or>
+      </enablement>
+    </moduleArtifactAdapter>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.launchableAdapters">
+    <launchableAdapter
+       id="org.eclipse.jst.server.cactus.launchableAdapter"
+       class="org.eclipse.jst.server.core.internal.cactus.CactusLaunchableAdapterDelegate"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.clients">
+    <client
+      id="org.eclipse.jst.server.jndi"
+      name="%launchableJndi"
+      description="%launchableJndiDescription"
+      priority="-100"
+      launchable="org.eclipse.jst.server.core.JndiLaunchable"
+      class="org.eclipse.jst.server.core.internal.J2EELaunchableClient"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
+    <runtime-component-type id="standard.jre"/>
+
+    <runtime-component-version
+       type="standard.jre"
+       version="1.4"/>
+    <runtime-component-version
+       type="standard.jre"
+       version="5.0"/>
+
+    <adapter>
+      <runtime-component id="standard.jre"/>
+      <factory class="org.eclipse.jst.server.core.internal.StandardJreClasspathProvider$Factory"/>
+      <type class="org.eclipse.jst.common.project.facet.core.IClasspathProvider"/>
+    </adapter>
+
+    <supported>
+      <runtime-component id="standard.jre" version="1.4"/>
+      <facet id="jst.java" version="1.4"/>
+    </supported>
+
+    <supported>
+      <runtime-component id="standard.jre" version="5.0"/>
+      <facet id="jst.java" version="5.0"/>
+    </supported>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.core.runtimeBridges">
+    <bridge
+      id="org.eclipse.jst.server.core.default"
+      class="org.eclipse.jst.server.core.internal.RuntimeBridge"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
+    <runtime-component-type
+       id="org.eclipse.jst.server.core.runtimeType"/>
+
+    <runtime-component-version
+       type="org.eclipse.jst.server.core.runtimeType"
+       version="1.0"/>
+
+    <adapter>
+      <runtime-component
+         id="org.eclipse.jst.server.core.runtimeType"/>
+      <factory
+         class="org.eclipse.jst.server.core.internal.RuntimeClasspathProvider$Factory"/>
+      <type
+         class="org.eclipse.jst.common.project.facet.core.IClasspathProvider"/>
+    </adapter>
+
+    <supported>
+      <runtime-component
+         id="org.eclipse.jst.server.core.runtimeType"
+         version="1.0"/>
+      <facet
+         id="jst.web"
+         version="2.2,2.3,2.4"/>
+      <facet
+         id="jst.ejb"
+         version="1.1,2.0,2.1"/>
+      <facet
+         id="jst.ear"
+         version="1.2,1.3,1.4"/>
+      <facet
+         id="jst.connector"
+         version="1.0,1.5"/>
+      <facet
+         id="jst.appclient"
+         version="1.2,1.3,1.4"/>
+      <facet
+         id="jst.utility"
+         version="1.0"/>
+    </supported>
+  </extension>
+
+  <extension point="org.eclipse.jst.server.core.runtimeFacetMappings">
+    <runtimeFacetMapping
+      runtimeTypeId="org.eclipse.jst.server.core.runtimeType"
+      runtime-component="org.eclipse.jst.server.core.runtimeType"
+      version="1.0"/>
   </extension>
 
 </plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/schema/runtimeClasspathProviders.exsd b/plugins/org.eclipse.jst.server.core/schema/runtimeClasspathProviders.exsd
new file mode 100644
index 0000000..45b7757
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/schema/runtimeClasspathProviders.exsd
@@ -0,0 +1,121 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.jst.server.core">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.jst.server.core" id="runtimeClasspathProviders" name="Runtime Classpath Providers"/>
+      </appInfo>
+      <documentation>
+         This extension point is used to provide a new runtime classpath provider. Runtime classpath providers provide the classpath for Java server runtimes.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="runtimeClasspathProvider" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a fully qualified identifier of the target extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  an optional identifier of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  an optional name of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="runtimeClasspathProvider">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="name"/>
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  specifies a unique identifier for this extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="runtimeTypeIds" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a comma separated list of runtime type ids that this provider may support. Used for memory &amp; performance reasons
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;RuntimeClasspathProviderDelegate&lt;/samp&gt;.
+Runtime classpath provider instances of this type will delegate to instances of this class.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn="org.eclipse.jst.server.core.RuntimeClasspathProviderDelegate"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of a runtime classpath provider extension point:
+
+&lt;p&gt;
+&lt;pre&gt;
+  &lt;extension point=&quot;org.eclipse.jst.server.core.runtimeClasspathProviders&quot;&gt;
+     &lt;runtimeClasspathProvider
+        id=&quot;com.example.runtimeClasspathProvider&quot;
+        runtimeTypeIds=&quot;com.example.runtime, com.example2.*&quot;
+        class=&quot;com.example.ExampleRuntimeClasspathProvider&quot;/&gt;
+   &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         Value of the attribute &lt;b&gt;class&lt;/b&gt; must be a fully qualified name of a Java class that extends &lt;b&gt;org.eclipse.jst.server.core.RuntimeClasspathProviderDelegate&lt;/b&gt; and contains a public 0-arg constructor.
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
+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 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.jst.server.core/schema/runtimeFacetMappings.exsd b/plugins/org.eclipse.jst.server.core/schema/runtimeFacetMappings.exsd
new file mode 100644
index 0000000..0357cd7
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/schema/runtimeFacetMappings.exsd
@@ -0,0 +1,125 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.jst.server.core">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.jst.server.core" id="runtimeFacetMappings" name="Runtime Facet Mappings"/>
+      </appInfo>
+      <documentation>
+         This extension point is used to map between a facet runtime component and a server runtime type.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="runtimeFacetMapping" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a fully qualified identifier of the target extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  an optional identifier of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  an optional name of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="runtimeFacetMapping">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="name"/>
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+         </sequence>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  specifies a unique identifier for this extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="runtimeTypeId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a runtime type id
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="runtime-component" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of a runtime facet mapping extension point:
+
+&lt;p&gt;
+&lt;pre&gt;
+  &lt;extension point=&quot;org.eclipse.jst.server.core.runtimeFacetMappings&quot;&gt;
+     &lt;runtimeFacetMapping
+        id=&quot;com.example.runtimeClasspathProvider&quot;
+        runtimeTypeId=&quot;com.example.runtime.32&quot;
+        runtime-component=&quot;com.example.ExampleRuntimeClasspathProvider&quot;
+        version=&quot;3.2&quot;/&gt;
+  &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
+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 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/ClasspathRuntimeTargetHandler.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/ClasspathRuntimeTargetHandler.java
index 43ccc27..11a4da2 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/ClasspathRuntimeTargetHandler.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/ClasspathRuntimeTargetHandler.java
@@ -11,287 +11,37 @@
 package org.eclipse.jst.server.core;
 
 import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.*;
 import org.eclipse.jdt.core.*;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.internal.*;
 import org.eclipse.wst.server.core.IRuntime;
 import org.eclipse.wst.server.core.model.RuntimeTargetHandlerDelegate;
 /**
  * A runtime target handler that supports changing the classpath of the
  * project by adding one or more classpath containers. Runtime providers
  * can extend this class and implement the abstract methods to provide
- * the correct build path for their runtime type. 
+ * the correct build path for their runtime type.
  * 
- * @since 1.0
+ * @deprecated Should use org.eclipse.jst.server.core.runtimeClasspathProviders
+ *    extension point instead
  */
 public abstract class ClasspathRuntimeTargetHandler extends RuntimeTargetHandlerDelegate {
-	private class SourceAttachmentUpdate {
-		String runtimeId;
-		String id;
-		IPath entry;
-		IPath sourceAttachmentPath;
-		IPath sourceAttachmentRootPath;
-		IClasspathAttribute[] attributes;
-	}
-
-	private List sourceAttachments;
-
 	/** (non-Javadoc)
 	 * @see RuntimeTargetHandlerDelegate#setRuntimeTarget(IProject, IRuntime, IProgressMonitor)
 	 */
 	public void setRuntimeTarget(IProject project, IRuntime runtime, IProgressMonitor monitor) throws CoreException {
-		if (project == null || runtime == null)
-			return;
-
-		IJavaProject javaProject = null;
-		try {
-			javaProject = (IJavaProject) project.getNature(JavaCore.NATURE_ID);
-		} catch (Exception e) {
-			// ignore
-		}
-		
-		if (javaProject == null)
-			return;
-		
-		try {
-			List list = new ArrayList();
-			IClasspathEntry[] cp = javaProject.getRawClasspath();
-			int size = cp.length;
-			for (int i = 0; i < size; i++) {
-				if (cp[i].getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
-					if (!cp[i].getPath().segment(0).equals(RuntimeClasspathContainer.SERVER_CONTAINER))
-						list.add(cp[i]);
-				} else
-					list.add(cp[i]);
-			}
-			
-			List add = new ArrayList();
-			IClasspathEntry[] entries = getDelegateClasspathEntries(runtime, monitor);
-			if (entries != null) {
-				size = entries.length;
-				for (int i = 0; i < size; i++)
-					add.add(entries[i]);
-			}
-			
-			String[] ids = getClasspathEntryIds();
-			if (ids != null) {
-				size = ids.length;
-				for (int i = 0; i < size; i++) {
-					String id2 = getRuntimeTargetHandler().getId();
-					IPath path = new Path(RuntimeClasspathContainer.SERVER_CONTAINER).append(id2).append(runtime.getId());
-					if (ids[i] != null)
-						path.append(ids[i]);
-					add.add(JavaCore.newContainerEntry(path));
-					String id = "";
-					if (path.segmentCount() > 3)
-						id = path.segment(3);
-					RuntimeClasspathContainer rcc = new RuntimeClasspathContainer(path, this, runtime, id);
-					JavaCore.setClasspathContainer(path, new IJavaProject[] { javaProject}, new IClasspathContainer[] { rcc }, monitor);
-				}
-			}
-			
-			// clean up duplicates
-			cleanupDuplicateClasspath(javaProject, list, add);
-			
-			Iterator iterator = add.iterator();
-			while (iterator.hasNext()) {
-				list.add(iterator.next());
-			}
-			
-			cp = new IClasspathEntry[list.size()];
-			list.toArray(cp);
-			javaProject.setRawClasspath(cp, monitor);
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Error setting runtime target", e);
-			throw new CoreException(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, e.getLocalizedMessage(), e));
-		}
-	}
-
-	private void cleanupDuplicateClasspath(IJavaProject project, List current, List add) {
-		if (project == null || current == null || add == null)
-			throw new IllegalArgumentException();
-		
-		// check if we even have to bother
-		boolean sourceOnly = true;
-		Iterator iterator = current.iterator();
-		while (iterator.hasNext()) {
-			IClasspathEntry entry = (IClasspathEntry) iterator.next();
-			if (entry.getEntryKind() != IClasspathEntry.CPE_SOURCE)
-				sourceOnly = false;
-		}
-		if (sourceOnly)
-			return;
-		
-		// remove any of our own containers
-		List remove = new ArrayList();
-		iterator = current.iterator();
-		while (iterator.hasNext()) {
-			IClasspathEntry entry = (IClasspathEntry) iterator.next();
-			
-			if (entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
-				try {
-					if (RuntimeClasspathContainer.SERVER_CONTAINER.equals(entry.getPath().segment(0))
-						|| JavaRuntime.JRE_CONTAINER.equals(entry.getPath().segment(0)))
-						remove.add(entry);
-				} catch (Exception e) {
-					Trace.trace(Trace.FINEST, "Error resolving classpath container", e);
-				}
-			}
-		}
-
-		// expand the "add" list
-		List addExpanded = new ArrayList();
-		iterator = add.iterator();
-		while (iterator.hasNext()) {
-			IClasspathEntry entry = (IClasspathEntry) iterator.next();
-			if (entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
-				try {
-					IClasspathContainer container = JavaCore.getClasspathContainer(entry.getPath(), project);
-					IClasspathEntry[] entries = container.getClasspathEntries();
-					int size = entries.length;
-					for (int i = 0; i < size; i++) {
-						if (entries[i] != null)
-							addExpanded.add(entries[i]);
-					}
-				} catch (Exception e) {
-					Trace.trace(Trace.FINEST, "Error resolving classpath container 2", e);
-				}
-			} else if (entry.getEntryKind() == IClasspathEntry.CPE_VARIABLE) {
-				entry = JavaCore.getResolvedClasspathEntry(entry);
-				if (entry != null)
-					addExpanded.add(entry);
-			} else
-				addExpanded.add(entry);
-		}
-		
-		// check for duplicates by also expanding the current list
-		iterator = current.iterator();
-		while (iterator.hasNext()) {
-			IClasspathEntry entry = (IClasspathEntry) iterator.next();
-			
-			List currentExpanded = new ArrayList();
-			if (entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
-				try {
-					IClasspathContainer container = JavaCore.getClasspathContainer(entry.getPath(), project);
-					IClasspathEntry[] entries = container.getClasspathEntries();
-					int size = entries.length;
-					for (int i = 0; i < size; i++) {
-						if (entries[i] != null)
-							currentExpanded.add(entries[i]);
-					}
-				} catch (Exception e) {
-					Trace.trace(Trace.FINEST, "Error resolving classpath container 3", e);
-				}
-			} else if (entry.getEntryKind() == IClasspathEntry.CPE_VARIABLE) {
-				entry = JavaCore.getResolvedClasspathEntry(entry);
-				if (entry != null)
-					currentExpanded.add(entry);
-			} else
-				currentExpanded.add(entry);
-			
-			// loop over all of the expanded entries of this current entry
-			boolean dup = false;
-			Iterator iterator2 = currentExpanded.iterator();
-			while (!dup && iterator2.hasNext()) {
-				IClasspathEntry entry2 = (IClasspathEntry) iterator2.next();
-				Iterator iterator3 = addExpanded.iterator();
-				while (iterator3.hasNext()) {
-					IClasspathEntry entry3 = (IClasspathEntry) iterator3.next();
-					if (entry3.getPath().equals(entry2.getPath()))
-						dup = true;
-				}
-			}
-			if (dup && !remove.contains(entry))
-				remove.add(entry);
-		}
-		
-		// remove duplicates
-		iterator = remove.iterator();
-		while (iterator.hasNext()) {
-			current.remove(iterator.next());
-		}
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
 
 	/** (non-Javadoc)
 	 * @see RuntimeTargetHandlerDelegate#removeRuntimeTarget(IProject, IRuntime, IProgressMonitor)
 	 */
 	public void removeRuntimeTarget(IProject project, IRuntime runtime, IProgressMonitor monitor) {
-		Trace.trace(Trace.FINEST, "Removing runtime target");
-		if (project == null || runtime == null)
-			return;
-
-		IJavaProject javaProject = null;
-		try {
-			javaProject = (IJavaProject) project.getNature(JavaCore.NATURE_ID);
-		} catch (Exception e) {
-			// ignore
-		}
-
-		if (javaProject == null)
-			return;
-		
-		try {
-			IClasspathEntry[] delegates = getDelegateClasspathEntries(runtime, monitor);
-			int delegateSize = 0;
-			if (delegates != null)
-				delegateSize = delegates.length;
-
-			List list = new ArrayList();
-			IClasspathEntry[] cp = javaProject.getRawClasspath();
-			int size = cp.length;
-			for (int i = 0; i < size; i++) {
-				boolean remove = false;
-				
-				if (cp[i].getPath().segment(0).equals(RuntimeClasspathContainer.SERVER_CONTAINER))
-					remove = true;
-				
-				for (int j = 0; j < delegateSize; j++) {
-					if (cp[i].equals(delegates[j]))
-						remove = true;
-				}
-				if (!remove)
-					list.add(cp[i]);
-			}
-			
-			cp = new IClasspathEntry[list.size()];
-			list.toArray(cp);
-			javaProject.setRawClasspath(cp, monitor);
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Error removing runtime target", e);
-		}
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
-	
-	private static void addJarFiles(File dir, List list, boolean includeSubdirectories) {
-		int depth = 0;
-		if (includeSubdirectories)
-			depth = 2;
-		addJarFiles(dir, list, depth);
-	}
-	
-	private static void addJarFiles(File dir, List list, int depth) {
-		if (dir == null)
-			throw new IllegalArgumentException();
-		
-		File[] files = dir.listFiles();
-		if (files != null) {
-			int size = files.length;
-			for (int i = 0; i < size; i++) {
-				if (files[i].isDirectory() && depth > 0) {
-					addJarFiles(files[i], list, depth - 1);
-				} else if (files[i].getAbsolutePath().endsWith(".jar") || files[i].getAbsolutePath().endsWith(".zip")) {
-					IPath path = new Path(files[i].getAbsolutePath());
-					list.add(JavaCore.newLibraryEntry(path, null, null));
-				}
-			}
-		}
-	}
-	
+
 	/**
 	 * Add library entries to the given list for every jar file found in the
 	 * given directory. Optionally search subdirectories as well.
@@ -302,9 +52,7 @@
 	 *    <code>false</code> otherwise
 	 */
 	protected static void addLibraryEntries(List list, File dir, boolean includeSubdirectories) {
-		if (dir == null)
-			throw new IllegalArgumentException();
-		addJarFiles(dir, list, includeSubdirectories);
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
 
 	/**
@@ -316,7 +64,7 @@
 	 * @return an array of classpath entries
 	 */
 	public IClasspathEntry[] getDelegateClasspathEntries(IRuntime runtime, IProgressMonitor monitor) {
-		return null;
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
 
 	/**
@@ -334,7 +82,7 @@
 	 * @return an array of classpath entry ids
 	 */
 	public String[] getClasspathEntryIds() {
-		return new String[1];
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
 
 	/**
@@ -346,27 +94,7 @@
 	 * @param entries an array of classpath entries
 	 */
 	public void requestClasspathContainerUpdate(IRuntime runtime, String id, IClasspathEntry[] entries) {
-		// default behaviour is to save the source path entries
-		if (runtime == null || entries == null)
-			return;
-		
-		// find the source attachments
-		sourceAttachments = new ArrayList();
-		
-		int size = entries.length;
-		for (int i = 0; i < size; i++) {
-			if (entries[i].getSourceAttachmentPath() != null || entries[i].getExtraAttributes() != null) {
-				SourceAttachmentUpdate sau = new SourceAttachmentUpdate();
-				sau.runtimeId = runtime.getId();
-				sau.id = id;
-				sau.entry = entries[i].getPath();
-				sau.sourceAttachmentPath = entries[i].getSourceAttachmentPath();
-				sau.sourceAttachmentRootPath = entries[i].getSourceAttachmentRootPath();
-				sau.attributes = entries[i].getExtraAttributes();
-				sourceAttachments.add(sau);
-			}
-		}
-		save();
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
 
 	/**
@@ -388,114 +116,7 @@
 	 * @return a possibly empty array of classpath entries
 	 */
 	public IClasspathEntry[] resolveClasspathContainerImpl(IRuntime runtime, String id) {
-		IClasspathEntry[] entries = resolveClasspathContainer(runtime, id);
-		
-		if (entries == null)
-			entries = new IClasspathEntry[0];
-		
-		if (sourceAttachments == null)
-			load();
-		
-		int size = entries.length;
-		int size2 = sourceAttachments.size();
-		for (int i = 0; i < size; i++) {
-			for (int j = 0; j < size2; j++) {
-				SourceAttachmentUpdate sau = (SourceAttachmentUpdate) sourceAttachments.get(j);
-				if ((id != null && sau.id.equals(id)) || (id == null && sau.id == null)) {
-					if (sau.runtimeId.equals(runtime.getId()) && sau.entry.equals(entries[i].getPath())) {
-						entries[i] = JavaCore.newLibraryEntry(entries[i].getPath(), sau.sourceAttachmentPath, sau.sourceAttachmentRootPath, new IAccessRule[0], sau.attributes, false);
-					}
-				}
-			}
-		}
-		
-		return entries;
-	}
-	
-	private void save() {
-		if (sourceAttachments == null)
-			return;
-		String id = getRuntimeTargetHandler().getId();
-		String filename = JavaServerPlugin.getInstance().getStateLocation().append(id + ".xml").toOSString();
-		try {
-			XMLMemento memento = XMLMemento.createWriteRoot("classpath");
-
-			Iterator iterator = sourceAttachments.iterator();
-			while (iterator.hasNext()) {
-				SourceAttachmentUpdate sau = (SourceAttachmentUpdate) iterator.next();
-				IMemento child = memento.createChild("source-attachment");
-				child.putString("runtime-id", sau.runtimeId);
-				if (sau.id != null)
-					child.putString("id", sau.id);
-				if (sau.entry != null)
-					child.putString("entry", sau.entry.toPortableString());
-				if (sau.sourceAttachmentPath != null)
-					child.putString("source-attachment-path", sau.sourceAttachmentPath.toPortableString());
-				if (sau.sourceAttachmentRootPath != null)
-					child.putString("source-attachment-root-path", sau.sourceAttachmentRootPath.toPortableString());
-				if (sau.attributes != null) {
-					int size = sau.attributes.length;
-					for (int i = 0; i < size; i++) {
-						IClasspathAttribute attr = sau.attributes[i];
-						IMemento attrChild = child.createChild("attribute");
-						attrChild.putString("name", attr.getName());
-						attrChild.putString("value", attr.getValue());
-					}
-				}
-			}
-			
-			memento.saveToFile(filename);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error saving source path info", e);
-		}
-	}
-
-	private void load() {
-		sourceAttachments = new ArrayList();
-		
-		if (getRuntimeTargetHandler() == null)
-			return;
-		String id = getRuntimeTargetHandler().getId();
-		String filename = JavaServerPlugin.getInstance().getStateLocation().append(id + ".xml").toOSString();
-		
-		try {
-			IMemento memento = XMLMemento.loadMemento(filename);
-			
-			IMemento[] children = memento.getChildren("source-attachment");
-			int size = children.length;
-			
-			for (int i = 0; i < size; i++) {
-				try {
-					SourceAttachmentUpdate sau = new SourceAttachmentUpdate();
-					sau.runtimeId = children[i].getString("runtime-id");
-					sau.id = children[i].getString("id");
-					String temp = children[i].getString("entry");
-					if (temp != null)
-						sau.entry = new Path(temp);
-					temp = children[i].getString("source-attachment-path");
-					if (temp != null)
-						sau.sourceAttachmentPath = new Path(temp);
-					temp = children[i].getString("source-attachment-root-path");
-					if (temp != null)
-						sau.sourceAttachmentRootPath = new Path(temp);
-					IMemento[] attrChildren = children[i].getChildren("attribute");
-					if (attrChildren != null) {
-						int size2 = attrChildren.length;
-						sau.attributes = new IClasspathAttribute[size2];
-						for (int j = 0; j < size2; j++) {
-							String name = attrChildren[j].getString("name");
-							String value = attrChildren[j].getString("value");
-							sau.attributes[j] = JavaCore.newClasspathAttribute(name, value);
-						}
-					}
-					sourceAttachments.add(sau);
-				} catch (Exception e) {
-					Trace.trace(Trace.WARNING, "Could not load monitor: " + e);
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load source path info: " + e.getMessage());
-		}
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
 
 	/**
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/EJBBean.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/EJBBean.java
index 614d927..6694961 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/EJBBean.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/EJBBean.java
@@ -13,8 +13,14 @@
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IModuleArtifact;
 /**
- * 
- * @since 1.0
+ * An EJB bean.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
  */
 public class EJBBean implements IModuleArtifact {
 	private IModule module;
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/FacetUtil.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/FacetUtil.java
new file mode 100644
index 0000000..71350a7
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/FacetUtil.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * 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.jst.server.core;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.ServerCore;
+/**
+ * Utility class for converting between facet runtimes and server runtimes.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ */
+public class FacetUtil {
+	/**
+	 * Returns the server runtime that corresponds to a facet runtime, or null
+	 * if none could be found.
+	 * 
+	 * @param runtime a facet runtime
+	 * @return the server runtime that corresponds to the facet runtime, or
+	 *    <code>null</code> if none could be found.
+	 */
+	public static IRuntime getRuntime(org.eclipse.wst.common.project.facet.core.runtime.IRuntime runtime) {
+		if (runtime == null)
+			throw new IllegalArgumentException();
+		
+		String id = runtime.getProperty("id");
+		
+		IRuntime[] runtimes = ServerCore.getRuntimes();
+		int size = runtimes.length;
+		for (int i = 0; i < size; i++) {
+			if (id.equals(runtimes[i].getId()))
+				return runtimes[i];
+		}
+		
+		return null;
+	}
+
+	/**
+	 * Returns the facet runtime that corresponds to a server runtime, or null
+	 * if none could be found.
+	 * 
+	 * @param runtime a server runtime
+	 * @return the facet runtime that corresponds to the server runtime, or
+	 *    <code>null</code> if none could be found.
+	 */
+	public static org.eclipse.wst.common.project.facet.core.runtime.IRuntime getRuntime(IRuntime runtime) {
+		if (runtime == null)
+			throw new IllegalArgumentException();
+		
+		String id = runtime.getId();
+		
+		Set runtimes = RuntimeManager.getRuntimes();
+		Iterator iterator = runtimes.iterator();
+		while (iterator.hasNext()) {
+			org.eclipse.wst.common.project.facet.core.runtime.IRuntime runtime2 = (org.eclipse.wst.common.project.facet.core.runtime.IRuntime) iterator.next();
+			if (id.equals(runtime2.getProperty("id")))
+				return runtime2;
+		}
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IApplicationClientModule.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IApplicationClientModule.java
index 8bb7561..c4d10e1 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IApplicationClientModule.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IApplicationClientModule.java
@@ -10,9 +10,15 @@
  *******************************************************************************/
 package org.eclipse.jst.server.core;
 /**
- * 
- * @since 1.0
+ * A J2EE application client module.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
  */
 public interface IApplicationClientModule extends IJ2EEModule {
-	// no additional methods
+	// intentionally empty
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IConnectorModule.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IConnectorModule.java
index c42f165..9cb3c9a 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IConnectorModule.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IConnectorModule.java
@@ -13,8 +13,13 @@
 import org.eclipse.core.runtime.IPath;
 /**
  * A J2EE connector module.
- * 
- * @since 1.0
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
  */
 public interface IConnectorModule extends IJ2EEModule {
 	/**
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IEJBModule.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IEJBModule.java
index 075bab1..83dcac7 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IEJBModule.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IEJBModule.java
@@ -10,14 +10,15 @@
  *******************************************************************************/
 package org.eclipse.jst.server.core;
 /**
- * 
- * @since 1.0
+ * A representation of a J2EE EJB module.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
  */
 public interface IEJBModule extends IJ2EEModule {
-	/**
-	 * Returns a version number in the form "x.y.z".
-	 *
-	 * @return java.lang.String
-	 */
-	public String getEJBSpecificationVersion();
+	// intentionally empty
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IEnterpriseApplication.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IEnterpriseApplication.java
index 7cab738..d22376d 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IEnterpriseApplication.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IEnterpriseApplication.java
@@ -10,51 +10,41 @@
  *******************************************************************************/
 package org.eclipse.jst.server.core;
 
-import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.wst.server.core.IModule;
 /**
- * 
- * @since 1.0
+ * A representation of a J2EE enterprise application (EAR file).
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
  */
 public interface IEnterpriseApplication {
 	/**
-	 * Returns a version number in the form "x.y.z".
+	 * Returns the modules contained within this EAR. The returned modules will
+	 * either be J2EE modules (which will be adaptable to IJ2EEModule) or
+	 * utility jars contained in the EAR.
 	 * 
-	 * @return the J2EE specification version
-	 */
-	public String getJ2EESpecificationVersion();
-
-	/**
-	 * Returns the modules contained within this EAR.
-	 *
 	 * @return a possibly empty array of modules contained within this application
 	 */
-	public IJ2EEModule[] getModules();
+	public IModule[] getModules();
 
 	/**
-	 * Returns the URI of the given J2EE module within this
-	 * enterprise application.
-	 *
+	 * Returns the URI of the given module within this enterprise application.
+	 * 
 	 * @param module a module within this application
 	 * @return the URI of the given module, or <code>null</code> if the URI could
 	 *    not be found
 	 */
-	public String getURI(IJ2EEModule module);
+	public String getURI(IModule module);
 
 	/**
-	 * Returns <code>true</code> if this EAR supports loose modules and <code>false</code>
-	 * otherwise.
+	 * Returns the root folders for the resources in this module.
 	 * 
-	 * @return returns <code>true</code> if this module contains loose modules, or
-	 *    <code>false</code> otherwise
+	 * @return a possibly-empty array of resource folders
 	 */
-	public boolean containsLooseModules();
-	
-	/**
-	 * Returns the location of the root of the application. May
-	 * return null if isUnitTest() returns false. This should
-	 * be an absolute path that is not workbench relative.
-	 * 
-	 * @return the absolute path to the root of this application
-	 */
-	public IPath getLocation();
+	public IContainer[] getResourceFolders();
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJ2EEModule.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJ2EEModule.java
index 5c2aee9..f116a87 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJ2EEModule.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJ2EEModule.java
@@ -10,28 +10,32 @@
  *******************************************************************************/
 package org.eclipse.jst.server.core;
 
-import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.resources.IContainer;
 /**
- * An abstract J2EE module that can be deployed to a server.
+ * A J2EE module that can be deployed to a server.
  * 
- * @since 1.0
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
  */
 public interface IJ2EEModule {
 	/**
-	 * Returns a version number in the form "x.y.z".
+	 * Returns the root folders for the resources in this module.
 	 * 
-	 * @return the J2EE specification version
+	 * @return a possibly-empty array of resource folders
 	 */
-	public String getJ2EESpecificationVersion();
+	public IContainer[] getResourceFolders();
 
 	/**
-	 * Returns the location of the root of the module. May
-	 * return null if isUnitTest() returns false. This should
-	 * be an absolute path that is not workbench relative.
+	 * Returns the root folders containing Java output in this module.
 	 * 
-	 * @return the absolute path to the root of this application
+	 * @return a possibly-empty array of Java output folders
 	 */
-	public IPath getLocation();
+	public IContainer[] getJavaOutputFolders();
 
 	/**
 	 * Returns true if this is a binary (zipped) module, and
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java
new file mode 100644
index 0000000..9081821
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * 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.jst.server.core;
+
+import org.eclipse.jdt.launching.IVMInstall;
+/**
+ * An interface for a server that contains a Java runtime.
+ * <p>
+ * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @since 1.5
+ */
+public interface IJavaRuntime {
+	/**
+	 * Return the VM install (installed JRE) that this runtime is using.
+	 * 
+	 * @return the current VM install
+	 */
+	public IVMInstall getVMInstall();
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/ILooseArchive.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/ILooseArchive.java
deleted file mode 100644
index 625c90e..0000000
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/ILooseArchive.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.core;
-
-import org.eclipse.core.runtime.IPath;
-/**
- * 
- * @since 1.0
- */
-public interface ILooseArchive {
-	/**
-	 * Returns the location of the root of the loose utility. This should
-	 * be an absolute path that is not workbench relative.
-	 * 
-	 * @return org.eclipse.core.runtime.IPath
-	 */
-	public IPath getLocation();
-
-	/**
-	 * Returns true if this is a binary (zipped) archive, and
-	 * false if it is expanded.
-	 * 
-	 * <p>If true, members() should return only a single element -
-	 * the binary (jar or zip file) that contains the contents of
-	 * this module. (a single IPublishableResource, e.g.
-	 * myejb.jar) Also, getLocation() should return the full path
-	 * up to and including the binary itself. (e.g.
-	 * c:\temp\myejb.jar)</p>
-	 * 
-	 * <p>If false, members() should return the entire contents
-	 * of the module, starting at the root. There should be no
-	 * preceeding directory structure. (an array of
-	 * IPublishableResources, e.g. index.html, WEB-INF/web.xml,
-	 * ...) In this case, getLocation() should return the path to
-	 * the root folder containing these resources.</p>
-	 * 
-	 * @return boolean
-	 */
-	public boolean isBinary();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/ILooseArchiveSupport.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/ILooseArchiveSupport.java
deleted file mode 100644
index 19ba5bd..0000000
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/ILooseArchiveSupport.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.core;
-/**
- * 
- * @since 1.0
- */
-public interface ILooseArchiveSupport {
-	/**
-	 * Return the loose archives that are contained within this enterprise
-	 * application.
-	 *
-	 * @return a possibly empty array of modules contained within this application
-	 */
-	public ILooseArchive[] getLooseArchives();
-
-	/**
-	 * Returns the URI of the given loose archive within this
-	 * enterprise application.
-	 *
-	 * @param archive a loose archive
-	 * @return the URI of the given archive, or <code>null</code> if the URI could
-	 *    not be found
-	 */
-	public String getURI(ILooseArchive archive);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IUtilityModule.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IUtilityModule.java
new file mode 100644
index 0000000..7242fd8
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IUtilityModule.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.jst.server.core;
+
+import org.eclipse.core.resources.IContainer;
+/**
+ * A J2EE utility module that can be deployed to a server.
+ * 
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
+ */
+public interface IUtilityModule {
+	/**
+	 * Returns the root folders for the resources in this module.
+	 * 
+	 * @return a possibly-empty array of resource folders
+	 */
+	public IContainer[] getResourceFolders();
+
+	/**
+	 * Returns the root folders containing Java output in this module.
+	 * 
+	 * @return a possibly-empty array of Java output folders
+	 */
+	public IContainer[] getJavaOutputFolders();
+
+	/**
+	 * Returns true if this is a binary (zipped) module, and
+	 * false if it is expanded.
+	 * 
+	 * <p>If true, members() should return only a single element -
+	 * the binary (jar or zip file) that contains the contents of
+	 * this module. (a single IModuleResource, e.g.
+	 * myejb.jar) Also, getLocation() should return the full path
+	 * up to and including the binary itself. (e.g.
+	 * c:\temp\myejb.jar)</p>
+	 * 
+	 * <p>If false, members() should return the entire contents
+	 * of the module, starting at the root. There should be no
+	 * preceeding directory structure. (an array of
+	 * IModuleResources, e.g. index.html, WEB-INF/web.xml,
+	 * ...) In this case, getLocation() should return the path to
+	 * the root folder containing these resources.</p>
+	 * 
+	 * @return boolean
+	 */
+	public boolean isBinary();
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IWebModule.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IWebModule.java
index cbf8092..0bc0b17 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IWebModule.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IWebModule.java
@@ -9,39 +9,39 @@
  *     IBM Corporation - Initial API and implementation
  *******************************************************************************/
 package org.eclipse.jst.server.core;
+
+import org.eclipse.wst.server.core.IModule;
 /**
- * 
- * @since 1.0
+ * A J2EE web module.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
  */
 public interface IWebModule extends IJ2EEModule {
 	/**
-	 * Returns a version number in the form "x.y.z".
-	 * 
-	 * @return java.lang.String
-	 */
-	public String getServletSpecificationVersion();
-
-	/**
-	 * Returns a version number in the form "x.y.z".
-	 * 
-	 * @return java.lang.String
-	 */
-	public String getJSPSpecificationVersion();
-
-	/**
 	 * Returns the context root of the module.
 	 * 
 	 * @return java.lang.String
 	 */
 	public String getContextRoot();
-	
+
 	/**
-	 * Returns false if the files in this module are placed in the
-	 * correct structure for testing before publishing. Returns true
-	 * if the file system resources must be published before they will
-	 * work.
-	 * 
-	 * @return boolean
+	 * Returns the utility modules contained within this WAR.
+	 *
+	 * @return a possibly empty array of modules contained within this application
 	 */
-	public boolean isPublishRequired();
+	public IModule[] getModules();
+
+	/**
+	 * Returns the URI of the given contained module.
+	 *
+	 * @param module a module
+	 * @return the URI of the given module, or <code>null</code> if the URI could
+	 *    not be found
+	 */
+	public String getURI(IModule module);
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/JndiLaunchable.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/JndiLaunchable.java
index 3aee235..542efbd 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/JndiLaunchable.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/JndiLaunchable.java
@@ -12,8 +12,14 @@
 
 import java.util.Properties;
 /**
- * 
- * @since 1.0
+ * A representation of an object in JNDI that can be tested on a server.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
  */
 public class JndiLaunchable {
 	private Properties props;
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/JndiObject.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/JndiObject.java
index f8f3806..bae4411 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/JndiObject.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/JndiObject.java
@@ -13,8 +13,14 @@
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IModuleArtifact;
 /**
- * 
- * @since 1.0
+ * A representation of an object in JNDI that can be tested on a server.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
  */
 public class JndiObject implements IModuleArtifact {
 	private IModule module;
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java
new file mode 100644
index 0000000..712a0e5
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java
@@ -0,0 +1,420 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.jst.server.core;
+
+import java.io.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.*;
+import org.eclipse.jst.server.core.internal.JavaServerPlugin;
+import org.eclipse.jst.server.core.internal.Messages;
+import org.eclipse.jst.server.core.internal.ProgressUtil;
+import org.eclipse.jst.server.core.internal.Trace;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.server.core.model.IModuleFile;
+import org.eclipse.wst.server.core.model.IModuleFolder;
+import org.eclipse.wst.server.core.model.IModuleResource;
+import org.eclipse.wst.server.core.model.IModuleResourceDelta;
+/**
+ * Utility class with an assortment of useful file methods.
+ * 
+ * <p>
+ * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
+ */
+public class PublishUtil {
+	// size of the buffer
+	private static final int BUFFER = 10240;
+
+	// the buffer
+	private static byte[] buf = new byte[BUFFER];
+
+	/**
+	 * FileUtil cannot be created. Use static methods.
+	 */
+	private PublishUtil() {
+		super();
+	}
+
+	/**
+	 * Copy a file from a to b. Closes the input stream after use.
+	 *
+	 * @param in java.io.InputStream
+	 * @param to java.lang.String
+	 * @return a status
+	 */
+	public static IStatus copyFile(InputStream in, String to) {
+		OutputStream out = null;
+		
+		try {
+			out = new FileOutputStream(to);
+	
+			int avail = in.read(buf);
+			while (avail > 0) {
+				out.write(buf, 0, avail);
+				avail = in.read(buf);
+			}
+			return Status.OK_STATUS;
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error copying file", e);
+			return new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCopyingFile, new String[] {to, e.getLocalizedMessage()}), e);
+		} finally {
+			try {
+				if (in != null)
+					in.close();
+			} catch (Exception ex) {
+				// ignore
+			}
+			try {
+				if (out != null)
+					out.close();
+			} catch (Exception ex) {
+				// ignore
+			}
+		}
+	}
+
+	/**
+	 * Copy a file from a to b. Closes the input stream after use.
+	 *
+	 * @param in an input stream
+	 * @param to a path to copy to. the directory must already exist
+	 * @param ts timestamp
+	 * @throws CoreException if anything goes wrong
+	 */
+	private static void copyFile(InputStream in, IPath to, long ts) throws CoreException {
+		OutputStream out = null;
+		
+		File tempFile = null;
+		try {
+			File file = to.toFile();
+			File tempDir = JavaServerPlugin.getInstance().getStateLocation().toFile();
+			tempFile = File.createTempFile("tmp", to.getFileExtension(), tempDir);
+			
+			out = new FileOutputStream(tempFile);
+	
+			int avail = in.read(buf);
+			while (avail > 0) {
+				out.write(buf, 0, avail);
+				avail = in.read(buf);
+			}
+			
+			out.close();
+			out = null;
+			
+			if (file.exists()) {
+				if (!file.delete()) {
+					tempFile.delete();
+					throw new Exception(NLS.bind(Messages.errorDelete, file.toString()));
+				}
+			}
+			if (!tempFile.renameTo(file))
+				throw new Exception(NLS.bind(Messages.errorRename, tempFile.toString(), file.toString()));
+			
+			if (ts != IResource.NULL_STAMP)
+				file.setLastModified(ts);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error copying file", e);
+			throw new CoreException(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCopyingFile, to.toOSString(), e.getLocalizedMessage()), e));
+		} finally {
+			if (tempFile != null && tempFile.exists())
+				tempFile.deleteOnExit();
+			try {
+				if (in != null)
+					in.close();
+			} catch (Exception ex) {
+				// ignore
+			}
+			try {
+				if (out != null)
+					out.close();
+			} catch (Exception ex) {
+				// ignore
+			}
+		}
+	}
+
+	private static void copyFile(IModuleFile mf, IPath path) throws CoreException {
+		IFile file = (IFile) mf.getAdapter(IFile.class);
+		copyFile(file.getContents(), path, file.getLocalTimeStamp());
+	}
+
+	/**
+	 * Recursively deletes a directory.
+	 *
+	 * @param dir java.io.File
+	 * @param monitor a progress monitor, or <code>null</code>
+	 */
+	public static void deleteDirectory(File dir, IProgressMonitor monitor) {
+		try {
+			if (!dir.exists() || !dir.isDirectory())
+				return;
+	
+			File[] files = dir.listFiles();
+			int size = files.length;
+			monitor = ProgressUtil.getMonitorFor(monitor);
+			monitor.beginTask(NLS.bind(Messages.deletingTask, new String[] { dir.getAbsolutePath() }), size * 10);
+	
+			// cycle through files
+			for (int i = 0; i < size; i++) {
+				File current = files[i];
+				if (current.isFile()) {
+					current.delete();
+					monitor.worked(10);
+				} else if (current.isDirectory()) {
+					monitor.subTask(NLS.bind(Messages.deletingTask, new String[] {current.getAbsolutePath()}));
+					deleteDirectory(current, ProgressUtil.getSubMonitorFor(monitor, 10));
+				}
+			}
+			dir.delete();
+			monitor.done();
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error deleting directory " + dir.getAbsolutePath(), e);
+		}
+	}
+	
+	public static void smartCopy(IModuleResource[] resources, IPath path, IProgressMonitor monitor) throws CoreException {
+		if (resources == null)
+			return;
+		
+		File toDir = path.toFile();
+		File[] toFiles = toDir.listFiles();
+		int fromSize = resources.length;
+		
+		if (toDir.exists() && toDir.isDirectory()) {
+			int toSize = toFiles.length;
+			// check if this exact file exists in the new directory
+			for (int i = 0; i < toSize; i++) {
+				String name = toFiles[i].getName();
+				boolean isDir = toFiles[i].isDirectory();
+				boolean found = false;
+				for (int j = 0; j < fromSize; j++) {
+					if (name.equals(resources[j].getName()) && isDir == resources[j] instanceof IModuleFolder)
+						found = true;
+				}
+	
+				// delete file if it can't be found or isn't the correct type
+				if (!found) {
+					if (isDir)
+						deleteDirectory(toFiles[i], null);
+					else
+						toFiles[i].delete();
+				}
+				if (monitor.isCanceled())
+					return;
+			}
+		} else {
+			if (toDir.isFile())
+				toDir.delete();
+			toDir.mkdir();
+		}
+			
+		monitor.worked(50);
+		
+		// cycle through files and only copy when it doesn't exist
+		// or is newer
+		toFiles = toDir.listFiles();
+		int toSize = toFiles.length;
+		int dw = 0;
+		if (toSize > 0)
+			dw = 500 / toSize;
+
+		for (int i = 0; i < fromSize; i++) {
+			IModuleResource current = resources[i];
+
+			// check if this is a new or newer file
+			boolean copy = true;
+			boolean currentIsDir = current instanceof IModuleFolder;
+			if (!currentIsDir) {
+				//String name = current.getName();
+				//IModuleFile mf = (IModuleFile) current;
+				
+				//long mod = mf.getModificationStamp();
+				// TODO
+				/*for (int j = 0; j < toSize; j++) {
+					if (name.equals(toFiles[j].getName()) && mod <= toFiles[j].lastModified())
+						copy = false;
+				}*/
+			}
+
+			if (copy) {
+				//String fromFile = current.getAbsolutePath();
+				IPath toPath = path.append(current.getName());
+				if (!currentIsDir) {
+					IModuleFile mf = (IModuleFile) current;
+					copyFile(mf, toPath);
+					monitor.worked(dw);
+				} else { //if (currentIsDir) {
+					IModuleFolder folder = (IModuleFolder) current;
+					IModuleResource[] children = folder.members();
+					monitor.subTask(NLS.bind(Messages.copyingTask, new String[] {resources[i].getName(), current.getName()}));
+					smartCopy(children, toPath, ProgressUtil.getSubMonitorFor(monitor, dw));
+				}
+			}
+			if (monitor.isCanceled())
+				return;
+		}
+		monitor.worked(500 - dw * toSize);
+		monitor.done();
+	}
+
+	public static void handleDelta(int kind, IPath path, IModuleResourceDelta delta) throws CoreException {
+		IModuleResource resource = delta.getModuleResource();
+		int kind2 = delta.getKind();
+		
+		if (resource instanceof IModuleFile) {
+			IModuleFile file = (IModuleFile) resource;
+			if (kind2 == IModuleResourceDelta.REMOVED)
+				deleteFile(path, file);
+			else
+				copyFile(path, file);
+			return;
+		}
+		
+		if (kind2 == IModuleResourceDelta.ADDED) {
+			IPath path2 = path.append(resource.getModuleRelativePath()).append(resource.getName());
+			path2.toFile().mkdirs();
+		} else if (kind == IModuleResourceDelta.REMOVED) {
+			IPath path2 = path.append(resource.getModuleRelativePath()).append(resource.getName());
+			path2.toFile().delete();
+		}
+		IModuleResourceDelta[] childDeltas = delta.getAffectedChildren();
+		int size = childDeltas.length;
+		for (int i = 0; i < size; i++) {
+			handleDelta(kind, path, childDeltas[i]);
+		}
+	}
+
+	protected static void deleteFile(IPath path, IModuleFile file) {
+		IPath path2 = path.append(file.getModuleRelativePath()).append(file.getName());
+		path2.toFile().delete();
+	}
+
+	private static void copyFile(IPath path, IModuleFile file) throws CoreException {
+		IFile file2 = (IFile) file.getAdapter(IFile.class);
+		IPath path3 = path.append(file.getModuleRelativePath()).append(file.getName());
+		File f = path3.toFile().getParentFile();
+		if (!f.exists())
+			f.mkdirs();
+		copyFile(file2.getContents(), path3, file2.getLocalTimeStamp());
+	}
+
+	public static void copy(IModuleResource[] resources, IPath path) throws CoreException {
+		if (resources == null)
+			return;
+		
+		int size = resources.length;
+		for (int i = 0; i < size; i++) {
+			copy(resources[i], path);
+		}
+	}
+
+	private static void copy(IModuleResource resource, IPath path) throws CoreException {
+		if (resource instanceof IModuleFolder) {
+			IModuleFolder folder = (IModuleFolder) resource;
+			copy(folder.members(), path);
+		} else {
+			IModuleFile mf = (IModuleFile) resource;
+			IFile file = (IFile) mf.getAdapter(IFile.class);
+			IPath path3 = path.append(mf.getModuleRelativePath()).append(mf.getName());
+			File f = path3.toFile().getParentFile();
+			if (!f.exists())
+				f.mkdirs();
+			copyFile(file.getContents(), path3, file.getLocalTimeStamp());
+		}
+	}
+
+	/**
+	 * Creates a new zip file containing the given module resources. Deletes the existing file
+	 * (and doesn't create a new one) if resources is null or empty.
+	 * 
+	 * @param resources
+	 * @param zipPath
+	 * @throws CoreException
+	 */
+	public static void createZipFile(IModuleResource[] resources, IPath zipPath) throws CoreException {
+		if (resources == null || resources.length == 0) {
+			// should also check if resources consists of all empty directories
+			File file = zipPath.toFile();
+			if (file.exists())
+				file.delete();
+			return;
+		}
+		
+		File tempFile = null;
+		try {
+			File file = zipPath.toFile();
+			File tempDir = JavaServerPlugin.getInstance().getStateLocation().toFile();
+			tempFile = File.createTempFile("tmp", zipPath.getFileExtension(), tempDir);
+			
+			BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(tempFile));
+			ZipOutputStream zout = new ZipOutputStream(bout);
+			addZipEntries(zout, resources);
+			zout.close();
+			
+			if (file.exists()) {
+				if (!file.delete()) {
+					tempFile.delete();
+					throw new Exception(NLS.bind(Messages.errorDelete, file.toString()));
+				}
+			}
+			if (!tempFile.renameTo(file))
+				throw new Exception(NLS.bind(Messages.errorRename, tempFile.toString(), file.toString()));
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error zipping", e);
+			throw new CoreException(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCreatingZipFile, zipPath.lastSegment(), e.getLocalizedMessage()), e));
+		} finally {
+			if (tempFile != null && tempFile.exists())
+				tempFile.deleteOnExit();
+		}
+	}
+
+	private static void addZipEntries(ZipOutputStream zout, IModuleResource[] resources) throws Exception {
+		int size = resources.length;
+		for (int i = 0; i < size; i++) {
+			if (resources[i] instanceof IModuleFolder) {
+				IModuleFolder mf = (IModuleFolder) resources[i];
+				IModuleResource[] res = mf.members();
+				addZipEntries(zout, res);
+				continue;
+			}
+			
+			IModuleFile mf = (IModuleFile) resources[i];
+			IPath path = mf.getModuleRelativePath().append(mf.getName());
+			
+			ZipEntry ze = new ZipEntry(path.toPortableString());
+			
+			IFile file = (IFile) mf.getAdapter(IFile.class);
+			long ts = file.getLocalTimeStamp();
+			if (ts != IResource.NULL_STAMP)
+				ze.setTime(ts);
+			
+			zout.putNextEntry(ze);
+			
+			InputStream in = file.getContents();
+			int n = 0;
+			while (n > -1) {
+				n = in.read(buf);
+				if (n > 0)
+					zout.write(buf, 0, n);
+			}
+			
+			zout.closeEntry();
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
new file mode 100644
index 0000000..ac5c473
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
@@ -0,0 +1,281 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.jst.server.core;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IAccessRule;
+import org.eclipse.jdt.core.IClasspathAttribute;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jst.server.core.internal.IMemento;
+import org.eclipse.jst.server.core.internal.JavaServerPlugin;
+import org.eclipse.jst.server.core.internal.Trace;
+import org.eclipse.jst.server.core.internal.XMLMemento;
+import org.eclipse.wst.server.core.IRuntime;
+/**
+ * A runtime classpath provider provides the classpath for a Java server runtime.
+ * <p>
+ * This abstract class is intended to be extended only by clients
+ * to extend the <code>runtimeClasspathProviders</code> extension point.
+ * </p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * 
+ * @plannedfor 1.5
+ */
+public abstract class RuntimeClasspathProviderDelegate {
+	private class SourceAttachmentUpdate {
+		String runtimeId;
+		String id;
+		IPath entry;
+		IPath sourceAttachmentPath;
+		IPath sourceAttachmentRootPath;
+		IClasspathAttribute[] attributes;
+	}
+
+	private List sourceAttachments;
+
+	private String extensionId;
+
+	/**
+	 * Initializes this classpath provider with its life-long id.
+	 * <p>
+	 * This method is called by the framework.
+	 * Clients should never call this method.
+	 * </p>
+	 * @param id the extension id
+	 */
+	public final void initialize(String id) {
+		extensionId = id;
+	}
+
+	/**
+	 * Returns the classpath container label for the given runtime and the given
+	 * classpath container id (returned from getClasspathEntryIds()). This method
+	 * must not return null.
+	 * 
+	 * @param runtime the runtime to resolve the container label for
+	 * @param id the classpath entry id
+	 * @return a classpath container label
+	 */
+	public abstract String getClasspathContainerLabel(IRuntime runtime, String id);
+
+	/**
+	 * Resolves (creates the classpath entries for) the classpath container with
+	 * the given runtime and the given classpath container id (returned from
+	 * getClasspathEntryIds()). If the classpath container cannot be resolved
+	 * (for instance, if the runtime does not exist), return null.
+	 * 
+	 * @param runtime the runtime to resolve the container for
+	 * @param id the classpath entry id
+	 * @return an array of classpath entries for the container, or null if the
+	 *   container could not be resolved
+	 */
+	public abstract IClasspathEntry[] resolveClasspathContainer(IRuntime runtime, String id);
+
+	private void load() {
+		sourceAttachments = new ArrayList();
+		
+		String id = extensionId;
+		String filename = JavaServerPlugin.getInstance().getStateLocation().append(id + ".xml").toOSString();
+		
+		try {
+			IMemento memento = XMLMemento.loadMemento(filename);
+			
+			IMemento[] children = memento.getChildren("source-attachment");
+			int size = children.length;
+			
+			for (int i = 0; i < size; i++) {
+				try {
+					SourceAttachmentUpdate sau = new SourceAttachmentUpdate();
+					sau.runtimeId = children[i].getString("runtime-id");
+					sau.id = children[i].getString("id");
+					String temp = children[i].getString("entry");
+					if (temp != null)
+						sau.entry = new Path(temp);
+					temp = children[i].getString("source-attachment-path");
+					if (temp != null)
+						sau.sourceAttachmentPath = new Path(temp);
+					temp = children[i].getString("source-attachment-root-path");
+					if (temp != null)
+						sau.sourceAttachmentRootPath = new Path(temp);
+					IMemento[] attrChildren = children[i].getChildren("attribute");
+					if (attrChildren != null) {
+						int size2 = attrChildren.length;
+						sau.attributes = new IClasspathAttribute[size2];
+						for (int j = 0; j < size2; j++) {
+							String name = attrChildren[j].getString("name");
+							String value = attrChildren[j].getString("value");
+							sau.attributes[j] = JavaCore.newClasspathAttribute(name, value);
+						}
+					}
+					sourceAttachments.add(sau);
+				} catch (Exception e) {
+					Trace.trace(Trace.WARNING, "Could not load monitor: " + e);
+				}
+			}
+		} catch (Exception e) {
+			Trace.trace(Trace.WARNING, "Could not load source path info: " + e.getMessage());
+		}
+	}
+
+	/**
+	 * Resolve the classpath container.
+	 * 
+	 * @param runtime a runtime
+	 * @param id a container id
+	 * @return a possibly empty array of classpath entries
+	 */
+	public IClasspathEntry[] resolveClasspathContainerImpl(IRuntime runtime, String id) {
+		IClasspathEntry[] entries = resolveClasspathContainer(runtime, id);
+		
+		if (entries == null)
+			entries = new IClasspathEntry[0];
+		
+		if (sourceAttachments == null)
+			load();
+		
+		int size = entries.length;
+		int size2 = sourceAttachments.size();
+		for (int i = 0; i < size; i++) {
+			for (int j = 0; j < size2; j++) {
+				SourceAttachmentUpdate sau = (SourceAttachmentUpdate) sourceAttachments.get(j);
+				if ((id != null && sau.id.equals(id)) || (id == null && sau.id == null)) {
+					if (sau.runtimeId.equals(runtime.getId()) && sau.entry.equals(entries[i].getPath())) {
+						entries[i] = JavaCore.newLibraryEntry(entries[i].getPath(), sau.sourceAttachmentPath, sau.sourceAttachmentRootPath, new IAccessRule[0], sau.attributes, false);
+					}
+				}
+			}
+		}
+		
+		return entries;
+	}
+
+	private static void addJarFiles(File dir, List list, boolean includeSubdirectories) {
+		int depth = 0;
+		if (includeSubdirectories)
+			depth = 2;
+		addJarFiles(dir, list, depth);
+	}
+
+	private static void addJarFiles(File dir, List list, int depth) {
+		if (dir == null)
+			throw new IllegalArgumentException();
+		
+		File[] files = dir.listFiles();
+		if (files != null) {
+			int size = files.length;
+			for (int i = 0; i < size; i++) {
+				if (files[i].isDirectory() && depth > 0) {
+					addJarFiles(files[i], list, depth - 1);
+				} else if (files[i].getAbsolutePath().endsWith(".jar") || files[i].getAbsolutePath().endsWith(".zip")) {
+					IPath path = new Path(files[i].getAbsolutePath());
+					list.add(JavaCore.newLibraryEntry(path, null, null));
+				}
+			}
+		}
+	}
+
+	/**
+	 * Add library entries to the given list for every jar file found in the
+	 * given directory. Optionally search subdirectories as well.
+	 * 
+	 * @param list a list
+	 * @param dir a directory
+	 * @param includeSubdirectories <code>true</code> to include subdirectories, and
+	 *    <code>false</code> otherwise
+	 */
+	protected static void addLibraryEntries(List list, File dir, boolean includeSubdirectories) {
+		if (dir == null)
+			throw new IllegalArgumentException();
+		addJarFiles(dir, list, includeSubdirectories);
+	}
+
+	/**
+	 * Request that the classpath container for the given runtime and id be updated
+	 * with the given classpath container entries.
+	 * 
+	 * @param runtime a runtime
+	 * @param id an id
+	 * @param entries an array of classpath entries
+	 */
+	public void requestClasspathContainerUpdate(IRuntime runtime, String id, IClasspathEntry[] entries) {
+		// default behaviour is to save the source path entries
+		if (runtime == null || entries == null)
+			return;
+		
+		// find the source attachments
+		sourceAttachments = new ArrayList();
+		
+		int size = entries.length;
+		for (int i = 0; i < size; i++) {
+			if (entries[i].getSourceAttachmentPath() != null || entries[i].getExtraAttributes() != null) {
+				SourceAttachmentUpdate sau = new SourceAttachmentUpdate();
+				sau.runtimeId = runtime.getId();
+				sau.id = id;
+				sau.entry = entries[i].getPath();
+				sau.sourceAttachmentPath = entries[i].getSourceAttachmentPath();
+				sau.sourceAttachmentRootPath = entries[i].getSourceAttachmentRootPath();
+				sau.attributes = entries[i].getExtraAttributes();
+				sourceAttachments.add(sau);
+			}
+		}
+		save();
+	}
+
+	private void save() {
+		if (sourceAttachments == null)
+			return;
+		String id = extensionId;
+		String filename = JavaServerPlugin.getInstance().getStateLocation().append(id + ".xml").toOSString();
+		try {
+			XMLMemento memento = XMLMemento.createWriteRoot("classpath");
+
+			Iterator iterator = sourceAttachments.iterator();
+			while (iterator.hasNext()) {
+				SourceAttachmentUpdate sau = (SourceAttachmentUpdate) iterator.next();
+				IMemento child = memento.createChild("source-attachment");
+				child.putString("runtime-id", sau.runtimeId);
+				if (sau.id != null)
+					child.putString("id", sau.id);
+				if (sau.entry != null)
+					child.putString("entry", sau.entry.toPortableString());
+				if (sau.sourceAttachmentPath != null)
+					child.putString("source-attachment-path", sau.sourceAttachmentPath.toPortableString());
+				if (sau.sourceAttachmentRootPath != null)
+					child.putString("source-attachment-root-path", sau.sourceAttachmentRootPath.toPortableString());
+				if (sau.attributes != null) {
+					int size = sau.attributes.length;
+					for (int i = 0; i < size; i++) {
+						IClasspathAttribute attr = sau.attributes[i];
+						IMemento attrChild = child.createChild("attribute");
+						attrChild.putString("name", attr.getName());
+						attrChild.putString("value", attr.getValue());
+					}
+				}
+			}
+			
+			memento.saveToFile(filename);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error saving source path info", e);
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/Servlet.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/Servlet.java
index 419e900..7f7c5aa 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/Servlet.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/Servlet.java
@@ -13,8 +13,14 @@
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IModuleArtifact;
 /**
- * 
- * @since 1.0
+ * A J2EE Servlet.
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
+ * @plannedfor 1.5
  */
 public class Servlet implements IModuleArtifact {
 	private IModule module;
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntime.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntime.java
index 670c4cb..3a365ff 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntime.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntime.java
@@ -85,13 +85,13 @@
 		else if (getVMInstall() == null)
 			return new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, Messages.errorJRE, null);
 		else
-			return new Status(IStatus.OK, JavaServerPlugin.PLUGIN_ID, 0, "", null);
+			return Status.OK_STATUS;
 	}
 
 	/**
-	 * @see RuntimeDelegate#setDefaults()
+	 * @see RuntimeDelegate#setDefaults(IProgressMonitor)
 	 */
-	public void setDefaults() {
+	public void setDefaults(IProgressMonitor monitor) {
 		IVMInstall vmInstall = JavaRuntime.getDefaultVMInstall();
 		setVMInstall(vmInstall.getVMInstallType().getId(), vmInstall.getId());
 	}
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntimeClasspathProvider.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntimeClasspathProvider.java
new file mode 100644
index 0000000..6310eca
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntimeClasspathProvider.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.jst.server.core.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jst.server.core.RuntimeClasspathProviderDelegate;
+
+import org.eclipse.wst.server.core.IRuntime;
+/**
+ * 
+ */
+public class GenericRuntimeClasspathProvider extends RuntimeClasspathProviderDelegate {
+	/**
+	 * @see RuntimeClasspathProviderDelegate#getClasspathContainerLabel(IRuntime, String)
+	 */
+	public String getClasspathContainerLabel(IRuntime runtime, String id) {
+		return runtime.getRuntimeType().getName();
+	}
+
+	/** (non-Javadoc)
+	 * @see RuntimeClasspathProviderDelegate#resolveClasspathContainer(IRuntime, String)
+	 */
+	public IClasspathEntry[] resolveClasspathContainer(IRuntime runtime, String id) {
+		IPath installPath = runtime.getLocation();
+		
+		if (installPath == null)
+			return new IClasspathEntry[0];
+		
+		List list = new ArrayList();
+		addLibraryEntries(list, installPath.toFile(), false);
+		return (IClasspathEntry[])list.toArray(new IClasspathEntry[list.size()]);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntimeTargetHandler.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntimeTargetHandler.java
deleted file mode 100644
index 5fd15f3..0000000
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntimeTargetHandler.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.core.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.ClasspathRuntimeTargetHandler;
-
-import org.eclipse.wst.server.core.IRuntime;
-/**
- * 
- */
-public class GenericRuntimeTargetHandler extends ClasspathRuntimeTargetHandler {
-	/**
-	 * @see ClasspathRuntimeTargetHandler#getDelegateClasspathEntries(IRuntime, IProgressMonitor)
-	 */
-	public IClasspathEntry[] getDelegateClasspathEntries(IRuntime runtime, IProgressMonitor monitor) {
-		GenericRuntime genericRuntime = (GenericRuntime) runtime.getAdapter(GenericRuntime.class);
-		IVMInstall vmInstall = genericRuntime.getVMInstall();
-		if (vmInstall != null) {
-			String name = vmInstall.getName();
-			return new IClasspathEntry[] { JavaCore.newContainerEntry(new Path(JavaRuntime.JRE_CONTAINER).append("org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType").append(name)) };
-		}
-		return null;
-	}
-
-	/**
-	 * @see ClasspathRuntimeTargetHandler#getClasspathContainerLabel(IRuntime, String)
-	 */
-	public String getClasspathContainerLabel(IRuntime runtime, String id) {
-		return runtime.getRuntimeType().getName();
-	}
-
-	/** (non-Javadoc)
-	 * @see ClasspathRuntimeTargetHandler#resolveClasspathContainer(IRuntime, String)
-	 */
-	public IClasspathEntry[] resolveClasspathContainer(IRuntime runtime, String id) {
-		IPath installPath = runtime.getLocation();
-		
-		if (installPath == null)
-			return new IClasspathEntry[0];
-		
-		List list = new ArrayList();
-		addLibraryEntries(list, installPath.toFile(), false);
-		return (IClasspathEntry[])list.toArray(new IClasspathEntry[list.size()]);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntimeUtil.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntimeUtil.java
index 0d77532..82dc488 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntimeUtil.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/GenericRuntimeUtil.java
@@ -13,8 +13,6 @@
 import org.eclipse.wst.server.core.IRuntime;
 /**
  * Utility methods for the generic J2EE runtime.
- * 
- * @since 1.0
  */
 public class GenericRuntimeUtil {
 	protected static final String RUNTIME_TYPE_ID = "org.eclipse.jst.server.core.runtimeType";
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/IGenericRuntime.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/IGenericRuntime.java
index fd308e2..1c509c4 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/IGenericRuntime.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/IGenericRuntime.java
@@ -10,15 +10,10 @@
  *******************************************************************************/
 package org.eclipse.jst.server.core.internal;
 
-import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jst.server.core.IJavaRuntime;
 /**
- * @since 1.0
+ * 
  */
-public interface IGenericRuntime {
-	/**
-	 * Return the VM install (installed JRE) that this runtime is using.
-	 * 
-	 * @return the current VM install
-	 */
-	public IVMInstall getVMInstall();
+public interface IGenericRuntime extends IJavaRuntime {
+	// no additional methods
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/IGenericRuntimeWorkingCopy.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/IGenericRuntimeWorkingCopy.java
index 070727b..0133c5c 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/IGenericRuntimeWorkingCopy.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/IGenericRuntimeWorkingCopy.java
@@ -12,7 +12,7 @@
 
 import org.eclipse.jdt.launching.IVMInstall;
 /**
- * @since 1.0
+ * 
  */
 public interface IGenericRuntimeWorkingCopy extends IGenericRuntime {
 	/**
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EELaunchableClient.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EELaunchableClient.java
new file mode 100644
index 0000000..4f18292
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EELaunchableClient.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * 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.jst.server.core.internal;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.jst.server.core.JndiLaunchable;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.ClientDelegate;
+/**
+ *
+ */
+public class J2EELaunchableClient extends ClientDelegate {
+	/*
+	 * @see ClientDelegate#supports(ILaunchable)
+	 */
+	public boolean supports(IServer server, Object launchable, String launchMode) {
+		return (launchable instanceof JndiLaunchable);
+	}
+
+	/*
+	 * @see ClientDelegate#launch(ILaunchable)
+	 */
+	public IStatus launch(IServer server, Object launchable, String launchMode, ILaunch launch) {
+		Trace.trace(Trace.FINEST, "JNDI client launched");
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EEUtil.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EEUtil.java
index 29c7851..25d7de0 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EEUtil.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/J2EEUtil.java
@@ -13,43 +13,118 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jst.server.core.IEnterpriseApplication;
 import org.eclipse.jst.server.core.IJ2EEModule;
+import org.eclipse.jst.server.core.IWebModule;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.ServerUtil;
 /**
- * 
- * @since 1.0
+ * Utility class for dealing with J2EE modules.
  */
 public class J2EEUtil {
+	private static final String EAR_MODULE = "jst.ear";
+	private static final String WEB_MODULE = "jst.web";
+
 	/**
 	 * Returns the enterprise applications that the module is contained within.
 	 * 
-	 * @param module
+	 * @param module a J2EE module
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
 	 * @return a possibly empty array of enterprise applications
 	 */
-	public static IEnterpriseApplication[] getEnterpriseApplications(IJ2EEModule module) {
+	public static IModule[] getEnterpriseApplications(IJ2EEModule module, IProgressMonitor monitor) {
 		List list = new ArrayList();
-		IModule[] modules = ServerUtil.getModules("j2ee.ear");
+		IModule[] modules = ServerUtil.getModules(EAR_MODULE);
 		if (modules != null) {
 			int size = modules.length;
 			for (int i = 0; i < size; i++) {
 				IModule module2 = modules[i];
-				IEnterpriseApplication ear = (IEnterpriseApplication) module2.getAdapter(IEnterpriseApplication.class);
+				IEnterpriseApplication ear = (IEnterpriseApplication) module2.loadAdapter(IEnterpriseApplication.class, monitor);
 				if (ear != null) {
-					IJ2EEModule[] modules2 = ear.getModules();
+					IModule[] modules2 = ear.getModules();
 					if (modules2 != null) {
 						int size2 = modules2.length;
 						for (int j = 0; j < size2; j++) {
-							if (modules2[j].equals(module))
-								list.add(ear);
+							if (module.equals(modules2[j].loadAdapter(IJ2EEModule.class, monitor)))
+								list.add(module2);
 						}
 					}
 				}
 			}
 		}
-		IEnterpriseApplication[] ears = new IEnterpriseApplication[list.size()];
+		
+		IModule[] ears = new IModule[list.size()];
 		list.toArray(ears);
 		return ears;
 	}
+
+	/**
+	 * Returns the enterprise applications that the module is contained within.
+	 * 
+	 * @param module a J2EE module or utility module
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @return a possibly empty array of enterprise applications
+	 */
+	public static IModule[] getEnterpriseApplications(IModule module, IProgressMonitor monitor) {
+		List list = new ArrayList();
+		IModule[] modules = ServerUtil.getModules(EAR_MODULE);
+		if (modules != null) {
+			int size = modules.length;
+			for (int i = 0; i < size; i++) {
+				IModule module2 = modules[i];
+				IEnterpriseApplication ear = (IEnterpriseApplication) module2.loadAdapter(IEnterpriseApplication.class, monitor);
+				if (ear != null) {
+					IModule[] modules2 = ear.getModules();
+					if (modules2 != null) {
+						int size2 = modules2.length;
+						for (int j = 0; j < size2; j++) {
+							if (module.equals(modules2[j]))
+								list.add(module2);
+						}
+					}
+				}
+			}
+		}
+		
+		IModule[] ears = new IModule[list.size()];
+		list.toArray(ears);
+		return ears;
+	}
+
+	/**
+	 * Returns the web modules that the utility module is contained within.
+	 * 
+	 * @param module a utility module
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @return a possibly empty array of web modules
+	 */
+	public static IModule[] getWebModules(IModule module, IProgressMonitor monitor) {
+		List list = new ArrayList();
+		IModule[] modules = ServerUtil.getModules(WEB_MODULE);
+		if (modules != null) {
+			int size = modules.length;
+			for (int i = 0; i < size; i++) {
+				IModule module2 = modules[i];
+				IWebModule web = (IWebModule) module2.loadAdapter(IWebModule.class, monitor);
+				if (web != null) {
+					IModule[] modules2 = web.getModules();
+					if (modules2 != null) {
+						int size2 = modules2.length;
+						for (int j = 0; j < size2; j++) {
+							if (module.equals(modules2[j]))
+								list.add(module2);
+						}
+					}
+				}
+			}
+		}
+		
+		IModule[] webs = new IModule[list.size()];
+		list.toArray(webs);
+		return webs;
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/JavaServerPlugin.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/JavaServerPlugin.java
index 55a5b47..6b2287a 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/JavaServerPlugin.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/JavaServerPlugin.java
@@ -10,7 +10,12 @@
  *******************************************************************************/
 package org.eclipse.jst.server.core.internal;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 import org.eclipse.core.runtime.*;
+import org.eclipse.wst.server.core.IRuntimeType;
 /**
  * The main server tooling plugin class.
  */
@@ -23,6 +28,12 @@
 	// singleton instance of this class
 	private static JavaServerPlugin singleton;
 
+	//	cached copy of all runtime classpath providers
+	private static List runtimeClasspathProviders;
+
+	//	cached copy of all runtime facet mappings
+	private static List runtimeFacetMappings;
+
 	/**
 	 * Create the JavaServerPlugin.
 	 */
@@ -34,7 +45,7 @@
 	/**
 	 * Returns the singleton instance of this plugin.
 	 *
-	 * @return org.eclipse.jst.server.JavaServerPlugin
+	 * @return a singleton instance
 	 */
 	public static JavaServerPlugin getInstance() {
 		return singleton;
@@ -43,9 +54,158 @@
 	/**
 	 * Convenience method for logging.
 	 *
-	 * @param status org.eclipse.core.runtime.IStatus
+	 * @param status a status
 	 */
 	public static void log(IStatus status) {
 		getInstance().getLog().log(status);
 	}
+	
+	/**
+	 * Convenience method for logging.
+	 *
+	 * @param t a throwable
+	 */
+	public static void log(Throwable t) {
+		log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, "Internal error", t)); //$NON-NLS-1$
+	}
+
+	/**
+	 * Returns an array of all known runtime classpath provider instances.
+	 * <p>
+	 * A new array is returned on each call, so clients may store or modify the result.
+	 * </p>
+	 * 
+	 * @return a possibly-empty array of runtime classpath provider instances
+	 *    {@link RuntimeClasspathProviderWrapper}
+	 */
+	public static RuntimeClasspathProviderWrapper[] getRuntimeClasspathProviders() {
+		if (runtimeClasspathProviders == null)
+			loadRuntimeClasspathProviders();
+		
+		RuntimeClasspathProviderWrapper[] rth = new RuntimeClasspathProviderWrapper[runtimeClasspathProviders.size()];
+		runtimeClasspathProviders.toArray(rth);
+		return rth;
+	}
+
+	/**
+	 * Returns the runtime classpath provider that supports the given runtime type, or <code>null</code>
+	 * if none. This convenience method searches the list of known runtime
+	 * classpath providers ({@link #getRuntimeClasspathProviders()}) for the one with
+	 * a matching runtime type.
+	 * The runtimeType may not be null.
+	 *
+	 * @param runtimeType a runtime type
+	 * @return the runtime classpath provider instance, or <code>null</code> if
+	 *   there is no runtime classpath provider with the given id
+	 */
+	public static RuntimeClasspathProviderWrapper findRuntimeClasspathProvider(IRuntimeType runtimeType) {
+		if (runtimeType == null)
+			throw new IllegalArgumentException();
+
+		if (runtimeClasspathProviders == null)
+			loadRuntimeClasspathProviders();
+		
+		Iterator iterator = runtimeClasspathProviders.iterator();
+		while (iterator.hasNext()) {
+			RuntimeClasspathProviderWrapper runtimeClasspathProvider = (RuntimeClasspathProviderWrapper) iterator.next();
+			if (runtimeClasspathProvider.supportsRuntimeType(runtimeType))
+				return runtimeClasspathProvider;
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the runtime classpath provider with the given id, or <code>null</code>
+	 * if none. This convenience method searches the list of known runtime
+	 * classpath providers ({@link #getRuntimeClasspathProviders()}) for the one with
+	 * a matching runtime classpath provider id ({@link RuntimeClasspathProviderWrapper#getId()}).
+	 * The id may not be null.
+	 *
+	 * @param id the runtime classpath provider id
+	 * @return the runtime classpath provider instance, or <code>null</code> if
+	 *   there is no runtime classpath provider with the given id
+	 */
+	public static RuntimeClasspathProviderWrapper findRuntimeClasspathProvider(String id) {
+		if (id == null)
+			throw new IllegalArgumentException();
+
+		if (runtimeClasspathProviders == null)
+			loadRuntimeClasspathProviders();
+		
+		Iterator iterator = runtimeClasspathProviders.iterator();
+		while (iterator.hasNext()) {
+			RuntimeClasspathProviderWrapper runtimeClasspathProvider = (RuntimeClasspathProviderWrapper) iterator.next();
+			if (id.equals(runtimeClasspathProvider.getId()))
+				return runtimeClasspathProvider;
+		}
+		return null;
+	}
+
+	/**
+	 * Load the runtime classpath providers.
+	 */
+	private static synchronized void loadRuntimeClasspathProviders() {
+		if (runtimeClasspathProviders != null)
+			return;
+		Trace.trace(Trace.CONFIG, "->- Loading .runtimeClasspathProviders extension point ->-");
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(JavaServerPlugin.PLUGIN_ID, "runtimeClasspathProviders");
+
+		int size = cf.length;
+		runtimeClasspathProviders = new ArrayList(size);
+		for (int i = 0; i < size; i++) {
+			try {
+				RuntimeClasspathProviderWrapper runtimeClasspathProvider = new RuntimeClasspathProviderWrapper(cf[i]);
+				runtimeClasspathProviders.add(runtimeClasspathProvider);
+				Trace.trace(Trace.CONFIG, "  Loaded runtimeClasspathProviders: " + cf[i].getAttribute("id"));
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "  Could not load runtimeClasspathProviders: " + cf[i].getAttribute("id"), t);
+			}
+		}
+		
+		Trace.trace(Trace.CONFIG, "-<- Done loading .runtimeClasspathProviders extension point -<-");
+	}
+	
+	/**
+	 * Returns an array of all known runtime classpath provider instances.
+	 * <p>
+	 * A new array is returned on each call, so clients may store or modify the result.
+	 * </p>
+	 * 
+	 * @return a possibly-empty array of runtime classpath provider instances
+	 *    {@link RuntimeClasspathProviderWrapper}
+	 */
+	public static RuntimeFacetMapping[] getRuntimeFacetMapping() {
+		if (runtimeFacetMappings == null)
+			loadRuntimeFacetMapping();
+		
+		RuntimeFacetMapping[] rfm = new RuntimeFacetMapping[runtimeFacetMappings.size()];
+		runtimeFacetMappings.toArray(rfm);
+		return rfm;
+	}
+
+	/**
+	 * Load the runtime facet mappings.
+	 */
+	private static synchronized void loadRuntimeFacetMapping() {
+		if (runtimeFacetMappings != null)
+			return;
+		Trace.trace(Trace.CONFIG, "->- Loading .runtimeFacetMapping extension point ->-");
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(JavaServerPlugin.PLUGIN_ID, "runtimeFacetMappings");
+
+		int size = cf.length;
+		runtimeFacetMappings = new ArrayList(size);
+		for (int i = 0; i < size; i++) {
+			try {
+				RuntimeFacetMapping rfm = new RuntimeFacetMapping(cf[i]);
+				runtimeFacetMappings.add(rfm);
+				Trace.trace(Trace.CONFIG, "  Loaded runtimeFacetMapping: " + cf[i].getAttribute("id"));
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "  Could not load runtimeFacetMapping: " + cf[i].getAttribute("id"), t);
+			}
+		}
+		
+		Trace.trace(Trace.CONFIG, "-<- Done loading .runtimeFacetMapping extension point -<-");
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Messages.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Messages.java
index 7ff7866..e1d5c0a 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Messages.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Messages.java
@@ -19,6 +19,13 @@
 	public static String errorJRE;
 	public static String classpathContainerDescription;
 	
+	public static String copyingTask;
+	public static String deletingTask;
+	public static String errorCopyingFile;
+	public static String errorCreatingZipFile;
+	public static String errorDelete;
+	public static String errorRename;
+	
 	static {
 		NLS.initializeMessages(JavaServerPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
 	}
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Messages.properties b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Messages.properties
index e365f11..2f7e1ca 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Messages.properties
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Messages.properties
@@ -13,3 +13,10 @@
 
 errorLocation=Invalid location.
 errorJRE=Invalid JRE.
+
+copyingTask=Copying from {0} to {1}
+deletingTask=Deleting {0}
+errorCopyingFile=Error copying file to {0}: {1}
+errorCreatingZipFile=Error creating zip file {0}: {1}
+errorDelete=Error deleting {0}
+errorRename=Error renaming {0} to {1}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ProgressUtil.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/ProgressUtil.java
similarity index 97%
rename from plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ProgressUtil.java
rename to plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/ProgressUtil.java
index aedadd5..55bbe1c 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ProgressUtil.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/ProgressUtil.java
@@ -8,7 +8,7 @@
  * Contributors:
  *     IBM Corporation - Initial API and implementation
  *******************************************************************************/
-package org.eclipse.jst.server.tomcat.core.internal;
+package org.eclipse.jst.server.core.internal;
 
 import org.eclipse.core.runtime.*;
 /**
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java
new file mode 100644
index 0000000..b0d3424
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java
@@ -0,0 +1,166 @@
+/******************************************************************************
+ * Copyright (c) 2005 BEA Systems, Inc.
+ * 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:
+ *    Konstantin Komissarchik - initial API and implementation
+ *    IBM Corporation - Support for all server types
+ ******************************************************************************/
+package org.eclipse.jst.server.core.internal;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMInstall2;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jst.server.core.IJavaRuntime;
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntimeBridge;
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntimeComponentVersion;
+import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.ServerCore;
+/**
+ * 
+ */
+public class RuntimeBridge implements IRuntimeBridge {
+	protected static final String CLASSPATH = "classpath";
+
+	protected static Map mappings = new HashMap();
+
+	static {
+		initialize();
+	}
+
+	private static void addMapping(String id, String id2, String version) {
+		try {
+			mappings.put(id, RuntimeManager.getRuntimeComponentType(id2).getVersion(version));
+		} catch (Exception e) {
+			// ignore
+		}
+	}
+
+	private static void initialize() {
+		RuntimeFacetMapping[] rfms = JavaServerPlugin.getRuntimeFacetMapping();
+		int size = rfms.length;
+		for (int i = 0; i < size; i++)
+			addMapping(rfms[i].getRuntimeTypeId(), rfms[i].getRuntimeComponent(), rfms[i].getVersion());
+
+		// generic runtimes
+		addMapping("org.eclipse.jst.server.generic.runtime.weblogic81", "org.eclipse.jst.server.generic.runtime.weblogic", "8.1");
+
+		addMapping("org.eclipse.jst.server.generic.runtime.weblogic90", "org.eclipse.jst.server.generic.runtime.weblogic", "9.0");
+
+		addMapping("org.eclipse.jst.server.generic.runtime.jboss323", "org.eclipse.jst.server.generic.runtime.jboss", "3.2.3");
+
+		addMapping("org.eclipse.jst.server.generic.runtime.jonas4", "org.eclipse.jst.server.generic.runtime.jonas", "4.0");
+
+		addMapping("org.eclipse.jst.server.generic.runtime.oracle1013dp4", "org.eclipse.jst.server.generic.runtime.oracle", "1013dp4");
+
+		addMapping("org.eclipse.jst.server.generic.runtime.websphere.6", "org.eclipse.jst.server.generic.runtime.websphere", "6.0");
+	}
+
+	public Set getExportedRuntimeNames() throws CoreException {
+		IRuntime[] runtimes = ServerCore.getRuntimes();
+		Set result = new HashSet(runtimes.length);
+		
+		for (int i = 0; i < runtimes.length; i++) {
+			IRuntime r = runtimes[i];
+			
+			if (mappings.containsKey(r.getRuntimeType().getId())) {
+				result.add(r.getName());
+			}
+		}
+		
+		return result;
+	}
+
+	public IStub bridge(String name) throws CoreException {
+		if (name == null)
+			throw new IllegalArgumentException();
+		
+		IRuntime[] runtimes = ServerCore.getRuntimes();
+		int size = runtimes.length;
+		for (int i = 0; i < size; i++) {
+			if (runtimes[i].getName().equals(name))
+				return new Stub(runtimes[i]);
+		}
+		return null;
+	}
+
+	private static class Stub implements IStub {
+		private IRuntime runtime;
+
+		public Stub(IRuntime runtime) {
+			this.runtime = runtime;
+		}
+
+		public List getRuntimeComponents() {
+			List components = new ArrayList(2);
+			if (runtime == null)
+				return components;
+			
+			// define server runtime component
+			String typeId = runtime.getRuntimeType().getId();
+			IRuntimeComponentVersion mapped = (IRuntimeComponentVersion) mappings.get(typeId);
+			
+			Map properties = new HashMap();
+			properties.put("location", runtime.getLocation().toPortableString());
+			properties.put("name", runtime.getName());
+			properties.put("type", runtime.getRuntimeType().getName());
+			properties.put("id", runtime.getId());
+			
+			RuntimeClasspathProviderWrapper rcpw = JavaServerPlugin.findRuntimeClasspathProvider(runtime.getRuntimeType());
+			if (rcpw != null) {
+				IPath path = new Path(RuntimeClasspathContainer.SERVER_CONTAINER);
+				path = path.append(rcpw.getId()).append(runtime.getId());
+				properties.put(CLASSPATH, path.toPortableString());
+			}
+			
+			components.add(RuntimeManager.createRuntimeComponent(mapped, properties));
+			
+			// define JRE component
+			IJavaRuntime javaRuntime = (IJavaRuntime) runtime.loadAdapter(IJavaRuntime.class, null);
+			if (javaRuntime != null) {
+				IVMInstall vmInstall = javaRuntime.getVMInstall();
+				IVMInstall2 vmInstall2 = (IVMInstall2) vmInstall;
+				
+				String jvmver = vmInstall2.getJavaVersion();
+				IRuntimeComponentVersion rcv;
+				
+				if (jvmver.startsWith("1.4"))
+					rcv = RuntimeManager.getRuntimeComponentType("standard.jre").getVersion("1.4");
+				else if (jvmver.startsWith("1.5"))
+					rcv = RuntimeManager.getRuntimeComponentType("standard.jre").getVersion("5.0");
+				else
+					throw new IllegalStateException();
+				
+				properties = new HashMap();
+				properties.put("name", vmInstall.getName());
+				IPath path = new Path(JavaRuntime.JRE_CONTAINER);
+				path = path.append(vmInstall.getVMInstallType().getId()).append(vmInstall.getName());
+				properties.put(CLASSPATH, path.toPortableString());
+				components.add(RuntimeManager.createRuntimeComponent(rcv, properties));
+			}
+			
+			return components;
+		}
+
+		public Map getProperties() {
+			if (runtime == null)
+				return new HashMap(0);
+			return Collections.singletonMap("id", runtime.getId());
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java
index fcdb825..80007c6 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java
@@ -13,7 +13,6 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.jdt.core.IClasspathContainer;
 import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jst.server.core.ClasspathRuntimeTargetHandler;
 
 import org.eclipse.wst.server.core.IRuntime;
 /**
@@ -24,13 +23,13 @@
 	 * The server container id.
 	 */
 	public static final String SERVER_CONTAINER = JavaServerPlugin.PLUGIN_ID + ".container";
-	
+
 	private IPath path;
-	private ClasspathRuntimeTargetHandler delegate;
+	private RuntimeClasspathProviderWrapper delegate;
 	private IRuntime runtime;
-	
+
 	private String id;
-	
+
 	/**
 	 * Create a new runtime classpath container.
 	 * 
@@ -39,7 +38,7 @@
 	 * @param runtime
 	 * @param id
 	 */
-	public RuntimeClasspathContainer(IPath path, ClasspathRuntimeTargetHandler delegate, IRuntime runtime, String id) {
+	public RuntimeClasspathContainer(IPath path, RuntimeClasspathProviderWrapper delegate, IRuntime runtime, String id) {
 		this.path = path;
 		this.delegate = delegate;
 		this.runtime = runtime;
@@ -53,7 +52,7 @@
 		IClasspathEntry[] entries = null;
 		if (delegate != null && runtime != null)
 			entries = delegate.resolveClasspathContainerImpl(runtime, id);
-
+		
 		if (entries == null)
 			return new IClasspathEntry[0];
 		
@@ -64,10 +63,11 @@
 	 * @see org.eclipse.jdt.core.IClasspathContainer#getDescription()
 	 */
 	public String getDescription() {
-		String s = delegate.getClasspathContainerLabel(runtime, id);
-		
-		if (s != null)
-			return s;
+		if (runtime != null && delegate != null) {
+			String s = delegate.getClasspathContainerLabel(runtime, id);
+			if (s != null)
+				return s;
+		}
 		
 		return Messages.classpathContainerDescription;
 	}
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainerInitializer.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainerInitializer.java
index cbb1d07..12a6883 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainerInitializer.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainerInitializer.java
@@ -13,9 +13,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.jdt.core.*;
-import org.eclipse.jst.server.core.*;
 import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.IRuntimeTargetHandler;
 import org.eclipse.wst.server.core.ServerCore;
 /**
  * 
@@ -27,20 +25,19 @@
 	public void initialize(IPath containerPath, IJavaProject project) throws CoreException {
 		if (containerPath.segmentCount() > 0) {
 			if (containerPath.segment(0).equals(RuntimeClasspathContainer.SERVER_CONTAINER)) {
-				ClasspathRuntimeTargetHandler crth = null;
+				RuntimeClasspathProviderWrapper delegate = null;
 				IRuntime runtime = null;
 				String id = "";
 				if (containerPath.segmentCount() > 2) {
-					IRuntimeTargetHandler handler = ServerCore.findRuntimeTargetHandler(containerPath.segment(1));
-					if (handler != null)
-						crth = (ClasspathRuntimeTargetHandler) handler.getAdapter(ClasspathRuntimeTargetHandler.class);
+					delegate = JavaServerPlugin.findRuntimeClasspathProvider(containerPath.segment(1));
+					
 					String runtimeId = containerPath.segment(2);
 					if (runtimeId != null)
 						runtime = ServerCore.findRuntime(runtimeId);
 					if (containerPath.segmentCount() > 3)
 						id = containerPath.segment(3);
 				}
-				RuntimeClasspathContainer container = new RuntimeClasspathContainer(containerPath, crth, runtime, id);
+				RuntimeClasspathContainer container = new RuntimeClasspathContainer(containerPath, delegate, runtime, id);
 				JavaCore.setClasspathContainer(containerPath, new IJavaProject[] {project}, new IClasspathContainer[] {container}, null);
 			}
 		}
@@ -66,20 +63,17 @@
 	public void requestClasspathContainerUpdate(IPath containerPath, IJavaProject project, IClasspathContainer containerSuggestion) throws CoreException {
 		if (containerPath.segmentCount() > 0) {
 			if (containerPath.segment(0).equals(RuntimeClasspathContainer.SERVER_CONTAINER)) {
-				ClasspathRuntimeTargetHandler crth = null;
+				RuntimeClasspathProviderWrapper delegate = null;
 				IRuntime runtime = null;
 				String id = "";
 				if (containerPath.segmentCount() > 2) {
-					IRuntimeTargetHandler handler = ServerCore.findRuntimeTargetHandler(containerPath.segment(1));
-					if (handler != null) {
-						crth = (ClasspathRuntimeTargetHandler) handler.getAdapter(ClasspathRuntimeTargetHandler.class);
-					}
+					delegate = JavaServerPlugin.findRuntimeClasspathProvider(containerPath.segment(1));
 					String runtimeId = containerPath.segment(2);
 					if (runtimeId != null)
 						runtime = ServerCore.findRuntime(runtimeId);
 					if (containerPath.segmentCount() > 3)
 						id = containerPath.segment(3);
-					crth.requestClasspathContainerUpdate(runtime, id, containerSuggestion.getClasspathEntries());
+					delegate.requestClasspathContainerUpdate(runtime, id, containerSuggestion.getClasspathEntries());
 				}
 			}
 		}
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathProvider.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathProvider.java
new file mode 100644
index 0000000..bae44c6
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathProvider.java
@@ -0,0 +1,70 @@
+/******************************************************************************
+ * Copyright (c) 2005 BEA Systems, Inc.
+ * 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:
+ *    Konstantin Komissarchik - initial API and implementation
+ *    IBM Corporation - Support for all server types
+ ******************************************************************************/
+package org.eclipse.jst.server.core.internal;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jst.common.project.facet.core.IClasspathProvider;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntimeComponent;
+/**
+ * 
+ */
+public final class RuntimeClasspathProvider implements IClasspathProvider {
+	private static final IProjectFacet WEB_FACET = ProjectFacetsManager.getProjectFacet("jst.web");
+	private static final IProjectFacet EJB_FACET = ProjectFacetsManager.getProjectFacet("jst.ejb");
+	private static final IProjectFacet EAR_FACET = ProjectFacetsManager.getProjectFacet("jst.ear");
+	private static final IProjectFacet UTILITY_FACET = ProjectFacetsManager.getProjectFacet("jst.utility");
+	private static final IProjectFacet CONNECTOR_FACET = ProjectFacetsManager.getProjectFacet("jst.connector");
+	private static final IProjectFacet APP_CLIENT_FACET = ProjectFacetsManager.getProjectFacet("jst.appclient");
+
+	private final IRuntimeComponent rc;
+
+	public RuntimeClasspathProvider(final IRuntimeComponent rc) {
+		this.rc = rc;
+	}
+
+	public List getClasspathEntries(final IProjectFacetVersion fv) {
+		IProjectFacet pf = fv.getProjectFacet();
+		if (WEB_FACET.equals(pf) || EJB_FACET.equals(pf) || EAR_FACET.equals(pf) ||
+				UTILITY_FACET.equals(pf) || CONNECTOR_FACET.equals(pf) || APP_CLIENT_FACET.equals(pf)) {
+			String s = rc.getProperty(RuntimeBridge.CLASSPATH);
+			if (s == null || s.length() == 0)
+				return null;
+
+			IClasspathEntry cpentry = JavaCore.newContainerEntry(new Path(s));
+			return Collections.singletonList(cpentry);
+		}
+		
+		return null;
+	}
+
+	public static final class Factory implements IAdapterFactory {
+		private static final Class[] ADAPTER_TYPES = { IClasspathProvider.class };
+
+		public Object getAdapter(final Object adaptable, final Class adapterType) {
+			IRuntimeComponent rc = (IRuntimeComponent) adaptable;
+			return new RuntimeClasspathProvider(rc);
+		}
+
+		public Class[] getAdapterList() {
+			return ADAPTER_TYPES;
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeTargetHandler.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathProviderWrapper.java
similarity index 60%
rename from plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeTargetHandler.java
rename to plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathProviderWrapper.java
index 1b88c4c..04f7510 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeTargetHandler.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathProviderWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * 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
@@ -8,30 +8,29 @@
  * Contributors:
  *     IBM Corporation - Initial API and implementation
  *******************************************************************************/
-package org.eclipse.wst.server.core.internal;
+package org.eclipse.jst.server.core.internal;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.StringTokenizer;
 
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jst.server.core.RuntimeClasspathProviderDelegate;
 import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.model.RuntimeTargetHandlerDelegate;
 /**
  * 
  */
-public class RuntimeTargetHandler implements IRuntimeTargetHandler, IOrdered {
+public class RuntimeClasspathProviderWrapper {
 	private IConfigurationElement element;
-	private RuntimeTargetHandlerDelegate delegate;
+	private RuntimeClasspathProviderDelegate delegate;
 
 	/**
 	 * Create a new runtime target handler.
 	 * 
 	 * @param element a configuration element
 	 */
-	public RuntimeTargetHandler(IConfigurationElement element) {
+	public RuntimeClasspathProviderWrapper(IConfigurationElement element) {
 		super();
 		this.element = element;
 	}
@@ -111,13 +110,13 @@
 	}
 
 	/*
-	 * @see IPublishManager#getDelegate()
+	 * @see 
 	 */
-	public RuntimeTargetHandlerDelegate getDelegate() {
+	public RuntimeClasspathProviderDelegate getDelegate() {
 		if (delegate == null) {
 			try {
-				delegate = (RuntimeTargetHandlerDelegate) element.createExecutableExtension("class");
-				delegate.initialize(this);
+				delegate = (RuntimeClasspathProviderDelegate) element.createExecutableExtension("class");
+				delegate.initialize(getId());
 			} catch (Throwable t) {
 				Trace.trace(Trace.SEVERE, "Could not create delegate " + toString() + ": " + t.getMessage());
 			}
@@ -125,54 +124,48 @@
 		return delegate;
 	}
 
-	/**
-	 * Set the runtime target on the given project.
-	 * 
-	 * @param project the project to set the runtime on
-	 * @param runtime the target runtime
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting and cancellation are not desired
+	/*
+	 * @see RuntimeClasspathProviderDelegate#resolveClasspathContainerImpl(IRuntime, String)
 	 */
-	public void setRuntimeTarget(IProject project, IRuntime runtime, IProgressMonitor monitor) {
-		if (project == null || runtime == null)
-			return;
+	public IClasspathEntry[] resolveClasspathContainerImpl(IRuntime runtime, String id) {
+		if (runtime == null)
+			return null;
 		try {
-			getDelegate().setRuntimeTarget(project, runtime, monitor);
+			return getDelegate().resolveClasspathContainerImpl(runtime, id);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
 		}
-	}
-	
-	/**
-	 * Remove the runtime target from the given project. This method will undo
-	 * all changes made in setRuntimeTarget().
-	 * 
-	 * @param project the project to remove the runtime from
-	 * @param runtime the target runtime
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting and cancellation are not desired
-	 */
-	public void removeRuntimeTarget(IProject project, IRuntime runtime, IProgressMonitor monitor) {
-		if (project == null || runtime == null)
-			return;
-		try {
-			getDelegate().removeRuntimeTarget(project, runtime, monitor);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
-		}
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
-	 */
-	public Object getAdapter(Class adapter) {
-		RuntimeTargetHandlerDelegate delegate2 = getDelegate();
-		if (adapter.isInstance(delegate2))
-			return delegate;
 		return null;
 	}
 
+	/*
+	 * @see RuntimeClasspathProviderDelegate#getClasspathContainerLabel(IRuntime, String)
+	 */
+	public String getClasspathContainerLabel(IRuntime runtime, String id) {
+		if (runtime == null)
+			return "n/a";
+		try {
+			return getDelegate().getClasspathContainerLabel(runtime, id);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
+		}
+		return "n/a";
+	}
+
+	/*
+	 * @see RuntimeClasspathProviderDelegate#requestClasspathContainerUpdate(IRuntime, String, IClasspathEntry[])
+	 */
+	public void requestClasspathContainerUpdate(IRuntime runtime, String id, IClasspathEntry[] entries) {
+		if (runtime == null)
+			return;
+		try {
+			getDelegate().requestClasspathContainerUpdate(runtime, id, entries);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
+		}
+	}
+
 	public String toString() {
-		return "RuntimeTargetHandler[" + getId() + "]";
+		return "RuntimeClasspathProviderWrapper[" + getId() + "]";
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeFacetMapping.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeFacetMapping.java
new file mode 100644
index 0000000..ea829a8
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeFacetMapping.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * 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.jst.server.core.internal;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+/**
+ * 
+ */
+public class RuntimeFacetMapping {
+	private IConfigurationElement element;
+
+	/**
+	 * Create a new runtime facet mapping.
+	 * 
+	 * @param element a configuration element
+	 */
+	public RuntimeFacetMapping(IConfigurationElement element) {
+		super();
+		this.element = element;
+	}
+
+	/**
+	 * 
+	 * @return the id
+	 */
+	public String getId() {
+		return element.getAttribute("id");
+	}
+
+	/**
+	 * 
+	 * @return the id
+	 */
+	public String getRuntimeTypeId() {
+		return element.getAttribute("runtimeTypeId");
+	}
+
+	/**
+	 * 
+	 * @return the id
+	 */
+	public String getVersion() {
+		return element.getAttribute("version");
+	}
+
+	/**
+	 * 
+	 * @return the id
+	 */
+	public String getRuntimeComponent() {
+		return element.getAttribute("runtime-component");
+	}
+
+	public String toString() {
+		return "RuntimeFacetMapping[" + getId() + "]";
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/StandardJreClasspathProvider.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/StandardJreClasspathProvider.java
new file mode 100644
index 0000000..943fe1b
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/StandardJreClasspathProvider.java
@@ -0,0 +1,59 @@
+/******************************************************************************
+ * Copyright (c) 2005 BEA Systems, Inc.
+ * 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:
+ *    Konstantin Komissarchik - initial API and implementation
+ *    IBM Corporation - Cleanup
+ ******************************************************************************/
+package org.eclipse.jst.server.core.internal;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jst.common.project.facet.core.IClasspathProvider;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntimeComponent;
+/**
+ * 
+ */
+public final class StandardJreClasspathProvider implements IClasspathProvider {
+	private static final IProjectFacet JAVA_FACET = ProjectFacetsManager.getProjectFacet("jst.java");
+
+	private IRuntimeComponent rc;
+
+	public StandardJreClasspathProvider(final IRuntimeComponent rc) {
+		this.rc = rc;
+	}
+
+	public List getClasspathEntries(final IProjectFacetVersion fv) {
+		if (fv.getProjectFacet() == JAVA_FACET) {
+			IClasspathEntry cpentry = JavaCore.newContainerEntry(new Path(rc.getProperty(RuntimeBridge.CLASSPATH)));
+			return Collections.singletonList(cpentry);
+		}
+
+		return null;
+	}
+
+	public static final class Factory implements IAdapterFactory {
+		private static final Class[] ADAPTER_TYPES = { IClasspathProvider.class };
+
+		public Object getAdapter(final Object adaptable, final Class adapterType) {
+			IRuntimeComponent rc = (IRuntimeComponent) adaptable;
+			return new StandardJreClasspathProvider(rc);
+		}
+
+		public Class[] getAdapterList() {
+			return ADAPTER_TYPES;
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusLaunchable.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusLaunchable.java
new file mode 100644
index 0000000..de2f447
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusLaunchable.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2005 BEA Systems, Inc. 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:
+ *    Daniel R. Somerfield - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.server.core.internal.cactus;
+
+import java.net.URL;
+/**
+ *
+ */
+public class CactusLaunchable {
+	private String fProjectname;
+	private String fClassName;
+	private String fTestName;
+	private URL fCactusURL;
+
+	public CactusLaunchable(String projectName, String className, String testName, URL cactusURL) {
+		fProjectname = projectName;
+		fClassName = className;
+		fTestName = testName;
+		fCactusURL = cactusURL;
+	}
+
+	public String getTestClassName() {
+		return fClassName;
+	}
+
+	public String getTestName() {
+		return fTestName;
+	}
+
+	public String getProjectName() {
+		return fProjectname;
+	}
+
+	public URL getCactusURL() {
+		return fCactusURL;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusLaunchableAdapterDelegate.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusLaunchableAdapterDelegate.java
new file mode 100644
index 0000000..0b34149
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusLaunchableAdapterDelegate.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2005 BEA Systems, Inc. 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:
+ *    Daniel R. Somerfield - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.server.core.internal.cactus;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jst.server.core.internal.JavaServerPlugin;
+import org.eclipse.wst.server.core.IModuleArtifact;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.IURLProvider;
+import org.eclipse.wst.server.core.model.LaunchableAdapterDelegate;
+/**
+ *
+ */
+public class CactusLaunchableAdapterDelegate extends LaunchableAdapterDelegate {
+	public Object getLaunchable(IServer server, IModuleArtifact moduleArtifact) throws CoreException {
+		if (moduleArtifact instanceof WebTestableResource) {
+			WebTestableResource resource = (WebTestableResource) moduleArtifact;
+			URL url = ((IURLProvider) server.getAdapter(IURLProvider.class))
+					.getModuleRootURL(resource.getModule());
+			
+			String urlString = url.toString();
+			if (urlString.endsWith("/")) {
+				try {
+					url = new URL(urlString.substring(0, urlString.length() - 1));
+				} catch (MalformedURLException e) {
+					JavaServerPlugin.log(e);
+					return null;
+				}
+			}
+			return new CactusLaunchable(resource.getProjectName(),
+					resource.getClassName(), resource.getTestName(), url);
+		}
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusModuleArtifactAdapterDelegate.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusModuleArtifactAdapterDelegate.java
new file mode 100644
index 0000000..bbb513d
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusModuleArtifactAdapterDelegate.java
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2005 BEA Systems, Inc. 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:
+ *    Daniel R. Somerfield - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.server.core.internal.cactus;
+
+import java.util.Arrays;
+import java.util.Iterator;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeHierarchy;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IModuleArtifact;
+import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.wst.server.core.model.ModuleArtifactAdapterDelegate;
+/**
+ *
+ */
+public class CactusModuleArtifactAdapterDelegate extends ModuleArtifactAdapterDelegate {
+	private static final String SERVLET_TEST_CASE_TYPE = "org.apache.cactus.ServletTestCase";
+
+	public IModuleArtifact getModuleArtifact(Object obj) {
+		String methodName = "";
+		if (obj instanceof IMethod) {
+			IMethod method = (IMethod) obj;
+			methodName = method.getElementName();
+			obj = method.getCompilationUnit();
+		}
+		if (obj instanceof IAdaptable) {
+			IResource resource = (IResource) ((IAdaptable) obj).getAdapter(IResource.class);
+			String testClassName = getClassNameForType(resource,
+					SERVLET_TEST_CASE_TYPE);
+			String projectName = resource.getProject().getName();
+			if (testClassName != null) {
+				return new WebTestableResource(getModule(resource.getProject()),
+						false, projectName, testClassName, methodName);
+			}
+		}
+		return null;
+	}
+
+	public static String getClassNameForType(IResource resource, String superType) {
+		if (resource == null)
+			return null;
+		try {
+			IProject project = resource.getProject();
+			IPath path = resource.getFullPath();
+			if (!project.hasNature(JavaCore.NATURE_ID) || path == null)
+				return null;
+			
+			IJavaProject javaProject = (IJavaProject) project.getNature(JavaCore.NATURE_ID);
+			if (!javaProject.isOpen())
+				javaProject.open(new NullProgressMonitor());
+			
+			// output location may not be on classpath
+			IPath outputPath = javaProject.getOutputLocation();
+			if (outputPath != null
+					&& "class".equals(path.getFileExtension()) && outputPath.isPrefixOf(path)) { //$NON-NLS-1$
+				int count = outputPath.segmentCount();
+				path = path.removeFirstSegments(count);
+			}
+			
+			// remove initial part of classpath
+			IClasspathEntry[] classPathEntry = javaProject.getResolvedClasspath(true);
+			if (classPathEntry != null) {
+				int size = classPathEntry.length;
+				for (int i = 0; i < size; i++) {
+					IPath classPath = classPathEntry[i].getPath();
+					if (classPath.isPrefixOf(path)) {
+						int count = classPath.segmentCount();
+						path = path.removeFirstSegments(count);
+						i += size;
+					}
+				}
+			}
+
+			// get java element
+			IJavaElement javaElement = javaProject.findElement(path);
+			IType[] types = getTypes(javaElement);
+			if (types != null) {
+				int size2 = types.length;
+				for (int i = 0; i < size2; i++) {
+					if (hasSuperclass(types[i], superType))
+						return types[i].getFullyQualifiedName();
+				}
+			}
+			return null;
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	private static IType[] getTypes(IJavaElement element) {
+		try {
+			if (element.getElementType() != IJavaElement.COMPILATION_UNIT)
+				return null;
+			return ((ICompilationUnit) element).getAllTypes();
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	public static boolean hasSuperclass(IType type, String superClassName) {
+		try {
+			ITypeHierarchy hierarchy = type.newSupertypeHierarchy(null);
+			IType[] superClasses = hierarchy.getAllSuperclasses(type);
+			int size = superClasses.length;
+			for (int i = 0; i < size; i++) {
+				if (superClassName.equals(superClasses[i].getFullyQualifiedName())) //$NON-NLS-1$
+					return true;
+			}
+			return false;
+		} catch (Exception e) {
+			return false;
+		}
+	}
+
+	protected static IModule getModule(IProject project) {
+		IModule deployable = null;
+		Iterator iterator = Arrays.asList(ServerUtil.getModules("jst.web")).iterator();
+		while (iterator.hasNext()) {
+			Object next = iterator.next();
+			if (next instanceof IModule) {
+				deployable = (IModule) next;
+				if (deployable.getProject().equals(project))
+					return deployable;
+			}
+		}
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/ServletTestCasePropertyTester.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/ServletTestCasePropertyTester.java
new file mode 100644
index 0000000..e3b6c52
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/ServletTestCasePropertyTester.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2005 BEA Systems, Inc. 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:
+ *    Daniel R. Somerfield - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jst.server.core.internal.cactus;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jdt.core.IClassFile;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IPackageFragment;
+import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
+import org.eclipse.jst.server.core.internal.JavaServerPlugin;
+/**
+ * 
+ */
+public class ServletTestCasePropertyTester extends PropertyTester {
+	public static final String PROPERTY_IS_SERVLET_TEST_CASE = "isServletTestCase";
+	private static final String TEST_SUPERCLASS_NAME = "org.apache.cactus.ServletTestCase";
+
+	public boolean test(Object receiver, String method, Object[] args, Object expectedValue) {
+		IJavaElement javaElement = null;
+		if (receiver instanceof IAdaptable) {
+			javaElement = (IJavaElement) ((IAdaptable) receiver).getAdapter(IJavaElement.class);
+		}
+		if (javaElement != null) {
+			if (!javaElement.exists()) {
+				return false;
+			}
+		}
+		if (javaElement instanceof IJavaProject
+				|| javaElement instanceof IPackageFragmentRoot
+				|| javaElement instanceof IPackageFragment) {
+			return true;
+		}
+		if (javaElement != null) {
+			if (PROPERTY_IS_SERVLET_TEST_CASE.equals(method)) { //$NON-NLS-1$
+				return isServletTestCase(javaElement);
+			}
+		}
+		return false;
+	}
+
+	private boolean isServletTestCase(IJavaElement element) {
+		IType testType = null;
+
+		try {
+			if (element instanceof ICompilationUnit) {
+				ICompilationUnit cu = (ICompilationUnit) element;
+				testType = cu.getType(Signature.getQualifier(cu.getElementName()));
+			} else if (element instanceof IClassFile) {
+				testType = ((IClassFile) element).getType();
+			} else if (element instanceof IType) {
+				testType = (IType) element;
+			} else if (element instanceof IMember) {
+				testType = ((IMember) element).getDeclaringType();
+			}
+
+			if (testType != null && testType.exists() && isTestOrSuite(testType)) {
+				return true;
+			}
+		} catch (JavaModelException e) {
+			// TODO: what do we do here?
+			JavaServerPlugin.log(e);
+		}
+		return false;
+	}
+
+	/**
+	 * 
+	 * @param testType
+	 * @return true if the type is a test, false otherwise
+	 */
+	private boolean isTestOrSuite(IType testType) throws JavaModelException {
+		IType[] types = testType.newSupertypeHierarchy(null).getAllSuperclasses(testType);
+		for (int i = 0; i < types.length; i++) {
+			if (types[i].getFullyQualifiedName().equals(TEST_SUPERCLASS_NAME)) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/WebTestableResource.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/WebTestableResource.java
new file mode 100644
index 0000000..c760ce8
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/WebTestableResource.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2005 BEA Systems, Inc. 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:
+ *    Daniel R. Somerfield - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.jst.server.core.internal.cactus;
+
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IModuleArtifact;
+
+public class WebTestableResource implements IModuleArtifact {
+	private IModule fModule;
+	private boolean fServletIsConfigured;
+	private String fClassName;
+	private String fTestName;
+	private String fProjectName;
+
+	public WebTestableResource(IModule module, boolean servletIsConfigured,
+			String projectName, String className, String testName) {
+		fModule = module;
+		fServletIsConfigured = servletIsConfigured;
+		fClassName = className;
+		fTestName = testName;
+		fProjectName = projectName;
+	}
+
+	public String getProjectName() {
+		return fProjectName;
+	}
+
+	public boolean isServletConfigured() {
+		return fServletIsConfigured;
+	}
+
+	public IModule getModule() {
+		return fModule;
+	}
+
+	public String getClassName() {
+		return fClassName;
+	}
+
+	public String getTestName() {
+		return fTestName;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/package.html b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/package.html
new file mode 100644
index 0000000..0dfa3c3
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/package.html
@@ -0,0 +1,66 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../../../../..//apistyles.css" type="text/css">
+<title>WTP API overview</title>
+</head>
+<body>
+<table width="500">
+<tr>
+<td>
+<p>Support for Java and J2EE server types.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>The ClasspathRuntimeTargetHandler class provides a common subclass
+for runtime target handlers that need to modify a project's classpath
+when a project is targetted to a particular runtime.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>IGenericRuntime and its working copy provide type-specific access
+to the generic runtime type. When using a generic runtime, clients can
+access the type specific information by adapting to these types using
+<pre>IGenericRuntime gr = (IGenericRuntime) runtime.getAdapter(IGenericRuntime.class)</pre>.
+GenericRuntimeUtil contains some utility methods for handling the
+generic runtime type.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>IEnterpriseApplication, IEJBModule, IWebModule, IApplicationClientModule,
+and IConnectorModule are J2EE module interfaces meant to be implemented
+by module delegates that provide J2EE module support.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>ILooseArchive and ILooseArchiveSupport are module interfaces for modules
+that take advantage of loose archive support - allowing JARs contained within
+the module to be available in a separate Java project instead of directly
+within the module.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>The remainder of the classes in this package are module artifact and
+launchable types to provide access to J2EE resource types for the server tool
+framework.</p>
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/plugins/org.eclipse.jst.server.generic.core/.classpath b/plugins/org.eclipse.jst.server.generic.core/.classpath
deleted file mode 100644
index 065ac06..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/plugins/org.eclipse.jst.server.generic.core/.cvsignore b/plugins/org.eclipse.jst.server.generic.core/.cvsignore
deleted file mode 100644
index 07d3079..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-bin
-build.xml
-genericserver.jar
-org.eclipse.jst.server.generic.core_1.0.0.jar
-temp.folder
-*.settings
diff --git a/plugins/org.eclipse.jst.server.generic.core/.project b/plugins/org.eclipse.jst.server.generic.core/.project
deleted file mode 100644
index fe7ee06..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.server.generic.core</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.jst.server.generic.core/build.properties b/plugins/org.eclipse.jst.server.generic.core/build.properties
deleted file mode 100644
index fdaa4b2..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/build.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-source.genericserver.jar = src/
-output.genericserver.jar = bin/
-bin.includes = plugin.xml,\
-               genericserver.jar,\
-               servers/,\
-               plugin.properties,\
-               xsd/ServerTypeDefinitionSchema.xsd
-src.includes = servers/,\
-               src/,\
-               plugin.xml,\
-               plugin.properties,\
-               xsd/,\
-               schema/
diff --git a/plugins/org.eclipse.jst.server.generic.core/plugin.properties b/plugins/org.eclipse.jst.server.generic.core/plugin.properties
deleted file mode 100644
index 0c5f385..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/plugin.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-pluginName= Generic Server Plugin
-providerName=Eclipse.org
-pluginDescription=Provides generic server tooling with easy to develop meta data configuration files
-
-launchConfigurationTypeName=Generic server launch configuration type
-# ====================================================================
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.generic.core/plugin.xml b/plugins/org.eclipse.jst.server.generic.core/plugin.xml
deleted file mode 100644
index 72f89f3..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/plugin.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.jst.server.generic.core"
-   name="%pluginName"
-   version="1.0.0"
-   provider-name="%providerName"
-   class="org.eclipse.jst.server.generic.core.internal.CorePlugin"
-   description="%pluginDescription">
-
-   <runtime>
-      <library name="genericserver.jar">
-         <export name="*"/>
-      </library>
-   </runtime>
-
-   <requires>
-      <import plugin="org.eclipse.ui"/>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.core.resources"/>
-      <import plugin="org.eclipse.debug.core"/>
-      <import plugin="org.eclipse.jdt.core"/>
-      <import plugin="org.eclipse.jdt.launching"/>
-      <import plugin="org.eclipse.wst.server.core"/>
-      <import plugin="org.eclipse.jst.server.core"/>
-      <import plugin="org.eclipse.debug.ui"/>
-      <import plugin="org.eclipse.ant.core"/>
-      <import plugin="org.eclipse.ant.ui"/>
-      <import plugin="org.eclipse.emf.common" export="true"/>
-      <import plugin="org.eclipse.emf.ecore"/>
-      <import plugin="org.eclipse.emf.ecore.xmi"/>
-   </requires>
-   
- <extension-point id="serverdefinition" name="Server definition" schema="schema/serverdefinition.exsd"/>
- <extension-point id="genericpublisher" name="Generic Publisher" schema="schema/genericpublisher.exsd"/>
-	
- <extension point="org.eclipse.wst.server.core.runtimeTargetHandlers">
-     <runtimeTargetHandler
-        id="org.eclipse.jst.server.generic.runtimeTarget"
-        runtimeTypeIds="org.eclipse.jst.server.generic.runtime.*"
-        class="org.eclipse.jst.server.generic.core.internal.GenericServerRuntimeTargetHandler"/>
-	</extension>
-
-   <extension point="org.eclipse.debug.core.launchConfigurationTypes">
-     <launchConfigurationType
-        id="org.eclipse.jst.server.generic.core.launchConfigurationType"
-        name="%launchConfigurationTypeName"
-        delegate="org.eclipse.jst.server.generic.core.internal.GenericServerLaunchConfigurationDelegate"
-        modes="run, debug"
-        sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"
-        sourcePathComputerId="org.eclipse.jst.server.generic.core.sourcePathComputer"/>
-  </extension>
-
-   <extension point="org.eclipse.debug.core.sourcePathComputers">
-     <sourcePathComputer
-        id="org.eclipse.jst.server.generic.core.sourcePathComputer"
-        class="org.eclipse.jst.server.generic.core.internal.GenericServerSourcePathComputerDelegate"/>
-   </extension>
- 
-   <extension point="org.eclipse.wst.server.core.launchableAdapters">
-      <launchableAdapter
-         class="org.eclipse.jst.server.generic.core.internal.GenericServerLaunchableAdapterDelegate"
-         id="org.eclipse.jst.server.generic.web"/>
-   </extension>
-   <extension point="org.eclipse.jst.server.generic.core.genericpublisher">
-      <genericpublisher
-            class="org.eclipse.jst.server.generic.core.internal.AntPublisher"
-            id="org.eclipse.jst.server.generic.antpublisher"/>
-   </extension>
-</plugin>
diff --git a/plugins/org.eclipse.jst.server.generic.core/schema/genericpublisher.exsd b/plugins/org.eclipse.jst.server.generic.core/schema/genericpublisher.exsd
deleted file mode 100644
index 3d25596..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/schema/genericpublisher.exsd
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.jst.server.generic.core">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.jst.server.generic.core" id="genericpublisher" name="Generic Publisher"/>
-      </appInfo>
-      <documentation>
-         [Enter description of this extension point.]
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="genericpublisher"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="genericpublisher">
-      <complexType>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="class" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         [Enter the first release in which this extension point appears.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/plugins/org.eclipse.jst.server.generic.core/schema/serverdefinition.exsd b/plugins/org.eclipse.jst.server.generic.core/schema/serverdefinition.exsd
deleted file mode 100644
index fe5e9ad..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/schema/serverdefinition.exsd
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.jst.server.generic.core">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.jst.server.generic.core" id="serverdefinition" name="Server Definition"/>
-      </appInfo>
-      <documentation>
-         This extension point defines a new generic server plugin
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="serverdefinition" minOccurs="1" maxOccurs="unbounded"/>
-         </sequence>
-         <attribute name="point" type="string" use="required">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="id" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="name" type="string">
-            <annotation>
-               <documentation>
-                  
-               </documentation>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="serverdefinition">
-      <complexType>
-         <sequence>
-         </sequence>
-         <attribute name="id" type="string" use="required">
-            <annotation>
-               <documentation>
-                  server id
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="definitionfile" type="string" use="required">
-            <annotation>
-               <documentation>
-                  location of the generic server definition file
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="resource"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         1.0
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         [Enter extension point usage example here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         [Enter API information here.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         [Enter information about supplied implementation of this extension point.]
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-</schema>
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/AntPublisher.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/AntPublisher.java
deleted file mode 100644
index caeaf01..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/AntPublisher.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Naci M. Dai - initial API and implementation
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.core.internal;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import org.eclipse.ant.core.AntRunner;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.server.generic.internal.core.util.FileUtil;
-import org.eclipse.jst.server.generic.servertype.definition.Module;
-import org.eclipse.jst.server.generic.servertype.definition.PublisherData;
-import org.eclipse.jst.server.core.IEJBModule;
-import org.eclipse.jst.server.core.IWebModule;
-import org.eclipse.wst.server.core.IModuleArtifact;
-import org.osgi.framework.Bundle;
-/**
- * Ant based publisher.
- * All the properties defined in the server definition file are
- * passed into the ANT build file as properties.
- * In addition to the properties defined in the server definition
- * <I>module.dir</I>, <I>module.name,</I> and <I>server.publish.dir</I> are computed and passed to the 
- * definition file.
- * <ul>
- * <li>module.dir: includes the root of the module project file</li>
- * <li>module.name: the name of the module</li>
- * <li>server.publish.dir: the directory to put the deployment units</li>
- * </ul>
- *
- * @author Gorkem Ercan
- */
-
-public class AntPublisher extends GenericPublisher{
-
-    private static final String MODULE_PUBLISH_TARGET_PREFIX = "target.publish.";
-    private static final String MODULE_UNPUBLISH_TARGET_PREFIX = "target.unpublish.";
-    public static final String PUBLISHER_ID="org.eclipse.jst.server.generic.antpublisher"; 
-    private static final String DATA_NAME_BUILD_FILE="build.file";
-
-    /* (non-Javadoc)
-	 * @see org.eclipse.wtp.server.core.model.IPublisher#publish(org.eclipse.wtp.server.core.resources.IModuleResource[], org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public IStatus[] publish(IModuleArtifact[] resource,
-			IProgressMonitor monitor){
-        
-        File file = computeBuildFile();
-        try{
-            runAnt(file.toString(),getPublishTargetsForModule(),getPublishProperties(),monitor);
-        }
-        catch(CoreException e){
-            IStatus s = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0,"Publish failed using Ant publisher",e);
-            CorePlugin.getDefault().getLog().log(s);
-            return new IStatus[] {s};
-        }
-		return null;
-	}
-
-
-    /**
-     * @return
-     */
-    private File computeBuildFile() {
-        Bundle bundle = Platform.getBundle(getServerRuntime().getConfigurationElementNamespace());
-        File file = FileUtil.resolveFileFrom(bundle,getBuildFile());
-        return file;
-    }
-    
-   
-    /**
-     * @return
-     */
-    private String[] getPublishTargetsForModule() {
-        String dataname = MODULE_PUBLISH_TARGET_PREFIX+getModuleTypeId();
-        return doGetTargets(dataname);
-    }
-
-
-    /**
-     * @param dataname
-     * @return
-     */
-    private String[] doGetTargets(String dataname) {
-        ArrayList list = new ArrayList();
-        Iterator iterator = getServerRuntime().getPublisher(PUBLISHER_ID).getPublisherdata().iterator();
-        while(iterator.hasNext()){
-            PublisherData data = (PublisherData)iterator.next();
-            if(dataname.equals(data.getDataname())) {
-                list.add(data.getDatavalue());
-            }   
-        }
-        return (String[])list.toArray(new String[list.size()]);
-    }
-
-    /**
-     * @return
-     */
-    private String[] getUnpublishTargetsForModule() {
-        
-        return doGetTargets(MODULE_UNPUBLISH_TARGET_PREFIX+getModuleTypeId());
-    }
-    
-    
-    private String getModuleTypeId()
-    {
-        return getModule()[0].getModuleType().getId();
-    }
-    
-	private String getBuildFile()
-    {
-        Iterator iterator = getServerRuntime().getPublisher(PUBLISHER_ID).getPublisherdata().iterator();
-        while(iterator.hasNext())
-        {
-            PublisherData data = (PublisherData)iterator.next();
-            if(DATA_NAME_BUILD_FILE.equals(data.getDataname()))
-                return getServerRuntime().getResolver().resolveProperties(data.getDatavalue());
-        }
-        return null;
-    }
-	private Map getPublishProperties()
-	{
-        Map props = new HashMap();
-        
-        // pass all properties to build file.
-        Map properties = getServerRuntime().getResolver().getPropertyValues();
-        Iterator propertyIterator = properties.keySet().iterator();
-        while(propertyIterator.hasNext())
-        {
-            String property = (String)propertyIterator.next();
-            props.put(property,properties.get(property));
-        }
-        
-        Module module =  getServerRuntime().getModule(getModuleTypeId());
-		String modDir = module.getPublishDir();
-		modDir = getServerRuntime().getResolver().resolveProperties(modDir);
-
-		IWebModule webModule = (IWebModule)getModule()[0].getAdapter(IWebModule.class);
-        IEJBModule ejbModule = (IEJBModule)getModule()[0].getAdapter(IEJBModule.class);
-		String moduleName="unknownmodule";
-        String moduleDir="";
-        if(webModule!=null){    
-            moduleName = this.guessModuleName(webModule);
-            moduleDir = webModule.getLocation().toString();
-        }
-        if(ejbModule!=null){  
-            moduleName = getModule()[0].getName();
-            moduleDir= ejbModule.getLocation().toString();
-        }
-		props.put("module.name",moduleName);
-		props.put("module.dir",moduleDir);
-		props.put("server.publish.dir",modDir);
-		return props;
-	}
-	/**
-	 * @param module2
-	 * @param webModule
-	 * @return
-	 */
-	private String guessModuleName(IWebModule webModule) {
-		String moduleName = getModule()[0].getName(); 
-		//Default to project name but not a good guess
-		//may have blanks etc.
-		
-		// A better choice is to use the context root
-		// For wars most appservers use the module name
-		// as the context root
-		String contextRoot = webModule.getContextRoot();
-		if(contextRoot.charAt(0) == '/')
-			moduleName = contextRoot.substring(1);
-		return moduleName;
-	}
-	private void runAnt(String buildFile,String[] targets,Map properties ,IProgressMonitor monitor)throws CoreException
-	{
-		AntRunner runner = new AntRunner();
-		runner.setBuildFileLocation(buildFile);
-		runner.setExecutionTargets(targets);
-		runner.addUserProperties(properties);
-		runner.run(monitor);
-	}
-
-    /* (non-Javadoc)
-     * @see org.eclipse.jst.server.generic.internal.core.GenericPublisher#unpublish(org.eclipse.wst.server.core.IModule, org.eclipse.core.runtime.IProgressMonitor)
-     */
-    public IStatus[] unpublish(IProgressMonitor monitor) {
-        File file = computeBuildFile();
-        try {
-            runAnt(file.toString(),getUnpublishTargetsForModule(),getPublishProperties(),monitor);
-        } catch (CoreException e) {
-            IStatus s = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0,"Remove module failed using Ant publisher",e);
-            return new IStatus[] {s};
- 
-        }
-        return null;
-    }
-
-
-
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/CorePlugin.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/CorePlugin.java
deleted file mode 100644
index 1750ec5..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/CorePlugin.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.core.internal;
-
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.ui.plugin.*;
-import org.osgi.framework.BundleContext;
-import java.io.IOException;
-import java.net.URL;
-import java.util.*;
-
-/**
- * The main plugin class to be used in the desktop.
- * 
- * @author Gorkem Ercan
- */
-public class CorePlugin extends AbstractUIPlugin {
-
-	public static final String PLUGIN_ID = "org.eclipse.jst.server.generic.core";
-
-	//The shared instance.
-	private static CorePlugin plugin;
-	//Resource bundle.
-	private ResourceBundle resourceBundle;
-	private ServerTypeDefinitionManager fServerTypeDefinitionManager;
-	/**
-	 * The constructor.
-	 */
-	public CorePlugin() {
-		super();
-		plugin = this;
-		try {
-			resourceBundle = ResourceBundle.getBundle("org.eclipse.jst.server.generic.core.CorePluginResources");
-		} catch (MissingResourceException x) {
-			resourceBundle = null;
-		}
-	}
-
-	/**
-	 * This method is called upon plug-in activation
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	/**
-	 * This method is called when the plug-in is stopped
-	 */
-	public void stop(BundleContext context) throws Exception {
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static CorePlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns the string from the plugin's resource bundle,
-	 * or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle bundle = CorePlugin.getDefault().getResourceBundle();
-		try {
-			return (bundle != null) ? bundle.getString(key) : key;
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		return resourceBundle;
-	}
-	/**
-	 * 
-	 * @return
-	 */
-	public ServerTypeDefinitionManager getServerTypeDefinitionManager()
-	{
-		if(fServerTypeDefinitionManager==null)
-			fServerTypeDefinitionManager = new ServerTypeDefinitionManager(getInstallUrl());
-		return fServerTypeDefinitionManager;
-	}
-	
-	private URL getInstallUrl()
-	{
-		try {
-			return Platform.resolve(this.getBundle().getEntry("/"));
-		} catch (IOException e) {
-			return null;
-		}	
-	}
-	
-	
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericPublisher.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericPublisher.java
deleted file mode 100644
index 24f3282..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericPublisher.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.eclipse.jst.server.generic.core.internal;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IModuleArtifact;
-
-/**
- * The abstract publisher. This is intended to be subclassed by
- * clients implementing the genericpublisher extension point.
- *
- * @author Gorkem Ercan
- */
-public abstract class GenericPublisher 
-{
-    
-    private IModule[] fModule;
-    private ServerRuntime fServerRuntime;
-    
-    protected void initialize(IModule[] module, ServerRuntime serverDefinition)
-    {
-        fModule = module;
-        fServerRuntime = serverDefinition;
-    }
-   /**
-    * Called by the generic server implementation when a module is 
-    * removed form the server instance. 
-    * Subclasses may extend this method to perform their own module removal
-    * 
-    * @param module
-    * @param monitor
-    * @return
-    */ 
-   public abstract IStatus[] unpublish(IProgressMonitor monitor);
-    
-    /**
-     * Called by the generic server implementation when a publish module 
-     * event occurs. 
-     * Subclasses may extend this method to perform their own publishing
-     * 
-     * @param resource
-     * @param monitor
-     * @return
-     */
-    public abstract IStatus[] publish(IModuleArtifact[] resource,
-            IProgressMonitor monitor);
-   
-    public IModule[] getModule() {
-        return fModule;
-    }
-
-    public ServerRuntime getServerRuntime() {
-        return fServerRuntime;
-    }
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServer.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServer.java
deleted file mode 100644
index 940e367..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServer.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.core.internal;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.server.generic.servertype.definition.Module;
-import org.eclipse.jst.server.generic.servertype.definition.Port;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.jst.server.core.IEJBModule;
-import org.eclipse.jst.server.core.IEnterpriseApplication;
-import org.eclipse.jst.server.core.IWebModule;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.ServerUtil;
-import org.eclipse.wst.server.core.internal.ServerMonitorManager;
-import org.eclipse.wst.server.core.model.IURLProvider;
-import org.eclipse.wst.server.core.model.RuntimeDelegate;
-import org.eclipse.wst.server.core.model.ServerDelegate;
-import org.eclipse.wst.server.core.ServerPort;
-
-/**
- * Generic XML based server implementation.
- * 
- * @author Gorkem Ercan
- */
-public class GenericServer extends ServerDelegate implements IURLProvider {
-
-    private static final String ATTR_GENERIC_SERVER_MODULES = "Generic_Server_Modules_List";
-    private ServerRuntime fServerDefinition;
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.server.core.model.IServerDelegate#publishStart(org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public IStatus publishStart(IProgressMonitor monitor) {
-	    if(getModules().length<1)
-	        return new Status(IStatus.CANCEL,CorePlugin.PLUGIN_ID,0,GenericServerCoreMessages.getString("cancelNoPublish"),null);
-		return new Status(IStatus.OK, CorePlugin.PLUGIN_ID, 0, "PublishingStarted", null);
-	}
-
-
-	public IStatus canModifyModules(IModule[] add, IModule[] remove) {
-		Iterator iterator = getServerDefinition().getModule().iterator();
-       
-        while(iterator.hasNext())   {
-	        Module module = (Module)iterator.next();
-	        for (int i = 0; i < add.length; i++) {
-                if(add[i].getModuleType().getId().equals(module.getType()))
-                    return new Status(IStatus.OK, CorePlugin.PLUGIN_ID, 0, "CanModifyModules", null);
-            }
-	    }
-		return new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, GenericServerCoreMessages.getString("moduleNotCompatible"), null);
-	}
-	
-	private String createModuleId(IModule module)
-	{
-	    return module.getProject().getName()+":"+module.getId();
-	}
-    /* (non-Javadoc)
-     * @see org.eclipse.wst.server.core.model.ServerDelegate#modifyModules(org.eclipse.wst.server.core.IModule[], org.eclipse.wst.server.core.IModule[], org.eclipse.core.runtime.IProgressMonitor)
-     */
-    public void modifyModules(IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException {
-      
-        List modules = this.getAttribute(ATTR_GENERIC_SERVER_MODULES,(List)null);
-        
-        if(add!=null&& add.length>0)
-        {
-            if(modules==null) {
-               modules=new ArrayList(add.length);
-            }
-            for (int i = 0; i < add.length; i++) {
-               String modlId = createModuleId(add[i]);
-               if(modules.contains(modlId)==false)
-                    modules.add(modlId);
-            }
-        }
-        if(remove!=null && remove.length>0 && modules!=null)
-        {
-            for (int i = 0; i < remove.length; i++) {
-                modules.remove(createModuleId(remove[i]));
-             }
-        }
-        if(modules!=null)    
-            setAttribute(ATTR_GENERIC_SERVER_MODULES,modules);
-        
-    }
-
-    
-    
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.server.core.model.IServerDelegate#getModules()
-	 */
-	public org.eclipse.wst.server.core.IModule[] getModules() {
-		List modules = getAttribute(ATTR_GENERIC_SERVER_MODULES,(List)null);
-		List imodules = new ArrayList();
-		Iterator iterator = modules.iterator();
-		while(iterator.hasNext())
-		{
-		    String moduleId = (String)iterator.next();
-		    int sep = moduleId.indexOf(":");
-		    IProject project =ResourcesPlugin.getWorkspace().getRoot().getProject(moduleId.substring(0,sep));
-		    IModule[] ms = ServerUtil.getModules(project);
-		    for (int i = 0; i < ms.length; i++) {
-                if(ms[i].getId().equals(moduleId.substring(sep+1)))
-                	imodules.add(ms[i]);
-            }
-	
-		}
-		if(modules!= null)
-		    return (IModule[])imodules.toArray(new IModule[imodules.size()]);
-		return new IModule[0];
-	}
-
-
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.server.core.model.IServerDelegate#getChildModules(org.eclipse.wst.server.core.model.IModule[])
-	 */
-	public IModule[] getChildModules(IModule[] module) {
-		// TODO Auto-generated method stub
-		return new IModule[0];
-	}
-
-	/**
-	 * @return
-	 */
-	private Map getServerInstanceProperties() {
-		Map runtimeProperties =getRuntimeDelegate().getAttribute(
-				GenericServerRuntime.SERVER_INSTANCE_PROPERTIES, new HashMap());
-		Map serverProperties = getAttribute(GenericServerRuntime.SERVER_INSTANCE_PROPERTIES,new HashMap(1));
-		Map instanceProperties = new HashMap(runtimeProperties.size()+serverProperties.size());
-		instanceProperties.putAll(runtimeProperties);
-		instanceProperties.putAll(serverProperties);
-		return instanceProperties;
-	}
-	
- 	
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.wst.server.core.model.IMonitorableServer#getServerPorts()
-	 */
-	public org.eclipse.wst.server.core.ServerPort[] getServerPorts() {
-		List ports = new ArrayList();
-		Iterator pIter = this.getServerDefinition().getPort().iterator();
-		while (pIter.hasNext()) {
-			Port element = (Port) pIter.next();
-			int port = Integer.parseInt(getServerDefinition().getResolver().resolveProperties(element.getNo()));
-			ports.add(new ServerPort("server", element.getName(), port, element.getProtocol()));		
-		}
-	
-		return (org.eclipse.wst.server.core.ServerPort[])ports.toArray(new org.eclipse.wst.server.core.ServerPort[ports.size()]);
-	}
-
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wtp.server.core.model.IURLProvider#getModuleRootURL(org.eclipse.wtp.server.core.model.IModule)
-	 */
-	public URL getModuleRootURL(IModule module) {
-
-		try {			
-            if (module == null || module.getAdapter(IWebModule.class)==null )
-				return null;
-
-			String url = "http://localhost";
-			int port = 0;
-			
-			port = getHttpPort();
-			port =ServerMonitorManager.getInstance().getMonitoredPort(getServer(), port, "web");
-			if (port != 80)
-				url += ":" + port;
-
-			url += "/"+module.getName();
-
-			if (!url.endsWith("/"))
-				url += "/";
-
-			return new URL(url);
-		} catch (Exception e) {
-			Trace.trace("Could not get root URL", e);
-			return null;
-		}
-
-	}
-
-	/**
-	 * @return
-	 */
-	private int getHttpPort() {
-		int port=-1;
-		Iterator pIter = this.getServerDefinition().getPort().iterator();
-		while (pIter.hasNext()) {
-			Port aPort = (Port) pIter.next();
-			if(port== -1)
-				port = Integer.parseInt(getServerDefinition().getResolver().resolveProperties(aPort.getNo()));
-			else if( "http".equals(aPort.getProtocol() ) )
-				port = Integer.parseInt(aPort.getNo());	
-		}
-		if( port == -1)
-			port = 8080;
-		return port;
-	}
-
-    public ServerRuntime getServerDefinition() {
-    	if (fServerDefinition == null)
-    		fServerDefinition = CorePlugin.getDefault()
-    				.getServerTypeDefinitionManager()
-    				.getServerRuntimeDefinition(getRuntimeDelegate().getAttribute(
-    								GenericServerRuntime.SERVER_DEFINITION_ID,
-    								""), getServerInstanceProperties());
-    	return fServerDefinition;
-    }
-
-    private RuntimeDelegate getRuntimeDelegate()
-    {
-       return (RuntimeDelegate)getServer().getRuntime().getAdapter(RuntimeDelegate.class);
-    }
-
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.wst.server.core.model.ServerDelegate#getRootModules(org.eclipse.wst.server.core.IModule)
-     */
-    public IModule[] getRootModules(IModule module) throws CoreException {
-
-        String type = module.getModuleType().getId();
-
-        if (type.equals("j2ee.ejb")) {
-            IEJBModule ejbModule = (IEJBModule) module.getAdapter(IEJBModule.class);
-            if (ejbModule != null) {
-                IStatus status = canModifyModules(new IModule[] { module },
-                        null);
-                if (status == null || !status.isOK())
-                    throw new CoreException(status);
-                return new IModule[] { module };
-            }
-        }
-
-        if (type.equals("j2ee.ear")) {
-
-            IEnterpriseApplication enterpriseApplication = (IEnterpriseApplication) module.getAdapter(IEnterpriseApplication.class);
-            if (enterpriseApplication != null) {
-                IStatus status = canModifyModules(new IModule[] { module },
-                        null);
-                if (status == null || !status.isOK())
-                    throw new CoreException(status);
-                return new IModule[] { module };
-            }
-        }
-        
-        if (type.equals("j2ee.web")) {
-
-            IWebModule webModule = (IWebModule) module.getAdapter(IWebModule.class);
-            if (webModule != null) {
-                IStatus status = canModifyModules(new IModule[] { module },
-                        null);
-                if (status == null || !status.isOK())
-                    throw new CoreException(status);
-                return new IModule[] { module };
-            }
-        }
-
-        return null;
-    }
-
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java
deleted file mode 100644
index e97ed5b..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java
+++ /dev/null
@@ -1,446 +0,0 @@
-package org.eclipse.jst.server.generic.core.internal;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.core.DebugEvent;
-import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.IDebugEventSetListener;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.ILaunchConfigurationType;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.debug.core.model.IProcess;
-import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.generic.servertype.definition.ArchiveType;
-import org.eclipse.jst.server.generic.servertype.definition.Classpath;
-import org.eclipse.jst.server.generic.servertype.definition.Module;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.ServerPort;
-import org.eclipse.wst.server.core.model.RuntimeDelegate;
-import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
-import org.eclipse.wst.server.core.model.ServerDelegate;
-import org.eclipse.wst.server.core.util.PingThread;
-import org.eclipse.wst.server.core.util.SocketUtil;
-
-/**
- * Server behaviour delegate implementation for generic server.
- *
- * @author Gorkem Ercan
- */
-public class GenericServerBehaviour extends ServerBehaviourDelegate {
-	
-	private static final String ATTR_STOP = "stop-server";
-    
-	// the thread used to ping the server to check for startup
-	protected transient PingThread ping = null;
-    protected transient IDebugEventSetListener processListener;
-    protected transient IProcess process;
-    
-    /* (non-Javadoc)
-     * @see org.eclipse.wst.server.core.model.ServerBehaviourDelegate#publishServer(org.eclipse.core.runtime.IProgressMonitor)
-     */
-    public void publishServer(int kind, IProgressMonitor monitor) throws CoreException {
-        
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.wst.server.core.model.ServerBehaviourDelegate#publishModule(org.eclipse.wst.server.core.IModule[], org.eclipse.wst.server.core.IModule, org.eclipse.core.runtime.IProgressMonitor)
-     */
-    public void publishModule(int kind, int deltaKind, IModule[] module,
-            IProgressMonitor monitor) throws CoreException {
- 
-        if(REMOVED == deltaKind){
-            removeFromServer(module,monitor);
-        }
-        else{
-            Module m = getServerDefinition().getModule(module[0].getModuleType().getId());
-            String publisherId = m.getPublisherReference();
-            GenericPublisher publisher = PublishManager.getPublisher(publisherId);
-            if(publisher==null){
-                IStatus status = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0,"Unable to create publisher",null);
-                throw new CoreException(status);
-            }
-            publisher.initialize(module,getServerDefinition());
-            IStatus[] status= publisher.publish(null,monitor);
-            if(status==null)
-                setModulePublishState(module, IServer.PUBLISH_STATE_NONE);
-        }
-    }
-
-    private void removeFromServer(IModule[] module, IProgressMonitor monitor) throws CoreException
-    {
-        Module m = getServerDefinition().getModule(module[0].getModuleType().getId());
-        String publisherId = m.getPublisherReference();
-        GenericPublisher publisher = PublishManager.getPublisher(publisherId);  
-        if(publisher==null){
-            IStatus status = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0,"Unable to create publisher to remove module",null);
-            throw new CoreException(status);
-        }
-        publisher.initialize(module,getServerDefinition());
-        publisher.unpublish(monitor);
-    }
-    
-    
-    /* (non-Javadoc)
-     * @see org.eclipse.wst.server.core.model.ServerBehaviourDelegate#stop(boolean)
-     */
-    public void stop(boolean force) {
-		if (force) {
-			terminate();
-			return;
-		}
-
-		int state = getServer().getServerState();
-		if (state == IServer.STATE_STOPPED)
-			return;
-		else if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING) {
-			terminate();
-			return;
-		}
-
-		try {
-			Trace.trace(Trace.FINEST, "Stopping Server");
-			if (state != IServer.STATE_STOPPED)
-				setServerState(IServer.STATE_STOPPING);
-			ILaunchManager mgr = DebugPlugin.getDefault().getLaunchManager();
-
-			ILaunchConfigurationType type =
-				mgr.getLaunchConfigurationType(
-					IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
-
-			String launchName = "GenericServerStopper";
-			String uniqueLaunchName =
-				mgr.generateUniqueLaunchConfigurationNameFrom(launchName);
-			ILaunchConfiguration conf = null;
-
-			ILaunchConfiguration[] lch = mgr.getLaunchConfigurations(type);
-			for (int i = 0; i < lch.length; i++) {
-				if (launchName.equals(lch[i].getName())) {
-					conf = lch[i];
-					break;
-				}
-			}
-
-			ILaunchConfigurationWorkingCopy wc = null;
-			if (conf != null) {
-				wc = conf.getWorkingCopy();
-			} else {
-				wc = type.newInstance(null, uniqueLaunchName);
-			}
-			//To stop from appearing in history lists
-			wc.setAttribute(IDebugUIConstants.ATTR_PRIVATE, true);			
-	
-			wc.setAttribute(
-					IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME,
-					getServerDefinition().getResolver().resolveProperties(this.getServerDefinition().getStop().getMainClass()));
-
-			GenericServerRuntime runtime = (GenericServerRuntime) getRuntimeDelegate();
-
-			IVMInstall vmInstall = runtime.getVMInstall();
-			wc.setAttribute(
-					IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE, runtime
-							.getVMInstallTypeId());
-			wc.setAttribute(
-					IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_NAME,
-					vmInstall.getName());
-
-			setupLaunchClasspath(wc, vmInstall, getStopClasspath());
-
-			wc.setAttribute(
-					IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY,
-					getServerDefinition().getResolver().resolveProperties(getServerDefinition().getStop().getWorkingDirectory()));
-			wc.setAttribute(
-					IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,
-					getServerDefinition().getResolver().resolveProperties(getServerDefinition().getStop().getProgramArguments()));
-			wc.setAttribute(
-					IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,
-					getServerDefinition().getResolver().resolveProperties(getServerDefinition().getStop().getVmParameters()));				
-			wc.setAttribute(ATTR_STOP, "true");
-			wc.launch(ILaunchManager.RUN_MODE, new NullProgressMonitor());
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error stopping Server", e);
-		}
-	
-
-    }
-
-    public String getStartClassName() {
-    	return getServerDefinition().getResolver().resolveProperties(getServerDefinition().getStart().getMainClass());
-    }
-
-    public ServerRuntime getServerDefinition() {
-        GenericServer server = (GenericServer)getServer().getAdapter(ServerDelegate.class);
-        return server.getServerDefinition();
-    }
-    
-    private RuntimeDelegate getRuntimeDelegate()
-    {
-       return (RuntimeDelegate)getServer().getRuntime().getAdapter(RuntimeDelegate.class);
-    }
-
-
-
-    private List getStartClasspath() {
-    	String cpRef = getServerDefinition().getStart().getClasspathReference();
-    	return serverClasspath(cpRef);
-    }
-
-    /**
-     * @param cpRef
-     * @return
-     */
-    private List serverClasspath(String cpRef) {
-    	Classpath classpath = getServerDefinition().getClasspath(cpRef);
-    	
-        List cpEntryList = new ArrayList(classpath.getArchive().size());
-        Iterator iterator= classpath.getArchive().iterator();
-        while(iterator.hasNext())
-        {
-        	ArchiveType archive = (ArchiveType)iterator.next();
-        	String cpath = getServerDefinition().getResolver().resolveProperties(archive.getPath());
-    	
-    			cpEntryList.add(JavaRuntime.newArchiveRuntimeClasspathEntry(
-    					new Path(cpath)));
-         }
-    	return cpEntryList;
-    }
-
-    /**
-     * @param wc
-     * @param vmInstall
-     */
-    private void setupLaunchClasspath(ILaunchConfigurationWorkingCopy wc, IVMInstall vmInstall, List cp) {
-		// TODO: Remove adding tools.jar after the configurable JREs
-    	addToolsJar(vmInstall, cp);
-	
-		//merge existing classpath with server classpath
-		try {
-			IRuntimeClasspathEntry[] existingCps = JavaRuntime.computeUnresolvedRuntimeClasspath(wc);
-			for (int i = 0; i < existingCps.length; i++) {
-				if(cp.contains(existingCps[i])==false){ 
-					cp.add(existingCps[i]);
-				}
-			}
-		} catch (CoreException e) {
-			// ignore
-		}
-		
-    	wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH, convertCPEntryToMemento(cp));
-    	wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH,false);
-    }
-
-	private List convertCPEntryToMemento(List cpEntryList)
-	{
-		List list = new ArrayList(cpEntryList.size());
-		Iterator iterator = cpEntryList.iterator();
-		while(iterator.hasNext())
-		{
-			IRuntimeClasspathEntry entry = (IRuntimeClasspathEntry)iterator.next();
-			try {
-				list.add(entry.getMemento());
-			} catch (CoreException e) {
-				// ignore
-			}
-		}
-		return list;
-	}
-	private void addToolsJar(IVMInstall vmInstall, List cp) {
-		if (vmInstall != null) {
-    		try {
-    			cp.add(JavaRuntime
-    							.newRuntimeContainerClasspathEntry(
-    									new Path(JavaRuntime.JRE_CONTAINER)
-    											.append(
-    													"org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType")
-    											.append(vmInstall.getName()),
-    									IRuntimeClasspathEntry.BOOTSTRAP_CLASSES)
-    							);
-    		} catch (Exception e) {
-				// ignore
-    		}
-    
-    		IPath jrePath = new Path(vmInstall.getInstallLocation()
-    				.getAbsolutePath());
-    		if (jrePath != null) {
-    			IPath toolsPath = jrePath.append("lib").append("tools.jar");
-    			if (toolsPath.toFile().exists()) {
-     					cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(
-    							toolsPath));
-     			}
-    		}
-    	}
-	}
-
-    private String getWorkingDirectory() {
-    	return getServerDefinition().getResolver().resolveProperties(getServerDefinition().getStart().getWorkingDirectory());
-    }
-
-    private String getProgramArguments() {
-    	return getServerDefinition().getResolver().resolveProperties(getServerDefinition().getStart().getProgramArguments());
-    }
-
-    private String getVmArguments() {
-    	return getServerDefinition().getResolver().resolveProperties(getServerDefinition().getStart().getVmParameters());
-    }
-
-    public void setupLaunchConfiguration(
-            ILaunchConfigurationWorkingCopy workingCopy,
-            IProgressMonitor monitor) throws CoreException {
-
-
-        workingCopy.setAttribute(
-                IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME,
-                getStartClassName());
-
-        GenericServerRuntime runtime = (GenericServerRuntime) getRuntimeDelegate();
-
-        IVMInstall vmInstall = runtime.getVMInstall();
-        workingCopy.setAttribute(
-                IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE, runtime
-                        .getVMInstallTypeId());
-        workingCopy.setAttribute(
-                IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_NAME,
-                vmInstall.getName());
-
-        setupLaunchClasspath(workingCopy, vmInstall, getStartClasspath());
-
-
-        workingCopy.setAttribute(
-                IJavaLaunchConfigurationConstants.ATTR_WORKING_DIRECTORY,
-                getWorkingDirectory());
-        
-        String existingProgArgs  = workingCopy.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, (String)null);
-        String serverProgArgs =  getProgramArguments();
-        if(existingProgArgs==null || existingProgArgs.indexOf(serverProgArgs)<0) {
-            workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,serverProgArgs);
-        }
-        String existingVMArgs = workingCopy.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,(String)null);
-        String serverVMArgs= getVmArguments();
-        if(existingVMArgs==null || existingVMArgs.indexOf(serverVMArgs)<0) {
-            workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,serverVMArgs);
-        }
-    }
-    /**
-    	 * Setup for starting the server.
-    	 * 
-    	 * @param launch ILaunch
-    	 * @param launchMode String
-    	 * @param monitor IProgressMonitor
-    	 */
-    	public void setupLaunch(ILaunch launch, String launchMode, IProgressMonitor monitor) throws CoreException {
-    		if ("true".equals(launch.getLaunchConfiguration().getAttribute(ATTR_STOP, "false")))
-    			return;
-    //		IStatus status = getRuntime().validate();
-    //		if (status != null && !status.isOK())
-    //			throw new CoreException(status);
-    
-    	
-    		ServerPort[] ports = getServer().getServerPorts(null);
-    		ServerPort sp = null;
-    		for(int i=0;i<ports.length;i++){
-    			sp= ports[i];
-    			if (SocketUtil.isPortInUse(ports[i].getPort(), 5))
-    				throw new CoreException(new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, GenericServerCoreMessages.getFormattedString("errorPortInUse",new String[] {Integer.toString(sp.getPort()),sp.getName()}),null));
-    		}
-    		
-    		setServerState(IServer.STATE_STARTING);
-			setMode(launchMode);
-			
-    		// ping server to check for startup
-    		try {
-    			String url = "http://localhost";
-    			int port = sp.getPort();
-    			if (port != 80)
-    				url += ":" + port;
-    			ping = new PingThread(getServer(),this, url, 50);
-    		} catch (Exception e) {
-    			Trace.trace(Trace.SEVERE, "Can't ping for server startup.");
-    		}
-    	}
-
-    public void setProcess(final IProcess newProcess) {
-    	if (process != null)
-    		return;
-    
-    	process = newProcess;
-    	processListener = new IDebugEventSetListener() {
-    		public void handleDebugEvents(DebugEvent[] events) {
-    			if (events != null) {
-    				int size = events.length;
-    				for (int i = 0; i < size; i++) {
-    					if (process.equals(events[i].getSource()) && events[i].getKind() == DebugEvent.TERMINATE) {
-    						DebugPlugin.getDefault().removeDebugEventListener(this);
-    						stopImpl();
-    					}
-    				}
-    			}
-    		}
-    	};
-    	DebugPlugin.getDefault().addDebugEventListener(processListener);
-    }
-
-    protected void stopImpl() {
-    	if (ping != null) {
-    		ping.stopPinging();
-    		ping = null;
-    	}
-    	if (process != null) {
-    		process = null;
-    		DebugPlugin.getDefault().removeDebugEventListener(processListener);
-    		processListener = null;
-    	}
-    	setServerState(IServer.STATE_STOPPED);
-    }
-
-    /**
-     * Terminates the server.
-     */
-    public void terminate() {
-    	if (getServer().getServerState() == IServer.STATE_STOPPED)
-    		return;
-    
-    	try {
-    		setServerState(IServer.STATE_STOPPING);
-    		Trace.trace(Trace.FINEST, "Killing the Server process");
-    		if (process != null && !process.isTerminated()) {
-    			process.terminate();
-    			stopImpl();
-    		}
-    	} catch (Exception e) {
-    		Trace.trace(Trace.SEVERE, "Error killing the process", e);
-    	}
-    }
-
-    private List getStopClasspath() {
-    	String cpRef = getServerDefinition().getStop().getClasspathReference();
-    	return serverClasspath(cpRef);
-    }
-    public void initialize() {
-      super.initialize();
-    }
-    public void publishFinish(IProgressMonitor monitor) throws CoreException {
-        IModule[] modules = this.getServer().getModules();
-        boolean allpublished= true;
-        for (int i = 0; i < modules.length; i++) {
-            if(this.getServer().getModulePublishState(modules)!=IServer.PUBLISH_STATE_NONE)
-                allpublished=false;
-        }
-        if(allpublished)
-            setServerPublishState(IServer.PUBLISH_STATE_NONE);
-    }
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerCoreMessages.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerCoreMessages.java
deleted file mode 100644
index 98b173d..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerCoreMessages.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.eclipse.jst.server.generic.core.internal;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * Helper class to get messages
- * 
- * @author Gorkem Ercan
- */
-public class GenericServerCoreMessages {
-
-	private static final String RESOURCE_BUNDLE= "org.eclipse.jst.server.generic.core.internal.GenericServerCoreMessages";//$NON-NLS-1$
-
-	private static ResourceBundle fResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);
-
-	private GenericServerCoreMessages() {
-		// do nothing
-	}
-
-	/**
-	 * Return string from the resource bundle.
-	 * 
-	 * @param key the string used to get the bundle value, must not be <code>null</code>
-	 * @return the string from the resource bundle
-	 */
-	public static String getString(String key) {
-		try {
-			return fResourceBundle.getString(key);
-		} catch (MissingResourceException e) {
-			return "!" + key + "!";
-		}
-	}
-	
-	/**
-	 * Gets a string from the resource bundle that is 
-	 * formatted it with the given argument.
-	 * 
-	 * @param key the string used to get the bundle value, must not be null
-	 * @param arg the argument used to format the string
-	 * @return the formatted string
-	 */
-	public static String getFormattedString(String key, Object[] arg) {
-		String format= null;
-		try {
-			format= fResourceBundle.getString(key);
-		} catch (MissingResourceException e) {
-			return "!" + key + "!";
-		}
-		if (arg == null)
-			arg= new Object[0];
-		return MessageFormat.format(format,  arg);
-	}
-	
-	/**
-	 * Returns a resource bundle.
-	 * 
-	 * @return the resource bundle
-	 */
-	public static ResourceBundle getResourceBundle() {
-		return fResourceBundle;
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerCoreMessages.properties b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerCoreMessages.properties
deleted file mode 100644
index 0c696d7..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerCoreMessages.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-errorName=Invalid name.
-errorJRE=Invalid JRE.
-errorNoServerType=No server type definition
-errorDuplicateRuntimeName=Name is already in use
-errorMissingClasspathEntry=Missing classpath entry {0}
-errorPortInUse=Server port In Use {0}-{1}
-cancelNoPublish=Nothing to publish
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerLaunchConfigurationDelegate.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerLaunchConfigurationDelegate.java
deleted file mode 100644
index 3a26ef4..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerLaunchConfigurationDelegate.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.core.internal;
-
-import java.io.File;
-import java.util.Map;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;
-import org.eclipse.jdt.launching.ExecutionArguments;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.IVMRunner;
-import org.eclipse.jdt.launching.VMRunnerConfiguration;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.ServerUtil;
-import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
-/**
- * ServerLaunchConfiguration for the generic server.
- *
- * @author Gorkem Ercan
- */
-public class GenericServerLaunchConfigurationDelegate extends AbstractJavaLaunchConfigurationDelegate {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate#launch(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.debug.core.ILaunch, org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public void launch(ILaunchConfiguration configuration, String mode,
-			ILaunch launch, IProgressMonitor monitor) throws CoreException {
-		
-		
-
-		IServer server = ServerUtil.getServer(configuration);
-		if (server == null){
-            abort("Server does not exist", null, IJavaLaunchConfigurationConstants.ERR_INTERNAL_ERROR);
-		}	
-		
-		GenericServerBehaviour genericServer = (GenericServerBehaviour)server.getAdapter(ServerBehaviourDelegate.class);
-		genericServer.setupLaunch(launch, mode, monitor);
-	
-		String mainTypeName = genericServer.getStartClassName(); 
-
-		IVMInstall vm = verifyVMInstall(configuration);
-		
-		IVMRunner runner = vm.getVMRunner(mode);
-
-		File workingDir = verifyWorkingDirectory(configuration);
-		String workingDirName = null;
-		if (workingDir != null)
-			workingDirName = workingDir.getAbsolutePath();
-		
-		// Program & VM args
-		String pgmArgs = getProgramArguments(configuration);
-		String vmArgs = getVMArguments(configuration);
-
-		ExecutionArguments execArgs = new ExecutionArguments(vmArgs, pgmArgs);
-		
-		// VM-specific attributes
-		Map vmAttributesMap = getVMSpecificAttributesMap(configuration);
-		
-		// Classpath
-		String[] classpath = getClasspath(configuration);
-		
-		// Create VM config
-		VMRunnerConfiguration runConfig = new VMRunnerConfiguration(mainTypeName, classpath);
-		runConfig.setProgramArguments(execArgs.getProgramArgumentsArray());
-		runConfig.setVMArguments(execArgs.getVMArgumentsArray());
-		runConfig.setWorkingDirectory(workingDirName);
-		runConfig.setVMSpecificAttributesMap(vmAttributesMap);
-
-		// Bootpath
-		String[] bootpath = getBootpath(configuration);
-		if (bootpath != null && bootpath.length > 0)
-			runConfig.setBootClassPath(bootpath);
-		
-		setDefaultSourceLocator(launch, configuration);
-		
-		// Launch the configuration
-		runner.run(runConfig, launch, monitor);
-		genericServer.setProcess(launch.getProcesses()[0]);
-		
-	}
-
-	/**
-	 * Throws a core exception with the given message and optional
-	 * exception. The exception's status code will indicate an error.
-	 * 
-	 * @param message error message
-	 * @param exception cause of the error, or <code>null</code>
-	 * @exception CoreException with the given message and underlying
-	 *  exception
-	 */
-	protected void abort(String message, Throwable exception, int code) throws CoreException {
-		throw new CoreException(new Status(IStatus.ERROR, CorePlugin.getDefault().getBundle().getSymbolicName(), code, message, exception));
-	}
-	
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerLaunchableAdapterDelegate.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerLaunchableAdapterDelegate.java
deleted file mode 100644
index e5dc311..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerLaunchableAdapterDelegate.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.core.internal;
-
-import java.net.URL;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import org.eclipse.wst.server.core.IModuleArtifact;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.model.*;
-import org.eclipse.wst.server.core.util.HttpLaunchable;
-import org.eclipse.wst.server.core.util.WebResource;
-import org.eclipse.jst.server.core.EJBBean;
-import org.eclipse.jst.server.core.JndiLaunchable;
-import org.eclipse.jst.server.core.JndiObject;
-import org.eclipse.jst.server.core.Servlet;
-import org.eclipse.jst.server.generic.servertype.definition.JndiProperty;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-/**
- * Launchable adapter delegate for generic servers.
- * @author Gorkem Ercan 
- */
-public class GenericServerLaunchableAdapterDelegate extends LaunchableAdapterDelegate {
-	/*
-	 * @see ILaunchableAdapterDelegate#getLaunchable(IServer, IModuleObject)
-	 */
-	public Object getLaunchable(IServer server, IModuleArtifact moduleObject) {
-		ServerDelegate delegate = (ServerDelegate)server.getAdapter(ServerDelegate.class);
-		if (!(delegate instanceof GenericServer))
-			return null;
-		if ((moduleObject instanceof Servlet) ||(moduleObject instanceof WebResource))
-            return prepareHttpLaunchable(moduleObject, delegate);
-		
-        if((moduleObject instanceof EJBBean) || (moduleObject instanceof JndiObject))
-            return prepareJndiLaunchable(moduleObject,delegate);
-		return null;
-	}
-
-    private Object prepareJndiLaunchable(IModuleArtifact moduleObject, ServerDelegate delegate) {
-        JndiLaunchable launchable = null;
-        GenericServer genericServer = (GenericServer)delegate;
-        ServerRuntime definition = genericServer.getServerDefinition();
-        Properties props = new Properties();
-        props.put("java.naming.factory.initial",definition.getJndiConnection().getInitialContextFactory());
-        props.put("java.naming.provider.url",definition.getJndiConnection().getProviderUrl());
-        List jps = definition.getJndiConnection().getJndiProperty();
-        Iterator propsIt =jps.iterator();
-        while(propsIt.hasNext())
-        {
-            JndiProperty prop = (JndiProperty)propsIt.next();
-            props.put(prop.getName(),prop.getValue());
-        }
-        
-        if(moduleObject instanceof EJBBean)
-        {
-            EJBBean bean = (EJBBean)moduleObject;
-            launchable = new JndiLaunchable(props,bean.getJndiName());
-        }
-        if(moduleObject instanceof JndiObject)
-        {
-            JndiObject jndi = (JndiObject)moduleObject;
-            launchable = new JndiLaunchable(props,jndi.getJndiName());
-        }
-        return launchable;
-    }
-
-    /**
-     * @param moduleObject
-     * @param delegate
-     * @return
-     */
-    private Object prepareHttpLaunchable(IModuleArtifact moduleObject, ServerDelegate delegate) {
-        try {
-			URL url = ((IURLProvider) delegate).getModuleRootURL(moduleObject.getModule());
-			
-			Trace.trace("root: " + url);
-
-			if (moduleObject instanceof Servlet) {
-				Servlet servlet = (Servlet) moduleObject;
-				if (servlet.getAlias() != null) {
-					String path = servlet.getAlias();
-					if (path.startsWith("/"))
-						path = path.substring(1);
-					url = new URL(url, path);
-				} else
-					url = new URL(url, "servlet/" + servlet.getServletClassName());
-			} else if (moduleObject instanceof WebResource) {
-				WebResource resource = (WebResource) moduleObject;
-				String path = resource.getPath().toString();
-				Trace.trace("path: " + path);
-				if (path != null && path.startsWith("/") && path.length() > 0)
-					path = path.substring(1);
-				if (path != null && path.length() > 0)
-					url = new URL(url, path);
-			} 
-			return new HttpLaunchable(url);
-		} catch (Exception e) {
-			Trace.trace("Error getting URL for " + moduleObject, e);
-			return null;
-		}
-    }
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerRuntime.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerRuntime.java
deleted file mode 100644
index 1561b41..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerRuntime.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.core.internal;
-
-import java.io.File;
-import java.util.Iterator;
-import java.util.Map;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.internal.IGenericRuntime;
-import org.eclipse.jst.server.generic.servertype.definition.ArchiveType;
-import org.eclipse.jst.server.generic.servertype.definition.Classpath;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.wst.server.core.model.RuntimeDelegate;
-/**
- * Generic server runtime support.
- *
- * @author Gorkem Ercan
- */
-public class GenericServerRuntime extends RuntimeDelegate implements IGenericRuntime
-{
-
-	public static final String SERVER_DEFINITION_ID = "server_definition_id";
-	public static final String SERVER_INSTANCE_PROPERTIES = "generic_server_instance_properties";
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.server.core.IGenericRuntime#getVMInstallTypeId()
-	 */
-	public String getVMInstallTypeId() {
-		return JavaRuntime.getDefaultVMInstall().getVMInstallType().getId();
-		// TODO configurable.
-	}
-	
-	public boolean isUsingDefaultJRE() {
-		// TODO Auto-generated method stub
-		return true;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.server.core.IGenericRuntime#getVMInstallId()
-	 */
-	public String getVMInstallId() {
-		return JavaRuntime.getDefaultVMInstall().getId();
-		// TODO configurable.
-		
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.server.core.IGenericRuntime#getVMInstall()
-	 */
-	public IVMInstall getVMInstall() {
-		return JavaRuntime.getDefaultVMInstall();
-		// TODO configurable
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jst.server.core.IGenericRuntime#validate()
-	 */
-	public IStatus validate() {
-		if (getVMInstall() == null)
-			return new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, GenericServerCoreMessages.getString("errorJRE"), null);
-		
-		ServerRuntime serverTypeDefinition = getServerTypeDefinition();
-        if(serverTypeDefinition == null)
-		    return new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, GenericServerCoreMessages.getString("errorNoServerType"), null);
-        if(serverTypeDefinition.getClasspath()== null || serverTypeDefinition.getClasspath().size()<1)
-            return new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0 ,GenericServerCoreMessages.getString("errorNoClasspath"),null);
-		Iterator cpList  = serverTypeDefinition.getClasspath().iterator();
-        while (cpList.hasNext()) {
-			Classpath cpth = (Classpath) cpList.next();
-	        if(cpth.getArchive()== null || cpth.getArchive().size()<1)
-	            return new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0 ,GenericServerCoreMessages.getString("errorNoClasspath"),null);
-			Iterator archIter = cpth.getArchive().iterator();
-			while (archIter.hasNext()) {
-				ArchiveType arch = (ArchiveType) archIter.next();
-				String arcPath = serverTypeDefinition.getResolver().resolveProperties(arch.getPath());
-		           File f = new File(arcPath);
-		            if(f.exists()==false)
-		                return new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0 ,GenericServerCoreMessages.getFormattedString("errorMissingClasspathEntry",new String[]{f.getPath()} ),null);	
-			}
- 			
-		}
-        return new Status(IStatus.OK, CorePlugin.PLUGIN_ID, 0, "", null);
-	}
-	/**
-	 * Returns the ServerTypeDefinition for this runtime. 
-	 * Populated with the user properties if exists. 
-	 * 
-	 * @return populated ServerTypeDefinition
-	 */
-	public ServerRuntime getServerTypeDefinition()
-	{
-	   String id=  getRuntime().getRuntimeType().getId();
-	   Map properties = getAttribute(SERVER_INSTANCE_PROPERTIES,(Map)null);
-	   if(id==null)
-	       return null;
-	   return CorePlugin.getDefault().getServerTypeDefinitionManager().getServerRuntimeDefinition(id,properties);
-	}
-	
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerRuntimeTargetHandler.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerRuntimeTargetHandler.java
deleted file mode 100644
index a1d45b8..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerRuntimeTargetHandler.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.core.internal;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.ClasspathRuntimeTargetHandler;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.model.RuntimeDelegate;
-/**
- * Provides the Classpath containers to be added into project classpaths.
- *
- * @author Gorkem Ercan
- */
-public class GenericServerRuntimeTargetHandler extends
-		ClasspathRuntimeTargetHandler {
-
-	/* (non-Javadoc)
-	 * @see ClasspathRuntimeTargetHandler#getClasspathContainerLabel(IRuntime, java.lang.String)
-	 */
-	public String getClasspathContainerLabel(IRuntime runtime, String id) {
-		ServerRuntime definition= ServerTypeDefinitionUtil.getServerTypeDefinition(runtime);
-		return definition.getName();
-	}
-
-	/* (non-Javadoc)
-	 * @see ClasspathRuntimeTargetHandler#resolveClasspathContainer(IRuntime, java.lang.String)
-	 */
-	public IClasspathEntry[] resolveClasspathContainer(IRuntime runtime,String id){		
-		return ServerTypeDefinitionUtil.getServerClassPathEntry(runtime);
-	}
-    
-	/*
-     * @see ClasspathRuntimeTargetHandler#getDelegateClasspathEntries(IRuntime runtime, IProgressMonitor monitor)
-	 */
-	public IClasspathEntry[] getDelegateClasspathEntries(IRuntime runtime, IProgressMonitor monitor) {
-		GenericServerRuntime genericRuntime = (GenericServerRuntime)runtime.getAdapter(RuntimeDelegate.class);
-		IVMInstall vmInstall = genericRuntime.getVMInstall();
-		if (vmInstall != null) {
-			String name = vmInstall.getName();
-			return new IClasspathEntry[] { JavaCore.newContainerEntry(new Path(JavaRuntime.JRE_CONTAINER).append("org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType").append(name)) };
-		}
-		return null;
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerSourcePathComputerDelegate.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerSourcePathComputerDelegate.java
deleted file mode 100644
index 1349f6d..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerSourcePathComputerDelegate.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.core.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.sourcelookup.ISourceContainer;
-import org.eclipse.debug.core.sourcelookup.ISourcePathComputerDelegate;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.internal.launching.JavaSourceLookupUtil;
-import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
-import org.eclipse.jdt.launching.JavaRuntime;
-/**
- * SourcePathComputer for the GenericLaunchConfiguration.
- * 
- * @author Gorkem Ercan
- */
-public class GenericServerSourcePathComputerDelegate implements ISourcePathComputerDelegate  {
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.core.sourcelookup.ISourcePathComputerDelegate#computeSourceContainers(org.eclipse.debug.core.ILaunchConfiguration, org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public ISourceContainer[] computeSourceContainers(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException {
-		
-		IRuntimeClasspathEntry[] unresolvedEntries = JavaRuntime.computeUnresolvedSourceLookupPath(configuration);
-		// FIXME have only the projects of registered modules. 
-		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
-		List javaProjectList = new ArrayList();
-		for(int i = 0; i<projects.length;i++)
-		{
-			if(projects[i].hasNature(JavaCore.NATURE_ID))
-			{
-				IJavaProject javaProject = (IJavaProject) projects[i].getNature(JavaCore.NATURE_ID);
-				javaProjectList.add(javaProject);
-			}
-		}
-		IRuntimeClasspathEntry[] projectEntries = new IRuntimeClasspathEntry[javaProjectList.size()];
-		for (int i = 0; i < javaProjectList.size(); i++) {
-			projectEntries[i] = JavaRuntime.newProjectRuntimeClasspathEntry((IJavaProject)javaProjectList.get(i)); 
-		}
-		IRuntimeClasspathEntry[] entries =  new IRuntimeClasspathEntry[projectEntries.length+unresolvedEntries.length]; 
-		System.arraycopy(unresolvedEntries,0,entries,0,unresolvedEntries.length);
-		System.arraycopy(projectEntries,0,entries,unresolvedEntries.length,projectEntries.length);
-		
-		IRuntimeClasspathEntry[] resolved = JavaRuntime.resolveSourceLookupPath(entries, configuration);
-		return JavaSourceLookupUtil.translate(resolved);
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/PublishManager.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/PublishManager.java
deleted file mode 100644
index ded6c2c..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/PublishManager.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.eclipse.jst.server.generic.core.internal;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.jst.server.generic.internal.core.util.ExtensionPointUtil;
-
-/**
- * 
- *
- * @author Gorkem Ercan
- */
-public class PublishManager 
-{
-     public static GenericPublisher getPublisher(String id) 
-    {
-        IExtension[] extensions = ExtensionPointUtil.getGenericPublisherExtension();
-        try {
-            for (int i = 0; i < extensions.length; i++) {
-                IConfigurationElement[] configs = ExtensionPointUtil.getConfigurationElements(extensions[i]);
-                for (int j = 0; j < configs.length; j++) {
-                    if(configs[j].getAttribute("id").equals(id)) {
-                        return (GenericPublisher)configs[j].createExecutableExtension("class");
-                      }
-                }
-            }
-        }catch(CoreException e){
-            //ingored
-        }
-        return null;
-    }
-
-     
-
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ServerTypeDefinitionManager.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ServerTypeDefinitionManager.java
deleted file mode 100644
index e7439fa..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ServerTypeDefinitionManager.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.core.internal;
-
-import java.net.URL;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.jst.server.generic.internal.xml.XMLUtils;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-/**
- * Manages the retrieaval of ServerTypeDefinitions.
- * 
- * @author Gorkem Ercan
- */
-
-public class ServerTypeDefinitionManager 
-{
-	private XMLUtils fXmlUtils;
-	
-	public ServerTypeDefinitionManager(URL serverDefinitionURL)
-	{
-		super();
-		fXmlUtils = new XMLUtils(); 
-	}
-
-
-	public ServerRuntime getServerRuntimeDefinition(String id, Map properties)
-	{
-		ServerRuntime definition =  fXmlUtils.getServerTypeDefinition(id);
-		if(definition !=null)
-            definition.setPropertyValues(properties);
-		return definition;
-	}
-	
-	public ServerRuntime[] getServerTypeDefinitions()
-	{
-		 List definitionList = fXmlUtils.getServerTypeDefinitions();
-		 return (ServerRuntime[])definitionList.toArray(new ServerRuntime[definitionList.size()]);
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ServerTypeDefinitionUtil.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ServerTypeDefinitionUtil.java
deleted file mode 100644
index 61d759e..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ServerTypeDefinitionUtil.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-
-package org.eclipse.jst.server.generic.core.internal;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Map;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jst.server.generic.servertype.definition.ArchiveType;
-import org.eclipse.jst.server.generic.servertype.definition.Classpath;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.model.RuntimeDelegate;
-
-/**
- * Utilities for ServerRuntime definition files.
- *
- * @author Gorkem Ercan
- */
-public class ServerTypeDefinitionUtil 
-{
-	/**
-	 * 
-	 * @param runtime
-	 * @return
-	 */
-	public static ServerRuntime getServerTypeDefinition(IRuntime runtime)
-	{
-	    RuntimeDelegate delegate = (RuntimeDelegate)runtime.getAdapter(RuntimeDelegate.class);
-		String serverType = delegate.getRuntime().getRuntimeType().getId();
-		Map properties = delegate.getAttribute(GenericServerRuntime.SERVER_INSTANCE_PROPERTIES,(Map)null);
-		ServerRuntime definition = 
-			CorePlugin.getDefault().getServerTypeDefinitionManager().getServerRuntimeDefinition(serverType,properties);
-		return definition;
-	}
-	
-	public static IClasspathEntry[] getServerClassPathEntry(IRuntime runtime)
-	{
-		ServerRuntime definition = getServerTypeDefinition(runtime);		
-		String ref = definition.getProject().getClasspathReference();
-		Classpath cp = definition.getClasspath(ref);
-		Iterator archives = cp.getArchive().iterator();
-		ArrayList entryList = new ArrayList();
-		while (archives.hasNext()) {
-			ArchiveType archive = (ArchiveType) archives.next();
-			String item = definition.getResolver().resolveProperties(archive.getPath());
-			IClasspathEntry entry = JavaCore.newLibraryEntry(new Path(item),null,null );
-			entryList.add(entry);
-		}
-
-		return (IClasspathEntry[])entryList.toArray(new IClasspathEntry[entryList.size()]);
-	}
-	
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/Trace.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/Trace.java
deleted file mode 100644
index 4562872..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/Trace.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.eclipse.jst.server.generic.core.internal;
-
-
-/**********************************************************************
- * Copyright (c) 2003 IBM Corporation and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- *    IBM - Initial API and implementation
- **********************************************************************/
-/**
- * Helper class to route trace output.
- */
-public class Trace {
-	public static byte CONFIG = 0;
-	public static byte WARNING = 1;
-	public static byte SEVERE = 2;
-	public static byte FINEST = 3;
-	public static byte FINER = 4;
-	
-	/**
-	 * Trace constructor comment.
-	 */
-	private Trace() {
-		super();
-	}
-	
-	/**
-	 * Trace the given text.
-	 *
-	 * @param s java.lang.String
-	 */
-	public static void trace(byte level, String s) {
-		Trace.trace(level, s, null);
-	}
-	
-	/**
-	 * Trace the given message and exception.
-	 *
-	 * @param s java.lang.String
-	 * @param t java.lang.Throwable
-	 */
-	public static void trace(byte level, String s, Throwable t) {
-		if (!CorePlugin.getDefault().isDebugging())
-			return;
-
-		System.out.println(s);
-		if (t != null)
-			t.printStackTrace();
-	}
-	
-	/**
-	 * Trace the given text.
-	 *
-	 * @param s java.lang.String
-	 */
-	public static void trace(String s) {
-		trace(s, null);
-	}
-	
-	/**
-	 * Trace the given exception.
-	 *
-	 * @param s java.lang.String
-	 * @param e java.lang.Throwable
-	 */
-	public static void trace(String s, Throwable t) {
-		trace(FINEST, s, t);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/ExtensionPointUtil.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/ExtensionPointUtil.java
deleted file mode 100644
index d626ae1..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/ExtensionPointUtil.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.eclipse.jst.server.generic.internal.core.util;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;
-
-/**
- * Some utilities for handling the extension points.
- *
- * @author Gorkem Ercan
- */
-public class ExtensionPointUtil {
-    private static final String SERVERDEFINITION_EXTENSION_ID = "org.eclipse.jst.server.generic.core.serverdefinition";
-    private static final String GENERICPUBLISHER_EXTENSION_ID = "org.eclipse.jst.server.generic.core.genericpublisher";
-
-    public static IExtension[] getGenericServerDefinitionExtensions(){
-        return getExtensions(SERVERDEFINITION_EXTENSION_ID);
-    }
-    
-    public static IExtension[] getGenericPublisherExtension(){
-        return getExtensions(GENERICPUBLISHER_EXTENSION_ID);
-    }
-
-    private static IExtension[] getExtensions(String extensionId){
-        IExtensionPoint extensionPoint=getExtensionPoint(extensionId);
-        IExtension[] extensions = extensionPoint.getExtensions();
-        return extensions;
-    }
- 
-    private static IExtensionPoint getExtensionPoint(String id)
-    {
-        IExtensionRegistry registry = Platform.getExtensionRegistry();
-        IExtensionPoint extensionPoint= registry.getExtensionPoint(id);
-        return extensionPoint;
-    }
-    
-    
-    public static IConfigurationElement[] getConfigurationElements(IExtension extension)
-    {
-        return extension!=null?extension.getConfigurationElements():null;
-    }
-    
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/FileUtil.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/FileUtil.java
deleted file mode 100644
index 7fcdda5..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/FileUtil.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.eclipse.jst.server.generic.internal.core.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-
-import org.eclipse.core.runtime.Platform;
-import org.osgi.framework.Bundle;
-
-/**
- * 
- *
- * @author Gorkem Ercan
- */
-public class FileUtil {
-
-    public static File resolveFileFrom(Bundle bundle, String file)
-    {
-        try {
-            URL resolvedUrl = Platform.resolve(bundle.getEntry("/"));
-            if(file.startsWith("/"))
-                file=file.substring(1);
-            String path = resolvedUrl.getPath()+file;
-            URI uri = new URI(resolvedUrl.getProtocol(), resolvedUrl.getHost(),path, resolvedUrl.getQuery());
-            return new File(uri);
-        } 
-        catch (URISyntaxException e) {
-        }
-        catch (IOException e1) {
-        }
-        return null;
-    }
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/ServerTypePackage.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/ServerTypePackage.java
deleted file mode 100644
index 12640bb..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/ServerTypePackage.java
+++ /dev/null
@@ -1,1425 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ServerTypePackage.java,v 1.1 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.jst.server.generic.servertype.definition.ServerTypeFactory;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Package</b> for the model.
- * It contains accessors for the meta objects to represent
- * <ul>
- *   <li>each class,</li>
- *   <li>each feature of each class,</li>
- *   <li>each enum,</li>
- *   <li>and each data type</li>
- * </ul>
- * <!-- end-user-doc -->
- * @see org.eclipse.jst.server.generic.servertype.definition.ServerTypeFactory
- * @generated
- */
-public interface ServerTypePackage extends EPackage{
-    /**
-     * The package name.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	String eNAME = "definition";
-
-    /**
-     * The package namespace URI.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	String eNS_URI = "http://eclipse.org/jst/server/generic/ServerTypeDefinition";
-
-    /**
-     * The package namespace name.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	String eNS_PREFIX = "definition";
-
-    /**
-     * The singleton instance of the package.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	ServerTypePackage eINSTANCE = org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl.init();
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.ArchiveTypeImpl <em>Archive Type</em>}' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ArchiveTypeImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getArchiveType()
-     * @generated
-     */
-	int ARCHIVE_TYPE = 0;
-
-    /**
-     * The feature id for the '<em><b>Path</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int ARCHIVE_TYPE__PATH = 0;
-
-    /**
-     * The number of structural features of the the '<em>Archive Type</em>' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int ARCHIVE_TYPE_FEATURE_COUNT = 1;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.ClasspathImpl <em>Classpath</em>}' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ClasspathImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getClasspath()
-     * @generated
-     */
-	int CLASSPATH = 1;
-
-    /**
-     * The feature id for the '<em><b>Group</b></em>' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int CLASSPATH__GROUP = 0;
-
-    /**
-     * The feature id for the '<em><b>Archive</b></em>' containment reference list.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int CLASSPATH__ARCHIVE = 1;
-
-    /**
-     * The feature id for the '<em><b>Id</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int CLASSPATH__ID = 2;
-
-    /**
-     * The feature id for the '<em><b>Is Library</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int CLASSPATH__IS_LIBRARY = 3;
-
-    /**
-     * The number of structural features of the the '<em>Classpath</em>' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int CLASSPATH_FEATURE_COUNT = 4;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.JndiConnectionImpl <em>Jndi Connection</em>}' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.JndiConnectionImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getJndiConnection()
-     * @generated
-     */
-    int JNDI_CONNECTION = 2;
-
-    /**
-     * The feature id for the '<em><b>Provider Url</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int JNDI_CONNECTION__PROVIDER_URL = 0;
-
-    /**
-     * The feature id for the '<em><b>Group</b></em>' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int JNDI_CONNECTION__GROUP = 1;
-
-    /**
-     * The feature id for the '<em><b>Jndi Property</b></em>' containment reference list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int JNDI_CONNECTION__JNDI_PROPERTY = 2;
-
-    /**
-     * The feature id for the '<em><b>Initial Context Factory</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int JNDI_CONNECTION__INITIAL_CONTEXT_FACTORY = 3;
-
-    /**
-     * The number of structural features of the the '<em>Jndi Connection</em>' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int JNDI_CONNECTION_FEATURE_COUNT = 4;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.JndiPropertyImpl <em>Jndi Property</em>}' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.JndiPropertyImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getJndiProperty()
-     * @generated
-     */
-    int JNDI_PROPERTY = 3;
-
-    /**
-     * The feature id for the '<em><b>Name</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int JNDI_PROPERTY__NAME = 0;
-
-    /**
-     * The feature id for the '<em><b>Value</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int JNDI_PROPERTY__VALUE = 1;
-
-    /**
-     * The number of structural features of the the '<em>Jndi Property</em>' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int JNDI_PROPERTY_FEATURE_COUNT = 2;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.LaunchConfigurationImpl <em>Launch Configuration</em>}' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.LaunchConfigurationImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getLaunchConfiguration()
-     * @generated
-     */
-	int LAUNCH_CONFIGURATION = 4;
-
-    /**
-     * The feature id for the '<em><b>Main Class</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int LAUNCH_CONFIGURATION__MAIN_CLASS = 0;
-
-    /**
-     * The feature id for the '<em><b>Working Directory</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int LAUNCH_CONFIGURATION__WORKING_DIRECTORY = 1;
-
-    /**
-     * The feature id for the '<em><b>Program Arguments</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int LAUNCH_CONFIGURATION__PROGRAM_ARGUMENTS = 2;
-
-    /**
-     * The feature id for the '<em><b>Vm Parameters</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int LAUNCH_CONFIGURATION__VM_PARAMETERS = 3;
-
-    /**
-     * The feature id for the '<em><b>Classpath Reference</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int LAUNCH_CONFIGURATION__CLASSPATH_REFERENCE = 4;
-
-    /**
-     * The number of structural features of the the '<em>Launch Configuration</em>' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int LAUNCH_CONFIGURATION_FEATURE_COUNT = 5;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.ModuleImpl <em>Module</em>}' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ModuleImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getModule()
-     * @generated
-     */
-	int MODULE = 5;
-
-    /**
-     * The feature id for the '<em><b>Type</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int MODULE__TYPE = 0;
-
-    /**
-     * The feature id for the '<em><b>Publish Dir</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int MODULE__PUBLISH_DIR = 1;
-
-    /**
-     * The feature id for the '<em><b>Publisher Reference</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int MODULE__PUBLISHER_REFERENCE = 2;
-
-    /**
-     * The number of structural features of the the '<em>Module</em>' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int MODULE_FEATURE_COUNT = 3;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.PortImpl <em>Port</em>}' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.PortImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getPort()
-     * @generated
-     */
-	int PORT = 6;
-
-    /**
-     * The feature id for the '<em><b>No</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PORT__NO = 0;
-
-    /**
-     * The feature id for the '<em><b>Name</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PORT__NAME = 1;
-
-    /**
-     * The feature id for the '<em><b>Protocol</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PORT__PROTOCOL = 2;
-
-    /**
-     * The number of structural features of the the '<em>Port</em>' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PORT_FEATURE_COUNT = 3;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.ProjectImpl <em>Project</em>}' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ProjectImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getProject()
-     * @generated
-     */
-	int PROJECT = 7;
-
-    /**
-     * The feature id for the '<em><b>Classpath Reference</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PROJECT__CLASSPATH_REFERENCE = 0;
-
-    /**
-     * The number of structural features of the the '<em>Project</em>' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PROJECT_FEATURE_COUNT = 1;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.PropertyImpl <em>Property</em>}' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.PropertyImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getProperty()
-     * @generated
-     */
-	int PROPERTY = 8;
-
-    /**
-     * The feature id for the '<em><b>Context</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PROPERTY__CONTEXT = 0;
-
-    /**
-     * The feature id for the '<em><b>Default</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PROPERTY__DEFAULT = 1;
-
-    /**
-     * The feature id for the '<em><b>Id</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PROPERTY__ID = 2;
-
-    /**
-     * The feature id for the '<em><b>Label</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PROPERTY__LABEL = 3;
-
-    /**
-     * The feature id for the '<em><b>Type</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PROPERTY__TYPE = 4;
-
-    /**
-     * The number of structural features of the the '<em>Property</em>' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PROPERTY_FEATURE_COUNT = 5;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.PublisherImpl <em>Publisher</em>}' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.PublisherImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getPublisher()
-     * @generated
-     */
-	int PUBLISHER = 9;
-
-    /**
-     * The feature id for the '<em><b>Group</b></em>' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int PUBLISHER__GROUP = 0;
-
-    /**
-     * The feature id for the '<em><b>Publisherdata</b></em>' containment reference list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int PUBLISHER__PUBLISHERDATA = 1;
-
-    /**
-     * The feature id for the '<em><b>Id</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PUBLISHER__ID = 2;
-
-    /**
-     * The number of structural features of the the '<em>Publisher</em>' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int PUBLISHER_FEATURE_COUNT = 3;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.PublisherDataImpl <em>Publisher Data</em>}' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.PublisherDataImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getPublisherData()
-     * @generated
-     */
-    int PUBLISHER_DATA = 10;
-
-    /**
-     * The feature id for the '<em><b>Dataname</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int PUBLISHER_DATA__DATANAME = 0;
-
-    /**
-     * The feature id for the '<em><b>Datavalue</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int PUBLISHER_DATA__DATAVALUE = 1;
-
-    /**
-     * The number of structural features of the the '<em>Publisher Data</em>' class.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int PUBLISHER_DATA_FEATURE_COUNT = 2;
-
-    /**
-     * The meta object id for the '{@link org.eclipse.jst.server.generic.servertype.definition.impl.ServerRuntimeImpl <em>Server Runtime</em>}' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypePackageImpl#getServerRuntime()
-     * @generated
-     */
-	int SERVER_RUNTIME = 11;
-
-    /**
-     * The feature id for the '<em><b>Group</b></em>' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__GROUP = 0;
-
-    /**
-     * The feature id for the '<em><b>Property</b></em>' containment reference list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__PROPERTY = 1;
-
-    /**
-     * The feature id for the '<em><b>Group1</b></em>' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__GROUP1 = 2;
-
-    /**
-     * The feature id for the '<em><b>Port</b></em>' containment reference list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__PORT = 3;
-
-    /**
-     * The feature id for the '<em><b>Group2</b></em>' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__GROUP2 = 4;
-
-    /**
-     * The feature id for the '<em><b>Module</b></em>' containment reference list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__MODULE = 5;
-
-    /**
-     * The feature id for the '<em><b>Project</b></em>' containment reference.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int SERVER_RUNTIME__PROJECT = 6;
-
-    /**
-     * The feature id for the '<em><b>Start</b></em>' containment reference.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int SERVER_RUNTIME__START = 7;
-
-    /**
-     * The feature id for the '<em><b>Stop</b></em>' containment reference.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int SERVER_RUNTIME__STOP = 8;
-
-    /**
-     * The feature id for the '<em><b>Group3</b></em>' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__GROUP3 = 9;
-
-    /**
-     * The feature id for the '<em><b>Publisher</b></em>' containment reference list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__PUBLISHER = 10;
-
-    /**
-     * The feature id for the '<em><b>Group4</b></em>' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__GROUP4 = 11;
-
-    /**
-     * The feature id for the '<em><b>Classpath</b></em>' containment reference list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__CLASSPATH = 12;
-
-    /**
-     * The feature id for the '<em><b>Jndi Connection</b></em>' containment reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-    int SERVER_RUNTIME__JNDI_CONNECTION = 13;
-
-    /**
-     * The feature id for the '<em><b>Name</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int SERVER_RUNTIME__NAME = 14;
-
-    /**
-     * The feature id for the '<em><b>Version</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int SERVER_RUNTIME__VERSION = 15;
-
-    /**
-     * The number of structural features of the the '<em>Server Runtime</em>' class.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	int SERVER_RUNTIME_FEATURE_COUNT = 16;
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.ArchiveType <em>Archive Type</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Archive Type</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ArchiveType
-     * @generated
-     */
-	EClass getArchiveType();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.ArchiveType#getPath <em>Path</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Path</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ArchiveType#getPath()
-     * @see #getArchiveType()
-     * @generated
-     */
-	EAttribute getArchiveType_Path();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.Classpath <em>Classpath</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Classpath</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Classpath
-     * @generated
-     */
-	EClass getClasspath();
-
-    /**
-     * Returns the meta object for the attribute list '{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#getGroup <em>Group</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute list '<em>Group</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Classpath#getGroup()
-     * @see #getClasspath()
-     * @generated
-     */
-    EAttribute getClasspath_Group();
-
-    /**
-     * Returns the meta object for the containment reference list '{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#getArchive <em>Archive</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the containment reference list '<em>Archive</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Classpath#getArchive()
-     * @see #getClasspath()
-     * @generated
-     */
-	EReference getClasspath_Archive();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#getId <em>Id</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Id</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Classpath#getId()
-     * @see #getClasspath()
-     * @generated
-     */
-	EAttribute getClasspath_Id();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#isIsLibrary <em>Is Library</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Is Library</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Classpath#isIsLibrary()
-     * @see #getClasspath()
-     * @generated
-     */
-	EAttribute getClasspath_IsLibrary();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection <em>Jndi Connection</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Jndi Connection</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.JndiConnection
-     * @generated
-     */
-    EClass getJndiConnection();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getProviderUrl <em>Provider Url</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Provider Url</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getProviderUrl()
-     * @see #getJndiConnection()
-     * @generated
-     */
-    EAttribute getJndiConnection_ProviderUrl();
-
-    /**
-     * Returns the meta object for the attribute list '{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getGroup <em>Group</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute list '<em>Group</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getGroup()
-     * @see #getJndiConnection()
-     * @generated
-     */
-    EAttribute getJndiConnection_Group();
-
-    /**
-     * Returns the meta object for the containment reference list '{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getJndiProperty <em>Jndi Property</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the containment reference list '<em>Jndi Property</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getJndiProperty()
-     * @see #getJndiConnection()
-     * @generated
-     */
-    EReference getJndiConnection_JndiProperty();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getInitialContextFactory <em>Initial Context Factory</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Initial Context Factory</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getInitialContextFactory()
-     * @see #getJndiConnection()
-     * @generated
-     */
-    EAttribute getJndiConnection_InitialContextFactory();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.JndiProperty <em>Jndi Property</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Jndi Property</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.JndiProperty
-     * @generated
-     */
-    EClass getJndiProperty();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.JndiProperty#getName <em>Name</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Name</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.JndiProperty#getName()
-     * @see #getJndiProperty()
-     * @generated
-     */
-    EAttribute getJndiProperty_Name();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.JndiProperty#getValue <em>Value</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Value</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.JndiProperty#getValue()
-     * @see #getJndiProperty()
-     * @generated
-     */
-    EAttribute getJndiProperty_Value();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration <em>Launch Configuration</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Launch Configuration</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration
-     * @generated
-     */
-	EClass getLaunchConfiguration();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getMainClass <em>Main Class</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Main Class</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getMainClass()
-     * @see #getLaunchConfiguration()
-     * @generated
-     */
-    EAttribute getLaunchConfiguration_MainClass();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getWorkingDirectory <em>Working Directory</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Working Directory</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getWorkingDirectory()
-     * @see #getLaunchConfiguration()
-     * @generated
-     */
-	EAttribute getLaunchConfiguration_WorkingDirectory();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getProgramArguments <em>Program Arguments</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Program Arguments</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getProgramArguments()
-     * @see #getLaunchConfiguration()
-     * @generated
-     */
-	EAttribute getLaunchConfiguration_ProgramArguments();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getVmParameters <em>Vm Parameters</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Vm Parameters</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getVmParameters()
-     * @see #getLaunchConfiguration()
-     * @generated
-     */
-	EAttribute getLaunchConfiguration_VmParameters();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getClasspathReference <em>Classpath Reference</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Classpath Reference</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getClasspathReference()
-     * @see #getLaunchConfiguration()
-     * @generated
-     */
-	EAttribute getLaunchConfiguration_ClasspathReference();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.Module <em>Module</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Module</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Module
-     * @generated
-     */
-	EClass getModule();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Module#getType <em>Type</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Type</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Module#getType()
-     * @see #getModule()
-     * @generated
-     */
-	EAttribute getModule_Type();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Module#getPublishDir <em>Publish Dir</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Publish Dir</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Module#getPublishDir()
-     * @see #getModule()
-     * @generated
-     */
-	EAttribute getModule_PublishDir();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Module#getPublisherReference <em>Publisher Reference</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Publisher Reference</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Module#getPublisherReference()
-     * @see #getModule()
-     * @generated
-     */
-	EAttribute getModule_PublisherReference();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.Port <em>Port</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Port</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Port
-     * @generated
-     */
-	EClass getPort();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Port#getNo <em>No</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>No</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Port#getNo()
-     * @see #getPort()
-     * @generated
-     */
-	EAttribute getPort_No();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Port#getName <em>Name</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Name</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Port#getName()
-     * @see #getPort()
-     * @generated
-     */
-	EAttribute getPort_Name();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Port#getProtocol <em>Protocol</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Protocol</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Port#getProtocol()
-     * @see #getPort()
-     * @generated
-     */
-	EAttribute getPort_Protocol();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.Project <em>Project</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Project</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Project
-     * @generated
-     */
-	EClass getProject();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Project#getClasspathReference <em>Classpath Reference</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Classpath Reference</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Project#getClasspathReference()
-     * @see #getProject()
-     * @generated
-     */
-	EAttribute getProject_ClasspathReference();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.Property <em>Property</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Property</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Property
-     * @generated
-     */
-	EClass getProperty();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Property#getContext <em>Context</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Context</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Property#getContext()
-     * @see #getProperty()
-     * @generated
-     */
-	EAttribute getProperty_Context();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Property#getDefault <em>Default</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Default</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Property#getDefault()
-     * @see #getProperty()
-     * @generated
-     */
-	EAttribute getProperty_Default();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Property#getId <em>Id</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Id</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Property#getId()
-     * @see #getProperty()
-     * @generated
-     */
-	EAttribute getProperty_Id();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Property#getLabel <em>Label</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Label</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Property#getLabel()
-     * @see #getProperty()
-     * @generated
-     */
-	EAttribute getProperty_Label();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Property#getType <em>Type</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Type</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Property#getType()
-     * @see #getProperty()
-     * @generated
-     */
-	EAttribute getProperty_Type();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.Publisher <em>Publisher</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Publisher</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Publisher
-     * @generated
-     */
-	EClass getPublisher();
-
-    /**
-     * Returns the meta object for the attribute list '{@link org.eclipse.jst.server.generic.servertype.definition.Publisher#getGroup <em>Group</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute list '<em>Group</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Publisher#getGroup()
-     * @see #getPublisher()
-     * @generated
-     */
-    EAttribute getPublisher_Group();
-
-    /**
-     * Returns the meta object for the containment reference list '{@link org.eclipse.jst.server.generic.servertype.definition.Publisher#getPublisherdata <em>Publisherdata</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the containment reference list '<em>Publisherdata</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Publisher#getPublisherdata()
-     * @see #getPublisher()
-     * @generated
-     */
-    EReference getPublisher_Publisherdata();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.Publisher#getId <em>Id</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Id</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Publisher#getId()
-     * @see #getPublisher()
-     * @generated
-     */
-	EAttribute getPublisher_Id();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.PublisherData <em>Publisher Data</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Publisher Data</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.PublisherData
-     * @generated
-     */
-    EClass getPublisherData();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.PublisherData#getDataname <em>Dataname</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Dataname</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.PublisherData#getDataname()
-     * @see #getPublisherData()
-     * @generated
-     */
-    EAttribute getPublisherData_Dataname();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.PublisherData#getDatavalue <em>Datavalue</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Datavalue</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.PublisherData#getDatavalue()
-     * @see #getPublisherData()
-     * @generated
-     */
-    EAttribute getPublisherData_Datavalue();
-
-    /**
-     * Returns the meta object for class '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime <em>Server Runtime</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for class '<em>Server Runtime</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime
-     * @generated
-     */
-	EClass getServerRuntime();
-
-    /**
-     * Returns the meta object for the attribute list '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup <em>Group</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute list '<em>Group</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EAttribute getServerRuntime_Group();
-
-    /**
-     * Returns the meta object for the containment reference list '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getProperty <em>Property</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the containment reference list '<em>Property</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getProperty()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EReference getServerRuntime_Property();
-
-    /**
-     * Returns the meta object for the attribute list '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup1 <em>Group1</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute list '<em>Group1</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup1()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EAttribute getServerRuntime_Group1();
-
-    /**
-     * Returns the meta object for the containment reference list '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getPort <em>Port</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the containment reference list '<em>Port</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getPort()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EReference getServerRuntime_Port();
-
-    /**
-     * Returns the meta object for the attribute list '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup2 <em>Group2</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute list '<em>Group2</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup2()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EAttribute getServerRuntime_Group2();
-
-    /**
-     * Returns the meta object for the containment reference list '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getModule <em>Module</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the containment reference list '<em>Module</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getModule()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EReference getServerRuntime_Module();
-
-    /**
-     * Returns the meta object for the containment reference '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getProject <em>Project</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the containment reference '<em>Project</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getProject()
-     * @see #getServerRuntime()
-     * @generated
-     */
-	EReference getServerRuntime_Project();
-
-    /**
-     * Returns the meta object for the containment reference '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getStart <em>Start</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the containment reference '<em>Start</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getStart()
-     * @see #getServerRuntime()
-     * @generated
-     */
-	EReference getServerRuntime_Start();
-
-    /**
-     * Returns the meta object for the containment reference '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getStop <em>Stop</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the containment reference '<em>Stop</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getStop()
-     * @see #getServerRuntime()
-     * @generated
-     */
-	EReference getServerRuntime_Stop();
-
-    /**
-     * Returns the meta object for the attribute list '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup3 <em>Group3</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute list '<em>Group3</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup3()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EAttribute getServerRuntime_Group3();
-
-    /**
-     * Returns the meta object for the containment reference list '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getPublisher <em>Publisher</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the containment reference list '<em>Publisher</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getPublisher()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EReference getServerRuntime_Publisher();
-
-    /**
-     * Returns the meta object for the attribute list '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup4 <em>Group4</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the attribute list '<em>Group4</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup4()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EAttribute getServerRuntime_Group4();
-
-    /**
-     * Returns the meta object for the containment reference list '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getClasspath <em>Classpath</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the containment reference list '<em>Classpath</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getClasspath()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EReference getServerRuntime_Classpath();
-
-    /**
-     * Returns the meta object for the containment reference '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getJndiConnection <em>Jndi Connection</em>}'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return the meta object for the containment reference '<em>Jndi Connection</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getJndiConnection()
-     * @see #getServerRuntime()
-     * @generated
-     */
-    EReference getServerRuntime_JndiConnection();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getName <em>Name</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Name</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getName()
-     * @see #getServerRuntime()
-     * @generated
-     */
-	EAttribute getServerRuntime_Name();
-
-    /**
-     * Returns the meta object for the attribute '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getVersion <em>Version</em>}'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the meta object for the attribute '<em>Version</em>'.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getVersion()
-     * @see #getServerRuntime()
-     * @generated
-     */
-	EAttribute getServerRuntime_Version();
-
-    /**
-     * Returns the factory that creates the instances of the model.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the factory that creates the instances of the model.
-     * @generated
-     */
-	ServerTypeFactory getServerTypeFactory();
-
-} //ServerTypePackage
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ArchiveTypeImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ArchiveTypeImpl.java
deleted file mode 100644
index 9edac20..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ArchiveTypeImpl.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ArchiveTypeImpl.java,v 1.2 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.ArchiveType;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Archive Type</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ArchiveTypeImpl#getPath <em>Path</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class ArchiveTypeImpl extends EObjectImpl implements ArchiveType {
-    /**
-     * The default value of the '{@link #getPath() <em>Path</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getPath()
-     * @generated
-     * @ordered
-     */
-	protected static final String PATH_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getPath() <em>Path</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getPath()
-     * @generated
-     * @ordered
-     */
-	protected String path = PATH_EDEFAULT;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected ArchiveTypeImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getArchiveType();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getPath() {
-        return path;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setPath(String newPath) {
-        String oldPath = path;
-        path = newPath;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.ARCHIVE_TYPE__PATH, oldPath, path));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.ARCHIVE_TYPE__PATH:
-                return getPath();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.ARCHIVE_TYPE__PATH:
-                setPath((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.ARCHIVE_TYPE__PATH:
-                setPath(PATH_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.ARCHIVE_TYPE__PATH:
-                return PATH_EDEFAULT == null ? path != null : !PATH_EDEFAULT.equals(path);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (path: ");
-        result.append(path);
-        result.append(')');
-        return result.toString();
-    }
-
-} //ArchiveTypeImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ClasspathImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ClasspathImpl.java
deleted file mode 100644
index 3297023..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ClasspathImpl.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ClasspathImpl.java,v 1.4 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import java.util.Collection;
-
-import java.util.List;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.emf.ecore.util.BasicFeatureMap;
-import org.eclipse.emf.ecore.util.FeatureMap;
-import org.eclipse.emf.ecore.util.InternalEList;
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.Classpath;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Classpath</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ClasspathImpl#getGroup <em>Group</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ClasspathImpl#getArchive <em>Archive</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ClasspathImpl#getId <em>Id</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ClasspathImpl#isIsLibrary <em>Is Library</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class ClasspathImpl extends EObjectImpl implements Classpath {
-    /**
-     * The cached value of the '{@link #getGroup() <em>Group</em>}' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getGroup()
-     * @generated
-     * @ordered
-     */
-    protected FeatureMap group = null;
-
-    /**
-     * The default value of the '{@link #getId() <em>Id</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getId()
-     * @generated
-     * @ordered
-     */
-	protected static final String ID_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getId()
-     * @generated
-     * @ordered
-     */
-	protected String id = ID_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #isIsLibrary() <em>Is Library</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #isIsLibrary()
-     * @generated
-     * @ordered
-     */
-	protected static final boolean IS_LIBRARY_EDEFAULT = false;
-
-    /**
-     * The cached value of the '{@link #isIsLibrary() <em>Is Library</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #isIsLibrary()
-     * @generated
-     * @ordered
-     */
-	protected boolean isLibrary = IS_LIBRARY_EDEFAULT;
-
-    /**
-     * This is true if the Is Library attribute has been set.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     * @ordered
-     */
-	protected boolean isLibraryESet = false;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected ClasspathImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getClasspath();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public FeatureMap getGroup() {
-        if (group == null) {
-            group = new BasicFeatureMap(this, ServerTypePackage.CLASSPATH__GROUP);
-        }
-        return group;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public List getArchive() {
-        return ((FeatureMap)getGroup()).list(ServerTypePackage.eINSTANCE.getClasspath_Archive());
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getId() {
-        return id;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setId(String newId) {
-        String oldId = id;
-        id = newId;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.CLASSPATH__ID, oldId, id));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean isIsLibrary() {
-        return isLibrary;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setIsLibrary(boolean newIsLibrary) {
-        boolean oldIsLibrary = isLibrary;
-        isLibrary = newIsLibrary;
-        boolean oldIsLibraryESet = isLibraryESet;
-        isLibraryESet = true;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.CLASSPATH__IS_LIBRARY, oldIsLibrary, isLibrary, !oldIsLibraryESet));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void unsetIsLibrary() {
-        boolean oldIsLibrary = isLibrary;
-        boolean oldIsLibraryESet = isLibraryESet;
-        isLibrary = IS_LIBRARY_EDEFAULT;
-        isLibraryESet = false;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.UNSET, ServerTypePackage.CLASSPATH__IS_LIBRARY, oldIsLibrary, IS_LIBRARY_EDEFAULT, oldIsLibraryESet));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean isSetIsLibrary() {
-        return isLibraryESet;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs) {
-        if (featureID >= 0) {
-            switch (eDerivedStructuralFeatureID(featureID, baseClass)) {
-                case ServerTypePackage.CLASSPATH__GROUP:
-                    return ((InternalEList)getGroup()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.CLASSPATH__ARCHIVE:
-                    return ((InternalEList)getArchive()).basicRemove(otherEnd, msgs);
-                default:
-                    return eDynamicInverseRemove(otherEnd, featureID, baseClass, msgs);
-            }
-        }
-        return eBasicSetContainer(null, featureID, msgs);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.CLASSPATH__GROUP:
-                return getGroup();
-            case ServerTypePackage.CLASSPATH__ARCHIVE:
-                return getArchive();
-            case ServerTypePackage.CLASSPATH__ID:
-                return getId();
-            case ServerTypePackage.CLASSPATH__IS_LIBRARY:
-                return isIsLibrary() ? Boolean.TRUE : Boolean.FALSE;
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.CLASSPATH__GROUP:
-                getGroup().clear();
-                getGroup().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.CLASSPATH__ARCHIVE:
-                getArchive().clear();
-                getArchive().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.CLASSPATH__ID:
-                setId((String)newValue);
-                return;
-            case ServerTypePackage.CLASSPATH__IS_LIBRARY:
-                setIsLibrary(((Boolean)newValue).booleanValue());
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.CLASSPATH__GROUP:
-                getGroup().clear();
-                return;
-            case ServerTypePackage.CLASSPATH__ARCHIVE:
-                getArchive().clear();
-                return;
-            case ServerTypePackage.CLASSPATH__ID:
-                setId(ID_EDEFAULT);
-                return;
-            case ServerTypePackage.CLASSPATH__IS_LIBRARY:
-                unsetIsLibrary();
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.CLASSPATH__GROUP:
-                return group != null && !group.isEmpty();
-            case ServerTypePackage.CLASSPATH__ARCHIVE:
-                return !getArchive().isEmpty();
-            case ServerTypePackage.CLASSPATH__ID:
-                return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
-            case ServerTypePackage.CLASSPATH__IS_LIBRARY:
-                return isSetIsLibrary();
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (group: ");
-        result.append(group);
-        result.append(", id: ");
-        result.append(id);
-        result.append(", isLibrary: ");
-        if (isLibraryESet) result.append(isLibrary); else result.append("<unset>");
-        result.append(')');
-        return result.toString();
-    }
-
-} //ClasspathImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/JndiConnectionImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/JndiConnectionImpl.java
deleted file mode 100644
index 759b9d7..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/JndiConnectionImpl.java
+++ /dev/null
@@ -1,301 +0,0 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id: JndiConnectionImpl.java,v 1.2 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.InternalEObject;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-
-import org.eclipse.emf.ecore.util.BasicFeatureMap;
-import org.eclipse.emf.ecore.util.FeatureMap;
-import org.eclipse.emf.ecore.util.InternalEList;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.JndiConnection;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Jndi Connection</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.JndiConnectionImpl#getProviderUrl <em>Provider Url</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.JndiConnectionImpl#getGroup <em>Group</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.JndiConnectionImpl#getJndiProperty <em>Jndi Property</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.JndiConnectionImpl#getInitialContextFactory <em>Initial Context Factory</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class JndiConnectionImpl extends EObjectImpl implements JndiConnection {
-    /**
-     * The default value of the '{@link #getProviderUrl() <em>Provider Url</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getProviderUrl()
-     * @generated
-     * @ordered
-     */
-    protected static final String PROVIDER_URL_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getProviderUrl() <em>Provider Url</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getProviderUrl()
-     * @generated
-     * @ordered
-     */
-    protected String providerUrl = PROVIDER_URL_EDEFAULT;
-
-    /**
-     * The cached value of the '{@link #getGroup() <em>Group</em>}' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getGroup()
-     * @generated
-     * @ordered
-     */
-    protected FeatureMap group = null;
-
-    /**
-     * The default value of the '{@link #getInitialContextFactory() <em>Initial Context Factory</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getInitialContextFactory()
-     * @generated
-     * @ordered
-     */
-    protected static final String INITIAL_CONTEXT_FACTORY_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getInitialContextFactory() <em>Initial Context Factory</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getInitialContextFactory()
-     * @generated
-     * @ordered
-     */
-    protected String initialContextFactory = INITIAL_CONTEXT_FACTORY_EDEFAULT;
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected JndiConnectionImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getJndiConnection();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public String getProviderUrl() {
-        return providerUrl;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void setProviderUrl(String newProviderUrl) {
-        String oldProviderUrl = providerUrl;
-        providerUrl = newProviderUrl;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.JNDI_CONNECTION__PROVIDER_URL, oldProviderUrl, providerUrl));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public FeatureMap getGroup() {
-        if (group == null) {
-            group = new BasicFeatureMap(this, ServerTypePackage.JNDI_CONNECTION__GROUP);
-        }
-        return group;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public List getJndiProperty() {
-        return ((FeatureMap)getGroup()).list(ServerTypePackage.eINSTANCE.getJndiConnection_JndiProperty());
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public String getInitialContextFactory() {
-        return initialContextFactory;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void setInitialContextFactory(String newInitialContextFactory) {
-        String oldInitialContextFactory = initialContextFactory;
-        initialContextFactory = newInitialContextFactory;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.JNDI_CONNECTION__INITIAL_CONTEXT_FACTORY, oldInitialContextFactory, initialContextFactory));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs) {
-        if (featureID >= 0) {
-            switch (eDerivedStructuralFeatureID(featureID, baseClass)) {
-                case ServerTypePackage.JNDI_CONNECTION__GROUP:
-                    return ((InternalEList)getGroup()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.JNDI_CONNECTION__JNDI_PROPERTY:
-                    return ((InternalEList)getJndiProperty()).basicRemove(otherEnd, msgs);
-                default:
-                    return eDynamicInverseRemove(otherEnd, featureID, baseClass, msgs);
-            }
-        }
-        return eBasicSetContainer(null, featureID, msgs);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.JNDI_CONNECTION__PROVIDER_URL:
-                return getProviderUrl();
-            case ServerTypePackage.JNDI_CONNECTION__GROUP:
-                return getGroup();
-            case ServerTypePackage.JNDI_CONNECTION__JNDI_PROPERTY:
-                return getJndiProperty();
-            case ServerTypePackage.JNDI_CONNECTION__INITIAL_CONTEXT_FACTORY:
-                return getInitialContextFactory();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.JNDI_CONNECTION__PROVIDER_URL:
-                setProviderUrl((String)newValue);
-                return;
-            case ServerTypePackage.JNDI_CONNECTION__GROUP:
-                getGroup().clear();
-                getGroup().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.JNDI_CONNECTION__JNDI_PROPERTY:
-                getJndiProperty().clear();
-                getJndiProperty().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.JNDI_CONNECTION__INITIAL_CONTEXT_FACTORY:
-                setInitialContextFactory((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.JNDI_CONNECTION__PROVIDER_URL:
-                setProviderUrl(PROVIDER_URL_EDEFAULT);
-                return;
-            case ServerTypePackage.JNDI_CONNECTION__GROUP:
-                getGroup().clear();
-                return;
-            case ServerTypePackage.JNDI_CONNECTION__JNDI_PROPERTY:
-                getJndiProperty().clear();
-                return;
-            case ServerTypePackage.JNDI_CONNECTION__INITIAL_CONTEXT_FACTORY:
-                setInitialContextFactory(INITIAL_CONTEXT_FACTORY_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.JNDI_CONNECTION__PROVIDER_URL:
-                return PROVIDER_URL_EDEFAULT == null ? providerUrl != null : !PROVIDER_URL_EDEFAULT.equals(providerUrl);
-            case ServerTypePackage.JNDI_CONNECTION__GROUP:
-                return group != null && !group.isEmpty();
-            case ServerTypePackage.JNDI_CONNECTION__JNDI_PROPERTY:
-                return !getJndiProperty().isEmpty();
-            case ServerTypePackage.JNDI_CONNECTION__INITIAL_CONTEXT_FACTORY:
-                return INITIAL_CONTEXT_FACTORY_EDEFAULT == null ? initialContextFactory != null : !INITIAL_CONTEXT_FACTORY_EDEFAULT.equals(initialContextFactory);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (providerUrl: ");
-        result.append(providerUrl);
-        result.append(", group: ");
-        result.append(group);
-        result.append(", initialContextFactory: ");
-        result.append(initialContextFactory);
-        result.append(')');
-        return result.toString();
-    }
-
-} //JndiConnectionImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/JndiPropertyImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/JndiPropertyImpl.java
deleted file mode 100644
index 4d532c5..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/JndiPropertyImpl.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id: JndiPropertyImpl.java,v 1.2 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.JndiProperty;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Jndi Property</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.JndiPropertyImpl#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.JndiPropertyImpl#getValue <em>Value</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class JndiPropertyImpl extends EObjectImpl implements JndiProperty {
-    /**
-     * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getName()
-     * @generated
-     * @ordered
-     */
-    protected static final String NAME_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getName()
-     * @generated
-     * @ordered
-     */
-    protected String name = NAME_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getValue() <em>Value</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getValue()
-     * @generated
-     * @ordered
-     */
-    protected static final String VALUE_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getValue() <em>Value</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getValue()
-     * @generated
-     * @ordered
-     */
-    protected String value = VALUE_EDEFAULT;
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected JndiPropertyImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getJndiProperty();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void setName(String newName) {
-        String oldName = name;
-        name = newName;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.JNDI_PROPERTY__NAME, oldName, name));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public String getValue() {
-        return value;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void setValue(String newValue) {
-        String oldValue = value;
-        value = newValue;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.JNDI_PROPERTY__VALUE, oldValue, value));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.JNDI_PROPERTY__NAME:
-                return getName();
-            case ServerTypePackage.JNDI_PROPERTY__VALUE:
-                return getValue();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.JNDI_PROPERTY__NAME:
-                setName((String)newValue);
-                return;
-            case ServerTypePackage.JNDI_PROPERTY__VALUE:
-                setValue((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.JNDI_PROPERTY__NAME:
-                setName(NAME_EDEFAULT);
-                return;
-            case ServerTypePackage.JNDI_PROPERTY__VALUE:
-                setValue(VALUE_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.JNDI_PROPERTY__NAME:
-                return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
-            case ServerTypePackage.JNDI_PROPERTY__VALUE:
-                return VALUE_EDEFAULT == null ? value != null : !VALUE_EDEFAULT.equals(value);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (name: ");
-        result.append(name);
-        result.append(", value: ");
-        result.append(value);
-        result.append(')');
-        return result.toString();
-    }
-
-} //JndiPropertyImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/LaunchConfigurationImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/LaunchConfigurationImpl.java
deleted file mode 100644
index 51e365d..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/LaunchConfigurationImpl.java
+++ /dev/null
@@ -1,421 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: LaunchConfigurationImpl.java,v 1.4 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Launch Configuration</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.LaunchConfigurationImpl#getMainClass <em>Main Class</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.LaunchConfigurationImpl#getWorkingDirectory <em>Working Directory</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.LaunchConfigurationImpl#getProgramArguments <em>Program Arguments</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.LaunchConfigurationImpl#getVmParameters <em>Vm Parameters</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.LaunchConfigurationImpl#getClasspathReference <em>Classpath Reference</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class LaunchConfigurationImpl extends EObjectImpl implements LaunchConfiguration {
-    /**
-     * The default value of the '{@link #getMainClass() <em>Main Class</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getMainClass()
-     * @generated
-     * @ordered
-     */
-    protected static final String MAIN_CLASS_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getMainClass() <em>Main Class</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getMainClass()
-     * @generated
-     * @ordered
-     */
-    protected String mainClass = MAIN_CLASS_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getWorkingDirectory() <em>Working Directory</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getWorkingDirectory()
-     * @generated
-     * @ordered
-     */
-	protected static final String WORKING_DIRECTORY_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getWorkingDirectory() <em>Working Directory</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getWorkingDirectory()
-     * @generated
-     * @ordered
-     */
-	protected String workingDirectory = WORKING_DIRECTORY_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getProgramArguments() <em>Program Arguments</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getProgramArguments()
-     * @generated
-     * @ordered
-     */
-	protected static final String PROGRAM_ARGUMENTS_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getProgramArguments() <em>Program Arguments</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getProgramArguments()
-     * @generated
-     * @ordered
-     */
-	protected String programArguments = PROGRAM_ARGUMENTS_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getVmParameters() <em>Vm Parameters</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getVmParameters()
-     * @generated
-     * @ordered
-     */
-	protected static final String VM_PARAMETERS_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getVmParameters() <em>Vm Parameters</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getVmParameters()
-     * @generated
-     * @ordered
-     */
-	protected String vmParameters = VM_PARAMETERS_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getClasspathReference() <em>Classpath Reference</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getClasspathReference()
-     * @generated
-     * @ordered
-     */
-	protected static final String CLASSPATH_REFERENCE_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getClasspathReference() <em>Classpath Reference</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getClasspathReference()
-     * @generated
-     * @ordered
-     */
-	protected String classpathReference = CLASSPATH_REFERENCE_EDEFAULT;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected LaunchConfigurationImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getLaunchConfiguration();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public String getMainClass() {
-        return mainClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void setMainClass(String newMainClass) {
-        String oldMainClass = mainClass;
-        mainClass = newMainClass;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.LAUNCH_CONFIGURATION__MAIN_CLASS, oldMainClass, mainClass));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getWorkingDirectory() {
-        return workingDirectory;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setWorkingDirectory(String newWorkingDirectory) {
-        String oldWorkingDirectory = workingDirectory;
-        workingDirectory = newWorkingDirectory;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.LAUNCH_CONFIGURATION__WORKING_DIRECTORY, oldWorkingDirectory, workingDirectory));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getProgramArguments() {
-		
-		return programArguments;
-    }
-
-	/**
-	 * @generated NOT
-	 * @return
-	 */
-	private String cleanWhiteSpace(String string)
-	{
-		if(string==null)
-			return null;
-        char[] chars = string.toCharArray();
-		for (int i = 0; i < chars.length; i++) {
-			if(Character.isWhitespace(chars[i]))
-				chars[i]=' ';
-		}
-		return (new String(chars)).trim();
-		
-	}
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setProgramArguments(String newProgramArguments) {
-        String oldProgramArguments = programArguments;
-        programArguments = cleanWhiteSpace(newProgramArguments);
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.LAUNCH_CONFIGURATION__PROGRAM_ARGUMENTS, oldProgramArguments, programArguments));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getVmParameters() {
-        return vmParameters;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setVmParameters(String newVmParameters) {
-        String oldVmParameters = vmParameters;
-        vmParameters = cleanWhiteSpace(newVmParameters);
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.LAUNCH_CONFIGURATION__VM_PARAMETERS, oldVmParameters, vmParameters));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getClasspathReference() {
-        return classpathReference;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setClasspathReference(String newClasspathReference) {
-        String oldClasspathReference = classpathReference;
-        classpathReference = newClasspathReference;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.LAUNCH_CONFIGURATION__CLASSPATH_REFERENCE, oldClasspathReference, classpathReference));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.LAUNCH_CONFIGURATION__MAIN_CLASS:
-                return getMainClass();
-            case ServerTypePackage.LAUNCH_CONFIGURATION__WORKING_DIRECTORY:
-                return getWorkingDirectory();
-            case ServerTypePackage.LAUNCH_CONFIGURATION__PROGRAM_ARGUMENTS:
-                return getProgramArguments();
-            case ServerTypePackage.LAUNCH_CONFIGURATION__VM_PARAMETERS:
-                return getVmParameters();
-            case ServerTypePackage.LAUNCH_CONFIGURATION__CLASSPATH_REFERENCE:
-                return getClasspathReference();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.LAUNCH_CONFIGURATION__MAIN_CLASS:
-                setMainClass((String)newValue);
-                return;
-            case ServerTypePackage.LAUNCH_CONFIGURATION__WORKING_DIRECTORY:
-                setWorkingDirectory((String)newValue);
-                return;
-            case ServerTypePackage.LAUNCH_CONFIGURATION__PROGRAM_ARGUMENTS:
-                setProgramArguments((String)newValue);
-                return;
-            case ServerTypePackage.LAUNCH_CONFIGURATION__VM_PARAMETERS:
-                setVmParameters((String)newValue);
-                return;
-            case ServerTypePackage.LAUNCH_CONFIGURATION__CLASSPATH_REFERENCE:
-                setClasspathReference((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.LAUNCH_CONFIGURATION__MAIN_CLASS:
-                setMainClass(MAIN_CLASS_EDEFAULT);
-                return;
-            case ServerTypePackage.LAUNCH_CONFIGURATION__WORKING_DIRECTORY:
-                setWorkingDirectory(WORKING_DIRECTORY_EDEFAULT);
-                return;
-            case ServerTypePackage.LAUNCH_CONFIGURATION__PROGRAM_ARGUMENTS:
-                setProgramArguments(PROGRAM_ARGUMENTS_EDEFAULT);
-                return;
-            case ServerTypePackage.LAUNCH_CONFIGURATION__VM_PARAMETERS:
-                setVmParameters(VM_PARAMETERS_EDEFAULT);
-                return;
-            case ServerTypePackage.LAUNCH_CONFIGURATION__CLASSPATH_REFERENCE:
-                setClasspathReference(CLASSPATH_REFERENCE_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.LAUNCH_CONFIGURATION__MAIN_CLASS:
-                return MAIN_CLASS_EDEFAULT == null ? mainClass != null : !MAIN_CLASS_EDEFAULT.equals(mainClass);
-            case ServerTypePackage.LAUNCH_CONFIGURATION__WORKING_DIRECTORY:
-                return WORKING_DIRECTORY_EDEFAULT == null ? workingDirectory != null : !WORKING_DIRECTORY_EDEFAULT.equals(workingDirectory);
-            case ServerTypePackage.LAUNCH_CONFIGURATION__PROGRAM_ARGUMENTS:
-                return PROGRAM_ARGUMENTS_EDEFAULT == null ? programArguments != null : !PROGRAM_ARGUMENTS_EDEFAULT.equals(programArguments);
-            case ServerTypePackage.LAUNCH_CONFIGURATION__VM_PARAMETERS:
-                return VM_PARAMETERS_EDEFAULT == null ? vmParameters != null : !VM_PARAMETERS_EDEFAULT.equals(vmParameters);
-            case ServerTypePackage.LAUNCH_CONFIGURATION__CLASSPATH_REFERENCE:
-                return CLASSPATH_REFERENCE_EDEFAULT == null ? classpathReference != null : !CLASSPATH_REFERENCE_EDEFAULT.equals(classpathReference);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (mainClass: ");
-        result.append(mainClass);
-        result.append(", workingDirectory: ");
-        result.append(workingDirectory);
-        result.append(", programArguments: ");
-        result.append(programArguments);
-        result.append(", vmParameters: ");
-        result.append(vmParameters);
-        result.append(", classpathReference: ");
-        result.append(classpathReference);
-        result.append(')');
-        return result.toString();
-    }
-
-} //LaunchConfigurationImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ModuleImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ModuleImpl.java
deleted file mode 100644
index 91f3147..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ModuleImpl.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ModuleImpl.java,v 1.2 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.Module;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Module</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ModuleImpl#getType <em>Type</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ModuleImpl#getPublishDir <em>Publish Dir</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ModuleImpl#getPublisherReference <em>Publisher Reference</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class ModuleImpl extends EObjectImpl implements Module {
-    /**
-     * The default value of the '{@link #getType() <em>Type</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getType()
-     * @generated
-     * @ordered
-     */
-	protected static final String TYPE_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getType()
-     * @generated
-     * @ordered
-     */
-	protected String type = TYPE_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getPublishDir() <em>Publish Dir</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getPublishDir()
-     * @generated
-     * @ordered
-     */
-	protected static final String PUBLISH_DIR_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getPublishDir() <em>Publish Dir</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getPublishDir()
-     * @generated
-     * @ordered
-     */
-	protected String publishDir = PUBLISH_DIR_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getPublisherReference() <em>Publisher Reference</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getPublisherReference()
-     * @generated
-     * @ordered
-     */
-	protected static final String PUBLISHER_REFERENCE_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getPublisherReference() <em>Publisher Reference</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getPublisherReference()
-     * @generated
-     * @ordered
-     */
-	protected String publisherReference = PUBLISHER_REFERENCE_EDEFAULT;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected ModuleImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getModule();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getType() {
-        return type;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setType(String newType) {
-        String oldType = type;
-        type = newType;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.MODULE__TYPE, oldType, type));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getPublishDir() {
-        return publishDir;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setPublishDir(String newPublishDir) {
-        String oldPublishDir = publishDir;
-        publishDir = newPublishDir;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.MODULE__PUBLISH_DIR, oldPublishDir, publishDir));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getPublisherReference() {
-        return publisherReference;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setPublisherReference(String newPublisherReference) {
-        String oldPublisherReference = publisherReference;
-        publisherReference = newPublisherReference;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.MODULE__PUBLISHER_REFERENCE, oldPublisherReference, publisherReference));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.MODULE__TYPE:
-                return getType();
-            case ServerTypePackage.MODULE__PUBLISH_DIR:
-                return getPublishDir();
-            case ServerTypePackage.MODULE__PUBLISHER_REFERENCE:
-                return getPublisherReference();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.MODULE__TYPE:
-                setType((String)newValue);
-                return;
-            case ServerTypePackage.MODULE__PUBLISH_DIR:
-                setPublishDir((String)newValue);
-                return;
-            case ServerTypePackage.MODULE__PUBLISHER_REFERENCE:
-                setPublisherReference((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.MODULE__TYPE:
-                setType(TYPE_EDEFAULT);
-                return;
-            case ServerTypePackage.MODULE__PUBLISH_DIR:
-                setPublishDir(PUBLISH_DIR_EDEFAULT);
-                return;
-            case ServerTypePackage.MODULE__PUBLISHER_REFERENCE:
-                setPublisherReference(PUBLISHER_REFERENCE_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.MODULE__TYPE:
-                return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals(type);
-            case ServerTypePackage.MODULE__PUBLISH_DIR:
-                return PUBLISH_DIR_EDEFAULT == null ? publishDir != null : !PUBLISH_DIR_EDEFAULT.equals(publishDir);
-            case ServerTypePackage.MODULE__PUBLISHER_REFERENCE:
-                return PUBLISHER_REFERENCE_EDEFAULT == null ? publisherReference != null : !PUBLISHER_REFERENCE_EDEFAULT.equals(publisherReference);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (type: ");
-        result.append(type);
-        result.append(", publishDir: ");
-        result.append(publishDir);
-        result.append(", publisherReference: ");
-        result.append(publisherReference);
-        result.append(')');
-        return result.toString();
-    }
-
-} //ModuleImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PortImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PortImpl.java
deleted file mode 100644
index 428798c..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PortImpl.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: PortImpl.java,v 1.2 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.Port;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Port</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PortImpl#getNo <em>No</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PortImpl#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PortImpl#getProtocol <em>Protocol</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PortImpl extends EObjectImpl implements Port {
-    /**
-     * The default value of the '{@link #getNo() <em>No</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getNo()
-     * @generated
-     * @ordered
-     */
-	protected static final String NO_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getNo() <em>No</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getNo()
-     * @generated
-     * @ordered
-     */
-	protected String no = NO_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getName()
-     * @generated
-     * @ordered
-     */
-	protected static final String NAME_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getName()
-     * @generated
-     * @ordered
-     */
-	protected String name = NAME_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getProtocol() <em>Protocol</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getProtocol()
-     * @generated
-     * @ordered
-     */
-	protected static final String PROTOCOL_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getProtocol() <em>Protocol</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getProtocol()
-     * @generated
-     * @ordered
-     */
-	protected String protocol = PROTOCOL_EDEFAULT;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected PortImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getPort();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getNo() {
-        return no;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setNo(String newNo) {
-        String oldNo = no;
-        no = newNo;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PORT__NO, oldNo, no));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getName() {
-        return name;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setName(String newName) {
-        String oldName = name;
-        name = newName;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PORT__NAME, oldName, name));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getProtocol() {
-        return protocol;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setProtocol(String newProtocol) {
-        String oldProtocol = protocol;
-        protocol = newProtocol;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PORT__PROTOCOL, oldProtocol, protocol));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PORT__NO:
-                return getNo();
-            case ServerTypePackage.PORT__NAME:
-                return getName();
-            case ServerTypePackage.PORT__PROTOCOL:
-                return getProtocol();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PORT__NO:
-                setNo((String)newValue);
-                return;
-            case ServerTypePackage.PORT__NAME:
-                setName((String)newValue);
-                return;
-            case ServerTypePackage.PORT__PROTOCOL:
-                setProtocol((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PORT__NO:
-                setNo(NO_EDEFAULT);
-                return;
-            case ServerTypePackage.PORT__NAME:
-                setName(NAME_EDEFAULT);
-                return;
-            case ServerTypePackage.PORT__PROTOCOL:
-                setProtocol(PROTOCOL_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PORT__NO:
-                return NO_EDEFAULT == null ? no != null : !NO_EDEFAULT.equals(no);
-            case ServerTypePackage.PORT__NAME:
-                return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
-            case ServerTypePackage.PORT__PROTOCOL:
-                return PROTOCOL_EDEFAULT == null ? protocol != null : !PROTOCOL_EDEFAULT.equals(protocol);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (no: ");
-        result.append(no);
-        result.append(", name: ");
-        result.append(name);
-        result.append(", protocol: ");
-        result.append(protocol);
-        result.append(')');
-        return result.toString();
-    }
-
-} //PortImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ProjectImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ProjectImpl.java
deleted file mode 100644
index 97ef83e..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ProjectImpl.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ProjectImpl.java,v 1.2 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.Project;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Project</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ProjectImpl#getClasspathReference <em>Classpath Reference</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class ProjectImpl extends EObjectImpl implements Project {
-    /**
-     * The default value of the '{@link #getClasspathReference() <em>Classpath Reference</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getClasspathReference()
-     * @generated
-     * @ordered
-     */
-	protected static final String CLASSPATH_REFERENCE_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getClasspathReference() <em>Classpath Reference</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getClasspathReference()
-     * @generated
-     * @ordered
-     */
-	protected String classpathReference = CLASSPATH_REFERENCE_EDEFAULT;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected ProjectImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getProject();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getClasspathReference() {
-        return classpathReference;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setClasspathReference(String newClasspathReference) {
-        String oldClasspathReference = classpathReference;
-        classpathReference = newClasspathReference;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PROJECT__CLASSPATH_REFERENCE, oldClasspathReference, classpathReference));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PROJECT__CLASSPATH_REFERENCE:
-                return getClasspathReference();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PROJECT__CLASSPATH_REFERENCE:
-                setClasspathReference((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PROJECT__CLASSPATH_REFERENCE:
-                setClasspathReference(CLASSPATH_REFERENCE_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PROJECT__CLASSPATH_REFERENCE:
-                return CLASSPATH_REFERENCE_EDEFAULT == null ? classpathReference != null : !CLASSPATH_REFERENCE_EDEFAULT.equals(classpathReference);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (classpathReference: ");
-        result.append(classpathReference);
-        result.append(')');
-        return result.toString();
-    }
-
-} //ProjectImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PropertyImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PropertyImpl.java
deleted file mode 100644
index 5cfd2f8..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PropertyImpl.java
+++ /dev/null
@@ -1,404 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: PropertyImpl.java,v 1.2 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.Property;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Property</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PropertyImpl#getContext <em>Context</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PropertyImpl#getDefault <em>Default</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PropertyImpl#getId <em>Id</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PropertyImpl#getLabel <em>Label</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PropertyImpl#getType <em>Type</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PropertyImpl extends EObjectImpl implements Property {
-    /**
-     * The default value of the '{@link #getContext() <em>Context</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getContext()
-     * @generated
-     * @ordered
-     */
-	protected static final String CONTEXT_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getContext() <em>Context</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getContext()
-     * @generated
-     * @ordered
-     */
-	protected String context = CONTEXT_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getDefault() <em>Default</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getDefault()
-     * @generated
-     * @ordered
-     */
-	protected static final String DEFAULT_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getDefault() <em>Default</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getDefault()
-     * @generated
-     * @ordered
-     */
-	protected String default_ = DEFAULT_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getId() <em>Id</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getId()
-     * @generated
-     * @ordered
-     */
-	protected static final String ID_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getId()
-     * @generated
-     * @ordered
-     */
-	protected String id = ID_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getLabel() <em>Label</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getLabel()
-     * @generated
-     * @ordered
-     */
-	protected static final String LABEL_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getLabel() <em>Label</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getLabel()
-     * @generated
-     * @ordered
-     */
-	protected String label = LABEL_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getType() <em>Type</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getType()
-     * @generated
-     * @ordered
-     */
-	protected static final String TYPE_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getType()
-     * @generated
-     * @ordered
-     */
-	protected String type = TYPE_EDEFAULT;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected PropertyImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getProperty();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getContext() {
-        return context;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setContext(String newContext) {
-        String oldContext = context;
-        context = newContext;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PROPERTY__CONTEXT, oldContext, context));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getDefault() {
-        return default_;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setDefault(String newDefault) {
-        String oldDefault = default_;
-        default_ = newDefault;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PROPERTY__DEFAULT, oldDefault, default_));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getId() {
-        return id;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setId(String newId) {
-        String oldId = id;
-        id = newId;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PROPERTY__ID, oldId, id));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getLabel() {
-        return label;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setLabel(String newLabel) {
-        String oldLabel = label;
-        label = newLabel;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PROPERTY__LABEL, oldLabel, label));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getType() {
-        return type;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setType(String newType) {
-        String oldType = type;
-        type = newType;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PROPERTY__TYPE, oldType, type));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PROPERTY__CONTEXT:
-                return getContext();
-            case ServerTypePackage.PROPERTY__DEFAULT:
-                return getDefault();
-            case ServerTypePackage.PROPERTY__ID:
-                return getId();
-            case ServerTypePackage.PROPERTY__LABEL:
-                return getLabel();
-            case ServerTypePackage.PROPERTY__TYPE:
-                return getType();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PROPERTY__CONTEXT:
-                setContext((String)newValue);
-                return;
-            case ServerTypePackage.PROPERTY__DEFAULT:
-                setDefault((String)newValue);
-                return;
-            case ServerTypePackage.PROPERTY__ID:
-                setId((String)newValue);
-                return;
-            case ServerTypePackage.PROPERTY__LABEL:
-                setLabel((String)newValue);
-                return;
-            case ServerTypePackage.PROPERTY__TYPE:
-                setType((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PROPERTY__CONTEXT:
-                setContext(CONTEXT_EDEFAULT);
-                return;
-            case ServerTypePackage.PROPERTY__DEFAULT:
-                setDefault(DEFAULT_EDEFAULT);
-                return;
-            case ServerTypePackage.PROPERTY__ID:
-                setId(ID_EDEFAULT);
-                return;
-            case ServerTypePackage.PROPERTY__LABEL:
-                setLabel(LABEL_EDEFAULT);
-                return;
-            case ServerTypePackage.PROPERTY__TYPE:
-                setType(TYPE_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PROPERTY__CONTEXT:
-                return CONTEXT_EDEFAULT == null ? context != null : !CONTEXT_EDEFAULT.equals(context);
-            case ServerTypePackage.PROPERTY__DEFAULT:
-                return DEFAULT_EDEFAULT == null ? default_ != null : !DEFAULT_EDEFAULT.equals(default_);
-            case ServerTypePackage.PROPERTY__ID:
-                return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
-            case ServerTypePackage.PROPERTY__LABEL:
-                return LABEL_EDEFAULT == null ? label != null : !LABEL_EDEFAULT.equals(label);
-            case ServerTypePackage.PROPERTY__TYPE:
-                return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals(type);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (context: ");
-        result.append(context);
-        result.append(", default: ");
-        result.append(default_);
-        result.append(", id: ");
-        result.append(id);
-        result.append(", label: ");
-        result.append(label);
-        result.append(", type: ");
-        result.append(type);
-        result.append(')');
-        return result.toString();
-    }
-
-} //PropertyImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PublisherDataImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PublisherDataImpl.java
deleted file mode 100644
index 32389a1..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PublisherDataImpl.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id: PublisherDataImpl.java,v 1.2 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.PublisherData;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Publisher Data</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PublisherDataImpl#getDataname <em>Dataname</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PublisherDataImpl#getDatavalue <em>Datavalue</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PublisherDataImpl extends EObjectImpl implements PublisherData {
-    /**
-     * The default value of the '{@link #getDataname() <em>Dataname</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getDataname()
-     * @generated
-     * @ordered
-     */
-    protected static final String DATANAME_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getDataname() <em>Dataname</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getDataname()
-     * @generated
-     * @ordered
-     */
-    protected String dataname = DATANAME_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getDatavalue() <em>Datavalue</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getDatavalue()
-     * @generated
-     * @ordered
-     */
-    protected static final String DATAVALUE_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getDatavalue() <em>Datavalue</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getDatavalue()
-     * @generated
-     * @ordered
-     */
-    protected String datavalue = DATAVALUE_EDEFAULT;
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected PublisherDataImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getPublisherData();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public String getDataname() {
-        return dataname;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void setDataname(String newDataname) {
-        String oldDataname = dataname;
-        dataname = newDataname;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PUBLISHER_DATA__DATANAME, oldDataname, dataname));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public String getDatavalue() {
-        return datavalue;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void setDatavalue(String newDatavalue) {
-        String oldDatavalue = datavalue;
-        datavalue = newDatavalue;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PUBLISHER_DATA__DATAVALUE, oldDatavalue, datavalue));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PUBLISHER_DATA__DATANAME:
-                return getDataname();
-            case ServerTypePackage.PUBLISHER_DATA__DATAVALUE:
-                return getDatavalue();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PUBLISHER_DATA__DATANAME:
-                setDataname((String)newValue);
-                return;
-            case ServerTypePackage.PUBLISHER_DATA__DATAVALUE:
-                setDatavalue((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PUBLISHER_DATA__DATANAME:
-                setDataname(DATANAME_EDEFAULT);
-                return;
-            case ServerTypePackage.PUBLISHER_DATA__DATAVALUE:
-                setDatavalue(DATAVALUE_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PUBLISHER_DATA__DATANAME:
-                return DATANAME_EDEFAULT == null ? dataname != null : !DATANAME_EDEFAULT.equals(dataname);
-            case ServerTypePackage.PUBLISHER_DATA__DATAVALUE:
-                return DATAVALUE_EDEFAULT == null ? datavalue != null : !DATAVALUE_EDEFAULT.equals(datavalue);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (dataname: ");
-        result.append(dataname);
-        result.append(", datavalue: ");
-        result.append(datavalue);
-        result.append(')');
-        return result.toString();
-    }
-
-} //PublisherDataImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PublisherImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PublisherImpl.java
deleted file mode 100644
index 464d0ca..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/PublisherImpl.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: PublisherImpl.java,v 1.4 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import java.util.Collection;
-import java.util.List;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.emf.ecore.util.BasicFeatureMap;
-import org.eclipse.emf.ecore.util.FeatureMap;
-import org.eclipse.emf.ecore.util.InternalEList;
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.Publisher;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Publisher</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PublisherImpl#getGroup <em>Group</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PublisherImpl#getPublisherdata <em>Publisherdata</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.PublisherImpl#getId <em>Id</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class PublisherImpl extends EObjectImpl implements Publisher {
-    /**
-     * The cached value of the '{@link #getGroup() <em>Group</em>}' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getGroup()
-     * @generated
-     * @ordered
-     */
-    protected FeatureMap group = null;
-
-    /**
-     * The default value of the '{@link #getId() <em>Id</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getId()
-     * @generated
-     * @ordered
-     */
-	protected static final String ID_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getId() <em>Id</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getId()
-     * @generated
-     * @ordered
-     */
-	protected String id = ID_EDEFAULT;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected PublisherImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getPublisher();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public FeatureMap getGroup() {
-        if (group == null) {
-            group = new BasicFeatureMap(this, ServerTypePackage.PUBLISHER__GROUP);
-        }
-        return group;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public List getPublisherdata() {
-        return ((FeatureMap)getGroup()).list(ServerTypePackage.eINSTANCE.getPublisher_Publisherdata());
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getId() {
-        return id;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setId(String newId) {
-        String oldId = id;
-        id = newId;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.PUBLISHER__ID, oldId, id));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs) {
-        if (featureID >= 0) {
-            switch (eDerivedStructuralFeatureID(featureID, baseClass)) {
-                case ServerTypePackage.PUBLISHER__GROUP:
-                    return ((InternalEList)getGroup()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.PUBLISHER__PUBLISHERDATA:
-                    return ((InternalEList)getPublisherdata()).basicRemove(otherEnd, msgs);
-                default:
-                    return eDynamicInverseRemove(otherEnd, featureID, baseClass, msgs);
-            }
-        }
-        return eBasicSetContainer(null, featureID, msgs);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PUBLISHER__GROUP:
-                return getGroup();
-            case ServerTypePackage.PUBLISHER__PUBLISHERDATA:
-                return getPublisherdata();
-            case ServerTypePackage.PUBLISHER__ID:
-                return getId();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PUBLISHER__GROUP:
-                getGroup().clear();
-                getGroup().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.PUBLISHER__PUBLISHERDATA:
-                getPublisherdata().clear();
-                getPublisherdata().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.PUBLISHER__ID:
-                setId((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PUBLISHER__GROUP:
-                getGroup().clear();
-                return;
-            case ServerTypePackage.PUBLISHER__PUBLISHERDATA:
-                getPublisherdata().clear();
-                return;
-            case ServerTypePackage.PUBLISHER__ID:
-                setId(ID_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.PUBLISHER__GROUP:
-                return group != null && !group.isEmpty();
-            case ServerTypePackage.PUBLISHER__PUBLISHERDATA:
-                return !getPublisherdata().isEmpty();
-            case ServerTypePackage.PUBLISHER__ID:
-                return ID_EDEFAULT == null ? id != null : !ID_EDEFAULT.equals(id);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (group: ");
-        result.append(group);
-        result.append(", id: ");
-        result.append(id);
-        result.append(')');
-        return result.toString();
-    }
-
-} //PublisherImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ServerRuntimeImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ServerRuntimeImpl.java
deleted file mode 100644
index 1047aca..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ServerRuntimeImpl.java
+++ /dev/null
@@ -1,966 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ServerRuntimeImpl.java,v 1.4 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Iterator;
-import java.util.Map;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.NotificationChain;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.InternalEObject;
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
-import org.eclipse.emf.ecore.util.BasicFeatureMap;
-import org.eclipse.emf.ecore.util.FeatureMap;
-import org.eclipse.emf.ecore.util.InternalEList;
-import org.eclipse.jst.server.generic.servertype.definition.JndiConnection;
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.internal.xml.Resolver;
-import org.eclipse.jst.server.generic.servertype.definition.Classpath;
-import org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration;
-import org.eclipse.jst.server.generic.servertype.definition.Module;
-import org.eclipse.jst.server.generic.servertype.definition.Project;
-import org.eclipse.jst.server.generic.servertype.definition.Publisher;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>Server Runtime</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getGroup <em>Group</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getProperty <em>Property</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getGroup1 <em>Group1</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getPort <em>Port</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getGroup2 <em>Group2</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getModule <em>Module</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getProject <em>Project</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getStart <em>Start</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getStop <em>Stop</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getGroup3 <em>Group3</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getPublisher <em>Publisher</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getGroup4 <em>Group4</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getClasspath <em>Classpath</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getJndiConnection <em>Jndi Connection</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerRuntimeImpl#getVersion <em>Version</em>}</li>
- * </ul>
- * </p>
- *
- * @generated
- */
-public class ServerRuntimeImpl extends EObjectImpl implements ServerRuntime {
-    /**
-     * The cached value of the '{@link #getGroup() <em>Group</em>}' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getGroup()
-     * @generated
-     * @ordered
-     */
-    protected FeatureMap group = null;
-
-    /**
-     * The cached value of the '{@link #getGroup1() <em>Group1</em>}' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getGroup1()
-     * @generated
-     * @ordered
-     */
-    protected FeatureMap group1 = null;
-
-    /**
-     * The cached value of the '{@link #getGroup2() <em>Group2</em>}' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getGroup2()
-     * @generated
-     * @ordered
-     */
-    protected FeatureMap group2 = null;
-
-    /**
-     * The cached value of the '{@link #getProject() <em>Project</em>}' containment reference.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getProject()
-     * @generated
-     * @ordered
-     */
-	protected Project project = null;
-
-    /**
-     * The cached value of the '{@link #getStart() <em>Start</em>}' containment reference.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getStart()
-     * @generated
-     * @ordered
-     */
-	protected LaunchConfiguration start = null;
-
-    /**
-     * The cached value of the '{@link #getStop() <em>Stop</em>}' containment reference.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getStop()
-     * @generated
-     * @ordered
-     */
-	protected LaunchConfiguration stop = null;
-
-    /**
-     * The cached value of the '{@link #getGroup3() <em>Group3</em>}' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getGroup3()
-     * @generated
-     * @ordered
-     */
-    protected FeatureMap group3 = null;
-
-    /**
-     * The cached value of the '{@link #getGroup4() <em>Group4</em>}' attribute list.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getGroup4()
-     * @generated
-     * @ordered
-     */
-    protected FeatureMap group4 = null;
-
-    /**
-     * The cached value of the '{@link #getJndiConnection() <em>Jndi Connection</em>}' containment reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @see #getJndiConnection()
-     * @generated
-     * @ordered
-     */
-    protected JndiConnection jndiConnection = null;
-
-    /**
-     * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getName()
-     * @generated
-     * @ordered
-     */
-	protected static final String NAME_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getName()
-     * @generated
-     * @ordered
-     */
-	protected String name = NAME_EDEFAULT;
-
-    /**
-     * The default value of the '{@link #getVersion() <em>Version</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getVersion()
-     * @generated
-     * @ordered
-     */
-	protected static final String VERSION_EDEFAULT = null;
-
-    /**
-     * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #getVersion()
-     * @generated
-     * @ordered
-     */
-	protected String version = VERSION_EDEFAULT;
-
-	/**
-	 * The cached value of the '{@link #getGroup() <em>Group</em>}' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getGroup()
-	 * @generated NOT
-	 * @ordered
-	 */
-	protected String filename = null;
-	
-
-	/**
-	 * The cached value of the '{@link #getGroup() <em>Group</em>}' attribute list.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @see #getGroup()
-	 * @generated NOT
-	 * @ordered
-	 */
-	protected Resolver resolver = new Resolver(this);
-	private String declaringConfigurationElementNamespace;
-    private String id =null;
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected ServerRuntimeImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected EClass eStaticClass() {
-        return ServerTypePackage.eINSTANCE.getServerRuntime();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public FeatureMap getGroup() {
-        if (group == null) {
-            group = new BasicFeatureMap(this, ServerTypePackage.SERVER_RUNTIME__GROUP);
-        }
-        return group;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public List getProperty() {
-        return ((FeatureMap)getGroup()).list(ServerTypePackage.eINSTANCE.getServerRuntime_Property());
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public FeatureMap getGroup1() {
-        if (group1 == null) {
-            group1 = new BasicFeatureMap(this, ServerTypePackage.SERVER_RUNTIME__GROUP1);
-        }
-        return group1;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public List getPort() {
-        return ((FeatureMap)getGroup1()).list(ServerTypePackage.eINSTANCE.getServerRuntime_Port());
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public FeatureMap getGroup2() {
-        if (group2 == null) {
-            group2 = new BasicFeatureMap(this, ServerTypePackage.SERVER_RUNTIME__GROUP2);
-        }
-        return group2;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public List getModule() {
-        return ((FeatureMap)getGroup2()).list(ServerTypePackage.eINSTANCE.getServerRuntime_Module());
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Project getProject() {
-        return project;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public NotificationChain basicSetProject(Project newProject, NotificationChain msgs) {
-        Project oldProject = project;
-        project = newProject;
-        if (eNotificationRequired()) {
-            ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ServerTypePackage.SERVER_RUNTIME__PROJECT, oldProject, newProject);
-            if (msgs == null) msgs = notification; else msgs.add(notification);
-        }
-        return msgs;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setProject(Project newProject) {
-        if (newProject != project) {
-            NotificationChain msgs = null;
-            if (project != null)
-                msgs = ((InternalEObject)project).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ServerTypePackage.SERVER_RUNTIME__PROJECT, null, msgs);
-            if (newProject != null)
-                msgs = ((InternalEObject)newProject).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ServerTypePackage.SERVER_RUNTIME__PROJECT, null, msgs);
-            msgs = basicSetProject(newProject, msgs);
-            if (msgs != null) msgs.dispatch();
-        }
-        else if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.SERVER_RUNTIME__PROJECT, newProject, newProject));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public LaunchConfiguration getStart() {
-        return start;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public NotificationChain basicSetStart(LaunchConfiguration newStart, NotificationChain msgs) {
-        LaunchConfiguration oldStart = start;
-        start = newStart;
-        if (eNotificationRequired()) {
-            ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ServerTypePackage.SERVER_RUNTIME__START, oldStart, newStart);
-            if (msgs == null) msgs = notification; else msgs.add(notification);
-        }
-        return msgs;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setStart(LaunchConfiguration newStart) {
-        if (newStart != start) {
-            NotificationChain msgs = null;
-            if (start != null)
-                msgs = ((InternalEObject)start).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ServerTypePackage.SERVER_RUNTIME__START, null, msgs);
-            if (newStart != null)
-                msgs = ((InternalEObject)newStart).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ServerTypePackage.SERVER_RUNTIME__START, null, msgs);
-            msgs = basicSetStart(newStart, msgs);
-            if (msgs != null) msgs.dispatch();
-        }
-        else if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.SERVER_RUNTIME__START, newStart, newStart));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public LaunchConfiguration getStop() {
-        return stop;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public NotificationChain basicSetStop(LaunchConfiguration newStop, NotificationChain msgs) {
-        LaunchConfiguration oldStop = stop;
-        stop = newStop;
-        if (eNotificationRequired()) {
-            ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ServerTypePackage.SERVER_RUNTIME__STOP, oldStop, newStop);
-            if (msgs == null) msgs = notification; else msgs.add(notification);
-        }
-        return msgs;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setStop(LaunchConfiguration newStop) {
-        if (newStop != stop) {
-            NotificationChain msgs = null;
-            if (stop != null)
-                msgs = ((InternalEObject)stop).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ServerTypePackage.SERVER_RUNTIME__STOP, null, msgs);
-            if (newStop != null)
-                msgs = ((InternalEObject)newStop).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ServerTypePackage.SERVER_RUNTIME__STOP, null, msgs);
-            msgs = basicSetStop(newStop, msgs);
-            if (msgs != null) msgs.dispatch();
-        }
-        else if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.SERVER_RUNTIME__STOP, newStop, newStop));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public FeatureMap getGroup3() {
-        if (group3 == null) {
-            group3 = new BasicFeatureMap(this, ServerTypePackage.SERVER_RUNTIME__GROUP3);
-        }
-        return group3;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public List getPublisher() {
-        return ((FeatureMap)getGroup3()).list(ServerTypePackage.eINSTANCE.getServerRuntime_Publisher());
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public FeatureMap getGroup4() {
-        if (group4 == null) {
-            group4 = new BasicFeatureMap(this, ServerTypePackage.SERVER_RUNTIME__GROUP4);
-        }
-        return group4;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public List getClasspath() {
-        return ((FeatureMap)getGroup4()).list(ServerTypePackage.eINSTANCE.getServerRuntime_Classpath());
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public JndiConnection getJndiConnection() {
-        return jndiConnection;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public NotificationChain basicSetJndiConnection(JndiConnection newJndiConnection, NotificationChain msgs) {
-        JndiConnection oldJndiConnection = jndiConnection;
-        jndiConnection = newJndiConnection;
-        if (eNotificationRequired()) {
-            ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ServerTypePackage.SERVER_RUNTIME__JNDI_CONNECTION, oldJndiConnection, newJndiConnection);
-            if (msgs == null) msgs = notification; else msgs.add(notification);
-        }
-        return msgs;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public void setJndiConnection(JndiConnection newJndiConnection) {
-        if (newJndiConnection != jndiConnection) {
-            NotificationChain msgs = null;
-            if (jndiConnection != null)
-                msgs = ((InternalEObject)jndiConnection).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ServerTypePackage.SERVER_RUNTIME__JNDI_CONNECTION, null, msgs);
-            if (newJndiConnection != null)
-                msgs = ((InternalEObject)newJndiConnection).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ServerTypePackage.SERVER_RUNTIME__JNDI_CONNECTION, null, msgs);
-            msgs = basicSetJndiConnection(newJndiConnection, msgs);
-            if (msgs != null) msgs.dispatch();
-        }
-        else if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.SERVER_RUNTIME__JNDI_CONNECTION, newJndiConnection, newJndiConnection));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getName() {
-        return name;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setName(String newName) {
-        String oldName = name;
-        name = newName;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.SERVER_RUNTIME__NAME, oldName, name));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String getVersion() {
-        return version;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void setVersion(String newVersion) {
-        String oldVersion = version;
-        version = newVersion;
-        if (eNotificationRequired())
-            eNotify(new ENotificationImpl(this, Notification.SET, ServerTypePackage.SERVER_RUNTIME__VERSION, oldVersion, version));
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, Class baseClass, NotificationChain msgs) {
-        if (featureID >= 0) {
-            switch (eDerivedStructuralFeatureID(featureID, baseClass)) {
-                case ServerTypePackage.SERVER_RUNTIME__GROUP:
-                    return ((InternalEList)getGroup()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__PROPERTY:
-                    return ((InternalEList)getProperty()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__GROUP1:
-                    return ((InternalEList)getGroup1()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__PORT:
-                    return ((InternalEList)getPort()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__GROUP2:
-                    return ((InternalEList)getGroup2()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__MODULE:
-                    return ((InternalEList)getModule()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__PROJECT:
-                    return basicSetProject(null, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__START:
-                    return basicSetStart(null, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__STOP:
-                    return basicSetStop(null, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__GROUP3:
-                    return ((InternalEList)getGroup3()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__PUBLISHER:
-                    return ((InternalEList)getPublisher()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__GROUP4:
-                    return ((InternalEList)getGroup4()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__CLASSPATH:
-                    return ((InternalEList)getClasspath()).basicRemove(otherEnd, msgs);
-                case ServerTypePackage.SERVER_RUNTIME__JNDI_CONNECTION:
-                    return basicSetJndiConnection(null, msgs);
-                default:
-                    return eDynamicInverseRemove(otherEnd, featureID, baseClass, msgs);
-            }
-        }
-        return eBasicSetContainer(null, featureID, msgs);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Object eGet(EStructuralFeature eFeature, boolean resolve) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.SERVER_RUNTIME__GROUP:
-                return getGroup();
-            case ServerTypePackage.SERVER_RUNTIME__PROPERTY:
-                return getProperty();
-            case ServerTypePackage.SERVER_RUNTIME__GROUP1:
-                return getGroup1();
-            case ServerTypePackage.SERVER_RUNTIME__PORT:
-                return getPort();
-            case ServerTypePackage.SERVER_RUNTIME__GROUP2:
-                return getGroup2();
-            case ServerTypePackage.SERVER_RUNTIME__MODULE:
-                return getModule();
-            case ServerTypePackage.SERVER_RUNTIME__PROJECT:
-                return getProject();
-            case ServerTypePackage.SERVER_RUNTIME__START:
-                return getStart();
-            case ServerTypePackage.SERVER_RUNTIME__STOP:
-                return getStop();
-            case ServerTypePackage.SERVER_RUNTIME__GROUP3:
-                return getGroup3();
-            case ServerTypePackage.SERVER_RUNTIME__PUBLISHER:
-                return getPublisher();
-            case ServerTypePackage.SERVER_RUNTIME__GROUP4:
-                return getGroup4();
-            case ServerTypePackage.SERVER_RUNTIME__CLASSPATH:
-                return getClasspath();
-            case ServerTypePackage.SERVER_RUNTIME__JNDI_CONNECTION:
-                return getJndiConnection();
-            case ServerTypePackage.SERVER_RUNTIME__NAME:
-                return getName();
-            case ServerTypePackage.SERVER_RUNTIME__VERSION:
-                return getVersion();
-        }
-        return eDynamicGet(eFeature, resolve);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eSet(EStructuralFeature eFeature, Object newValue) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.SERVER_RUNTIME__GROUP:
-                getGroup().clear();
-                getGroup().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__PROPERTY:
-                getProperty().clear();
-                getProperty().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__GROUP1:
-                getGroup1().clear();
-                getGroup1().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__PORT:
-                getPort().clear();
-                getPort().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__GROUP2:
-                getGroup2().clear();
-                getGroup2().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__MODULE:
-                getModule().clear();
-                getModule().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__PROJECT:
-                setProject((Project)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__START:
-                setStart((LaunchConfiguration)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__STOP:
-                setStop((LaunchConfiguration)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__GROUP3:
-                getGroup3().clear();
-                getGroup3().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__PUBLISHER:
-                getPublisher().clear();
-                getPublisher().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__GROUP4:
-                getGroup4().clear();
-                getGroup4().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__CLASSPATH:
-                getClasspath().clear();
-                getClasspath().addAll((Collection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__JNDI_CONNECTION:
-                setJndiConnection((JndiConnection)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__NAME:
-                setName((String)newValue);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__VERSION:
-                setVersion((String)newValue);
-                return;
-        }
-        eDynamicSet(eFeature, newValue);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void eUnset(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.SERVER_RUNTIME__GROUP:
-                getGroup().clear();
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__PROPERTY:
-                getProperty().clear();
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__GROUP1:
-                getGroup1().clear();
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__PORT:
-                getPort().clear();
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__GROUP2:
-                getGroup2().clear();
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__MODULE:
-                getModule().clear();
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__PROJECT:
-                setProject((Project)null);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__START:
-                setStart((LaunchConfiguration)null);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__STOP:
-                setStop((LaunchConfiguration)null);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__GROUP3:
-                getGroup3().clear();
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__PUBLISHER:
-                getPublisher().clear();
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__GROUP4:
-                getGroup4().clear();
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__CLASSPATH:
-                getClasspath().clear();
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__JNDI_CONNECTION:
-                setJndiConnection((JndiConnection)null);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__NAME:
-                setName(NAME_EDEFAULT);
-                return;
-            case ServerTypePackage.SERVER_RUNTIME__VERSION:
-                setVersion(VERSION_EDEFAULT);
-                return;
-        }
-        eDynamicUnset(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public boolean eIsSet(EStructuralFeature eFeature) {
-        switch (eDerivedStructuralFeatureID(eFeature)) {
-            case ServerTypePackage.SERVER_RUNTIME__GROUP:
-                return group != null && !group.isEmpty();
-            case ServerTypePackage.SERVER_RUNTIME__PROPERTY:
-                return !getProperty().isEmpty();
-            case ServerTypePackage.SERVER_RUNTIME__GROUP1:
-                return group1 != null && !group1.isEmpty();
-            case ServerTypePackage.SERVER_RUNTIME__PORT:
-                return !getPort().isEmpty();
-            case ServerTypePackage.SERVER_RUNTIME__GROUP2:
-                return group2 != null && !group2.isEmpty();
-            case ServerTypePackage.SERVER_RUNTIME__MODULE:
-                return !getModule().isEmpty();
-            case ServerTypePackage.SERVER_RUNTIME__PROJECT:
-                return project != null;
-            case ServerTypePackage.SERVER_RUNTIME__START:
-                return start != null;
-            case ServerTypePackage.SERVER_RUNTIME__STOP:
-                return stop != null;
-            case ServerTypePackage.SERVER_RUNTIME__GROUP3:
-                return group3 != null && !group3.isEmpty();
-            case ServerTypePackage.SERVER_RUNTIME__PUBLISHER:
-                return !getPublisher().isEmpty();
-            case ServerTypePackage.SERVER_RUNTIME__GROUP4:
-                return group4 != null && !group4.isEmpty();
-            case ServerTypePackage.SERVER_RUNTIME__CLASSPATH:
-                return !getClasspath().isEmpty();
-            case ServerTypePackage.SERVER_RUNTIME__JNDI_CONNECTION:
-                return jndiConnection != null;
-            case ServerTypePackage.SERVER_RUNTIME__NAME:
-                return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
-            case ServerTypePackage.SERVER_RUNTIME__VERSION:
-                return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version);
-        }
-        return eDynamicIsSet(eFeature);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public String toString() {
-        if (eIsProxy()) return super.toString();
-
-        StringBuffer result = new StringBuffer(super.toString());
-        result.append(" (group: ");
-        result.append(group);
-        result.append(", group1: ");
-        result.append(group1);
-        result.append(", group2: ");
-        result.append(group2);
-        result.append(", group3: ");
-        result.append(group3);
-        result.append(", group4: ");
-        result.append(group4);
-        result.append(", name: ");
-        result.append(name);
-        result.append(", version: ");
-        result.append(version);
-        result.append(')');
-        return result.toString();
-    }
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated NOT
-	 */
-	public Publisher getPublisher(String id) {
-		Iterator iterator = this.getPublisher().iterator();
-		while (iterator.hasNext()) {
-			Publisher publisher = (Publisher) iterator.next();
-			if(id.equals(publisher.getId()))
-				return publisher;
-		}
-		return null;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated NOT
-	 */
-	public Module getModule(String type) {
-		Iterator iterator = this.getModule().iterator();
-		while (iterator.hasNext()) {
-			Module module = (Module) iterator.next();
-			if(type.equals(module.getType()))
-				return module;
-		}
-		return null;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated NOT
-	 */
-	public Classpath getClasspath(String ref) {
-		Iterator iterator = this.getClasspath().iterator();
-		while (iterator.hasNext()) {
-			Classpath cp = (Classpath) iterator.next();
-			if(ref.equals(cp.getId()))
-				return cp;
-		}
-		return null;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated NOT
-	 */
-	public String getFilename() {
-		return filename;
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated NOT
-	 */
-	public void setFilename(String fn) {
-		this.filename = fn;		
-	}
-
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated NOT
-	 */
-	public void setPropertyValues(Map properties) {
-		this.resolver.setPropertyValues(properties);
-		
-	}
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated NOT
-	 */
-	public Resolver getResolver() {
-		return this.resolver;
-	}
-
-    /* (non-Javadoc)
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getDeclaringBundle()
-     */
-    public String getConfigurationElementNamespace() {
-           return declaringConfigurationElementNamespace;
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#setConfigurationElementNamespace(java.lang.String)
-     */
-    public void setConfigurationElementNamespace(String namespace) {
-        this.declaringConfigurationElementNamespace=namespace;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-        
-    }
-	
-	
-} //ServerRuntimeImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ServerTypeFactoryImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ServerTypeFactoryImpl.java
deleted file mode 100644
index dfe1a27..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ServerTypeFactoryImpl.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ServerTypeFactoryImpl.java,v 1.3 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-
-import org.eclipse.emf.ecore.impl.EFactoryImpl;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.*;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Factory</b>.
- * <!-- end-user-doc -->
- * @generated
- */
-public class ServerTypeFactoryImpl extends EFactoryImpl implements ServerTypeFactory {
-    /**
-     * Creates and instance of the factory.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public ServerTypeFactoryImpl() {
-        super();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EObject create(EClass eClass) {
-        switch (eClass.getClassifierID()) {
-            case ServerTypePackage.ARCHIVE_TYPE: return createArchiveType();
-            case ServerTypePackage.CLASSPATH: return createClasspath();
-            case ServerTypePackage.JNDI_CONNECTION: return createJndiConnection();
-            case ServerTypePackage.JNDI_PROPERTY: return createJndiProperty();
-            case ServerTypePackage.LAUNCH_CONFIGURATION: return createLaunchConfiguration();
-            case ServerTypePackage.MODULE: return createModule();
-            case ServerTypePackage.PORT: return createPort();
-            case ServerTypePackage.PROJECT: return createProject();
-            case ServerTypePackage.PROPERTY: return createProperty();
-            case ServerTypePackage.PUBLISHER: return createPublisher();
-            case ServerTypePackage.PUBLISHER_DATA: return createPublisherData();
-            case ServerTypePackage.SERVER_RUNTIME: return createServerRuntime();
-            default:
-                throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
-        }
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public ArchiveType createArchiveType() {
-        ArchiveTypeImpl archiveType = new ArchiveTypeImpl();
-        return archiveType;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Classpath createClasspath() {
-        ClasspathImpl classpath = new ClasspathImpl();
-        return classpath;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public JndiConnection createJndiConnection() {
-        JndiConnectionImpl jndiConnection = new JndiConnectionImpl();
-        return jndiConnection;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public JndiProperty createJndiProperty() {
-        JndiPropertyImpl jndiProperty = new JndiPropertyImpl();
-        return jndiProperty;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public LaunchConfiguration createLaunchConfiguration() {
-        LaunchConfigurationImpl launchConfiguration = new LaunchConfigurationImpl();
-        return launchConfiguration;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Module createModule() {
-        ModuleImpl module = new ModuleImpl();
-        return module;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Port createPort() {
-        PortImpl port = new PortImpl();
-        return port;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Project createProject() {
-        ProjectImpl project = new ProjectImpl();
-        return project;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Property createProperty() {
-        PropertyImpl property = new PropertyImpl();
-        return property;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Publisher createPublisher() {
-        PublisherImpl publisher = new PublisherImpl();
-        return publisher;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public PublisherData createPublisherData() {
-        PublisherDataImpl publisherData = new PublisherDataImpl();
-        return publisherData;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public ServerRuntime createServerRuntime() {
-        ServerRuntimeImpl serverRuntime = new ServerRuntimeImpl();
-        return serverRuntime;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public ServerTypePackage getServerTypePackage() {
-        return (ServerTypePackage)getEPackage();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @deprecated
-     * @generated
-     */
-	public static ServerTypePackage getPackage() {
-        return ServerTypePackage.eINSTANCE;
-    }
-
-} //ServerTypeFactoryImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ServerTypePackageImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ServerTypePackageImpl.java
deleted file mode 100644
index fd358c1..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/ServerTypePackageImpl.java
+++ /dev/null
@@ -1,1429 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ServerTypePackageImpl.java,v 1.3 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.impl;
-
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-
-import org.eclipse.emf.ecore.impl.EPackageImpl;
-
-import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
-
-import org.eclipse.emf.ecore.xml.type.impl.XMLTypePackageImpl;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.ArchiveType;
-import org.eclipse.jst.server.generic.servertype.definition.Classpath;
-import org.eclipse.jst.server.generic.servertype.definition.JndiConnection;
-import org.eclipse.jst.server.generic.servertype.definition.JndiProperty;
-import org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration;
-import org.eclipse.jst.server.generic.servertype.definition.Module;
-import org.eclipse.jst.server.generic.servertype.definition.Port;
-import org.eclipse.jst.server.generic.servertype.definition.Project;
-import org.eclipse.jst.server.generic.servertype.definition.Property;
-import org.eclipse.jst.server.generic.servertype.definition.Publisher;
-import org.eclipse.jst.server.generic.servertype.definition.PublisherData;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.jst.server.generic.servertype.definition.ServerTypeFactory;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model <b>Package</b>.
- * <!-- end-user-doc -->
- * @generated
- */
-public class ServerTypePackageImpl extends EPackageImpl implements ServerTypePackage {
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private EClass archiveTypeEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private EClass classpathEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    private EClass jndiConnectionEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    private EClass jndiPropertyEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private EClass launchConfigurationEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private EClass moduleEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private EClass portEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private EClass projectEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private EClass propertyEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private EClass publisherEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    private EClass publisherDataEClass = null;
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private EClass serverRuntimeEClass = null;
-
-    /**
-     * Creates an instance of the model <b>Package</b>, registered with
-     * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
-     * package URI value.
-     * <p>Note: the correct way to create the package is via the static
-     * factory method {@link #init init()}, which also performs
-     * initialization of the package, or returns the registered package,
-     * if one already exists.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see org.eclipse.emf.ecore.EPackage.Registry
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#eNS_URI
-     * @see #init()
-     * @generated
-     */
-	private ServerTypePackageImpl() {
-        super(eNS_URI, ServerTypeFactory.eINSTANCE);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private static boolean isInited = false;
-
-    /**
-     * Creates, registers, and initializes the <b>Package</b> for this
-     * model, and for any others upon which it depends.  Simple
-     * dependencies are satisfied by calling this method on all
-     * dependent packages before doing anything else.  This method drives
-     * initialization for interdependent packages directly, in parallel
-     * with this package, itself.
-     * <p>Of this package and its interdependencies, all packages which
-     * have not yet been registered by their URI values are first created
-     * and registered.  The packages are then initialized in two steps:
-     * meta-model objects for all of the packages are created before any
-     * are initialized, since one package's meta-model objects may refer to
-     * those of another.
-     * <p>Invocation of this method will not affect any packages that have
-     * already been initialized.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #eNS_URI
-     * @see #createPackageContents()
-     * @see #initializePackageContents()
-     * @generated
-     */
-	public static ServerTypePackage init() {
-        if (isInited) return (ServerTypePackage)EPackage.Registry.INSTANCE.getEPackage(ServerTypePackage.eNS_URI);
-
-        // Obtain or create and register package
-        ServerTypePackageImpl theServerTypePackage = (ServerTypePackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof ServerTypePackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new ServerTypePackageImpl());
-
-        isInited = true;
-
-        // Initialize simple dependencies
-        XMLTypePackageImpl.init();
-
-        // Create package meta-data objects
-        theServerTypePackage.createPackageContents();
-
-        // Initialize created meta-data
-        theServerTypePackage.initializePackageContents();
-
-        // Mark meta-data to indicate it can't be changed
-        theServerTypePackage.freeze();
-
-        return theServerTypePackage;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EClass getArchiveType() {
-        return archiveTypeEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getArchiveType_Path() {
-        return (EAttribute)archiveTypeEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EClass getClasspath() {
-        return classpathEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getClasspath_Group() {
-        return (EAttribute)classpathEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EReference getClasspath_Archive() {
-        return (EReference)classpathEClass.getEStructuralFeatures().get(1);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getClasspath_Id() {
-        return (EAttribute)classpathEClass.getEStructuralFeatures().get(2);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getClasspath_IsLibrary() {
-        return (EAttribute)classpathEClass.getEStructuralFeatures().get(3);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EClass getJndiConnection() {
-        return jndiConnectionEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getJndiConnection_ProviderUrl() {
-        return (EAttribute)jndiConnectionEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getJndiConnection_Group() {
-        return (EAttribute)jndiConnectionEClass.getEStructuralFeatures().get(1);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EReference getJndiConnection_JndiProperty() {
-        return (EReference)jndiConnectionEClass.getEStructuralFeatures().get(2);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getJndiConnection_InitialContextFactory() {
-        return (EAttribute)jndiConnectionEClass.getEStructuralFeatures().get(3);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EClass getJndiProperty() {
-        return jndiPropertyEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getJndiProperty_Name() {
-        return (EAttribute)jndiPropertyEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getJndiProperty_Value() {
-        return (EAttribute)jndiPropertyEClass.getEStructuralFeatures().get(1);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EClass getLaunchConfiguration() {
-        return launchConfigurationEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getLaunchConfiguration_MainClass() {
-        return (EAttribute)launchConfigurationEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getLaunchConfiguration_WorkingDirectory() {
-        return (EAttribute)launchConfigurationEClass.getEStructuralFeatures().get(1);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getLaunchConfiguration_ProgramArguments() {
-        return (EAttribute)launchConfigurationEClass.getEStructuralFeatures().get(2);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getLaunchConfiguration_VmParameters() {
-        return (EAttribute)launchConfigurationEClass.getEStructuralFeatures().get(3);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getLaunchConfiguration_ClasspathReference() {
-        return (EAttribute)launchConfigurationEClass.getEStructuralFeatures().get(4);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EClass getModule() {
-        return moduleEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getModule_Type() {
-        return (EAttribute)moduleEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getModule_PublishDir() {
-        return (EAttribute)moduleEClass.getEStructuralFeatures().get(1);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getModule_PublisherReference() {
-        return (EAttribute)moduleEClass.getEStructuralFeatures().get(2);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EClass getPort() {
-        return portEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getPort_No() {
-        return (EAttribute)portEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getPort_Name() {
-        return (EAttribute)portEClass.getEStructuralFeatures().get(1);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getPort_Protocol() {
-        return (EAttribute)portEClass.getEStructuralFeatures().get(2);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EClass getProject() {
-        return projectEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getProject_ClasspathReference() {
-        return (EAttribute)projectEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EClass getProperty() {
-        return propertyEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getProperty_Context() {
-        return (EAttribute)propertyEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getProperty_Default() {
-        return (EAttribute)propertyEClass.getEStructuralFeatures().get(1);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getProperty_Id() {
-        return (EAttribute)propertyEClass.getEStructuralFeatures().get(2);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getProperty_Label() {
-        return (EAttribute)propertyEClass.getEStructuralFeatures().get(3);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getProperty_Type() {
-        return (EAttribute)propertyEClass.getEStructuralFeatures().get(4);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EClass getPublisher() {
-        return publisherEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getPublisher_Group() {
-        return (EAttribute)publisherEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EReference getPublisher_Publisherdata() {
-        return (EReference)publisherEClass.getEStructuralFeatures().get(1);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getPublisher_Id() {
-        return (EAttribute)publisherEClass.getEStructuralFeatures().get(2);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EClass getPublisherData() {
-        return publisherDataEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getPublisherData_Dataname() {
-        return (EAttribute)publisherDataEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getPublisherData_Datavalue() {
-        return (EAttribute)publisherDataEClass.getEStructuralFeatures().get(1);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EClass getServerRuntime() {
-        return serverRuntimeEClass;
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getServerRuntime_Group() {
-        return (EAttribute)serverRuntimeEClass.getEStructuralFeatures().get(0);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EReference getServerRuntime_Property() {
-        return (EReference)serverRuntimeEClass.getEStructuralFeatures().get(1);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getServerRuntime_Group1() {
-        return (EAttribute)serverRuntimeEClass.getEStructuralFeatures().get(2);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EReference getServerRuntime_Port() {
-        return (EReference)serverRuntimeEClass.getEStructuralFeatures().get(3);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getServerRuntime_Group2() {
-        return (EAttribute)serverRuntimeEClass.getEStructuralFeatures().get(4);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EReference getServerRuntime_Module() {
-        return (EReference)serverRuntimeEClass.getEStructuralFeatures().get(5);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EReference getServerRuntime_Project() {
-        return (EReference)serverRuntimeEClass.getEStructuralFeatures().get(6);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EReference getServerRuntime_Start() {
-        return (EReference)serverRuntimeEClass.getEStructuralFeatures().get(7);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EReference getServerRuntime_Stop() {
-        return (EReference)serverRuntimeEClass.getEStructuralFeatures().get(8);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getServerRuntime_Group3() {
-        return (EAttribute)serverRuntimeEClass.getEStructuralFeatures().get(9);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EReference getServerRuntime_Publisher() {
-        return (EReference)serverRuntimeEClass.getEStructuralFeatures().get(10);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EAttribute getServerRuntime_Group4() {
-        return (EAttribute)serverRuntimeEClass.getEStructuralFeatures().get(11);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EReference getServerRuntime_Classpath() {
-        return (EReference)serverRuntimeEClass.getEStructuralFeatures().get(12);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @generated
-     */
-    public EReference getServerRuntime_JndiConnection() {
-        return (EReference)serverRuntimeEClass.getEStructuralFeatures().get(13);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getServerRuntime_Name() {
-        return (EAttribute)serverRuntimeEClass.getEStructuralFeatures().get(14);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public EAttribute getServerRuntime_Version() {
-        return (EAttribute)serverRuntimeEClass.getEStructuralFeatures().get(15);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public ServerTypeFactory getServerTypeFactory() {
-        return (ServerTypeFactory)getEFactoryInstance();
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private boolean isCreated = false;
-
-    /**
-     * Creates the meta-model objects for the package.  This method is
-     * guarded to have no affect on any invocation but its first.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void createPackageContents() {
-        if (isCreated) return;
-        isCreated = true;
-
-        // Create classes and their features
-        archiveTypeEClass = createEClass(ARCHIVE_TYPE);
-        createEAttribute(archiveTypeEClass, ARCHIVE_TYPE__PATH);
-
-        classpathEClass = createEClass(CLASSPATH);
-        createEAttribute(classpathEClass, CLASSPATH__GROUP);
-        createEReference(classpathEClass, CLASSPATH__ARCHIVE);
-        createEAttribute(classpathEClass, CLASSPATH__ID);
-        createEAttribute(classpathEClass, CLASSPATH__IS_LIBRARY);
-
-        jndiConnectionEClass = createEClass(JNDI_CONNECTION);
-        createEAttribute(jndiConnectionEClass, JNDI_CONNECTION__PROVIDER_URL);
-        createEAttribute(jndiConnectionEClass, JNDI_CONNECTION__GROUP);
-        createEReference(jndiConnectionEClass, JNDI_CONNECTION__JNDI_PROPERTY);
-        createEAttribute(jndiConnectionEClass, JNDI_CONNECTION__INITIAL_CONTEXT_FACTORY);
-
-        jndiPropertyEClass = createEClass(JNDI_PROPERTY);
-        createEAttribute(jndiPropertyEClass, JNDI_PROPERTY__NAME);
-        createEAttribute(jndiPropertyEClass, JNDI_PROPERTY__VALUE);
-
-        launchConfigurationEClass = createEClass(LAUNCH_CONFIGURATION);
-        createEAttribute(launchConfigurationEClass, LAUNCH_CONFIGURATION__MAIN_CLASS);
-        createEAttribute(launchConfigurationEClass, LAUNCH_CONFIGURATION__WORKING_DIRECTORY);
-        createEAttribute(launchConfigurationEClass, LAUNCH_CONFIGURATION__PROGRAM_ARGUMENTS);
-        createEAttribute(launchConfigurationEClass, LAUNCH_CONFIGURATION__VM_PARAMETERS);
-        createEAttribute(launchConfigurationEClass, LAUNCH_CONFIGURATION__CLASSPATH_REFERENCE);
-
-        moduleEClass = createEClass(MODULE);
-        createEAttribute(moduleEClass, MODULE__TYPE);
-        createEAttribute(moduleEClass, MODULE__PUBLISH_DIR);
-        createEAttribute(moduleEClass, MODULE__PUBLISHER_REFERENCE);
-
-        portEClass = createEClass(PORT);
-        createEAttribute(portEClass, PORT__NO);
-        createEAttribute(portEClass, PORT__NAME);
-        createEAttribute(portEClass, PORT__PROTOCOL);
-
-        projectEClass = createEClass(PROJECT);
-        createEAttribute(projectEClass, PROJECT__CLASSPATH_REFERENCE);
-
-        propertyEClass = createEClass(PROPERTY);
-        createEAttribute(propertyEClass, PROPERTY__CONTEXT);
-        createEAttribute(propertyEClass, PROPERTY__DEFAULT);
-        createEAttribute(propertyEClass, PROPERTY__ID);
-        createEAttribute(propertyEClass, PROPERTY__LABEL);
-        createEAttribute(propertyEClass, PROPERTY__TYPE);
-
-        publisherEClass = createEClass(PUBLISHER);
-        createEAttribute(publisherEClass, PUBLISHER__GROUP);
-        createEReference(publisherEClass, PUBLISHER__PUBLISHERDATA);
-        createEAttribute(publisherEClass, PUBLISHER__ID);
-
-        publisherDataEClass = createEClass(PUBLISHER_DATA);
-        createEAttribute(publisherDataEClass, PUBLISHER_DATA__DATANAME);
-        createEAttribute(publisherDataEClass, PUBLISHER_DATA__DATAVALUE);
-
-        serverRuntimeEClass = createEClass(SERVER_RUNTIME);
-        createEAttribute(serverRuntimeEClass, SERVER_RUNTIME__GROUP);
-        createEReference(serverRuntimeEClass, SERVER_RUNTIME__PROPERTY);
-        createEAttribute(serverRuntimeEClass, SERVER_RUNTIME__GROUP1);
-        createEReference(serverRuntimeEClass, SERVER_RUNTIME__PORT);
-        createEAttribute(serverRuntimeEClass, SERVER_RUNTIME__GROUP2);
-        createEReference(serverRuntimeEClass, SERVER_RUNTIME__MODULE);
-        createEReference(serverRuntimeEClass, SERVER_RUNTIME__PROJECT);
-        createEReference(serverRuntimeEClass, SERVER_RUNTIME__START);
-        createEReference(serverRuntimeEClass, SERVER_RUNTIME__STOP);
-        createEAttribute(serverRuntimeEClass, SERVER_RUNTIME__GROUP3);
-        createEReference(serverRuntimeEClass, SERVER_RUNTIME__PUBLISHER);
-        createEAttribute(serverRuntimeEClass, SERVER_RUNTIME__GROUP4);
-        createEReference(serverRuntimeEClass, SERVER_RUNTIME__CLASSPATH);
-        createEReference(serverRuntimeEClass, SERVER_RUNTIME__JNDI_CONNECTION);
-        createEAttribute(serverRuntimeEClass, SERVER_RUNTIME__NAME);
-        createEAttribute(serverRuntimeEClass, SERVER_RUNTIME__VERSION);
-    }
-
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	private boolean isInitialized = false;
-
-    /**
-     * Complete the initialization of the package and its meta-model.  This
-     * method is guarded to have no affect on any invocation but its first.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public void initializePackageContents() {
-        if (isInitialized) return;
-        isInitialized = true;
-
-        // Initialize package
-        setName(eNAME);
-        setNsPrefix(eNS_PREFIX);
-        setNsURI(eNS_URI);
-
-        // Obtain other dependent packages
-        XMLTypePackageImpl theXMLTypePackage = (XMLTypePackageImpl)EPackage.Registry.INSTANCE.getEPackage(XMLTypePackage.eNS_URI);
-
-        // Add supertypes to classes
-
-        // Initialize classes and features; add operations and parameters
-        initEClass(archiveTypeEClass, ArchiveType.class, "ArchiveType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getArchiveType_Path(), theXMLTypePackage.getString(), "path", null, 0, 1, ArchiveType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(classpathEClass, Classpath.class, "Classpath", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getClasspath_Group(), ecorePackage.getEFeatureMapEntry(), "group", null, 0, -1, Classpath.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEReference(getClasspath_Archive(), this.getArchiveType(), null, "archive", null, 1, -1, Classpath.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
-        initEAttribute(getClasspath_Id(), theXMLTypePackage.getString(), "id", null, 0, 1, Classpath.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getClasspath_IsLibrary(), theXMLTypePackage.getBoolean(), "isLibrary", null, 0, 1, Classpath.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(jndiConnectionEClass, JndiConnection.class, "JndiConnection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getJndiConnection_ProviderUrl(), theXMLTypePackage.getString(), "providerUrl", null, 1, 1, JndiConnection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getJndiConnection_Group(), ecorePackage.getEFeatureMapEntry(), "group", null, 0, -1, JndiConnection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEReference(getJndiConnection_JndiProperty(), this.getJndiProperty(), null, "jndiProperty", null, 0, -1, JndiConnection.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
-        initEAttribute(getJndiConnection_InitialContextFactory(), theXMLTypePackage.getString(), "initialContextFactory", null, 1, 1, JndiConnection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(jndiPropertyEClass, JndiProperty.class, "JndiProperty", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getJndiProperty_Name(), theXMLTypePackage.getString(), "name", null, 1, 1, JndiProperty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getJndiProperty_Value(), theXMLTypePackage.getString(), "value", null, 1, 1, JndiProperty.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(launchConfigurationEClass, LaunchConfiguration.class, "LaunchConfiguration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getLaunchConfiguration_MainClass(), theXMLTypePackage.getString(), "mainClass", null, 1, 1, LaunchConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getLaunchConfiguration_WorkingDirectory(), theXMLTypePackage.getString(), "workingDirectory", null, 1, 1, LaunchConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getLaunchConfiguration_ProgramArguments(), theXMLTypePackage.getString(), "programArguments", null, 1, 1, LaunchConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getLaunchConfiguration_VmParameters(), theXMLTypePackage.getString(), "vmParameters", null, 1, 1, LaunchConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getLaunchConfiguration_ClasspathReference(), theXMLTypePackage.getString(), "classpathReference", null, 1, 1, LaunchConfiguration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(moduleEClass, Module.class, "Module", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getModule_Type(), theXMLTypePackage.getString(), "type", null, 1, 1, Module.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getModule_PublishDir(), theXMLTypePackage.getString(), "publishDir", null, 1, 1, Module.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getModule_PublisherReference(), theXMLTypePackage.getString(), "publisherReference", null, 1, 1, Module.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(portEClass, Port.class, "Port", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getPort_No(), theXMLTypePackage.getString(), "no", null, 1, 1, Port.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getPort_Name(), theXMLTypePackage.getString(), "name", null, 1, 1, Port.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getPort_Protocol(), theXMLTypePackage.getString(), "protocol", null, 1, 1, Port.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(projectEClass, Project.class, "Project", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getProject_ClasspathReference(), theXMLTypePackage.getString(), "classpathReference", null, 1, 1, Project.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(propertyEClass, Property.class, "Property", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getProperty_Context(), theXMLTypePackage.getString(), "context", null, 0, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getProperty_Default(), theXMLTypePackage.getString(), "default", null, 0, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getProperty_Id(), theXMLTypePackage.getString(), "id", null, 0, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getProperty_Label(), theXMLTypePackage.getString(), "label", null, 0, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getProperty_Type(), theXMLTypePackage.getString(), "type", null, 0, 1, Property.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(publisherEClass, Publisher.class, "Publisher", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getPublisher_Group(), ecorePackage.getEFeatureMapEntry(), "group", null, 0, -1, Publisher.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEReference(getPublisher_Publisherdata(), this.getPublisherData(), null, "publisherdata", null, 1, -1, Publisher.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
-        initEAttribute(getPublisher_Id(), theXMLTypePackage.getString(), "id", null, 0, 1, Publisher.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(publisherDataEClass, PublisherData.class, "PublisherData", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getPublisherData_Dataname(), theXMLTypePackage.getString(), "dataname", null, 1, 1, PublisherData.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getPublisherData_Datavalue(), theXMLTypePackage.getString(), "datavalue", null, 1, 1, PublisherData.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        initEClass(serverRuntimeEClass, ServerRuntime.class, "ServerRuntime", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-        initEAttribute(getServerRuntime_Group(), ecorePackage.getEFeatureMapEntry(), "group", null, 0, -1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEReference(getServerRuntime_Property(), this.getProperty(), null, "property", null, 0, -1, ServerRuntime.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
-        initEAttribute(getServerRuntime_Group1(), ecorePackage.getEFeatureMapEntry(), "group1", null, 0, -1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEReference(getServerRuntime_Port(), this.getPort(), null, "port", null, 0, -1, ServerRuntime.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
-        initEAttribute(getServerRuntime_Group2(), ecorePackage.getEFeatureMapEntry(), "group2", null, 0, -1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEReference(getServerRuntime_Module(), this.getModule(), null, "module", null, 1, -1, ServerRuntime.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
-        initEReference(getServerRuntime_Project(), this.getProject(), null, "project", null, 1, 1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEReference(getServerRuntime_Start(), this.getLaunchConfiguration(), null, "start", null, 1, 1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEReference(getServerRuntime_Stop(), this.getLaunchConfiguration(), null, "stop", null, 1, 1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getServerRuntime_Group3(), ecorePackage.getEFeatureMapEntry(), "group3", null, 0, -1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEReference(getServerRuntime_Publisher(), this.getPublisher(), null, "publisher", null, 0, -1, ServerRuntime.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
-        initEAttribute(getServerRuntime_Group4(), ecorePackage.getEFeatureMapEntry(), "group4", null, 0, -1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEReference(getServerRuntime_Classpath(), this.getClasspath(), null, "classpath", null, 1, -1, ServerRuntime.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, IS_ORDERED);
-        initEReference(getServerRuntime_JndiConnection(), this.getJndiConnection(), null, "jndiConnection", null, 1, 1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getServerRuntime_Name(), theXMLTypePackage.getString(), "name", null, 1, 1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-        initEAttribute(getServerRuntime_Version(), theXMLTypePackage.getString(), "version", null, 0, 1, ServerRuntime.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
-        // Create resource
-        createResource(eNS_URI);
-
-        // Create annotations
-        // http:///org/eclipse/emf/ecore/util/ExtendedMetaData
-        createExtendedMetaDataAnnotations();
-    }
-
-    /**
-     * Initializes the annotations for <b>http:///org/eclipse/emf/ecore/util/ExtendedMetaData</b>.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected void createExtendedMetaDataAnnotations() {
-        String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData";		
-        addAnnotation
-          (archiveTypeEClass, 
-           source, 
-           new String[] {
-             "name", "archive_._type",
-             "kind", "empty"
-           });		
-        addAnnotation
-          (getArchiveType_Path(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "path"
-           });		
-        addAnnotation
-          (classpathEClass, 
-           source, 
-           new String[] {
-             "name", "Classpath",
-             "kind", "elementOnly"
-           });		
-        addAnnotation
-          (getClasspath_Group(), 
-           source, 
-           new String[] {
-             "kind", "group",
-             "name", "group:0"
-           });		
-        addAnnotation
-          (getClasspath_Archive(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "archive",
-             "group", "#group:0"
-           });		
-        addAnnotation
-          (getClasspath_Id(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "id"
-           });		
-        addAnnotation
-          (getClasspath_IsLibrary(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "isLibrary"
-           });		
-        addAnnotation
-          (jndiConnectionEClass, 
-           source, 
-           new String[] {
-             "name", "jndiConnection",
-             "kind", "elementOnly"
-           });		
-        addAnnotation
-          (getJndiConnection_ProviderUrl(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "providerUrl"
-           });		
-        addAnnotation
-          (getJndiConnection_Group(), 
-           source, 
-           new String[] {
-             "kind", "group",
-             "name", "group:1"
-           });		
-        addAnnotation
-          (getJndiConnection_JndiProperty(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "jndiProperty",
-             "group", "#group:1"
-           });		
-        addAnnotation
-          (getJndiConnection_InitialContextFactory(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "initialContextFactory"
-           });		
-        addAnnotation
-          (jndiPropertyEClass, 
-           source, 
-           new String[] {
-             "name", "jndiProperty",
-             "kind", "elementOnly"
-           });		
-        addAnnotation
-          (getJndiProperty_Name(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "name"
-           });		
-        addAnnotation
-          (getJndiProperty_Value(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "value"
-           });		
-        addAnnotation
-          (launchConfigurationEClass, 
-           source, 
-           new String[] {
-             "name", "LaunchConfiguration",
-             "kind", "elementOnly"
-           });		
-        addAnnotation
-          (getLaunchConfiguration_MainClass(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "mainClass"
-           });		
-        addAnnotation
-          (getLaunchConfiguration_WorkingDirectory(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "workingDirectory"
-           });		
-        addAnnotation
-          (getLaunchConfiguration_ProgramArguments(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "programArguments"
-           });		
-        addAnnotation
-          (getLaunchConfiguration_VmParameters(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "vmParameters"
-           });		
-        addAnnotation
-          (getLaunchConfiguration_ClasspathReference(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "classpathReference"
-           });		
-        addAnnotation
-          (moduleEClass, 
-           source, 
-           new String[] {
-             "name", "Module",
-             "kind", "elementOnly"
-           });		
-        addAnnotation
-          (getModule_Type(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "type"
-           });		
-        addAnnotation
-          (getModule_PublishDir(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "publishDir"
-           });		
-        addAnnotation
-          (getModule_PublisherReference(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "publisherReference"
-           });		
-        addAnnotation
-          (portEClass, 
-           source, 
-           new String[] {
-             "name", "Port",
-             "kind", "elementOnly"
-           });		
-        addAnnotation
-          (getPort_No(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "no"
-           });		
-        addAnnotation
-          (getPort_Name(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "name"
-           });		
-        addAnnotation
-          (getPort_Protocol(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "protocol"
-           });		
-        addAnnotation
-          (projectEClass, 
-           source, 
-           new String[] {
-             "name", "Project",
-             "kind", "elementOnly"
-           });		
-        addAnnotation
-          (getProject_ClasspathReference(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "classpathReference"
-           });		
-        addAnnotation
-          (propertyEClass, 
-           source, 
-           new String[] {
-             "name", "Property",
-             "kind", "empty"
-           });		
-        addAnnotation
-          (getProperty_Context(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "context"
-           });		
-        addAnnotation
-          (getProperty_Default(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "default"
-           });		
-        addAnnotation
-          (getProperty_Id(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "id"
-           });		
-        addAnnotation
-          (getProperty_Label(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "label"
-           });		
-        addAnnotation
-          (getProperty_Type(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "type"
-           });		
-        addAnnotation
-          (publisherEClass, 
-           source, 
-           new String[] {
-             "name", "Publisher",
-             "kind", "elementOnly"
-           });		
-        addAnnotation
-          (getPublisher_Group(), 
-           source, 
-           new String[] {
-             "kind", "group",
-             "name", "group:0"
-           });		
-        addAnnotation
-          (getPublisher_Publisherdata(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "publisherdata",
-             "group", "#group:0"
-           });		
-        addAnnotation
-          (getPublisher_Id(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "id"
-           });		
-        addAnnotation
-          (publisherDataEClass, 
-           source, 
-           new String[] {
-             "name", "PublisherData",
-             "kind", "elementOnly"
-           });		
-        addAnnotation
-          (getPublisherData_Dataname(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "dataname"
-           });		
-        addAnnotation
-          (getPublisherData_Datavalue(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "datavalue"
-           });			
-        addAnnotation
-          (serverRuntimeEClass, 
-           source, 
-           new String[] {
-             "name", "ServerRuntime",
-             "kind", "elementOnly"
-           });		
-        addAnnotation
-          (getServerRuntime_Group(), 
-           source, 
-           new String[] {
-             "kind", "group",
-             "name", "group:0"
-           });		
-        addAnnotation
-          (getServerRuntime_Property(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "property",
-             "group", "#group:0"
-           });		
-        addAnnotation
-          (getServerRuntime_Group1(), 
-           source, 
-           new String[] {
-             "kind", "group",
-             "name", "group:2"
-           });		
-        addAnnotation
-          (getServerRuntime_Port(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "port",
-             "group", "#group:2"
-           });		
-        addAnnotation
-          (getServerRuntime_Group2(), 
-           source, 
-           new String[] {
-             "kind", "group",
-             "name", "group:4"
-           });		
-        addAnnotation
-          (getServerRuntime_Module(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "module",
-             "group", "#group:4"
-           });		
-        addAnnotation
-          (getServerRuntime_Project(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "project"
-           });		
-        addAnnotation
-          (getServerRuntime_Start(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "start"
-           });		
-        addAnnotation
-          (getServerRuntime_Stop(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "stop"
-           });		
-        addAnnotation
-          (getServerRuntime_Group3(), 
-           source, 
-           new String[] {
-             "kind", "group",
-             "name", "group:9"
-           });		
-        addAnnotation
-          (getServerRuntime_Publisher(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "publisher",
-             "group", "#group:9"
-           });		
-        addAnnotation
-          (getServerRuntime_Group4(), 
-           source, 
-           new String[] {
-             "kind", "group",
-             "name", "group:11"
-           });		
-        addAnnotation
-          (getServerRuntime_Classpath(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "classpath",
-             "group", "#group:11"
-           });		
-        addAnnotation
-          (getServerRuntime_JndiConnection(), 
-           source, 
-           new String[] {
-             "kind", "element",
-             "name", "jndiConnection"
-           });		
-        addAnnotation
-          (getServerRuntime_Name(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "name"
-           });		
-        addAnnotation
-          (getServerRuntime_Version(), 
-           source, 
-           new String[] {
-             "kind", "attribute",
-             "name", "version"
-           });
-    }
-
-} //ServerTypePackageImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeAdapterFactory.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeAdapterFactory.java
deleted file mode 100644
index 151e8bb..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeAdapterFactory.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ServerTypeAdapterFactory.java,v 1.3 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.util;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notifier;
-
-import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
-
-import org.eclipse.emf.ecore.EObject;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.*;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Adapter Factory</b> for the model.
- * It provides an adapter <code>createXXX</code> method for each class of the model.
- * <!-- end-user-doc -->
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage
- * @generated
- */
-public class ServerTypeAdapterFactory extends AdapterFactoryImpl {
-    /**
-     * The cached model package.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected static ServerTypePackage modelPackage;
-
-    /**
-     * Creates an instance of the adapter factory.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public ServerTypeAdapterFactory() {
-        if (modelPackage == null) {
-            modelPackage = ServerTypePackage.eINSTANCE;
-        }
-    }
-
-    /**
-     * Returns whether this factory is applicable for the type of the object.
-     * <!-- begin-user-doc -->
-	 * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
-	 * <!-- end-user-doc -->
-     * @return whether this factory is applicable for the type of the object.
-     * @generated
-     */
-	public boolean isFactoryForType(Object object) {
-        if (object == modelPackage) {
-            return true;
-        }
-        if (object instanceof EObject) {
-            return ((EObject)object).eClass().getEPackage() == modelPackage;
-        }
-        return false;
-    }
-
-    /**
-     * The switch the delegates to the <code>createXXX</code> methods.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected ServerTypeSwitch modelSwitch =
-        new ServerTypeSwitch() {
-            public Object caseArchiveType(ArchiveType object) {
-                return createArchiveTypeAdapter();
-            }
-            public Object caseClasspath(Classpath object) {
-                return createClasspathAdapter();
-            }
-            public Object caseJndiConnection(JndiConnection object) {
-                return createJndiConnectionAdapter();
-            }
-            public Object caseJndiProperty(JndiProperty object) {
-                return createJndiPropertyAdapter();
-            }
-            public Object caseLaunchConfiguration(LaunchConfiguration object) {
-                return createLaunchConfigurationAdapter();
-            }
-            public Object caseModule(Module object) {
-                return createModuleAdapter();
-            }
-            public Object casePort(Port object) {
-                return createPortAdapter();
-            }
-            public Object caseProject(Project object) {
-                return createProjectAdapter();
-            }
-            public Object caseProperty(Property object) {
-                return createPropertyAdapter();
-            }
-            public Object casePublisher(Publisher object) {
-                return createPublisherAdapter();
-            }
-            public Object casePublisherData(PublisherData object) {
-                return createPublisherDataAdapter();
-            }
-            public Object caseServerRuntime(ServerRuntime object) {
-                return createServerRuntimeAdapter();
-            }
-            public Object defaultCase(EObject object) {
-                return createEObjectAdapter();
-            }
-        };
-
-    /**
-     * Creates an adapter for the <code>target</code>.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param target the object to adapt.
-     * @return the adapter for the <code>target</code>.
-     * @generated
-     */
-	public Adapter createAdapter(Notifier target) {
-        return (Adapter)modelSwitch.doSwitch((EObject)target);
-    }
-
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.ArchiveType <em>Archive Type</em>}'.
-     * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ArchiveType
-     * @generated
-     */
-	public Adapter createArchiveTypeAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.Classpath <em>Classpath</em>}'.
-     * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Classpath
-     * @generated
-     */
-	public Adapter createClasspathAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection <em>Jndi Connection</em>}'.
-     * <!-- begin-user-doc -->
-     * This default implementation returns null so that we can easily ignore cases;
-     * it's useful to ignore a case when inheritance will catch all the cases anyway.
-     * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.JndiConnection
-     * @generated
-     */
-    public Adapter createJndiConnectionAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.JndiProperty <em>Jndi Property</em>}'.
-     * <!-- begin-user-doc -->
-     * This default implementation returns null so that we can easily ignore cases;
-     * it's useful to ignore a case when inheritance will catch all the cases anyway.
-     * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.JndiProperty
-     * @generated
-     */
-    public Adapter createJndiPropertyAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration <em>Launch Configuration</em>}'.
-     * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration
-     * @generated
-     */
-	public Adapter createLaunchConfigurationAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.Module <em>Module</em>}'.
-     * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Module
-     * @generated
-     */
-	public Adapter createModuleAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.Port <em>Port</em>}'.
-     * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Port
-     * @generated
-     */
-	public Adapter createPortAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.Project <em>Project</em>}'.
-     * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Project
-     * @generated
-     */
-	public Adapter createProjectAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.Property <em>Property</em>}'.
-     * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Property
-     * @generated
-     */
-	public Adapter createPropertyAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.Publisher <em>Publisher</em>}'.
-     * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.Publisher
-     * @generated
-     */
-	public Adapter createPublisherAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.PublisherData <em>Publisher Data</em>}'.
-     * <!-- begin-user-doc -->
-     * This default implementation returns null so that we can easily ignore cases;
-     * it's useful to ignore a case when inheritance will catch all the cases anyway.
-     * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.PublisherData
-     * @generated
-     */
-    public Adapter createPublisherDataAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for an object of class '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime <em>Server Runtime</em>}'.
-     * <!-- begin-user-doc -->
-	 * This default implementation returns null so that we can easily ignore cases;
-	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
-	 * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerRuntime
-     * @generated
-     */
-	public Adapter createServerRuntimeAdapter() {
-        return null;
-    }
-
-    /**
-     * Creates a new adapter for the default case.
-     * <!-- begin-user-doc -->
-	 * This default implementation returns null.
-	 * <!-- end-user-doc -->
-     * @return the new adapter.
-     * @generated
-     */
-	public Adapter createEObjectAdapter() {
-        return null;
-    }
-
-} //ServerTypeAdapterFactory
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeResourceFactoryImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeResourceFactoryImpl.java
deleted file mode 100644
index 1417c90..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeResourceFactoryImpl.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ServerTypeResourceFactoryImpl.java,v 1.1 2005/03/14 20:54:20 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.util;
-
-import org.eclipse.emf.common.util.URI;
-
-import org.eclipse.emf.ecore.resource.Resource;
-
-import org.eclipse.emf.ecore.util.ExtendedMetaData;
-
-import org.eclipse.emf.ecore.xmi.XMLResource;
-
-import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Resource Factory</b> associated with the package.
- * <!-- end-user-doc -->
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.util.ServerTypeResourceImpl
- * @generated
- */
-public class ServerTypeResourceFactoryImpl extends XMLResourceFactoryImpl {
-    /**
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected ExtendedMetaData extendedMetaData;
-
-    /**
-     * Creates an instance of the resource factory.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public ServerTypeResourceFactoryImpl() {
-        super();
-        extendedMetaData = ExtendedMetaData.INSTANCE;
-    }
-
-    /**
-     * Creates an instance of the resource.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public Resource createResource(URI uri) {
-        XMLResource result = new ServerTypeResourceImpl(uri);
-        result.getDefaultSaveOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, extendedMetaData);
-        result.getDefaultLoadOptions().put(XMLResource.OPTION_EXTENDED_META_DATA, extendedMetaData);
-
-        result.getDefaultSaveOptions().put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE);
-        result.getDefaultSaveOptions().put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE);
-
-        result.getDefaultLoadOptions().put(XMLResource.OPTION_USE_LEXICAL_HANDLER, Boolean.TRUE);
-        return result;
-    }
-
-} //ServerTypeResourceFactoryImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeResourceImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeResourceImpl.java
deleted file mode 100644
index 4a75fc7..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeResourceImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ServerTypeResourceImpl.java,v 1.1 2005/03/14 20:54:20 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.util;
-
-import org.eclipse.emf.common.util.URI;
-
-import org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Resource </b> associated with the package.
- * <!-- end-user-doc -->
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.util.ServerTypeResourceFactoryImpl
- * @generated
- */
-public class ServerTypeResourceImpl extends XMLResourceImpl {
-    /**
-     * Creates an instance of the resource.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param uri the URI of the new resource.
-     * @generated
-     */
-	public ServerTypeResourceImpl(URI uri) {
-        super(uri);
-    }
-
-} //ServerTypeResourceFactoryImpl
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeSwitch.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeSwitch.java
deleted file mode 100644
index a7cbf99..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/util/ServerTypeSwitch.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ServerTypeSwitch.java,v 1.3 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.internal.servertype.definition.util;
-
-import java.util.List;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EObject;
-
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.servertype.definition.*;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Switch</b> for the model's inheritance hierarchy.
- * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
- * to invoke the <code>caseXXX</code> method for each class of the model,
- * starting with the actual class of the object
- * and proceeding up the inheritance hierarchy
- * until a non-null result is returned,
- * which is the result of the switch.
- * <!-- end-user-doc -->
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage
- * @generated
- */
-public class ServerTypeSwitch {
-    /**
-     * The cached model package
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	protected static ServerTypePackage modelPackage;
-
-    /**
-     * Creates an instance of the switch.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	public ServerTypeSwitch() {
-        if (modelPackage == null) {
-            modelPackage = ServerTypePackage.eINSTANCE;
-        }
-    }
-
-    /**
-     * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the first non-null result returned by a <code>caseXXX</code> call.
-     * @generated
-     */
-	public Object doSwitch(EObject theEObject) {
-        return doSwitch(theEObject.eClass(), theEObject);
-    }
-
-    /**
-     * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the first non-null result returned by a <code>caseXXX</code> call.
-     * @generated
-     */
-	protected Object doSwitch(EClass theEClass, EObject theEObject) {
-        if (theEClass.eContainer() == modelPackage) {
-            return doSwitch(theEClass.getClassifierID(), theEObject);
-        }
-        else {
-            List eSuperTypes = theEClass.getESuperTypes();
-            return
-                eSuperTypes.isEmpty() ?
-                    defaultCase(theEObject) :
-                    doSwitch((EClass)eSuperTypes.get(0), theEObject);
-        }
-    }
-
-    /**
-     * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the first non-null result returned by a <code>caseXXX</code> call.
-     * @generated
-     */
-	protected Object doSwitch(int classifierID, EObject theEObject) {
-        switch (classifierID) {
-            case ServerTypePackage.ARCHIVE_TYPE: {
-                ArchiveType archiveType = (ArchiveType)theEObject;
-                Object result = caseArchiveType(archiveType);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.CLASSPATH: {
-                Classpath classpath = (Classpath)theEObject;
-                Object result = caseClasspath(classpath);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.JNDI_CONNECTION: {
-                JndiConnection jndiConnection = (JndiConnection)theEObject;
-                Object result = caseJndiConnection(jndiConnection);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.JNDI_PROPERTY: {
-                JndiProperty jndiProperty = (JndiProperty)theEObject;
-                Object result = caseJndiProperty(jndiProperty);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.LAUNCH_CONFIGURATION: {
-                LaunchConfiguration launchConfiguration = (LaunchConfiguration)theEObject;
-                Object result = caseLaunchConfiguration(launchConfiguration);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.MODULE: {
-                Module module = (Module)theEObject;
-                Object result = caseModule(module);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.PORT: {
-                Port port = (Port)theEObject;
-                Object result = casePort(port);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.PROJECT: {
-                Project project = (Project)theEObject;
-                Object result = caseProject(project);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.PROPERTY: {
-                Property property = (Property)theEObject;
-                Object result = caseProperty(property);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.PUBLISHER: {
-                Publisher publisher = (Publisher)theEObject;
-                Object result = casePublisher(publisher);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.PUBLISHER_DATA: {
-                PublisherData publisherData = (PublisherData)theEObject;
-                Object result = casePublisherData(publisherData);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            case ServerTypePackage.SERVER_RUNTIME: {
-                ServerRuntime serverRuntime = (ServerRuntime)theEObject;
-                Object result = caseServerRuntime(serverRuntime);
-                if (result == null) result = defaultCase(theEObject);
-                return result;
-            }
-            default: return defaultCase(theEObject);
-        }
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Archive Type</em>'.
-     * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Archive Type</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-	public Object caseArchiveType(ArchiveType object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Classpath</em>'.
-     * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Classpath</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-	public Object caseClasspath(Classpath object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Jndi Connection</em>'.
-     * <!-- begin-user-doc -->
-     * This implementation returns null;
-     * returning a non-null result will terminate the switch.
-     * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Jndi Connection</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-    public Object caseJndiConnection(JndiConnection object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Jndi Property</em>'.
-     * <!-- begin-user-doc -->
-     * This implementation returns null;
-     * returning a non-null result will terminate the switch.
-     * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Jndi Property</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-    public Object caseJndiProperty(JndiProperty object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Launch Configuration</em>'.
-     * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Launch Configuration</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-	public Object caseLaunchConfiguration(LaunchConfiguration object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Module</em>'.
-     * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Module</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-	public Object caseModule(Module object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Port</em>'.
-     * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Port</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-	public Object casePort(Port object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Project</em>'.
-     * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Project</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-	public Object caseProject(Project object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Property</em>'.
-     * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Property</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-	public Object caseProperty(Property object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Publisher</em>'.
-     * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Publisher</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-	public Object casePublisher(Publisher object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Publisher Data</em>'.
-     * <!-- begin-user-doc -->
-     * This implementation returns null;
-     * returning a non-null result will terminate the switch.
-     * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Publisher Data</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-    public Object casePublisherData(PublisherData object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>Server Runtime</em>'.
-     * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch.
-	 * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>Server Runtime</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-     * @generated
-     */
-	public Object caseServerRuntime(ServerRuntime object) {
-        return null;
-    }
-
-    /**
-     * Returns the result of interpretting the object as an instance of '<em>EObject</em>'.
-     * <!-- begin-user-doc -->
-	 * This implementation returns null;
-	 * returning a non-null result will terminate the switch, but this is the last case anyway.
-	 * <!-- end-user-doc -->
-     * @param object the target of the switch.
-     * @return the result of interpretting the object as an instance of '<em>EObject</em>'.
-     * @see #doSwitch(org.eclipse.emf.ecore.EObject)
-     * @generated
-     */
-	public Object defaultCase(EObject object) {
-        return null;
-    }
-
-} //ServerTypeSwitch
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/Resolver.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/Resolver.java
deleted file mode 100644
index ddf43e4..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/Resolver.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Naci M. Dai - initial API and implementation
- *     
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-
-package org.eclipse.jst.server.generic.internal.xml;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.jst.server.generic.servertype.definition.ArchiveType;
-import org.eclipse.jst.server.generic.servertype.definition.Property;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-
-
-public class Resolver {
-
-
-
-	private Map fPropertyValues = new HashMap();
-	private ServerRuntime server;
-
-	/**
-	 * @param impl
-	 */
-	public Resolver(ServerRuntime runtime) {
-		this.server = runtime;
-	}
-	
-	public List resolveClasspathProperties(List cpList)
-	{
-		ArrayList list = new ArrayList(cpList.size());
-		for (int i = 0; i < cpList.size(); i++) {
-			ArchiveType item = (ArchiveType) cpList.get(i);
-			String cpath = resolveProperties(item.getPath());
-			list.add(cpath);
-		}
-		return list;
-	}	
-	public String resolveProperties(String proppedString) {
-		HashMap cache = new HashMap(getProperties().size());
-		Iterator itr = getProperties().iterator();
-		while (itr.hasNext()) {
-			Property element =(Property) itr.next();
-			String value = element.getDefault();
-			if(fPropertyValues != null && fPropertyValues.containsKey(element.getId()))
-			    value=(String)fPropertyValues.get(element.getId());
-			 cache.put(element.getId(), value);
-		}
-		//String vmPath = install.getInstallLocation().getCanonicalPath();
-		//vmPath = vmPath.replace('\\', '/');
-		cache.put("jrePath", "JRE");
-
-		String str = resolvePropertiesFromCache(proppedString, cache);
-		str = fixPassthroughProperties(str);
-		return str;
-	}
-
-	/**
-	 * @return
-	 */
-	private List getProperties() {
-		return this.server.getProperty();
-	}
-
-	/**
-	 * @param str
-	 * @return
-	 */
-	private String fixPassthroughProperties(String str) {
-		String resolvedString = str;
-		if (isPassPropertyLeft(resolvedString)) {
-			resolvedString = fixParam(resolvedString);
-			resolvedString = fixPassthroughProperties(resolvedString);
-		}
-		return resolvedString;
-	}
-
-	private String resolvePropertiesFromCache(
-		String proppedString,
-		HashMap cache) {
-		String resolvedString = proppedString;
-		int start = skipToProperty(resolvedString,cache);
-		if (start >= 0) {
-			resolvedString = resolveProperty(resolvedString, start, cache);
-			resolvedString = resolvePropertiesFromCache(resolvedString, cache);
-		}
-		return resolvedString;
-	}
-
-	private int skipToProperty(String str,HashMap cache) {
-		int start = -1; 
-		int end =  0;
-		String value = null;
-		do {
-			start =  str.indexOf("${",end);
-			if( start < 0)
-				return start;
-			end = str.indexOf("}", start);
-			
-			String key = str.substring(start + 2, end);
-			value = (String)cache.get(key);
-		}
-		while(value == null);
-		return start;
-	}
-	
-	private boolean isPassPropertyLeft(String str) {
-		return str.indexOf("%{") >= 0;
-	}
-
-	private String resolveProperty(String proppedString, int start, HashMap cache) {
-		String str = proppedString;
-		start = str.indexOf("${");
-		int end = str.indexOf("}", start);
-		String key = str.substring(start + 2, end);
-		String value = (String)cache.get(key);
-		if(value == null )
-			return str;
-		return str.substring(0, start)
-			+ value
-			+ str.substring(end + 1);
-	}
-	
-	private String fixParam(String proppedString) {
-		String str = proppedString;
-		int start = str.indexOf("%{");
-		return str.substring(0, start)
-			+ "${"
-			+ str.substring(start+2);
-	}
-	
-	/**
-	 * @return Returns the fPropertyValues.
-	 */
-	public Map getPropertyValues() {
-		return fPropertyValues;
-	}
-	/**
-	 * @param propertyValues The fPropertyValues to set.
-	 */
-	public void setPropertyValues(Map propertyValues) {
-		fPropertyValues = propertyValues;
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/XMLUtils.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/XMLUtils.java
deleted file mode 100644
index 730ffc6..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/XMLUtils.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Naci M. Dai - initial API and implementation
- *     
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-
-package org.eclipse.jst.server.generic.internal.xml;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.common.util.WrappedException;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.jst.server.generic.core.internal.CorePlugin;
-import org.eclipse.jst.server.generic.internal.core.util.ExtensionPointUtil;
-import org.eclipse.jst.server.generic.internal.core.util.FileUtil;
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-import org.eclipse.jst.server.generic.internal.servertype.definition.util.ServerTypeResourceFactoryImpl;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.osgi.framework.Bundle;
-
-public class XMLUtils {
-
-	
-    private ArrayList definitions;
-
-
-	public XMLUtils() {
-		refresh();
-	}
-
-	public void refresh() {
-		definitions= new ArrayList();
-         IExtension[] extensions = ExtensionPointUtil.getGenericServerDefinitionExtensions();
-        for (int i = 0; extensions!=null && i < extensions.length; i++) {
-            File definitionFile=null;
-            IExtension extension = extensions[i];
-            IConfigurationElement[] elements = ExtensionPointUtil.getConfigurationElements(extension);
-            for (int j = 0; j < elements.length; j++) {
-                IConfigurationElement element = elements[j];
-                definitionFile = getDefinitionFile(element);
-                if(definitionFile!=null && definitionFile.exists() && definitionFile.isFile()){
-                    ServerRuntime runtime =readFile(definitionFile);
-                    if(runtime!=null){
-                        runtime.setId(element.getAttribute("id"));
-                        runtime.setConfigurationElementNamespace(element.getNamespace());
-                        definitions.add(runtime);
-                    }
-                }
-            }
-
-        }
-	}
-
-    /**
-     * @param extension
-     */
-    private File getDefinitionFile(IConfigurationElement element) {
-        Bundle bundle = Platform.getBundle(element.getNamespace());
-        String definitionFile = element.getAttribute("definitionfile");
-        return FileUtil.resolveFileFrom(bundle,definitionFile);
-    }
-
-    public ServerRuntime readFile(File file) {
-        // Create a resource set.
-        ResourceSet resourceSet = new ResourceSetImpl();
-
-        // Register the default resource factory -- only needed for
-        // stand-alone!
-        resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap()
-                .put(Resource.Factory.Registry.DEFAULT_EXTENSION,
-                        new ServerTypeResourceFactoryImpl());
-
-         ServerTypePackage gstPack = ServerTypePackage.eINSTANCE;
-
-        // Get the URI of the model file.
-        URI fileURI = URI.createFileURI(file.getAbsolutePath());
-
-        // Demand load the resource for this file.
-        Resource resource = null;
-        try {
-            resource = resourceSet.getResource(fileURI, true);
-        } catch (WrappedException e) {
-            // sth wrong with this .server file.
-            CorePlugin.getDefault().getLog().log(
-                    new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 1,
-                            "Error loading the server type definition", e));
-        }
-
-        if (resource != null) {
-            ServerRuntime def = (ServerRuntime) resource.getContents().get(0);
-            if (def != null) {
-                def.setFilename(file.getAbsolutePath());
-                return def;
-            }
-        }
-        return null;
-
-    }
-
-
-	/**
-	 * @return ArrayList
-	 */
-	public ArrayList getServerTypeDefinitions() {
-		return definitions;
-	}
-
-	/**
-//	 * @return ArrayList
-//	 */
-//	public ServerRuntime getServerTypeDefinitionNamed(String name) {
-//		refresh();
-//		Iterator defs = getServerTypeDefinitions().iterator();
-//		while (defs.hasNext()) {
-//			ServerRuntime elem = (ServerRuntime) defs.next();
-//			if (name.equals(elem.getName()))
-//				return elem;
-//		}
-//		return null;
-//	}
-    public ServerRuntime getServerTypeDefinition(String id) {
-        refresh();
-        Iterator defs = getServerTypeDefinitions().iterator();
-        while (defs.hasNext()) {
-            ServerRuntime elem = (ServerRuntime) defs.next();
-            if (id.equals(elem.getId()))
-                return elem;
-        }
-        return null;
-    }
-    
-    
-	/**
-	 * Sets the definitions.
-	 * 
-	 * @param definitions
-	 *            The definitions to set
-	 */
-	public void setDefinitions(ArrayList definitions) {
-		this.definitions = definitions;
-	}
-
-	
-	
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/ArchiveType.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/ArchiveType.java
deleted file mode 100644
index 68a8333..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/ArchiveType.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ArchiveType.java,v 1.7 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Archive Type</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ArchiveType#getPath <em>Path</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getArchiveType()
- * @model extendedMetaData="name='archive_._type' kind='empty'"
- * @generated
- */
-public interface ArchiveType extends EObject{
-    /**
-     * Returns the value of the '<em><b>Path</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Path</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-     * 
-	 * </p>
-	 * @since 1.0
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Path</em>' attribute.
-     * @see #setPath(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getArchiveType_Path()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
-     *        extendedMetaData="kind='attribute' name='path'"
-     * @generated
-     */
-	String getPath();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.ArchiveType#getPath <em>Path</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * @since 1.0
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Path</em>' attribute.
-     * @see #getPath()
-     * @generated
-     */
-//	void setPath(String value);
-
-} // ArchiveType
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Classpath.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Classpath.java
deleted file mode 100644
index 44845ee..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Classpath.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: Classpath.java,v 1.7 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import java.util.List;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Classpath</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#getGroup <em>Group</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#getArchive <em>Archive</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#getId <em>Id</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#isIsLibrary <em>Is Library</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getClasspath()
- * @model extendedMetaData="name='Classpath' kind='elementOnly'"
- * @generated
- */
-public interface Classpath extends EObject{
-    /**
-     * Returns the value of the '<em><b>Group</b></em>' attribute list.
-     * The list contents are of type {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Group</em>' attribute list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Group</em>' attribute list.
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getClasspath_Group()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true"
-     *        extendedMetaData="kind='group' name='group:0'"
-     * @generated
-     */
-//    FeatureMap getGroup();
-
-    /**
-     * Returns the value of the '<em><b>Archive</b></em>' containment reference list.
-     * The list contents are of type {@link org.eclipse.jst.server.generic.servertype.definition.ArchiveType}.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Archive</em>' containment reference list isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Archive</em>' containment reference list.
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getClasspath_Archive()
-     * @model type="org.eclipse.jst.server.generic.servertype.definition.ArchiveType" containment="true" resolveProxies="false" required="true" transient="true" volatile="true" derived="true"
-     *        extendedMetaData="kind='element' name='archive' group='#group:0'"
-     * @generated
-     */
-	List getArchive();
-
-    /**
-     * Returns the value of the '<em><b>Id</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Id</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Id</em>' attribute.
-     * @see #setId(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getClasspath_Id()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
-     *        extendedMetaData="kind='attribute' name='id'"
-     * @generated
-     */
-	String getId();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#getId <em>Id</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Id</em>' attribute.
-     * @see #getId()
-     * @generated
-     */
-//	void setId(String value);
-
-    /**
-     * Returns the value of the '<em><b>Is Library</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Is Library</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Is Library</em>' attribute.
-     * @see #isSetIsLibrary()
-     * @see #unsetIsLibrary()
-     * @see #setIsLibrary(boolean)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getClasspath_IsLibrary()
-     * @model unique="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean"
-     *        extendedMetaData="kind='attribute' name='isLibrary'"
-     * @generated
-     */
-	boolean isIsLibrary();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#isIsLibrary <em>Is Library</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Is Library</em>' attribute.
-     * @see #isSetIsLibrary()
-     * @see #unsetIsLibrary()
-     * @see #isIsLibrary()
-     * @generated
-     */
-//	void setIsLibrary(boolean value);
-
-    /**
-     * Unsets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#isIsLibrary <em>Is Library</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @see #isSetIsLibrary()
-     * @see #isIsLibrary()
-     * @see #setIsLibrary(boolean)
-     * @generated
-     */
-//	void unsetIsLibrary();
-
-    /**
-     * Returns whether the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Classpath#isIsLibrary <em>Is Library</em>}' attribute is set.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return whether the value of the '<em>Is Library</em>' attribute is set.
-     * @see #unsetIsLibrary()
-     * @see #isIsLibrary()
-     * @see #setIsLibrary(boolean)
-     * @generated
-     */
-//	boolean isSetIsLibrary();
-
-} // Classpath
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/JndiConnection.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/JndiConnection.java
deleted file mode 100644
index 6965e13..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/JndiConnection.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id: JndiConnection.java,v 1.3 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import java.util.List;
-import org.eclipse.emf.ecore.EObject;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Jndi Connection</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getProviderUrl <em>Provider Url</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getGroup <em>Group</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getJndiProperty <em>Jndi Property</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getInitialContextFactory <em>Initial Context Factory</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getJndiConnection()
- * @model extendedMetaData="name='jndiConnection' kind='elementOnly'"
- * @generated
- */
-public interface JndiConnection extends EObject{
-    /**
-     * Returns the value of the '<em><b>Provider Url</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Provider Url</em>' attribute isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Provider Url</em>' attribute.
-     * @see #setProviderUrl(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getJndiConnection_ProviderUrl()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='providerUrl'"
-     * @generated
-     */
-    String getProviderUrl();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getProviderUrl <em>Provider Url</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Provider Url</em>' attribute.
-     * @see #getProviderUrl()
-     * @generated
-     */
-//    void setProviderUrl(String value);
-
-    /**
-     * Returns the value of the '<em><b>Group</b></em>' attribute list.
-     * The list contents are of type {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Group</em>' attribute list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Group</em>' attribute list.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerTypePackage#getJndiConnection_Group()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true"
-     *        extendedMetaData="kind='group' name='group:1'"
-     * @generated
-     */
-//    FeatureMap getGroup();
-
-    /**
-     * Returns the value of the '<em><b>Jndi Property</b></em>' containment reference list.
-     * The list contents are of type {@link org.eclipse.jst.server.generic.servertype.definition.JndiProperty}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Jndi Property</em>' containment reference list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Jndi Property</em>' containment reference list.
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getJndiConnection_JndiProperty()
-     * @model type="org.eclipse.jst.server.generic.servertype.definition.JndiProperty" containment="true" resolveProxies="false" transient="true" volatile="true" derived="true"
-     *        extendedMetaData="kind='element' name='jndiProperty' group='#group:1'"
-     * @generated
-     */
-    List getJndiProperty();
-
-    /**
-     * Returns the value of the '<em><b>Initial Context Factory</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Initial Context Factory</em>' attribute isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Initial Context Factory</em>' attribute.
-     * @see #setInitialContextFactory(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getJndiConnection_InitialContextFactory()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='initialContextFactory'"
-     * @generated
-     */
-    String getInitialContextFactory();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.JndiConnection#getInitialContextFactory <em>Initial Context Factory</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Initial Context Factory</em>' attribute.
-     * @see #getInitialContextFactory()
-     * @generated
-     */
-//    void setInitialContextFactory(String value);
-
-} // JndiConnection
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/JndiProperty.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/JndiProperty.java
deleted file mode 100644
index 1dc450e..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/JndiProperty.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id: JndiProperty.java,v 1.3 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Jndi Property</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.JndiProperty#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.JndiProperty#getValue <em>Value</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getJndiProperty()
- * @model extendedMetaData="name='jndiProperty' kind='elementOnly'"
- * @generated
- */
-public interface JndiProperty extends EObject {
-    /**
-     * Returns the value of the '<em><b>Name</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Name</em>' attribute isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Name</em>' attribute.
-     * @see #setName(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getJndiProperty_Name()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='name'"
-     * @generated
-     */
-    String getName();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.JndiProperty#getName <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Name</em>' attribute.
-     * @see #getName()
-     * @generated
-     */
-//    void setName(String value);
-
-    /**
-     * Returns the value of the '<em><b>Value</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Value</em>' attribute isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Value</em>' attribute.
-     * @see #setValue(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getJndiProperty_Value()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='value'"
-     * @generated
-     */
-    String getValue();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.JndiProperty#getValue <em>Value</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Value</em>' attribute.
-     * @see #getValue()
-     * @generated
-     */
-//    void setValue(String value);
-
-} // JndiProperty
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/LaunchConfiguration.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/LaunchConfiguration.java
deleted file mode 100644
index a35c726..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/LaunchConfiguration.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: LaunchConfiguration.java,v 1.6 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Launch Configuration</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getMainClass <em>Main Class</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getWorkingDirectory <em>Working Directory</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getProgramArguments <em>Program Arguments</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getVmParameters <em>Vm Parameters</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getClasspathReference <em>Classpath Reference</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getLaunchConfiguration()
- * @model extendedMetaData="name='LaunchConfiguration' kind='elementOnly'"
- * @generated
- */
-public interface LaunchConfiguration extends EObject{
-    /**
-     * Returns the value of the '<em><b>Main Class</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Main Class</em>' attribute isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Main Class</em>' attribute.
-     * @see #setMainClass(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getLaunchConfiguration_MainClass()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='mainClass'"
-     * @generated
-     */
-    String getMainClass();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getMainClass <em>Main Class</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Main Class</em>' attribute.
-     * @see #getMainClass()
-     * @generated
-     */
-//    void setMainClass(String value);
-
-    /**
-     * Returns the value of the '<em><b>Working Directory</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Working Directory</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Working Directory</em>' attribute.
-     * @see #setWorkingDirectory(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getLaunchConfiguration_WorkingDirectory()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='workingDirectory'"
-     * @generated
-     */
-	String getWorkingDirectory();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getWorkingDirectory <em>Working Directory</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Working Directory</em>' attribute.
-     * @see #getWorkingDirectory()
-     * @generated
-     */
-//	void setWorkingDirectory(String value);
-
-    /**
-     * Returns the value of the '<em><b>Program Arguments</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Program Arguments</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Program Arguments</em>' attribute.
-     * @see #setProgramArguments(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getLaunchConfiguration_ProgramArguments()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='programArguments'"
-     * @generated
-     */
-	String getProgramArguments();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getProgramArguments <em>Program Arguments</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Program Arguments</em>' attribute.
-     * @see #getProgramArguments()
-     * @generated
-     */
-//	void setProgramArguments(String value);
-
-    /**
-     * Returns the value of the '<em><b>Vm Parameters</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Vm Parameters</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Vm Parameters</em>' attribute.
-     * @see #setVmParameters(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getLaunchConfiguration_VmParameters()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='vmParameters'"
-     * @generated
-     */
-	String getVmParameters();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getVmParameters <em>Vm Parameters</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Vm Parameters</em>' attribute.
-     * @see #getVmParameters()
-     * @generated
-     */
-//	void setVmParameters(String value);
-
-    /**
-     * Returns the value of the '<em><b>Classpath Reference</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Classpath Reference</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Classpath Reference</em>' attribute.
-     * @see #setClasspathReference(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getLaunchConfiguration_ClasspathReference()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='classpathReference'"
-     * @generated
-     */
-	String getClasspathReference();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.LaunchConfiguration#getClasspathReference <em>Classpath Reference</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Classpath Reference</em>' attribute.
-     * @see #getClasspathReference()
-     * @generated
-     */
-//	void setClasspathReference(String value);
-
-} // LaunchConfiguration
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Module.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Module.java
deleted file mode 100644
index 87d1544..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Module.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: Module.java,v 1.5 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Module</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Module#getType <em>Type</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Module#getPublishDir <em>Publish Dir</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Module#getPublisherReference <em>Publisher Reference</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getModule()
- * @model extendedMetaData="name='Module' kind='elementOnly'"
- * @generated
- */
-public interface Module extends EObject{
-    /**
-     * Returns the value of the '<em><b>Type</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Type</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Type</em>' attribute.
-     * @see #setType(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getModule_Type()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='type'"
-     * @generated
-     */
-	String getType();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Module#getType <em>Type</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Type</em>' attribute.
-     * @see #getType()
-     * @generated
-     */
-//	void setType(String value);
-
-    /**
-     * Returns the value of the '<em><b>Publish Dir</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Publish Dir</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Publish Dir</em>' attribute.
-     * @see #setPublishDir(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getModule_PublishDir()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='publishDir'"
-     * @generated
-     */
-	String getPublishDir();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Module#getPublishDir <em>Publish Dir</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Publish Dir</em>' attribute.
-     * @see #getPublishDir()
-     * @generated
-     */
-//	void setPublishDir(String value);
-
-    /**
-     * Returns the value of the '<em><b>Publisher Reference</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Publisher Reference</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Publisher Reference</em>' attribute.
-     * @see #setPublisherReference(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getModule_PublisherReference()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='publisherReference'"
-     * @generated
-     */
-	String getPublisherReference();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Module#getPublisherReference <em>Publisher Reference</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Publisher Reference</em>' attribute.
-     * @see #getPublisherReference()
-     * @generated
-     */
-//	void setPublisherReference(String value);
-
-} // Module
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Port.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Port.java
deleted file mode 100644
index 8189aa6..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Port.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: Port.java,v 1.5 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Port</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Port#getNo <em>No</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Port#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Port#getProtocol <em>Protocol</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getPort()
- * @model extendedMetaData="name='Port' kind='elementOnly'"
- * @generated
- */
-public interface Port extends EObject{
-    /**
-     * Returns the value of the '<em><b>No</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>No</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>No</em>' attribute.
-     * @see #setNo(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getPort_No()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='no'"
-     * @generated
-     */
-	String getNo();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Port#getNo <em>No</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>No</em>' attribute.
-     * @see #getNo()
-     * @generated
-     */
-//	void setNo(String value);
-
-    /**
-     * Returns the value of the '<em><b>Name</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Name</em>' attribute.
-     * @see #setName(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getPort_Name()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='name'"
-     * @generated
-     */
-	String getName();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Port#getName <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Name</em>' attribute.
-     * @see #getName()
-     * @generated
-     */
-//	void setName(String value);
-
-    /**
-     * Returns the value of the '<em><b>Protocol</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Protocol</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Protocol</em>' attribute.
-     * @see #setProtocol(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getPort_Protocol()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='protocol'"
-     * @generated
-     */
-	String getProtocol();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Port#getProtocol <em>Protocol</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Protocol</em>' attribute.
-     * @see #getProtocol()
-     * @generated
-     */
-//	void setProtocol(String value);
-
-} // Port
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Project.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Project.java
deleted file mode 100644
index 46e0ac9..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Project.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: Project.java,v 1.6 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Project</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Project#getClasspathReference <em>Classpath Reference</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getProject()
- * @model extendedMetaData="name='Project' kind='elementOnly'"
- * @generated
- */
-public interface Project extends EObject{
-    /**
-     * Returns the value of the '<em><b>Classpath Reference</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Classpath Reference</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Classpath Reference</em>' attribute.
-     * @see #setClasspathReference(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getProject_ClasspathReference()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='classpathReference'"
-     * @generated
-     */
-	String getClasspathReference();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Project#getClasspathReference <em>Classpath Reference</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Classpath Reference</em>' attribute.
-     * @see #getClasspathReference()
-     * @generated
-     */
-//	void setClasspathReference(String value);
-
-} // Project
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Property.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Property.java
deleted file mode 100644
index 8ab0b72..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Property.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: Property.java,v 1.5 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Property</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Property#getContext <em>Context</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Property#getDefault <em>Default</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Property#getId <em>Id</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Property#getLabel <em>Label</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Property#getType <em>Type</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getProperty()
- * @model extendedMetaData="name='Property' kind='empty'"
- * @generated
- */
-public interface Property extends EObject{
-	String CONTEXT_RUNTIME = "runtime";
-	String CONTEXT_SERVER = "server";
-
-    /**
-     * Returns the value of the '<em><b>Context</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Context</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Context</em>' attribute.
-     * @see #setContext(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getProperty_Context()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
-     *        extendedMetaData="kind='attribute' name='context'"
-     * @generated
-     */
-	String getContext();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Property#getContext <em>Context</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Context</em>' attribute.
-     * @see #getContext()
-     * @generated
-     */
-//	void setContext(String value);
-
-    /**
-     * Returns the value of the '<em><b>Default</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Default</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Default</em>' attribute.
-     * @see #setDefault(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getProperty_Default()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
-     *        extendedMetaData="kind='attribute' name='default'"
-     * @generated
-     */
-	String getDefault();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Property#getDefault <em>Default</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Default</em>' attribute.
-     * @see #getDefault()
-     * @generated
-     */
-//	void setDefault(String value);
-
-    /**
-     * Returns the value of the '<em><b>Id</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Id</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Id</em>' attribute.
-     * @see #setId(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getProperty_Id()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
-     *        extendedMetaData="kind='attribute' name='id'"
-     * @generated
-     */
-	String getId();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Property#getId <em>Id</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Id</em>' attribute.
-     * @see #getId()
-     * @generated
-     */
-//	void setId(String value);
-
-    /**
-     * Returns the value of the '<em><b>Label</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Label</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Label</em>' attribute.
-     * @see #setLabel(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getProperty_Label()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
-     *        extendedMetaData="kind='attribute' name='label'"
-     * @generated
-     */
-	String getLabel();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Property#getLabel <em>Label</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Label</em>' attribute.
-     * @see #getLabel()
-     * @generated
-     */
-//	void setLabel(String value);
-
-    /**
-     * Returns the value of the '<em><b>Type</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Type</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Type</em>' attribute.
-     * @see #setType(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getProperty_Type()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
-     *        extendedMetaData="kind='attribute' name='type'"
-     * @generated
-     */
-	String getType();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Property#getType <em>Type</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Type</em>' attribute.
-     * @see #getType()
-     * @generated
-     */
-//	void setType(String value);
-
-} // Property
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Publisher.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Publisher.java
deleted file mode 100644
index f908334..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/Publisher.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: Publisher.java,v 1.7 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import java.util.List;
-import org.eclipse.emf.ecore.EObject;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Publisher</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Publisher#getGroup <em>Group</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Publisher#getPublisherdata <em>Publisherdata</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.Publisher#getId <em>Id</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getPublisher()
- * @model extendedMetaData="name='Publisher' kind='elementOnly'"
- * @generated
- */
-public interface Publisher extends EObject{
-    /**
-     * Returns the value of the '<em><b>Group</b></em>' attribute list.
-     * The list contents are of type {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Group</em>' attribute list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Group</em>' attribute list.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerTypePackage#getPublisher_Group()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true"
-     *        extendedMetaData="kind='group' name='group:0'"
-     * @generated NOT
-     */
-//    FeatureMap getGroup();
-
-    /**
-     * Returns the value of the '<em><b>Publisherdata</b></em>' containment reference list.
-     * The list contents are of type {@link org.eclipse.jst.server.generic.servertype.definition.PublisherData}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Publisherdata</em>' containment reference list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Publisherdata</em>' containment reference list.
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getPublisher_Publisherdata()
-     * @model type="org.eclipse.jst.server.generic.servertype.definition.PublisherData" containment="true" resolveProxies="false" required="true" transient="true" volatile="true" derived="true"
-     *        extendedMetaData="kind='element' name='publisherdata' group='#group:0'"
-     * @generated
-     */
-    List getPublisherdata();
-
-    /**
-     * Returns the value of the '<em><b>Id</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Id</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Id</em>' attribute.
-     * @see #setId(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getPublisher_Id()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
-     *        extendedMetaData="kind='attribute' name='id'"
-     * @generated
-     */
-	String getId();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.Publisher#getId <em>Id</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Id</em>' attribute.
-     * @see #getId()
-     * @generated
-     */
-//	void setId(String value);
-
-} // Publisher
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/PublisherData.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/PublisherData.java
deleted file mode 100644
index bbd9753..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/PublisherData.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * <copyright>
- * </copyright>
- *
- * $Id: PublisherData.java,v 1.4 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Publisher Data</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.PublisherData#getDataname <em>Dataname</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.PublisherData#getDatavalue <em>Datavalue</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getPublisherData()
- * @model extendedMetaData="name='PublisherData' kind='elementOnly'"
- * @generated
- */
-public interface PublisherData extends EObject{
-    /**
-     * Returns the value of the '<em><b>Dataname</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Dataname</em>' attribute isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Dataname</em>' attribute.
-     * @see #setDataname(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getPublisherData_Dataname()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='dataname'"
-     * @generated
-     */
-    String getDataname();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.PublisherData#getDataname <em>Dataname</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Dataname</em>' attribute.
-     * @see #getDataname()
-     * @generated
-     */
-//    void setDataname(String value);
-
-    /**
-     * Returns the value of the '<em><b>Datavalue</b></em>' attribute.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Datavalue</em>' attribute isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Datavalue</em>' attribute.
-     * @see #setDatavalue(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getPublisherData_Datavalue()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='element' name='datavalue'"
-     * @generated
-     */
-    String getDatavalue();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.PublisherData#getDatavalue <em>Datavalue</em>}' attribute.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Datavalue</em>' attribute.
-     * @see #getDatavalue()
-     * @generated
-     */
-//    void setDatavalue(String value);
-
-} // PublisherData
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/ServerRuntime.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/ServerRuntime.java
deleted file mode 100644
index 64de67d..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/ServerRuntime.java
+++ /dev/null
@@ -1,476 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ServerRuntime.java,v 1.7 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import java.util.List;
-import java.util.Map;
-import org.eclipse.emf.ecore.EObject;
-
-import org.eclipse.jst.server.generic.internal.xml.Resolver;
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>Server Runtime</b></em>'.
- * <!-- end-user-doc -->
- *
- * <!-- begin-model-doc -->
- *       Generic Server Type Definition. It must have a list of      properties.     
- * <!-- end-model-doc -->
- *
- * <p>
- * The following features are supported:
- * <ul>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup <em>Group</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getProperty <em>Property</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup1 <em>Group1</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getPort <em>Port</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup2 <em>Group2</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getModule <em>Module</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getProject <em>Project</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getStart <em>Start</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getStop <em>Stop</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup3 <em>Group3</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getPublisher <em>Publisher</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getGroup4 <em>Group4</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getClasspath <em>Classpath</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getJndiConnection <em>Jndi Connection</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getName <em>Name</em>}</li>
- *   <li>{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getVersion <em>Version</em>}</li>
- * </ul>
- * </p>
- *
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime()
- * @model extendedMetaData="name='ServerRuntime' kind='elementOnly'"
- * @generated
- */
-public interface ServerRuntime extends EObject{
-    /**
-     * Returns the value of the '<em><b>Group</b></em>' attribute list.
-     * The list contents are of type {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Group</em>' attribute list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Group</em>' attribute list.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerTypePackage#getServerRuntime_Group()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true"
-     *        extendedMetaData="kind='group' name='group:0'"
-     * @generated
-     */
-//    FeatureMap getGroup();
-
-    /**
-     * Returns the value of the '<em><b>Property</b></em>' containment reference list.
-     * The list contents are of type {@link org.eclipse.jst.server.generic.servertype.definition.Property}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Property</em>' containment reference list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Property</em>' containment reference list.
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_Property()
-     * @model type="org.eclipse.jst.server.generic.servertype.definition.Property" containment="true" resolveProxies="false" transient="true" volatile="true" derived="true"
-     *        extendedMetaData="kind='element' name='property' group='#group:0'"
-     * @generated
-     */
-    List getProperty();
-
-    /**
-     * Returns the value of the '<em><b>Group1</b></em>' attribute list.
-     * The list contents are of type {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Group1</em>' attribute list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Group1</em>' attribute list.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerTypePackage#getServerRuntime_Group1()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true"
-     *        extendedMetaData="kind='group' name='group:2'"
-     * @generated
-     */
-//    FeatureMap getGroup1();
-
-    /**
-     * Returns the value of the '<em><b>Port</b></em>' containment reference list.
-     * The list contents are of type {@link org.eclipse.jst.server.generic.servertype.definition.Port}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Port</em>' containment reference list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Port</em>' containment reference list.
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_Port()
-     * @model type="org.eclipse.jst.server.generic.servertype.definition.Port" containment="true" resolveProxies="false" transient="true" volatile="true" derived="true"
-     *        extendedMetaData="kind='element' name='port' group='#group:2'"
-     * @generated
-     */
-    List getPort();
-
-    /**
-     * Returns the value of the '<em><b>Group2</b></em>' attribute list.
-     * The list contents are of type {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Group2</em>' attribute list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Group2</em>' attribute list.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerTypePackage#getServerRuntime_Group2()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true"
-     *        extendedMetaData="kind='group' name='group:4'"
-     * @generated
-     */
-//    FeatureMap getGroup2();
-
-    /**
-     * Returns the value of the '<em><b>Module</b></em>' containment reference list.
-     * The list contents are of type {@link org.eclipse.jst.server.generic.servertype.definition.Module}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Module</em>' containment reference list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Module</em>' containment reference list.
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_Module()
-     * @model type="org.eclipse.jst.server.generic.servertype.definition.Module" containment="true" resolveProxies="false" required="true" transient="true" volatile="true" derived="true"
-     *        extendedMetaData="kind='element' name='module' group='#group:4'"
-     * @generated
-     */
-    List getModule();
-
-    /**
-     * Returns the value of the '<em><b>Project</b></em>' containment reference.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Project</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Project</em>' containment reference.
-     * @see #setProject(Project)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_Project()
-     * @model containment="true" resolveProxies="false" required="true"
-     *        extendedMetaData="kind='element' name='project'"
-     * @generated
-     */
-	Project getProject();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getProject <em>Project</em>}' containment reference.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Project</em>' containment reference.
-     * @see #getProject()
-     * @generated
-     */
-//	void setProject(Project value);
-
-    /**
-     * Returns the value of the '<em><b>Start</b></em>' containment reference.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Start</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Start</em>' containment reference.
-     * @see #setStart(LaunchConfiguration)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_Start()
-     * @model containment="true" resolveProxies="false" required="true"
-     *        extendedMetaData="kind='element' name='start'"
-     * @generated
-     */
-	LaunchConfiguration getStart();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getStart <em>Start</em>}' containment reference.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Start</em>' containment reference.
-     * @see #getStart()
-     * @generated
-     */
-//	void setStart(LaunchConfiguration value);
-
-    /**
-     * Returns the value of the '<em><b>Stop</b></em>' containment reference.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Stop</em>' containment reference isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Stop</em>' containment reference.
-     * @see #setStop(LaunchConfiguration)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_Stop()
-     * @model containment="true" resolveProxies="false" required="true"
-     *        extendedMetaData="kind='element' name='stop'"
-     * @generated
-     */
-	LaunchConfiguration getStop();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getStop <em>Stop</em>}' containment reference.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Stop</em>' containment reference.
-     * @see #getStop()
-     * @generated
-     */
-//	void setStop(LaunchConfiguration value);
-
-    /**
-     * Returns the value of the '<em><b>Group3</b></em>' attribute list.
-     * The list contents are of type {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Group3</em>' attribute list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Group3</em>' attribute list.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerTypePackage#getServerRuntime_Group3()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true"
-     *        extendedMetaData="kind='group' name='group:9'"
-     * @generated
-     */
-//    FeatureMap getGroup3();
-
-    /**
-     * Returns the value of the '<em><b>Publisher</b></em>' containment reference list.
-     * The list contents are of type {@link org.eclipse.jst.server.generic.servertype.definition.Publisher}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Publisher</em>' containment reference list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Publisher</em>' containment reference list.
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_Publisher()
-     * @model type="org.eclipse.jst.server.generic.servertype.definition.Publisher" containment="true" resolveProxies="false" transient="true" volatile="true" derived="true"
-     *        extendedMetaData="kind='element' name='publisher' group='#group:9'"
-     * @generated
-     */
-    List getPublisher();
-
-    /**
-     * Returns the value of the '<em><b>Group4</b></em>' attribute list.
-     * The list contents are of type {@link org.eclipse.emf.ecore.util.FeatureMap.Entry}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Group4</em>' attribute list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Group4</em>' attribute list.
-     * @see org.eclipse.jst.server.generic.servertype.definition.ServerTypePackage#getServerRuntime_Group4()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true"
-     *        extendedMetaData="kind='group' name='group:11'"
-     * @generated
-     */
-//    FeatureMap getGroup4();
-
-    /**
-     * Returns the value of the '<em><b>Classpath</b></em>' containment reference list.
-     * The list contents are of type {@link org.eclipse.jst.server.generic.servertype.definition.Classpath}.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Classpath</em>' containment reference list isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Classpath</em>' containment reference list.
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_Classpath()
-     * @model type="org.eclipse.jst.server.generic.servertype.definition.Classpath" containment="true" resolveProxies="false" required="true" transient="true" volatile="true" derived="true"
-     *        extendedMetaData="kind='element' name='classpath' group='#group:11'"
-     * @generated
-     */
-    List getClasspath();
-
-    /**
-     * Returns the value of the '<em><b>Jndi Connection</b></em>' containment reference.
-     * <!-- begin-user-doc -->
-     * <p>
-     * If the meaning of the '<em>Jndi Connection</em>' containment reference isn't clear,
-     * there really should be more of a description here...
-     * </p>
-     * <!-- end-user-doc -->
-     * @return the value of the '<em>Jndi Connection</em>' containment reference.
-     * @see #setJndiConnection(JndiConnection)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_JndiConnection()
-     * @model containment="true" resolveProxies="false" required="true"
-     *        extendedMetaData="kind='element' name='jndiConnection'"
-     * @generated
-     */
-    JndiConnection getJndiConnection();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getJndiConnection <em>Jndi Connection</em>}' containment reference.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Jndi Connection</em>' containment reference.
-     * @see #getJndiConnection()
-     * @generated
-     */
-//    void setJndiConnection(JndiConnection value);
-
-    /**
-     * Returns the value of the '<em><b>Name</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Name</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Name</em>' attribute.
-     * @see #setName(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_Name()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String" required="true"
-     *        extendedMetaData="kind='attribute' name='name'"
-     * @generated
-     */
-	String getName();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getName <em>Name</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Name</em>' attribute.
-     * @see #getName()
-     * @generated
-     */
-//	void setName(String value);
-
-    /**
-     * Returns the value of the '<em><b>Version</b></em>' attribute.
-     * <!-- begin-user-doc -->
-	 * <p>
-	 * If the meaning of the '<em>Version</em>' attribute isn't clear,
-	 * there really should be more of a description here...
-	 * </p>
-	 * <!-- end-user-doc -->
-     * @return the value of the '<em>Version</em>' attribute.
-     * @see #setVersion(String)
-     * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage#getServerRuntime_Version()
-     * @model unique="false" dataType="org.eclipse.emf.ecore.xml.type.String"
-     *        extendedMetaData="kind='attribute' name='version'"
-     * @generated
-     */
-	String getVersion();
-
-    /**
-     * Sets the value of the '{@link org.eclipse.jst.server.generic.servertype.definition.ServerRuntime#getVersion <em>Version</em>}' attribute.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @param value the new value of the '<em>Version</em>' attribute.
-     * @see #getVersion()
-     * @generated
-     */
-//	void setVersion(String value);
-
-	/**
-	 * @param id the id of the '<em>Publisher</em>' attribute.
-	 * @return
-	 * @generated NOT
-	 */
-	Publisher getPublisher(String id);
-
-	/**
-	 * @param type the type of the '<em>Module</em>' attribute.
-	 * @return
-	 * @generated NOT
-	 */
-	Module getModule(String type);
-
-	/**
-	 * @param cpRef the reference id of the '<em>Classpath</em>' attribute.
-	 * @return
-	 * @generated NOT
-	 */
-	Classpath getClasspath(String cpRef);
-
-    
-    /**
-     * @generated NOT
-     */
-    String getId();
-    
-    /**
-     * @generated NOT
-     * @param id
-     */
-    void setId(String id);
-    
-    
-    
-    
-	/**
-	 * @generated NOT
-	 */
-	String getFilename();
-
-    
-	/**
-	 * @generated NOT
- */
-	void setFilename(String fn);
-
-	/**
-	 * @generated NOT
-	 */
-	void setPropertyValues(Map properties);
-
-	/**
-	 * @generated NOT
-	 */
-	Resolver getResolver();
-	
-    /**
-     * @generated NOT
-     */
-    String getConfigurationElementNamespace();
-    /**
-     * @generated NOT
-     * @param namespace
-     */
-    void setConfigurationElementNamespace(String namespace);
-    
-} // ServerRuntime
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/ServerTypeFactory.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/ServerTypeFactory.java
deleted file mode 100644
index dd0cf25..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/servertype/definition/ServerTypeFactory.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/**
- * <copyright>
- *******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************
- * </copyright>
- *
- * $Id: ServerTypeFactory.java,v 1.5 2005/04/19 17:49:01 gercan Exp $
- */
-package org.eclipse.jst.server.generic.servertype.definition;
-
-import org.eclipse.emf.ecore.EFactory;
-import org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage;
-
-/**
- * <!-- begin-user-doc -->
- * The <b>Factory</b> for the model.
- * It provides a create method for each non-abstract class of the model.
- * <!-- end-user-doc -->
- * @see org.eclipse.jst.server.generic.internal.servertype.definition.ServerTypePackage
- * @generated
- */
-public interface ServerTypeFactory extends EFactory{
-    /**
-     * The singleton instance of the factory.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @generated
-     */
-	ServerTypeFactory eINSTANCE = new org.eclipse.jst.server.generic.internal.servertype.definition.impl.ServerTypeFactoryImpl();
-
-    /**
-     * Returns a new object of class '<em>Archive Type</em>'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return a new object of class '<em>Archive Type</em>'.
-     * @generated
-     */
-	ArchiveType createArchiveType();
-
-    /**
-     * Returns a new object of class '<em>Classpath</em>'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return a new object of class '<em>Classpath</em>'.
-     * @generated
-     */
-	Classpath createClasspath();
-
-    /**
-     * Returns a new object of class '<em>Jndi Connection</em>'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return a new object of class '<em>Jndi Connection</em>'.
-     * @generated
-     */
-    JndiConnection createJndiConnection();
-
-    /**
-     * Returns a new object of class '<em>Jndi Property</em>'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return a new object of class '<em>Jndi Property</em>'.
-     * @generated
-     */
-    JndiProperty createJndiProperty();
-
-    /**
-     * Returns a new object of class '<em>Launch Configuration</em>'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return a new object of class '<em>Launch Configuration</em>'.
-     * @generated
-     */
-	LaunchConfiguration createLaunchConfiguration();
-
-    /**
-     * Returns a new object of class '<em>Module</em>'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return a new object of class '<em>Module</em>'.
-     * @generated
-     */
-	Module createModule();
-
-    /**
-     * Returns a new object of class '<em>Port</em>'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return a new object of class '<em>Port</em>'.
-     * @generated
-     */
-	Port createPort();
-
-    /**
-     * Returns a new object of class '<em>Project</em>'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return a new object of class '<em>Project</em>'.
-     * @generated
-     */
-	Project createProject();
-
-    /**
-     * Returns a new object of class '<em>Property</em>'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return a new object of class '<em>Property</em>'.
-     * @generated
-     */
-	Property createProperty();
-
-    /**
-     * Returns a new object of class '<em>Publisher</em>'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return a new object of class '<em>Publisher</em>'.
-     * @generated
-     */
-	Publisher createPublisher();
-
-    /**
-     * Returns a new object of class '<em>Publisher Data</em>'.
-     * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-     * @return a new object of class '<em>Publisher Data</em>'.
-     * @generated
-     */
-    PublisherData createPublisherData();
-
-    /**
-     * Returns a new object of class '<em>Server Runtime</em>'.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return a new object of class '<em>Server Runtime</em>'.
-     * @generated
-     */
-	ServerRuntime createServerRuntime();
-
-    /**
-     * Returns the package supported by this factory.
-     * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-     * @return the package supported by this factory.
-     * @generated
-     */
-	ServerTypePackage getServerTypePackage();
-
-} //ServerTypeFactory
diff --git a/plugins/org.eclipse.jst.server.generic.core/xsd/ServerTypeDefinitionSchema.xsd b/plugins/org.eclipse.jst.server.generic.core/xsd/ServerTypeDefinitionSchema.xsd
deleted file mode 100644
index 8976a2b..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/xsd/ServerTypeDefinitionSchema.xsd
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<schema targetNamespace="http://eclipse.org/jst/server/generic/ServerTypeDefinition" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:jst="http://eclipse.org/jst/server/generic/ServerTypeDefinition">
-
-
-
-	<complexType name="ServerRuntime">
-		<annotation>
-			<documentation>
-				Generic Server Type Definition. It must have a list of
-				properties.
-			</documentation>
-		</annotation>
-
-		<sequence maxOccurs="1" minOccurs="1">
-			<sequence maxOccurs="unbounded" minOccurs="0">
-				<element name="property" type="jst:Property"/>
-			</sequence>
-
-			<sequence maxOccurs="unbounded" minOccurs="0">
-				<element name="port" type="jst:Port"/>
-			</sequence>
-
-			<sequence maxOccurs="unbounded" minOccurs="1">
-				<element name="module" type="jst:Module"/>
-			</sequence>
-			<element name="project" type="jst:Project"/>
-			<element name="start" type="jst:LaunchConfiguration"/>
-			<element name="stop" type="jst:LaunchConfiguration"/>
-
-			<sequence maxOccurs="unbounded" minOccurs="0">
-				<element name="publisher" type="jst:Publisher"/>
-			</sequence>
-
-			<sequence maxOccurs="unbounded" minOccurs="1">
-				<element name="classpath" type="jst:Classpath"/>
-			</sequence>
-			<element name="jndiConnection" type="jst:jndiConnection"/>
-		</sequence>
-
-		<attribute name="name" type="string" use="required"/>
-		<attribute name="version" type="string"/>
-	</complexType>
-
-	<complexType name="Property">
-		<attribute name="id" type="string"/>
-		<attribute name="label" type="string"/>
-		<attribute name="type" type="string"/>
-		<attribute name="context" type="string"/>
-		<attribute name="default" type="string"/>
-	</complexType>
-
-	<complexType name="Module">
-		<sequence>
-			<element name="type" type="string"/>
-			<element name="publishDir" type="string"/>
-			<element name="publisherReference" type="string"/>
-		</sequence>
-	</complexType>
-
-	<complexType name="LaunchConfiguration">
-		<sequence>
-			<element name="mainClass" type="string"/>
-			<element name="workingDirectory" type="string"/>
-			<element name="programArguments" type="string"/>
-			<element name="vmParameters" type="string"/>
-			<element name="classpathReference" type="string"/>
-		</sequence>
-	</complexType>
-
-	<complexType name="Port">
-		<sequence>
-			<element name="no" type="string"/>
-			<element name="name" type="string"/>
-			<element name="protocol" type="string"/>
-		</sequence>
-	</complexType>
-
-	<complexType name="Classpath">
-		<sequence maxOccurs="unbounded" minOccurs="1">
-			<element name="archive">
-				<complexType>
-					<attribute name="path" type="string"/>
-				</complexType>
-			</element>
-		</sequence>
-		<attribute name="id" type="string"/>
-		<attribute name="isLibrary" type="boolean" use="optional"/>
-	</complexType>
-
-	<complexType name="Publisher">
-		<sequence maxOccurs="unbounded" minOccurs="1">
-            <element name="publisherdata" type="jst:PublisherData">
-      </element>
-        </sequence>
-		<attribute name="id" type="string"/>
-	</complexType>
-
-	<complexType name="Project">
-		<sequence maxOccurs="1" minOccurs="1">
-		<element name="classpathReference" type="string"/>
-		</sequence>
-	</complexType>
-
-    <complexType name="PublisherData">
-    <sequence maxOccurs="1" minOccurs="1">
-      <element name="dataname" type="string"/>
-      <element name="datavalue" type="string"/>
-    </sequence>
-  </complexType>
-    <complexType name="jndiConnection">
-    	<sequence>
-    		<element name="providerUrl" type="string"/>
-    		<sequence maxOccurs="unbounded" minOccurs="0">
-    			<element name="jndiProperty" type="jst:jndiProperty"/>
-    		</sequence>
-    		<element name="initialContextFactory" type="string"/>
-    	</sequence>
-    </complexType>
-
-    <complexType name="jndiProperty">
-    	<all maxOccurs="1" minOccurs="1">
-    		<element name="name" type="string"/>
-    		<element name="value" type="string"/>
-    	</all>
-    </complexType>
-
-</schema>
diff --git a/plugins/org.eclipse.jst.server.generic.core/xsd/org.eclipse.jst.server.generic.servertype.ecore b/plugins/org.eclipse.jst.server.generic.core/xsd/org.eclipse.jst.server.generic.servertype.ecore
deleted file mode 100644
index aaa2133..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/xsd/org.eclipse.jst.server.generic.servertype.ecore
+++ /dev/null
@@ -1,437 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="definition"
-    nsURI="http://eclipse.org/jst/server/generic/ServerTypeDefinition" nsPrefix="definition">
-  <eClassifiers xsi:type="ecore:EClass" name="ArchiveType">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="archive_._type"/>
-      <details key="kind" value="empty"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="path" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="path"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Classpath">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="Classpath"/>
-      <details key="kind" value="elementOnly"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group" unique="false" upperBound="-1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="group"/>
-        <details key="name" value="group:0"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="archive" lowerBound="1"
-        upperBound="-1" eType="#//ArchiveType" volatile="true" transient="true" derived="true"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="archive"/>
-        <details key="group" value="#group:0"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="id"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isLibrary" unique="false"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Boolean"
-        unsettable="true">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="isLibrary"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="JndiConnection">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="jndiConnection"/>
-      <details key="kind" value="elementOnly"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="providerUrl" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="providerUrl"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group" unique="false" upperBound="-1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="group"/>
-        <details key="name" value="group:1"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="jndiProperty" upperBound="-1"
-        eType="#//JndiProperty" volatile="true" transient="true" derived="true" containment="true"
-        resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="jndiProperty"/>
-        <details key="group" value="#group:1"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="initialContextFactory"
-        unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="initialContextFactory"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="JndiProperty">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="jndiProperty"/>
-      <details key="kind" value="elementOnly"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="name"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" unique="false" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="value"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="LaunchConfiguration">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="LaunchConfiguration"/>
-      <details key="kind" value="elementOnly"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mainClass" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="mainClass"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="workingDirectory" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="workingDirectory"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="programArguments" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="programArguments"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="vmParameters" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="vmParameters"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classpathReference" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="classpathReference"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Module">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="Module"/>
-      <details key="kind" value="elementOnly"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" unique="false" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="type"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="publishDir" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="publishDir"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="publisherReference" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="publisherReference"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Port">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="Port"/>
-      <details key="kind" value="elementOnly"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="no" unique="false" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="no"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="name"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="protocol" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="protocol"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Project">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="Project"/>
-      <details key="kind" value="elementOnly"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="classpathReference" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="classpathReference"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Property">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="Property"/>
-      <details key="kind" value="empty"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="context" unique="false"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="context"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="default" unique="false"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="default"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="id"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="label" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="label"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="type"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Publisher">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="Publisher"/>
-      <details key="kind" value="elementOnly"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group" unique="false" upperBound="-1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="group"/>
-        <details key="name" value="group:0"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="publisherdata" lowerBound="1"
-        upperBound="-1" eType="#//PublisherData" volatile="true" transient="true"
-        derived="true" containment="true" resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="publisherdata"/>
-        <details key="group" value="#group:0"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="id" unique="false" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="id"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="PublisherData">
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="PublisherData"/>
-      <details key="kind" value="elementOnly"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="dataname" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="dataname"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="datavalue" unique="false"
-        lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="datavalue"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ServerRuntime">
-    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
-      <details key="documentation" value="

-				Generic Server Type Definition. It must have a list of

-				properties.

-			"/>
-    </eAnnotations>
-    <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-      <details key="name" value="ServerRuntime"/>
-      <details key="kind" value="elementOnly"/>
-    </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group" unique="false" upperBound="-1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="group"/>
-        <details key="name" value="group:0"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="property" upperBound="-1"
-        eType="#//Property" volatile="true" transient="true" derived="true" containment="true"
-        resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="property"/>
-        <details key="group" value="#group:0"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group1" unique="false"
-        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="group"/>
-        <details key="name" value="group:2"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="port" upperBound="-1" eType="#//Port"
-        volatile="true" transient="true" derived="true" containment="true" resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="port"/>
-        <details key="group" value="#group:2"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group2" unique="false"
-        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="group"/>
-        <details key="name" value="group:4"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="module" lowerBound="1"
-        upperBound="-1" eType="#//Module" volatile="true" transient="true" derived="true"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="module"/>
-        <details key="group" value="#group:4"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="project" lowerBound="1"
-        eType="#//Project" containment="true" resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="project"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="start" lowerBound="1" eType="#//LaunchConfiguration"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="start"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="stop" lowerBound="1" eType="#//LaunchConfiguration"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="stop"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group3" unique="false"
-        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="group"/>
-        <details key="name" value="group:9"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="publisher" upperBound="-1"
-        eType="#//Publisher" volatile="true" transient="true" derived="true" containment="true"
-        resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="publisher"/>
-        <details key="group" value="#group:9"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="group4" unique="false"
-        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="group"/>
-        <details key="name" value="group:11"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="classpath" lowerBound="1"
-        upperBound="-1" eType="#//Classpath" volatile="true" transient="true" derived="true"
-        containment="true" resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="classpath"/>
-        <details key="group" value="#group:11"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="jndiConnection" lowerBound="1"
-        eType="#//JndiConnection" containment="true" resolveProxies="false">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="element"/>
-        <details key="name" value="jndiConnection"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" lowerBound="1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="name"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="version" unique="false"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="kind" value="attribute"/>
-        <details key="name" value="version"/>
-      </eAnnotations>
-    </eStructuralFeatures>
-  </eClassifiers>
-</ecore:EPackage>
diff --git a/plugins/org.eclipse.jst.server.generic.core/xsd/servertype.genmodel b/plugins/org.eclipse.jst.server.generic.core/xsd/servertype.genmodel
deleted file mode 100644
index f181963..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/xsd/servertype.genmodel
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<genmodel:GenModel xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
-    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/org.eclipse.jst.server.generic.core/src"
-    editDirectory="/org.eclipse.jst.server.generic.model.edit/src" editorDirectory="/org.eclipse.jst.server.generic.model.editor/src"
-    modelPluginID="org.eclipse.jst.server.generic.model" runtimeJar="true" modelName="Servertype"
-    editPluginClass="org.eclipse.jst.server.generic.server.type.definition.provider.ServertypeEditPlugin"
-    editorPluginClass="org.eclipse.jst.server.generic.server.type.definition.presentation.ServertypeEditorPlugin"
-    suppressEMFTypes="true" runtimeCompatibility="false">
-  <foreignModel>ServerTypeDefinitionSchema.xsd</foreignModel>
-  <genPackages prefix="ServerType" basePackage="org.eclipse.jst.server.generic.servertype"
-      resource="XML" ecorePackage="org.eclipse.jst.server.generic.servertype.ecore#/">
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//ArchiveType">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//ArchiveType/path"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//Classpath">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Classpath/group"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//Classpath/archive"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Classpath/id"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Classpath/isLibrary"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//JndiConnection">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//JndiConnection/providerUrl"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//JndiConnection/group"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//JndiConnection/jndiProperty"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//JndiConnection/initialContextFactory"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//JndiProperty">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//JndiProperty/name"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//JndiProperty/value"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration/mainClass"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration/workingDirectory"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration/programArguments"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration/vmParameters"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration/classpathReference"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//Module">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Module/type"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Module/publishDir"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Module/publisherReference"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//Port">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Port/no"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Port/name"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Port/protocol"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//Project">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Project/classpathReference"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//Property">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Property/context"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Property/default"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Property/id"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Property/label"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Property/type"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//Publisher">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Publisher/group"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//Publisher/publisherdata"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//Publisher/id"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//PublisherData">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//PublisherData/dataname"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//PublisherData/datavalue"/>
-    </genClasses>
-    <genClasses ecoreClass="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/group"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/property"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/group1"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/port"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/group2"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/module"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/project"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/start"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/stop"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/group3"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/publisher"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/group4"/>
-      <genFeatures property="None" notify="false" createChild="false" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/classpath"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/jndiConnection"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/name"/>
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/version"/>
-    </genClasses>
-  </genPackages>
-</genmodel:GenModel>
diff --git a/plugins/org.eclipse.jst.server.generic.core/xsd/servertype.xsd2ecore b/plugins/org.eclipse.jst.server.generic.core/xsd/servertype.xsd2ecore
deleted file mode 100644
index 999e4e4..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/xsd/servertype.xsd2ecore
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<xsd2ecore:XSD2EcoreMappingRoot xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsd2ecore="http://www.eclipse.org/emf/2002/XSD2Ecore" inputs="ServerTypeDefinitionSchema.xsd#/"
-    outputs="org.eclipse.jst.server.generic.servertype.ecore#/" topToBottom="true">
-  <nested inputs="bundleentry://175/cache/www.w3.org/2001/XMLSchema.xsd#//string;XSDSimpleTypeDefinition=7"
-      outputs="http://www.eclipse.org/emf/2003/XMLType#//String"/>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//Classpath;XSDComplexTypeDefinition=5/XSDParticle/XSDModelGroup/XSDParticle/archive;XSDElementDeclaration/XSDComplexTypeDefinition"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//ArchiveType">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Classpath;XSDComplexTypeDefinition=5/XSDParticle/XSDModelGroup/XSDParticle/archive;XSDElementDeclaration/XSDComplexTypeDefinition/XSDAttributeUse"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ArchiveType/path"/>
-  </nested>
-  <nested inputs="bundleentry://175/cache/www.w3.org/2001/XMLSchema.xsd#//boolean;XSDSimpleTypeDefinition=8"
-      outputs="http://www.eclipse.org/emf/2003/XMLType#//Boolean"/>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//Classpath;XSDComplexTypeDefinition=5"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//Classpath">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Classpath;XSDComplexTypeDefinition=5/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Classpath/group"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Classpath;XSDComplexTypeDefinition=5/XSDParticle/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Classpath/archive"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Classpath;XSDComplexTypeDefinition=5/XSDAttributeUse"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Classpath/id"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Classpath;XSDComplexTypeDefinition=5/XSDAttributeUse=1"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Classpath/isLibrary"/>
-  </nested>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//LaunchConfiguration;XSDComplexTypeDefinition=3"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//LaunchConfiguration;XSDComplexTypeDefinition=3/XSDParticle/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration/class"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//LaunchConfiguration;XSDComplexTypeDefinition=3/XSDParticle/XSDModelGroup/XSDParticle=1"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration/workingDirectory"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//LaunchConfiguration;XSDComplexTypeDefinition=3/XSDParticle/XSDModelGroup/XSDParticle=2"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration/programArguments"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//LaunchConfiguration;XSDComplexTypeDefinition=3/XSDParticle/XSDModelGroup/XSDParticle=3"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration/vmParameters"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//LaunchConfiguration;XSDComplexTypeDefinition=3/XSDParticle/XSDModelGroup/XSDParticle=4"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//LaunchConfiguration/classpathReference"/>
-  </nested>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//Module;XSDComplexTypeDefinition=2"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//Module">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Module;XSDComplexTypeDefinition=2/XSDParticle/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Module/type"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Module;XSDComplexTypeDefinition=2/XSDParticle/XSDModelGroup/XSDParticle=1"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Module/publishDir"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Module;XSDComplexTypeDefinition=2/XSDParticle/XSDModelGroup/XSDParticle=2"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Module/publisherReference"/>
-  </nested>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//Port;XSDComplexTypeDefinition=4"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//Port">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Port;XSDComplexTypeDefinition=4/XSDParticle/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Port/no"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Port;XSDComplexTypeDefinition=4/XSDParticle/XSDModelGroup/XSDParticle=1"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Port/name"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Port;XSDComplexTypeDefinition=4/XSDParticle/XSDModelGroup/XSDParticle=2"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Port/protocol"/>
-  </nested>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//Project;XSDComplexTypeDefinition=7"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//Project">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Project;XSDComplexTypeDefinition=7/XSDParticle/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Project/classpathReference"/>
-  </nested>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//Property;XSDComplexTypeDefinition=1"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//Property">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Property;XSDComplexTypeDefinition=1/XSDAttributeUse=3"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Property/context"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Property;XSDComplexTypeDefinition=1/XSDAttributeUse=4"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Property/default"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Property;XSDComplexTypeDefinition=1/XSDAttributeUse"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Property/id"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Property;XSDComplexTypeDefinition=1/XSDAttributeUse=1"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Property/label"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Property;XSDComplexTypeDefinition=1/XSDAttributeUse=2"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Property/type"/>
-  </nested>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6/XSDParticle/XSDModelGroup/XSDParticle/publish;XSDElementDeclaration/XSDComplexTypeDefinition"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//PublishType">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6/XSDParticle/XSDModelGroup/XSDParticle/publish;XSDElementDeclaration/XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//PublishType/task"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6/XSDParticle/XSDModelGroup/XSDParticle/publish;XSDElementDeclaration/XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=1"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//PublishType/classpathReference"/>
-  </nested>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6/XSDParticle/XSDModelGroup/XSDParticle=1/unpublish;XSDElementDeclaration/XSDComplexTypeDefinition"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//UnpublishType">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6/XSDParticle/XSDModelGroup/XSDParticle=1/unpublish;XSDElementDeclaration/XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//UnpublishType/task"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6/XSDParticle/XSDModelGroup/XSDParticle=1/unpublish;XSDElementDeclaration/XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=1"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//UnpublishType/classpathReference"/>
-  </nested>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//Publisher">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Publisher/group"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6/XSDParticle/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Publisher/publish"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6/XSDParticle/XSDModelGroup/XSDParticle=1"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Publisher/unpublish"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//Publisher;XSDComplexTypeDefinition=6/XSDAttributeUse"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//Publisher/id"/>
-  </nested>
-  <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition"
-      outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime">
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/group"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/property"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=1"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/group1"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=1/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/port"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=2"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/group2"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=2/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/module"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=3"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/project"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=4"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/start"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=5"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/stop"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=6"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/group3"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=6/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/publisher"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=7"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/group4"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDParticle/XSDModelGroup/XSDParticle=7/XSDModelGroup/XSDParticle"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/classpath"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDAttributeUse"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/name"/>
-    <nested inputs="ServerTypeDefinitionSchema.xsd#//ServerRuntime;XSDComplexTypeDefinition/XSDAttributeUse=1"
-        outputs="org.eclipse.jst.server.generic.servertype.ecore#//ServerRuntime/version"/>
-  </nested>
-</xsd2ecore:XSD2EcoreMappingRoot>
diff --git a/plugins/org.eclipse.jst.server.generic.modules/.cvsignore b/plugins/org.eclipse.jst.server.generic.modules/.cvsignore
deleted file mode 100644
index 42654c1..0000000
--- a/plugins/org.eclipse.jst.server.generic.modules/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-bin
-build.xml
-commonmodules.jar
-org.eclipse.jst.server.generic.modules_1.0.0.jar
-temp.folder
diff --git a/plugins/org.eclipse.jst.server.generic.modules/.project b/plugins/org.eclipse.jst.server.generic.modules/.project
deleted file mode 100644
index af14ba8..0000000
--- a/plugins/org.eclipse.jst.server.generic.modules/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.server.generic.ui</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.jst.server.generic.ui/.classpath b/plugins/org.eclipse.jst.server.generic.ui/.classpath
deleted file mode 100644
index 065ac06..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/plugins/org.eclipse.jst.server.generic.ui/.cvsignore b/plugins/org.eclipse.jst.server.generic.ui/.cvsignore
deleted file mode 100644
index 058a1b7..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-bin
-build.xml
-genericui.jar
-org.eclipse.jst.server.generic.ui_1.0.0.jar
-temp.folder
diff --git a/plugins/org.eclipse.jst.server.generic.ui/.project b/plugins/org.eclipse.jst.server.generic.ui/.project
deleted file mode 100644
index af14ba8..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.server.generic.ui</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.jst.server.generic.ui/build.properties b/plugins/org.eclipse.jst.server.generic.ui/build.properties
deleted file mode 100644
index 6b4a2a0..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/build.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-source.genericui.jar = src/
-output.genericui.jar = bin/
-bin.includes = plugin.xml,\
-               genericui.jar,\
-               icons/,\
-               plugin.properties
-src.includes = icons/,\
-               plugin.xml,\
-               plugin.properties,\
-               src/
diff --git a/plugins/org.eclipse.jst.server.generic.ui/icons/obj16/lomboz.gif b/plugins/org.eclipse.jst.server.generic.ui/icons/obj16/lomboz.gif
deleted file mode 100644
index 68db0f5..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/icons/obj16/lomboz.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.generic.ui/icons/wizban/logo.gif b/plugins/org.eclipse.jst.server.generic.ui/icons/wizban/logo.gif
deleted file mode 100644
index bf87877..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/icons/wizban/logo.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.generic.ui/plugin.properties b/plugins/org.eclipse.jst.server.generic.ui/plugin.properties
deleted file mode 100644
index 0f78cc4..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/plugin.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-pluginName=Generic Server Plugin UI
-providerName=Eclipse.org
-pluginDescription=UI Components for the generic server plugin.
-
diff --git a/plugins/org.eclipse.jst.server.generic.ui/plugin.xml b/plugins/org.eclipse.jst.server.generic.ui/plugin.xml
deleted file mode 100644
index e1af15c..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/plugin.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin
-   id="org.eclipse.jst.server.generic.ui"
-   name="%pluginName"
-   version="1.0.0"
-   provider-name="%providerName"
-   class="org.eclipse.jst.server.generic.ui.internal.GenericUiPlugin"
-   description="%pluginDescription">
-
-   <runtime>
-      <library name="genericui.jar">
-         <export name="*"/>
-      </library>
-   </runtime>
-
-   <requires>
-      <import plugin="org.eclipse.ui"/>
-      <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.wst.server.ui"/>
-       <import plugin="org.eclipse.debug.ui"/>
-      <import plugin="org.eclipse.jdt.debug.ui"/>
-      <import plugin="org.eclipse.jst.server.generic.core"/>
-      <import plugin="org.eclipse.wst.server.core" />
-   </requires>
-
-  <!--<extension point="org.eclipse.wst.server.ui.editorPages">
-      <page
-         id="org.eclipse.jst.server.generic.configuration.editor.webmodule"
-         order="20"
-         name="Lomboz server Edit"
-         typeIds="org.eclipse.jst.server.generic.*"
-         class="org.eclipse.jst.server.generic.ui.internal.GenericServerEditorPartFactory"/>
-   </extension>
-   
-    <extension point="org.eclipse.wst.server.ui.editorPageSections">
-      <section
-         id="org.eclipse.jst.server.generic.editor.general"
-         order="0"
-         insertionId="org.eclipse.wst.server.editor.overview.left"
-         typeIds="org.eclipse.jst.server.generic.*"
-         class="org.eclipse.jst.server.generic.ui.internal.GenericServerEditorSectionFactory"/>       
-   </extension>-->
- 	
-  <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages">
-    <launchConfigurationTypeImage
-      id="org.eclipse.jst.server.generic.image.ui.launchConfigurationTypeImage"
-      configTypeID="org.eclipse.jst.server.generic.core.launchConfigurationType"
-      icon="icons/obj16/lomboz.gif">
-    </launchConfigurationTypeImage>
-  </extension>
-  
-  <extension point="org.eclipse.debug.ui.launchConfigurationTabGroups">
-    <launchConfigurationTabGroup
-      id="org.eclipse.jst.server.generic.ui.internal.launchConfigurationTabGroup"
-      type="org.eclipse.jst.server.generic.core.launchConfigurationType"
-      class="org.eclipse.jst.server.generic.ui.internal.GenericLaunchConfigurationTabGroup">
-    </launchConfigurationTabGroup>
-  </extension>
-   
-
-</plugin>
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericLaunchConfigurationTabGroup.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericLaunchConfigurationTabGroup.java
deleted file mode 100644
index 195f272..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericLaunchConfigurationTabGroup.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.ui.internal;
-
-import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup;
-import org.eclipse.debug.ui.CommonTab;
-import org.eclipse.debug.ui.EnvironmentTab;
-import org.eclipse.debug.ui.ILaunchConfigurationDialog;
-import org.eclipse.debug.ui.ILaunchConfigurationTab;
-import org.eclipse.debug.ui.sourcelookup.SourceLookupTab;
-import org.eclipse.jdt.debug.ui.launchConfigurations.JavaArgumentsTab;
-import org.eclipse.jdt.debug.ui.launchConfigurations.JavaClasspathTab;
-import org.eclipse.jdt.debug.ui.launchConfigurations.JavaJRETab;
-import org.eclipse.wst.server.ui.ServerLaunchConfigurationTab;
-
-
-public class GenericLaunchConfigurationTabGroup extends AbstractLaunchConfigurationTabGroup{
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTabGroup ILaunchConfigurationTabGroup#createTabs(ILaunchConfigurationDialog, String)
-	 */
-	public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
-		ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[7];
-		tabs[0] = new ServerLaunchConfigurationTab(new String[] { "org.eclipse.jst.server.generic" });
-		tabs[0].setLaunchConfigurationDialog(dialog);
-		tabs[1] = new JavaArgumentsTab();
-		tabs[1].setLaunchConfigurationDialog(dialog);
-		tabs[2] = new JavaClasspathTab();
-		tabs[2].setLaunchConfigurationDialog(dialog);
-		tabs[3] = new SourceLookupTab();
-		tabs[3].setLaunchConfigurationDialog(dialog);
-		tabs[4] = new EnvironmentTab();
-		tabs[4].setLaunchConfigurationDialog(dialog);
-		tabs[5] = new JavaJRETab();
-		tabs[5].setLaunchConfigurationDialog(dialog);	 
-		tabs[6] = new CommonTab();
-		tabs[6].setLaunchConfigurationDialog(dialog);
-		setTabs(tabs);
-	}}
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerRuntimeWizardFragment.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerRuntimeWizardFragment.java
deleted file mode 100644
index 4bbc73c..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerRuntimeWizardFragment.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.ui.internal;
-
-import java.util.Map;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jst.server.generic.core.internal.GenericServerRuntime;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.IRuntimeType;
-import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
-import org.eclipse.wst.server.core.ServerCore;
-import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.model.RuntimeDelegate;
-import org.eclipse.wst.server.ui.wizard.IWizardHandle;
-
-/**
- * A serverDefinitionType aware wizard for defining runtimes.
- * 
- * @author Gorkem Ercan
- */
-public class GenericServerRuntimeWizardFragment extends ServerDefinitionTypeAwareWizardFragment {
-	
-	private ServerTypeDefinitionGroup fServerPanel;
-	private RuntimeDelegate fRuntimeDelegate;
-    private Map fServerRuntimeProperties;
-	
-	/**
-	 * Constructor
-	 */
-	public GenericServerRuntimeWizardFragment() {
-		super();
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.server.ui.wizard.IWizardFragment#isComplete()
-	 */
-	public boolean isComplete() {
-	  	RuntimeDelegate runtime = getRuntimeDelegate();
-		if (runtime == null)
-			return false;
-		IStatus status = runtime.validate();
-		return (status != null && status.isOK());
-	}
-	
-	public void createContent(Composite parent, IWizardHandle handle) {
-		createServerDefinitionTypeComposite(parent);
-	}
-
-	
-
-	/**
-     * @param selected
-     */
-    private void createServerDefinitionTypeComposite(Composite parent) {     
-        Map properties= null;
-		ServerRuntime definition=null;
-        if(getRuntimeDelegate()!=null)
-		{
-			properties = getRuntimeDelegate().getAttribute(GenericServerRuntime.SERVER_INSTANCE_PROPERTIES,(Map)null);
-			definition = getServerTypeDefinition(getServerDefinitionId(),properties);
-		}
-		fServerPanel = new ServerTypeDefinitionGroup(this,definition,ServerTypeDefinitionGroup.CONTEXT_RUNTIME,properties,parent);
-    }
-	
-	private String getServerDefinitionId()
-	{
-		String currentDefinition= null;
-		if(getRuntimeDelegate()!=null)
-			currentDefinition =  getRuntimeDelegate().getRuntime().getRuntimeType().getId();
-		if(currentDefinition!= null && currentDefinition.length()>0)
-		{	
-			return currentDefinition;
-		}
-		return null;
-	}
-	
-	
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.server.ui.wizard.IWizardFragment#enter()
-	 */
-	public void enter() {
-		
-        String serverDefinition = getServerDefinitionId();
-		if(serverDefinition!=null && serverDefinition.length()>0)
-		{
-		    Map properties = null;
-	        if (getRuntimeDelegate() != null) {
-	            properties = getRuntimeDelegate().getAttribute(GenericServerRuntime.SERVER_INSTANCE_PROPERTIES,(Map) null);
-	        }
-	        ServerRuntime definition = getServerTypeDefinition(serverDefinition,properties);
-	        if(fServerPanel!=null)
-				fServerPanel.reset(definition,ServerTypeDefinitionGroup.CONTEXT_RUNTIME, properties);
-		}
-        else{
-            populateRuntimeDelegateProperties();
-        }
-        validate();
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.server.ui.wizard.IWizardFragment#exit()
-	 */
-	public void exit() {
-	    try {
-			populateRuntimeDelegateProperties(); 
-	        getRuntimeDelegate().getRuntimeWorkingCopy().save(true,new NullProgressMonitor());
-	    }
-	    catch(Exception e){//unhandled
-	    }
-        fRuntimeDelegate=null;
-   }
-
-	protected Map getServerRuntimeProperties(){
-	    return fServerRuntimeProperties; 
-	}
-
-	private String createName()
-	{
-	    RuntimeDelegate dl = getRuntimeDelegate();
-	    IRuntimeType runtimeType = dl.getRuntime().getRuntimeType();
-	    String name = GenericServerUIMessages.getFormattedString("runtimeName", new String[] {runtimeType.getName()});
-		IRuntime[] list = ServerCore.getRuntimes();
-		int suffix = 1;
-		String suffixName=name;
-		for(int i=0;i<list.length;i++)
-	    {
-	        if(list[i].getName().equals(name)|| list[i].getName().equals(suffixName))
-	            suffix++;
-	        suffixName= name+" "+suffix;
-	    }
-	    
-		if(suffix>1)
-		    return suffixName;
-	    return name;
-	}
-	
-	private RuntimeDelegate getRuntimeDelegate()
-	{
-		if(fRuntimeDelegate == null)
-		{	
-		    IRuntimeWorkingCopy wc = (IRuntimeWorkingCopy)getTaskModel().getObject(TaskModel.TASK_RUNTIME);
-		    if(wc==null)
-		        return null;
-		    fRuntimeDelegate = (RuntimeDelegate)wc.getAdapter(RuntimeDelegate.class);
-		}
-		return fRuntimeDelegate;
-	}
-    /* (non-Javadoc)
-     * @see org.eclipse.jst.server.generic.internal.ui.ServerDefinitionTypeAwareWizardFragment#description()
-     */
-    public String description() {
-        String rName = getRuntimeName();
-        if(rName == null || rName.length()<1)
-            rName="Generic";      
-        return  GenericServerUIMessages.getFormattedString("runtimeWizardDescription",new String[] {rName});
-    }
-    /* (non-Javadoc)
-     * @see org.eclipse.jst.server.generic.internal.ui.ServerDefinitionTypeAwareWizardFragment#title()
-     */
-    public String title() {
-        String rName = getRuntimeName();
-        if(rName == null || rName.length()<1)
-            rName="Generic";
-       return GenericServerUIMessages.getFormattedString("runtimeWizardTitle",new String[]{rName});
-    }
-    
-    private String getRuntimeName()
-    {
-       if(getRuntimeDelegate()!=null && getRuntimeDelegate().getRuntime()!=null)
-            return getRuntimeDelegate().getRuntime().getName();
-        return null;
-    }
-    
-    /* (non-Javadoc)
-     * @see org.eclipse.jst.server.generic.internal.ui.ServerDefinitionTypeAwareWizardFragment#serverDefinitionTypePropertiesChanged()
-     */
-    public void serverDefinitionTypePropertiesChanged() {
-		populateRuntimeDelegateProperties();
-		validate();
-   }
-    /**
-     * 
-     */
-    private void populateRuntimeDelegateProperties() {
-       
-        fServerRuntimeProperties = fServerPanel.getProperties();
-        Map properties = getServerRuntimeProperties();
-        RuntimeDelegate dl = getRuntimeDelegate();
-        dl.setAttribute(GenericServerRuntime.SERVER_DEFINITION_ID, getRuntimeDelegate().getRuntime().getRuntimeType().getId());
-        dl.setAttribute(GenericServerRuntime.SERVER_INSTANCE_PROPERTIES,properties);
-        dl.getRuntimeWorkingCopy().setName(createName());
-    }
-    
-    private void validate()
-    {
-		if (getRuntimeDelegate() == null) {
-			this.getWizard().setMessage("", IMessageProvider.ERROR);
-			return;
-		}
-		IStatus status = getRuntimeDelegate().validate();
-		if (status == null || status.isOK())
-			getWizard().setMessage(null, IMessageProvider.NONE);
-		else
-			getWizard().setMessage(status.getMessage(), IMessageProvider.ERROR);
-		getWizard().update();
-    }
-}
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.java
deleted file mode 100644
index 03eb33f..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.eclipse.jst.server.generic.ui.internal;
-
-import java.text.MessageFormat;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-/**
- * Helper class to get messages
- * 
- * @author Gorkem Ercan
- */
-public class GenericServerUIMessages {
-
-	private static final String RESOURCE_BUNDLE= "org.eclipse.jst.server.generic.ui.internal.GenericServerUIMessages";//$NON-NLS-1$
-
-	private static ResourceBundle fResourceBundle= ResourceBundle.getBundle(RESOURCE_BUNDLE);
-
-	private GenericServerUIMessages() {
-	}
-
-	/**
-	 * Return string from the resource bundle.
-	 * 
-	 * @param key the string used to get the bundle value, must not be <code>null</code>
-	 * @return the string from the resource bundle
-	 */
-	public static String getString(String key) {
-		try {
-			return fResourceBundle.getString(key);
-		} catch (MissingResourceException e) {
-			return "!" + key + "!";
-		}
-	}
-	
-	/**
-	 * Gets a string from the resource bundle that is 
-	 * formatted it with the given argument.
-	 * 
-	 * @param key the string used to get the bundle value, must not be null
-	 * @param arg the argument used to format the string
-	 * @return the formatted string
-	 */
-	public static String getFormattedString(String key, Object[] arg) {
-		String format= null;
-		try {
-			format= fResourceBundle.getString(key);
-		} catch (MissingResourceException e) {
-			return "!" + key + "!";
-		}
-		if (arg == null)
-			arg= new Object[0];
-		return MessageFormat.format(format,arg );
-	}
-	
-	/**
-	 * Returns a resource bundle.
-	 * 
-	 * @return the resource bundle
-	 */
-	public static ResourceBundle getResourceBundle() {
-		return fResourceBundle;
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.properties b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.properties
deleted file mode 100644
index 987124f..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-serverWizardTitle=New {0} Server
-serverWizardDescription=Create a new {0} server 
-runtimeWizardTitle=New {0} Runtime
-runtimeWizardDescription=Define a new {0} runtime
-serverTypeGroup.label.browse=Browse...
-serverName = {0}(Generic)
-runtimeName= {0}(Generic)
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerWizardFragment.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerWizardFragment.java
deleted file mode 100644
index 13a6704..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerWizardFragment.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.ui.internal;
-
-import java.util.Map;
-
-import org.eclipse.jst.server.generic.core.internal.GenericServerRuntime;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
-import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.model.RuntimeDelegate;
-import org.eclipse.wst.server.core.model.ServerDelegate;
-import org.eclipse.wst.server.ui.wizard.IWizardHandle;
-/**
- * 
- *
- * @author Gorkem Ercan
- */
-public class GenericServerWizardFragment extends ServerDefinitionTypeAwareWizardFragment 
-{
-
-    private ServerTypeDefinitionGroup fComposite;
-    private Map fProperties; 
-	/* (non-Javadoc)
-	 * @see com.ibm.wtp.server.ui.wizard.IWizardFragment#isComplete()
-	 */
-	public boolean isComplete() {
-	    
-		ServerRuntime serverRuntime = getServerTypeDefinitionFor(getServer());
-		if(serverRuntime==null)
-		    return false;
-		return true;
-	}
-
-	public void createContent(Composite parent, IWizardHandle handle){
-		createBody(parent,handle);
-	}
-	/**
-	 * 
-	 */
-	private void createBody(Composite parent, IWizardHandle handle) 
-	{
-		IServerWorkingCopy server = getServer();
-		ServerRuntime definition = getServerTypeDefinitionFor(server);
-		fComposite = new ServerTypeDefinitionGroup(this, definition,ServerTypeDefinitionGroup.CONTEXT_SERVER, null,parent);
-
-	}
-
-	/**
-     * @param server
-     * @return
-     */
-    private ServerRuntime getServerTypeDefinitionFor(IServerWorkingCopy server) {
-        
-        RuntimeDelegate runtime = (RuntimeDelegate)server.getRuntime().getAdapter(RuntimeDelegate.class);
-        if(runtime==null){
-            IRuntimeWorkingCopy wc = (IRuntimeWorkingCopy)getTaskModel().getObject(TaskModel.TASK_RUNTIME);
-            runtime= (RuntimeDelegate)wc.getAdapter(RuntimeDelegate.class);
-        }        
-        String id = runtime.getRuntime().getRuntimeType().getId();
-        if(id==null){   
-            return null;
-        }
-        Map runtimeProperties = runtime.getAttribute(GenericServerRuntime.SERVER_INSTANCE_PROPERTIES,(Map)null);
-		ServerRuntime definition = getServerTypeDefinition(id,runtimeProperties);
-        return definition;
-    }
-
-    /**
-     * @return
-     */
-    private IServerWorkingCopy getServer() {
-        IServerWorkingCopy server = (IServerWorkingCopy)getTaskModel().getObject(TaskModel.TASK_SERVER);
-        return server;
-    }
-
-    public void enter() {
-        IServerWorkingCopy server = getServer();
-        ServerRuntime definition = getServerTypeDefinitionFor(server);
-//        if(definition != null && fComposite!=null)
-//            fComposite.reset(definition,ServerTypeDefinitionGroup.CONTEXT_SERVER,null);
-	}
-	public void exit(){
-	        fProperties = fComposite.getProperties();
-	        serverDefinitionTypePropertiesChanged();
-	}
-	
-	protected Map getServerProperties(){
-	    return fProperties;
-	}
-	
-    /* (non-Javadoc)
-     * @see org.eclipse.jst.server.generic.internal.ui.ServerDefinitionTypeAwareWizardFragment#description()
-     */
-    public String description() {
-        String sName = getServerName();
-        if(sName==null || sName.length()<1)
-            sName="Generic";
-        return  GenericServerUIMessages.getFormattedString("serverWizardDescription",new String[] {sName});
-    }
-
-    private String getServerName()
-    {
-        if(getServer()!=null && getServer().getRuntime()!=null)
-           return getServer().getRuntime().getRuntimeType().getName();
-        return null;
-    }
-    /* (non-Javadoc)
-     * @see org.eclipse.jst.server.generic.internal.ui.ServerDefinitionTypeAwareWizardFragment#title()
-     */
-    public String title() {
-        String sName= getServerName();
-        if(sName==null || sName.length()<1)
-            sName="Generic";
-        return  GenericServerUIMessages.getFormattedString("serverWizardTitle",new String[]{sName});
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.jst.server.generic.internal.ui.ServerDefinitionTypeAwareWizardFragment#serverDefinitionTypePropertiesChanged()
-     */
-    public void serverDefinitionTypePropertiesChanged() {
-        fProperties = fComposite.getProperties();
-        IServerWorkingCopy serverWorkingCopy = getServer();
-        ServerRuntime definition = getServerTypeDefinitionFor(serverWorkingCopy);
-        
-        serverWorkingCopy.setName(GenericServerUIMessages.getFormattedString("serverName",new String[] {definition.getName()}));
-        ServerDelegate dl= (ServerDelegate)serverWorkingCopy.getAdapter(ServerDelegate.class);
-        dl.setAttribute(GenericServerRuntime.SERVER_INSTANCE_PROPERTIES,getServerProperties());
-    }
-}
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericUiPlugin.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericUiPlugin.java
deleted file mode 100644
index 62febf9..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericUiPlugin.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.ui.internal;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.ImageRegistry;
-import org.eclipse.ui.plugin.*;
-import org.osgi.framework.BundleContext;
-import java.util.*;
-
-/**
- * The main plugin class to be used in the desktop.
- * 
- * @author Gorkem Ercan
- */
-public class GenericUiPlugin extends AbstractUIPlugin {
-	
-    public static final String WIZBAN_IMAGE = "genericlogo";
-    //The shared instance.
-	private static GenericUiPlugin plugin;
-	//Resource bundle.
-	private ResourceBundle resourceBundle;
-	
-	/**
-	 * The constructor.
-	 */
-	public GenericUiPlugin() {
-		super();
-		plugin = this;
-		try {
-			resourceBundle = ResourceBundle.getBundle("org.eclipse.jst.server.generic.ui.GenericUiPluginResources");
-		} catch (MissingResourceException x) {
-			resourceBundle = null;
-		}
-	}
-
-	/**
-	 * This method is called upon plug-in activation
-	 */
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	/**
-	 * This method is called when the plug-in is stopped
-	 */
-	public void stop(BundleContext context) throws Exception {
-		super.stop(context);
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static GenericUiPlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns the string from the plugin's resource bundle,
-	 * or 'key' if not found.
-	 */
-	public static String getResourceString(String key) {
-		ResourceBundle bundle = GenericUiPlugin.getDefault().getResourceBundle();
-		try {
-			return (bundle != null) ? bundle.getString(key) : key;
-		} catch (MissingResourceException e) {
-			return key;
-		}
-	}
-
-    protected ImageRegistry createImageRegistry() {
-        ImageRegistry registry = new ImageRegistry();
-        ImageDescriptor desc = ImageDescriptor.createFromURL(getDefault().getBundle().getEntry("/icons/wizban/logo.gif"));
-        registry.put(WIZBAN_IMAGE,desc);
-        return registry;
-    }
-  	public ImageDescriptor imageDescriptor(String key){
-		return getImageRegistry().getDescriptor(key);
-	}
-	/**
-	 * Returns the plugin's resource bundle,
-	 */
-	public ResourceBundle getResourceBundle() {
-		return resourceBundle;
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerDefinitionTypeAwareWizardFragment.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerDefinitionTypeAwareWizardFragment.java
deleted file mode 100644
index 8cdfd0d..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerDefinitionTypeAwareWizardFragment.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Created on Oct 19, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.eclipse.jst.server.generic.ui.internal;
-
-import java.util.Map;
-
-import org.eclipse.jst.server.generic.core.internal.CorePlugin;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.wst.server.ui.wizard.IWizardHandle;
-import org.eclipse.wst.server.ui.wizard.WizardFragment;
-
-/**
- * 
- *
- * @author Gorkem Ercan
- */
-public abstract class ServerDefinitionTypeAwareWizardFragment extends WizardFragment {
-
-    private IWizardHandle fWizard;
-	public boolean hasComposite() {
-		return true;
-	}
-
-	public Composite createComposite(Composite parent, IWizardHandle handle) {
-	    
-	    this.fWizard = handle;
-	    Composite container = new Composite(parent, SWT.NONE);
-		container.setLayoutData(new GridData(GridData.FILL_BOTH));
-		GridLayout grid = new GridLayout(1,false);
-		container.setLayout(grid);
-		handle.setImageDescriptor(GenericUiPlugin.getDefault().imageDescriptor(GenericUiPlugin.WIZBAN_IMAGE));
-		handle.setTitle(title());
-		handle.setDescription(description());
-		createContent(container,handle);
-		return container;
-	}
-	public IWizardHandle getWizard(){
-	    return fWizard;
-	}
-	/**
-	 * Returns the description to be displayed on the wizard head.
-	 * @return
-	 */
-	public abstract String description();
-	/**
-	 * Returns the title of the wizard.
-	 * @return
-	 */
-	public abstract String title();
-	
-	public abstract void createContent(Composite parent, IWizardHandle handle);
-
-	public abstract void serverDefinitionTypePropertiesChanged();
-	
-	protected ServerRuntime getServerTypeDefinition(String definitionID, Map properties)
-	{
-	    return CorePlugin.getDefault().getServerTypeDefinitionManager().getServerRuntimeDefinition(definitionID,properties);
-	}
-	
-	protected ServerRuntime[] getAllServerDefinitionTypes()
-	{
-	    return CorePlugin.getDefault().getServerTypeDefinitionManager().getServerTypeDefinitions();
-	}
-
-}
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionGroup.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionGroup.java
deleted file mode 100644
index ffbc9fb..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionGroup.java
+++ /dev/null
@@ -1,325 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 Eteration Bilisim A.S.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- * 
- * Contributors:
- *     Gorkem Ercan - initial API and implementation
- *     Naci M. Dai
- * 
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL ETERATION A.S. OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Eteration Bilisim A.S.  For more
- * information on eteration, please see
- * <http://www.eteration.com/>.
- ***************************************************************************/
-package org.eclipse.jst.server.generic.ui.internal;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.jst.server.generic.servertype.definition.Property;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.wst.server.ui.internal.SWTUtil;
-
-
-public class ServerTypeDefinitionGroup 
-{
-    public static final String CONTEXT_SERVER = Property.CONTEXT_SERVER;
-    public static final String CONTEXT_RUNTIME = Property.CONTEXT_RUNTIME;
-
-    private ServerRuntime fServerTypeDefinition;
-    private List fPropertyControls = new ArrayList();
-    private Map fPropertyMap =new HashMap();
-    private String fContext="undefined";
-    private Composite fDefinitionComposite;
-    private ServerDefinitionTypeAwareWizardFragment fAwareWizardFragment;
-    private class PropertyModifyListener implements ModifyListener
-    {
-        /* (non-Javadoc)
-         * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
-         */
-        public void modifyText(ModifyEvent e) {
-            fAwareWizardFragment.serverDefinitionTypePropertiesChanged();
-            
-        }
-        
-    }
-    
-    /**
-     * Construct a composite for the given ServerTypeDefinition
-     * 
-     * @param definition
-     * @param initialProperties initial values null means use default
-     * @param parent
-     * @param style
-     */
-    public ServerTypeDefinitionGroup(ServerDefinitionTypeAwareWizardFragment fragment, ServerRuntime definition, String context, Map initialProperties, Composite parent) 
-    {
-        fAwareWizardFragment = fragment;
-        initServerTypeDefinition(definition,context,initialProperties);
-        createControl(parent);
-    }
-    private void initProperties(Map initialProperties)
-    {
-        if(initialProperties!= null)
-            this.fPropertyMap=initialProperties;
-        else
-            fPropertyMap=new HashMap();
-    }
-    /**
-     * Changes the values with the given ones. Renders the UI 
-     * with the given new values.
-     *  
-     * @param definition
-     * @param context
-     * @param initialProperties
-     */
-    public void reset(ServerRuntime definition, String context, Map initialProperties)
-    {
-        initServerTypeDefinition(definition, context, initialProperties);
-        Control[] allControls = fDefinitionComposite.getChildren();
-        for(int i= 0; i<allControls.length;i++)
-        {
-            Control c = allControls[i];
-            c.dispose();
-        }
-        fPropertyControls.clear();
-        createPropertyControls(fDefinitionComposite);
-        
-		fDefinitionComposite.layout(true);
-        
-    }
-    
-    /**
-     * @param definition
-     * @param context
-     * @param initialProperties
-     */
-    private void initServerTypeDefinition(ServerRuntime definition, String context, Map initialProperties) {
-        fServerTypeDefinition = definition;
-        initProperties(initialProperties);
-        this.fContext = context;
-    }
-    /**
-     * @param parent
-     */
-    private void createControl(Composite parent) {
-
-        fDefinitionComposite = new Composite(parent, SWT.SHADOW_ETCHED_IN);
-        fDefinitionComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
-        fDefinitionComposite.setLayout(new GridLayout(3,false));
-        if(fServerTypeDefinition!=null)
-        {   
-           createPropertyControls(fDefinitionComposite);
-        }
-    }
-    /**
-     * @param defPanel
-     */
-    private void createPropertyControls(Composite definitionComposite) {
-		List properties = fServerTypeDefinition.getProperty();
-		for(int i = 0; i<properties.size(); i++)
-		{
-		    Property property = (Property)properties.get(i);		    
-		    if(this.fContext.equals(property.getContext()))
-		        createPropertyControl(definitionComposite,property);
-		}
-        
-    }
-     
-    private void createPropertyControl(Composite parent, Property property)
-    {
-    	if( "directory".equals(property.getType())) {
-    		Text path = createLabeledPath(property.getLabel(),getPropertyValue(property),parent);
-    		path.setData(property);
-    		fPropertyControls.add(path);
-    	} else if( "file".equals(property.getType())) {
-    	    Text file = createLabeledFile(property.getLabel(),getPropertyValue(property),parent);
-    		file.setData(property);
-    		fPropertyControls.add(file);
-    	} else if( "string".equals(property.getType())) {
-    	    Text str = createLabeledText(property.getLabel(),getPropertyValue(property),parent);
-    		str.setData(property);
-    		fPropertyControls.add(str);
-    	} else if( "boolean".equals(property.getType())) {
-    	    Button bool =createLabeledCheck(property.getLabel(),("true".equals( getPropertyValue(property))),	parent);
-    		bool.setData(property);
-    		fPropertyControls.add(bool);
-    	} else  {
-    	    Text defaultText= createLabeledText(property.getLabel(),getPropertyValue(property),parent);
-    		defaultText.setData(property);
-    		fPropertyControls.add(defaultText);
-     	}
-    }
-	private String getPropertyValue(Property property)
-	{
-		String value = property.getDefault();
-		if(fPropertyMap!=null && fPropertyMap.isEmpty()==false)
-			value=(String)fPropertyMap.get(property.getId()); 
-		return value;
-	}
-    protected Button createLabeledCheck(String title, boolean value,
-    		Composite defPanel) {
-    	GridData gridData;
-    	Label label = new Label(defPanel, SWT.WRAP);
-    	gridData = new GridData();
-    	label.setLayoutData(gridData);
-    	label.setText(title);
-
-    	Button fButton = new Button(defPanel, SWT.CHECK);
-    	
-    	gridData = new GridData(GridData.FILL_HORIZONTAL
-    			| GridData.GRAB_HORIZONTAL);
-    	gridData.horizontalSpan = 2;
-    	fButton.setLayoutData(gridData);
-    	fButton.setSelection(value);
-    	fButton.addSelectionListener(new SelectionListener() {
-            public void widgetSelected(SelectionEvent e) {
-               fAwareWizardFragment.serverDefinitionTypePropertiesChanged();
-            }
-
-            public void widgetDefaultSelected(SelectionEvent e) {
-                // TODO Auto-generated method stub
-
-            }
-        });
-    	
-    	return fButton;
-    }
-    protected Text createLabeledFile(String title, String value,
-    		Composite defPanel) {
-    	GridData gridData;
-    	Label label = new Label(defPanel, SWT.WRAP);
-    	gridData = new GridData();
-    	label.setLayoutData(gridData);
-    	label.setText(title);
-    
-    	final Text fText = new Text(defPanel, SWT.SHADOW_IN | SWT.BORDER);
-    	gridData = new GridData(GridData.FILL_HORIZONTAL
-    			| GridData.GRAB_HORIZONTAL);
-    	gridData.horizontalSpan = 1;
-    	fText.setLayoutData(gridData);
-    	fText.setText(value);
-    	fText.addModifyListener(new PropertyModifyListener());
-    	Button fButton = SWTUtil.createButton(defPanel,GenericServerUIMessages.getString("serverTypeGroup.label.browse") );
-    	
-    	fButton.addSelectionListener(new SelectionListener() {
-    		public void widgetSelected(SelectionEvent e) {
-    			FileDialog dlg = new FileDialog(fDefinitionComposite.getShell());
-    			dlg.setFileName(fText.getText());
-    			String res = dlg.open();
-    			if (res != null) {
-    				fText.setText(res);
-    			}
-    		}
-    
-    		public void widgetDefaultSelected(SelectionEvent e) {
-    			widgetSelected(e);
-    		}
-    
-    	});
-    
-    	return fText;
-    }
-    protected Text createLabeledPath(String title, String value,
-    		Composite parent) {
-    	GridData gridData;
-    	Label label = new Label(parent, SWT.WRAP);
-    	gridData = new GridData();
-    	label.setLayoutData(gridData);
-    	label.setText(title);
-    
-    	final Text fText = new Text(parent, SWT.SHADOW_IN | SWT.BORDER);
-    	gridData = new GridData(GridData.FILL_HORIZONTAL);
-    	gridData.horizontalSpan = 1;
-    	fText.setLayoutData(gridData);
-    	fText.setText(value);
-    	fText.addModifyListener(new PropertyModifyListener());
-    	Button fButton = SWTUtil.createButton(parent,GenericServerUIMessages.getString("serverTypeGroup.label.browse"));
-    	fButton.addSelectionListener(new SelectionListener() {
-    		public void widgetSelected(SelectionEvent e) {
-    			DirectoryDialog dlg = new DirectoryDialog(fDefinitionComposite.getShell());
-    			dlg.setFilterPath(fText.getText());
-    			String res = dlg.open();
-    			if (res != null) {
-    				fText.setText(res);
-    			}
-    		}
-    
-    		public void widgetDefaultSelected(SelectionEvent e) {
-    			widgetSelected(e);
-    		}
-    
-    	});
-    
-    	return fText;
-    }
-    protected Text createLabeledText(String title, String value,
-    		Composite defPanel) {
-    	GridData gridData;
-    	Label label = new Label(defPanel, SWT.WRAP);
-    	gridData = new GridData();
-    	label.setLayoutData(gridData);
-    	label.setText(title);
-    
-    	Text fText = new Text(defPanel, SWT.SHADOW_IN | SWT.BORDER);
-    	gridData = new GridData(GridData.FILL_HORIZONTAL
-    			| GridData.GRAB_HORIZONTAL);
-    	gridData.horizontalSpan = 2;
-    	fText.setLayoutData(gridData);
-    	fText.setText(value);
-    	fText.addModifyListener(new PropertyModifyListener());
-    	return fText;
-    }
-    public Map getProperties()
-    {
-    	for(int i=0; i<fPropertyControls.size();i++)
-    	{
-    		if(fPropertyControls.get(i)instanceof Button)
-    		{
-    			Button button = (Button)fPropertyControls.get(i);
-    			Property prop = (Property)button.getData();
-    			fPropertyMap.put(prop.getId(),Boolean.toString(button.getSelection()));
-    		}
-    		else
-    		{
-    			Text text = (Text)fPropertyControls.get(i);
-    			Property prop = (Property)text.getData();
-    			fPropertyMap.put(prop.getId(),text.getText());
-    		}
-    	}
-    	return fPropertyMap;
-    }
-}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/.classpath b/plugins/org.eclipse.jst.server.tomcat.core/.classpath
deleted file mode 100644
index df44c2e..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="tomcatcore/"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/.cvsignore b/plugins/org.eclipse.jst.server.tomcat.core/.cvsignore
deleted file mode 100644
index b39eed9..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-bin
-build.xml
-org.eclipse.jst.server.tomcat.core_3.0.0.jar
-tomcatcore.jar
-temp.folder
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/.options b/plugins/org.eclipse.jst.server.tomcat.core/.options
deleted file mode 100644
index ceeae58..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/.options
+++ /dev/null
@@ -1,4 +0,0 @@
-# Debugging options for the org.eclipse.jst.server.tomcat.core plugin
-
-# Turn on general debugging
-org.eclipse.jst.server.tomcat.core/debug=true
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/.project b/plugins/org.eclipse.jst.server.tomcat.core/.project
deleted file mode 100644
index 31bbe42..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.server.tomcat.core</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.tomcat.core/META-INF/MANIFEST.MF
deleted file mode 100644
index e45a5db..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,21 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.jst.server.tomcat.core; singleton:=true
-Bundle-Version: 1.0.0
-Bundle-Activator: org.eclipse.jst.server.tomcat.core.internal.TomcatPlugin
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Export-Package: org.eclipse.jst.server.tomcat.core.internal,
- org.eclipse.jst.server.tomcat.core.internal.command,
- org.eclipse.jst.server.tomcat.core.internal.xml,
- org.eclipse.jst.server.tomcat.core.internal.xml.server32,
- org.eclipse.jst.server.tomcat.core.internal.xml.server40
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.core.resources,
- org.eclipse.debug.core,
- org.eclipse.jdt.core,
- org.eclipse.jdt.launching,
- org.eclipse.wst.server.core,
- org.eclipse.jst.server.core
-Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/build.properties b/plugins/org.eclipse.jst.server.tomcat.core/build.properties
deleted file mode 100644
index 53a961e..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/build.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-###############################################################################
-# Copyright (c) 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
-###############################################################################
-bin.includes = plugin.xml,\
-               plugin.properties,\
-               verifyInstall.properties,\
-               .options,\
-               .,\
-               META-INF/
-bin.excludes = bin/**,\
-               @dot/**,\
-               temp.folder/**
-src.includes = schema/,\
-               build.properties
-source.. = tomcatcore/
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/plugin.properties b/plugins/org.eclipse.jst.server.tomcat.core/plugin.properties
deleted file mode 100644
index 2232a5a..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/plugin.properties
+++ /dev/null
@@ -1,54 +0,0 @@
-###############################################################################
-# Copyright (c) 2004, 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
-###############################################################################
-pluginName=Apache Tomcat Support
-providerName=Eclipse.org
-
-# --------------- Runtime Types ---------------
-apache=Apache
-runtimeTypeTomcat32Label=Apache Tomcat v3.2
-runtimeTypeTomcat32Description=Apache Tomcat v3.2 supports J2EE 1.2 Web modules.
-runtimeTypeTomcat40Label=Apache Tomcat v4.0
-runtimeTypeTomcat40Description=Apache Tomcat v4.0 supports J2EE 1.2 and 1.3 Web modules.
-runtimeTypeTomcat41Label=Apache Tomcat v4.1
-runtimeTypeTomcat41Description=Apache Tomcat v4.1 supports J2EE 1.2 and 1.3 Web modules.
-runtimeTypeTomcat50Label=Apache Tomcat v5.0
-runtimeTypeTomcat50Description=Apache Tomcat v5.0 supports J2EE 1.2, 1.3, and 1.4 Web modules.
-runtimeTypeTomcat55Label=Apache Tomcat v5.5
-runtimeTypeTomcat55Description=Apache Tomcat v5.5 supports J2EE 1.2, 1.3, and 1.4 Web modules.
-
-# runtime target
-target32runtime=Tomcat v3.2 runtime
-target40runtime=Tomcat v4.0 runtime
-target41runtime=Tomcat v4.1 runtime
-target50runtime=Tomcat v5.0 runtime
-target55runtime=Tomcat v5.5 runtime
-
-# --------------- Servers ---------------
-tomcat32ServerType=Tomcat v3.2 Server
-tomcat32ServerDescription=Publishes and runs J2EE Web projects and server configurations to a local Tomcat server.
-
-tomcat40ServerType=Tomcat v4.0 Server
-tomcat40ServerDescription=Publishes and runs J2EE Web projects and server configurations to a local Tomcat server.
-
-tomcat41ServerType=Tomcat v4.1 Server
-tomcat41ServerDescription=Publishes and runs J2EE Web projects and server configurations to a local Tomcat server.
-
-tomcat50ServerType=Tomcat v5.0 Server
-tomcat50ServerDescription=Publishes and runs J2EE Web projects and server configurations to a local Tomcat server.
-
-tomcat55ServerType=Tomcat v5.5 Server
-tomcat55ServerDescription=Publishes and runs J2EE Web projects and server configurations to a local Tomcat server.
-
-tomcatLaunchConfigurationType=Apache Tomcat
-
-# --------------- General ---------------
-canAddModule=Web module can be added to the server.
-canModifyModules=Web modules can be modified.
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/plugin.xml b/plugins/org.eclipse.jst.server.tomcat.core/plugin.xml
deleted file mode 100644
index 6d1fba8..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/plugin.xml
+++ /dev/null
@@ -1,197 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-
-<plugin>
-  <extension point="org.eclipse.wst.server.core.runtimeTypes">
-    <runtimeType
-       id="org.eclipse.jst.server.tomcat.runtime.32"
-       name="%runtimeTypeTomcat32Label"
-       description="%runtimeTypeTomcat32Description"
-       vendor="%apache"
-       version="3.2"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatRuntime">
-       <moduleType
-         types="j2ee.web"
-         versions="1.2"/>
-    </runtimeType>
-
-    <runtimeType
-       id="org.eclipse.jst.server.tomcat.runtime.40"
-       name="%runtimeTypeTomcat40Label"
-       description="%runtimeTypeTomcat40Description"
-       vendor="%apache"
-       version="4.0"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatRuntime">
-       <moduleType
-         types="j2ee.web"
-         versions="1.2, 1.3"/>
-    </runtimeType>
-
-    <runtimeType
-       id="org.eclipse.jst.server.tomcat.runtime.41"
-       name="%runtimeTypeTomcat41Label"
-       description="%runtimeTypeTomcat41Description"
-       vendor="%apache"
-       version="4.1"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatRuntime">
-       <moduleType
-         types="j2ee.web"
-         versions="1.2, 1.3"/>
-    </runtimeType>
-
-    <runtimeType
-       id="org.eclipse.jst.server.tomcat.runtime.50"
-       name="%runtimeTypeTomcat50Label"
-       description="%runtimeTypeTomcat50Description"
-       vendor="%apache"
-       version="5.0"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatRuntime">
-       <moduleType
-         types="j2ee.web"
-         versions="1.2, 1.3, 1.4"/>
-    </runtimeType>
-
-    <runtimeType
-       id="org.eclipse.jst.server.tomcat.runtime.55"
-       name="%runtimeTypeTomcat55Label"
-       description="%runtimeTypeTomcat55Description"
-       vendor="%apache"
-       version="5.5"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatRuntime">
-       <moduleType
-         types="j2ee.web"
-         versions="1.2, 1.3, 1.4"/>
-    </runtimeType>
-
-  </extension>
-
-  <extension point="org.eclipse.wst.server.core.runtimeLocators">
-    <runtimeLocator
-       id="org.eclipse.jst.server.tomcat.runtime.locator"
-       typeIds="org.eclipse.jst.server.tomcat.runtime.*"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatRuntimeLocator"/>
-  </extension>
-
-  <extension point="org.eclipse.wst.server.core.runtimeTargetHandlers">
-     <runtimeTargetHandler
-        id="org.eclipse.jst.server.tomcat.runtimeTarget"
-        runtimeTypeIds="org.eclipse.jst.server.tomcat.runtime.*"
-        class="org.eclipse.jst.server.tomcat.core.internal.TomcatRuntimeTargetHandler"/>
-   </extension>
-
-  <extension point="org.eclipse.wst.server.core.serverTypes">
-     <serverType
-       id="org.eclipse.jst.server.tomcat.32"
-       name="%tomcat32ServerType"
-       description="%tomcat32ServerDescription"
-       supportsRemoteHosts="false"
-       runtime="true"
-       startTimeout="45000"
-       stopTimeout="15000"
-       initialState="stopped"
-       hasConfiguration="true"
-       launchConfigId="org.eclipse.jst.server.tomcat.core.launchConfigurationType"
-       runtimeTypeId="org.eclipse.jst.server.tomcat.runtime.32"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatServer"
-       behaviourClass="org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour">
-     </serverType>
-     <serverType
-       id="org.eclipse.jst.server.tomcat.40"
-       name="%tomcat40ServerType"
-       description="%tomcat40ServerDescription"
-       supportsRemoteHosts="false"
-       runtime="true"
-       startTimeout="45000"
-       stopTimeout="15000"
-       initialState="stopped"
-       hasConfiguration="true"
-       launchConfigId="org.eclipse.jst.server.tomcat.core.launchConfigurationType"
-       runtimeTypeId="org.eclipse.jst.server.tomcat.runtime.40"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatServer"
-       behaviourClass="org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour">
-     </serverType>
-     <serverType
-       id="org.eclipse.jst.server.tomcat.41"
-       name="%tomcat41ServerType"
-       description="%tomcat41ServerDescription"
-       supportsRemoteHosts="false"
-       runtime="true"
-       startTimeout="45000"
-       stopTimeout="15000"
-       initialState="stopped"
-       hasConfiguration="true"
-       launchConfigId="org.eclipse.jst.server.tomcat.core.launchConfigurationType"
-       runtimeTypeId="org.eclipse.jst.server.tomcat.runtime.41"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatServer"
-       behaviourClass="org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour">
-     </serverType>
-     <serverType
-       id="org.eclipse.jst.server.tomcat.50"
-       name="%tomcat50ServerType"
-       description="%tomcat50ServerDescription"
-       supportsRemoteHosts="false"
-       runtime="true"
-       startTimeout="45000"
-       stopTimeout="15000"
-       initialState="stopped"
-       hasConfiguration="true"
-       launchConfigId="org.eclipse.jst.server.tomcat.core.launchConfigurationType"
-       runtimeTypeId="org.eclipse.jst.server.tomcat.runtime.50"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatServer"
-       behaviourClass="org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour">
-     </serverType>
-     <serverType
-       id="org.eclipse.jst.server.tomcat.55"
-       name="%tomcat55ServerType"
-       description="%tomcat55ServerDescription"
-       supportsRemoteHosts="false"
-       runtime="true"
-       startTimeout="45000"
-       stopTimeout="15000"
-       initialState="stopped"
-       hasConfiguration="true"
-       launchConfigId="org.eclipse.jst.server.tomcat.core.launchConfigurationType"
-       runtimeTypeId="org.eclipse.jst.server.tomcat.runtime.55"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatServer"
-       behaviourClass="org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour">
-     </serverType>
-  </extension>
-
-  <extension point="org.eclipse.wst.server.core.serverLocators">
-    <serverLocator
-       id="org.eclipse.jst.server.tomcat.server.locator"
-       supportsRemoteHosts="false"
-       typeIds="org.eclipse.jst.server.tomcat.*"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatServerLocator"/>
-  </extension>
-
-  <extension point="org.eclipse.wst.server.core.launchableAdapters">
-     <launchableAdapter
-        class="org.eclipse.jst.server.tomcat.core.internal.TomcatLaunchableAdapterDelegate"
-        id="org.eclipse.jst.server.tomcat.web"/>
-  </extension>
-   
-  <extension point="org.eclipse.debug.core.sourcePathComputers">
-     <sourcePathComputer
-        id="org.eclipse.jst.server.tomcat.core.sourcePathComputer"
-        class="org.eclipse.jst.server.tomcat.core.internal.TomcatSourcePathComputerDelegate"/>
-  </extension>
-   
-  <extension point="org.eclipse.debug.core.launchConfigurationTypes">
-     <launchConfigurationType
-        id="org.eclipse.jst.server.tomcat.core.launchConfigurationType"
-        name="%tomcatLaunchConfigurationType"
-        delegate="org.eclipse.jst.server.tomcat.core.internal.TomcatLaunchConfigurationDelegate"
-        modes="run, debug"
-        sourceLocatorId="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"
-        sourcePathComputerId="org.eclipse.jst.server.tomcat.core.sourcePathComputer"/>
-  </extension>
-
-  <extension point="org.eclipse.wst.server.core.publishTasks">
-     <publishTask
-        id="org.eclipse.jst.server.tomcat.core.contextTask"
-        typeIds="org.eclipse.jst.server.tomcat.*"
-        class="org.eclipse.jst.server.tomcat.core.internal.ContextPublishTaskDelegate"/>
-  </extension>
-
-</plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ClassDetector.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ClassDetector.java
deleted file mode 100644
index 2ff8737..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ClassDetector.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.jst.server.tomcat.core.internal;
-/**
- * Utility class to check for the existence of a class given as an
- * argument. 
- */
-public class ClassDetector {
-	public static void main(String[] args) {
-		if (args == null || args.length != 1) {
-			System.out.println("Usage: ClassDetector [className]");
-			return;
-		}
-		
-		try {
-			Class.forName(args[0]);
-			System.out.println("true");
-		} catch (Exception e) {
-			System.out.println("false");
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ContextPublishTaskDelegate.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ContextPublishTaskDelegate.java
deleted file mode 100644
index 8bba2db..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ContextPublishTaskDelegate.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*******************************************************************************
- * 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.jst.server.tomcat.core.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.eclipse.jst.server.core.IWebModule;
-import org.eclipse.jst.server.tomcat.core.internal.command.FixModuleContextRootTask;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IOptionalTask;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.model.PublishTaskDelegate;
-
-public class ContextPublishTaskDelegate extends PublishTaskDelegate{
-	public IOptionalTask[] getTasks(IServer server, List modules) {
-		if (modules == null)
-			return null;
-	
-		TomcatServer tomcatServer = (TomcatServer) server.getAdapter(TomcatServer.class);
-		TomcatConfiguration configuration = null;
-		try {
-			configuration = tomcatServer.getTomcatConfiguration();
-		} catch (Exception e) {
-			return null;
-		}
-		
-		List tasks = new ArrayList();
-		int size = modules.size();
-		for (int i = 0; i < size; i++) {
-			IModule[] module = (IModule[]) modules.get(i);
-			IModule m = module[module.length - 1];
-			IWebModule webModule = (IWebModule) m.getAdapter(IWebModule.class);
-			WebModule webModule2 = configuration.getWebModule(m);
-			if (webModule != null && webModule2 != null) {
-				String contextRoot = webModule.getContextRoot();
-				if (contextRoot != null && !contextRoot.startsWith("/"))
-					contextRoot = "/" + contextRoot;
-				if (!contextRoot.equals(webModule2.getPath())) {
-					int index = configuration.getWebModules().indexOf(webModule2);
-					FixModuleContextRootTask task = new FixModuleContextRootTask(m, index, webModule.getContextRoot());
-					tasks.add(task);
-				}
-			}
-		}
-		
-		return (IOptionalTask[]) tasks.toArray(new IOptionalTask[tasks.size()]);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/FileUtil.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/FileUtil.java
deleted file mode 100644
index a7574bc..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/FileUtil.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.*;
-import java.net.URL;
-import org.eclipse.core.runtime.*;
-import org.eclipse.osgi.util.NLS;
-/**
- * Utility class with an assortment of useful file methods.
- */
-public class FileUtil {
-	// size of the buffer
-	private static final int BUFFER = 10240;
-
-	// the buffer
-	private static byte[] buf = new byte[BUFFER];
-
-	/**
-	 * FileUtil cannot be created. Use static methods.
-	 */
-	private FileUtil() {
-		super();
-	}
-
-	/**
-	 * Copys a directory from a to b.
-	 *
-	 * @param from java.lang.String
-	 * @param to java.lang.String
-	 * @param monitor a progress monitor, or <code>null</code>
-	 */
-	public static void copyDirectory(String from, String to, IProgressMonitor monitor) {
-		try {
-			File fromDir = new File(from);
-			File toDir = new File(to);
-	
-			File[] files = fromDir.listFiles();
-	
-			toDir.mkdir();
-	
-			// cycle through files
-			int size = files.length;
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(NLS.bind(Messages.copyingTask, new String[] {from, to}), size * 50);
-	
-			for (int i = 0; i < size; i++) {
-				File current = files[i];
-				String fromFile = current.getAbsolutePath();
-				String toFile = to;
-				if (!toFile.endsWith(File.separator))
-					toFile += File.separator;
-				toFile += current.getName();
-				if (current.isFile()) {
-					copyFile(fromFile, toFile);
-					monitor.worked(50);
-				} else if (current.isDirectory()) {
-					monitor.subTask(NLS.bind(Messages.copyingTask, new String[] {fromFile, toFile}));
-					copyDirectory(fromFile, toFile, ProgressUtil.getSubMonitorFor(monitor, 50));
-				}
-				if (monitor.isCanceled())
-					return;
-			}
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error copying directory", e);
-		}
-	}
-
-	/**
-	 * Copy a file from a to b. Closes the input stream after use.
-	 *
-	 * @param in java.io.InputStream
-	 * @param to java.lang.String
-	 * @return a status
-	 */
-	public static IStatus copyFile(InputStream in, String to) {
-		OutputStream out = null;
-	
-		try {
-			out = new FileOutputStream(to);
-	
-			int avail = in.read(buf);
-			while (avail > 0) {
-				out.write(buf, 0, avail);
-				avail = in.read(buf);
-			}
-			return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.copyingTask, new String[] {to}), null);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error copying file", e);
-			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCopyingFile, new String[] {to, e.getLocalizedMessage()}), e);
-		} finally {
-			try {
-				if (in != null)
-					in.close();
-			} catch (Exception ex) {
-				// ignore
-			}
-			try {
-				if (out != null)
-					out.close();
-			} catch (Exception ex) {
-				// ignore
-			}
-		}
-	}
-
-	/**
-	 * Copy a file from a to b.
-	 *
-	 * @param from java.lang.String
-	 * @param to java.lang.String
-	 * @return a status
-	 */
-	public static IStatus copyFile(String from, String to) {
-		try {
-			return copyFile(new FileInputStream(from), to);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error copying file", e);
-			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCopyingFile, new String[] {to, e.getLocalizedMessage()}), e);
-		}
-	}
-
-	/**
-	 * Copy a file from a to b.
-	 *
-	 * @param from java.net.URL
-	 * @param to java.lang.String
-	 * @return a status
-	 */
-	public static IStatus copyFile(URL from, String to) {
-		try {
-			return copyFile(from.openStream(), to);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error copying file", e);
-			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCopyingFile, new String[] {to, e.getLocalizedMessage()}), e);
-		}
-	}
-
-	/**
-	 * Recursively deletes a directory.
-	 *
-	 * @param dir java.io.File
-	 * @param monitor a progress monitor, or <code>null</code>
-	 */
-	public static void deleteDirectory(File dir, IProgressMonitor monitor) {
-		try {
-			if (!dir.exists() || !dir.isDirectory())
-				return;
-	
-			File[] files = dir.listFiles();
-			int size = files.length;
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(NLS.bind(Messages.deletingTask, new String[] {dir.getAbsolutePath()}), size * 10);
-	
-			// cycle through files
-			for (int i = 0; i < size; i++) {
-				File current = files[i];
-				if (current.isFile()) {
-					current.delete();
-					monitor.worked(10);
-				} else if (current.isDirectory()) {
-					monitor.subTask(NLS.bind(Messages.deletingTask, new String[] {current.getAbsolutePath()}));
-					deleteDirectory(current, ProgressUtil.getSubMonitorFor(monitor, 10));
-				}
-			}
-			dir.delete();
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error deleting directory " + dir.getAbsolutePath(), e);
-		}
-	}
-
-	/**
-	 * Copys a directory from a to b, only modifying as needed
-	 * and deleting old files and directories.
-	 *
-	 * @param from a directory
-	 * @param to a directory
-	 * @param monitor a progress monitor
-	 */
-	public static void smartCopyDirectory(String from, String to, IProgressMonitor monitor) {
-		try {
-			File fromDir = new File(from);
-			File toDir = new File(to);
-	
-			File[] fromFiles = fromDir.listFiles();
-			int fromSize = fromFiles.length;
-	
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(NLS.bind(Messages.copyingTask, new String[] {from, to}), 550);
-	
-			File[] toFiles = null;
-	
-			// delete old files and directories from this directory
-			if (toDir.exists() && toDir.isDirectory()) {
-				toFiles = toDir.listFiles();
-				int toSize = toFiles.length;
-	
-				// check if this exact file exists in the new directory
-				for (int i = 0; i < toSize; i++) {
-					String name = toFiles[i].getName();
-					boolean isDir = toFiles[i].isDirectory();
-					boolean found = false;
-					for (int j = 0; j < fromSize; j++) {
-						if (name.equals(fromFiles[j].getName()) && isDir == fromFiles[j].isDirectory())
-							found = true;
-					}
-	
-					// delete file if it can't be found or isn't the correct type
-					if (!found) {
-						if (isDir)
-							deleteDirectory(toFiles[i], new NullProgressMonitor());
-						else
-							toFiles[i].delete();
-					}
-					if (monitor.isCanceled())
-						return;
-				}
-			} else {
-				if (toDir.isFile())
-					toDir.delete();
-				toDir.mkdir();
-			}
-			monitor.worked(50);
-	
-			// cycle through files and only copy when it doesn't exist
-			// or is newer
-			toFiles = toDir.listFiles();
-			int toSize = toFiles.length;
-			int dw = 0;
-			if (toSize > 0)
-				dw = 500 / toSize;
-	
-			for (int i = 0; i < fromSize; i++) {
-				File current = fromFiles[i];
-	
-				// check if this is a new or newer file
-				boolean copy = true;
-				if (!current.isDirectory()) {
-					String name = current.getName();
-					long mod = current.lastModified();
-					for (int j = 0; j < toSize; j++) {
-						if (name.equals(toFiles[j].getName()) && mod <= toFiles[j].lastModified())
-							copy = false;
-					}
-				}
-	
-				if (copy) {
-					String fromFile = current.getAbsolutePath();
-					String toFile = to;
-					if (!toFile.endsWith(File.separator))
-						toFile += File.separator;
-					toFile += current.getName();
-					if (current.isFile()) {
-						copyFile(fromFile, toFile);
-						monitor.worked(dw);
-					} else if (current.isDirectory()) {
-						monitor.subTask(NLS.bind(Messages.copyingTask, new String[] {fromFile, toFile}));
-						smartCopyDirectory(fromFile, toFile, ProgressUtil.getSubMonitorFor(monitor, dw));
-					}
-				}
-				if (monitor.isCanceled())
-					return;
-			}
-			monitor.worked(500 - dw * toSize);
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error smart copying directory " + from + " - " + to, e);
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/IMimeMapping.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/IMimeMapping.java
deleted file mode 100644
index ee5946f..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/IMimeMapping.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.jst.server.tomcat.core.internal;
-/**
- * 
- */
-public interface IMimeMapping {
-	/**
-	 * Returns the extension.
-	 * 
-	 * @return the extension
-	 */
-	public String getExtension();
-
-	/**
-	 * Returns the mime type.
-	 * 
-	 * @return the mime type
-	 */
-	public String getMimeType();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatConfiguration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatConfiguration.java
deleted file mode 100644
index b9bada1..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatConfiguration.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.jst.server.tomcat.core.internal;
-
-import java.util.List;
-/**
- * 
- */
-public interface ITomcatConfiguration {
-	/**
-	 * Returns a list of mime mappings.
-	 * 
-	 * @return mime mappings
-	 */
-	public List getMimeMappings();
-	
-	/**
-	 * Returns a list of ServerPorts that this configuration uses.
-	 *
-	 * @return the server ports
-	 */
-	public List getServerPorts();
-
-	/**
-	 * Return a list of the web modules in this server.
-	 * 
-	 * @return the web modules
-	 */
-	public List getWebModules();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatConfigurationWorkingCopy.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatConfigurationWorkingCopy.java
deleted file mode 100644
index 73a5c1b..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatConfigurationWorkingCopy.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.jst.server.tomcat.core.internal;
-
-
-public interface ITomcatConfigurationWorkingCopy extends ITomcatConfiguration {
-	/**
-	 * Add a web module.
-	 *
-	 * @param index int
-	 * @param module org.eclipse.jst.server.tomcat.WebModule
-	 */
-	public void addWebModule(int index, ITomcatWebModule module);
-	
-	/**
-	 * Change a web module.
-	 * 
-	 * @param index int
-	 * @param docBase java.lang.String
-	 * @param path java.lang.String
-	 * @param reloadable boolean
-	 */
-	public void modifyWebModule(int index, String docBase, String path, boolean reloadable);
-
-	/**
-	 * Remove a web module.
-	 * 
-	 * @param index int
-	 */
-	public void removeWebModule(int index);
-
-	/**
-	 * Adds a mime mapping.
-	 *
-	 * @param index int
-	 * @param map MimeMapping
-	 */
-	public void addMimeMapping(int index, IMimeMapping map);
-
-	/**
-	 * Change a mime mapping.
-	 * 
-	 * @param index int
-	 * @param map MimeMapping
-	 */
-	public void modifyMimeMapping(int index, IMimeMapping map);
-
-	/**
-	 * Modify the port with the given id.
-	 *
-	 * @param id java.lang.String
-	 * @param port int
-	 */
-	public void modifyServerPort(String id, int port);
-
-	/**
-	 * Remove a mime mapping.
-	 * 
-	 * @param index int
-	 */
-	public void removeMimeMapping(int index);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatRuntime.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatRuntime.java
deleted file mode 100644
index 35edfcd..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatRuntime.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.jst.server.tomcat.core.internal;
-
-import java.util.List;
-
-import org.eclipse.jdt.launching.IVMInstall;
-/**
- * 
- * 
- * @since 1.0
- */
-public interface ITomcatRuntime {
-	/**
-	 * Return the VM install (installed JRE) that this runtime is using.
-	 * 
-	 * @return the current VM install
-	 */
-	public IVMInstall getVMInstall();
-	
-	public boolean isUsingDefaultJRE();
-
-	/**
-	 * Returns the runtime classpath that is used by this runtime.
-	 * 
-	 * @return the runtime classpath
-	 */
-	public List getRuntimeClasspath();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatRuntimeWorkingCopy.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatRuntimeWorkingCopy.java
deleted file mode 100644
index e3e25e9..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatRuntimeWorkingCopy.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.jst.server.tomcat.core.internal;
-
-import org.eclipse.jdt.launching.IVMInstall;
-/**
- *
- * @since 1.0
- */
-public interface ITomcatRuntimeWorkingCopy extends ITomcatRuntime {
-	/**
-	 * Set the VM install (installed JRE) that this runtime is using.
-	 * Use <code>null</code> to use the Eclipse default JRE.
-	 * 
-	 * @param vmInstall the VM install to use
-	 */
-	public void setVMInstall(IVMInstall vmInstall);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServer.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServer.java
deleted file mode 100644
index 1cd0044..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServer.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/**********************************************************************
- * 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.jst.server.tomcat.core.internal;
-
-import org.eclipse.wst.server.core.model.IURLProvider;
-/**
- * 
- * @since 1.0
- */
-public interface ITomcatServer extends IURLProvider {
-	public static final String PROPERTY_TEST_ENVIRONMENT = "testEnvironment";
-	/**
-	 * Returns true if this is a test (publish and run code out of the
-	 * workbench) environment server.
-	 *
-	 * @return boolean
-	 */
-	public boolean isTestEnvironment();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServerBehaviour.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServerBehaviour.java
deleted file mode 100644
index 0311604..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServerBehaviour.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.jst.server.tomcat.core.internal;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.model.IProcess;
-/**
- * 
- * @since 1.0
- */
-public interface ITomcatServerBehaviour {
-	/**
-	 * Returns the main class that is used to launch the Tomcat server.
-	 * 
-	 * @return the main runtime class
-	 */
-	public String getRuntimeClass();
-
-	/**
-	 * Set the process that is monitored for Tomcat startup and shutdown.
-	 * Warning: Do not call this method unless you know what you're doing;
-	 * it should only be used in rare cases.
-	 * 
-	 * @param newProcess
-	 */
-	public void setProcess(IProcess newProcess);
-	
-	/**
-	 * Setup for starting the server.
-	 * 
-	 * @param launch ILaunch
-	 * @param launchMode String
-	 * @param monitor IProgressMonitor
-	 * @throws CoreException if anything goes wrong
-	 */
-	public void setupLaunch(ILaunch launch, String launchMode, IProgressMonitor monitor) throws CoreException;
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServerWorkingCopy.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServerWorkingCopy.java
deleted file mode 100644
index 6d97523..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServerWorkingCopy.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/**********************************************************************
- * 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.jst.server.tomcat.core.internal;
-/**
- * 
- * @since 1.0
- */
-public interface ITomcatServerWorkingCopy extends ITomcatServer {
-	/**
-	 * Sets this server to test environment mode.
-	 * 
-	 * @param b boolean
-	 */
-	public void setTestEnvironment(boolean b);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java
deleted file mode 100644
index a19083e..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.util.List;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jst.server.core.IWebModule;
-/**
- * 
- */
-public interface ITomcatVersionHandler {
-	public boolean verifyInstallPath(IPath installPath);
-	
-	public String getRuntimeClass();
-	
-	public List getRuntimeClasspath(IPath installPath);
-	
-	/**
-	 * Return the program's runtime arguments.
-	 * 
-	 * @param configPath a config path
-	 * @param debug <code>true</code> if debug mode is on
-	 * @param starting <code>true</code> if the server is starting
-	 * @return a string array of program arguments
-	 */
-	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting);
-	
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv, boolean isSecure);
-
-	/**
-	 * Returns true if the given project is supported by this
-	 * server, and false otherwise.
-	 *
-	 * @param module a web module
-	 * @return the status
-	 */
-	public IStatus canAddModule(IWebModule module);
-	
-	/**
-	 * Returns the runtime base path for relative paths in the server
-	 * configuration.
-	 * 
-	 * @param serverBehaviour TomcatServerBehaviour instance from
-	 * which to determine the base path
-	 * @return the base path
-	 */
-	public IPath getRuntimeBaseDirectory(TomcatServerBehaviour serverBehaviour);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatWebModule.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatWebModule.java
deleted file mode 100644
index 7cb88b8..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatWebModule.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.jst.server.tomcat.core.internal;
-/**
- * A Web module deployed on Tomcat.
- */
-public interface ITomcatWebModule {
-	/**
-	 * Get the document base.
-	 *
-	 * @return java.lang.String
-	 */
-	public String getDocumentBase();
-
-	/**
-	 * Return the path. (context root)
-	 *
-	 * @return java.lang.String
-	 */
-	public String getPath();
-
-	/**
-	 * Return the memento.
-	 *
-	 * @return java.lang.String
-	 */
-	public String getMemento();
-
-	/**
-	 * Return true if the web module is auto-reloadable.
-	 *
-	 * @return java.lang.String
-	 */
-	public boolean isReloadable();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.java
deleted file mode 100644
index 70f91cb..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/**********************************************************************
- * 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.jst.server.tomcat.core.internal;
-
-import org.eclipse.osgi.util.NLS;
-/**
- * Translated messages.
- */
-public class Messages extends NLS {
-	public static String copyingTask;
-	public static String errorCopyingFile;
-	public static String deletingTask;
-	public static String errorInstallDir;
-	public static String errorInstallDirTrailingSlash;
-	public static String errorJRE;
-	public static String warningJRE;
-	public static String target32runtime;
-	public static String target40runtime;
-	public static String target41runtime;
-	public static String target50runtime;
-	public static String target55runtime;
-	public static String portUnknown;
-	public static String loadingTask;
-	public static String errorCouldNotLoadConfiguration;
-	public static String savingTask;
-	public static String errorCouldNotSaveConfiguration;
-	public static String updatingConfigurationTask;
-	public static String canAddModule;
-	public static String errorSpec32;
-	public static String errorSpec40;
-	public static String errorSpec41;
-	public static String errorSpec50;
-	public static String errorSpec55;
-	public static String portServer;
-	public static String runtimeDirPrepared;
-	public static String publishConfigurationTask;
-	public static String publishContextConfigTask;
-	public static String savingContextConfigTask;
-	public static String checkingContextTask;
-	public static String serverPostProcessingComplete;
-	public static String errorPublishConfiguration;
-	public static String cleanupServerTask;
-	public static String detectingRemovedProjects;
-	public static String deletingContextFilesTask;
-	public static String deletingContextFile;
-	public static String deletedContextFile;
-	public static String errorCouldNotDeleteContextFile;
-	public static String errorCleanupServer;
-	public static String publisherPublishTask;
-	public static String errorNoConfiguration;
-	public static String errorWebModulesOnly;
-	public static String publishServerTask;
-	public static String errorPortInvalid;
-	public static String errorPortInUse;
-	public static String errorPortsInUse;
-	public static String configurationEditorActionModifyPortDescription;
-	public static String configurationEditorActionModifyPort;
-	public static String configurationEditorActionModifyMimeMappingDescription;
-	public static String configurationEditorActionModifyMimeMapping;
-	public static String configurationEditorActionAddMimeMappingDescription;
-	public static String configurationEditorActionAddMimeMapping;
-	public static String configurationEditorActionAddWebModuleDescription;
-	public static String configurationEditorActionAddWebModule;
-	public static String configurationEditorActionModifyWebModuleDescription;
-	public static String configurationEditorActionModifyWebModule;
-	public static String configurationEditorActionRemoveMimeMappingDescription;
-	public static String configurationEditorActionRemoveMimeMapping;
-	public static String configurationEditorActionRemoveWebModuleDescription;
-	public static String configurationEditorActionRemoveWebModule;
-	public static String serverEditorActionSetDebugModeDescription;
-	public static String serverEditorActionSetDebugMode;
-	public static String serverEditorActionSetSecureDescription;
-	public static String serverEditorActionSetSecure;
-	public static String serverEditorActionSetTestEnvironmentDescription;
-	public static String serverEditorActionSetTestEnvironment;
-	public static String configurationEditorActionEditWebModuleDescription;
-	public static String configurationEditorActionEditWebModulePath;
-	public static String fixModuleContextRootDescription;
-	public static String fixModuleContextRoot;
-
-	static {
-		NLS.initializeMessages(TomcatPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.properties b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.properties
deleted file mode 100644
index 1105507..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.properties
+++ /dev/null
@@ -1,96 +0,0 @@
-###############################################################################
-# Copyright (c) 2004, 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
-###############################################################################
-
-# runtime target
-target32runtime=Tomcat v3.2 runtime
-target40runtime=Tomcat v4.0 runtime
-target41runtime=Tomcat v4.1 runtime
-target50runtime=Tomcat v5.0 runtime
-target55runtime=Tomcat v5.5 runtime
-
-# --------------- Tasks (progress monitors) ---------------
-savingTask=Saving...
-loadingTask=Loading...
-updatingConfigurationTask=Updating run-time configuration...
-publishServerTask=Publishing to server...
-publishConfigurationTask=Publishing the configuration...
-publisherPublishTask=Publishing {0}...
-fixModuleContextRoot=Update context root for Web module {0}
-fixModuleContextRootDescription=Update the context root of the Web module to match the current settings
-
-publishContextConfigTask=Publishing META-INF/context.xml configurations...
-checkingContextTask=Checking Context {0} for context.xml...
-savingContextConfigTask=Saving context configuration updates...
-serverPostProcessingComplete=Context configurations added.
-
-cleanupServerTask=Removing obsolete files from server...
-detectingRemovedProjects=Preparing list of removed projects...
-deletingContextFilesTask=Deleting obsolete context files from server...
-deletingContextFile=Deleting obsolete context file {0}...
-deletedContextFile=Context file {0} removed
-runtimeDirPrepared=Runtime directory prepared
-
-# Editor commands (used in undo/redo menus)
-configurationEditorActionAddMimeMapping=add MIME mapping
-configurationEditorActionAddMimeMappingDescription=Add a MIME mapping
-configurationEditorActionModifyMimeMapping=modify MIME mapping
-configurationEditorActionModifyMimeMappingDescription=Modify the MIME mapping
-configurationEditorActionRemoveMimeMapping=remove MIME mapping
-configurationEditorActionRemoveMimeMappingDescription=Remove a MIME mapping
-configurationEditorActionAddWebModule=add Web module
-configurationEditorActionAddWebModuleDescription=Add a Web module
-configurationEditorActionModifyWebModule=modify Web module
-configurationEditorActionModifyWebModuleDescription=Modify the Web module
-configurationEditorActionRemoveWebModule=remove Web module
-configurationEditorActionRemoveWebModuleDescription=Remove Web module {0}
-configurationEditorActionModifyPort=set port number
-configurationEditorActionModifyPortDescription=Set the port number
-configurationEditorActionEditWebModulePath=edit Web module path
-configurationEditorActionEditWebModuleDescription=Change Web module path from {0} to {1}
-
-# --------------- General ---------------
-canAddModule=Web module can be added to the server.
-canModifyModules=Web modules can be modified.
-portServer=Tomcat admin port
-portUnknown=unknown port
-
-# --------------- Errors and Info ---------------
-errorInstallDir=The Tomcat installation directory is not correct. It does not point to a valid Tomcat installation.
-errorInstallDirTrailingSlash=The Tomcat installation directory should not have a trailing slash.
-errorJRE=The JRE could not be found. Edit the server and change the JRE location.
-errorPortInvalid=The server cannot be started because one or more of the ports are invalid. Open the server editor and correct the invalid ports.
-errorPortInUse=Port {0} required by {1} is already in use. The server may already be running in another process, or a system process may be using the port. \
-  To start this server you will need to stop the other process or change the port number(s).
-errorPortsInUse=Several ports ({0}) required by {1} are already in use. The server may already be running in another process, or a system process may be using the port. \
-  To start this server you will need to stop the other process or change the port number(s).
-# the {0} in the following two lines will be replaced with a location (path) of the missing or corrupt server configuration
-errorNoConfiguration=The Tomcat server configuration at {0} is missing. Check the server for errors.
-errorCouldNotLoadConfiguration=Could not load the Tomcat server configuration at {0}. The configuration may be corrupt or incomplete.
-errorCouldNotSaveConfiguration=Could not save the Tomcat server configuration: {0}.
-errorPublishConfiguration=Could not publish server configuration: {0}.
-errorCouldNotDeleteContextFile=Could not delete obsolete context file: {0}
-errorCleanupServer=Could not clean server of obsolete files: {0}
-errorWebModulesOnly=Tomcat only supports running J2EE Web modules.
-errorSpec32=Tomcat version 3.2 only supports J2EE 1.2 Web modules
-errorSpec40=Tomcat version 4.0 only supports J2EE 1.2 and 1.3 Web modules
-errorSpec41=Tomcat version 4.1 only supports J2EE 1.2 and 1.3 Web modules
-errorSpec50=Tomcat version 5.0 only supports J2EE 1.2, 1.3, and 1.4 Web modules
-errorSpec55=Tomcat version 5.5 only supports J2EE 1.2, 1.3, and 1.4 Web modules
-
-warningJRE=Tomcat requires a Java SDK in order to compile JSP files. Ensure that the JRE preference settings point to an SDK install location.
-
-# Actions (used in undo/redo menus)
-serverEditorActionSetSecure=set security
-serverEditorActionSetSecureDescription=Set the Tomcat security
-serverEditorActionSetDebugMode=set Tomcat debug mode
-serverEditorActionSetDebugModeDescription=Set Tomcat in debug mode
-serverEditorActionSetTestEnvironment=run modules from workspace
-serverEditorActionSetTestEnvironmentDescription=Run modules from the workspace
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/MimeMapping.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/MimeMapping.java
deleted file mode 100644
index bd3fb2e..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/MimeMapping.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-/**
- * A mime mapping.
- */
-public class MimeMapping implements IMimeMapping {
-	private String extension;
-	private String mimeType;
-
-	/**
-	 * MimeMapping constructor comment.
-	 * 
-	 * @param extension an extension
-	 * @param mimeType a mime type
-	 */
-	public MimeMapping(String extension, String mimeType) {
-		super();
-		this.extension = extension;
-		this.mimeType = mimeType;
-	}
-
-	/**
-	 * Returns the extension.
-	 * @return java.lang.String
-	 */
-	public String getExtension() {
-		return extension;
-	}
-
-	/**
-	 * Returns the mime type.
-	 * @return java.lang.String
-	 */
-	public String getMimeType() {
-		return mimeType;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java
deleted file mode 100644
index 0c789d2..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java
+++ /dev/null
@@ -1,620 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
-import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server32.*;
-import org.eclipse.osgi.util.NLS;
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
-
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.ServerPort;
-/**
- * Tomcat v3.2 server configuration.
- */
-public class Tomcat32Configuration extends TomcatConfiguration {
-	public static final String ID = "org.eclipse.tomcat.configuration.32";
-
-	protected static final String HTTP_HANDLER = "org.apache.tomcat.service.http.HttpConnectionHandler";
-	protected static final String APACHE_HANDLER = "org.apache.tomcat.service.connector.Ajp12ConnectionHandler";
-	protected static final String SSL_SOCKET_FACTORY = "org.apache.tomcat.net.SSLSocketFactory";
-
-	protected Server server;
-	protected Factory serverFactory;
-	protected boolean isServerDirty;
-
-	protected WebAppDocument webAppDocument;
-
-	protected Document tomcatUsersDocument;
-
-	protected String policyFile;
-
-	/**
-	 * Tomcat32Configuration constructor.
-	 * 
-	 * @param path a path
-	 */
-	public Tomcat32Configuration(IFolder path) {
-		super(path);
-	}
-	
-	/**
-	 * Return the root of the docbase parameter.
-	 *
-	 * @return java.lang.String
-	 */
-	protected String getDocBaseRoot() {
-		return "";
-	}
-	
-	/**
-	 * Returns the main server port.
-	 * @return TomcatServerPort
-	 */
-	public ServerPort getMainPort() {
-		Iterator iterator = getServerPorts().iterator();
-		while (iterator.hasNext()) {
-			ServerPort port = (ServerPort) iterator.next();
-			if (port.getName().equals("HTTP Connector"))
-				return port;
-		}
-		return null;
-	}
-	
-	/**
-	 * Returns the mime mappings.
-	 * @return java.util.List
-	 */
-	public List getMimeMappings() {
-		if (webAppDocument == null)
-			return new ArrayList(0);
-		
-		return webAppDocument.getMimeMappings();
-	}
-
-	/**
-	 * Returns the prefix that is used in front of the
-	 * web module path property. (e.g. "webapps")
-	 *
-	 * @return java.lang.String
-	 */
-	public String getPathPrefix() {
-		return "webapps";
-	}
-	
-	/**
-	 * Return the docBase of the ROOT web module.
-	 *
-	 * @return java.lang.String
-	 */
-	protected String getROOTModuleDocBase() {
-		return "webapps/ROOT";
-	}
-	
-	/**
-	 * Returns the server object (root of server.xml).
-	 * @return org.eclipse.jst.server.tomcat.internal.xml.server32.Server
-	 */
-	public Server getServer() {
-		return server;
-	}
-
-	/**
-	 * Returns a list of ServerPorts that this configuration uses.
-	 *
-	 * @return java.util.List
-	 */
-	public List getServerPorts() {
-		List ports = new ArrayList();
-	
-		try {
-			int count = server.getContextManager().getConnectorCount();
-			for (int i = 0; i < count; i++) {
-				Connector connector = server.getContextManager().getConnector(i);
-				int paramCount = connector.getParameterCount();
-				String handler = null;
-				String name = Messages.portUnknown;
-				String socketFactory = null;
-				String protocol = "TCPIP";
-				boolean advanced = true;
-				String[] contentTypes = null;
-				int port = -1;
-				for (int j = 0; j < paramCount; j++) {
-					Parameter p = connector.getParameter(j);
-					if ("port".equals(p.getName())) {
-						try {
-							port = Integer.parseInt(p.getValue());
-						} catch (Exception e) {
-							// ignore
-						}
-					} else if ("handler".equals(p.getName()))
-						handler = p.getValue();
-					else if ("socketFactory".equals(p.getName()))
-						socketFactory = p.getValue();
-				}
-				if (HTTP_HANDLER.equals(handler)) {
-					protocol = "HTTP";
-					contentTypes = new String[] { "web", "webservices" };
-					if (SSL_SOCKET_FACTORY.equals(socketFactory)) {
-						protocol = "SSL";
-						name = "SSL Connector";
-					} else {
-						name = "HTTP Connector";
-						advanced = false;
-					}
-				} else if (APACHE_HANDLER.equals(handler))
-					name = "Apache Connector";
-				if (handler != null)
-					ports.add(new ServerPort(i + "", name, port, protocol, contentTypes, advanced));
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting server ports", e);
-		}
-	
-		return ports;
-	}
-	
-	/**
-	 * Returns the tomcat-users.xml document.
-	 *
-	 * @return org.w3c.dom.Document
-	 */
-	public Document getTomcatUsersDocument() {
-		return tomcatUsersDocument;
-	}
-	
-	/**
-	 * Return a list of the web modules in this server.
-	 * @return java.util.List
-	 */
-	public List getWebModules() {
-		List list = new ArrayList();
-	
-		try {
-			ContextManager contextManager = server.getContextManager();
-	
-			int size = contextManager.getContextCount();
-			for (int i = 0; i < size; i++) {
-				Context context = contextManager.getContext(i);
-				String reload = context.getReloadable();
-				if (reload == null)
-					reload = "false";
-				WebModule module = new WebModule(context.getPath(), 
-					context.getDocBase(), context.getSource(),
-					reload.equalsIgnoreCase("true") ? true : false);
-				list.add(module);
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting project refs", e);
-		}
-	
-		return list;
-	}
-	
-	/**
-	 * @see TomcatConfiguration#load(IPath, IProgressMonitor)
-	 */
-	public void load(IPath path, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 5);
-	
-			// check for tomcat.policy to verify that this is a v3.2 config
-			InputStream in = new FileInputStream(path.append("tomcat.policy").toFile());
-			in.read();
-			in.close();
-			monitor.worked(1);
-			
-			// create server.xml
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server32");
-			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			monitor.worked(1);
-	
-			webAppDocument = new WebAppDocument(path.append("web.xml"));
-			monitor.worked(1);
-			
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(path.append("tomcat-users.xml").toFile())));
-			monitor.worked(1);
-	
-			// load policy file
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(new FileInputStream(path.append("tomcat.policy").toFile())));
-				String temp = br.readLine();
-				policyFile = "";
-				while (temp != null) {
-					policyFile += temp + "\n";
-					temp = br.readLine();
-				}
-				br.close();
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Could not load policy file", e);
-			} finally {
-				if (br != null)
-					br.close();
-			}
-			monitor.worked(1);
-	
-			if (monitor.isCanceled())
-				return;
-	
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not load Tomcat v3.2 configuration from " + path.toOSString() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, path.toOSString()), e));
-		}
-	}
-	
-	/**
-	 * @see TomcatConfiguration#load(IFolder, IProgressMonitor)
-	 */
-	public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 800);
-	
-			// check for tomcat.policy to verify that this is a v3.2 config
-			IFile file = folder.getFile("tomcat.policy");
-			if (!file.exists())
-				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), null));
-	
-			// load server.xml
-			file = folder.getFile("server.xml");
-			InputStream in = file.getContents();
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server32");
-			server = (Server) serverFactory.loadDocument(in);
-			monitor.worked(200);
-	
-			// load web.xml
-			file = folder.getFile("web.xml");
-			webAppDocument = new WebAppDocument(file);
-			monitor.worked(200);
-	
-			// load tomcat-users.xml
-			file = folder.getFile("tomcat-users.xml");
-			in = file.getContents();
-			
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
-			monitor.worked(200);
-	
-			// load tomcat.policy
-			file = folder.getFile("tomcat.policy");
-			in = file.getContents();
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(in));
-				String temp = br.readLine();
-				policyFile = "";
-				while (temp != null) {
-					policyFile += temp + "\n";
-					temp = br.readLine();
-				}
-				br.close();
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Could not load policy file", e);
-			} finally {
-				if (br != null)
-					br.close();
-			}
-			monitor.worked(200);
-	
-			if (monitor.isCanceled())
-				throw new Exception("Cancelled");
-	
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not load Tomcat v3.2 configuration from: " + folder.getFullPath() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), e));
-		}
-	}
-	
-	/**
-	 * Save the information held by this object to the given directory.
-	 * 
-	 * @param path a path
-	 * @param forceDirty if true, the files will be saved, regardless
-	 *  of whether they have been modified
-	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 */
-	protected void save(IPath path, boolean forceDirty, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 5);
-	
-			// make sure directory exists
-			if (!path.toFile().exists()) {
-				forceDirty = true;
-				path.toFile().mkdir();
-			}
-			monitor.worked(1);
-	
-			// save files
-			if (forceDirty || isServerDirty)
-				serverFactory.save(path.append("server.xml").toOSString());
-			monitor.worked(1);
-	
-			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
-			monitor.worked(1);
-	
-			if (forceDirty)
-				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
-			monitor.worked(1);
-	
-			if (forceDirty) {
-				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("tomcat.policy").toFile()));
-				bw.write(policyFile);
-				bw.close();
-			}
-			monitor.worked(1);
-			isServerDirty = false;
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v3.2 configuration to " + path, e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-	
-	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
-		save(path, true, monitor);
-	}
-	
-	/**
-	 * Save the information held by this object to the given directory.
-	 * 
-	 * @param folder a folder
-	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 */
-	public void save(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 900);
-	
-			if (!folder.exists())
-				folder.create(true, true, ProgressUtil.getSubMonitorFor(monitor, 100));
-			else
-				monitor.worked(100);
-	
-			// save server.xml
-			byte[] data = serverFactory.getContents();
-			InputStream in = new ByteArrayInputStream(data);
-			IFile file = folder.getFile("server.xml");
-			if (file.exists()) {
-				if (isServerDirty)
-					file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-				else
-					monitor.worked(200);
-			} else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save web.xml
-			file = folder.getFile("web.xml");
-			webAppDocument.save(file, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save tomcat-users.xml
-			data = XMLUtil.getContents(tomcatUsersDocument);
-			in = new ByteArrayInputStream(data);
-			file = folder.getFile("tomcat-users.xml");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save tomcat.policy
-			in = new ByteArrayInputStream(policyFile.getBytes());
-			file = folder.getFile("tomcat.policy");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v3.2 configuration to " + folder.getFullPath(), e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-	
-	
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addMimeMapping(int, IMimeMapping)
-	 */
-	public void addMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.addMimeMapping(index, map);
-		firePropertyChangeEvent(ADD_MAPPING_PROPERTY, new Integer(index), map);
-	}
-
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addWebModule(int, ITomcatWebModule)
-	 */
-	public void addWebModule(int index, ITomcatWebModule module) {
-		try {
-			ContextManager contextManager = server.getContextManager();
-			Context context = (Context) contextManager.createElement(index, "Context");
-	
-			context.setPath(module.getPath());
-			context.setDocBase(module.getDocumentBase());
-			context.setReloadable(module.isReloadable() ? "true" : "false");
-			if (module.getMemento() != null && module.getMemento().length() > 0)
-				context.setSource(module.getMemento());
-			isServerDirty = true;
-			firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error adding web module", e);
-		}
-	}
-	
-	/**
-	 * Localize the web projects in this configuration.
-	 *
-	 * @param path a path
-	 * @param serverType a server type
-	 * @param runtime a runtime
-	 * @param monitor a progress monitor
-	 */
-	public void localizeConfiguration(IPath path, TomcatServer serverType, IRuntime runtime, IProgressMonitor monitor) {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.updatingConfigurationTask, 100);
-	
-			Tomcat32Configuration config = new Tomcat32Configuration(null);
-			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 30));
-	
-			if (monitor.isCanceled())
-				return;
-	
-			if (serverType.isTestEnvironment()) {
-				config.server.getContextManager().setHome(runtime.getLocation().toOSString());
-				config.isServerDirty = true;
-			} else {
-				//IServerConfigurationWorkingCopy scwc = config.getServerConfiguration().createWorkingCopy();
-				//Tomcat32Configuration cfg = (Tomcat32Configuration) scwc.getAdapter(Tomcat32Configuration.class);
-				config.localizeWebModules();
-			}
-	
-			monitor.worked(40);
-	
-			if (monitor.isCanceled())
-				return;
-
-			config.save(path, false, ProgressUtil.getSubMonitorFor(monitor, 30));
-	
-			if (!monitor.isCanceled())
-				monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error localizing configuration", e);
-		}
-	}
-	
-	/**
-	 * Go through all of the web modules and make the document
-	 * base "local" to the configuration.
-	 */
-	protected void localizeWebModules() {
-		List modules = getWebModules();
-
-		int size = modules.size();
-		for (int i = 0; i < size; i++) {
-			WebModule module = (WebModule) modules.get(i);
-			String memento = module.getMemento();
-			if (memento != null && memento.length() > 0) {
-				// update document base to a relative ref
-				String docBase = getPathPrefix() + module.getPath();
-				if (docBase.startsWith("/") || docBase.startsWith("\\"))
-					docBase = docBase.substring(1);
-				modifyWebModule(i, docBase, module.getPath(), module.isReloadable());
-			}
-		}
-	}
-	
-	/**
-	 * Change the extension of a mime mapping.
-	 * 
-	 * @param index
-	 * @param map
-	 */
-	public void modifyMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.modifyMimeMapping(index, map);
-		firePropertyChangeEvent(MODIFY_MAPPING_PROPERTY, new Integer(index), map);
-	}
-	
-	/**
-	 * Modify the port with the given id.
-	 *
-	 * @param id java.lang.String
-	 * @param port int
-	 */
-	public void modifyServerPort(String id, int port) {
-		try {
-			int con = Integer.parseInt(id);
-			Connector connector = server.getContextManager().getConnector(con);
-	
-			int size = connector.getParameterCount();
-			for (int i = 0; i < size; i++) {
-				Parameter p = connector.getParameter(i);
-				if ("port".equals(p.getName())) {
-					p.setValue(port + "");
-					isServerDirty = true;
-					firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying server port " + id, e);
-		}
-	}
-	
-	/**
-	 * Change a web module.
-	 * @param index int
-	 * @param docBase java.lang.String
-	 * @param path java.lang.String
-	 * @param reloadable boolean
-	 */
-	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
-		try {
-			ContextManager contextManager = server.getContextManager();
-			Context context = contextManager.getContext(index);
-			context.setPath(path);
-			context.setDocBase(docBase);
-			context.setReloadable(reloadable ? "true" : "false");
-			isServerDirty = true;
-			WebModule module = new WebModule(path, docBase, null, reloadable);
-			firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
-		}
-	}
-	
-	/**
-	 * Removes a mime mapping.
-	 * @param index int
-	 */
-	public void removeMimeMapping(int index) {
-		webAppDocument.removeMimeMapping(index);
-		firePropertyChangeEvent(REMOVE_MAPPING_PROPERTY, null, new Integer(index));
-	}
-	
-	/**
-	 * Removes a web module.
-	 * @param index int
-	 */
-	public void removeWebModule(int index) {
-		try {
-			ContextManager contextManager = server.getContextManager();
-			contextManager.removeElement("Context", index);
-			isServerDirty = true;
-			firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error removing web module " + index, e);
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
deleted file mode 100644
index 9084acb..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.IWebModule;
-/**
- * Tomcat 32 handler.
- */
-public class Tomcat32Handler implements ITomcatVersionHandler {
-	/**
-	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
-	 */
-	public boolean verifyInstallPath(IPath installPath) {
-		return TomcatPlugin.verifyInstallPath(installPath, TomcatPlugin.TOMCAT_32);
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeClass()
-	 */
-	public String getRuntimeClass() {
-		return "org.apache.tomcat.startup.Tomcat";
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath)
-	 */
-	public List getRuntimeClasspath(IPath installPath) {
-		List cp = new ArrayList();
-		// add all jars from the Tomcat lib directory
-		File libDir = installPath.append("lib").toFile();
-		if (libDir.exists()) {
-			String[] libs = libDir.list();
-			for (int i = 0; i < libs.length; i++) {
-				if (libs[i].endsWith("jar")) {
-					IPath path = installPath.append("lib").append(libs[i]);
-					cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path));
-				}
-			}
-		}
-
-		return cp;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
-	 */
-	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
-		if (configPath != null) {
-			list.add("-f \"" + configPath.append("conf").append("server.xml").toOSString() + "\"");
-		}
-		
-		if (!starting)
-			list.add("-stop");
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean, boolean)
-	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv, boolean isSecure) {
-		List list = new ArrayList();
-		list.add("-Dtomcat.home=\"" + installPath.toOSString() + "\"");
-		
-		// run in secure mode
-		if (isSecure) {
-			list.add("-Djava.security.manager");
-			IPath dir = configPath.append("conf").append("tomcat.policy");
-			list.add("-Djava.security.policy=\"" + dir.toOSString() + "\"");
-		}
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#canAddModule(IWebModule)
-	 */
-	public IStatus canAddModule(IWebModule module) {
-		if ("1.2".equals(module.getJ2EESpecificationVersion()))
-			return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.canAddModule, null);
-		
-		return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorSpec32, null);
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeBaseDirectory(TomcatServerBehaviour)
-	 */
-	public IPath getRuntimeBaseDirectory(TomcatServerBehaviour serverBehaviour) {
-		return serverBehaviour.getServer().getRuntime().getLocation();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java
deleted file mode 100644
index 1fc28eb..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java
+++ /dev/null
@@ -1,668 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
-import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.*;
-import org.eclipse.osgi.util.NLS;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.xml.sax.InputSource;
-
-import org.eclipse.wst.server.core.ServerPort;
-/**
- * Tomcat v4.0 server configuration.
- */
-public class Tomcat40Configuration extends TomcatConfiguration {
-	protected static final String DEFAULT_SERVICE = "Tomcat-Standalone";
-	protected static final String HTTP_CONNECTOR = "org.apache.catalina.connector.http.HttpConnector";
-	protected static final String SSL_SOCKET_FACTORY = "org.apache.catalina.net.SSLServerSocketFactory";
-	protected static final String TEST_CONNECTOR = "org.apache.catalina.connector.test.HttpConnector";
-	protected static final String APACHE_CONNECTOR = "org.apache.catalina.connector.warp.WarpConnector";
-
-	protected Server server;
-	protected Factory serverFactory;
-	protected boolean isServerDirty;
-
-	protected WebAppDocument webAppDocument;
-
-	protected Document tomcatUsersDocument;
-
-	protected String policyFile;
-	protected boolean isPolicyDirty;
-
-	/**
-	 * Tomcat40Configuration constructor.
-	 * 
-	 * @param path a path
-	 */
-	public Tomcat40Configuration(IFolder path) {
-		super(path);
-	}
-		
-	/**
-	 * Returns the root of the docbase parameter.
-	 *
-	 * @return java.lang.String
-	 */
-	protected String getDocBaseRoot() {
-		return "webapps/";
-	}
-
-	/**
-	 * Return the port number.
-	 * @return int
-	 */
-	public ServerPort getMainPort() {
-		Iterator iterator = getServerPorts().iterator();
-		while (iterator.hasNext()) {
-			ServerPort port = (ServerPort) iterator.next();
-			if (port.getName().equals("HTTP Connector"))
-				return port;
-		}
-		return null;
-	}
-	
-	/**
-	 * Returns the mime mappings.
-	 * @return java.util.List
-	 */
-	public List getMimeMappings() {
-		return webAppDocument.getMimeMappings();
-	}
-
-	/**
-	 * Returns the prefix that is used in front of the
-	 * web module path property. (e.g. "webapps")
-	 *
-	 * @return java.lang.String
-	 */
-	public String getPathPrefix() {
-		return "";
-	}
-	
-	/**
-	 * Return the docBase of the ROOT web module.
-	 *
-	 * @return java.lang.String
-	 */
-	protected String getROOTModuleDocBase() {
-		return "ROOT";
-	}
-	
-	/**
-	 * Returns a list of ServerPorts that this configuration uses.
-	 *
-	 * @return java.util.List
-	 */
-	public List getServerPorts() {
-		List ports = new ArrayList();
-	
-		// first add server port
-		try {
-			int port = Integer.parseInt(server.getPort());
-			ports.add(new ServerPort("server", Messages.portServer, port, "TCPIP"));
-		} catch (Exception e) {
-			// ignore
-		}
-	
-		// add connectors
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				int size2 = service.getConnectorCount();
-				for (int j = 0; j < size2; j++) {
-					Connector connector = service.getConnector(j);
-					String className = connector.getClassName();
-					String name = Messages.portUnknown;
-					String protocol = "TCPIP";
-					boolean advanced = true;
-					String[] contentTypes = null;
-					int port = -1;
-					try {
-						port = Integer.parseInt(connector.getPort());
-					} catch (Exception e) {
-						// ignore
-					}
-					if (HTTP_CONNECTOR.equals(className)) {
-						name = "HTTP Connector";
-						protocol = "HTTP";
-						contentTypes = new String[] { "web", "webservices" };
-						// check for SSL connector
-						try {
-							Element element = connector.getSubElement("Factory");
-							if (SSL_SOCKET_FACTORY.equals(element.getAttribute("className"))) {
-								name = "SSL Connector";
-								protocol = "SSL";
-							}
-						} catch (Exception e) {
-							// ignore
-						}
-						if ("HTTP".equals(protocol))
-							advanced = false;
-					} else if (APACHE_CONNECTOR.equals(className))
-						name = "Apache Connector";
-					if (className != null && className.length() > 0)
-						ports.add(new ServerPort(i + "/" + j, name, port, protocol, contentTypes, advanced));
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting server ports", e);
-		}
-		return ports;
-	}
-	
-	/**
-	 * Return a list of the web modules in this server.
-	 * @return java.util.List
-	 */
-	public List getWebModules() {
-		List list = new ArrayList();
-	
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						Context context = host.getContext(j);
-						String reload = context.getReloadable();
-						if (reload == null)
-							reload = "false";
-						WebModule module = new WebModule(context.getPath(), 
-							context.getDocBase(), context.getSource(),
-							reload.equalsIgnoreCase("true") ? true : false);
-						list.add(module);
-					}
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting modules", e);
-		}
-		return list;
-	}
-	
-	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
-		load(path, monitor);
-		
-		// for test environment, remove existing contexts since a separate
-		// catalina.base will be used
-		if (isTestEnv) {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Host host = service.getEngine().getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						host.removeElement("Context", 0);
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * @see TomcatConfiguration#load(IPath, IProgressMonitor)
-	 */
-	public void load(IPath path, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 5);
-			
-			// check for catalina.policy to verify that this is a v4.0 config
-			InputStream in = new FileInputStream(path.append("catalina.policy").toFile());
-			in.read();
-			in.close();
-			monitor.worked(1);
-	
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			monitor.worked(1);
-
-			webAppDocument = new WebAppDocument(path.append("web.xml"));
-			monitor.worked(1);
-	
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(path.append("tomcat-users.xml").toFile())));
-			monitor.worked(1);
-		
-			// load policy file
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(new FileInputStream(path.append("catalina.policy").toFile())));
-				String temp = br.readLine();
-				policyFile = "";
-				while (temp != null) {
-					policyFile += temp + "\n";
-					temp = br.readLine();
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load policy file", e);
-			} finally {
-				if (br != null)
-					br.close();
-			}
-			monitor.worked(1);
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load Tomcat v4.0 configuration from " + path.toOSString() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, path.toOSString()), e));
-		}
-	}
-
-	/**
-	 * @see TomcatConfiguration#load(IFolder, IProgressMonitor)
-	 */
-	public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 800);
-	
-			// check for catalina.policy to verify that this is a v4.0 config
-			IFile file = folder.getFile("catalina.policy");
-			if (!file.exists())
-				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), null));
-	
-			// load server.xml
-			file = folder.getFile("server.xml");
-			InputStream in = file.getContents();
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			server = (Server) serverFactory.loadDocument(in);
-			monitor.worked(200);
-	
-			// load web.xml
-			file = folder.getFile("web.xml");
-			webAppDocument = new WebAppDocument(file);
-			monitor.worked(200);
-	
-			// load tomcat-users.xml
-			file = folder.getFile("tomcat-users.xml");
-			in = file.getContents();
-			
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
-			monitor.worked(200);
-		
-			// load catalina.policy
-			file = folder.getFile("catalina.policy");
-			in = file.getContents();
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(in));
-				String temp = br.readLine();
-				policyFile = "";
-				while (temp != null) {
-					policyFile += temp + "\n";
-					temp = br.readLine();
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load policy file", e);
-			} finally {
-				if (br != null)
-					br.close();
-			}
-			monitor.worked(200);
-	
-			if (monitor.isCanceled())
-				throw new Exception("Cancelled");
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not reload Tomcat v4.0 configuration from: " + folder.getFullPath() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), e));
-		}
-	}
-	
-	/**
-	 * Save to the given directory.
-	 * 
-	 * @param path a path
-	 * @param forceDirty boolean
-	 * @param monitor a progress monitor
-	 * @exception CoreException
-	 */
-	protected void save(IPath path, boolean forceDirty, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 3);
-	
-			// make sure directory exists
-			if (!path.toFile().exists()) {
-				forceDirty = true;
-				path.toFile().mkdir();
-			}
-			monitor.worked(1);
-	
-			// save files
-			if (forceDirty || isServerDirty)
-				serverFactory.save(path.append("server.xml").toOSString());
-			monitor.worked(1);
-	
-			//if (forceDirty || isWebAppDirty)
-			//	webAppFactory.save(dirPath + "web.xml");
-			//webAppDocument.save(path.toOSString(), forceDirty || isPolicyDirty);
-			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
-			monitor.worked(1);
-	
-			if (forceDirty)
-				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
-			monitor.worked(1);
-	
-			if (forceDirty || isPolicyDirty) {
-				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.policy").toFile()));
-				bw.write(policyFile);
-				bw.close();
-			}
-			monitor.worked(1);
-			isServerDirty = false;
-			isPolicyDirty = false;
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v4.0 configuration to " + path, e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-	
-	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
-		save(path, true, monitor);
-	}
-
-	/**
-	 * Save the information held by this object to the given directory.
-	 *
-	 * @param folder a folder
-	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 */
-	public void save(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 900);
-	
-			// save server.xml
-			byte[] data = serverFactory.getContents();
-			InputStream in = new ByteArrayInputStream(data);
-			IFile file = folder.getFile("server.xml");
-			if (file.exists()) {
-				if (isServerDirty)
-					file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-				else
-					monitor.worked(200);
-			} else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save web.xml
-			webAppDocument.save(folder.getFile("web.xml"), ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save tomcat-users.xml
-			data = XMLUtil.getContents(tomcatUsersDocument);
-			in = new ByteArrayInputStream(data);
-			file = folder.getFile("tomcat-users.xml");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save catalina.policy
-			in = new ByteArrayInputStream(policyFile.getBytes());
-			file = folder.getFile("catalina.policy");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v4.0 configuration to " + folder.toString(), e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-	
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addMimeMapping(int, IMimeMapping)
-	 */
-	public void addMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.addMimeMapping(index, map);
-		firePropertyChangeEvent(ADD_MAPPING_PROPERTY, new Integer(index), map);
-	}
-
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addWebModule(int, ITomcatWebModule)
-	 */
-	public void addWebModule(int index, ITomcatWebModule module) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					Context context = (Context) host.createElement(index, "Context");
-					context.setDocBase(module.getDocumentBase());
-					context.setPath(module.getPath());
-					context.setReloadable(module.isReloadable() ? "true" : "false");
-					if (module.getMemento() != null && module.getMemento().length() > 0)
-						context.setSource(module.getMemento());
-					isServerDirty = true;
-					firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error adding web module " + module.getPath(), e);
-		}
-	}
-	
-	/**
-	 * Localize the web projects in this configuration.
-	 *
-	 * @param path a path
-	 * @param server2 a server type
-	 * @param monitor a progress monitor
-	 */
-	public void localizeConfiguration(IPath path, TomcatServer server2, IProgressMonitor monitor) {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.updatingConfigurationTask, 100);
-			
-			Tomcat40Configuration config = new Tomcat40Configuration(null);
-			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 40));
-	
-			if (monitor.isCanceled())
-				return;
-	
-			if (!server2.isTestEnvironment()) {
-				//IServerConfigurationWorkingCopy scwc = config.getServerConfiguration().createWorkingCopy();
-				//Tomcat40Configuration cfg = (Tomcat40Configuration) scwc.getAdapter(Tomcat40Configuration.class);
-				config.localizeWebModules();
-			}
-	
-			monitor.worked(20);
-	
-			if (monitor.isCanceled())
-				return;
-	
-			config.save(path, false, ProgressUtil.getSubMonitorFor(monitor, 40));
-	
-			if (!monitor.isCanceled())
-				monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error localizing configuration", e);
-		}
-	}
-	
-	/**
-	 * Go through all of the web modules and make the document
-	 * base "local" to the configuration.
-	 */
-	protected void localizeWebModules() {
-		List modules = getWebModules();
-
-		int size = modules.size();
-		for (int i = 0; i < size; i++) {
-			WebModule module = (WebModule) modules.get(i);
-			String memento = module.getMemento();
-			if (memento != null && memento.length() > 0) {
-				// update document base to a relative ref
-				String docBase = getPathPrefix() + module.getPath();
-				if (docBase.startsWith("/") || docBase.startsWith("\\"))
-					docBase = docBase.substring(1);
-				modifyWebModule(i, docBase, module.getPath(), module.isReloadable());
-			}
-		}
-	}
-
-	/**
-	 * Change the extension of a mime mapping.
-	 * 
-	 * @param index
-	 * @param map
-	 */
-	public void modifyMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.modifyMimeMapping(index, map);
-		firePropertyChangeEvent(MODIFY_MAPPING_PROPERTY, new Integer(index), map);
-	}
-	
-	/**
-	 * Modify the port with the given id.
-	 *
-	 * @param id java.lang.String
-	 * @param port int
-	 */
-	public void modifyServerPort(String id, int port) {
-		try {
-			if ("server".equals(id)) {
-				server.setPort(port + "");
-				isServerDirty = true;
-				firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-				return;
-			}
-	
-			int i = id.indexOf("/");
-			int servNum = Integer.parseInt(id.substring(0, i));
-			int connNum = Integer.parseInt(id.substring(i + 1));
-			
-			Service service = server.getService(servNum);
-			Connector connector = service.getConnector(connNum);
-			connector.setPort(port + "");
-			isServerDirty = true;
-			firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying server port " + id, e);
-		}
-	}
-	/**
-	 * Change a web module.
-	 * @param index int
-	 * @param docBase java.lang.String
-	 * @param path java.lang.String
-	 * @param reloadable boolean
-	 */
-	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					Context context = host.getContext(index);
-					context.setPath(path);
-					context.setDocBase(docBase);
-					context.setReloadable(reloadable ? "true" : "false");
-					isServerDirty = true;
-					WebModule module = new WebModule(path, docBase, null, reloadable);
-					firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
-		}
-	}
-	
-	/**
-	 * Removes a mime mapping.
-	 * @param index int
-	 */
-	public void removeMimeMapping(int index) {
-		webAppDocument.removeMimeMapping(index);
-		firePropertyChangeEvent(REMOVE_MAPPING_PROPERTY, null, new Integer(index));
-	}
-	
-	/**
-	 * Removes a web module.
-	 * @param index int
-	 */
-	public void removeWebModule(int index) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					host.removeElement("Context", index);
-					isServerDirty = true;
-					firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error removing module ref " + index, e);
-		}
-	}
-
-	protected IStatus prepareRuntimeDirectory(IPath confDir) {
-		Trace.trace(Trace.FINER, "Preparing runtime directory");
-		// Prepare a catalina.base directory structure
-		File temp = confDir.append("conf").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("logs").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("temp").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("webapps").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("work").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-
-		return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.runtimeDirPrepared, null);		
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
deleted file mode 100644
index 35e7c6e..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.IWebModule;
-/**
- * Tomcat 40 handler.
- */
-public class Tomcat40Handler implements ITomcatVersionHandler {
-	/**
-	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
-	 */
-	public boolean verifyInstallPath(IPath installPath) {
-		if (installPath == null)
-			return false;
-
-		String s = installPath.lastSegment();
-		if (s != null && s.startsWith("jakarta-tomcat-") && !s.startsWith("jakarta-tomcat-4.0"))
-			return false;
-		return TomcatPlugin.verifyInstallPath(installPath, TomcatPlugin.TOMCAT_40);
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeClass()
-	 */
-	public String getRuntimeClass() {
-		return "org.apache.catalina.startup.Bootstrap";
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath)
-	 */
-	public List getRuntimeClasspath(IPath installPath) {
-		List cp = new ArrayList();
-		
-		// 4.0 - add bootstrap.jar from the Tomcat bin directory
-		IPath binPath = installPath.append("bin");
-		if (binPath.toFile().exists()) {
-			IPath path = binPath.append("bootstrap.jar");
-			cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path));
-		}
-		
-		return cp;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
-	 */
-	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
-		
-		if (debug)
-			list.add("-debug");
-		
-		if (starting)
-			list.add("start");
-		else
-			list.add("stop");
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean, boolean)
-	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv, boolean isSecure) {
-		List list = new ArrayList();
-		if (isTestEnv)
-			list.add("-Dcatalina.base=\"" + configPath.toOSString() + "\"");
-		else 
-			list.add("-Dcatalina.base=\"" + installPath.toOSString() + "\"");
-		list.add("-Dcatalina.home=\"" + installPath.toOSString() + "\"");
-		String endorsed = installPath.append("bin").toOSString() +
-			installPath.append("common").append("lib").toOSString();
-		list.add("-Djava.endorsed.dirs=\"" + endorsed + "\"");
-		
-		// run in secure mode
-		if (isSecure) {
-			list.add("-Djava.security.manager");
-			IPath dir = configPath.append("conf").append("catalina.policy");
-			list.add("-Djava.security.policy=\"" + dir.toOSString() + "\"");
-		}
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#canAddModule(IWebModule)
-	 */
-	public IStatus canAddModule(IWebModule module) {
-		if ("1.2".equals(module.getJ2EESpecificationVersion()) || "1.3".equals(module.getJ2EESpecificationVersion()))
-			return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.canAddModule, null);
-		
-		return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorSpec40, null);
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeBaseDirectory(TomcatServerBehaviour)
-	 */
-	public IPath getRuntimeBaseDirectory(TomcatServerBehaviour serverBehaviour) {
-		if (serverBehaviour.getTomcatServer().isTestEnvironment())
-			return serverBehaviour.getTempDirectory();
-		return serverBehaviour.getServer().getRuntime().getLocation();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java
deleted file mode 100644
index 64972c7..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java
+++ /dev/null
@@ -1,805 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
-import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.*;
-import org.eclipse.osgi.util.NLS;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.xml.sax.InputSource;
-
-import org.eclipse.wst.server.core.ServerPort;
-/**
- * Tomcat v4.1 server configuration.
- */
-public class Tomcat41Configuration extends TomcatConfiguration {
-	protected static final String DEFAULT_SERVICE = "Tomcat-Standalone";
-	protected static final String HTTP_CONNECTOR = "org.apache.coyote.tomcat4.CoyoteConnector";
-	protected static final String JK_PROTOCOL_HANDLER = "org.apache.jk.server.JkCoyoteHandler";
-	protected static final String SSL_SOCKET_FACTORY = "org.apache.coyote.tomcat4.CoyoteServerSocketFactory";
-	//protected static final String TEST_CONNECTOR = "org.apache.catalina.connector.test.HttpConnector";
-	//org.apache.ajp.tomcat4.Ajp13Connector
-	protected static final String APACHE_CONNECTOR = "org.apache.catalina.connector.warp.WarpConnector";
-
-	protected Server server;
-	protected Factory serverFactory;
-	protected boolean isServerDirty;
-
-	protected WebAppDocument webAppDocument;
-
-	protected Document tomcatUsersDocument;
-
-	protected String policyFile;
-	protected boolean isPolicyDirty;
-
-	/**
-	 * Tomcat41Configuration constructor.
-	 * 
-	 * @param path a path
-	 */
-	public Tomcat41Configuration(IFolder path) {
-		super(path);
-	}
-	
-	/**
-	 * Returns the root of the docbase parameter.
-	 *
-	 * @return java.lang.String
-	 */
-	protected String getDocBaseRoot() {
-		return "webapps/";
-	}
-
-	/**
-	 * Return the port number.
-	 * @return int
-	 */
-	public ServerPort getMainPort() {
-		Iterator iterator = getServerPorts().iterator();
-		while (iterator.hasNext()) {
-			ServerPort port = (ServerPort) iterator.next();
-			if (port.getName().equals("HTTP Connector"))
-				return port;
-		}
-		return null;
-	}
-	
-	/**
-	 * Returns the mime mappings.
-	 * @return java.util.List
-	 */
-	public List getMimeMappings() {
-		return webAppDocument.getMimeMappings();
-	}
-	
-	/**
-	 * Returns the prefix that is used in front of the
-	 * web module path property. (e.g. "webapps")
-	 *
-	 * @return java.lang.String
-	 */
-	public String getPathPrefix() {
-		return "";
-	}
-	
-	/**
-	 * Return the docBase of the ROOT web module.
-	 *
-	 * @return java.lang.String
-	 */
-	protected String getROOTModuleDocBase() {
-		return "ROOT";
-	}
-	
-	/**
-	 * Returns a list of ServerPorts that this configuration uses.
-	 *
-	 * @return java.util.List
-	 */
-	public List getServerPorts() {
-		List ports = new ArrayList();
-	
-		// first add server port
-		try {
-			int port = Integer.parseInt(server.getPort());
-			ports.add(new ServerPort("server", Messages.portServer, port, "TCPIP"));
-		} catch (Exception e) {
-			// ignore
-		}
-	
-		// add connectors
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				int size2 = service.getConnectorCount();
-				for (int j = 0; j < size2; j++) {
-					Connector connector = service.getConnector(j);
-					String className = connector.getClassName();
-					String name = className;
-					String protocol = "TCPIP";
-					boolean advanced = true;
-					String[] contentTypes = null;
-					int port = -1;
-					try {
-						port = Integer.parseInt(connector.getPort());
-					} catch (Exception e) {
-						// ignore
-					}
-					if (HTTP_CONNECTOR.equals(className)) {
-						name = "HTTP Connector";
-						protocol = "HTTP";
-						contentTypes = new String[] { "web", "webservices" };
-						// check for AJP/1.3 Coyote connector
-						String protocolHandler = connector.getProtocolHandlerClassName();
-						if (JK_PROTOCOL_HANDLER.equals(protocolHandler)) {
-							name = "AJP/1.3 Connector";
-							protocol = "AJP/1.3"; 
-						} else {
-							// assume HTTP, check for HTTP SSL connector
-							try {
-								Element element = connector.getSubElement("Factory");
-								if (SSL_SOCKET_FACTORY.equals(element.getAttribute("className"))) {
-									name = "SSL Connector";
-									protocol = "SSL";
-								}
-							} catch (Exception e) {
-								// ignore
-							}
-						}
-						if ("HTTP".equals(protocol))
-							advanced = false;
-					} else if (APACHE_CONNECTOR.equals(className))
-						name = "Apache Connector";
-					if (className != null && className.length() > 0)
-						ports.add(new ServerPort(i + "/" + j, name, port, protocol, contentTypes, advanced));
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting server ports", e);
-		}
-		return ports;
-	}
-	
-	/**
-	 * Return a list of the web modules in this server.
-	 * @return java.util.List
-	 */
-	public List getWebModules() {
-		List list = new ArrayList();
-	
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						Context context = host.getContext(j);
-						String reload = context.getReloadable();
-						if (reload == null)
-							reload = "false";
-						WebModule module = new WebModule(context.getPath(), 
-							context.getDocBase(), context.getSource(),
-							reload.equalsIgnoreCase("true") ? true : false);
-						list.add(module);
-					}
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting project refs", e);
-		}
-		return list;
-	}
-	
-	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
-		load(path, monitor);
-		
-		// for test environment, remove existing contexts since a separate
-		// catalina.base will be used
-		if (isTestEnv) {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Host host = service.getEngine().getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						host.removeElement("Context", 0);
-					}
-				}
-			}
-		}
-	}
-	
-	/**
-	 * @see TomcatConfiguration#load(IPath, IProgressMonitor)
-	 */
-	public void load(IPath path, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 5);
-			
-			// check for catalina.policy to verify that this is a v4.0 config
-			InputStream in = new FileInputStream(path.append("catalina.policy").toFile());
-			in.read();
-			in.close();
-			monitor.worked(1);
-
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			monitor.worked(1);
-
-			webAppDocument = new WebAppDocument(path.append("web.xml"));
-			monitor.worked(1);
-	
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(path.append("tomcat-users.xml").toFile())));
-			monitor.worked(1);
-		
-			// load policy file
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(new FileInputStream(path.append("catalina.policy").toFile())));
-				String temp = br.readLine();
-				policyFile = "";
-				while (temp != null) {
-					policyFile += temp + "\n";
-					temp = br.readLine();
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load policy file", e);
-			} finally {
-				if (br != null)
-					br.close();
-			}
-			monitor.worked(1);
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load Tomcat v4.0 configuration from " + path.toOSString() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, path.toOSString()), e));
-		}
-	}
-
-	/**
-	 * @see TomcatConfiguration#load(IFolder, IProgressMonitor)
-	 */
-	public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 800);
-	
-			// check for catalina.policy to verify that this is a v4.0 config
-			IFile file = folder.getFile("catalina.policy");
-			if (!file.exists())
-				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), null));
-	
-			// load server.xml
-			file = folder.getFile("server.xml");
-			InputStream in = file.getContents();
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			server = (Server) serverFactory.loadDocument(in);
-			monitor.worked(200);
-	
-			// load web.xml
-			file = folder.getFile("web.xml");
-			webAppDocument = new WebAppDocument(file);
-			monitor.worked(200);
-	
-			// load tomcat-users.xml
-			file = folder.getFile("tomcat-users.xml");
-			in = file.getContents();
-
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
-			monitor.worked(200);
-		
-			// load catalina.policy
-			file = folder.getFile("catalina.policy");
-			in = file.getContents();
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(in));
-				String temp = br.readLine();
-				policyFile = "";
-				while (temp != null) {
-					policyFile += temp + "\n";
-					temp = br.readLine();
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load policy file", e);
-			} finally {
-				if (br != null)
-					br.close();
-			}
-			monitor.worked(200);
-	
-			if (monitor.isCanceled())
-				throw new Exception("Cancelled");
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not reload Tomcat v4.1 configuration from: " + folder.getFullPath() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), e));
-		}
-	}
-
-	/**
-	 * Save to the given directory.
-	 * 
-	 * @param path a path
-	 * @param forceDirty boolean
-	 * @param monitor a progress monitor
-	 * @exception CoreException
-	 */
-	protected void save(IPath path, boolean forceDirty, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 3);
-	
-			// make sure directory exists
-			if (!path.toFile().exists()) {
-				forceDirty = true;
-				path.toFile().mkdir();
-			}
-			monitor.worked(1);
-	
-			// save files
-			if (forceDirty || isServerDirty)
-				serverFactory.save(path.append("server.xml").toOSString());
-			monitor.worked(1);
-	
-			//if (forceDirty || isWebAppDirty)
-			//	webAppFactory.save(dirPath + "web.xml");
-			//webAppDocument.save(path.toOSString(), forceDirty || isPolicyDirty);
-			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
-			monitor.worked(1);
-	
-			if (forceDirty)
-				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
-			monitor.worked(1);
-	
-			if (forceDirty || isPolicyDirty) {
-				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.policy").toFile()));
-				bw.write(policyFile);
-				bw.close();
-			}
-			monitor.worked(1);
-			isServerDirty = false;
-			isPolicyDirty = false;
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v4.1 configuration to " + path, e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-	
-	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
-		save(path, true, monitor);
-	}
-
-	/**
-	 * Save the information held by this object to the given directory.
-	 *
-	 * @param folder a folder
-	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 */
-	public void save(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 900);
-	
-			// save server.xml
-			byte[] data = serverFactory.getContents();
-			InputStream in = new ByteArrayInputStream(data);
-			IFile file = folder.getFile("server.xml");
-			if (file.exists()) {
-				if (isServerDirty)
-					file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-				else
-					monitor.worked(200);
-			} else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save web.xml
-			webAppDocument.save(folder.getFile("web.xml"), ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save tomcat-users.xml
-			data = XMLUtil.getContents(tomcatUsersDocument);
-			in = new ByteArrayInputStream(data);
-			file = folder.getFile("tomcat-users.xml");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save catalina.policy
-			in = new ByteArrayInputStream(policyFile.getBytes());
-			file = folder.getFile("catalina.policy");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v4.1 configuration to " + folder.toString(), e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-
-	protected static boolean hasMDBListener(Server server) {
-		if (server == null)
-			return false;
-		
-		int count = server.getListenerCount();
-		if (count == 0)
-			return false;
-			
-		for (int i = 0; i < count; i++) {
-			Listener listener = server.getListener(i);
-			if (listener != null && listener.getClassName() != null && listener.getClassName().indexOf("mbean") >= 0)
-				return true;
-		}
-		return false;
-	}
-	
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addMimeMapping(int, IMimeMapping)
-	 */
-	public void addMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.addMimeMapping(index, map);
-		firePropertyChangeEvent(ADD_MAPPING_PROPERTY, new Integer(index), map);
-	}
-
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addWebModule(int, ITomcatWebModule)
-	 */
-	public void addWebModule(int index, ITomcatWebModule module) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					Context context = (Context) host.createElement(index, "Context");
-					context.setDocBase(module.getDocumentBase());
-					context.setPath(module.getPath());
-					context.setReloadable(module.isReloadable() ? "true" : "false");
-					if (module.getMemento() != null && module.getMemento().length() > 0)
-						context.setSource(module.getMemento());
-					isServerDirty = true;
-					firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error adding web module " + module.getPath(), e);
-		}
-	}
-
-	/**
-	 * Localize the web projects in this configuration.
-	 *
-	 * @param path a path
-	 * @param server2 a server type
-	 * @param runtime a runtime
-	 * @param monitor a progress monitor
-	 */
-	public void localizeConfiguration(IPath path, TomcatServer server2, TomcatRuntime runtime, IProgressMonitor monitor) {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.updatingConfigurationTask, 100);
-			
-			Tomcat41Configuration config = new Tomcat41Configuration(null);
-			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 40));
-	
-			if (monitor.isCanceled())
-				return;
-	
-			if (!server2.isTestEnvironment()) {
-				//IServerConfigurationWorkingCopy scwc = config.getServerConfiguration().createWorkingCopy();
-				//Tomcat41Configuration cfg = (Tomcat41Configuration) scwc.getAdapter(Tomcat41Configuration.class);
-				config.localizeWebModules();
-			}
-			monitor.worked(20);
-	
-			if (monitor.isCanceled())
-				return;
-	
-			config.save(path, false, ProgressUtil.getSubMonitorFor(monitor, 40));
-	
-			if (!monitor.isCanceled())
-				monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error localizing configuration", e);
-		}
-	}
-	
-	/**
-	 * Go through all of the web modules and make the document
-	 * base "local" to the configuration.
-	 */
-	protected void localizeWebModules() {
-		List modules = getWebModules();
-
-		int size = modules.size();
-		for (int i = 0; i < size; i++) {
-			WebModule module = (WebModule) modules.get(i);
-			String memento = module.getMemento();
-			if (memento != null && memento.length() > 0) {
-				// update document base to a relative ref
-				String docBase = getPathPrefix() + module.getPath();
-				if (docBase.startsWith("/") || docBase.startsWith("\\"))
-					docBase = docBase.substring(1);
-				modifyWebModule(i, docBase, module.getPath(), module.isReloadable());
-			}
-		}
-	}
-
-	/**
-	 * Change the extension of a mime mapping.
-	 * 
-	 * @param index
-	 * @param map
-	 */
-	public void modifyMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.modifyMimeMapping(index, map);
-		firePropertyChangeEvent(MODIFY_MAPPING_PROPERTY, new Integer(index), map);
-	}
-	
-	/**
-	 * Modify the port with the given id.
-	 *
-	 * @param id java.lang.String
-	 * @param port int
-	 */
-	public void modifyServerPort(String id, int port) {
-		try {
-			if ("server".equals(id)) {
-				server.setPort(port + "");
-				isServerDirty = true;
-				firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-				return;
-			}
-	
-			int i = id.indexOf("/");
-			int servNum = Integer.parseInt(id.substring(0, i));
-			int connNum = Integer.parseInt(id.substring(i + 1));
-			
-			Service service = server.getService(servNum);
-			Connector connector = service.getConnector(connNum);
-			connector.setPort(port + "");
-			isServerDirty = true;
-			firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying server port " + id, e);
-		}
-	}
-	/**
-	 * Change a web module.
-	 * @param index int
-	 * @param docBase java.lang.String
-	 * @param path java.lang.String
-	 * @param reloadable boolean
-	 */
-	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					Context context = host.getContext(index);
-					context.setPath(path);
-					context.setDocBase(docBase);
-					context.setReloadable(reloadable ? "true" : "false");
-					isServerDirty = true;
-					WebModule module = new WebModule(path, docBase, null, reloadable);
-					firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
-		}
-	}
-
-	/**
-	 * Removes a mime mapping.
-	 * @param index int
-	 */
-	public void removeMimeMapping(int index) {
-		webAppDocument.removeMimeMapping(index);
-		firePropertyChangeEvent(REMOVE_MAPPING_PROPERTY, null, new Integer(index));
-	}
-
-	/**
-	 * Removes a web module.
-	 * @param index int
-	 */
-	public void removeWebModule(int index) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					host.removeElement("Context", index);
-					isServerDirty = true;
-					firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error removing module ref " + index, e);
-		}
-	}
-
-	protected IStatus backupAndPublish(IPath confDir, boolean doBackup, IProgressMonitor monitor) {
-		MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.publishConfigurationTask, null);
-		Trace.trace(Trace.FINER, "Backup and publish");
-		monitor = ProgressUtil.getMonitorFor(monitor);
-
-		backupAndPublish(confDir, doBackup, ms, monitor, 300);
-		// TODO Refactor success detection once Bug 81060 is addressed
-		// This approach avoids refactoring to TomcatConfiguration.backupFolder()
-		// and backupPath() for now.
-		if (ms.isOK() && ms.getChildren().length > 0)
-			publishContextConfig(confDir, ms, monitor);
-
-		monitor.done();
-		return ms;
-	}
-	
-	protected void publishContextConfig(IPath confDir, MultiStatus ms, IProgressMonitor monitor) {
-		Trace.trace(Trace.FINER, "Apply context configurations");
-		try {
-			confDir = confDir.append("conf");
-			
-			monitor.subTask(Messages.publishContextConfigTask);
-			Factory factory = new Factory();
-			factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			Server publishedServer = (Server) factory.loadDocument(new FileInputStream(confDir.append("server.xml").toFile()));
-			monitor.worked(100);
-			
-			boolean modified = false;
-
-			int size = publishedServer.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = publishedServer.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						Context context = host.getContext(j);
-						monitor.subTask(NLS.bind(Messages.checkingContextTask,
-								new String[] {context.getPath()}));
-						if (addContextConfig(context)) {
-							modified = true;
-						}
-					}
-				}
-			}
-			monitor.worked(100);
-			if (modified) {
-				monitor.subTask(Messages.savingContextConfigTask);
-				factory.save(confDir.append("server.xml").toOSString());
-			}
-			monitor.worked(100);
-			
-			Trace.trace(Trace.FINER, "Server.xml updated with context.xml configurations");
-			ms.add(new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.serverPostProcessingComplete, null));
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not apply context configurations published Tomcat v5.0 configuration from " + confDir.toOSString() + ": " + e.getMessage());
-			IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e);
-			ms.add(s);
-		}
-	}
-	
-	/**
-	 * If the specified Context is linked to a project, try to
-	 * update any configuration found a META-INF/context.xml found
-	 * relative to the specified docBase.
-	 * @param context Context object to receive context.xml contents.
-	 * @return Returns true if context is modified.
-	 */
-	protected boolean addContextConfig(Context context) {
-		boolean modified = false;
-		String source = context.getSource();
-		if (source != null && source.length() > 0 )
-		{
-			String docBase = context.getDocBase();
-			Context contextConfig = loadContextConfig(docBase);
-			if (null != contextConfig) {
-				if (context.hasChildNodes())
-					context.removeChildren();
-				contextConfig.copyChildrenTo(context);
-				modified = true;
-			}
-		}
-		return modified;
-	}
-	
-	/**
-	 * Tries to read a META-INF/context.xml file relative to the
-	 * specified docBase.  If found, it creates a Context object
-	 * containing the contexts of that file.
-	 * @param docBase
-	 * @return Context element created from context.xml, or null if not found.
-	 */
-	protected Context loadContextConfig(String docBase) {
-		File contexXML = new File(docBase + File.separator + "META-INF" + File.separator + "context.xml");
-		if (contexXML.exists()) {
-			try {
-				InputStream is = new FileInputStream(contexXML);
-				Factory ctxFactory = new Factory();
-				ctxFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-				Context ctx = (Context)ctxFactory.loadDocument(is);
-				is.close();
-				return ctx;
-			} catch (FileNotFoundException e) {
-				// Ignore, should never occur
-			} catch (IOException e) {
-				Trace.trace(Trace.SEVERE, "Error reading web module's context.xml file: " + docBase, e);
-			}
-		}
-		return null;
- 	}
-	
-	protected IStatus prepareRuntimeDirectory(IPath confDir) {
-		Trace.trace(Trace.FINER, "Preparing runtime directory");
-		// Prepare a catalina.base directory structure
-		File temp = confDir.append("conf").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("logs").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("temp").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("webapps").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("work").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-
-		return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.runtimeDirPrepared, null);		
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
deleted file mode 100644
index ba87235..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.IWebModule;
-/**
- * Tomcat 41 handler.
- */
-public class Tomcat41Handler implements ITomcatVersionHandler {
-	/**
-	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
-	 */
-	public boolean verifyInstallPath(IPath installPath) {
-		if (installPath == null)
-			return false;
-
-		String s = installPath.lastSegment();
-		if (s != null && s.startsWith("jakarta-tomcat-") && !s.startsWith("jakarta-tomcat-4.1"))
-			return false;
-		return TomcatPlugin.verifyInstallPath(installPath, TomcatPlugin.TOMCAT_41);
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeClass()
-	 */
-	public String getRuntimeClass() {
-		return "org.apache.catalina.startup.Bootstrap";
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath)
-	 */
-	public List getRuntimeClasspath(IPath installPath) {
-		List cp = new ArrayList();
-		
-		// 4.1 - add bootstrap.jar from the Tomcat bin directory
-		IPath binPath = installPath.append("bin");
-		if (binPath.toFile().exists()) {
-			IPath path = binPath.append("bootstrap.jar");
-			cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path));
-		}
-		
-		return cp;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
-	 */
-	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
-		
-		if (debug)
-			list.add("-debug");
-		
-		if (starting)
-			list.add("start");
-		else
-			list.add("stop");
-		
-		String[] temp = new String[list.size()];
-		list.toArray(temp);
-		return temp;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean, boolean)
-	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv, boolean isSecure) {
-		List list = new ArrayList();
-		if (isTestEnv)
-			list.add("-Dcatalina.base=\"" + configPath.toOSString() + "\"");
-		else 
-			list.add("-Dcatalina.base=\"" + installPath.toOSString() + "\"");
-		list.add("-Dcatalina.home=\"" + installPath.toOSString() + "\"");
-		list.add("-Djava.endorsed.dirs=\"" + installPath.append("common").append("endorsed").toOSString() + "\"");
-		
-		// run in secure mode
-		if (isSecure) {
-			list.add("-Djava.security.manager");
-			IPath dir = configPath.append("conf").append("catalina.policy");
-			list.add("-Djava.security.policy=\"" + dir.toOSString() + "\"");
-		}
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#canAddModule(IWebModule)
-	 */
-	public IStatus canAddModule(IWebModule module) {
-		if ("1.2".equals(module.getJ2EESpecificationVersion()) || "1.3".equals(module.getJ2EESpecificationVersion()))
-			return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.canAddModule, null);
-		
-		return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorSpec41, null);
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeBaseDirectory(TomcatServerBehaviour)
-	 */
-	public IPath getRuntimeBaseDirectory(TomcatServerBehaviour serverBehaviour) {
-		if (serverBehaviour.getTomcatServer().isTestEnvironment())
-			return serverBehaviour.getTempDirectory();
-		return serverBehaviour.getServer().getRuntime().getLocation();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
deleted file mode 100644
index 9a7a032..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
+++ /dev/null
@@ -1,878 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
-import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.*;
-import org.eclipse.osgi.util.NLS;
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
-
-import org.eclipse.wst.server.core.ServerPort;
-/**
- * Tomcat v5.0 server configuration.
- */
-public class Tomcat50Configuration extends TomcatConfiguration {
-	protected static final String DEFAULT_SERVICE = "Catalina";
-	protected Server server;
-	protected Factory serverFactory;
-	protected boolean isServerDirty;
-
-	protected WebAppDocument webAppDocument;
-
-	protected Document tomcatUsersDocument;
-
-	protected String policyFile;
-	protected boolean isPolicyDirty;
-
-	/**
-	 * Tomcat50Configuration constructor.
-	 * 
-	 * @param path a path
-	 */
-	public Tomcat50Configuration(IFolder path) {
-		super(path);
-	}
-	
-	/**
-	 * Returns the root of the docbase parameter.
-	 *
-	 * @return java.lang.String
-	 */
-	protected String getDocBaseRoot() {
-		return "webapps/";
-	}
-
-	/**
-	 * Return the port number.
-	 * @return int
-	 */
-	public ServerPort getMainPort() {
-		Iterator iterator = getServerPorts().iterator();
-		while (iterator.hasNext()) {
-			ServerPort port = (ServerPort) iterator.next();
-			if (port.getName().equals("HTTP"))
-				return port;
-		}
-		return null;
-	}
-	
-	/**
-	 * Returns the mime mappings.
-	 * @return java.util.List
-	 */
-	public List getMimeMappings() {
-		return webAppDocument.getMimeMappings();
-	}
-	
-	/**
-	 * Returns the prefix that is used in front of the
-	 * web module path property. (e.g. "webapps")
-	 *
-	 * @return java.lang.String
-	 */
-	public String getPathPrefix() {
-		return "";
-	}
-	
-	/**
-	 * Return the docBase of the ROOT web module.
-	 *
-	 * @return java.lang.String
-	 */
-	protected String getROOTModuleDocBase() {
-		return "ROOT";
-	}
-	
-	/**
-	 * Returns a list of ServerPorts that this configuration uses.
-	 *
-	 * @return java.util.List
-	 */
-	public List getServerPorts() {
-		List ports = new ArrayList();
-	
-		// first add server port
-		try {
-			int port = Integer.parseInt(server.getPort());
-			ports.add(new ServerPort("server", Messages.portServer, port, "TCPIP"));
-		} catch (Exception e) {
-			// ignore
-		}
-	
-		// add connectors
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				int size2 = service.getConnectorCount();
-				for (int j = 0; j < size2; j++) {
-					Connector connector = service.getConnector(j);
-					String name = "HTTP";
-					String protocol2 = "HTTP";
-					boolean advanced = true;
-					String[] contentTypes = null;
-					int port = -1;
-					try {
-						port = Integer.parseInt(connector.getPort());
-					} catch (Exception e) {
-						// ignore
-					}
-					String protocol = connector.getProtocol();
-					if (protocol != null && protocol.length() > 0) {
-						name = protocol;
-						protocol2 = protocol; 
-					}
-					if ("HTTP".equals(protocol))
-						contentTypes = new String[] { "web", "webservices" };
-					String secure = connector.getSecure();
-					if (secure != null && secure.length() > 0) {
-						name = "SSL";
-						protocol2 = "SSL";
-					} else
-						advanced = false;
-					ports.add(new ServerPort(i +"/" + j, name, port, protocol2, contentTypes, advanced));
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting server ports", e);
-		}
-		return ports;
-	}
-	
-	/**
-	 * Return a list of the web modules in this server.
-	 * @return java.util.List
-	 */
-	public List getWebModules() {
-		List list = new ArrayList();
-	
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						Context context = host.getContext(j);
-						String reload = context.getReloadable();
-						if (reload == null)
-							reload = "false";
-						WebModule module = new WebModule(context.getPath(), 
-							context.getDocBase(), context.getSource(),
-							reload.equalsIgnoreCase("true") ? true : false);
-						list.add(module);
-					}
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting project refs", e);
-		}
-		return list;
-	}
-	
-	/**
-	 * @see TomcatConfiguration#load(IPath, IProgressMonitor)
-	 */
-	public void load(IPath path, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 5);
-			
-			// check for catalina.policy to verify that this is a v5.0 config
-			InputStream in = new FileInputStream(path.append("catalina.policy").toFile());
-			in.read();
-			in.close();
-			monitor.worked(1);
-
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			monitor.worked(1);
-
-			webAppDocument = new WebAppDocument(path.append("web.xml"));
-			monitor.worked(1);
-			
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(path.append("tomcat-users.xml").toFile())));
-			monitor.worked(1);
-			
-			// load policy file
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(new FileInputStream(path.append("catalina.policy").toFile())));
-				String temp = br.readLine();
-				policyFile = "";
-				while (temp != null) {
-					policyFile += temp + "\n";
-					temp = br.readLine();
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load policy file", e);
-			} finally {
-				if (br != null)
-					br.close();
-			}
-			monitor.worked(1);
-			
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load Tomcat v5.0 configuration from " + path.toOSString() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, path.toOSString()), e));
-		}
-	}
-
-	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
-		load(path, monitor);
-		
-		// for test environment, remove existing contexts since a separate
-		// catalina.base will be used
-		if (isTestEnv) {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Host host = service.getEngine().getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						host.removeElement("Context", 0);
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * @see TomcatConfiguration#load(IFolder, IProgressMonitor)
-	 */
-	public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 800);
-	
-			// check for catalina.policy to verify that this is a v4.0 config
-			IFile file = folder.getFile("catalina.policy");
-			if (!file.exists())
-				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), null));
-	
-			// load server.xml
-			file = folder.getFile("server.xml");
-			InputStream in = file.getContents();
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			server = (Server) serverFactory.loadDocument(in);
-			monitor.worked(200);
-	
-			// load web.xml
-			file = folder.getFile("web.xml");
-			webAppDocument = new WebAppDocument(file);
-			monitor.worked(200);
-	
-			// load tomcat-users.xml
-			file = folder.getFile("tomcat-users.xml");
-			in = file.getContents();
-			
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
-			monitor.worked(200);
-		
-			// load catalina.policy
-			file = folder.getFile("catalina.policy");
-			in = file.getContents();
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(in));
-				String temp = br.readLine();
-				policyFile = "";
-				while (temp != null) {
-					policyFile += temp + "\n";
-					temp = br.readLine();
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load policy file", e);
-			} finally {
-				if (br != null)
-					br.close();
-			}
-			monitor.worked(200);
-	
-			if (monitor.isCanceled())
-				throw new Exception("Cancelled");
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not reload Tomcat v5.0 configuration from: " + folder.getFullPath() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), e));
-		}
-	}
-
-	/**
-	 * Save to the given directory.
-	 * @param path a path
-	 * @param forceDirty boolean
-	 * @param monitor a progress monitor
-	 * @exception CoreException
-	 */
-	protected void save(IPath path, boolean forceDirty, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 3);
-	
-			// make sure directory exists
-			if (!path.toFile().exists()) {
-				forceDirty = true;
-				path.toFile().mkdir();
-			}
-			monitor.worked(1);
-	
-			// save files
-			if (forceDirty || isServerDirty)
-				serverFactory.save(path.append("server.xml").toOSString());
-			monitor.worked(1);
-	
-			//if (forceDirty || isWebAppDirty)
-			//	webAppFactory.save(dirPath + "web.xml");
-			//webAppDocument.save(path.toOSString(), forceDirty || isPolicyDirty);
-			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
-			monitor.worked(1);
-	
-			if (forceDirty)
-				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
-			monitor.worked(1);
-	
-			if (forceDirty || isPolicyDirty) {
-				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.policy").toFile()));
-				bw.write(policyFile);
-				bw.close();
-			}
-			monitor.worked(1);
-			isServerDirty = false;
-			isPolicyDirty = false;
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v5.0 configuration to " + path, e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-	
-	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
-		save(path, true, monitor);
-	}
-
-	/**
-	 * Save the information held by this object to the given directory.
-	 *
-	 * @param folder a folder
-	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 */
-	public void save(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 900);
-	
-			// save server.xml
-			byte[] data = serverFactory.getContents();
-			InputStream in = new ByteArrayInputStream(data);
-			IFile file = folder.getFile("server.xml");
-			if (file.exists()) {
-				if (isServerDirty)
-					file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-				else
-					monitor.worked(200);
-			} else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save web.xml
-			webAppDocument.save(folder.getFile("web.xml"), ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save tomcat-users.xml
-			data = XMLUtil.getContents(tomcatUsersDocument);
-			in = new ByteArrayInputStream(data);
-			file = folder.getFile("tomcat-users.xml");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save catalina.policy
-			in = new ByteArrayInputStream(policyFile.getBytes());
-			file = folder.getFile("catalina.policy");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v5.0 configuration to " + folder.toString(), e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-
-	protected static boolean hasMDBListener(Server server) {
-		if (server == null)
-			return false;
-		
-		int count = server.getListenerCount();
-		if (count == 0)
-			return false;
-			
-		for (int i = 0; i < count; i++) {
-			Listener listener = server.getListener(i);
-			if (listener != null && listener.getClassName() != null && listener.getClassName().indexOf("mbean") >= 0)
-				return true;
-		}
-		return false;
-	}
-	
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addMimeMapping(int, IMimeMapping)
-	 */
-	public void addMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.addMimeMapping(index, map);
-		firePropertyChangeEvent(ADD_MAPPING_PROPERTY, new Integer(index), map);
-	}
-
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addWebModule(int, ITomcatWebModule)
-	 */
-	public void addWebModule(int index, ITomcatWebModule module) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					Context context = (Context) host.createElement(index, "Context");
-					context.setDocBase(module.getDocumentBase());
-					context.setPath(module.getPath());
-					context.setReloadable(module.isReloadable() ? "true" : "false");
-					if (module.getMemento() != null && module.getMemento().length() > 0)
-						context.setSource(module.getMemento());
-					isServerDirty = true;
-					firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error adding web module " + module.getPath(), e);
-		}
-	}
-
-	/**
-	 * Localize the web projects in this configuration.
-	 *
-	 * @param path a path
-	 * @param server2 a server type
-	 * @param runtime a runtime
-	 * @param monitor a progress monitor
-	 */
-	public void localizeConfiguration(IPath path, TomcatServer server2, TomcatRuntime runtime, IProgressMonitor monitor) {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.updatingConfigurationTask, 100);
-			
-			Tomcat50Configuration config = new Tomcat50Configuration(null);
-			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 40));
-	
-			if (monitor.isCanceled())
-				return;
-	
-			if (!server2.isTestEnvironment()) {
-				//IServerConfigurationWorkingCopy scwc = config.getServerConfiguration().createWorkingCopy();
-				//Tomcat50Configuration cfg = (Tomcat50Configuration) scwc.getAdapter(Tomcat50Configuration.class);
-				config.localizeWebModules();
-			}
-			monitor.worked(20);
-	
-			if (monitor.isCanceled())
-				return;
-	
-			config.save(path, false, ProgressUtil.getSubMonitorFor(monitor, 40));
-	
-			if (!monitor.isCanceled())
-				monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error localizing configuration", e);
-		}
-	}
-	
-	/**
-	 * Go through all of the web modules and make the document
-	 * base "local" to the configuration.
-	 */
-	protected void localizeWebModules() {
-		List modules = getWebModules();
-
-		int size = modules.size();
-		for (int i = 0; i < size; i++) {
-			WebModule module = (WebModule) modules.get(i);
-			String memento = module.getMemento();
-			if (memento != null && memento.length() > 0) {
-				// update document base to a relative ref
-				String docBase = getPathPrefix() + module.getPath();
-				if (docBase.startsWith("/") || docBase.startsWith("\\"))
-					docBase = docBase.substring(1);
-				modifyWebModule(i, docBase, module.getPath(), module.isReloadable());
-			}
-		}
-	}
-
-	/**
-	 * Change the extension of a mime mapping.
-	 * 
-	 * @param index
-	 * @param map
-	 */
-	public void modifyMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.modifyMimeMapping(index, map);
-		firePropertyChangeEvent(MODIFY_MAPPING_PROPERTY, new Integer(index), map);
-	}
-	
-	/**
-	 * Modify the port with the given id.
-	 *
-	 * @param id java.lang.String
-	 * @param port int
-	 */
-	public void modifyServerPort(String id, int port) {
-		try {
-			if ("server".equals(id)) {
-				server.setPort(port + "");
-				isServerDirty = true;
-				firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-				return;
-			}
-	
-			int i = id.indexOf("/");
-			int servNum = Integer.parseInt(id.substring(0, i));
-			int connNum = Integer.parseInt(id.substring(i + 1));
-			
-			Service service = server.getService(servNum);
-			Connector connector = service.getConnector(connNum);
-			connector.setPort(port + "");
-			isServerDirty = true;
-			firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying server port " + id, e);
-		}
-	}
-	/**
-	 * Change a web module.
-	 * @param index int
-	 * @param docBase java.lang.String
-	 * @param path java.lang.String
-	 * @param reloadable boolean
-	 */
-	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					Context context = host.getContext(index);
-					context.setPath(path);
-					context.setDocBase(docBase);
-					context.setReloadable(reloadable ? "true" : "false");
-					isServerDirty = true;
-					WebModule module = new WebModule(path, docBase, null, reloadable);
-					firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
-		}
-	}
-
-	/**
-	 * Removes a mime mapping.
-	 * @param index int
-	 */
-	public void removeMimeMapping(int index) {
-		webAppDocument.removeMimeMapping(index);
-		firePropertyChangeEvent(REMOVE_MAPPING_PROPERTY, null, new Integer(index));
-	}
-
-	/**
-	 * Removes a web module.
-	 * @param index int
-	 */
-	public void removeWebModule(int index) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					host.removeElement("Context", index);
-					isServerDirty = true;
-					firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error removing module ref " + index, e);
-		}
-	}
-
-	protected IStatus backupAndPublish(IPath confDir, boolean doBackup, IProgressMonitor monitor) {
-		MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.publishConfigurationTask, null);
-		Trace.trace(Trace.FINER, "Backup and publish");
-		monitor = ProgressUtil.getMonitorFor(monitor);
-
-		backupAndPublish(confDir, doBackup, ms, monitor, 300);
-		// TODO Refactor success detection once Bug 81060 is addressed
-		// This approach avoids refactoring TomcatConfiguration.backupFolder()
-		// and backupPath() for now.
-		if (ms.isOK() && ms.getChildren().length > 0)
-			publishContextConfig(confDir, ms, monitor);
-
-		monitor.done();
-		return ms;
-	}
-	
-	protected void publishContextConfig(IPath confDir, MultiStatus ms, IProgressMonitor monitor) {
-		Trace.trace(Trace.FINER, "Apply context configurations");
-		try {
-			confDir = confDir.append("conf");
-			
-			monitor.subTask(Messages.publishContextConfigTask);
-			Factory factory = new Factory();
-			factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			Server publishedServer = (Server) factory.loadDocument(new FileInputStream(confDir.append("server.xml").toFile()));
-			monitor.worked(100);
-
-			boolean modified = false;
-
-			int size = publishedServer.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = publishedServer.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						Context context = host.getContext(j);
-						monitor.subTask(NLS.bind(Messages.checkingContextTask,
-								new String[] {context.getPath()}));
-						if (addContextConfig(context)) {
-							modified = true;
-						}
-					}
-				}
-			}
-			monitor.worked(100);
-			if (modified) {
-				monitor.subTask(Messages.savingContextConfigTask);
-				factory.save(confDir.append("server.xml").toOSString());
-			}
-			monitor.worked(100);
-			
-			Trace.trace(Trace.FINER, "Server.xml updated with context.xml configurations");
-			ms.add(new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.serverPostProcessingComplete, null));
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not apply context configurations published Tomcat v5.0 configuration from " + confDir.toOSString() + ": " + e.getMessage());
-			IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e);
-			ms.add(s);
-		}
-	}
-	
-	/**
-	 * If the specified Context is linked to a project, try to
-	 * update any configuration found a META-INF/context.xml found
-	 * relative to the specified docBase.
-	 * @param context Context object to receive context.xml contents.
-	 * @return Returns true if context is modified.
-	 */
-	protected boolean addContextConfig(Context context) {
-		boolean modified = false;
-		String source = context.getSource();
-		if (source != null && source.length() > 0 )
-		{
-			String docBase = context.getDocBase();
-			Context contextConfig = loadContextConfig(docBase);
-			if (null != contextConfig) {
-				if (context.hasChildNodes())
-					context.removeChildren();
-				contextConfig.copyChildrenTo(context);
-				modified = true;
-			}
-		}
-		return modified;
-	}
-	
-	/**
-	 * Tries to read a META-INF/context.xml file relative to the
-	 * specified docBase.  If found, it creates a Context object
-	 * containing the contexts of that file.
-	 * @param docBase
-	 * @return Context element created from context.xml, or null if not found.
-	 */
-	protected Context loadContextConfig(String docBase) {
-		File contexXML = new File(docBase + File.separator + "META-INF" + File.separator + "context.xml");
-		if (contexXML.exists()) {
-			try {
-				InputStream is = new FileInputStream(contexXML);
-				Factory ctxFactory = new Factory();
-				ctxFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-				Context ctx = (Context)ctxFactory.loadDocument(is);
-				is.close();
-				return ctx;
-			} catch (FileNotFoundException e) {
-				// Ignore, should never occur
-			} catch (IOException e) {
-				Trace.trace(Trace.SEVERE, "Error reading web module's context.xml file: " + docBase, e);
-			}
-		}
-		return null;
- 	}
-
-	protected IStatus cleanupServer(IPath confDir, IPath installDir, IProgressMonitor monitor) {
-		MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.cleanupServerTask, null);
-		monitor = ProgressUtil.getMonitorFor(monitor);
-		monitor.beginTask(Messages.cleanupServerTask, 200);
-
-		try {
-			monitor.subTask(Messages.detectingRemovedProjects);
-
-			// Try to read old server configuration
-			Factory factory = new Factory();
-			factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			File serverFile = confDir.append("conf").append("server.xml").toFile();
-			if (serverFile.exists()) {
-				Server oldServer = (Server) factory.loadDocument(new FileInputStream(serverFile));
-				
-				// Begin building path to context directory
-				IPath contextDir = confDir.append("conf");
-
-				// Collect paths of old web modules managed by WTP
-				Set oldPaths = new HashSet();
-				int size = oldServer.getServiceCount();
-				for (int i = 0; i < size; i++) {
-					Service service = oldServer.getService(i);
-					if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-						Engine engine = service.getEngine();
-						Host host = engine.getHost();
-						// Finish path to context directory
-						contextDir = contextDir.append(engine.getName()).append(host.getName());
-						int size2 = host.getContextCount();
-						for (int j = 0; j < size2; j++) {
-							Context context = host.getContext(j);
-							String source = context.getSource();
-							if (source != null && source.length() > 0 )	{
-								oldPaths.add(context.getPath());
-							}
-						}
-					}
-				}
-
-				// Remove paths for web modules that are staying around
-				List modules = getWebModules();
-				size = modules.size();
-				for (int i = 0; i < size; i++) {
-					WebModule module = (WebModule) modules.get(i);
-					oldPaths.remove(module.getPath());
-				}
-				monitor.worked(100);
-
-				// Delete context files for managed web modules that have gone away
-				if (oldPaths.size() > 0 ) {
-					IProgressMonitor subMonitor = ProgressUtil.getSubMonitorFor(monitor, 100);
-					subMonitor.beginTask(Messages.deletingContextFilesTask, oldPaths.size() * 100);
-					
-					Iterator iter = oldPaths.iterator();
-					while (iter.hasNext()) {
-						// Derive the context file name from the path + ".xml", minus the leading '/'
-						String fileName = ((String)iter.next()).substring(1) + ".xml";
-						IPath contextPath = contextDir.append(fileName);
-						File contextFile = contextPath.toFile();
-						if (contextFile.exists()) {
-							subMonitor.subTask(NLS.bind(Messages.deletingContextFile, fileName));
-							if (contextFile.delete()) {
-								Trace.trace(Trace.FINER, "Leftover context file " + fileName + " deleted.");
-								ms.add(new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0,
-										NLS.bind(Messages.deletedContextFile, fileName), null));
-								
-							} else {
-								Trace.trace(Trace.SEVERE, "Could not delete obsolete context file " + contextPath.toOSString());
-								ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
-										NLS.bind(Messages.errorCouldNotDeleteContextFile, contextPath.toOSString()), null));
-							}
-							subMonitor.worked(100);
-						}
-					}
-					subMonitor.done();
-				} else {
-					monitor.worked(100);
-				}
-			}
-			// Else no server.xml.  Assume first publish to new temp directory
-			else {
-				monitor.worked(200);
-			}
-			Trace.trace(Trace.FINER, "Server cleaned");
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not cleanup server at " + confDir.toOSString() + ": " + e.getMessage());
-			ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
-					NLS.bind(Messages.errorCleanupServer, new String[] {e.getLocalizedMessage()}), e));
-		}
-		
-		monitor.done();
-		return ms;
-	}
-
-	protected IStatus prepareRuntimeDirectory(IPath confDir) {
-		Trace.trace(Trace.FINER, "Preparing runtime directory");
-		// Prepare a catalina.base directory structure
-		File temp = confDir.append("conf").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("logs").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("temp").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("webapps").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("work").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-
-		return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.runtimeDirPrepared, null);		
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java
deleted file mode 100644
index 23eb661..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.IWebModule;
-/**
- * Tomcat 50 handler.
- */
-public class Tomcat50Handler implements ITomcatVersionHandler {
-	/**
-	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
-	 */
-	public boolean verifyInstallPath(IPath installPath) {
-		if (installPath == null)
-			return false;
-
-		String s = installPath.lastSegment();
-		if (s != null && s.startsWith("jakarta-tomcat-") && !s.startsWith("jakarta-tomcat-5.0"))
-			return false;
-		return TomcatPlugin.verifyInstallPath(installPath, TomcatPlugin.TOMCAT_50);
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeClass()
-	 */
-	public String getRuntimeClass() {
-		return "org.apache.catalina.startup.Bootstrap";
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath)
-	 */
-	public List getRuntimeClasspath(IPath installPath) {
-		List cp = new ArrayList();
-		
-		// 5.0 - add bootstrap.jar from the Tomcat bin directory
-		IPath binPath = installPath.append("bin");
-		if (binPath.toFile().exists()) {
-			IPath path = binPath.append("bootstrap.jar");
-			cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path));
-		}
-		
-		return cp;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
-	 */
-	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
-		
-		if (debug)
-			list.add("-debug");
-		
-		if (starting)
-			list.add("start");
-		else
-			list.add("stop");
-		
-		String[] temp = new String[list.size()];
-		list.toArray(temp);
-		return temp;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean, boolean)
-	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv, boolean isSecure) {
-		List list = new ArrayList();
-		if (isTestEnv)
-			list.add("-Dcatalina.base=\"" + configPath.toOSString() + "\"");
-		else 
-			list.add("-Dcatalina.base=\"" + installPath.toOSString() + "\"");
-		list.add("-Dcatalina.home=\"" + installPath.toOSString() + "\"");
-		list.add("-Djava.endorsed.dirs=\"" + installPath.append("common").append("endorsed").toOSString() + "\"");
-		
-		// run in secure mode
-		if (isSecure) {
-			list.add("-Djava.security.manager");
-			IPath dir = configPath.append("conf").append("catalina.policy");
-			list.add("-Djava.security.policy=\"" + dir.toOSString() + "\"");
-		}
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#canAddModule(IWebModule)
-	 */
-	public IStatus canAddModule(IWebModule module) {
-		if ("1.2".equals(module.getJ2EESpecificationVersion()) || "1.3".equals(module.getJ2EESpecificationVersion()) || "1.4".equals(module.getJ2EESpecificationVersion()))
-			return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.canAddModule, null);
-		
-		return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorSpec50, null);
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeBaseDirectory(TomcatServerBehaviour)
-	 */
-	public IPath getRuntimeBaseDirectory(TomcatServerBehaviour serverBehaviour) {
-		if (serverBehaviour.getTomcatServer().isTestEnvironment())
-			return serverBehaviour.getTempDirectory();
-		return serverBehaviour.getServer().getRuntime().getLocation();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
deleted file mode 100644
index 47aa3c2..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
+++ /dev/null
@@ -1,782 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
-import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.*;
-import org.eclipse.osgi.util.NLS;
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
-
-import org.eclipse.wst.server.core.ServerPort;
-/**
- * Tomcat v5.5 server configuration.
- */
-public class Tomcat55Configuration extends TomcatConfiguration {
-	protected static final String DEFAULT_SERVICE = "Catalina";
-	protected Server server;
-	protected Factory serverFactory;
-	protected boolean isServerDirty;
-
-	protected WebAppDocument webAppDocument;
-
-	protected Document tomcatUsersDocument;
-
-	protected String policyFile;
-	protected boolean isPolicyDirty;
-
-	/**
-	 * Tomcat55Configuration constructor.
-	 * 
-	 * @param path a path
-	 */
-	public Tomcat55Configuration(IFolder path) {
-		super(path);
-	}
-	
-	/**
-	 * Returns the root of the docbase parameter.
-	 *
-	 * @return java.lang.String
-	 */
-	protected String getDocBaseRoot() {
-		return "webapps/";
-	}
-
-	/**
-	 * Return the port number.
-	 * @return int
-	 */
-	public ServerPort getMainPort() {
-		Iterator iterator = getServerPorts().iterator();
-		while (iterator.hasNext()) {
-			ServerPort port = (ServerPort) iterator.next();
-			if (port.getName().equals("HTTP"))
-				return port;
-		}
-		return null;
-	}
-	
-	/**
-	 * Returns the mime mappings.
-	 * @return java.util.List
-	 */
-	public List getMimeMappings() {
-		return webAppDocument.getMimeMappings();
-	}
-	
-	/**
-	 * Returns the prefix that is used in front of the
-	 * web module path property. (e.g. "webapps")
-	 *
-	 * @return java.lang.String
-	 */
-	public String getPathPrefix() {
-		return "";
-	}
-	
-	/**
-	 * Return the docBase of the ROOT web module.
-	 *
-	 * @return java.lang.String
-	 */
-	protected String getROOTModuleDocBase() {
-		return "ROOT";
-	}
-	
-	/**
-	 * Returns a list of ServerPorts that this configuration uses.
-	 *
-	 * @return java.util.List
-	 */
-	public List getServerPorts() {
-		List ports = new ArrayList();
-	
-		// first add server port
-		try {
-			int port = Integer.parseInt(server.getPort());
-			ports.add(new ServerPort("server", Messages.portServer, port, "TCPIP"));
-		} catch (Exception e) {
-			// ignore
-		}
-	
-		// add connectors
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				int size2 = service.getConnectorCount();
-				for (int j = 0; j < size2; j++) {
-					Connector connector = service.getConnector(j);
-					String name = "HTTP";
-					String protocol2 = "TCPIP";
-					boolean advanced = true;
-					String[] contentTypes = null;
-					int port = -1;
-					try {
-						port = Integer.parseInt(connector.getPort());
-					} catch (Exception e) {
-						// ignore
-					}
-					String protocol = connector.getProtocol();
-					if (protocol != null && protocol.length() > 0) {
-						name = protocol;
-						protocol2 = protocol; 
-					}
-					if ("HTTP".equals(protocol))
-						contentTypes = new String[] { "web", "webservices" };
-					String secure = connector.getSecure();
-					if (secure != null && secure.length() > 0) {
-						name = "SSL";
-						protocol2 = "SSL";
-					} else
-						advanced = false;
-					ports.add(new ServerPort(i +"/" + j, name, port, protocol2, contentTypes, advanced));
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting server ports", e);
-		}
-		return ports;
-	}
-	
-	/**
-	 * Return a list of the web modules in this server.
-	 * @return java.util.List
-	 */
-	public List getWebModules() {
-		List list = new ArrayList();
-	
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						Context context = host.getContext(j);
-						String reload = context.getReloadable();
-						if (reload == null)
-							reload = "false";
-						WebModule module = new WebModule(context.getPath(), 
-							context.getDocBase(), context.getSource(),
-							reload.equalsIgnoreCase("true") ? true : false);
-						list.add(module);
-					}
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting project refs", e);
-		}
-		return list;
-	}
-	
-	/**
-	 * @see TomcatConfiguration#load(IPath, IProgressMonitor)
-	 */
-	public void load(IPath path, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 5);
-			
-			// check for catalina.policy to verify that this is a v5.5 config
-			InputStream in = new FileInputStream(path.append("catalina.policy").toFile());
-			in.read();
-			in.close();
-			monitor.worked(1);
-
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			monitor.worked(1);
-
-			webAppDocument = new WebAppDocument(path.append("web.xml"));
-			monitor.worked(1);
-			
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(path.append("tomcat-users.xml").toFile())));
-			monitor.worked(1);
-			
-			// load policy file
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(new FileInputStream(path.append("catalina.policy").toFile())));
-				String temp = br.readLine();
-				policyFile = "";
-				while (temp != null) {
-					policyFile += temp + "\n";
-					temp = br.readLine();
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load policy file", e);
-			} finally {
-				if (br != null)
-					br.close();
-			}
-			monitor.worked(1);
-			
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load Tomcat v5.5 configuration from " + path.toOSString() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, path.toOSString()), e));
-		}
-	}
-
-	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
-		load(path, monitor);
-		
-		// for test environment, remove existing contexts since a separate
-		// catalina.base will be used
-		if (isTestEnv) {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Host host = service.getEngine().getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						host.removeElement("Context", 0);
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * @see TomcatConfiguration#load(IFolder, IProgressMonitor)
-	 */
-	public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 800);
-	
-			// check for catalina.policy to verify that this is a v4.0 config
-			IFile file = folder.getFile("catalina.policy");
-			if (!file.exists())
-				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), null));
-	
-			// load server.xml
-			file = folder.getFile("server.xml");
-			InputStream in = file.getContents();
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			server = (Server) serverFactory.loadDocument(in);
-			monitor.worked(200);
-	
-			// load web.xml
-			file = folder.getFile("web.xml");
-			webAppDocument = new WebAppDocument(file);
-			monitor.worked(200);
-	
-			// load tomcat-users.xml
-			file = folder.getFile("tomcat-users.xml");
-			in = file.getContents();
-			
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
-			monitor.worked(200);
-		
-			// load catalina.policy
-			file = folder.getFile("catalina.policy");
-			in = file.getContents();
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(in));
-				String temp = br.readLine();
-				policyFile = "";
-				while (temp != null) {
-					policyFile += temp + "\n";
-					temp = br.readLine();
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load policy file", e);
-			} finally {
-				if (br != null)
-					br.close();
-			}
-			monitor.worked(200);
-	
-			if (monitor.isCanceled())
-				throw new Exception("Cancelled");
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not reload Tomcat v5.5 configuration from: " + folder.getFullPath() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), e));
-		}
-	}
-
-	/**
-	 * Save to the given directory.
-	 * @param path a path
-	 * @param forceDirty boolean
-	 * @param monitor a progress monitor
-	 * @exception CoreException
-	 */
-	protected void save(IPath path, boolean forceDirty, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 3);
-	
-			// make sure directory exists
-			if (!path.toFile().exists()) {
-				forceDirty = true;
-				path.toFile().mkdir();
-			}
-			monitor.worked(1);
-	
-			// save files
-			if (forceDirty || isServerDirty)
-				serverFactory.save(path.append("server.xml").toOSString());
-			monitor.worked(1);
-	
-			//if (forceDirty || isWebAppDirty)
-			//	webAppFactory.save(dirPath + "web.xml");
-			//webAppDocument.save(path.toOSString(), forceDirty || isPolicyDirty);
-			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
-			monitor.worked(1);
-	
-			if (forceDirty)
-				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
-			monitor.worked(1);
-	
-			if (forceDirty || isPolicyDirty) {
-				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.policy").toFile()));
-				bw.write(policyFile);
-				bw.close();
-			}
-			monitor.worked(1);
-			isServerDirty = false;
-			isPolicyDirty = false;
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v5.5 configuration to " + path, e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-	
-	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
-		save(path, true, monitor);
-	}
-
-	/**
-	 * Save the information held by this object to the given directory.
-	 *
-	 * @param folder a folder
-	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 */
-	public void save(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 900);
-	
-			// save server.xml
-			byte[] data = serverFactory.getContents();
-			InputStream in = new ByteArrayInputStream(data);
-			IFile file = folder.getFile("server.xml");
-			if (file.exists()) {
-				if (isServerDirty)
-					file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-				else
-					monitor.worked(200);
-			} else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save web.xml
-			webAppDocument.save(folder.getFile("web.xml"), ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save tomcat-users.xml
-			data = XMLUtil.getContents(tomcatUsersDocument);
-			in = new ByteArrayInputStream(data);
-			file = folder.getFile("tomcat-users.xml");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			// save catalina.policy
-			in = new ByteArrayInputStream(policyFile.getBytes());
-			file = folder.getFile("catalina.policy");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-	
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v5.5 configuration to " + folder.toString(), e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-
-	protected static boolean hasMDBListener(Server server) {
-		if (server == null)
-			return false;
-		
-		int count = server.getListenerCount();
-		if (count == 0)
-			return false;
-			
-		for (int i = 0; i < count; i++) {
-			Listener listener = server.getListener(i);
-			if (listener != null && listener.getClassName() != null && listener.getClassName().indexOf("mbean") >= 0)
-				return true;
-		}
-		return false;
-	}
-	
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addMimeMapping(int, IMimeMapping)
-	 */
-	public void addMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.addMimeMapping(index, map);
-		firePropertyChangeEvent(ADD_MAPPING_PROPERTY, new Integer(index), map);
-	}
-
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addWebModule(int, ITomcatWebModule)
-	 */
-	public void addWebModule(int index, ITomcatWebModule module) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					Context context = (Context) host.createElement(index, "Context");
-					context.setDocBase(module.getDocumentBase());
-					context.setPath(module.getPath());
-					context.setReloadable(module.isReloadable() ? "true" : "false");
-					if (module.getMemento() != null && module.getMemento().length() > 0)
-						context.setSource(module.getMemento());
-					isServerDirty = true;
-					firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error adding web module " + module.getPath(), e);
-		}
-	}
-
-	/**
-	 * Localize the web projects in this configuration.
-	 *
-	 * @param path a path
-	 * @param server2 a server type
-	 * @param runtime a runtime
-	 * @param monitor a progress monitor
-	 */
-	public void localizeConfiguration(IPath path, TomcatServer server2, TomcatRuntime runtime, IProgressMonitor monitor) {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.updatingConfigurationTask, 100);
-			
-			Tomcat55Configuration config = new Tomcat55Configuration(null);
-			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 40));
-	
-			if (monitor.isCanceled())
-				return;
-	
-			if (!server2.isTestEnvironment()) {
-				//IServerConfigurationWorkingCopy scwc = config.getServerConfiguration().createWorkingCopy();
-				//Tomcat55Configuration cfg = (Tomcat55Configuration) scwc.getAdapter(Tomcat55Configuration.class);
-				config.localizeWebModules();
-			}
-			monitor.worked(20);
-	
-			if (monitor.isCanceled())
-				return;
-	
-			config.save(path, false, ProgressUtil.getSubMonitorFor(monitor, 40));
-	
-			if (!monitor.isCanceled())
-				monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error localizing configuration", e);
-		}
-	}
-	
-	/**
-	 * Go through all of the web modules and make the document
-	 * base "local" to the configuration.
-	 */
-	protected void localizeWebModules() {
-		List modules = getWebModules();
-
-		int size = modules.size();
-		for (int i = 0; i < size; i++) {
-			WebModule module = (WebModule) modules.get(i);
-			String memento = module.getMemento();
-			if (memento != null && memento.length() > 0) {
-				// update document base to a relative ref
-				String docBase = getPathPrefix() + module.getPath();
-				if (docBase.startsWith("/") || docBase.startsWith("\\"))
-					docBase = docBase.substring(1);
-				modifyWebModule(i, docBase, module.getPath(), module.isReloadable());
-			}
-		}
-	}
-
-	/**
-	 * Change the extension of a mime mapping.
-	 * 
-	 * @param index
-	 * @param map
-	 */
-	public void modifyMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.modifyMimeMapping(index, map);
-		firePropertyChangeEvent(MODIFY_MAPPING_PROPERTY, new Integer(index), map);
-	}
-	
-	/**
-	 * Modify the port with the given id.
-	 *
-	 * @param id java.lang.String
-	 * @param port int
-	 */
-	public void modifyServerPort(String id, int port) {
-		try {
-			if ("server".equals(id)) {
-				server.setPort(port + "");
-				isServerDirty = true;
-				firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-				return;
-			}
-	
-			int i = id.indexOf("/");
-			int servNum = Integer.parseInt(id.substring(0, i));
-			int connNum = Integer.parseInt(id.substring(i + 1));
-			
-			Service service = server.getService(servNum);
-			Connector connector = service.getConnector(connNum);
-			connector.setPort(port + "");
-			isServerDirty = true;
-			firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying server port " + id, e);
-		}
-	}
-	/**
-	 * Change a web module.
-	 * @param index int
-	 * @param docBase java.lang.String
-	 * @param path java.lang.String
-	 * @param reloadable boolean
-	 */
-	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					Context context = host.getContext(index);
-					context.setPath(path);
-					context.setDocBase(docBase);
-					context.setReloadable(reloadable ? "true" : "false");
-					isServerDirty = true;
-					WebModule module = new WebModule(path, docBase, null, reloadable);
-					firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
-		}
-	}
-
-	/**
-	 * Removes a mime mapping.
-	 * @param index int
-	 */
-	public void removeMimeMapping(int index) {
-		webAppDocument.removeMimeMapping(index);
-		firePropertyChangeEvent(REMOVE_MAPPING_PROPERTY, null, new Integer(index));
-	}
-
-	/**
-	 * Removes a web module.
-	 * @param index int
-	 */
-	public void removeWebModule(int index) {
-		try {
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					host.removeElement("Context", index);
-					isServerDirty = true;
-					firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
-					return;
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error removing module ref " + index, e);
-		}
-	}
-
-	protected IStatus backupAndPublish(IPath confDir, boolean doBackup, IProgressMonitor monitor) {
-		MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.publishConfigurationTask, null);
-		Trace.trace(Trace.FINER, "Backup and publish");
-		monitor = ProgressUtil.getMonitorFor(monitor);
-
-		backupAndPublish(confDir, doBackup, ms, monitor, 300);
-		// TODO Refactor success detection once Bug 81060 is addressed
-		// This approach avoids refactoring TomcatConfiguration.backupFolder()
-		// and backupPath() for now.
-		if (ms.isOK() && ms.getChildren().length > 0)
-			publishContextConfig(confDir, ms, monitor);
-
-		monitor.done();
-		return ms;
-	}
-	
-	protected void publishContextConfig(IPath confDir, MultiStatus ms, IProgressMonitor monitor) {
-		Trace.trace(Trace.FINER, "Apply context configurations");
-		try {
-			confDir = confDir.append("conf");
-			
-			monitor.subTask(Messages.publishContextConfigTask);
-			Factory factory = new Factory();
-			factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			Server publishedServer = (Server) factory.loadDocument(new FileInputStream(confDir.append("server.xml").toFile()));
-			monitor.worked(100);
-			
-			boolean modified = false;
-
-			int size = publishedServer.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = publishedServer.getService(i);
-				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
-					Engine engine = service.getEngine();
-					Host host = engine.getHost();
-					int size2 = host.getContextCount();
-					for (int j = 0; j < size2; j++) {
-						Context context = host.getContext(j);
-						monitor.subTask(NLS.bind(Messages.checkingContextTask,
-								new String[] {context.getPath()}));
-						if (addContextConfig(context)) {
-							modified = true;
-						}
-					}
-				}
-			}
-			monitor.worked(100);
-			if (modified) {
-				monitor.subTask(Messages.savingContextConfigTask);
-				factory.save(confDir.append("server.xml").toOSString());
-			}
-			monitor.worked(100);
-			
-			Trace.trace(Trace.FINER, "Server.xml updated with context.xml configurations");
-			ms.add(new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.serverPostProcessingComplete, null));
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not apply context configurations published Tomcat v5.0 configuration from " + confDir.toOSString() + ": " + e.getMessage());
-			IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e);
-			ms.add(s);
-		}
-	}
-	
-	/**
-	 * If the specified Context is linked to a project, try to
-	 * update any configuration found a META-INF/context.xml found
-	 * relative to the specified docBase.
-	 * @param context Context object to receive context.xml contents.
-	 * @return Returns true if context is modified.
-	 */
-	protected boolean addContextConfig(Context context) {
-		boolean modified = false;
-		String source = context.getSource();
-		if (source != null && source.length() > 0 )
-		{
-			String docBase = context.getDocBase();
-			Context contextConfig = loadContextConfig(docBase);
-			if (null != contextConfig) {
-				if (context.hasChildNodes())
-					context.removeChildren();
-				contextConfig.copyChildrenTo(context);
-				modified = true;
-			}
-		}
-		return modified;
-	}
-	
-	/**
-	 * Tries to read a META-INF/context.xml file relative to the
-	 * specified docBase.  If found, it creates a Context object
-	 * containing the contexts of that file.
-	 * @param docBase
-	 * @return Context element created from context.xml, or null if not found.
-	 */
-	protected Context loadContextConfig(String docBase) {
-		File contexXML = new File(docBase + File.separator + "META-INF" + File.separator + "context.xml");
-		if (contexXML.exists()) {
-			try {
-				InputStream is = new FileInputStream(contexXML);
-				Factory ctxFactory = new Factory();
-				ctxFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-				Context ctx = (Context)ctxFactory.loadDocument(is);
-				is.close();
-				return ctx;
-			} catch (FileNotFoundException e) {
-				// Ignore, should never occur
-			} catch (IOException e) {
-				Trace.trace(Trace.SEVERE, "Error reading web module's context.xml file: " + docBase, e);
-			}
-		}
-		return null;
- 	}
-
-	protected IStatus prepareRuntimeDirectory(IPath confDir) {
-		Trace.trace(Trace.FINER, "Preparing runtime directory");
-		// Prepare a catalina.base directory structure
-		File temp = confDir.append("conf").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("logs").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("temp").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("webapps").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("work").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-
-		return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.runtimeDirPrepared, null);		
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Handler.java
deleted file mode 100644
index b9fef29..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Handler.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.server.core.IWebModule;
-/**
- * Tomcat 55 handler.
- */
-public class Tomcat55Handler extends Tomcat50Handler {
-	/**
-	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
-	 */
-	public boolean verifyInstallPath(IPath installPath) {
-		if (installPath == null)
-			return false;
-
-		String s = installPath.lastSegment();
-		if (s != null && s.startsWith("jakarta-tomcat-") && !s.startsWith("jakarta-tomcat-5.5"))
-			return false;
-		return TomcatPlugin.verifyInstallPath(installPath, TomcatPlugin.TOMCAT_55);
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#canAddModule(IWebModule)
-	 */
-	public IStatus canAddModule(IWebModule module) {
-		if ("1.2".equals(module.getJ2EESpecificationVersion()) || "1.3".equals(module.getJ2EESpecificationVersion()) || "1.4".equals(module.getJ2EESpecificationVersion()))
-			return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, Messages.canAddModule, null);
-		
-		return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorSpec55, null);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
deleted file mode 100644
index 37b52c3..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
+++ /dev/null
@@ -1,332 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.io.File;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jst.server.core.IWebModule;
-import org.eclipse.osgi.util.NLS;
-
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.ServerPort;
-/**
- * Generic Tomcat server configuration.
- */
-public abstract class TomcatConfiguration implements ITomcatConfiguration, ITomcatConfigurationWorkingCopy {
-	public static final String NAME_PROPERTY = "name";
-	public static final String PORT_PROPERTY = "port";
-	public static final String MODIFY_PORT_PROPERTY = "modifyPort";
-	public static final String ADD_MAPPING_PROPERTY = "addMapping";
-	public static final String REMOVE_MAPPING_PROPERTY = "removeMapping";
-	public static final String MODIFY_MAPPING_PROPERTY = "modifyMapping";
-	
-	public static final String MODIFY_WEB_MODULE_PROPERTY = "modifyWebModule";
-	public static final String ADD_WEB_MODULE_PROPERTY = "addWebModule";
-	public static final String REMOVE_WEB_MODULE_PROPERTY = "removeWebModule";
-	
-	protected IFolder configPath;
-
-	// property change listeners
-	private transient List propertyListeners;
-
-	/**
-	 * TomcatConfiguration constructor.
-	 * 
-	 * @param path a path
-	 */
-	public TomcatConfiguration(IFolder path) {
-		super();
-		this.configPath = path;
-		/*try {
-			load(configPath, new NullProgressMonitor());
-		} catch (Exception e) {
-			// ignore
-		}*/
-	}
-	
-	protected IFolder getFolder() {
-		return configPath;
-	}
-
-	/**
-	 * Copies all files from the given directory in the workbench
-	 * to the given location.  Can be overridden by version specific
-	 * class to modify or enhance what publish does.
-	 * 
-	 * @return org.eclipse.core.runtime.IStatus
-	 */
-	protected IStatus backupAndPublish(IPath confDir, boolean doBackup, IProgressMonitor monitor) {
-		MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.publishConfigurationTask, null);
-		Trace.trace(Trace.FINER, "Backup and publish");
-		monitor = ProgressUtil.getMonitorFor(monitor);
-
-		backupAndPublish(confDir, doBackup, ms, monitor, 0);
-
-		monitor.done();
-		return ms;
-	}
-	
-	protected void backupAndPublish(IPath confDir, boolean doBackup, MultiStatus ms, IProgressMonitor monitor, int additionalWork) {
-		try {
-			IPath backup = null;
-			if (doBackup) {
-				// create backup directory
-				backup = confDir.append("backup");
-				if (!backup.toFile().exists())
-					backup.toFile().mkdir();
-			}
-			
-			confDir = confDir.append("conf");
-	
-			/*IServerConfiguration config = getServerConfiguration();
-			IFolder folder = config.getConfigurationDataFolder();
-			if (folder != null)
-				backupFolder(folder, confDir, backup, ms, monitor);
-			else {
-				IPath path = config.getConfigurationDataPath();
-				backupPath(configPath, confDir, backup, ms, monitor);*/
-				backupFolder(getFolder(), confDir, backup, ms, monitor, additionalWork);
-			//}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "backupAndPublish() error", e);
-			IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e);
-			ms.add(s);
-		}
-	}
-	
-	protected void backupFolder(IFolder folder, IPath confDir, IPath backup, MultiStatus ms, IProgressMonitor monitor, int additionalWork) throws CoreException {
-		IResource[] children = folder.members();
-		if (children == null)
-			return;
-		
-		int size = children.length;
-		monitor.beginTask(Messages.publishConfigurationTask, size * 100 + additionalWork);
-		for (int i = 0; i < size; i++) {
-			if (children[i] instanceof IFile) {
-				try {
-					IFile file = (IFile) children[i];
-					String name = file.getName();
-					monitor.subTask(NLS.bind(Messages.publisherPublishTask, new String[] {name}));
-					Trace.trace(Trace.FINEST, "Publishing " + name);
-
-					// backup and copy file
-					boolean copy = true;
-					if (backup != null && !(backup.append(name).toFile().exists())) {
-						IStatus status = FileUtil.copyFile(confDir.append(name).toOSString(), backup + File.separator + name);
-						ms.add(status);
-						if (!status.isOK())
-							copy = false;
-					}
-					
-					if (copy) {
-						InputStream in = file.getContents();
-						ms.add(FileUtil.copyFile(in, confDir.append(name).toOSString()));
-					}
-				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "backupAndPublish() error", e);
-					ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e));
-				}
-			}
-			monitor.worked(100);
-		}
-	}
-	
-	protected void backupPath(IPath path, IPath confDir, IPath backup, MultiStatus ms, IProgressMonitor monitor) {
-		File[] files = path.toFile().listFiles();
-		if (files == null)
-			return;
-			
-		int size = files.length;
-		monitor.beginTask(Messages.publishConfigurationTask, size * 100);
-		for (int i = 0; i < size; i++) {
-			try {
-				File file = files[i];
-				String name = file.getName();
-				monitor.subTask(NLS.bind(Messages.publisherPublishTask, new String[] {name}));
-				Trace.trace(Trace.FINEST, "Publishing " + name);
-
-				// backup and copy file
-				boolean copy = true;
-				if (backup != null && !(backup.append(name).toFile().exists())) {
-					IStatus status = FileUtil.copyFile(confDir.append(name).toOSString(), backup + File.separator + name);
-					ms.add(status);
-					if (!status.isOK())
-						copy = false;
-				}
-				
-				if (copy)
-					ms.add(FileUtil.copyFile(file.getAbsolutePath(), confDir.append(name).toOSString()));
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "backupAndPublish() error", e);
-				ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e));
-			}
-			monitor.worked(100);
-		}
-	}
-	
-	protected IStatus cleanupServer(IPath confDir, IPath installDir, IProgressMonitor monitor) {
-		// Default implementation assumes nothing to clean
-		monitor = ProgressUtil.getMonitorFor(monitor);
-		monitor.done();
-		return Status.OK_STATUS;
-	}
-	
-	protected IStatus prepareRuntimeDirectory(IPath confDir) {
-		File temp = confDir.append("conf").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-
-		return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, "Runtime configuration directory prepared" /* TomcatPlugin.getResource("%canAddModule") */, null);		
-	}
-
-	/**
-	 * Returns the root of the docbase parameter.
-	 *
-	 * @return java.lang.String
-	 */
-	protected abstract String getDocBaseRoot();
-
-	/**
-	 * Returns the main server port.
-	 * @return ServerPort
-	 */
-	public abstract ServerPort getMainPort();
-
-	/**
-	 * Returns the prefix that is used in front of the
-	 * web module path property. (e.g. "webapps")
-	 *
-	 * @return java.lang.String
-	 */
-	public abstract String getPathPrefix();
-
-	/**
-	 * Returns the partial URL applicable to this module.
-	 * 
-	 * @param webModule a web module
-	 * @return the partial URL
-	 */
-	protected String getWebModuleURL(IModule webModule) {
-		WebModule module = getWebModule(webModule);
-		if (module != null)
-			return module.getPath();
-		
-		IWebModule webModule2 = (IWebModule) webModule.getAdapter(IWebModule.class);
-		return "/" + webModule2.getContextRoot();
-	}
-
-	/**
-	 * Returns the given module from the config.
-	 *
-	 * @param module a web module
-	 * @return a web module
-	 */
-	protected WebModule getWebModule(IModule module) {
-		if (module == null)
-			return null;
-	
-		String memento = module.getId();
-	
-		List modules = getWebModules();
-		int size = modules.size();
-		for (int i = 0; i < size; i++) {
-			WebModule webModule = (WebModule) modules.get(i);
-			if (memento.equals(webModule.getMemento())) {
-				return webModule;
-			}
-		}
-		return null;
-	}
-
-	/**
-	 * Return the docBase of the ROOT web module.
-	 *
-	 * @return java.lang.String
-	 */
-	protected abstract String getROOTModuleDocBase();
-
-	protected abstract void save(IFolder folder, IProgressMonitor monitor) throws CoreException;
-	
-	protected void firePropertyChangeEvent(String propertyName, Object oldValue, Object newValue) {
-		if (propertyListeners == null)
-			return;
-	
-		PropertyChangeEvent event = new PropertyChangeEvent(this, propertyName, oldValue, newValue);
-		try {
-			Iterator iterator = propertyListeners.iterator();
-			while (iterator.hasNext()) {
-				try {
-					PropertyChangeListener listener = (PropertyChangeListener) iterator.next();
-					listener.propertyChange(event);
-				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error firing property change event", e);
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error in property event", e);
-		}
-	}
-
-	/**
-	 * Adds a property change listener to this server.
-	 *
-	 * @param listener java.beans.PropertyChangeListener
-	 */
-	public void addPropertyChangeListener(PropertyChangeListener listener) {
-		if (propertyListeners == null)
-			propertyListeners = new ArrayList();
-		propertyListeners.add(listener);
-	}
-
-	/**
-	 * Removes a property change listener from this server.
-	 *
-	 * @param listener java.beans.PropertyChangeListener
-	 */
-	public void removePropertyChangeListener(PropertyChangeListener listener) {
-		if (propertyListeners != null)
-			propertyListeners.remove(listener);
-	}
-
-	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
-		load(path, monitor);
-	}
-
-	/*public void importFromRuntime(IRuntime runtime, IProgressMonitor monitor) throws CoreException {
-		load(runtime.getLocation().append("conf"), monitor);
-	}*/
-	
-	protected abstract void load(IPath path, IProgressMonitor monitor) throws CoreException;
-	
-	protected abstract void load(IFolder folder, IProgressMonitor monitor) throws CoreException;
-	
-	public abstract void addWebModule(int index, ITomcatWebModule module);
-	
-	public abstract void removeWebModule(int index);
-
-	/**
-	 * Return a string representation of this object.
-	 * @return java.lang.String
-	 */
-	public String toString() {
-		return "TomcatConfiguration[" + this + "]";
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatLaunchConfigurationDelegate.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatLaunchConfigurationDelegate.java
deleted file mode 100644
index f856ebc..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatLaunchConfigurationDelegate.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.File;
-import java.util.Map;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.jdt.launching.*;
-
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.ServerUtil;
-/**
- * 
- */
-public class TomcatLaunchConfigurationDelegate extends AbstractJavaLaunchConfigurationDelegate {
-
-	public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException {
-		IServer server = ServerUtil.getServer(configuration);
-		if (server == null) {
-			Trace.trace(Trace.FINEST, "Launch configuration could not find server");
-			// throw CoreException();
-			return;
-		}
-
-		TomcatServerBehaviour tomcatServer = (TomcatServerBehaviour) server.getAdapter(TomcatServerBehaviour.class);
-		tomcatServer.setupLaunch(launch, mode, monitor);
-		
-		String mainTypeName = tomcatServer.getRuntimeClass();
-
-		IVMInstall vm = verifyVMInstall(configuration);
-
-		IVMRunner runner = vm.getVMRunner(mode);
-
-		File workingDir = verifyWorkingDirectory(configuration);
-		String workingDirName = null;
-		if (workingDir != null)
-			workingDirName = workingDir.getAbsolutePath();
-		
-		// Program & VM args
-		String pgmArgs = getProgramArguments(configuration);
-		String vmArgs = getVMArguments(configuration);
-
-		ExecutionArguments execArgs = new ExecutionArguments(vmArgs, pgmArgs);
-		
-		// VM-specific attributes
-		Map vmAttributesMap = getVMSpecificAttributesMap(configuration);
-		
-		// Classpath
-		String[] classpath = getClasspath(configuration);
-		
-		// Create VM config
-		VMRunnerConfiguration runConfig = new VMRunnerConfiguration(mainTypeName, classpath);
-		runConfig.setProgramArguments(execArgs.getProgramArgumentsArray());
-		runConfig.setVMArguments(execArgs.getVMArgumentsArray());
-		runConfig.setWorkingDirectory(workingDirName);
-		runConfig.setVMSpecificAttributesMap(vmAttributesMap);
-
-		// Bootpath
-		String[] bootpath = getBootpath(configuration);
-		if (bootpath != null && bootpath.length > 0)
-			runConfig.setBootClassPath(bootpath);
-		
-		setDefaultSourceLocator(launch, configuration);
-		
-		// Launch the configuration
-		runner.run(runConfig, launch, monitor);
-		tomcatServer.setProcess(launch.getProcesses()[0]);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatLaunchableAdapterDelegate.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatLaunchableAdapterDelegate.java
deleted file mode 100644
index 01764e1..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatLaunchableAdapterDelegate.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.net.URL;
-
-import org.eclipse.jst.server.core.IWebModule;
-import org.eclipse.jst.server.core.Servlet;
-import org.eclipse.wst.server.core.IModuleArtifact;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.model.*;
-import org.eclipse.wst.server.core.util.HttpLaunchable;
-import org.eclipse.wst.server.core.util.WebResource;
-/**
- * Launchable adapter delegate for Web resources in Tomcat.
- */
-public class TomcatLaunchableAdapterDelegate extends LaunchableAdapterDelegate {
-	/*
-	 * @see LaunchableAdapterDelegate#getLaunchable(IServer, IModuleArtifact)
-	 */
-	public Object getLaunchable(IServer server, IModuleArtifact moduleObject) {
-		Trace.trace(Trace.FINER, "TomcatLaunchableAdapter " + server + "-" + moduleObject);
-		if (server.getAdapter(TomcatServer.class) == null)
-			return null;
-		if (!(moduleObject instanceof Servlet) &&
-			!(moduleObject instanceof WebResource))
-			return null;
-		if (moduleObject.getModule().getAdapter(IWebModule.class) == null)
-			return null;
-
-		try {
-			URL url = ((IURLProvider) server.getAdapter(IURLProvider.class)).getModuleRootURL(moduleObject.getModule());
-			
-			Trace.trace(Trace.FINER, "root: " + url);
-
-			if (moduleObject instanceof Servlet) {
-				Servlet servlet = (Servlet) moduleObject;
-				if (servlet.getAlias() != null) {
-					String path = servlet.getAlias();
-					if (path.startsWith("/"))
-						path = path.substring(1);
-					url = new URL(url, path);
-				} else
-					url = new URL(url, "servlet/" + servlet.getServletClassName());
-			} else if (moduleObject instanceof WebResource) {
-				WebResource resource = (WebResource) moduleObject;
-				String path = resource.getPath().toString();
-				Trace.trace(Trace.FINER, "path: " + path);
-				if (path != null && path.startsWith("/") && path.length() > 0)
-					path = path.substring(1);
-				if (path != null && path.length() > 0)
-					url = new URL(url, path);
-			}
-			return new HttpLaunchable(url);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting URL for " + moduleObject, e);
-			return null;
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java
deleted file mode 100644
index 26165a5..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Plugin;
-import org.eclipse.core.runtime.Status;
-/**
- * The Tomcat plugin.
- */
-public class TomcatPlugin extends Plugin {
-	protected static TomcatPlugin singleton;
-
-	public static final String PLUGIN_ID = "org.eclipse.jst.server.tomcat.core";
-	
-	public static final String TOMCAT_32 = "org.eclipse.jst.server.tomcat.32";
-	public static final String TOMCAT_40 = "org.eclipse.jst.server.tomcat.40";
-	public static final String TOMCAT_41 = "org.eclipse.jst.server.tomcat.41";
-	public static final String TOMCAT_50 = "org.eclipse.jst.server.tomcat.50";
-	public static final String TOMCAT_55 = "org.eclipse.jst.server.tomcat.55";
-	
-	protected static final String VERIFY_INSTALL_FILE = "verifyInstall.properties";
-	protected static String[] verify32;
-	protected static String[] verify40;
-	protected static String[] verify41;
-	protected static String[] verify50;
-	protected static String[] verify55;
-	
-	/**
-	 * TomcatPlugin constructor comment.
-	 */
-	public TomcatPlugin() {
-		super();
-		singleton = this;
-	}
-
-	/**
-	 * Returns the singleton instance of this plugin.
-	 * @return org.eclipse.jst.server.tomcat.internal.TomcatPlugin
-	 */
-	public static TomcatPlugin getInstance() {
-		return singleton;
-	}
-
-	/**
-	 * Return the install location preference.
-	 * 
-	 * @param id a runtime type id
-	 * @return the install location
-	 */
-	public static String getPreference(String id) {
-		return getInstance().getPluginPreferences().getString(id);
-	}
-	
-	/**
-	 * Set the install location preference.
-	 * 
-	 * @param id the runtimt type id
-	 * @param value the location
-	 */
-	public static void setPreference(String id, String value) {
-		getInstance().getPluginPreferences().setValue(id, value);
-		getInstance().savePluginPreferences();
-	}
-
-	/**
-	 * Convenience method for logging.
-	 *
-	 * @param status a status object
-	 */
-	public static void log(IStatus status) {
-		getInstance().getLog().log(status);
-	}
-
-	/**
-	 * Returns the Tomcat home directory.
-	 * @return java.lang.String
-	 */
-	protected static String getTomcatStateLocation() {
-		try {
-			return getInstance().getStateLocation().toOSString();
-		} catch (Exception e) {
-			return null;
-		}
-	}
-
-	public static ITomcatVersionHandler getTomcatVersionHandler(String id) {
-		if (id.indexOf("runtime") > 0)
-			id = id.substring(0, 30) + id.substring(38);
-		//id = id.substring(0, id.length() - 8);
-		if (TOMCAT_32.equals(id))
-			return new Tomcat32Handler();
-		else if (TOMCAT_40.equals(id))
-			return new Tomcat40Handler();
-		else if (TOMCAT_41.equals(id))
-			return new Tomcat41Handler();
-		else if (TOMCAT_50.equals(id))
-			return new Tomcat50Handler();
-		else if (TOMCAT_55.equals(id))
-			return new Tomcat55Handler();
-		else
-			return null;
-	}
-
-	/**
-	 * Loads the files to verify the Tomcat installation.
-	 */
-	public static void loadVerifyFiles() {
-		if (verify32 != null)
-			return;
-	
-		// backup (empty) values
-		verify32 = new String[0];
-		verify40 = new String[0];
-		verify41 = new String[0];
-		verify50 = new String[0];
-		verify55 = new String[0];
-		
-		try {
-			URL url = getInstance().getBundle().getEntry(VERIFY_INSTALL_FILE);
-			url = Platform.resolve(url);
-			Properties p = new Properties();
-			p.load(url.openStream());
-
-			String verify = p.getProperty("verify32install");
-			verify.replace('/', File.separatorChar);
-
-			StringTokenizer st = new StringTokenizer(verify, ",");
-			List list = new ArrayList();
-			while (st.hasMoreTokens())
-				list.add(st.nextToken());
-			Trace.trace(Trace.FINEST, "Verify32: " + list.toString());
-			verify32 = new String[list.size()];
-			list.toArray(verify32);
-
-			// v4.0
-			verify = p.getProperty("verify40install");
-			verify.replace('/', File.separatorChar);
-
-			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
-			while (st.hasMoreTokens())
-				list.add(st.nextToken());
-			Trace.trace(Trace.FINEST, "Verify40: " + list.toString());
-			verify40 = new String[list.size()];
-			list.toArray(verify40);
-			
-			// v4.1
-			verify = p.getProperty("verify41install");
-			verify.replace('/', File.separatorChar);
-
-			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
-			while (st.hasMoreTokens())
-				list.add(st.nextToken());
-			Trace.trace(Trace.FINEST, "Verify41: " + list.toString());
-			verify41 = new String[list.size()];
-			list.toArray(verify41);
-			
-			// v5.0
-			verify = p.getProperty("verify50install");
-			verify.replace('/', File.separatorChar);
-
-			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
-			while (st.hasMoreTokens())
-				list.add(st.nextToken());
-			Trace.trace(Trace.FINEST, "Verify50: " + list.toString());
-			verify50 = new String[list.size()];
-			list.toArray(verify50);
-
-			// v5.5
-			verify = p.getProperty("verify55install");
-			verify.replace('/', File.separatorChar);
-
-			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
-			while (st.hasMoreTokens())
-				list.add(st.nextToken());
-			Trace.trace(Trace.FINEST, "Verify55: " + list.toString());
-			verify55 = new String[list.size()];
-			list.toArray(verify55);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not load installation verification properties", e);
-		}
-	}
-
-	public static boolean verifyInstallPath(IPath installPath, String id) {
-		if (installPath == null)
-			return false;
-		
-		String dir = installPath.toOSString();
-		if (!dir.endsWith(File.separator))
-			dir += File.separator;
-
-		// look for the following files and directories
-		TomcatPlugin.loadVerifyFiles();
-		
-		String[] paths = null;
-		if (TOMCAT_32.equals(id))
-			paths = verify32;
-		else if (TOMCAT_40.equals(id))
-			paths = verify40;
-		else if (TOMCAT_41.equals(id))
-			paths = verify41;
-		else if (TOMCAT_50.equals(id))
-			paths = verify50;
-		else if (TOMCAT_55.equals(id))
-			paths = verify55;
-		else
-			return false;
-		
-		for (int i = 0; i < paths.length; i++) {
-			File temp = new File(dir + paths[i]);
-			if (!temp.exists())
-				return false;
-		}
-		return true;
-	}
-
-	/**
-	 * Return a <code>java.io.File</code> object that corresponds to the specified
-	 * <code>IPath</code> in the plugin directory.
-	 * 
-	 * @return a file
-	 */
-	protected static File getPlugin() {
-		try {
-			URL installURL = getInstance().getBundle().getEntry("/");
-			URL localURL = Platform.asLocalURL(installURL);
-			return new File(localURL.getFile());
-		} catch (IOException ioe) {
-			return null;
-		}
-	}
-
-	public static void log(String message) {
-		log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, message, null));
-	}
-
-	public static void log(Throwable e) {
-		log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, e.getMessage(), e));
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java
deleted file mode 100644
index 4b97a9b..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.File;
-import java.text.MessageFormat;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.debug.core.Launch;
-import org.eclipse.debug.core.model.IStreamsProxy;
-import org.eclipse.jdt.launching.*;
-
-import org.eclipse.wst.server.core.IRuntimeType;
-import org.eclipse.wst.server.core.model.RuntimeDelegate;
-/**
- * 
- */
-public class TomcatRuntime extends RuntimeDelegate implements ITomcatRuntime, ITomcatRuntimeWorkingCopy {
-	protected static final String PROP_VM_INSTALL_TYPE_ID = "vm-install-type-id";
-	protected static final String PROP_VM_INSTALL_ID = "vm-install-id";
-	
-	protected static Map sdkMap = new HashMap(2);
-
-	public TomcatRuntime() {
-		// do nothing
-	}
-
-	public ITomcatVersionHandler getVersionHandler() {
-		IRuntimeType type = getRuntime().getRuntimeType();
-		return TomcatPlugin.getTomcatVersionHandler(type.getId());
-	}
-
-	protected String getVMInstallTypeId() {
-		return getAttribute(PROP_VM_INSTALL_TYPE_ID, (String)null);
-	}
-
-	protected String getVMInstallId() {
-		return getAttribute(PROP_VM_INSTALL_ID, (String)null);
-	}
-	
-	public boolean isUsingDefaultJRE() {
-		return getVMInstallTypeId() == null;
-	}
-
-	public IVMInstall getVMInstall() {
-		if (getVMInstallTypeId() == null)
-			return JavaRuntime.getDefaultVMInstall();
-		try {
-			IVMInstallType vmInstallType = JavaRuntime.getVMInstallType(getVMInstallTypeId());
-			IVMInstall[] vmInstalls = vmInstallType.getVMInstalls();
-			int size = vmInstalls.length;
-			String id = getVMInstallId();
-			for (int i = 0; i < size; i++) {
-				if (id.equals(vmInstalls[i].getId()))
-					return vmInstalls[i];
-			}
-		} catch (Exception e) {
-			// ignore
-		}
-		return null;
-	}
-
-	public List getRuntimeClasspath() {
-		return getVersionHandler().getRuntimeClasspath(getRuntime().getLocation());
-	}
-
-	/**
-	 * Verifies the Tomcat installation directory. If it is
-	 * correct, true is returned. Otherwise, the user is notified
-	 * and false is returned.
-	 * @return boolean
-	 */
-	public boolean verifyLocation() {
-		return getVersionHandler().verifyInstallPath(getRuntime().getLocation());
-	}
-	
-	/*
-	 * Validate the runtime
-	 */
-	public IStatus validate() {
-		IStatus status = super.validate();
-		if (!status.isOK())
-			return status;
-	
-		if (!verifyLocation())
-			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorInstallDir, null);
-		// don't accept trailing space since that can cause startup problems
-		if (getRuntime().getLocation().hasTrailingSeparator())
-			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorInstallDirTrailingSlash, null);
-		if (getVMInstall() == null)
-			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorJRE, null);
-
-		// check for tools.jar (contains the javac compiler on Windows & Linux) to see whether
-		// Tomcat will be able to compile JSPs.
-		boolean found = false;
-		File file = getVMInstall().getInstallLocation();
-		if (file != null) {
-			File toolsJar = new File(file, "lib" + File.separator + "tools.jar");
-			if (toolsJar.exists())
-				found = true;
-		}
-		
-		// on Mac, tools.jar is merged into classes.zip. if tools.jar wasn't found,
-		// try loading the javac class by running a check inside the VM
-		if (!found) {
-			String os = Platform.getOS();
-			if (os != null && os.toLowerCase().indexOf("mac") >= 0)
-				found = checkForCompiler();
-		}
-		
-		if (!found)
-			return new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, Messages.warningJRE, null);
-		
-		return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, "", null);
-	}
-
-	public void setDefaults() {
-		IVMInstall vmInstall = JavaRuntime.getDefaultVMInstall();
-		setVMInstall(vmInstall.getVMInstallType().getId(), vmInstall.getId());
-		
-		IRuntimeType type = getRuntimeWorkingCopy().getRuntimeType();
-		getRuntimeWorkingCopy().setLocation(new Path(TomcatPlugin.getPreference("location" + type.getId())));
-	}
-
-	public void setVMInstall(IVMInstall vmInstall) {
-		if (vmInstall == null) {
-			setVMInstall(null, null);
-		} else
-			setVMInstall(vmInstall.getVMInstallType().getId(), vmInstall.getId());
-	}
-	
-	protected void setVMInstall(String typeId, String id) {
-		if (typeId == null)
-			setAttribute(PROP_VM_INSTALL_TYPE_ID, (String)null);
-		else
-			setAttribute(PROP_VM_INSTALL_TYPE_ID, typeId);
-		
-		if (id == null)
-			setAttribute(PROP_VM_INSTALL_ID, (String)null);
-		else
-			setAttribute(PROP_VM_INSTALL_ID, id);
-	}
-	
-	/**
-	 * Checks for the existance of the Java compiler in the given java
-	 * executable. A main program is run (<code>org.eclipse.jst.tomcat.core.
-	 * internal.ClassDetector</code>), that dumps a true or false value
-	 * depending on whether the compiler is found. This output is then
-	 * parsed and cached for future reference.
-	 * 
-	 * @return true if the compiler was found
-	 */	
-	protected boolean checkForCompiler() {
-		// first try the cache
-		File javaHome = getVMInstall().getInstallLocation();
-		try {
-			Boolean b = (Boolean) sdkMap.get(javaHome);
-			return b.booleanValue();
-		} catch (Exception e) {
-			// ignore
-		}
-
-		// locate tomcatcore.jar - it contains the class detector main program
-		File file = TomcatPlugin.getPlugin();
-		if (file != null && file.exists()) {
-			IVMRunner vmRunner = getVMInstall().getVMRunner(ILaunchManager.RUN_MODE);
-			VMRunnerConfiguration config = new VMRunnerConfiguration("org.eclipse.jst.server.tomcat.core.internal.ClassDetector", new String[] { file.getAbsolutePath() });
-			config.setProgramArguments(new String[] { "com.sun.tools.javac.Main" });
-			ILaunch launch = new Launch(null, ILaunchManager.RUN_MODE, null);
-			try {
-				vmRunner.run(config, launch, null);
-				for (int i = 0; i < 200; i++) {
-					// wait no more than 10 seconds (200 * 50 mils)
-					if (launch.isTerminated()) {
-						break;
-					}
-					try {
-						Thread.sleep(50);
-					} catch (InterruptedException e) {
-						// ignore
-					}
-				}
-				IStreamsProxy streamsProxy = launch.getProcesses()[0].getStreamsProxy();
-				String text = null;
-				if (streamsProxy != null) {
-					text = streamsProxy.getOutputStreamMonitor().getContents();
-				
-					if (text != null && text.length() > 0) {
-						boolean found = false;
-						if ("true".equals(text))
-							found = true;
-						
-						sdkMap.put(javaHome, new Boolean(found));
-						return found;
-					}
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error checking for JDK", e);
-			} finally {
-				if (!launch.isTerminated()) {
-					try {
-						launch.terminate();
-					} catch (Exception ex) {
-						// ignore
-					}
-				}
-			}
-		}
-		
-		// log error that we were unable to check for the compiler
-		TomcatPlugin.log(MessageFormat.format("Failed compiler check for {0}", new String[] { javaHome.getAbsolutePath() }));
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeLocator.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeLocator.java
deleted file mode 100644
index 9212c55..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeLocator.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.File;
-import java.io.FileFilter;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.jdt.launching.JavaRuntime;
-
-import org.eclipse.wst.server.core.IRuntimeType;
-import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
-import org.eclipse.wst.server.core.ServerCore;
-import org.eclipse.wst.server.core.model.RuntimeLocatorDelegate;
-/**
- * 
- */
-public class TomcatRuntimeLocator extends RuntimeLocatorDelegate {
-	protected static final String[] runtimeTypes = new String[] {
-		"org.eclipse.jst.server.tomcat.runtime.32",
-		"org.eclipse.jst.server.tomcat.runtime.40",
-		"org.eclipse.jst.server.tomcat.runtime.41",
-		"org.eclipse.jst.server.tomcat.runtime.50",
-		"org.eclipse.jst.server.tomcat.runtime.55"};
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.server.core.model.IRuntimeFactoryDelegate#getKnownRuntimes()
-	 */
-	public void searchForRuntimes(IPath path, IRuntimeSearchListener listener, IProgressMonitor monitor) {
-		searchForRuntimes2(path, listener, monitor);
-	}
-
-	protected static void searchForRuntimes2(IPath path, IRuntimeSearchListener listener, IProgressMonitor monitor) {
-		File[] files = null;
-		if (path != null) {
-			File f = path.toFile();
-			if (f.exists())
-				files = f.listFiles();
-			else
-				return;
-		} else
-			files = File.listRoots();
-
-		if (files != null) {
-			int size = files.length;
-			int work = 100 / size;
-			int workLeft = 100 - (work * size);
-			for (int i = 0; i < size; i++) {
-				if (monitor.isCanceled())
-					return;
-				if (files[i] != null && files[i].isDirectory())
-					searchDir(listener, files[i], 4, monitor);
-				monitor.worked(work);
-			}
-			monitor.worked(workLeft);
-		} else
-			monitor.worked(100);
-	}
-
-	protected static void searchDir(IRuntimeSearchListener listener, File dir, int depth, IProgressMonitor monitor) {
-		if ("conf".equals(dir.getName())) {
-			IRuntimeWorkingCopy runtime = getRuntimeFromDir(dir.getParentFile(), monitor);
-			if (runtime != null) {
-				listener.runtimeFound(runtime);
-				return;
-			}
-		}
-		
-		if (depth == 0)
-			return;
-		
-		File[] files = dir.listFiles(new FileFilter() {
-			public boolean accept(File file) {
-				return file.isDirectory();
-			}
-		});
-		if (files != null) {
-			int size = files.length;
-			for (int i = 0; i < size; i++) {
-				if (monitor.isCanceled())
-					return;
-				searchDir(listener, files[i], depth - 1, monitor);
-			}
-		}
-	}
-
-	protected static IRuntimeWorkingCopy getRuntimeFromDir(File dir, IProgressMonitor monitor) {
-		for (int i = 0; i < runtimeTypes.length; i++) {
-			try {
-				IRuntimeType runtimeType = ServerCore.findRuntimeType(runtimeTypes[i]);
-				IRuntimeWorkingCopy runtime = runtimeType.createRuntime(dir.getAbsolutePath(), monitor);
-				runtime.setName(dir.getName());
-				runtime.setLocation(new Path(dir.getAbsolutePath()));
-				ITomcatRuntimeWorkingCopy wc = (ITomcatRuntimeWorkingCopy) runtime.getAdapter(ITomcatRuntimeWorkingCopy.class);
-				wc.setVMInstall(JavaRuntime.getDefaultVMInstall());
-				IStatus status = runtime.validate(monitor);
-				if (status == null || status.getSeverity() != IStatus.ERROR)
-					return runtime;
-				
-				Trace.trace(Trace.FINER, "False runtime found at " + dir.getAbsolutePath() + ": " + status.getMessage());
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Could not find runtime", e);
-			}
-		}
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeTargetHandler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeTargetHandler.java
deleted file mode 100644
index b4237fd..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeTargetHandler.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.ClasspathRuntimeTargetHandler;
-
-import org.eclipse.wst.server.core.IRuntime;
-/**
- * 
- */
-public class TomcatRuntimeTargetHandler extends ClasspathRuntimeTargetHandler {
-	public IClasspathEntry[] getDelegateClasspathEntries(IRuntime runtime, IProgressMonitor monitor) {
-		ITomcatRuntime tomcatRuntime = (ITomcatRuntime) runtime.getAdapter(ITomcatRuntime.class);
-		IVMInstall vmInstall = tomcatRuntime.getVMInstall();
-		if (vmInstall != null) {
-			String name = vmInstall.getName();
-			return new IClasspathEntry[] { JavaCore.newContainerEntry(new Path(JavaRuntime.JRE_CONTAINER).append("org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType").append(name)) };
-		}
-		return null;
-	}
-
-	/**
-	 * @see ClasspathRuntimeTargetHandler#getClasspathContainerLabel(IRuntime, String)
-	 */
-	public String getClasspathContainerLabel(IRuntime runtime, String id) {
-		String id2 = runtime.getRuntimeType().getId();
-		if (id2.indexOf("32") > 0)
-			return Messages.target32runtime;
-		else if (id2.indexOf("40") > 0)
-			return Messages.target40runtime;
-		else if (id2.indexOf("41") > 0)
-			return Messages.target41runtime;
-		else if (id2.indexOf("50") > 0)
-			return Messages.target50runtime;
-		
-		return Messages.target55runtime;
-	}
-
-	/**
-	 * @see ClasspathRuntimeTargetHandler#resolveClasspathContainer(IRuntime, String)
-	 */
-	public IClasspathEntry[] resolveClasspathContainer(IRuntime runtime, String id) {
-		return resolveClasspathContainer(runtime);
-	}
-
-	/**
-	 * Resolve the classpath container.
-	 */
-	protected IClasspathEntry[] resolveClasspathContainer(IRuntime runtime) {
-		IPath installPath = runtime.getLocation();
-		
-		if (installPath == null)
-			return new IClasspathEntry[0];
-		
-		List list = new ArrayList();
-		if (runtime.getRuntimeType().getId().indexOf("32") > 0) {
-			IPath path = installPath.append("lib");
-			addLibraryEntries(list, path.toFile(), true);
-		} else {
-			IPath path = installPath.append("common");
-			addLibraryEntries(list, path.append("lib").toFile(), true);
-			addLibraryEntries(list, path.append("endorsed").toFile(), true);
-		}
-		return (IClasspathEntry[])list.toArray(new IClasspathEntry[list.size()]);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
deleted file mode 100644
index 409b639..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.net.URL;
-import java.util.List;
-
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jst.server.core.IWebModule;
-import org.eclipse.osgi.util.NLS;
-
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.ServerMonitorManager;
-import org.eclipse.wst.server.core.model.*;
-/**
- * Generic Tomcat server.
- */
-public class TomcatServer extends ServerDelegate implements ITomcatServer, ITomcatServerWorkingCopy {
-	public static final String PROPERTY_SECURE = "secure";
-	public static final String PROPERTY_DEBUG = "debug";
-
-	protected transient TomcatConfiguration configuration;
-
-	/**
-	 * TomcatServer.
-	 */
-	public TomcatServer() {
-		super();
-	}
-
-	public TomcatRuntime getTomcatRuntime() {
-		if (getServer().getRuntime() == null)
-			return null;
-		
-		return (TomcatRuntime) getServer().getRuntime().getAdapter(TomcatRuntime.class);
-	}
-
-	public ITomcatVersionHandler getTomcatVersionHandler() {
-		if (getServer().getRuntime() == null)
-			return null;
-
-		return getTomcatRuntime().getVersionHandler();
-	}
-
-	public ITomcatConfiguration getServerConfiguration() throws CoreException {
-		return getTomcatConfiguration();
-	}
-
-	public TomcatConfiguration getTomcatConfiguration() throws CoreException {
-		if (configuration == null) {
-			IFolder folder = getServer().getServerConfiguration();
-			if (folder == null || !folder.exists())
-				throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorNoConfiguration, folder.getFullPath().toOSString()), null));
-			
-			String id = getServer().getServerType().getId();
-			if (id.indexOf("32") > 0)
-				configuration = new Tomcat32Configuration(folder);
-			else if (id.indexOf("40") > 0)
-				configuration = new Tomcat40Configuration(folder);
-			else if (id.indexOf("41") > 0)
-				configuration = new Tomcat41Configuration(folder);
-			else if (id.indexOf("50") > 0)
-				configuration = new Tomcat50Configuration(folder);
-			else if (id.indexOf("55") > 0)
-				configuration = new Tomcat55Configuration(folder);
-			try {
-				configuration.load(folder, null);
-			} catch (CoreException ce) {
-				// ignore
-				configuration = null;
-				throw ce;
-			}
-		}
-		return configuration;
-	}
-
-	public void importConfiguration(IRuntime runtime, IProgressMonitor monitor) {
-		if (runtime == null) {
-			configuration = null;
-			return;
-		}
-		IPath path = runtime.getLocation().append("conf");
-		
-		String id = getServer().getServerType().getId();
-		IFolder folder = getServer().getServerConfiguration();
-		if (id.indexOf("32") > 0)
-			configuration = new Tomcat32Configuration(folder);
-		else if (id.indexOf("40") > 0)
-			configuration = new Tomcat40Configuration(folder);
-		else if (id.indexOf("41") > 0)
-			configuration = new Tomcat41Configuration(folder);
-		else if (id.indexOf("50") > 0)
-			configuration = new Tomcat50Configuration(folder);
-		else if (id.indexOf("55") > 0)
-			configuration = new Tomcat55Configuration(folder);
-		try {
-			configuration.importFromPath(path, isTestEnvironment(), monitor);
-		} catch (CoreException ce) {
-			// ignore
-			configuration = null;
-		}
-	}
-
-	public void saveConfiguration(IProgressMonitor monitor) throws CoreException {
-		TomcatConfiguration config = getTomcatConfiguration();
-		if (config == null)
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, "null"), null));
-		config.save(getServer().getServerConfiguration(), monitor);
-	}
-
-	public void configurationChanged() {
-		configuration = null;
-	}
-
-	/**
-	 * Return the root URL of this module.
-	 * @param module org.eclipse.wst.server.core.model.IModule
-	 * @return java.net.URL
-	 */
-	public URL getModuleRootURL(IModule module) {
-		try {
-			if (module == null)
-				return null;
-	
-			TomcatConfiguration config = getTomcatConfiguration();
-			if (config == null)
-				return null;
-	
-			String url = "http://localhost";
-			int port = config.getMainPort().getPort();
-			port = ServerMonitorManager.getInstance().getMonitoredPort(getServer(), port, "web");
-			if (port != 80)
-				url += ":" + port;
-
-			url += config.getWebModuleURL(module);
-			
-			if (!url.endsWith("/"))
-				url += "/";
-
-			return new URL(url);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not get root URL", e);
-			return null;
-		}
-	}
-
-	/**
-	 * Returns true if the process is set to run in debug mode.
-	 * This feature only works with Tomcat v4.0.
-	 *
-	 * @return boolean
-	 */
-	public boolean isDebug() {
-		return getAttribute(PROPERTY_DEBUG, false);
-	}
-
-	/**
-	 * Returns true if this is a test (run code out of the workbench) server.
-	 *
-	 * @return boolean
-	 */
-	public boolean isTestEnvironment() {
-		return getAttribute(PROPERTY_TEST_ENVIRONMENT, false);
-	}
-
-	/**
-	 * Returns true if the process is set to run in secure mode.
-	 *
-	 * @return boolean
-	 */
-	public boolean isSecure() {
-		return getAttribute(PROPERTY_SECURE, false);
-	}
-	
-	protected static String renderCommandLine(String[] commandLine, String separator) {
-		if (commandLine == null || commandLine.length < 1)
-			return "";
-		StringBuffer buf= new StringBuffer(commandLine[0]);
-		for (int i = 1; i < commandLine.length; i++) {
-			buf.append(separator);
-			buf.append(commandLine[i]);
-		}	
-		return buf.toString();
-	}
-
-	/**
-	 * Return a string representation of this object.
-	 * @return java.lang.String
-	 */
-	public String toString() {
-		return "TomcatServer";
-	}
-
-	/*
-	 * Returns the child module(s) of this module.
-	 */
-	public IModule[] getChildModules(IModule[] module) {
-		return new IModule[0];
-	}
-
-	/*
-	 * Returns the root module(s) of this module.
-	 */
-	public IModule[] getRootModules(IModule module) throws CoreException {
-		if (module.getAdapter(IWebModule.class) != null) {
-			IStatus status = canModifyModules(new IModule[] { module }, null);
-			if (status == null || !status.isOK())
-				throw new CoreException(status);
-			return new IModule[] { module };
-		}
-		return null;
-	}
-
-	/**
-	 * Returns the project references for projects that are in
-	 * this configuration.
-	 *
-	 * @return java.lang.String[]
-	 */
-	/*public IModule[] getModules() {
-		List list = new ArrayList();
-		
-		ITomcatConfiguration config = getTomcatConfiguration();
-		if (config != null) {
-			List modules = config.getWebModules();
-			int size = modules.size();
-			for (int i = 0; i < size; i++) {
-				WebModule module = (WebModule) modules.get(i);
-				
-				String memento = module.getMemento();
-				if (memento != null) {
-					IModule module2 = ServerUtil.getModule(memento);
-					if (module2 != null)
-						list.add(module2);
-				}
-			}
-		}
-		
-		IModule[] s = new IModule[list.size()];
-		list.toArray(s);
-		
-		return s;
-	}*/
-
-	/**
-	 * Returns true if the given project is supported by this
-	 * server, and false otherwise.
-	 *
-	 * @param add modules
-	 * @param remove modules
-	 * @return the status
-	 */
-	public IStatus canModifyModules(IModule[] add, IModule[] remove) {
-		if (add != null) {
-			int size = add.length;
-			for (int i = 0; i < size; i++) {
-				IModule module = add[i];
-				IWebModule webModule = (IWebModule) module.getAdapter(IWebModule.class);
-				if (webModule == null)
-					return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorWebModulesOnly, null);
-				
-				IStatus status = getTomcatVersionHandler().canAddModule(webModule);
-				if (status != null && !status.isOK())
-					return status;
-			}
-		}
-		
-		return new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0, "%canModifyModules", null);
-	}
-
-	public ServerPort[] getServerPorts() {
-		if (getServer().getServerConfiguration() == null)
-			return new ServerPort[0];
-		
-		try {
-			List list = getTomcatConfiguration().getServerPorts();
-			ServerPort[] sp = new ServerPort[list.size()];
-			list.toArray(sp);
-			return sp;
-		} catch (Exception e) {
-			return new ServerPort[0]; 
-		}
-	}
-	
-	public void setDefaults() {
-		setTestEnvironment(true);
-	}
-	
-	/**
-	 * Sets this process to debug mode. This feature only works
-	 * with Tomcat v4.0.
-	 *
-	 * @param b boolean
-	 */
-	public void setDebug(boolean b) {
-		setAttribute(PROPERTY_DEBUG, b);
-	}
-
-	/**
-	 * Sets this process to secure mode.
-	 * @param b boolean
-	 */
-	public void setSecure(boolean b) {
-		setAttribute(PROPERTY_SECURE, b);
-	}
-
-	/**
-	 * Sets this server to test environment mode.
-	 * 
-	 * @param b boolean
-	 */
-	public void setTestEnvironment(boolean b) {
-		setAttribute(PROPERTY_TEST_ENVIRONMENT, b);
-	}
-	
-	/**
-	 * @see ServerDelegate#modifyModules(IModule[], IModule[], IProgressMonitor)
-	 */
-	public void modifyModules(IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException {
-		IStatus status = canModifyModules(add, remove);
-		if (status == null || !status.isOK())
-			throw new CoreException(status);
-		
-		TomcatConfiguration config = getTomcatConfiguration();
-
-		if (add != null) {
-			int size = add.length;
-			for (int i = 0; i < size; i++) {
-				IModule module3 = add[i];
-				IWebModule module = (IWebModule) module3.getAdapter(IWebModule.class);
-				String contextRoot = module.getContextRoot();
-				if (contextRoot != null && !contextRoot.startsWith("/"))
-					contextRoot = "/" + contextRoot;
-				WebModule module2 = new WebModule(contextRoot,
-						module.getLocation().toOSString(), module3.getId(), true);
-				config.addWebModule(-1, module2);
-			}
-		}
-		
-		if (remove != null) {
-			int size2 = remove.length;
-			for (int j = 0; j < size2; j++) {
-				IModule module3 = remove[j];
-				String memento = module3.getId();
-				List modules = getTomcatConfiguration().getWebModules();
-				int size = modules.size();
-				for (int i = 0; i < size; i++) {
-					WebModule module = (WebModule) modules.get(i);
-					if (memento.equals(module.getMemento()))
-						config.removeWebModule(i);
-				}
-			}
-		}
-		config.save(config.getFolder(), monitor);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java
deleted file mode 100644
index e964247..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java
+++ /dev/null
@@ -1,555 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.debug.core.*;
-import org.eclipse.debug.core.model.IProcess;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
-import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jst.server.core.IWebModule;
-import org.eclipse.osgi.util.NLS;
-
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.core.model.*;
-import org.eclipse.wst.server.core.util.PingThread;
-import org.eclipse.wst.server.core.util.SocketUtil;
-/**
- * Generic Tomcat server.
- */
-public class TomcatServerBehaviour extends ServerBehaviourDelegate implements ITomcatServerBehaviour {
-	private static final String ATTR_STOP = "stop-server";
-
-	// the thread used to ping the server to check for startup
-	protected transient PingThread ping = null;
-	protected transient IProcess process;
-	protected transient IDebugEventSetListener processListener;
-
-	/**
-	 * TomcatServer.
-	 */
-	public TomcatServerBehaviour() {
-		super();
-	}
-	
-	public void initialize() {
-		// do nothing
-	}
-
-	public TomcatRuntime getTomcatRuntime() {
-		if (getServer().getRuntime() == null)
-			return null;
-		
-		return (TomcatRuntime) getServer().getRuntime().getAdapter(TomcatRuntime.class);
-	}
-	
-	public ITomcatVersionHandler getTomcatVersionHandler() {
-		if (getServer().getRuntime() == null)
-			return null;
-
-		return getTomcatRuntime().getVersionHandler();
-	}
-	
-	public TomcatConfiguration getTomcatConfiguration() throws CoreException {
-		return getTomcatServer().getTomcatConfiguration();
-	}
-
-	public TomcatServer getTomcatServer() {
-		return (TomcatServer) getServer().getAdapter(TomcatServer.class);
-	}
-
-	/**
-	 * Return the runtime class name.
-	 *
-	 * @return the class name
-	 */
-	public String getRuntimeClass() {
-		return getTomcatVersionHandler().getRuntimeClass();
-	}
-	
-	/**
-	 * Returns the runtime base path for relative paths in the server
-	 * configuration.
-	 * 
-	 * @return the base path
-	 */
-	public IPath getRuntimeBaseDirectory() {
-		return getTomcatVersionHandler().getRuntimeBaseDirectory(this);
-	}
-
-	/**
-	 * Return the program's runtime arguments to start or stop.
-	 *
-	 * @param starting true if starting
-	 * @return an array of runtime program arguments
-	 */
-	protected String[] getRuntimeProgramArguments(boolean starting) {
-		IPath configPath = null;
-		if (getTomcatServer().isTestEnvironment())
-			configPath = getTempDirectory();
-		return getTomcatVersionHandler().getRuntimeProgramArguments(configPath, getTomcatServer().isDebug(), starting);
-	}
-
-	/**
-	 * Return the runtime (VM) arguments.
-	 *
-	 * @return an array of runtime arguments
-	 */
-	protected String[] getRuntimeVMArguments() {
-		IPath installPath = getServer().getRuntime().getLocation();
-		IPath configPath = null;
-		if (getTomcatServer().isTestEnvironment())
-			configPath = getTempDirectory();
-		else
-			configPath = installPath;
-		return getTomcatVersionHandler().getRuntimeVMArguments(installPath, configPath,
-				getTomcatServer().isTestEnvironment(), getTomcatServer().isSecure());
-	}
-	
-	protected static String renderCommandLine(String[] commandLine, String separator) {
-		if (commandLine == null || commandLine.length < 1)
-			return "";
-		StringBuffer buf= new StringBuffer(commandLine[0]);
-		for (int i = 1; i < commandLine.length; i++) {
-			buf.append(separator);
-			buf.append(commandLine[i]);
-		}	
-		return buf.toString();
-	}
-
-	public void setProcess(final IProcess newProcess) {
-		if (process != null)
-			return;
-
-		process = newProcess;
-		if (processListener != null)
-			DebugPlugin.getDefault().removeDebugEventListener(processListener);
-		if (newProcess == null)
-			return;
-		
-		processListener = new IDebugEventSetListener() {
-			public void handleDebugEvents(DebugEvent[] events) {
-				if (events != null) {
-					int size = events.length;
-					for (int i = 0; i < size; i++) {
-						if (process != null && process.equals(events[i].getSource()) && events[i].getKind() == DebugEvent.TERMINATE) {
-							DebugPlugin.getDefault().removeDebugEventListener(this);
-							stopImpl();
-						}
-					}
-				}
-			}
-		};
-		DebugPlugin.getDefault().addDebugEventListener(processListener);
-	}
-
-	protected void stopImpl() {
-		if (ping != null) {
-			ping.stopPinging();
-			ping = null;
-		}
-		if (process != null) {
-			process = null;
-			DebugPlugin.getDefault().removeDebugEventListener(processListener);
-			processListener = null;
-		}
-		setServerState(IServer.STATE_STOPPED);
-	}
-
-	protected void publishServer(int kind, IProgressMonitor monitor) throws CoreException {
-		IPath installDir = getServer().getRuntime().getLocation();
-		IPath confDir = null;
-		if (getTomcatServer().isTestEnvironment()) {
-			confDir = getTempDirectory();
-			IStatus status = getTomcatConfiguration().prepareRuntimeDirectory(confDir);
-			if (status != null && !status.isOK())
-				throw new CoreException(status);
-/*			File temp = confDir.append("conf").toFile();
-			if (!temp.exists())
-				temp.mkdirs();*/
-		} else
-			confDir = installDir;
-
-		monitor = ProgressUtil.getMonitorFor(monitor);
-		monitor.beginTask(Messages.publishServerTask, 500);
-		
-		IStatus status = getTomcatConfiguration().cleanupServer(confDir, installDir, ProgressUtil.getSubMonitorFor(monitor, 100));
-		if (status != null && !status.isOK())
-			throw new CoreException(status);
-		
-		status = getTomcatConfiguration().backupAndPublish(confDir, !getTomcatServer().isTestEnvironment(), ProgressUtil.getSubMonitorFor(monitor, 400));
-		if (status != null && !status.isOK())
-			throw new CoreException(status);
-		
-		monitor.done();
-		
-		setServerPublishState(IServer.PUBLISH_STATE_NONE);
-	}
-
-	/*
-	 * Publishes the given module to the server.
-	 */
-	protected void publishModule(int kind, int deltaKind, IModule[] moduleTree, IProgressMonitor monitor) throws CoreException {
-		if (getTomcatServer().isTestEnvironment())
-			return;
-
-		IPath path = getTempDirectory().append("publish.txt");
-		Properties p = new Properties();
-		try {
-			p.load(new FileInputStream(path.toFile()));
-		} catch (Exception e) {
-			// ignore
-		}
-		
-		IModule module = moduleTree[0];
-		
-		if (deltaKind == REMOVED) {
-			try {
-				String publishPath = (String) p.get(module.getId());
-				FileUtil.deleteDirectory(new File(publishPath), monitor);
-			} catch (Exception e) {
-				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, "Could not remove module", e));
-			}
-		} else {
-			IWebModule webModule = (IWebModule) module.getAdapter(IWebModule.class);
-			IPath from = webModule.getLocation();
-			IPath to = getServer().getRuntime().getLocation().append("webapps").append(webModule.getContextRoot());
-			FileUtil.smartCopyDirectory(from.toOSString(), to.toOSString(), monitor);
-			p.put(module.getId(), to.toOSString());
-			setModulePublishState(moduleTree, IServer.PUBLISH_STATE_NONE);
-		}
-		
-		try {
-			p.store(new FileOutputStream(path.toFile()), "Tomcat publish data");
-		} catch (Exception e) {
-			// ignore
-		}
-	}
-
-	/**
-	 * Setup for starting the server.
-	 * 
-	 * @param launch ILaunch
-	 * @param launchMode String
-	 * @param monitor IProgressMonitor
-	 * @throws CoreException if anything goes wrong
-	 */
-	public void setupLaunch(ILaunch launch, String launchMode, IProgressMonitor monitor) throws CoreException {
-		if ("true".equals(launch.getLaunchConfiguration().getAttribute(ATTR_STOP, "false")))
-			return;
-		IStatus status = getTomcatRuntime().validate();
-		if (status != null && status.getSeverity() == IStatus.ERROR)
-			throw new CoreException(status);
-
-		//setRestartNeeded(false);
-		TomcatConfiguration configuration = getTomcatConfiguration();
-	
-		// check that ports are free
-		Iterator iterator = configuration.getServerPorts().iterator();
-		List usedPorts = new ArrayList();
-		while (iterator.hasNext()) {
-			ServerPort sp = (ServerPort) iterator.next();
-			if (sp.getPort() < 0)
-				throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorPortInvalid, null));
-			if (SocketUtil.isPortInUse(sp.getPort(), 5)) {
-				usedPorts.add(sp);
-			}
-		}
-		if (usedPorts.size() == 1) {
-			ServerPort port = (ServerPort) usedPorts.get(0);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPortInUse, new String[] {port.getPort() + "", getServer().getName()}), null));
-		} else if (usedPorts.size() > 1) {
-			String portStr = "";
-			iterator = usedPorts.iterator();
-			boolean first = true;
-			while (iterator.hasNext()) {
-				if (!first)
-					portStr += ", ";
-				first = false;
-				ServerPort sp = (ServerPort) iterator.next();
-				portStr += "" + sp.getPort();
-			}
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPortsInUse, new String[] {portStr, getServer().getName()}), null));
-		}
-		
-		setServerState(IServer.STATE_STARTING);
-		setMode(launchMode);
-	
-		// ping server to check for startup
-		try {
-			String url = "http://localhost";
-			int port = configuration.getMainPort().getPort();
-			if (port != 80)
-				url += ":" + port;
-			ping = new PingThread(getServer(), this, url, 50);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Can't ping for Tomcat startup.");
-		}
-	}
-
-	/**
-	 * Cleanly shuts down and terminates the server.
-	 * 
-	 * @param force <code>true</code> to kill the server
-	 */
-	public void stop(boolean force) {
-		if (force) {
-			terminate();
-			return;
-		}
-		int state = getServer().getServerState();
-		if (state == IServer.STATE_STOPPED)
-			return;
-		else if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING) {
-			terminate();
-			return;
-		}
-
-		try {
-			Trace.trace(Trace.FINER, "Stopping Tomcat");
-			if (state != IServer.STATE_STOPPED)
-				setServerState(IServer.STATE_STOPPING);
-	
-			ILaunchConfiguration launchConfig = ((Server)getServer()).getLaunchConfiguration(true, null);
-			ILaunchConfigurationWorkingCopy wc = launchConfig.getWorkingCopy();
-			
-			String args = renderCommandLine(getRuntimeProgramArguments(false), " ");
-			wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, args);
-			wc.setAttribute(ATTR_STOP, "true");
-			wc.launch(ILaunchManager.RUN_MODE, new NullProgressMonitor());
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error stopping Tomcat", e);
-		}
-	}
-
-	/**
-	 * Terminates the server.
-	 */
-	protected void terminate() {
-		if (getServer().getServerState() == IServer.STATE_STOPPED)
-			return;
-
-		try {
-			setServerState(IServer.STATE_STOPPING);
-			Trace.trace(Trace.FINER, "Killing the Tomcat process");
-			if (process != null && !process.isTerminated()) {
-				process.terminate();
-				stopImpl();
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error killing the process", e);
-		}
-	}
-
-	/**
-	 * Return a string representation of this object.
-	 * @return java.lang.String
-	 */
-	public String toString() {
-		return "TomcatServer";
-	}
-	
-	protected static int getNextToken(String s, int start) {
-		int i = start;
-		int length = s.length();
-		char lookFor = ' ';
-		
-		while (i < length) {
-			char c = s.charAt(i);
-			if (lookFor == c) {
-				if (lookFor == '"')
-					return i+1;
-				return i;
-			}
-			if (c == '"')
-				lookFor = '"';
-			i++;
-		}
-		return -1;
-	}
-	
-	/**
-	 * Merge the given arguments into the original argument string, replacing
-	 * invalid values if they have been changed.
-	 * 
-	 * @param originalArg
-	 * @param vmArgs
-	 * @return merged argument string
-	 */
-	public static String mergeArguments(String originalArg, String[] vmArgs) {
-		if (vmArgs == null)
-			return originalArg;
-		
-		if (originalArg == null)
-			originalArg = "";
-		
-		// replace and null out all vmargs that already exist
-		int size = vmArgs.length;
-		for (int i = 0; i < size; i++) {
-			int ind = vmArgs[i].indexOf(" ");
-			int ind2 = vmArgs[i].indexOf("=");
-			if (ind >= 0 && (ind2 == -1 || ind < ind2)) { // -a bc style
-				int index = originalArg.indexOf(vmArgs[i].substring(0, ind + 1));
-				if (index == 0 || (index > 0 && originalArg.charAt(index - 1) == ' ')) {
-					// replace
-					String s = originalArg.substring(0, index);
-					int index2 = getNextToken(originalArg, index + ind + 1);
-					if (index2 >= 0)
-						originalArg = s + vmArgs[i] + originalArg.substring(index2);
-					else
-						originalArg = s + vmArgs[i];
-					vmArgs[i] = null;
-				}
-			} else if (ind2 >= 0) { // a=b style
-				int index = originalArg.indexOf(vmArgs[i].substring(0, ind2 + 1));
-				if (index == 0 || (index > 0 && originalArg.charAt(index - 1) == ' ')) {
-					// replace
-					String s = originalArg.substring(0, index);
-					int index2 = getNextToken(originalArg, index);
-					if (index2 >= 0)
-						originalArg = s + vmArgs[i] + originalArg.substring(index2);
-					else
-						originalArg = s + vmArgs[i];
-					vmArgs[i] = null;
-				}
-			} else { // abc style
-				int index = originalArg.indexOf(vmArgs[i]);
-				if (index == 0 || (index > 0 && originalArg.charAt(index-1) == ' ')) {
-					// replace
-					String s = originalArg.substring(0, index);
-					int index2 = getNextToken(originalArg, index);
-					if (index2 >= 0)
-						originalArg = s + vmArgs[i] + originalArg.substring(index2);
-					else
-						originalArg = s + vmArgs[i];
-					vmArgs[i] = null;
-				}
-			}
-		}
-		
-		// add remaining vmargs to the end
-		for (int i = 0; i < size; i++) {
-			if (vmArgs[i] != null) {
-				if (originalArg.length() > 0 && !originalArg.endsWith(" "))
-					originalArg += " ";
-				originalArg += vmArgs[i];
-			}
-		}
-		
-		return originalArg;
-	}
-
-	/**
-	 * Replace the current JRE container classpath with the given entry.
-	 * 
-	 * @param cp
-	 * @param entry
-	 */
-	public static void replaceJREContainer(List cp, IRuntimeClasspathEntry entry) {
-		int size = cp.size();
-		for (int i = 0; i < size; i++) {
-			IRuntimeClasspathEntry entry2 = (IRuntimeClasspathEntry) cp.get(i);
-			if (entry2.getPath().uptoSegment(2).isPrefixOf(entry.getPath())) {
-				cp.set(i, entry);
-				return;
-			}
-		}
-		
-		cp.add(0, entry);
-	}
-
-	/**
-	 * Merge a single classpath entry into the classpath list.
-	 * 
-	 * @param cp
-	 * @param entry
-	 */
-	public static void mergeClasspath(List cp, IRuntimeClasspathEntry entry) {
-		Iterator iterator = cp.iterator();
-		while (iterator.hasNext()) {
-			IRuntimeClasspathEntry entry2 = (IRuntimeClasspathEntry) iterator.next();
-			
-			if (entry2.getPath().equals(entry.getPath()))
-				return;
-		}
-		
-		cp.add(entry);
-	}
-
-	public void setupLaunchConfiguration(ILaunchConfigurationWorkingCopy workingCopy, IProgressMonitor monitor) throws CoreException {
-		String existingProgArgs = workingCopy.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, (String)null);
-		workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, mergeArguments(existingProgArgs, getRuntimeProgramArguments(true)));
-
-		String existingVMArgs = workingCopy.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, (String)null);
-		workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, mergeArguments(existingVMArgs, getRuntimeVMArguments()));
-		
-		ITomcatRuntime runtime = getTomcatRuntime();
-		IVMInstall vmInstall = runtime.getVMInstall();
-		if (vmInstall != null) {
-			workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE, vmInstall.getVMInstallType().getId());
-			workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_NAME, vmInstall.getName());
-		}
-		
-		// update classpath
-		IRuntimeClasspathEntry[] originalClasspath = JavaRuntime.computeUnresolvedRuntimeClasspath(workingCopy);
-		int size = originalClasspath.length;
-		List oldCp = new ArrayList(originalClasspath.length + 2);
-		for (int i = 0; i < size; i++)
-			oldCp.add(originalClasspath[i]);
-		
-		List cp2 = runtime.getRuntimeClasspath();
-		Iterator iterator = cp2.iterator();
-		while (iterator.hasNext()) {
-			IRuntimeClasspathEntry entry = (IRuntimeClasspathEntry) iterator.next();
-			mergeClasspath(oldCp, entry);
-		}
-		
-		if (vmInstall != null) {
-			try {
-				replaceJREContainer(oldCp, JavaRuntime.newRuntimeContainerClasspathEntry(new Path(JavaRuntime.JRE_CONTAINER).append("org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType").append(vmInstall.getName()), IRuntimeClasspathEntry.BOOTSTRAP_CLASSES));
-			} catch (Exception e) {
-				// ignore
-			}
-			
-			IPath jrePath = new Path(vmInstall.getInstallLocation().getAbsolutePath());
-			if (jrePath != null) {
-				IPath toolsPath = jrePath.append("lib").append("tools.jar");
-				if (toolsPath.toFile().exists())
-					mergeClasspath(oldCp, JavaRuntime.newArchiveRuntimeClasspathEntry(toolsPath));
-			}
-		}
-		
-		iterator = oldCp.iterator();
-		List list = new ArrayList();
-		while (iterator.hasNext()) {
-			IRuntimeClasspathEntry entry = (IRuntimeClasspathEntry) iterator.next();
-			try {
-				list.add(entry.getMemento());
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Could not resolve classpath entry: " + entry, e);
-			}
-		}
-		
-		workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH, list);
-		workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH, false);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerLocator.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerLocator.java
deleted file mode 100644
index 2087618..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerLocator.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.provisional.ServerLocatorDelegate;
-/**
- * 
- */
-public class TomcatServerLocator extends ServerLocatorDelegate {
-	public void searchForServers(String host, final IServerSearchListener listener, final IProgressMonitor monitor) {
-		TomcatRuntimeLocator.IRuntimeSearchListener listener2 = new TomcatRuntimeLocator.IRuntimeSearchListener() {
-			public void runtimeFound(IRuntimeWorkingCopy runtime) {
-				String runtimeTypeId = runtime.getRuntimeType().getId();
-				String serverTypeId = runtimeTypeId.substring(0, runtimeTypeId.length() - 8);
-				IServerType serverType = ServerCore.findServerType(serverTypeId);
-				try {
-					IServerWorkingCopy server = serverType.createServer(serverTypeId, null, runtime, monitor);
-					listener.serverFound(server);
-				} catch (Exception e) {
-					Trace.trace(Trace.WARNING, "Could not create Tomcat server", e);
-				}
-			}
-		};
-		TomcatRuntimeLocator.searchForRuntimes2(null, listener2, monitor);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerUtil.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerUtil.java
deleted file mode 100644
index 4f720e8..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerUtil.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.jdt.core.IClasspathEntry;
-import org.eclipse.jdt.core.JavaCore;
-/**
- * Helper class to load and save Tomcat server and identify configurations.
- */
-public class TomcatServerUtil {
-	/**
-	 * TomcatServerSerializer constructor comment.
-	 */
-	protected TomcatServerUtil() {
-		super();
-	}
-	
-	/**
-	 * Returns the kind of a <code>PackageFragmentRoot</code> from its <code>String</code> form.
-	 */
-	protected static int getClasspathKindFromString(String kindStr) {
-		//if (kindStr.equalsIgnoreCase("prj"))
-		//	return IClasspathEntry.CPE_PROJECT;
-		if (kindStr.equalsIgnoreCase("var"))
-			return IClasspathEntry.CPE_VARIABLE;
-		//if (kindStr.equalsIgnoreCase("src"))
-		//	return IClasspathEntry.CPE_SOURCE;
-		if (kindStr.equalsIgnoreCase("lib"))
-			return IClasspathEntry.CPE_LIBRARY;
-		return -1;
-	}
-
-	/**
-	 * Returns a <code>String</code> for the kind of a class path entry.
-	 */
-	protected static String getClasspathKindToString(int kind) {
-		switch (kind) {
-			//case IClasspathEntry.CPE_PROJECT :
-			//	return "prj";
-			//case IClasspathEntry.CPE_SOURCE :
-			//	return "src";
-			case IClasspathEntry.CPE_LIBRARY :
-				return "lib";
-			case IClasspathEntry.CPE_VARIABLE :
-				return "var";
-			default :
-				return "unknown";
-		}
-	}
-	
-	/**
-	 * Create's a classpath entry of the specified kind.
-	 *
-	 * Returns null if unable to create a valid entry.
-	 */
-	protected static IClasspathEntry createClasspathEntry(IPath path, int kind, IPath sourceAttachmentPath, IPath sourceAttachmentRootPath) {
-		switch (kind) {
-			/*case IClasspathEntry.CPE_PROJECT:
-				if (!path.isAbsolute())
-					return null;
-				else
-					return JavaCore.newProjectEntry(path);*/
-	
-			case IClasspathEntry.CPE_LIBRARY:
-				if (!path.isAbsolute())
-					return null;
-				
-				return JavaCore.newLibraryEntry(path, sourceAttachmentPath, sourceAttachmentRootPath);
-	
-			case IClasspathEntry.CPE_VARIABLE:
-				return JavaCore.newVariableEntry(path, sourceAttachmentPath, sourceAttachmentRootPath);
-	
-			default:
-				return null;
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java
deleted file mode 100644
index 90f36c0..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2004, 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.jst.server.tomcat.core.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.sourcelookup.ISourceContainer;
-import org.eclipse.debug.core.sourcelookup.ISourcePathComputerDelegate;
-import org.eclipse.debug.core.sourcelookup.containers.FolderSourceContainer;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.ServerUtil;
-/**
- *
- */
-public class TomcatSourcePathComputerDelegate implements ISourcePathComputerDelegate {
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.core.sourcelookup.ISourcePathComputerDelegate#computeSourceContainers(org.eclipse.debug.core.ILaunchConfiguration, org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public ISourceContainer[] computeSourceContainers(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException {
-		IRuntimeClasspathEntry[] entries = JavaRuntime.computeUnresolvedSourceLookupPath(configuration);
-		List sourcefolderList = new ArrayList();
-
-		IServer server = ServerUtil.getServer(configuration);
-		if (server != null) {
-			IPath basePath = ((TomcatServerBehaviour)server.getAdapter(TomcatServerBehaviour.class)).getRuntimeBaseDirectory();
-			List list = new ArrayList();
-			List pathList = new ArrayList();
-			IModule[] modules = server.getModules();
-			for (int i = 0; i < modules.length; i++) {
-				IProject project = modules[i].getProject();
-				if (project != null) {
-					/**
-					 * WORKAROUND for bug 93174,
-					 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=93174
-					 * 
-					 * Assume that a folder with the same name as the IModule
-					 * name located directly under the module's project is a
-					 * "flexible" module. Alter the behavior so that a folder
-					 * container is added instead.
-					 */
-					IFolder moduleFolder = project.getFolder(modules[i].getName());
-					if (moduleFolder.exists()) {
-						sourcefolderList.add(new FolderSourceContainer(moduleFolder, true));
-					} else {
-						try {
-							if (project.hasNature(JavaCore.NATURE_ID)) {
-								IJavaProject javaProject = (IJavaProject) project.getNature(JavaCore.NATURE_ID);
-								list.add(javaProject);
-							}
-						} catch (Exception e) {
-							// ignore
-						}
-					}
-					
-					IPath path = basePath.append("work").append("Catalina").append("localhost").append(modules[i].getName());
-					pathList.add(path);
-				}
-			}
-			int size = list.size();
-			IJavaProject[] projects = new IJavaProject[size];
-			list.toArray(projects);
-			
-			int size2 = entries.length;
-			int size3 = pathList.size();
-			IRuntimeClasspathEntry[] entries2 = new IRuntimeClasspathEntry[size + size2 + size3];
-			System.arraycopy(entries, 0, entries2, 0, size2);
-			
-			for (int i = 0; i < size; i++) {
-				entries2[size2 + i] = JavaRuntime.newProjectRuntimeClasspathEntry(projects[i]); 
-			}
-			
-			for (int i = 0; i < size3; i++) {
-				entries2[size + size2 + i] = JavaRuntime.newArchiveRuntimeClasspathEntry((IPath) pathList.get(i)); 
-			}
-			
-			entries = entries2;
-		}
-		
-		IRuntimeClasspathEntry[] resolved = JavaRuntime.resolveSourceLookupPath(entries, configuration);
-		ISourceContainer[] sourceContainers = JavaRuntime.getSourceContainers(resolved);
-
-		/**
-		 * WORKAROUND for bug 93174,
-		 * https://bugs.eclipse.org/bugs/show_bug.cgi?id=93174
-		 * 
-		 * FolderSourceContainers have a source container of null, so the
-		 * mapping of the regular classpath to source containers is done
-		 * before adding the known FolderSourceContainers.
-		 */
-		if (!sourcefolderList.isEmpty()) {
-			ISourceContainer[] combinedSourceContainers = new ISourceContainer[sourceContainers.length + sourcefolderList.size()];
-			sourcefolderList.toArray(combinedSourceContainers);
-			System.arraycopy(sourceContainers, 0, combinedSourceContainers, sourcefolderList.size(), sourceContainers.length);
-			sourceContainers = combinedSourceContainers;
-		}
-
-		return sourceContainers;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Trace.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Trace.java
deleted file mode 100644
index dc9bf41..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Trace.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-/**
- * Helper class to route trace output.
- */
-public class Trace {
-	public static byte CONFIG = 0;
-	public static byte WARNING = 1;
-	public static byte SEVERE = 2;
-	public static byte FINEST = 3;
-	public static byte FINER = 4;
-
-	/**
-	 * Trace constructor comment.
-	 */
-	private Trace() {
-		super();
-	}
-
-	/**
-	 * Trace the given text.
-	 *
-	 * @param level the trace level
-	 * @param s a message
-	 */
-	public static void trace(byte level, String s) {
-		Trace.trace(level, s, null);
-	}
-
-	/**
-	 * Trace the given message and exception.
-	 *
-	 * @param level the trace level
-	 * @param s a message
-	 * @param t a throwable
-	 */
-	public static void trace(byte level, String s, Throwable t) {
-		if (!TomcatPlugin.getInstance().isDebugging())
-			return;
-
-		System.out.println(TomcatPlugin.PLUGIN_ID + " " + s);
-		if (t != null)
-			t.printStackTrace();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.java
deleted file mode 100644
index b9c0751..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal;
-
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-/**
- * Helper class to access a web.xml file.
- */
-public class WebAppDocument {
-	protected boolean isWebAppDirty;
-	protected Document webAppDocument;
-
-	/**
-	 * Loads a web.xml from the given URL.
-	 *
-	 * @param path a path
-	 * @throws Exception if anything goes wrong
-	 */
-	public WebAppDocument(IPath path) throws Exception {
-		webAppDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(path.toFile())));
-	}
-
-	/**
-	 * Loads a web.xml from the given resource.
-	 *
-	 * @param file a file
-	 * @throws Exception if anything goes wrong
-	 */
-	public WebAppDocument(IFile file) throws Exception {
-		webAppDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(file.getContents()));
-	}
-
-	/**
-	 * Adds a MimeMapping.
-	 *
-	 * @param index int
-	 * @param map org.eclipse.jst.server.tomcat.IMimeMapping
-	 */
-	public void addMimeMapping(int index, IMimeMapping map) {
-		Trace.trace(Trace.FINER, "Adding mime mapping " + index + " " + map.getMimeType() + " " + map.getExtension());
-		Element element = webAppDocument.getDocumentElement();
-		Element mapping = XMLUtil.createChildElement(webAppDocument, element, index, "mime-mapping");
-		XMLUtil.insertText(webAppDocument, mapping, "\n\t");
-		XMLUtil.createTextChildElement(webAppDocument, mapping, "extension", map.getExtension());
-		XMLUtil.insertText(webAppDocument, mapping, "\n\t");
-		XMLUtil.createTextChildElement(webAppDocument, mapping, "mime-type", map.getMimeType());
-		XMLUtil.insertText(webAppDocument, mapping, "\n");
-	
-		isWebAppDirty = true;
-	}
-
-	/**
-	 * Returns a list of MimeMappings.
-	 *
-	 * @return java.util.List
-	 */
-	public List getMimeMappings() {
-		List map = new ArrayList();
-	
-		Element root = webAppDocument.getDocumentElement();
-		Iterator iterator = XMLUtil.getNodeIterator(root, "mime-mapping");
-		while (iterator.hasNext()) {
-			Element element = (Element) iterator.next();
-			String mimeType = XMLUtil.getSubNodeValue(element, "mime-type");
-			String extension = XMLUtil.getSubNodeValue(element, "extension");
-			MimeMapping mm = new MimeMapping(extension, mimeType);
-			map.add(mm);
-		}
-	
-		return map;
-	}
-
-	/**
-	 * Modifies a mime mapping.
-	 *
-	 * @param index
-	 * @param map
-	 */
-	public void modifyMimeMapping(int index, IMimeMapping map) {
-		Element element = webAppDocument.getDocumentElement();
-		NodeList list = element.getElementsByTagName("mime-mapping");
-		Element element2 = (Element) list.item(index);
-		XMLUtil.setNodeValue(element2.getElementsByTagName("extension").item(0), "extension", map.getExtension());
-		XMLUtil.setNodeValue(element2.getElementsByTagName("mime-type").item(0), "mime-type", map.getMimeType());
-			
-		isWebAppDirty = true;
-	}
-
-	/**
-	 * Removes the mime mapping at the specified index.
-	 *
-	 * @param index int
-	 */
-	public void removeMimeMapping(int index) {
-		Element element = webAppDocument.getDocumentElement();
-		NodeList list = element.getElementsByTagName("mime-mapping");
-		Node node = list.item(index);
-		element.removeChild(node);
-		isWebAppDirty = true;
-	}
-	
-	/**
-	 * Saves the Web app document.
-	 *
-	 * @param path a path
-	 * @param forceDirty true to force a save
-	 * @throws IOException if anything goes wrong
-	 */
-	public void save(String path, boolean forceDirty) throws IOException {
-		if (forceDirty || isWebAppDirty)
-			XMLUtil.save(path, webAppDocument);
-	}
-	
-	/**
-	 * Saves the Web app document.
-	 *
-	 * @param file a file
-	 * @param monitor a progress monitor
-	 * @throws Exception if anything goes wrong 
-	 */
-	public void save(IFile file, IProgressMonitor monitor) throws Exception {
-		byte[] data = XMLUtil.getContents(webAppDocument);
-		InputStream in = null;
-		try {
-			in = new ByteArrayInputStream(data);
-			if (file.exists())
-				file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-		} catch (Exception e) {
-			// ignore
-		} finally {
-			try {
-				in.close();
-			} catch (Exception e) {
-				// ignore
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebModule.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebModule.java
deleted file mode 100644
index 8117169..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebModule.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.jst.server.tomcat.core.internal;
-/**
- * A Web module.
- */
-public class WebModule implements ITomcatWebModule {
-	private String docBase;
-	private String path;
-	private String memento;
-	private boolean reloadable;
-
-	/**
-	 * WebModule constructor comment.
-	 * 
-	 * @param path a path
-	 * @param docBase a document base
-	 * @param memento a memento
-	 * @param reloadable <code>true</code> if reloadable
-	 */
-	public WebModule(String path, String docBase, String memento, boolean reloadable) {
-		super();
-		this.path = path;
-		this.docBase = docBase;
-		this.memento = memento;
-		this.reloadable = reloadable;
-	}
-
-	/**
-	 * Get the document base.
-	 *
-	 * @return java.lang.String
-	 */
-	public String getDocumentBase() {
-		return docBase;
-	}
-
-	/**
-	 * Return the path. (context root)
-	 *
-	 * @return java.lang.String
-	 */
-	public String getPath() {
-		return path;
-	}
-
-	/**
-	 * Return the memento.
-	 *
-	 * @return java.lang.String
-	 */
-	public String getMemento() {
-		return memento;
-	}
-
-	/**
-	 * Return true if the web module is auto-reloadable.
-	 *
-	 * @return java.lang.String
-	 */
-	public boolean isReloadable() {
-		return reloadable;
-	}
-	
-	/**
-	 * @see Object#equals(Object)
-	 */
-	public boolean equals(Object obj) {
-		if (!(obj instanceof WebModule))
-			return false;
-		
-		WebModule wm = (WebModule) obj;
-		if (!getDocumentBase().equals(wm.getDocumentBase()))
-			return false;
-		if (!getPath().equals(wm.getPath()))
-			return false;
-		if (!getMemento().equals(wm.getMemento()))
-			return false;
-		return true;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/AddMimeMappingCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/AddMimeMappingCommand.java
deleted file mode 100644
index 8e8b296..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/AddMimeMappingCommand.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatConfigurationWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.MimeMapping;
-/**
- * Command to add a mime mapping.
- */
-public class AddMimeMappingCommand extends ConfigurationCommand {
-	protected MimeMapping map;
-
-	/**
-	 * AddMimeMappingCommand constructor.
-	 * 
-	 * @param configuration a tomcat configuration
-	 * @param map a mime mapping
-	 */
-	public AddMimeMappingCommand(ITomcatConfigurationWorkingCopy configuration, MimeMapping map) {
-		super(configuration);
-		this.map = map;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		configuration.addMimeMapping(0, map);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.configurationEditorActionAddMimeMappingDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.configurationEditorActionAddMimeMapping;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		configuration.removeMimeMapping(0);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/AddWebModuleCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/AddWebModuleCommand.java
deleted file mode 100644
index db23ed8..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/AddWebModuleCommand.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatConfigurationWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.WebModule;
-/**
- * Command to add a web module.
- */
-public class AddWebModuleCommand extends ConfigurationCommand {
-	protected WebModule module;
-	protected int modules = -1;
-
-	/**
-	 * AddWebModuleCommand constructor comment.
-	 * 
-	 * @param configuration a tomcat configuration
-	 * @param module a web module
-	 */
-	public AddWebModuleCommand(ITomcatConfigurationWorkingCopy configuration, WebModule module) {
-		super(configuration);
-		this.module = module;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		modules = configuration.getWebModules().size();
-		configuration.addWebModule(-1, module);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.configurationEditorActionAddWebModuleDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.configurationEditorActionAddWebModule;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		configuration.removeWebModule(modules);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ConfigurationCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ConfigurationCommand.java
deleted file mode 100644
index 783cde2..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ConfigurationCommand.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatConfigurationWorkingCopy;
-import org.eclipse.wst.server.core.util.Task;
-/**
- * Configuration command.
- */
-public abstract class ConfigurationCommand extends Task {
-	protected ITomcatConfigurationWorkingCopy configuration;
-
-	/**
-	 * ConfigurationCommand constructor comment.
-	 * 
-	 * @param configuration a Tomcat configuration
-	 */
-	public ConfigurationCommand(ITomcatConfigurationWorkingCopy configuration) {
-		super();
-		this.configuration = configuration;
-	}
-
-	/**
-	 * Returns true if this command can be undone.
-	 * @return boolean
-	 */
-	public boolean canUndo() {
-		return true;
-	}
-	
-	public abstract boolean execute();
-	
-	public void execute(IProgressMonitor monitor) {
-		execute();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/FixModuleContextRootTask.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/FixModuleContextRootTask.java
deleted file mode 100644
index 9eb9ff5..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/FixModuleContextRootTask.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*******************************************************************************
- * 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.server.tomcat.core.internal.*;
-import org.eclipse.osgi.util.NLS;
-
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IOptionalTask;
-import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.util.Task;
-/**
- * Task to fix a context root on a web module.
- */
-public class FixModuleContextRootTask extends Task implements IOptionalTask {
-	protected int index;
-	protected WebModule module;
-	protected IModule webModule;
-	protected String contextRoot;
-
-	/**
-	 * FixModuleContextRootTask constructor.
-	 * 
-	 * @param webModule
-	 * @param index
-	 * @param contextRoot
-	 */
-	public FixModuleContextRootTask(IModule webModule, int index, String contextRoot) {
-		super();
-		this.webModule = webModule;
-		this.index = index;
-		this.contextRoot = contextRoot;
-	}
-
-	/**
-	 * Execute the command.
-	 * 
-	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 */
-	public void execute(IProgressMonitor monitor) throws CoreException {
-		IServerWorkingCopy wc = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
-		TomcatServer server = (TomcatServer) wc.getAdapter(TomcatServer.class);
-		TomcatConfiguration configuration = server.getTomcatConfiguration();
-		if (configuration.getWebModules().size() <= index)
-			return;
-		module = (WebModule) configuration.getWebModules().get(index);
-		if (contextRoot != null && !contextRoot.startsWith("/"))
-			contextRoot = "/" + contextRoot;
-		configuration.modifyWebModule(index, module.getDocumentBase(), contextRoot, module.isReloadable());
-		wc.save(true, monitor);
-	}
-
-	/**
-	 * Returns this command's description.
-	 * 
-	 * @return String
-	 */
-	public String getDescription() {
-		return Messages.fixModuleContextRootDescription;
-	}
-
-	/**
-	 * Returns this command's name.
-	 * 
-	 * @return String
-	 */
-	public String getName() {
-		return NLS.bind(Messages.fixModuleContextRoot, webModule.getName());
-	}
-
-	public int getStatus() {
-		return IOptionalTask.TASK_PREFERRED;
-	}
-
-	public int getOrder() {
-		return 0;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ModifyMimeMappingCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ModifyMimeMappingCommand.java
deleted file mode 100644
index 50908c6..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ModifyMimeMappingCommand.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatConfigurationWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.MimeMapping;
-/**
- * Command to change a mime type extension.
- */
-public class ModifyMimeMappingCommand extends ConfigurationCommand {
-	protected int index;
-	protected MimeMapping oldMap;
-	protected MimeMapping newMap;
-
-	/**
-	 * A command to modify a mime mapping.
-	 * 
-	 * @param configuration a tomcat configuration
-	 * @param index an index
-	 * @param map a mime mapping
-	 */
-	public ModifyMimeMappingCommand(ITomcatConfigurationWorkingCopy configuration, int index, MimeMapping map) {
-		super(configuration);
-		this.index = index;
-		newMap = map;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		oldMap = (MimeMapping) configuration.getMimeMappings().get(index);
-		configuration.modifyMimeMapping(index, newMap);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.configurationEditorActionModifyMimeMappingDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.configurationEditorActionModifyMimeMapping;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		configuration.modifyMimeMapping(index, oldMap);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ModifyPortCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ModifyPortCommand.java
deleted file mode 100644
index 68d674c..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ModifyPortCommand.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import java.util.Iterator;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatConfigurationWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.wst.server.core.ServerPort;
-/**
- * Command to change the configuration port.
- */
-public class ModifyPortCommand extends ConfigurationCommand {
-	protected String id;
-	protected int port;
-	protected int oldPort;
-
-	/**
-	 * ModifyPortCommand constructor.
-	 * 
-	 * @param configuration a Tomcat configuration
-	 * @param id a port id
-	 * @param port new port number
-	 */
-	public ModifyPortCommand(ITomcatConfigurationWorkingCopy configuration, String id, int port) {
-		super(configuration);
-		this.id = id;
-		this.port = port;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		// find old port number
-		Iterator iterator = configuration.getServerPorts().iterator();
-		while (iterator.hasNext()) {
-			ServerPort temp = (ServerPort) iterator.next();
-			if (id.equals(temp.getId()))
-				oldPort = temp.getPort();
-		}
-	
-		// make the change
-		configuration.modifyServerPort(id, port);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.configurationEditorActionModifyPortDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.configurationEditorActionModifyPort;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		configuration.modifyServerPort(id, oldPort);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ModifyWebModuleCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ModifyWebModuleCommand.java
deleted file mode 100644
index e586359..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ModifyWebModuleCommand.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatConfigurationWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.WebModule;
-/**
- * Command to change a web module.
- */
-public class ModifyWebModuleCommand extends ConfigurationCommand {
-	protected int index;
-	protected WebModule oldModule;
-	protected WebModule newModule;
-
-	public ModifyWebModuleCommand(ITomcatConfigurationWorkingCopy configuration, int index, WebModule module) {
-		super(configuration);
-		this.index = index;
-		newModule = module;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		oldModule = (WebModule) configuration.getWebModules().get(index);
-		configuration.modifyWebModule(index, newModule.getDocumentBase(), newModule.getPath(), newModule.isReloadable());
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.configurationEditorActionModifyWebModuleDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.configurationEditorActionModifyWebModule;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		configuration.modifyWebModule(index, oldModule.getDocumentBase(), oldModule.getPath(), oldModule.isReloadable());
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/RemoveMimeMappingCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/RemoveMimeMappingCommand.java
deleted file mode 100644
index 2eb23c4..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/RemoveMimeMappingCommand.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatConfigurationWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.MimeMapping;
-/**
- * Command to remove a mime mapping.
- */
-public class RemoveMimeMappingCommand extends ConfigurationCommand {
-	protected int index;
-	protected MimeMapping mapping;
-
-	/**
-	 * RemoveMimeMappingCommand constructor.
-	 * 
-	 * @param configuration a tomcat configuration
-	 * @param index an index
-	 */
-	public RemoveMimeMappingCommand(ITomcatConfigurationWorkingCopy configuration, int index) {
-		super(configuration);
-		this.index = index;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		mapping = (MimeMapping) configuration.getMimeMappings().get(index);
-		configuration.removeMimeMapping(index);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.configurationEditorActionRemoveMimeMappingDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.configurationEditorActionRemoveMimeMapping;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		configuration.addMimeMapping(index, mapping);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/RemoveWebModuleCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/RemoveWebModuleCommand.java
deleted file mode 100644
index 2afec4d..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/RemoveWebModuleCommand.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatConfigurationWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.WebModule;
-import org.eclipse.osgi.util.NLS;
-/**
- * Command to remove a web module.
- */
-public class RemoveWebModuleCommand extends ConfigurationCommand {
-	protected int index;
-	protected WebModule module;
-
-	/**
-	 * RemoveWebModuleCommand constructor comment.
-	 * 
-	 * @param configuration a tomcat configuration
-	 * @param index an index
-	 */
-	public RemoveWebModuleCommand(ITomcatConfigurationWorkingCopy configuration, int index) {
-		super(configuration);
-		this.index = index;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		module = (WebModule) configuration.getWebModules().get(index);
-		configuration.removeWebModule(index);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		if (module == null)
-			module = (WebModule) configuration.getWebModules().get(index);
-		return NLS.bind(Messages.configurationEditorActionRemoveWebModuleDescription, module.getPath());
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.configurationEditorActionRemoveWebModule;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		configuration.addWebModule(index, module);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/RemoveWebModuleTask.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/RemoveWebModuleTask.java
deleted file mode 100644
index 8f379ea..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/RemoveWebModuleTask.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.TomcatConfiguration;
-import org.eclipse.jst.server.tomcat.core.internal.TomcatServer;
-import org.eclipse.jst.server.tomcat.core.internal.WebModule;
-import org.eclipse.osgi.util.NLS;
-
-import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.util.Task;
-/**
- * Task to remove a web module.
- */
-public class RemoveWebModuleTask extends Task {
-	protected int index;
-	protected WebModule module;
-
-	/**
-	 * RemoveWebModuleTask constructor comment.
-	 * 
-	 * @param index
-	 */
-	public RemoveWebModuleTask(int index) {
-		super();
-		this.index = index;
-	}
-
-	/**
-	 * Execute the command.
-	 * 
-	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 */
-	public void execute(IProgressMonitor monitor) throws CoreException {
-		IServerWorkingCopy wc = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
-		TomcatServer server = (TomcatServer) wc.getAdapter(TomcatServer.class);
-		TomcatConfiguration configuration = server.getTomcatConfiguration();
-		if (configuration.getWebModules().size() <= index)
-			return;
-		module = (WebModule) configuration.getWebModules().get(index);
-		configuration.removeWebModule(index);
-	}
-
-	/**
-	 * Returns this command's description.
-	 * 
-	 * @return String
-	 */
-	public String getDescription() {
-		if (module == null) {
-			try {
-				IServerWorkingCopy wc = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
-				TomcatServer server = (TomcatServer) wc.getAdapter(TomcatServer.class);
-				TomcatConfiguration configuration = server.getTomcatConfiguration();
-				module = (WebModule) configuration.getWebModules().get(index);
-			} catch (Exception e) {
-				// ignore
-			}
-		}
-		if (module == null)
-			return NLS.bind(Messages.configurationEditorActionRemoveWebModuleDescription, "<>");
-		
-		return NLS.bind(Messages.configurationEditorActionRemoveWebModuleDescription, module.getPath());
-	}
-
-	/**
-	 * Returns this command's name.
-	 * 
-	 * @return String
-	 */
-	public String getName() {
-		return Messages.configurationEditorActionRemoveWebModule;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		try {
-			IServerWorkingCopy wc = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
-			TomcatServer server = (TomcatServer) wc.getAdapter(TomcatServer.class);
-			TomcatConfiguration configuration = server.getTomcatConfiguration();
-			configuration.addWebModule(index, module);
-		} catch (Exception e) {
-			// ignore
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ServerCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ServerCommand.java
deleted file mode 100644
index eea99b0..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/ServerCommand.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatServerWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.TomcatServer;
-import org.eclipse.wst.server.core.util.Task;
-/**
- * A command on a Tomcat server.
- */
-public abstract class ServerCommand extends Task {
-	protected TomcatServer server;
-
-	/**
-	 * ServerCommand constructor comment.
-	 * 
-	 * @param server a Tomcat server
-	 */
-	public ServerCommand(ITomcatServerWorkingCopy server) {
-		super();
-		this.server = (TomcatServer) server;
-	}
-	
-	/**
-	 * Returns true if this command can be undone.
-	 * @return boolean
-	 */
-	public boolean canUndo() {
-		return true;
-	}
-	
-	public abstract boolean execute();
-	
-	public void execute(IProgressMonitor monitor) {
-		execute();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetDebugModeCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetDebugModeCommand.java
deleted file mode 100644
index 8125eb4..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetDebugModeCommand.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatServerWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-/**
- * Command to change the server debug mode.
- */
-public class SetDebugModeCommand extends ServerCommand {
-	protected boolean debug;
-	protected boolean oldDebug;
-
-	/**
-	 * SetDebugModeCommand constructor comment.
-	 * 
-	 * @param server a Tomcat server
-	 * @param debug <code>true</code> for debug mode
-	 */
-	public SetDebugModeCommand(ITomcatServerWorkingCopy server, boolean debug) {
-		super(server);
-		this.debug = debug;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		oldDebug = server.isDebug();
-		server.setDebug(debug);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.serverEditorActionSetDebugModeDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.serverEditorActionSetDebugMode;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		server.setDebug(oldDebug);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetSecureCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetSecureCommand.java
deleted file mode 100644
index 1345fe7..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetSecureCommand.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatServerWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-/**
- * Command to change the server security option.
- */
-public class SetSecureCommand extends ServerCommand {
-	protected boolean secure;
-	protected boolean oldSecure;
-
-	/**
-	 * SetSecureCommand constructor comment.
-	 * 
-	 * @param server a Tomcat server
-	 * @param secure <code>true</code> for security on
-	 */
-	public SetSecureCommand(ITomcatServerWorkingCopy server, boolean secure) {
-		super(server);
-		this.secure = secure;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		oldSecure = server.isSecure();
-		server.setSecure(secure);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.serverEditorActionSetSecureDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.serverEditorActionSetSecure;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		server.setSecure(oldSecure);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetTestEnvironmentCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetTestEnvironmentCommand.java
deleted file mode 100644
index f5e5049..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetTestEnvironmentCommand.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatServerWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-/**
- * Command to change the server debug mode.
- */
-public class SetTestEnvironmentCommand extends ServerCommand {
-	protected boolean te;
-	protected boolean oldTe;
-
-	/**
-	 * SetTestEnvironmentCommand constructor comment.
-	 * 
-	 * @param server a Tomcat server
-	 * @param te <code>true</code> for a test environment.
-	 */
-	public SetTestEnvironmentCommand(ITomcatServerWorkingCopy server, boolean te) {
-		super(server);
-		this.te = te;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		oldTe = server.isTestEnvironment();
-		server.setTestEnvironment(te);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.serverEditorActionSetTestEnvironmentDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.serverEditorActionSetTestEnvironment;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		server.setTestEnvironment(oldTe);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetWebModulePathCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetWebModulePathCommand.java
deleted file mode 100644
index 49f337d..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetWebModulePathCommand.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatConfigurationWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.WebModule;
-import org.eclipse.osgi.util.NLS;
-/**
- * Command to modify the path of a Web module.
- */
-public class SetWebModulePathCommand extends ConfigurationCommand {
-	protected int index;
-	protected WebModule oldModule;
-	protected String path;
-
-	/**
-	 * SetWebModulePathCommand constructor comment.
-	 * 
-	 * @param configuration a tomcat configuration
-	 * @param index an index
-	 * @param contextRoot the context root
-	 */
-	public SetWebModulePathCommand(ITomcatConfigurationWorkingCopy configuration, int index, String contextRoot) {
-		super(configuration);
-		this.index = index;
-		this.path = contextRoot;
-	}
-
-	/**
-	 * Execute the command.
-	 * @return boolean
-	 */
-	public boolean execute() {
-		oldModule = (WebModule) configuration.getWebModules().get(index);
-		configuration.removeWebModule(index);
-		
-		WebModule module = new WebModule(path, oldModule.getDocumentBase(), oldModule.getMemento(), oldModule.isReloadable());
-		configuration.addWebModule(index, module);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		if (oldModule == null)
-			oldModule = (WebModule) configuration.getWebModules().get(index);
-		
-		return NLS.bind(Messages.configurationEditorActionEditWebModuleDescription, oldModule.getPath(), path);
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.configurationEditorActionEditWebModulePath;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		configuration.removeWebModule(index);
-		configuration.addWebModule(index, oldModule);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetWebModulePathTask.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetWebModulePathTask.java
deleted file mode 100644
index 266efe9..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetWebModulePathTask.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.TomcatConfiguration;
-import org.eclipse.jst.server.tomcat.core.internal.TomcatServer;
-import org.eclipse.jst.server.tomcat.core.internal.WebModule;
-import org.eclipse.osgi.util.NLS;
-
-import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.util.Task;
-/**
- * Task to modify the path of a Web module.
- */
-public class SetWebModulePathTask extends Task {
-	protected int index;
-	protected WebModule oldModule;
-	protected String path;
-
-	/**
-	 * SetWebModulePathTask constructor comment.
-	 * 
-	 * @param index
-	 * @param contextRoot
-	 */
-	public SetWebModulePathTask(int index, String contextRoot) {
-		super();
-		this.index = index;
-		this.path = contextRoot;
-	}
-
-	/**
-	 * Execute the command.
-	 * 
-	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 */
-	public void execute(IProgressMonitor monitor) throws CoreException {
-		IServerWorkingCopy wc = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
-		TomcatServer server = (TomcatServer) wc.getAdapter(TomcatServer.class);
-		TomcatConfiguration configuration = server.getTomcatConfiguration();
-		oldModule = (WebModule) configuration.getWebModules().get(index);
-		configuration.removeWebModule(index);
-		
-		WebModule module = new WebModule(path, oldModule.getDocumentBase(), oldModule.getMemento(), oldModule.isReloadable());
-		configuration.addWebModule(index, module);
-	}
-
-	/**
-	 * Returns this command's description.
-	 * 
-	 * @return String
-	 */
-	public String getDescription() {
-		if (oldModule == null) {
-			try {
-				IServerWorkingCopy wc = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
-				TomcatServer server = (TomcatServer) wc.getAdapter(TomcatServer.class);
-				TomcatConfiguration configuration = server.getTomcatConfiguration();
-				oldModule = (WebModule) configuration.getWebModules().get(index);
-			} catch (Exception e) {
-				// ignore
-			}
-		}
-		
-		if (oldModule == null)
-			return NLS.bind(Messages.configurationEditorActionEditWebModuleDescription, "<>", path);
-		
-		return NLS.bind(Messages.configurationEditorActionEditWebModuleDescription, oldModule.getPath(), path);
-	}
-
-	/**
-	 * Returns this command's name.
-	 * 
-	 * @return String
-	 */
-	public String getName() {
-		return Messages.configurationEditorActionEditWebModulePath;
-	}
-
-	/**
-	 * Undo the command.
-	 */
-	public void undo() {
-		try {
-			IServerWorkingCopy wc = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
-			TomcatServer server = (TomcatServer) wc.getAdapter(TomcatServer.class);
-			TomcatConfiguration configuration = server.getTomcatConfiguration();
-			configuration.removeWebModule(index);
-			configuration.addWebModule(index, oldModule);
-		} catch (Exception e) {
-			// ignore
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/Factory.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/Factory.java
deleted file mode 100644
index 27007aa..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/Factory.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml;
-
-import java.io.*;
-
-import org.w3c.dom.*;
-import org.xml.sax.InputSource;
-
-import org.eclipse.jst.server.tomcat.core.internal.Trace;
-/**
- * Factory for reading and writing from XML files.
- */
-public class Factory {
-	protected String packageName;
-	protected Document document;
-
-	public Factory() {
-		// do nothing
-	}
-	
-	protected Attr createAttribute(String s, Element element) {
-		Attr attr = document.createAttribute(s);
-		element.setAttributeNode(attr);
-		return attr;
-	}
-	
-	protected XMLElement createElement(int index, String s, Node node) {
-		if (index < 0)
-			return createElement(s, node);
-	
-		Element element = document.createElement(s);
-		try {
-			Node child = node.getFirstChild();
-			for (int i = 0; i < index; i++)
-				child = child.getNextSibling();
-	
-			node.insertBefore(element, child);
-		} catch (Exception e) {
-			node.appendChild(element);
-		}
-		return newInstance(element);
-	}
-	
-	protected XMLElement createElement(String s, Node node) {
-		Element element = document.createElement(s);
-		node.appendChild(element);
-		return newInstance(element);
-	}
-	
-	public byte[] getContents() throws IOException {
-		return XMLUtil.getContents(document);
-	}
-	
-	/**
-	 * 
-	 * @return org.w3c.dom.Document
-	 */
-	public Document getDocument() {
-		return document;
-	}
-
-	public String getPackageName() {
-		return packageName;
-	}
-
-	public XMLElement loadDocument(InputStream in) throws IOException {
-		try {
-			document = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
-			Element element = document.getDocumentElement();
-			return newInstance(element);
-		} catch (Exception exception) {
-			Trace.trace(Trace.WARNING, "Error loading document", exception);
-			throw new IOException("Could not load document");
-		}
-	}
-
-	protected XMLElement newInstance(Element element) {
-		String s = element.getNodeName();
-		try {
-			// change "web-app:test" to "WebAppTest"
-			s = s.substring(0, 1).toUpperCase() + s.substring(1);
-			int i = s.indexOf("-");
-			while (i >= 0) {
-				s = s.substring(0, i) + s.substring(i+1, i+2).toUpperCase() + s.substring(i+2);
-				i = s.indexOf("-");
-			}
-			i = s.indexOf(":");
-			while (i >= 0) {
-				s = s.substring(0, i) + s.substring(i+1, i+2).toUpperCase() + s.substring(i+2);
-				i = s.indexOf(":");
-			}
-	
-			// add package name
-			if (packageName != null)
-				s = packageName + "." + s;
-			Class class1 = Class.forName(s);
-	
-			XMLElement xmlElement = (XMLElement) class1.newInstance();
-			xmlElement.setElement(element);
-			xmlElement.setFactory(this);
-			return xmlElement;
-		} catch (Exception exception) {
-			// ignore
-		}
-		return null;
-	}
-	
-	public void save(String filename) throws IOException {
-		XMLUtil.save(filename, document);
-	}
-	
-	public void setDocument(Document d) {
-		document = d;
-	}
-	
-	public void setPackageName(String s) {
-		packageName = s;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLElement.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLElement.java
deleted file mode 100644
index 5ac618f..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLElement.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml;
-
-import org.w3c.dom.*;
-/**
- * An XML element.
- */
-public class XMLElement {
-	private Element xmlElement;
-	protected Factory factory;
-
-	public XMLElement() {
-		// do nothing
-	}
-
-	public Attr addAttribute(String s, String s1) {
-		Attr attr = factory.createAttribute(s, xmlElement);
-		attr.setValue(s1);
-		return attr;
-	}
-
-	public XMLElement createElement(int index, String s) {
-		return factory.createElement(index, s, xmlElement);
-	}
-
-	public XMLElement createElement(String s) {
-		return factory.createElement(s, xmlElement);
-	}
-
-	public XMLElement findElement(String s) {
-		NodeList nodelist = xmlElement.getElementsByTagName(s);
-		int i = nodelist == null ? 0 : nodelist.getLength();
-		for (int j = 0; j < i; j++) {
-			Node node = nodelist.item(j);
-			String s1 = node.getNodeName().trim();
-			if (s1.equals(s))
-				return factory.newInstance((Element) node);
-		}
-	
-		return createElement(s);
-	}
-
-	public XMLElement findElement(String s, int i) {
-		NodeList nodelist = xmlElement.getElementsByTagName(s);
-		int j = nodelist == null ? 0 : nodelist.getLength();
-		for (int k = 0; k < j; k++) {
-			Node node = nodelist.item(k);
-			String s1 = node.getNodeName().trim();
-			if (s1.equals(s) && k == i)
-				return factory.newInstance((Element) node);
-		}
-	
-		return createElement(s);
-	}
-
-	public String getAttributeValue(String s) {
-		Attr attr = xmlElement.getAttributeNode(s);
-		if (attr != null)
-			return attr.getValue();
-		
-		return null;
-	}
-	
-	public String getElementName() {
-		return xmlElement.getNodeName();
-	}
-	
-	public String getElementValue() {
-		return getElementValue(xmlElement);
-	}
-	
-	protected static String getElementValue(Element element) {
-		String s = element.getNodeValue();
-		if (s != null)
-			return s;
-		NodeList nodelist = element.getChildNodes();
-		for (int i = 0; i < nodelist.getLength(); i++)
-			if (nodelist.item(i) instanceof Text)
-				return ((Text) nodelist.item(i)).getData();
-	
-		return null;
-	}
-	
-	public Element getSubElement(String s) {
-		NodeList nodelist = xmlElement.getElementsByTagName(s);
-		int i = nodelist == null ? 0 : nodelist.getLength();
-		for (int j = 0; j < i; j++) {
-			Node node = nodelist.item(j);
-			String s1 = node.getNodeName().trim();
-			if (s1.equals(s))
-				return (Element) node;
-		}
-	
-		return null;
-	}
-
-	public String getSubElementValue(String s) {
-		Element element = getSubElement(s);
-		if (element == null)
-			return null;
-	
-		String value = getElementValue(element);
-		if (value == null)
-			return null;
-		
-		return value.trim();
-	}
-
-	public boolean removeAttribute(String s) {
-		try {
-			xmlElement.removeAttribute(s);
-			return true;
-		} catch (Exception ex) {
-			return false;
-		}
-	}
-
-	public boolean removeElement(String s, int i) {
-		NodeList nodelist = xmlElement.getElementsByTagName(s);
-		int j = nodelist == null ? 0 : nodelist.getLength();
-		for (int k = 0; k < j; k++) {
-			Node node = nodelist.item(k);
-			String s1 = node.getNodeName().trim();
-			if (s1.equals(s) && k == i) {
-				xmlElement.removeChild(node);
-				return true;
-			}
-		}
-	
-		return false;
-	}
-
-	public void setAttributeValue(String s, String s1) {
-		Attr attr = xmlElement.getAttributeNode(s);
-		if (attr == null)
-			attr = addAttribute(s, s1);
-		else
-			attr.setValue(s1);
-	}
-
-	void setElement(Element element) {
-		xmlElement = element;
-	}
-
-	protected static void setElementValue(Element element, String value) {
-		String s = element.getNodeValue();
-		if (s != null) {
-			element.setNodeValue(value);
-			return;
-		}
-		NodeList nodelist = element.getChildNodes();
-		for (int i = 0; i < nodelist.getLength(); i++)
-			if (nodelist.item(i) instanceof Text) {
-				Text text = (Text) nodelist.item(i);
-				text.setData(value);
-				return;
-			}
-	
-		return;
-	}
-
-	void setFactory(Factory factory1) {
-		factory = factory1;
-	}
-
-	public void setSubElementValue(String s, String value) {
-		Element element = getSubElement(s);
-		if (element == null) {
-			element = factory.document.createElement(s);
-			element.appendChild(factory.document.createTextNode("temp"));
-			xmlElement.appendChild(element);
-		}
-		setElementValue(element, value);
-	}
-
-	public int sizeOfElement(String s) {
-		NodeList nodelist = xmlElement.getElementsByTagName(s);
-		int i = nodelist == null ? 0 : nodelist.getLength();
-		return i;
-	}
-
-	public void updateElementValue(String s) {
-		try {
-			xmlElement.setNodeValue(s);
-		} catch (DOMException ex) {
-			NodeList nodelist = xmlElement.getChildNodes();
-			int i = nodelist == null ? 0 : nodelist.getLength();
-			if (i > 0) {
-				for (int j = 0; j < i; j++)
-					if (nodelist.item(j) instanceof Text) {
-						((Text) nodelist.item(j)).setData(s);
-						return;
-					}
-			} else {
-				xmlElement.appendChild(factory.document.createTextNode(s));
-			}
-		}
-	}
-	
-	public boolean hasChildNodes() {
-		return xmlElement.hasChildNodes();
-	}
-	
-	public void removeChildren()
-	{
-		while (xmlElement.hasChildNodes()) {
-			xmlElement.removeChild(xmlElement.getFirstChild());
-		}
-	}
-	
-	public void copyChildrenTo(XMLElement destination) {
-		NodeList nodelist = xmlElement.getChildNodes();
-		int len = nodelist == null ? 0 : nodelist.getLength();
-		for (int i = 0; i < len; i++) {
-			Node node = nodelist.item(i);
-			destination.importNode(node, true);
-		}
-	}
-	
-	void importNode(Node node, boolean deep) {
-		xmlElement.appendChild(xmlElement.getOwnerDocument().importNode(node, deep));
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLUtil.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLUtil.java
deleted file mode 100644
index 76d96f6..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLUtil.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml;
-
-import java.io.*;
-import java.util.*;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.eclipse.jst.server.tomcat.core.internal.Trace;
-import org.w3c.dom.*;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-/**
- * Utility class to create and read XML documents.
- */
-public class XMLUtil {
-	private static DocumentBuilder documentBuilder;
-
-	/**
-	 * XMLUtil constructor comment.
-	 */
-	public XMLUtil() {
-		super();
-	}
-	
-	public static DocumentBuilder getDocumentBuilder() {
-		if (documentBuilder == null)
-			try {
-				DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-				factory.setValidating(false);
-				factory.setNamespaceAware(false);
-				factory.setExpandEntityReferences(false);
-				//factory.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", new Boolean(false));
-				documentBuilder = factory.newDocumentBuilder();
-				documentBuilder.setEntityResolver(new EntityResolver() {
-					public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
-						return new InputSource(new ByteArrayInputStream(new byte[0]));
-					}
-				});
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Rrror creating document builder");
-			}
-
-		return documentBuilder;
-	}
-
-	/**
-	 * Create a child of the given node at the given index.
-	 *
-	 * @param doc a document
-	 * @param element an element
-	 * @param index an index
-	 * @param nodeName a node name
-	 * @return org.w3c.dom.Element
-	 */
-	public static Element createChildElement(Document doc, Element element, int index, String nodeName) {
-		Element element2 = doc.createElement(nodeName);
-		try {
-			NodeList childList = element.getElementsByTagName(nodeName);
-			Node child = childList.item(index);
-			element.insertBefore(element2, child);
-		} catch (Exception e) {
-			element.appendChild(element2);
-		}
-		return element2;
-	}
-
-	/**
-	 * Create a child of the given node.
-	 *
-	 * @param doc a document
-	 * @param node a node
-	 * @param nodeName a node name
-	 * @return org.w3c.dom.Element
-	 */
-	public static Element createChildElement(Document doc, Node node, String nodeName) {
-		Element element = doc.createElement(nodeName);
-		node.appendChild(element);
-		return element;
-	}
-
-	/*
-	 * Set the value of the given node to the given text.
-	 */
-	public static void createTextChildElement(Document doc, Node node, String name, String value) {
-		Element element = createChildElement(doc, node, name);
-		element.appendChild(doc.createTextNode(value));
-	}
-
-	/**
-	 * Return the attribute value.
-	 * @return java.lang.String
-	 * @param element org.w3c.dom.Element
-	 * @param attr java.lang.String
-	 */
-	public static String getAttributeValue(Element element, String attr) {
-		return element.getAttributeNode(attr).getValue();
-	}
-
-	public static byte[] getContents(Document document) throws IOException {
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		try {
-			print(new PrintStream(out, true, "UTF-8"), document);
-			return out.toByteArray();
-		} catch (Exception ex) {
-			throw new IOException(ex.getLocalizedMessage());
-		} finally {
-			if (out != null)
-				try {
-					out.close();
-				} catch (Exception e) {
-					// ignore
-				}
-		}
-	}
-
-	protected static String getDocumentTypeData(DocumentType doctype) {
-		String data = doctype.getName();
-		if (doctype.getPublicId() != null) {
-			data += " PUBLIC \"" + doctype.getPublicId() + "\"";
-			String systemId = doctype.getSystemId();
-			if (systemId == null)
-				systemId = "";
-			data += " \"" + systemId + "\"";
-		} else
-			data += " SYSTEM \"" + doctype.getSystemId() + "\"";
-	
-		return data;
-	}
-
-	/**
-	 * Return an iterator for the subelements.
-	 * @return java.util.Iterator
-	 * @param element org.w3c.dom.Element
-	 * @param name java.lang.String
-	 */
-	public static Iterator getNodeIterator(Element element, String name) {
-		List list = new ArrayList();
-		NodeList nodeList = element.getElementsByTagName(name);
-	
-		int length = nodeList.getLength();
-		for (int i = 0; i < length; i++)
-			list.add(nodeList.item(i));
-	
-		return list.iterator();
-	}
-
-	/**
-	 * Get the value of this node. Will return "" instead of null.
-	 * @return java.lang.String
-	 * @param node org.w3c.dom.Node
-	 */
-	public static String getNodeValue(Node node) {
-		NodeList nodeList = node.getChildNodes();
-	
-		int length = nodeList.getLength();
-		for (int i = 0; i < length; i++) {
-			Node n = nodeList.item(i);
-			if (n instanceof Text) {
-				Text t = (Text) n;
-				return t.getNodeValue();
-			}
-		}
-		return "";
-	}
-
-	/*
-	 * Get the value of a subnode.
-
-	 * @return java.lang.String
-	 */
-	public static String getSubNodeValue(Element element, String name) {
-		NodeList nodeList = element.getElementsByTagName(name);
-		return getNodeValue(nodeList.item(0)).trim();
-	}
-
-	/*
-	 * Insert the given text.
-	 */
-	public static void insertText(Document doc, Node node, String text) {
-		node.appendChild(doc.createCDATASection(text));
-	}
-
-	protected static String normalize(String s) {
-		StringBuffer stringbuffer = new StringBuffer();
-		int i = s == null ? 0 : s.length();
-		for (int j = 0; j < i; j++) {
-			char c = s.charAt(j);
-			switch (c) {
-				case 60 : /* '<' */
-					stringbuffer.append("&lt;");
-					break;
-	
-				case 62 : /* '>' */
-					stringbuffer.append("&gt;");
-					break;
-	
-				case 38 : /* '&' */
-					stringbuffer.append("&amp;");
-					break;
-	
-				case 34 : /* '"' */
-					stringbuffer.append("&quot;");
-					break;
-	
-				case 10 : /* '\n' */
-				case 13 : /* '\r' */
-				default :
-					stringbuffer.append(c);
-					break;
-	
-			}
-		}
-	
-		return stringbuffer.toString();
-	}
-
-	protected static void print(PrintStream out, Node node) {
-		if (node == null)
-			return;
-		short type = node.getNodeType();
-		switch (type) {
-			case Node.DOCUMENT_NODE: {
-				out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-				//out.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
-				NodeList nodelist = node.getChildNodes();
-				int size = nodelist.getLength();
-				for (int i = 0; i < size; i++)
-					print(out, nodelist.item(i));
-				break;
-			}
-	
-			case Node.DOCUMENT_TYPE_NODE: {
-				DocumentType docType = (DocumentType) node;
-				out.print("<!DOCTYPE " + getDocumentTypeData(docType) + ">\n");
-				break;
-			}
-	
-			case Node.ELEMENT_NODE: {
-				out.print('<');
-				out.print(node.getNodeName());
-				NamedNodeMap map = node.getAttributes();
-				if (map != null) {
-					int size = map.getLength();
-					for (int i = 0; i < size; i++) {
-						Attr attr = (Attr) map.item(i);
-						out.print(' ');
-						out.print(attr.getNodeName());
-						out.print("=\"");
-						out.print(normalize(attr.getNodeValue()));
-						out.print('"');
-					}
-				}
-	
-				if (!node.hasChildNodes())
-					out.print("/>");
-				else {
-					out.print('>');
-					NodeList nodelist = node.getChildNodes();
-					int numChildren = nodelist.getLength();
-					for (int i = 0; i < numChildren; i++)
-						print(out, nodelist.item(i));
-	
-					out.print("</");
-					out.print(node.getNodeName());
-					out.print('>');
-				}
-				break;
-			}
-	
-			case Node.ENTITY_REFERENCE_NODE: {
-				NodeList nodelist = node.getChildNodes();
-				if (nodelist != null) {
-					int size = nodelist.getLength();
-					for (int i = 0; i < size; i++)
-						print(out, nodelist.item(i));
-	
-				}
-				break;
-			}
-	
-			case Node.CDATA_SECTION_NODE: {
-				out.print(normalize(node.getNodeValue()));
-				break;
-			}
-	
-			case Node.TEXT_NODE: {
-				out.print(normalize(node.getNodeValue()));
-				break;
-			}
-	
-			case Node.PROCESSING_INSTRUCTION_NODE: {
-				out.print("<?");
-				out.print(node.getNodeName());
-				String s = node.getNodeValue();
-				if (s != null && s.length() > 0) {
-					out.print(' ');
-					out.print(s);
-				}
-				out.print("?>");
-				break;
-			}
-	
-			case Node.COMMENT_NODE: {
-				out.print("<!--");
-				out.print(node.getNodeValue());
-				out.print("-->");
-				break;
-			}
-	
-			default: {
-				out.print(normalize(node.getNodeValue()));
-				break;
-			}
-		}
-		out.flush();
-	}
-
-	public static void save(String filename, Document document) throws IOException {
-		PrintStream out = null;
-		try {
-			out = new PrintStream(new BufferedOutputStream(new FileOutputStream(filename)), true, "UTF-8");
-			//traceNode(document, "");
-			print(out, document);
-		} catch (Exception ex) {
-			throw new IOException(ex.getLocalizedMessage());
-		} finally {
-			if (out != null)
-				try {
-					out.close();
-				} catch (Exception e) {
-					// ignore
-				}
-		}
-	}
-
-	/*
-	 * Set the value of the subnode
-	 *
-	 * @param name java.lang.String
-	 * @param value java.lang.String
-	 */
-	public static void setNodeValue(Node node, String name, String value) {
-		String s = node.getNodeValue();
-		if (s != null) {
-			node.setNodeValue(value);
-			return;
-		}
-		NodeList nodelist = node.getChildNodes();
-		for (int i = 0; i < nodelist.getLength(); i++) {
-			if (nodelist.item(i) instanceof Text) {
-				Text text = (Text) nodelist.item(i);
-				text.setData(value);
-				return;
-			}
-		}
-		return;
-	}
-
-	public static String toString(Document document) {
-		PrintStream out = null;
-		try {
-			ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
-			out = new PrintStream(baos);
-			print(out, document);
-			return new String(baos.toByteArray(), "UTF-8");
-		} catch (Exception ex) {
-			// ignore
-		} finally {
-			if (out != null)
-				try {
-					out.close();
-				} catch (Exception e) {
-					// ignore
-				}
-		}
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Connector.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Connector.java
deleted file mode 100644
index a0324f2..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Connector.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server32;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Connector extends XMLElement {
-	public Connector() {
-		// do nothing
-	}
-	
-	public String getClassName() {
-		return getAttributeValue("className");
-	}
-	
-	public Parameter getParameter(int index) {
-		return (Parameter) findElement("Parameter", index);
-	}
-	
-	public int getParameterCount() {
-		return sizeOfElement("Parameter");
-	}
-	
-	public void setClassName(String className) {
-		setAttributeValue("className", className);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Context.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Context.java
deleted file mode 100644
index b5568e8..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Context.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server32;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Context extends XMLElement {
-	public Context() {
-		// do nothing
-	}
-	
-	public String getCrossContext() {
-		return getAttributeValue("crossContext");
-	}
-	
-	public String getDebug() {
-		return getAttributeValue("debug");
-	}
-	
-	public String getDocBase() {
-		return getAttributeValue("docBase");
-	}
-	
-	public String getPath() {
-		return getAttributeValue("path");
-	}
-	
-	public String getReloadable() {
-		return getAttributeValue("reloadable");
-	}
-	
-	public String getSource() {
-		return getAttributeValue("source");
-	}
-	
-	public String getTrusted() {
-		return getAttributeValue("trusted");
-	}
-	
-	public void setCrossContext(String crossContext) {
-		setAttributeValue("crossContext", crossContext);
-	}
-	
-	public void setDebug(String debug) {
-		setAttributeValue("debug", debug);
-	}
-	
-	public void setDocBase(String docBase) {
-		setAttributeValue("docBase", docBase);
-	}
-	
-	public void setPath(String path) {
-		setAttributeValue("path", path);
-	}
-	
-	public void setReloadable(String reloadable) {
-		setAttributeValue("reloadable", reloadable);
-	}
-	
-	public void setSource(String source) {
-		setAttributeValue("source", source);
-	}
-	
-	public void setTrusted(String trusted) {
-		setAttributeValue("trusted", trusted);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/ContextManager.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/ContextManager.java
deleted file mode 100644
index e7829d1..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/ContextManager.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server32;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class ContextManager extends XMLElement {
-	public ContextManager() {
-		// do nothing
-	}
-	
-	public Connector getConnector(int index) {
-		return (Connector) findElement("Connector", index);
-	}
-	
-	public int getConnectorCount() {
-		return sizeOfElement("Connector");
-	}
-	
-	public Context getContext(int index) {
-		return (Context) findElement("Context", index);
-	}
-	
-	public int getContextCount() {
-		return sizeOfElement("Context");
-	}
-	
-	public int getContextInterceptorCount() {
-		return sizeOfElement("ContextInterceptor");
-	}
-	
-	public String getDebug() {
-		return getAttributeValue("debug");
-	}
-	
-	public String getHome() {
-		return getAttributeValue("home");
-	}
-	
-	public int getRequestInterceptorCount() {
-		return sizeOfElement("RequestInterceptor");
-	}
-	
-	public String getShowDebugInfo() {
-		return getAttributeValue("showDebugInfo");
-	}
-	
-	public String getWorkDir() {
-		return getAttributeValue("workDir");
-	}
-	
-	public void setDebug(String debug) {
-		setAttributeValue("debug", debug);
-	}
-	
-	public void setHome(String home) {
-		setAttributeValue("home", home);
-	}
-	
-	public void setShowDebugInfo(String showDebugInfo) {
-		setAttributeValue("showDebugInfo", showDebugInfo);
-	}
-	
-	public void setWorkDir(String workDir) {
-		setAttributeValue("workDir", workDir);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Parameter.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Parameter.java
deleted file mode 100644
index 1608cf1..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Parameter.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server32;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Parameter extends XMLElement {
-	public Parameter() {
-		// do nothing
-	}
-	
-	public String getName() {
-		return getAttributeValue("name");
-	}
-	
-	public String getValue() {
-		return getAttributeValue("value");
-	}
-	
-	public void setName(String name) {
-		setAttributeValue("name", name);
-	}
-	
-	public void setValue(String value) {
-		setAttributeValue("value", value);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Server.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Server.java
deleted file mode 100644
index 5d8cdd0..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/Server.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server32;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Server extends XMLElement {
-	public Server() {
-		// do nothing
-	}
-	
-	public ContextManager getContextManager() {
-		return (ContextManager) findElement("ContextManager");
-	}
-	
-	public int getLoggerCount() {
-		return sizeOfElement("Logger");
-	}
-
-	public String getName() {
-		return getAttributeValue("name");
-	}
-	
-	public void setName(String name) {
-		setAttributeValue("name", name);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Connector.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Connector.java
deleted file mode 100644
index 79bf6c9..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Connector.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server40;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Connector extends XMLElement {
-	public Connector() {
-		// do nothing
-	}
-
-	public String getAcceptCount() {
-		return getAttributeValue("acceptCount");
-	}
-
-	public String getClassName() {
-		return getAttributeValue("className");
-	}
-
-	public String getDebug() {
-		return getAttributeValue("debug");
-	}
-
-	public String getMaxProcessors() {
-		return getAttributeValue("maxProcessors");
-	}
-
-	public String getMinProcessors() {
-		return getAttributeValue("minProcessors");
-	}
-
-	public String getPort() {
-		return getAttributeValue("port");
-	}
-	
-	public String getSecure() {
-		return getAttributeValue("secure");
-	}
-	
-	public String getProtocol() {
-		return getAttributeValue("protocol");
-	}
-
-	public String getProtocolHandlerClassName() {
-		return getAttributeValue("protocolHandlerClassName");
-	}
-
-	public void setAcceptCount(String acceptCount) {
-		setAttributeValue("acceptCount", acceptCount);
-	}
-
-	public void setClassName(String className) {
-		setAttributeValue("className", className);
-	}
-
-	public void setDebug(String debug) {
-		setAttributeValue("debug", debug);
-	}
-
-	public void setMaxProcessors(String maxProcessors) {
-		setAttributeValue("maxProcessors", maxProcessors);
-	}
-
-	public void setMinProcessors(String minProcessors) {
-		setAttributeValue("minProcessors", minProcessors);
-	}
-
-	public void setPort(String port) {
-		setAttributeValue("port", port);
-	}
-	
-	public void setProtocolHandlerClassName(String protocolHandlerClassName) {
-		setAttributeValue("protocolHandlerClassName", protocolHandlerClassName);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Context.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Context.java
deleted file mode 100644
index b597c89..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Context.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server40;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Context extends XMLElement {
-	public Context() {
-		// do nothing
-	}
-
-	public String getDebug() {
-		return getAttributeValue("debug");
-	}
-
-	public String getDocBase() {
-		return getAttributeValue("docBase");
-	}
-
-	public String getPath() {
-		return getAttributeValue("path");
-	}
-
-	public String getReloadable() {
-		return getAttributeValue("reloadable");
-	}
-
-	public String getSource() {
-		return getAttributeValue("source");
-	}
-
-	public void setDebug(String debug) {
-		setAttributeValue("debug", debug);
-	}
-
-	public void setDocBase(String docBase) {
-		setAttributeValue("docBase", docBase);
-	}
-
-	public void setPath(String path) {
-		setAttributeValue("path", path);
-	}
-
-	public void setReloadable(String reloadable) {
-		setAttributeValue("reloadable", reloadable);
-	}
-
-	public void setSource(String source) {
-		setAttributeValue("source", source);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Engine.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Engine.java
deleted file mode 100644
index 166ce0b..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Engine.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server40;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Engine extends XMLElement {
-	public Engine() {
-		// do nothing
-	}
-	
-	public String getAppBase() {
-		return getAttributeValue("appBase");
-	}
-	
-	public String getClassName() {
-		return getAttributeValue("className");
-	}
-	
-	public String getDebug() {
-		return getAttributeValue("debug");
-	}
-	
-	public String getDefaultHost() {
-		return getAttributeValue("defaultHost");
-	}
-	
-	public Host getHost() {
-		return (Host) findElement("Host");
-	}
-	
-	public String getName() {
-		return getAttributeValue("name");
-	}
-	
-	public void setAppBase(String appBase) {
-		setAttributeValue("appBase", appBase);
-	}
-	
-	public void setClassName(String className) {
-		setAttributeValue("className", className);
-	}
-	
-	public void setDebug(String debug) {
-		setAttributeValue("debug", debug);
-	}
-	
-	public void setDefaultHost(String defaultHost) {
-		setAttributeValue("defaultHost", defaultHost);
-	}
-	
-	public void setName(String name) {
-		setAttributeValue("name", name);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Host.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Host.java
deleted file mode 100644
index dc91098..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Host.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server40;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Host extends XMLElement {
-	public Host() {
-		// do nothing
-	}
-	
-	public String getAppBase() {
-		return getAttributeValue("appBase");
-	}
-	
-	public Context getContext(int index) {
-		return (Context) findElement("Context", index);
-	}
-	
-	public int getContextCount() {
-		return sizeOfElement("Context");
-	}
-	
-	public String getDebug() {
-		return getAttributeValue("debug");
-	}
-	
-	public String getName() {
-		return getAttributeValue("name");
-	}
-	
-	public void setAppBase(String appBase) {
-		setAttributeValue("appBase", appBase);
-	}
-	
-	public void setDebug(String debug) {
-		setAttributeValue("debug", debug);
-	}
-	
-	public void setName(String name) {
-		setAttributeValue("name", name);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Listener.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Listener.java
deleted file mode 100644
index 97378bc..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Listener.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server40;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Listener extends XMLElement {
-	public Listener() {
-		// do nothing
-	}
-
-	public String getClassName() {
-		return getAttributeValue("className");
-	}
-
-	public String getDebug() {
-		return getAttributeValue("debug");
-	}
-
-	public void setClassName(String className) {
-		setAttributeValue("className", className);
-	}
-
-	public void setDebug(String debug) {
-		setAttributeValue("debug", debug);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Server.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Server.java
deleted file mode 100644
index 097111d..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Server.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server40;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Server extends XMLElement {
-	public Server() {
-		// do nothing
-	}
-
-	public String getDebug() {
-		return getAttributeValue("debug");
-	}
-
-	public String getName() {
-		return getAttributeValue("name");
-	}
-	
-	public String getPort() {
-		return getAttributeValue("port");
-	}
-	
-	public Service getService(int index) {
-		return (Service) findElement("Service", index);
-	}
-	
-	public int getServiceCount() {
-		return sizeOfElement("Service");
-	}
-	
-	public String getShutdown() {
-		return getAttributeValue("shutdown");
-	}
-	
-	public void setDebug(String debug) {
-		setAttributeValue("debug", debug);
-	}
-	
-	public void setName(String name) {
-		setAttributeValue("name", name);
-	}
-	
-	public void setPort(String port) {
-		setAttributeValue("port", port);
-	}
-	
-	public void setShutdown(String shutdown) {
-		setAttributeValue("shutdown", shutdown);
-	}
-
-	public Listener getListener(int index) {
-		return (Listener) findElement("Listener", index);
-	}
-	
-	public int getListenerCount() {
-		return sizeOfElement("Listener");
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Service.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Service.java
deleted file mode 100644
index cc24a4a..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Service.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.tomcat.core.internal.xml.server40;
-
-import org.eclipse.jst.server.tomcat.core.internal.xml.*;
-/**
- * 
- */
-public class Service extends XMLElement {
-	public Service() {
-		// do nothing
-	}
-
-	public Connector getConnector(int index) {
-		return (Connector) findElement("Connector", index);
-	}
-
-	public int getConnectorCount() {
-		return sizeOfElement("Connector");
-	}
-
-	public Engine getEngine() {
-		return (Engine) findElement("Engine");
-	}
-
-	public String getName() {
-		return getAttributeValue("name");
-	}
-
-	public void setName(String name) {
-		setAttributeValue("name", name);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/verifyInstall.properties b/plugins/org.eclipse.jst.server.tomcat.core/verifyInstall.properties
deleted file mode 100644
index 02a559c..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/verifyInstall.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-###############################################################################
-# Copyright (c) 2003, 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
-###############################################################################
-
-# this file must not be translated
-
-verify32install=lib/jasper.jar,lib/servlet.jar,bin,conf,webapps
-verify40install=bin/bootstrap.jar,conf,webapps
-verify41install=bin/bootstrap.jar,conf,webapps
-verify50install=bin/bootstrap.jar,conf,webapps
-verify55install=bin/bootstrap.jar,conf,webapps
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/.classpath b/plugins/org.eclipse.jst.server.tomcat.ui/.classpath
index b0cfa1b..0dfed31 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/.classpath
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="tomcatui/"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/.cvsignore b/plugins/org.eclipse.jst.server.tomcat.ui/.cvsignore
index dc63549..59feaea 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/.cvsignore
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/.cvsignore
@@ -3,3 +3,5 @@
 org.eclipse.jst.server.tomcat.ui_3.0.0.jar
 tomcatui.jar
 temp.folder
+@dot
+src.zip
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF
index d91b576..c6614bc 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF
@@ -6,9 +6,10 @@
 Bundle-Activator: org.eclipse.jst.server.tomcat.ui.internal.TomcatUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.jst.server.tomcat.ui.internal,
- org.eclipse.jst.server.tomcat.ui.internal.editor
+Export-Package: org.eclipse.jst.server.tomcat.ui.internal;x-internal:=true,
+ org.eclipse.jst.server.tomcat.ui.internal.editor;x-internal:=true
 Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources,
  org.eclipse.core.expressions,
  org.eclipse.ui,
  org.eclipse.ui.ide,
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/about.html b/plugins/org.eclipse.jst.server.tomcat.ui/about.html
new file mode 100644
index 0000000..6f6b96c
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/about.html
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>February 24, 2005</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/build.properties b/plugins/org.eclipse.jst.server.tomcat.ui/build.properties
index a87998a..9832134 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/build.properties
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/build.properties
@@ -12,9 +12,9 @@
                plugin.properties,\
                icons/,\
                .,\
-               META-INF/
+               META-INF/,\
+               about.html
 bin.excludes = bin/**,\
                @dot/**,\
                temp.folder/**
-src.includes = build.properties
 source.. = tomcatui/
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_32.gif b/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_32.gif
deleted file mode 100644
index bb4d02d..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_32.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_40.gif b/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_40.gif
deleted file mode 100644
index e3745fc..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_40.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_41.gif b/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_41.gif
deleted file mode 100644
index ed45603..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_41.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_50.gif b/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_50.gif
deleted file mode 100644
index 0cac53e..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_50.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_55.gif b/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_55.gif
deleted file mode 100644
index 69577f8..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/server_55.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/tomcat.gif b/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/tomcat.gif
new file mode 100644
index 0000000..a857c0f
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/tomcat.gif
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/tomcat_tools.gif b/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/tomcat_tools.gif
deleted file mode 100644
index 73bf959..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/icons/obj16/tomcat_tools.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/plugin.xml b/plugins/org.eclipse.jst.server.tomcat.ui/plugin.xml
index 8c368f5..0623976 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/plugin.xml
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/plugin.xml
@@ -5,44 +5,44 @@
    <extension point="org.eclipse.wst.server.ui.serverImages">
       <image
          id="org.eclipse.jst.server.tomcat.32"
-         icon="icons/obj16/server_32.gif"
+         icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.runtime.32"/>
       <image
          id="org.eclipse.jst.server.tomcat.40"
-         icon="icons/obj16/server_40.gif"
+         icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.runtime.40"/>
       <image
          id="org.eclipse.jst.server.tomcat.41"
-         icon="icons/obj16/server_41.gif"
+         icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.runtime.41"/>
       <image
          id="org.eclipse.jst.server.tomcat.50"
-         icon="icons/obj16/server_50.gif"
+         icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.runtime.50"/>
       <image
          id="org.eclipse.jst.server.tomcat.55"
-         icon="icons/obj16/server_55.gif"
+         icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.runtime.55"/>
 
       <image
          id="org.eclipse.jst.server.tomcat.32"
-         icon="icons/obj16/server_32.gif"
+         icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.32"/>
       <image
          id="org.eclipse.jst.server.tomcat.40"
-         icon="icons/obj16/server_40.gif"
+         icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.40"/>
       <image
          id="org.eclipse.jst.server.tomcat.41"
-         icon="icons/obj16/server_41.gif"
+         icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.41"/>
       <image
          id="org.eclipse.jst.server.tomcat.50"
-         icon="icons/obj16/server_50.gif"
+         icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.50"/>
       <image
          id="org.eclipse.jst.server.tomcat.55"
-         icon="icons/obj16/server_55.gif"
+         icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.55"/>
    </extension>
    
@@ -120,12 +120,12 @@
          typeIds="org.eclipse.jst.server.tomcat.runtime.55"
          class="org.eclipse.jst.server.tomcat.ui.internal.TomcatRuntimeWizardFragment"/>
    </extension>
-   
+
   <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages">
     <launchConfigurationTypeImage
       id="org.eclipse.jst.server.tomcat.ui.launchConfigurationTypeImage"
       configTypeID="org.eclipse.jst.server.tomcat.core.launchConfigurationType"
-      icon="icons/obj16/tomcat_tools.gif">
+      icon="icons/obj16/tomcat.gif">
     </launchConfigurationTypeImage>
   </extension>
 
@@ -137,4 +137,8 @@
     </launchConfigurationTabGroup>
   </extension>
 
+  <extension point="org.eclipse.wst.common.project.facet.ui.images">
+    <image runtime-component-type="org.eclipse.jst.server.tomcat"
+      path="icons/obj16/tomcat.gif"/>
+  </extension>
 </plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ConfigurationPropertyTester.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ConfigurationPropertyTester.java
index a9bfbd5..892b2d0 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ConfigurationPropertyTester.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ConfigurationPropertyTester.java
@@ -25,9 +25,11 @@
 		try {
 			IServerAttributes server = (IServerAttributes) receiver;
 			TomcatServer tomcatServer = (TomcatServer) server.loadAdapter(ITomcatServer.class, null);
-			return tomcatServer.getServerConfiguration() != null;
+			if (tomcatServer != null)
+				return tomcatServer.getServerConfiguration() != null;
 		} catch (Exception e) {
-			return false;
+			// ignore
 		}
+		return false;
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ContextIds.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ContextIds.java
index e8aa59b..7957cc1 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ContextIds.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ContextIds.java
@@ -44,5 +44,5 @@
 	public static final String CONFIGURATION_EDITOR_PORTS = TomcatUIPlugin.PLUGIN_ID + ".tecp0000";
 	public static final String CONFIGURATION_EDITOR_PORTS_LIST = TomcatUIPlugin.PLUGIN_ID + ".tecp0002";
 		
-	public static final String RUNTIME = TomcatUIPlugin.PLUGIN_ID + ".twnr0000";
+	public static final String RUNTIME_COMPOSITE = TomcatUIPlugin.PLUGIN_ID + ".twnr0000";
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.java
index c2991cd..a3bb1c8 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.java
@@ -20,6 +20,7 @@
 	public static String runtimeName;
 	public static String installDir;
 	public static String browse;
+	public static String install;
 	public static String selectInstallDir;
 	public static String installedJRE;
 	public static String installedJREs;
@@ -27,6 +28,7 @@
 	public static String editorAdd;
 	public static String editorEdit;
 	public static String editorRemove;
+	public static String errorMissingWebModule;
 	public static String configurationEditorMimeMappingsSection;
 	public static String configurationEditorMimeMappingsDescription;
 	public static String configurationEditorPortsSection;
@@ -60,7 +62,6 @@
 	public static String configurationEditorWebModuleDialogDocumentBase;
 	public static String configurationEditorWebModuleDialogSelectDirectory;
 	public static String configurationEditorWebModuleDialogPath;
-	public static String configurationEditorWebModuleDialogAutoReload;
 	public static String configurationEditorWebModuleDialogReloadEnabled;
 
 	static {
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.properties b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.properties
index f3855d4..2541b79 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.properties
@@ -8,8 +8,21 @@
 # Contributors:
 #     IBM Corporation - initial API and implementation
 ###############################################################################
-pluginName=Apache Tomcat UI Support
-providerName=Eclipse.org
+
+# --------------- General UI ---------------
+
+runtimeName=Na&me:
+browse=B&rowse...
+install=Download and Ins&tall...
+installDir=Tomcat installation &directory:
+installedJRE=&JRE:
+installedJREs=&Installed JREs...
+selectInstallDir=Select Tomcat installation directory.
+runtimeDefaultJRE=Workbench default JRE
+
+# New Tomcat server wizard
+wizardTitle=Tomcat Server
+wizardDescription=Specify the installation directory
 
 # --------------- Editors ---------------
 
@@ -19,7 +32,6 @@
 editorEdit=Edit...
 
 # --- Configuration Editor ---
-configurationEditorWebModulesPage=Modules
 configurationEditorWebModulesPageTitle=Web Modules
 configurationEditorWebModulesSection=Web Modules
 configurationEditorWebModulesDescription=Configure the Web Modules on this server.
@@ -33,30 +45,29 @@
 configurationEditorPortValueColumn=Port Number
 configurationEditorPathColumn=Path
 configurationEditorDocBaseColumn=Document Base
-configurationEditorProjectColumn=Project
+configurationEditorProjectColumn=Module
 configurationEditorReloadColumn=Auto Reload
 configurationEditorProjectMissing={0} missing
 configurationEditorReloadEnabled=Enabled
 configurationEditorReloadDisabled=Disabled
-configurationEditorAddProjectModule=Add Web Project...
+configurationEditorAddProjectModule=Add Web Module...
 configurationEditorAddExternalModule=Add External Web Module...
 
 # Add/Edit Mime Mapping dialog
 configurationEditorMimeMapppingDialogTitleEdit=Edit MIME Mapping
 configurationEditorMimeMapppingDialogTitleAdd=Add MIME Mapping
-configurationEditorMimeMapppingDialogMimeType=MIME type:
-configurationEditorMimeMapppingDialogMimeExtension=MIME extension:
+configurationEditorMimeMapppingDialogMimeType=MIME &type:
+configurationEditorMimeMapppingDialogMimeExtension=MIME &extension:
 
 # Add/Edit Web Module dialog
 configurationEditorWebModuleDialogTitleEdit=Edit Web Module
 configurationEditorWebModuleDialogTitleAdd=Add Web Module
-configurationEditorWebModuleDialogProjects=Projects:
-configurationEditorWebModuleDialogPath=Path:
-configurationEditorWebModuleDialogDocumentBase=Document base:
-configurationEditorWebModuleDialogAutoReload=Auto reloading:
-configurationEditorWebModuleDialogReloadEnabled=Enabled
+configurationEditorWebModuleDialogProjects=&Modules:
+configurationEditorWebModuleDialogPath=P&ath:
+configurationEditorWebModuleDialogDocumentBase=&Document base:
+configurationEditorWebModuleDialogReloadEnabled=Auto r&eloading enabled
 configurationEditorWebModuleDialogSelectDirectory=Select the Web module directory.
-
+errorMissingWebModule=The Web module at the following location cannot be found: {0}.
 
 # --- Server Editor ---
 serverEditorGeneralSection=Server
@@ -66,18 +77,3 @@
 serverEditorSecure=Enable security
 serverEditorDebugMode=Enable Tomcat debug mode (v4.x and above only)
 serverEditorTestEnvironment=Run modules directly from the workspace (do not modify the Tomcat installation)
-
-
-# --------------- General UI ---------------
-
-runtimeName=Na&me:
-browse=B&rowse...
-installDir=Tomcat installation &directory:
-installedJRE=&JRE:
-installedJREs=&Installed JREs...
-selectInstallDir=Select Tomcat installation directory.
-runtimeDefaultJRE=Workbench default JRE
-
-# New Tomcat server wizard
-wizardTitle=Tomcat Server
-wizardDescription=Specify the installation directory
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeComposite.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeComposite.java
index 3d81283..e6ec94c 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeComposite.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeComposite.java
@@ -14,6 +14,7 @@
 import java.util.List;
 
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.IVMInstallType;
@@ -43,6 +44,8 @@
 import org.eclipse.ui.PlatformUI;
 
 import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
+import org.eclipse.wst.server.core.internal.IInstallableRuntime;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 /**
  * Wizard page to set the server install directory.
@@ -82,7 +85,7 @@
 			runtime = null;
 		} else {
 			runtimeWC = newRuntime;
-			runtime = (ITomcatRuntimeWorkingCopy) newRuntime.getAdapter(ITomcatRuntimeWorkingCopy.class);
+			runtime = (ITomcatRuntimeWorkingCopy) newRuntime.loadAdapter(ITomcatRuntimeWorkingCopy.class, null);
 		}
 		
 		init();
@@ -97,7 +100,7 @@
 		layout.numColumns = 2;
 		setLayout(layout);
 		setLayoutData(new GridData(GridData.FILL_BOTH));
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, ContextIds.RUNTIME);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, ContextIds.RUNTIME_COMPOSITE);
 		
 		Label label = new Label(this, SWT.NONE);
 		label.setText(Messages.runtimeName);
@@ -130,7 +133,7 @@
 				validate();
 			}
 		});
-	
+		
 		Button browse = SWTUtil.createButton(this, Messages.browse);
 		browse.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent se) {
@@ -143,6 +146,29 @@
 			}
 		});
 		
+		final IInstallableRuntime ir = ServerPlugin.findInstallableRuntime("org.eclipse.jst.server.timcat.runtime.32");
+		if (ir != null) {
+			label = new Label(this, SWT.NONE);
+			
+			Button install = SWTUtil.createButton(this, Messages.install);
+			install.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent se) {
+					DirectoryDialog dialog = new DirectoryDialog(TomcatRuntimeComposite.this.getShell());
+					dialog.setMessage(Messages.selectInstallDir);
+					dialog.setFilterPath(installDir.getText());
+					String selectedDirectory = dialog.open();
+					if (selectedDirectory != null) {
+						try {
+							ir.install(new Path(selectedDirectory), new NullProgressMonitor());
+						} catch (Exception e) {
+							Trace.trace(Trace.SEVERE, "Error installing runtime", e);
+						}
+						installDir.setText(selectedDirectory);
+					}
+				}
+			});
+		}
+		
 		updateJREs();
 		
 		// JDK location
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeWizardFragment.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeWizardFragment.java
index 4bf8c3f..57fd360 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeWizardFragment.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeWizardFragment.java
@@ -24,7 +24,7 @@
  */
 public class TomcatRuntimeWizardFragment extends WizardFragment {
 	protected TomcatRuntimeComposite comp;
-	
+
 	public TomcatRuntimeWizardFragment() {
 		// do nothing
 	}
@@ -32,14 +32,14 @@
 	public boolean hasComposite() {
 		return true;
 	}
-	
+
 	public boolean isComplete() {
 		IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
 		
 		if (runtime == null)
 			return false;
 		IStatus status = runtime.validate(null);
-		return (status != null && status.getSeverity() != IStatus.ERROR);
+		return (status == null || status.getSeverity() != IStatus.ERROR);
 	}
 
 	/* (non-Javadoc)
@@ -60,7 +60,7 @@
 	public void exit() {
 		IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
 		IPath path = runtime.getLocation();
-		if (runtime.validate(null).isOK())
+		if (runtime.validate(null).getSeverity() != IStatus.ERROR)
 			TomcatPlugin.setPreference("location" + runtime.getRuntimeType().getId(), path.toString());
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationMimeEditorSection.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationMimeEditorSection.java
index 0abf5df..625e295 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationMimeEditorSection.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationMimeEditorSection.java
@@ -140,7 +140,7 @@
 				MimeMappingDialog dialog = new MimeMappingDialog(getShell());
 				dialog.open();
 				if (dialog.getReturnCode() == IDialogConstants.OK_ID) {
-					commandManager.executeCommand(new AddMimeMappingCommand(tomcatConfiguration, dialog.getMimeMapping()));
+					execute(new AddMimeMappingCommand(tomcatConfiguration, dialog.getMimeMapping()));
 				}
 			}
 		});
@@ -159,7 +159,7 @@
 				MimeMappingDialog dialog = new MimeMappingDialog(getShell(), (MimeMapping) tomcatConfiguration.getMimeMappings().get(index));
 				dialog.open();
 				if (dialog.getReturnCode() == IDialogConstants.OK_ID) {
-					commandManager.executeCommand(new ModifyMimeMappingCommand(tomcatConfiguration, index, dialog.getMimeMapping()));
+					execute(new ModifyMimeMappingCommand(tomcatConfiguration, index, dialog.getMimeMapping()));
 				}
 			}
 		});
@@ -175,7 +175,7 @@
 			public void widgetSelected(SelectionEvent e) {
 				if (index < 0)
 					return;
-				commandManager.executeCommand(new RemoveMimeMappingCommand(tomcatConfiguration, index));
+				execute(new RemoveMimeMappingCommand(tomcatConfiguration, index));
 				index = -1;
 				edit.setEnabled(false);
 				remove.setEnabled(false);
@@ -407,6 +407,12 @@
 		try {
 			TreeItem item = mimeTypes.getSelection()[0];
 			Integer in = (Integer) item.getData();
+			if (in == null) {
+				index = -1;
+				remove.setEnabled(false);
+				edit.setEnabled(false);
+				return;
+			}
 			index = in.intValue();
 			
 			remove.setEnabled(true);
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationPortEditorSection.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationPortEditorSection.java
index 8b750c0..67bfcb1 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationPortEditorSection.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationPortEditorSection.java
@@ -171,7 +171,7 @@
 					Item item = (Item) element;
 					ServerPort sp = (ServerPort) item.getData();
 					int port = Integer.parseInt((String) value);
-					commandManager.executeCommand(new ModifyPortCommand(tomcatConfiguration, sp.getId(), port));
+					execute(new ModifyPortCommand(tomcatConfiguration, sp.getId(), port));
 				} catch (Exception ex) {
 					// ignore
 				}
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java
index fdc8b98..3867e9b 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java
@@ -12,9 +12,11 @@
 
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
+import java.io.File;
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.viewers.ColumnWeightData;
@@ -24,8 +26,10 @@
 import org.eclipse.jst.server.tomcat.core.internal.TomcatConfiguration;
 import org.eclipse.jst.server.tomcat.core.internal.TomcatServer;
 import org.eclipse.jst.server.tomcat.core.internal.WebModule;
+import org.eclipse.jst.server.tomcat.core.internal.command.AddModuleCommand;
 import org.eclipse.jst.server.tomcat.core.internal.command.AddWebModuleCommand;
 import org.eclipse.jst.server.tomcat.core.internal.command.ModifyWebModuleCommand;
+import org.eclipse.jst.server.tomcat.core.internal.command.RemoveModuleCommand;
 import org.eclipse.jst.server.tomcat.core.internal.command.RemoveWebModuleCommand;
 import org.eclipse.jst.server.tomcat.ui.internal.ContextIds;
 import org.eclipse.jst.server.tomcat.ui.internal.Messages;
@@ -54,7 +58,6 @@
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.ServerUtil;
 import org.eclipse.wst.server.ui.ServerUICore;
-import org.eclipse.wst.server.ui.editor.ICommandManager;
 import org.eclipse.wst.server.ui.editor.ServerEditorPart;
 /**
  * Tomcat configuration web module editor page.
@@ -96,11 +99,7 @@
 		};
 		configuration.addPropertyChangeListener(listener);
 	}
-	
-	protected ICommandManager getCommandManager() {
-		return commandManager;
-	}
-	
+
 	/**
 	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
@@ -197,7 +196,7 @@
 					WebModuleDialog dialog = new WebModuleDialog(getEditorSite().getShell(), getServer(), server2, configuration, true);
 					dialog.open();
 					if (dialog.getReturnCode() == IDialogConstants.OK_ID) {
-						getCommandManager().executeCommand(new AddWebModuleCommand(configuration, dialog.getWebModule()));
+						execute(new AddModuleCommand(getServer(), dialog.module4));
 					}
 				}
 			});
@@ -211,7 +210,7 @@
 				WebModuleDialog dialog = new WebModuleDialog(getEditorSite().getShell(), getServer(), server2, configuration, false);
 				dialog.open();
 				if (dialog.getReturnCode() == IDialogConstants.OK_ID) {
-					getCommandManager().executeCommand(new AddWebModuleCommand(configuration, dialog.getWebModule()));
+					execute(new AddWebModuleCommand(configuration, dialog.getWebModule()));
 				}
 			}
 		});
@@ -229,7 +228,7 @@
 				WebModuleDialog dialog = new WebModuleDialog(getEditorSite().getShell(), getServer(), server2, configuration, module);
 				dialog.open();
 				if (dialog.getReturnCode() == IDialogConstants.OK_ID) {
-					getCommandManager().executeCommand(new ModifyWebModuleCommand(configuration, selection, dialog.getWebModule()));
+					execute(new ModifyWebModuleCommand(configuration, selection, dialog.getWebModule()));
 				}
 			}
 		});
@@ -243,7 +242,13 @@
 			public void widgetSelected(SelectionEvent e) {
 				if (selection < 0)
 					return;
-				getCommandManager().executeCommand(new RemoveWebModuleCommand(configuration, selection));
+				TableItem item = webAppTable.getItem(selection);
+				if (item.getData() != null) {
+					IModule module = (IModule) item.getData();
+					execute(new RemoveModuleCommand(getServer(), module));
+				} else {
+					execute(new RemoveWebModuleCommand(configuration, selection));
+				}
 				remove.setEnabled(false);
 				edit.setEnabled(false);
 				selection = -1;
@@ -262,7 +267,7 @@
 		if (modules != null) {
 			int size = modules.length;
 			for (int i = 0; i < size; i++) {
-				IWebModule webModule = (IWebModule) modules[i].getAdapter(IWebModule.class);
+				IWebModule webModule = (IWebModule) modules[i].loadAdapter(IWebModule.class, null);
 				if (webModule != null) {
 					IStatus status = server.canModifyModules(new IModule[] { modules[i] }, null, null);
 					if (status != null && status.isOK())
@@ -284,7 +289,7 @@
 	public void init(IEditorSite site, IEditorInput input) {
 		super.init(site, input);
 		
-		TomcatServer ts = (TomcatServer) server.getAdapter(TomcatServer.class);
+		TomcatServer ts = (TomcatServer) server.loadAdapter(TomcatServer.class, null);
 		try {
 			configuration = ts.getTomcatConfiguration();
 		} catch (Exception e) {
@@ -294,7 +299,7 @@
 			addChangeListener();
 		
 		if (server != null)
-			server2 = (ITomcatServerWorkingCopy) server.getAdapter(ITomcatServerWorkingCopy.class);
+			server2 = (ITomcatServerWorkingCopy) server.loadAdapter(ITomcatServerWorkingCopy.class, null);
 		
 		initialize();
 	}
@@ -307,6 +312,7 @@
 			return;
 
 		webAppTable.removeAll();
+		setErrorMessage(null);
 	
 		List list = configuration.getWebModules();
 		Iterator iterator = list.iterator();
@@ -322,18 +328,24 @@
 				projectName = NLS.bind(Messages.configurationEditorProjectMissing, new String[] {memento});
 				projectImage = TomcatUIPlugin.getImage(TomcatUIPlugin.IMG_PROJECT_MISSING);
 				IModule module2 = ServerUtil.getModule(memento);
-				if (module != null) {
+				if (module2 != null) {
 					projectName = ServerUICore.getLabelProvider().getText(module2);
 					projectImage = ServerUICore.getLabelProvider().getImage(module2);
+					item.setData(module2);
 				}
 			}
-	
+			
 			String reload = module.isReloadable() ? Messages.configurationEditorReloadEnabled : Messages.configurationEditorReloadDisabled;
 			String[] s = new String[] {module.getPath(), module.getDocumentBase(), projectName, reload};
 			item.setText(s);
 			item.setImage(0, TomcatUIPlugin.getImage(TomcatUIPlugin.IMG_WEB_MODULE));
 			if (projectImage != null)
 				item.setImage(2, projectImage);
+			
+			if (!isDocumentBaseValid(module.getDocumentBase())) {
+				item.setImage(1, TomcatUIPlugin.getImage(TomcatUIPlugin.IMG_PROJECT_MISSING));
+				setErrorMessage(NLS.bind(Messages.errorMissingWebModule, module.getDocumentBase()));
+			}
 		}
 		
 		if (readOnly) {
@@ -365,6 +377,35 @@
 		}
 	}
 	
+	protected boolean isDocumentBaseValid(String s) {
+		if (s == null || s.length() < 2)
+			return true;
+		
+		// check absolute path
+		File f = new File(s);
+		if (f.exists())
+			return true;
+		
+		// check workspace
+		try {
+			if (ResourcesPlugin.getWorkspace().getRoot().getProject(s).exists())
+				return true;
+		} catch (Exception e) {
+			// bad path
+		}
+		
+		// check server relative path
+		try {
+			f = server.getRuntime().getLocation().append(s).toFile();
+			if (f.exists())
+				return true;
+		} catch (Exception e) {
+			// bad path
+		}
+		
+		return false;
+	}
+	
 	/*
 	 * @see IWorkbenchPart#setFocus()
 	 */
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ServerGeneralEditorSection.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ServerGeneralEditorSection.java
index 4fcef12..b6c0a25 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ServerGeneralEditorSection.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ServerGeneralEditorSection.java
@@ -120,7 +120,7 @@
 				if (updating)
 					return;
 				updating = true;
-				commandManager.executeCommand(new SetTestEnvironmentCommand(tomcatServer, testEnvironment.getSelection()));
+				execute(new SetTestEnvironmentCommand(tomcatServer, testEnvironment.getSelection()));
 				updating = false;
 			}
 		});
@@ -136,7 +136,7 @@
 				if (updating)
 					return;
 				updating = true;
-				commandManager.executeCommand(new SetSecureCommand(tomcatServer, secure.getSelection()));
+				execute(new SetSecureCommand(tomcatServer, secure.getSelection()));
 				updating = false;
 			}
 		});
@@ -152,7 +152,7 @@
 				if (updating)
 					return;
 				updating = true;
-				commandManager.executeCommand(new SetDebugModeCommand(tomcatServer, debug.getSelection()));
+				execute(new SetDebugModeCommand(tomcatServer, debug.getSelection()));
 				updating = false;
 			}
 		});
@@ -170,7 +170,7 @@
 		super.init(site, input);
 		
 		if (server != null) {
-			tomcatServer = (TomcatServer) server.getAdapter(TomcatServer.class);
+			tomcatServer = (TomcatServer) server.loadAdapter(TomcatServer.class, null);
 			addChangeListener();
 		}
 		initialize();
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/WebModuleDialog.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/WebModuleDialog.java
index c820421..13b8b87 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/WebModuleDialog.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/WebModuleDialog.java
@@ -47,6 +47,7 @@
  * Dialog to add or modify web modules.
  */
 public class WebModuleDialog extends Dialog {
+	protected IModule module4;
 	protected WebModule module;
 	protected boolean isEdit;
 	protected boolean isProject;
@@ -147,14 +148,13 @@
 				int size = modules.length;
 				for (int i = 0; i < size; i++) {
 					IModule module3 = modules[i];
-					IWebModule module2 = (IWebModule) module3.getAdapter(IWebModule.class);
-					if (module2 != null) {
+					if ("jst.web".equals(module3.getModuleType().getId())) {
 						IStatus status = server2.canModifyModules(new IModule[] { module3 }, null, null);
 						if (status != null && status.isOK()) {
 							TableItem item = new TableItem(projTable, SWT.NONE);
-							item.setText(0, ServerUICore.getLabelProvider().getText(module2));
-							item.setImage(0, ServerUICore.getLabelProvider().getImage(module2));
-							item.setData(module2);
+							item.setText(0, ServerUICore.getLabelProvider().getText(module3));
+							item.setImage(0, ServerUICore.getLabelProvider().getImage(module3));
+							item.setData(module3);
 						}
 					}
 				}
@@ -171,7 +171,7 @@
 	
 		// disable document base for project modules
 		if (isProject || (module.getMemento() != null && module.getMemento().length() > 0))
-			docBase.setEnabled(false);
+			docBase.setEditable(false);
 		else {
 			docBase.addModifyListener(new ModifyListener() {
 				public void modifyText(ModifyEvent e) {
@@ -200,7 +200,7 @@
 				}
 			});
 		}
-	
+		
 		// path (context-root)
 		new Label(composite, SWT.NONE).setText(Messages.configurationEditorWebModuleDialogPath);
 		final Text path = new Text(composite, SWT.BORDER);
@@ -208,39 +208,47 @@
 		data.widthHint = 150;
 		path.setLayoutData(data);
 		path.setText(module.getPath());
-		path.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				module = new WebModule(path.getText(), module.getDocumentBase(), module.getMemento(), module.isReloadable());
-			}
-		});
+		if (isProject || (module.getMemento() != null && module.getMemento().length() > 0))
+			path.setEditable(false);
+		else
+			path.addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {
+					module = new WebModule(path.getText(), module.getDocumentBase(), module.getMemento(), module.isReloadable());
+				}
+			});
 		whs.setHelp(path, ContextIds.CONFIGURATION_EDITOR_WEBMODULE_DIALOG_PATH);
-	
+		
 		new Label(composite, SWT.NONE).setText("");
 		
-		// auto reload
-		new Label(composite, SWT.NONE).setText(Messages.configurationEditorWebModuleDialogAutoReload);
-		final Button reloadable = new Button(composite, SWT.CHECK);
-		reloadable.setText(Messages.configurationEditorWebModuleDialogReloadEnabled);
-		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		reloadable.setLayoutData(data);
-		reloadable.setSelection(module.isReloadable());
-		reloadable.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				module = new WebModule(module.getPath(), module.getDocumentBase(), module.getMemento(), reloadable.getSelection());
-			}
-		});
-		whs.setHelp(reloadable, ContextIds.CONFIGURATION_EDITOR_WEBMODULE_DIALOG_RELOAD);
-	
+		if (!isProject) {
+			// auto reload
+			new Label(composite, SWT.NONE).setText("");
+			final Button reloadable = new Button(composite, SWT.CHECK);
+			reloadable.setText(Messages.configurationEditorWebModuleDialogReloadEnabled);
+			data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+			reloadable.setLayoutData(data);
+			reloadable.setSelection(module.isReloadable());
+			reloadable.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					module = new WebModule(module.getPath(), module.getDocumentBase(), module.getMemento(), reloadable.getSelection());
+				}
+			});
+			whs.setHelp(reloadable, ContextIds.CONFIGURATION_EDITOR_WEBMODULE_DIALOG_RELOAD);
+		}
+		
 		if (!isEdit && isProject) {
 			projTable.addSelectionListener(new SelectionAdapter() {
 				public void widgetSelected(SelectionEvent event) {
 					try {
-						IWebModule module2 = (IWebModule) projTable.getSelection()[0].getData();
+						IModule module3 = (IModule) projTable.getSelection()[0].getData();
+						IWebModule module2 = (IWebModule) module3.loadAdapter(IWebModule.class, null);
 						String contextRoot = module2.getContextRoot();
-						if (contextRoot != null && !contextRoot.startsWith("/"))
+						if (contextRoot != null && !contextRoot.startsWith("/") && contextRoot.length() > 0)
 							contextRoot = "/" + contextRoot;
-						module = new WebModule(contextRoot, module2.getLocation().toOSString(), module.getMemento(), module.isReloadable());
-						docBase.setText(module2.getLocation().toOSString());
+						module = new WebModule(contextRoot, module3.getName(), module3.getId(), module.isReloadable());
+						docBase.setText(module3.getName());
+						path.setText(contextRoot);
+						module4 = module3;
 					} catch (Exception e) {
 						// ignore
 					}
diff --git a/plugins/org.eclipse.jst.server.ui/.classpath b/plugins/org.eclipse.jst.server.ui/.classpath
deleted file mode 100644
index 6f75060..0000000
--- a/plugins/org.eclipse.jst.server.ui/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="sjavaui/"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/plugins/org.eclipse.jst.server.ui/.cvsignore b/plugins/org.eclipse.jst.server.ui/.cvsignore
deleted file mode 100644
index 92a2cef..0000000
--- a/plugins/org.eclipse.jst.server.ui/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-bin
-build.xml
-org.eclipse.jst.server.ui_3.0.0.jar
-sjavaui.jar
-temp.folder
diff --git a/plugins/org.eclipse.jst.server.ui/.options b/plugins/org.eclipse.jst.server.ui/.options
deleted file mode 100644
index a747d69..0000000
--- a/plugins/org.eclipse.jst.server.ui/.options
+++ /dev/null
@@ -1,4 +0,0 @@
-# Debugging options for the org.eclipse.jst.server.ui plugin
-
-# Turn on general debugging
-org.eclipse.jst.server.ui/debug=true
diff --git a/plugins/org.eclipse.jst.server.ui/.project b/plugins/org.eclipse.jst.server.ui/.project
deleted file mode 100644
index abd835d..0000000
--- a/plugins/org.eclipse.jst.server.ui/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.server.ui</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
deleted file mode 100644
index a1a9e4d..0000000
--- a/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,17 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %pluginName
-Bundle-SymbolicName: org.eclipse.jst.server.ui; singleton:=true
-Bundle-Version: 1.0.0
-Bundle-Activator: org.eclipse.jst.server.ui.internal.JavaServerUIPlugin
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Export-Package: org.eclipse.jst.server.ui.internal
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.ui,
- org.eclipse.jdt.core,
- org.eclipse.jdt.launching,
- org.eclipse.wst.server.core,
- org.eclipse.wst.server.ui,
- org.eclipse.jst.server.core
-Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.jst.server.ui/build.properties b/plugins/org.eclipse.jst.server.ui/build.properties
deleted file mode 100644
index 086c918..0000000
--- a/plugins/org.eclipse.jst.server.ui/build.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-###############################################################################
-# Copyright (c) 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
-###############################################################################
-bin.includes = plugin.xml,\
-               plugin.properties,\
-               icons/,\
-               .,\
-               META-INF/
-bin.excludes = bin/**,\
-               @dot/**,\
-               temp.folder/**
-src.includes = schema/,\
-               build.properties
-source.. = sjavaui/
diff --git a/plugins/org.eclipse.jst.server.ui/icons/obj16/appclient_module.gif b/plugins/org.eclipse.jst.server.ui/icons/obj16/appclient_module.gif
deleted file mode 100644
index 4423578..0000000
--- a/plugins/org.eclipse.jst.server.ui/icons/obj16/appclient_module.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/icons/obj16/ear.gif b/plugins/org.eclipse.jst.server.ui/icons/obj16/ear.gif
deleted file mode 100644
index b5630b3..0000000
--- a/plugins/org.eclipse.jst.server.ui/icons/obj16/ear.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/icons/obj16/ejb_module.gif b/plugins/org.eclipse.jst.server.ui/icons/obj16/ejb_module.gif
deleted file mode 100644
index f8b5c0a..0000000
--- a/plugins/org.eclipse.jst.server.ui/icons/obj16/ejb_module.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/icons/obj16/java_jar.gif b/plugins/org.eclipse.jst.server.ui/icons/obj16/java_jar.gif
deleted file mode 100644
index 6059f86..0000000
--- a/plugins/org.eclipse.jst.server.ui/icons/obj16/java_jar.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/icons/obj16/web_module.gif b/plugins/org.eclipse.jst.server.ui/icons/obj16/web_module.gif
deleted file mode 100644
index bf20f70..0000000
--- a/plugins/org.eclipse.jst.server.ui/icons/obj16/web_module.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/icons/wizban/new_runtime_wiz.gif b/plugins/org.eclipse.jst.server.ui/icons/wizban/new_runtime_wiz.gif
deleted file mode 100644
index 30de91f..0000000
--- a/plugins/org.eclipse.jst.server.ui/icons/wizban/new_runtime_wiz.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/plugin.properties b/plugins/org.eclipse.jst.server.ui/plugin.properties
deleted file mode 100644
index d0b7b80..0000000
--- a/plugins/org.eclipse.jst.server.ui/plugin.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-###############################################################################
-# Copyright (c) 2004, 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
-###############################################################################
-pluginName=Java Server UI Support
-providerName=Eclipse.org
diff --git a/plugins/org.eclipse.jst.server.ui/plugin.xml b/plugins/org.eclipse.jst.server.ui/plugin.xml
deleted file mode 100644
index 0de2938..0000000
--- a/plugins/org.eclipse.jst.server.ui/plugin.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-
-<plugin>
-  <extension point="org.eclipse.wst.server.ui.serverImages">
-     <image
-        id="org.eclipse.jst.server"
-        typeIds="org.eclipse.jst.server.core.runtimeType"
-        icon="icons/obj16/java_jar.gif"/>
-     <image
-        id="org.eclipse.jst.server"
-        typeIds="j2ee.web"
-        icon="icons/obj16/web_module.gif"/>
-     <image
-        id="org.eclipse.jst.server"
-        typeIds="j2ee.ejb"
-        icon="icons/obj16/ejb_module.gif"/>
-     <image
-        id="org.eclipse.jst.server"
-        typeIds="j2ee.ear"
-        icon="icons/obj16/ear.gif"/>
-     <image
-        id="org.eclipse.jst.server"
-        typeIds="j2ee.appclient"
-        icon="icons/obj16/appclient_module.gif"/>
-     <image
-        id="org.eclipse.jst.server"
-        typeIds="j2ee.connector"
-        icon="icons/obj16/java_jar.gif"/>
-     <image
-        id="org.eclipse.jst.server"
-        typeIds="j2ee.loosearchive"
-        icon="icons/obj16/java_jar.gif"/>
-  </extension>
-
-  <extension point="org.eclipse.wst.server.ui.wizardFragments">
-     <fragment
-        id="org.eclipse.jst.server.core.runtimeType"
-        typeIds="org.eclipse.jst.server.core.runtimeType"
-        class="org.eclipse.jst.server.ui.internal.GenericRuntimeWizardFragment"/>
-  </extension>
-
-</plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ContextIds.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ContextIds.java
deleted file mode 100644
index f3cbdeb..0000000
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ContextIds.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.ui.internal;
-/**
- * Context help id constants.
- */
-public interface ContextIds {
-	public static final String JAVA_CLASSPATH = JavaServerUIPlugin.PLUGIN_ID + ".jvcp0000";
-	public static final String JAVA_CLASSPATH_TABLE = JavaServerUIPlugin.PLUGIN_ID + ".jvcp0002";
-	public static final String JAVA_CLASSPATH_UP = JavaServerUIPlugin.PLUGIN_ID + ".jvcp0004";
-	public static final String JAVA_CLASSPATH_DOWN = JavaServerUIPlugin.PLUGIN_ID + ".jvcp0006";
-	public static final String JAVA_CLASSPATH_ADD_EXTERNAL_JAR = JavaServerUIPlugin.PLUGIN_ID + ".jvcp0008";
-	public static final String JAVA_CLASSPATH_ADD_EXTERNAL_FOLDER = JavaServerUIPlugin.PLUGIN_ID + ".jvcp0009";
-	public static final String JAVA_CLASSPATH_ADD_VARIABLE = JavaServerUIPlugin.PLUGIN_ID + ".jvcp0011";
-	public static final String JAVA_CLASSPATH_ADD_STRING = JavaServerUIPlugin.PLUGIN_ID + ".jvcp0013";
-	public static final String JAVA_CLASSPATH_EDIT = JavaServerUIPlugin.PLUGIN_ID + ".jvcp0015";
-	public static final String JAVA_CLASSPATH_REMOVE = JavaServerUIPlugin.PLUGIN_ID + ".jvcp0012";
-
-	public static final String JAVA_PATH = JavaServerUIPlugin.PLUGIN_ID + ".jvpt0000";
-	public static final String JAVA_PATH_FIELD = JavaServerUIPlugin.PLUGIN_ID + ".jvpt0002";
-	public static final String JAVA_PATH_APPEND = JavaServerUIPlugin.PLUGIN_ID + ".jvpt0004";
-	public static final String JAVA_PATH_PREPEND = JavaServerUIPlugin.PLUGIN_ID + ".jvpt0006";
-	public static final String JAVA_PATH_REPLACE = JavaServerUIPlugin.PLUGIN_ID + ".jvpt0008";
-
-	public static final String JAVA_SYSTEM_PROPERTY = JavaServerUIPlugin.PLUGIN_ID + ".jvsp0000";
-	public static final String JAVA_SYSTEM_PROPERTY_TABLE = JavaServerUIPlugin.PLUGIN_ID + ".jvsp0002";
-	public static final String JAVA_SYSTEM_PROPERTY_ADD = JavaServerUIPlugin.PLUGIN_ID + ".jvsp0004";
-	public static final String JAVA_SYSTEM_PROPERTY_EDIT = JavaServerUIPlugin.PLUGIN_ID + ".jvsp0006";
-	public static final String JAVA_SYSTEM_PROPERTY_REMOVE = JavaServerUIPlugin.PLUGIN_ID + ".jvsp0008";
-
-	public static final String JAVA_SYSTEM_PROPERTY_DIALOG = JavaServerUIPlugin.PLUGIN_ID + ".jvpd0000";
-	public static final String JAVA_SYSTEM_PROPERTY_DIALOG_NAME = JavaServerUIPlugin.PLUGIN_ID + ".jvpd0002";
-	public static final String JAVA_SYSTEM_PROPERTY_DIALOG_VALUE = JavaServerUIPlugin.PLUGIN_ID + ".jvpd0004";
-
-	public static final String JAVA_CLASSPATH_VARIABLE_DIALOG = JavaServerUIPlugin.PLUGIN_ID + ".jvvd0000";
-	public static final String JAVA_CLASSPATH_VARIABLE_DIALOG_VARIABLE = JavaServerUIPlugin.PLUGIN_ID + ".jvvd0002";
-	public static final String JAVA_CLASSPATH_VARIABLE_DIALOG_EXTENSION = JavaServerUIPlugin.PLUGIN_ID + ".jvvd0004";
-	public static final String JAVA_CLASSPATH_VARIABLE_DIALOG_EXTENSION_BROWSE = JavaServerUIPlugin.PLUGIN_ID + ".jvvd0006";
-
-	public static final String JAVA_CLASSPATH_STRING_DIALOG = JavaServerUIPlugin.PLUGIN_ID + ".jvsd0000";
-	public static final String JAVA_CLASSPATH_STRING_DIALOG_PATH = JavaServerUIPlugin.PLUGIN_ID + ".jvsd0002";
-
-	public static final String JAVA_VM_ARGUMENTS = JavaServerUIPlugin.PLUGIN_ID + ".jvvm0000";
-	
-	public static final String RUNTIME_TARGET_COMPOSITE = JavaServerUIPlugin.PLUGIN_ID + ".jvrt0000";
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java
deleted file mode 100644
index 751d769..0000000
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.ui.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
-import org.eclipse.wst.server.ui.wizard.IWizardHandle;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.*;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.events.*;
-import org.eclipse.jdt.launching.IVMInstall;
-import org.eclipse.jdt.launching.IVMInstallType;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.preference.IPreferenceNode;
-import org.eclipse.jface.preference.PreferenceDialog;
-import org.eclipse.jface.preference.PreferenceManager;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jst.server.core.internal.GenericRuntime;
-import org.eclipse.jst.server.core.internal.IGenericRuntimeWorkingCopy;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.ui.PlatformUI;
-/**
- * Wizard page to set the server install directory.
- */
-public class GenericRuntimeComposite extends Composite {
-	protected static final String INSTALLED_JRE_PREFERENCE_PAGE_ID = "org.eclipse.jdt.debug.ui.preferences.VMPreferencePage";
-	protected IRuntimeWorkingCopy runtimeWC;
-	protected IGenericRuntimeWorkingCopy runtime;
-	
-	protected IWizardHandle wizard;
-	
-	protected Text name;
-	protected Text installDir;
-	protected Combo combo;
-	protected List installedJREs;
-	protected String[] jreNames;
-
-	/**
-	 * GenericRuntimeComposite constructor comment.
-	 */
-	protected GenericRuntimeComposite(Composite parent, IWizardHandle wizard) {
-		super(parent, SWT.NONE);
-		this.wizard = wizard;
-		
-		wizard.setTitle(Messages.runtimeTypeTitle);
-		wizard.setDescription(Messages.runtimeTypeDescription);
-		wizard.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_RUNTIME_TYPE));
-		
-		createControl();
-	}
-
-	protected void setRuntime(IRuntimeWorkingCopy newRuntime) {
-		if (newRuntime == null) {
-			runtimeWC = null;
-			runtime = null;
-		} else {
-			runtimeWC = newRuntime;
-			runtime = (IGenericRuntimeWorkingCopy) newRuntime.getAdapter(IGenericRuntimeWorkingCopy.class);
-		}
-		
-		init();
-		validate();
-	}
-
-	/**
-	 * Provide a wizard page to change the root directory.
-	 */
-	protected void createControl() {
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 2;
-		setLayout(layout);
-		setLayoutData(new GridData(GridData.FILL_BOTH));
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, ContextIds.RUNTIME_TARGET_COMPOSITE);
-		
-		Label label = new Label(this, SWT.NONE);
-		label.setText(Messages.runtimeTypeName);
-		GridData data = new GridData();
-		data.horizontalSpan = 2;
-		label.setLayoutData(data);
-		
-		name = new Text(this, SWT.BORDER);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		name.setLayoutData(data);
-		name.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				runtimeWC.setName(name.getText());
-				validate();
-			}
-		});
-	
-		label = new Label(this, SWT.NONE);
-		label.setText(Messages.runtimeTypeLocation);
-		data = new GridData();
-		data.horizontalSpan = 2;
-		label.setLayoutData(data);
-	
-		installDir = new Text(this, SWT.BORDER);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		installDir.setLayoutData(data);
-		installDir.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				runtimeWC.setLocation(new Path(installDir.getText()));
-				validate();
-			}
-		});
-	
-		Button browse = SWTUtil.createButton(this, Messages.browse);
-		browse.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent se) {
-				DirectoryDialog dialog = new DirectoryDialog(GenericRuntimeComposite.this.getShell());
-				dialog.setMessage(Messages.runtimeTypeSelectLocation);
-				dialog.setFilterPath(installDir.getText());
-				String selectedDirectory = dialog.open();
-				if (selectedDirectory != null)
-					installDir.setText(selectedDirectory);
-			}
-		});
-		
-		updateJREs();
-		
-		// JDK location
-		label = new Label(this, SWT.NONE);
-		label.setText(Messages.runtimeTypeJRE);
-		data = new GridData();
-		data.horizontalSpan = 2;
-		label.setLayoutData(data);
-		
-		combo = new Combo(this, SWT.DROP_DOWN | SWT.READ_ONLY);
-		combo.setItems(jreNames);
-		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		combo.setLayoutData(data);
-		
-		combo.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				int sel = combo.getSelectionIndex();
-				IVMInstall vmInstall = null;
-				if (sel > 0)
-					vmInstall = (IVMInstall) installedJREs.get(sel - 1);
-				
-				runtime.setVMInstall(vmInstall);
-				validate();
-			}
-
-			public void widgetDefaultSelected(SelectionEvent e) {
-				widgetSelected(e);
-			}
-		});
-		
-		Button button = SWTUtil.createButton(this, Messages.runtimeTypeInstalledJREs);
-		button.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				String currentVM = combo.getText();
-				if (showPreferencePage()) {
-					updateJREs();
-					combo.setItems(jreNames);
-					combo.setText(currentVM);
-					if (combo.getSelectionIndex() == -1)
-						combo.select(0);
-				}
-			}
-		});
-		
-		init();
-		validate();
-
-		Dialog.applyDialogFont(this);
-
-		name.forceFocus();
-	}
-	
-	protected void updateJREs() {
-		// get all installed JVMs
-		installedJREs = new ArrayList();
-		IVMInstallType[] vmInstallTypes = JavaRuntime.getVMInstallTypes();
-		int size = vmInstallTypes.length;
-		for (int i = 0; i < size; i++) {
-			IVMInstall[] vmInstalls = vmInstallTypes[i].getVMInstalls();
-			int size2 = vmInstalls.length;
-			for (int j = 0; j < size2; j++) {
-				installedJREs.add(vmInstalls[j]);
-			}
-		}
-		
-		// get names
-		size = installedJREs.size();
-		jreNames = new String[size+1];
-		jreNames[0] = Messages.runtimeTypeDefaultJRE;
-		for (int i = 0; i < size; i++) {
-			IVMInstall vmInstall = (IVMInstall) installedJREs.get(i);
-			jreNames[i+1] = vmInstall.getName();
-		}
-	}
-
-	protected boolean showPreferencePage() {
-		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
-		IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage");
-		PreferenceManager manager2 = new PreferenceManager();
-		manager2.addToRoot(node);
-		final PreferenceDialog dialog = new PreferenceDialog(getShell(), manager2);
-		final boolean[] result = new boolean[] { false };
-		BusyIndicator.showWhile(getDisplay(), new Runnable() {
-			public void run() {
-				dialog.create();
-				if (dialog.open() == Window.OK)
-					result[0] = true;
-			}
-		});
-		return result[0];
-	}
-	
-	protected void init() {
-		if (installDir == null || runtime == null)
-			return;
-		
-		name.setText(runtimeWC.getName());
-		
-		if (runtimeWC.getLocation() != null)
-			installDir.setText(runtimeWC.getLocation().toOSString());
-		else
-			installDir.setText("");
-		
-		// set selection
-		if (((GenericRuntime)runtime).isUsingDefaultJRE())
-			combo.select(0);
-		else {
-			boolean found = false;
-			int size = installedJREs.size();
-			for (int i = 0; i < size; i++) {
-				IVMInstall vmInstall = (IVMInstall) installedJREs.get(i);
-				if (vmInstall.equals(runtime.getVMInstall())) {
-					combo.select(i + 1);
-					found = true;
-				}
-			}
-			if (!found)
-				combo.select(0);
-		}
-	}
-
-	protected void validate() {
-		if (runtime == null) {
-			wizard.setMessage("", IMessageProvider.ERROR);
-			return;
-		}
-
-		IStatus status = runtimeWC.validate(null);
-		if (status == null || status.isOK())
-			wizard.setMessage(null, IMessageProvider.NONE);
-		else
-			wizard.setMessage(status.getMessage(), IMessageProvider.ERROR);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeWizardFragment.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeWizardFragment.java
deleted file mode 100644
index 76a9180..0000000
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeWizardFragment.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.ui.internal;
-
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.ui.wizard.IWizardHandle;
-import org.eclipse.wst.server.ui.wizard.WizardFragment;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.swt.widgets.Composite;
-/**
- * 
- */
-public class GenericRuntimeWizardFragment extends WizardFragment {
-	protected GenericRuntimeComposite comp;
-	
-	/**
-	 * Create a new fragment.
-	 */
-	public GenericRuntimeWizardFragment() {
-		// do nothing
-	}
-
-	/**
-	 * @see WizardFragment#hasComposite()
-	 */
-	public boolean hasComposite() {
-		return true;
-	}
-
-	/**
-	 * @see WizardFragment#createComposite(Composite, IWizardHandle)
-	 */
-	public Composite createComposite(Composite parent, IWizardHandle wizard) {
-		comp = new GenericRuntimeComposite(parent, wizard);
-		return comp;
-	}
-
-	/**
-	 * @see WizardFragment#isComplete()
-	 */
-	public boolean isComplete() {
-		IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
-		
-		if (runtime == null)
-			return false;
-		IStatus status = runtime.validate(null);
-		return (status != null && status.isOK());
-	}
-
-	/**
-	 * @see WizardFragment#enter()
-	 */
-	public void enter() {
-		if (comp != null) {
-			IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
-			comp.setRuntime(runtime);
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java
deleted file mode 100644
index 9def455..0000000
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.ui.internal;
-
-import java.net.URL;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.ImageRegistry;
-/**
- * Utility class to handle image resources.
- */
-public class ImageResource {
-	// the image registry
-	private static ImageRegistry imageRegistry;
-
-	// map of image descriptors since these
-	// will be lost by the image registry
-	private static Map imageDescriptors;
-
-	// map of IElement images
-	private static Map elementImages;
-
-	// base urls for images
-	private static URL ICON_BASE_URL;
-
-	static {
-		try {
-			String pathSuffix = "icons/";
-			ICON_BASE_URL = JavaServerUIPlugin.getInstance().getBundle().getEntry(pathSuffix);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not set icon base URL", e);
-		}
-	}
-
-	private static final String URL_WIZBAN = "wizban/";
-
-	protected static final String IMG_RUNTIME_TYPE = "runtimeType";
-
-	/**
-	 * Cannot construct an ImageResource. Use static methods only.
-	 */
-	private ImageResource() {
-		// do nothing
-	}
-
-	/**
-	 * Dispose of element images that were created.
-	 */
-	protected static void dispose() {
-		try {
-			Trace.trace(Trace.FINEST, "Disposing of element images");
-			Iterator iterator = elementImages.values().iterator();
-			while (iterator.hasNext()) {
-				Image image = (Image) iterator.next();
-				image.dispose();
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not dispose of images");
-		}
-	}
-	
-	/**
-	 * Return the image with the given key.
-	 *
-	 * @param key java.lang.String
-	 * @return org.eclipse.swt.graphics.Image
-	 */
-	public static Image getImage(String key) {
-		if (imageRegistry == null)
-			initializeImageRegistry();
-		return imageRegistry.get(key);
-	}
-	
-	/**
-	 * Return the image descriptor with the given key.
-	 *
-	 * @param key java.lang.String
-	 * @return org.eclipse.jface.resource.ImageDescriptor
-	 */
-	public static ImageDescriptor getImageDescriptor(String key) {
-		if (imageRegistry == null)
-			initializeImageRegistry();
-		return (ImageDescriptor) imageDescriptors.get(key);
-	}
-
-	/**
-	 * Initialize the image resources.
-	 */
-	protected static void initializeImageRegistry() {
-		imageRegistry = new ImageRegistry();
-		imageDescriptors = new HashMap();
-	
-		registerImage(IMG_RUNTIME_TYPE, URL_WIZBAN + "new_runtime_wiz.gif");
-	}
-
-	/**
-	 * Register an image with the registry.
-	 *
-	 * @param key java.lang.String
-	 * @param partialURL java.lang.String
-	 */
-	private static void registerImage(String key, String partialURL) {
-		try {
-			ImageDescriptor id = ImageDescriptor.createFromURL(new URL(ICON_BASE_URL, partialURL));
-			imageRegistry.put(key, id);
-			imageDescriptors.put(key, id);
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Error registering image " + key + " from " + partialURL, e);
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/JavaServerUIPlugin.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/JavaServerUIPlugin.java
deleted file mode 100644
index fd42003..0000000
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/JavaServerUIPlugin.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.ui.internal;
-
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-/**
- * The main server tooling plugin class.
- */
-public class JavaServerUIPlugin extends AbstractUIPlugin {
-	/**
-	 * Java server UI plugin id
-	 */
-	public static final String PLUGIN_ID = "org.eclipse.jst.server.ui";
-
-	// singleton instance of this class
-	private static JavaServerUIPlugin singleton;
-
-	/**
-	 * Create the JavaServerUIPlugin.
-	 */
-	public JavaServerUIPlugin() {
-		super();
-		singleton = this;
-	}
-
-	/**
-	 * Returns the singleton instance of this plugin.
-	 *
-	 * @return org.eclipse.jst.server.ui.JavaServerUIPlugin
-	 */
-	public static JavaServerUIPlugin getInstance() {
-		return singleton;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.java
deleted file mode 100644
index 2f15119..0000000
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**********************************************************************
- * 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.jst.server.ui.internal;
-
-import org.eclipse.osgi.util.NLS;
-/**
- * Translated messages.
- */
-public class Messages extends NLS {
-	public static String runtimeTypeTitle;
-	public static String runtimeTypeDescription;
-	public static String runtimeTypeName;
-	public static String runtimeTypeLocation;
-	public static String runtimeTypeSelectLocation;
-	public static String runtimeTypeJRE;
-	public static String browse;
-	public static String runtimeTypeInstalledJREs;
-	public static String runtimeTypeDefaultJRE;
-	
-	static {
-		NLS.initializeMessages(JavaServerUIPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.properties b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.properties
deleted file mode 100644
index 2a8ed5b..0000000
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Messages.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2004, 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
-###############################################################################
-
-runtimeTypeTitle=Generic J2EE Runtime
-runtimeTypeDescription=Define a generic J2EE runtime. Specify a directory containing jar files to compile against.
-runtimeTypeName=Na&me:
-runtimeTypeLocation=&Location:
-browse=B&rowse...
-runtimeTypeSelectLocation=Select the location of the runtime.
-runtimeTypeJRE=&JRE:
-runtimeTypeDefaultJRE=Workbench default JRE
-runtimeTypeInstalledJREs=In&stalled JREs...
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/SWTUtil.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/SWTUtil.java
deleted file mode 100644
index b263b01..0000000
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/SWTUtil.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.ui.internal;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.FontMetrics;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-/**
- * SWT Utility class.
- */
-public class SWTUtil {
-	private static FontMetrics fontMetrics;
-
-	protected static void initializeDialogUnits(Control testControl) {
-		// Compute and store a font metric
-		GC gc = new GC(testControl);
-		gc.setFont(JFaceResources.getDialogFont());
-		fontMetrics = gc.getFontMetrics();
-		gc.dispose();
-	}
-
-	/**
-	 * Returns a width hint for a button control.
-	 */
-	protected static int getButtonWidthHint(Button button) {
-		int widthHint = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.BUTTON_WIDTH);
-		return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
-	}
-
-	/**
-	 * Create a new button with the standard size.
-	 * 
-	 * @param comp the component to add the button to
-	 * @param label the button label
-	 * @return a button
-	 */
-	public static Button createButton(Composite comp, String label) {
-		Button b = new Button(comp, SWT.PUSH);
-		b.setText(label);
-		if (fontMetrics == null)
-			initializeDialogUnits(comp);
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.widthHint = getButtonWidthHint(b);
-		b.setLayoutData(data);
-		return b;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Trace.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Trace.java
deleted file mode 100644
index 25d6791..0000000
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Trace.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.jst.server.ui.internal;
-/**
- * Helper class to route trace output.
- */
-public class Trace {
-	public static byte CONFIG = 0;
-	public static byte WARNING = 1;
-	public static byte SEVERE = 2;
-	public static byte FINEST = 3;
-
-	/**
-	 * Trace constructor comment.
-	 */
-	private Trace() {
-		super();
-	}
-
-	/**
-	 * Trace the given text.
-	 *
-	 * @param level a trace level
-	 * @param s a message
-	 */
-	public static void trace(byte level, String s) {
-		Trace.trace(level, s, null);
-	}
-	
-	/**
-	 * Trace the given message and exception.
-	 *
-	 * @param level a trace level
-	 * @param s a message
-	 * @param t a throwable
-	 */
-	public static void trace(byte level, String s, Throwable t) {
-		if (!JavaServerUIPlugin.getInstance().isDebugging())
-			return;
-
-		System.out.println(JavaServerUIPlugin.PLUGIN_ID + " " + s);
-		if (t != null)
-			t.printStackTrace();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/.classpath b/plugins/org.eclipse.wst.internet.monitor.core/.classpath
index 1d974a9..1149812 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/.classpath
+++ b/plugins/org.eclipse.wst.internet.monitor.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="monitorcore/"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/.cvsignore b/plugins/org.eclipse.wst.internet.monitor.core/.cvsignore
index 8ca260d..edeb15e 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/.cvsignore
+++ b/plugins/org.eclipse.wst.internet.monitor.core/.cvsignore
@@ -3,3 +3,5 @@
 build.xml
 temp.folder
 org.eclipse.wst.internet.monitor.core_3.0.0.jar
+@dot
+src.zip
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF
index 57f4849..d3591b4 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF
@@ -6,8 +6,8 @@
 Bundle-Activator: org.eclipse.wst.internet.monitor.core.internal.MonitorPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.internet.monitor.core.internal.provisional,
- org.eclipse.wst.internet.monitor.core.internal,
- org.eclipse.wst.internet.monitor.core.internal.http
+Export-Package: org.eclipse.wst.internet.monitor.core.internal;x-friends:="org.eclipse.wst.internet.monitor.ui",
+ org.eclipse.wst.internet.monitor.core.internal.http;x-friends:="org.eclipse.wst.internet.monitor.ui",
+ org.eclipse.wst.internet.monitor.core.internal.provisional
 Require-Bundle: org.eclipse.core.runtime
 Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/build.properties b/plugins/org.eclipse.wst.internet.monitor.core/build.properties
index 22d905d..b1a84a2 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/build.properties
+++ b/plugins/org.eclipse.wst.internet.monitor.core/build.properties
@@ -17,9 +17,7 @@
 bin.excludes = bin/**,\
                @dot/**,\
                temp.folder/**
-src.includes = build.properties,\
-               schema/,\
-               component.xml,\
-               about.html
+src.includes = schema/,\
+               component.xml
 source.. = monitorcore/
 output.. = bin/
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/component.xml b/plugins/org.eclipse.wst.internet.monitor.core/component.xml
index cef36f3..6974562 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/component.xml
+++ b/plugins/org.eclipse.wst.internet.monitor.core/component.xml
@@ -4,5 +4,5 @@
   <plugin id="org.eclipse.wst.internet.monitor.core" fragment="false"/>
   <plugin id="org.eclipse.wst.internet.monitor.ui" fragment="false"/>
   <plugin id="org.eclipse.wst.internet.proxy" fragment="false"/>
-  <plugin id="org.eclipse.wst.internet.webbrowser" fragment="false"/>
+  <plugin id="org.eclipse.wst.internet.cache" fragment="false"/>
 </component>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/AcceptThread.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/AcceptThread.java
index 3d7dd95..4c948d5 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/AcceptThread.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/AcceptThread.java
@@ -23,10 +23,10 @@
 
 	protected boolean alive = true;
 	protected ServerSocket serverSocket;
-	
+
 	protected Thread thread;
-	
-	class ServerThread extends Thread{
+
+	class ServerThread extends Thread {
 		/**
 		 * ServerThread accepts incoming connections and delegates to the protocol
 		 * adapter to deal with the connection.
@@ -42,19 +42,28 @@
 				Trace.trace(Trace.SEVERE, "Could not start monitoring");
 				return;
 			}
-
+			
 			while (alive) {
 				try {
 					// accept the connection from the client
 					Socket localSocket = serverSocket.accept();
 					
-					// connect to the remote server
-					Socket remoteSocket = new Socket(monitor.getRemoteHost(), monitor.getRemotePort());
-
-					// relay the call through
-					String protocolId = monitor.getProtocol();
-					ProtocolAdapter adapter = MonitorPlugin.getInstance().getProtocolAdapter(protocolId);
-					adapter.connect(monitor, localSocket, remoteSocket);
+					try {
+						// connect to the remote server
+						Socket remoteSocket = new Socket();
+						remoteSocket.connect(new InetSocketAddress(monitor.getRemoteHost(), monitor.getRemotePort()), monitor.getTimeout());
+						
+						// relay the call through
+						String protocolId = monitor.getProtocol();
+						ProtocolAdapter adapter = MonitorPlugin.getInstance().getProtocolAdapter(protocolId);
+						adapter.connect(monitor, localSocket, remoteSocket);
+					} catch (SocketTimeoutException e) {
+						FailedConnectionThread thread2 = new FailedConnectionThread((Monitor) monitor, localSocket, Messages.errorConnectTimeout);
+						thread2.start();
+					} catch (Exception e) {
+						FailedConnectionThread thread2 = new FailedConnectionThread((Monitor) monitor, localSocket, null);
+						thread2.start();
+					}
 				} catch (InterruptedIOException e) {
 					// do nothing
 				} catch (Exception e) {
@@ -83,7 +92,21 @@
 			return;
 		thread = new ServerThread();
 		thread.setDaemon(true);
+		thread.setPriority(Thread.NORM_PRIORITY + 1);
 		thread.start();
+		
+		Thread.yield();
+		
+		// wait up to 2 seconds for initialization
+		int i = 0;
+		while (serverSocket == null && i < 10) {
+			try {
+				Thread.sleep(200);
+			} catch (Exception e) {
+				// ignore
+			}
+			i++;
+		}
 	}
 
 	/**
@@ -107,7 +130,8 @@
 			String protocolId = monitor.getProtocol();
 		   ProtocolAdapter adapter = MonitorPlugin.getInstance().getProtocolAdapter(protocolId);
 			adapter.disconnect(monitor);
-			serverSocket.close();
+			if (serverSocket != null)
+				serverSocket.close();
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error stopping server", e);
 		}
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/FailedConnectionThread.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/FailedConnectionThread.java
new file mode 100644
index 0000000..b1d4547
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/FailedConnectionThread.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * 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.wst.internet.monitor.core.internal;
+
+import java.io.InputStream;
+import java.net.Socket;
+
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+
+/**
+ * Thread used if the connection to the server fails.
+ */
+public class FailedConnectionThread extends Thread {
+	private static final int BUFFER = 2048;
+	protected Monitor monitor;
+	protected Socket socket;
+	protected String error;
+
+	public FailedConnectionThread(Monitor monitor, Socket socket, String error) {
+		super();
+		this.monitor = monitor;
+		this.socket = socket;
+		this.error = error;
+	}
+
+	public void run() {
+		Request request = new Request(monitor, IProtocolAdapter.TCPIP_PROTOCOL_ID, monitor.getLocalPort(), monitor.getRemoteHost(), monitor.getRemotePort());
+		String err = error;
+		if (err == null)
+			err = Messages.errorConnectToServer;
+		request.addToResponse(err.getBytes());
+		
+		try {
+			InputStream in = socket.getInputStream();
+			byte[] b = new byte[BUFFER];
+			while (in.available() > 0) {
+				int n = in.read(b);
+				byte[] c = new byte[n];
+				System.arraycopy(b, 0, c, 0, n);
+				request.addToRequest(c);
+			}
+		} catch (Exception e) {
+			// ignore
+		} finally {
+			try {
+				socket.shutdownInput();
+				socket.shutdownOutput();
+				socket.close();
+			} catch (Exception ex) {
+				// ignore
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IContentFilter.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IContentFilter.java
index bc8db6c..82d3144 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IContentFilter.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IContentFilter.java
@@ -18,7 +18,7 @@
  * <p>
  * This interface is not intended to be implemented by clients.
  * </p>
- * @since 1.0
+ * @plannedfor 1.0
  */
 public interface IContentFilter {
 	/**
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IProtocolAdapter.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IProtocolAdapter.java
index 4403f1c..9952086 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IProtocolAdapter.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IProtocolAdapter.java
@@ -24,7 +24,7 @@
  * This interface is not intended to be implemented by clients.
  * </p>
  * 
- * @since 1.0
+ * @plannedfor 1.0
  */
 public interface IProtocolAdapter {
 	/**
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IStartup.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IStartup.java
index 475b5e1..96b6481 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IStartup.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/IStartup.java
@@ -15,7 +15,7 @@
  * core plug-in initializes and have an opportunity to run code that can't be
  * implemented using the normal contribution mechanisms.
  * 
- * @since 1.0
+ * @plannedfor 1.0
  */
 public interface IStartup {
 	/**
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Messages.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Messages.java
index 0374f5c..089735e 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Messages.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Messages.java
@@ -18,6 +18,8 @@
 	public static String errorInvalidLocalPort;
 	public static String errorInvalidRemotePort;
 	public static String errorInvalidRemoteHost;
+	public static String errorConnectToServer;
+	public static String errorConnectTimeout;
 	public static String monitorValid;
 	public static String errorPortInUse;
 
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Messages.properties b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Messages.properties
index e5152d4..36a1ef0 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Messages.properties
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Messages.properties
@@ -14,5 +14,7 @@
 errorInvalidLocalPort=The local port number is invalid.
 errorInvalidRemotePort=The remote port number is invalid.
 errorInvalidRemoteHost=The remote host name is invalid.
+errorConnectToServer=Error: Could not connect to server.
+errorConnectTimeout=Error: Timeout connecting to server.
 
 monitorValid=The monitor is valid.
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Monitor.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Monitor.java
index 4cca7aa..5aec244 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Monitor.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Monitor.java
@@ -26,7 +26,8 @@
 	private static final String MEMENTO_REMOTE_HOST = "remote-host";
 	private static final String MEMENTO_REMOTE_PORT = "remote-port";
 	private static final String MEMENTO_TYPE_ID = "type-id";
-	
+	private static final String MEMENTO_TIMEOUT = "timeout";
+
 	private static final int ADD = 0;
 	private static final int CHANGE = 1;
 
@@ -35,7 +36,8 @@
 	protected int remotePort = 80;
 	protected int localPort = 80;
 	protected String protocolId;
-	
+	protected int timeout;
+
 	protected List requestListeners = new ArrayList(2);
 
 	/**
@@ -81,6 +83,13 @@
 	}
 
 	/** (non-Javadoc)
+	 * @see IMonitor#getTimeout()
+	 */
+	public int getTimeout() {
+		return timeout;
+	}
+
+	/** (non-Javadoc)
 	 * @see IMonitor#isRunning()
 	 */
 	public boolean isRunning() {
@@ -111,21 +120,23 @@
 	public IMonitorWorkingCopy createWorkingCopy() {
 		return new MonitorWorkingCopy(this);
 	}
-	
+
 	protected void setInternal(IMonitor monitor) {
 		id = monitor.getId();
 		remoteHost = monitor.getRemoteHost();
 		remotePort = monitor.getRemotePort();
 		localPort = monitor.getLocalPort();
 		protocolId = monitor.getProtocol();
+		timeout = monitor.getTimeout();
 	}
-	
+
 	protected void save(IMemento memento) {
 		memento.putString(MEMENTO_ID, id);
 		memento.putString(MEMENTO_TYPE_ID, protocolId);
 		memento.putInteger(MEMENTO_LOCAL_PORT, localPort);
 		memento.putString(MEMENTO_REMOTE_HOST, remoteHost);
 		memento.putInteger(MEMENTO_REMOTE_PORT, remotePort);
+		memento.putInteger(MEMENTO_TIMEOUT, timeout);
 	}
 
 	protected void load(IMemento memento) {
@@ -138,6 +149,9 @@
 		temp = memento.getInteger(MEMENTO_REMOTE_PORT);
 		if (temp != null)
 			remotePort = temp.intValue();
+		temp = memento.getInteger(MEMENTO_TIMEOUT);
+		if (temp != null)
+			timeout = temp.intValue();
 	}
 	
 	/**
@@ -239,7 +253,7 @@
 		if (isLocalhost(remoteHost) && localPort == remotePort)
 			return new Status(IStatus.ERROR, MonitorPlugin.PLUGIN_ID, 0, Messages.errorInvalidLocalPort, null);
 	
-		return new Status(IStatus.OK, MonitorPlugin.PLUGIN_ID, 0, Messages.monitorValid, null);
+		return Status.OK_STATUS;
 	}
 
 	protected static boolean isValidHostname(String host) {
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorManager.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorManager.java
index 2740ed4..e033615 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorManager.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorManager.java
@@ -290,13 +290,10 @@
 	 * @return the array of resend requests based on this request
 	 */
 	public ResendHTTPRequest[] getResendRequests(Request request) {
-		try {
-			List list = (List) resendMap.get(request);
-			ResendHTTPRequest[] rr = new ResendHTTPRequest[list.size()];
-			list.toArray(rr);
-			return rr;
-		} catch (Exception e) {
-			return new ResendHTTPRequest[0];
-		}
+		List list = (List) resendMap.get(request);
+		if (list != null)
+			return (ResendHTTPRequest[]) list.toArray(new ResendHTTPRequest[list.size()]);
+
+		return new ResendHTTPRequest[0];
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorWorkingCopy.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorWorkingCopy.java
index 1e1571c..519de72 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorWorkingCopy.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorWorkingCopy.java
@@ -78,7 +78,14 @@
 	public void setProtocol(String protocolId2) {
 		protocolId = protocolId2;
 	}
-	
+
+	/** (non-Javadoc)
+	 * @see IMonitorWorkingCopy#setTimeout(int)
+	 */
+	public void setTimeout(int timeout2) {
+		timeout = timeout2;
+	}
+
 	/**
 	 * @see IMonitor#isWorkingCopy()
 	 */
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapter.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapter.java
index 54689df..44f8c0e 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapter.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapter.java
@@ -20,7 +20,7 @@
 public class ProtocolAdapter implements IProtocolAdapter {
 	protected IConfigurationElement element;
 	protected ProtocolAdapterDelegate delegate;
-	
+
 	protected ProtocolAdapter(IConfigurationElement element) {
 		this.element = element;
 	}
@@ -31,14 +31,14 @@
 	public String getId() {
 		return element.getAttribute("id");
 	}
-	
+
 	/**
 	 * @see IProtocolAdapter#getName()
 	 */
 	public String getName() {
 		return element.getAttribute("name");
 	}
-	
+
 	protected ProtocolAdapterDelegate getDelegate() {
 		if (delegate != null)
 			return delegate;
@@ -50,7 +50,7 @@
 		}
 		return delegate;
 	}
-	
+
 	/**
 	 * Connect with the protocol.
 	 * 
@@ -62,7 +62,7 @@
 	public void connect(IMonitor monitor, Socket in, Socket out) throws IOException {
 		getDelegate().connect(monitor, in, out);
 	}
-	
+
 	/**
 	 * Disconnect from the sockets.
 	 * 
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapterDelegate.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapterDelegate.java
index 0b41554..6e94723 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapterDelegate.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapterDelegate.java
@@ -40,7 +40,7 @@
  * being shut down.]
  * </p>
  * 
- * @since 1.0
+ * @plannedfor 1.0
  */
 public abstract class ProtocolAdapterDelegate {
 	/**
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPProtocolAdapter.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPProtocolAdapter.java
index f10292f..7968e70 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPProtocolAdapter.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPProtocolAdapter.java
@@ -23,7 +23,7 @@
  */
 public class HTTPProtocolAdapter extends ProtocolAdapterDelegate {
 	protected Map map = new HashMap();
-	
+
 	/**
 	 * @see ProtocolAdapterDelegate#connect(IMonitor, Socket, Socket)
 	 */
@@ -36,14 +36,15 @@
 		request.start();
 		response.start();
 	}
-	
+
 	/**
 	 * @see ProtocolAdapterDelegate#disconnect(IMonitor)
 	 */
 	public void disconnect(IMonitor monitor) throws IOException {
 		try {
 			Connection conn = (Connection) map.get(monitor);
-			conn.close();
+			if (conn != null)
+				conn.close();
 		} catch (Exception e) {
 			// ignore
 		}
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
index a360747..e2650d1 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
@@ -45,7 +45,8 @@
 	protected int contentLength = -1;
 	protected byte transferEncoding = -1;
 	protected String responseType = null;
-	protected boolean keepAlive = false;
+	protected boolean connectionKeepAlive = false;
+	protected boolean connectionClose = false;
 
 	protected static final String[] ENCODING_STRING = new String[] {
 		"chunked", "identity", "gzip", "compressed", "deflate"};
@@ -189,6 +190,11 @@
 	public void parseBody() throws IOException {
 		Trace.trace(Trace.PARSING, "Parsing body for: " + this);
 		
+		if (responseType != null && ("204".equals(responseType) || "304".equals(responseType))) {
+			setHTTPBody(new byte[0]);
+			return;
+		}
+	
 		if (isRequest) {
 			if (contentLength != -1) {
 				byte[] b = readBytes(contentLength);
@@ -204,7 +210,7 @@
 		}
 	
 		// just return body for HTTP 1.0 responses
-		if (!isRequest && !keepAlive && contentLength == -1 && transferEncoding == -1) {
+		if (!isRequest && !connectionKeepAlive && contentLength == -1 && transferEncoding == -1) {
 			Trace.trace(Trace.PARSING, "Assuming HTTP 1.0 for: " + this);
 			int n = buffer.length - bufferIndex;
 			byte[] b = readBytes(n);
@@ -238,7 +244,7 @@
 		}
 	
 		// spec 4.4.1
-		if (responseType != null &&	(responseType.startsWith("1") || "204".equals(responseType) || "304".equals(responseType))) {
+		if (responseType != null && responseType.startsWith("1")) {
 			setHTTPBody(new byte[0]);
 			return;
 		}
@@ -459,20 +465,24 @@
 				while (true) {
 					contentLength = -1;
 					transferEncoding = -1;
-					keepAlive = false;
+					connectionKeepAlive = false;
+					connectionClose = false;
 
 					parseHeader();
 					parseBody();
 					
-					if (isRequest && keepAlive)
+					if (isRequest && connectionKeepAlive)
 						waitForResponse();
 					
 					//Request r = conn.getRequestResponse(true);
 					//r.fireChangedEvent();
 
-					Trace.trace(Trace.PARSING, "Done HTTP request for " + this + " " + keepAlive);
-					if (!isRequest && !request.keepAlive) {
+					Trace.trace(Trace.PARSING, "Done HTTP request for " + this + " " + connectionKeepAlive);
+					if (!isRequest && (!request.connectionKeepAlive || connectionClose)) {
 						conn2.close();
+						if (request.connectionKeepAlive && connectionClose)
+							request.connectionKeepAlive = false;
+							notifyRequest();
 						break;
 					}
 					
@@ -543,8 +553,16 @@
 			try {
 				String t = s.substring(11).trim();
 				if (t.equalsIgnoreCase("Keep-Alive"))
-					keepAlive = true;
-				Trace.trace(Trace.PARSING, "Keep alive: " + keepAlive);
+					connectionKeepAlive = true;
+				// response contains "Connection: close" header
+				// close connection to the client even if "keepalive" had been requested
+				// we can't just reset request.keepAlive - it's used as indicator whether
+				// the request thread is (going to) wait for the response thread
+				// (and must be notified (only then)),
+				// so we have to let it alone
+				if (t.equalsIgnoreCase("close"))
+					connectionClose = true;
+				Trace.trace(Trace.PARSING, "Keep alive: " + connectionKeepAlive);
 			} catch (Exception e) {
 				Trace.trace(Trace.PARSING, "Error getting Connection: from header", e);
 			}
@@ -587,7 +605,7 @@
 
 	protected void notifyRequest() {
 		Trace.trace(Trace.PARSING, "Notifying request " + this);
-		while (request.keepAlive && !request.isWaiting) {
+		while (request.connectionKeepAlive && !request.isWaiting) {
 			Trace.trace(Trace.PARSING, "Waiting for request " + this);
 			try {
 				Thread.sleep(100);
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/ResendHTTPRequest.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/ResendHTTPRequest.java
index b015a99..2a48859 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/ResendHTTPRequest.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/ResendHTTPRequest.java
@@ -100,7 +100,9 @@
 	 * @param type
 	 */
 	public void setRequest(byte[] request, int type) {
-		if (type == TRANSPORT && request != null)
+		if (request == null)
+			request = new byte[0];
+		if (type == TRANSPORT)
 			header = request;
 		else if (type == CONTENT)
 			content = request;
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/ContentFilterDelegate.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/ContentFilterDelegate.java
index d68f35e..e5ca144 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/ContentFilterDelegate.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/ContentFilterDelegate.java
@@ -31,7 +31,7 @@
  * but usually UI's and filters are tightly coupled.
  * </p>
  * 
- * @since 1.0
+ * @plannedfor 1.0
  */
 public abstract class ContentFilterDelegate {
 	/**
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitor.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitor.java
index d474fbe..0bc79b7 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitor.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitor.java
@@ -33,7 +33,7 @@
  * This interface is not intended to be implemented by clients.
  * </p>
  * @see IMonitorWorkingCopy
- * @since 1.0
+ * @plannedfor 1.0
  */
 public interface IMonitor {
 	/**
@@ -76,6 +76,13 @@
 	public String getProtocol();
 
 	/**
+	 * Returns the connection timeout. Returns 0 if there is no timeout.
+	 * 
+	 * @return the timeout
+	 */
+	public int getTimeout();
+
+	/**
 	 * Returns whether this monitor is currently running. Monitor working
 	 * copies will always return false (since they cannot be run).
 	 * 
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorListener.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorListener.java
index e4e0482..b94877d 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorListener.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorListener.java
@@ -16,7 +16,7 @@
  * their listener via {@link MonitorCore#addMonitorListener(IMonitorListener)}.
  * </p>
  * 
- * @since 1.0
+ * @plannedfor 1.0
  */
 public interface IMonitorListener {
 	
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorWorkingCopy.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorWorkingCopy.java
index 59edacc..6ecde49 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorWorkingCopy.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorWorkingCopy.java
@@ -22,7 +22,7 @@
  * This interface is not intended to be implemented by clients.
  * </p>
  * @see IMonitor
- * @since 1.0
+ * @plannedfor 1.0
  * 
  * [issue : CS - it sounds like this is something useful for creating monitors. 
  * Shouldn't this be called a IMonitorConfiguration?  Is there an advantage to making
@@ -74,6 +74,14 @@
 	public void setProtocol(String protocolId);
 
 	/**
+	 * Sets the connection timeout. Use 0 to clear the timeout.
+	 * 
+	 * @param timeout the connection timeout
+	 * @see IMonitor#getTimeout()
+	 */
+	public void setTimeout(int timeout);
+
+	/**
 	 * Saves the changes made to this working copy.
 	 * For a brand new working copy (created by
 	 * {@link MonitorCore#createMonitor()}, and not yet saved), this method
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IRequestListener.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IRequestListener.java
index cfbbc0a..a0949ff 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IRequestListener.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IRequestListener.java
@@ -22,7 +22,7 @@
  * </p>
  * 
  * @see IMonitor#addRequestListener(IRequestListener)
- * @since 1.0
+ * @plannedfor 1.0
  */
 public interface IRequestListener {
 	/**
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/MonitorCore.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/MonitorCore.java
index aa7f2de..4b244fb 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/MonitorCore.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/MonitorCore.java
@@ -21,7 +21,7 @@
  * to be instantiated or subclassed.
  * </p>
  * 
- * @since 1.0
+ * @plannedfor 1.0
  */
 public final class MonitorCore {
 	private static MonitorManager manager;
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/Request.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/Request.java
index 386768e..f66d92d 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/Request.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/Request.java
@@ -31,7 +31,7 @@
  * to extend the <code>protocolAdapters</code> extension point. 
  * </p>
  * 
- * @since 1.0
+ * @plannedfor 1.0
  */
 public class Request implements IAdaptable {
 	protected Monitor monitor;
@@ -153,7 +153,7 @@
 	 * </p>
 	 *
 	 * @param type the content type: one of {@link #TRANSPORT},
-	 * {@link #CONTENT}, or {@link #ALL}
+	 *    {@link #CONTENT}, or {@link #ALL}
 	 * @return the content bytes
 	 */
 	public byte[] getRequest(int type) {
@@ -171,7 +171,7 @@
 	 * </p>
 	 *
 	 * @param type the content type: one of {@link #TRANSPORT},
-	 * {@link #CONTENT}, or {@link #ALL}
+	 *    {@link #CONTENT}, or {@link #ALL}
 	 * @return the content bytes
 	 */
 	public byte[] getResponse(int type) {
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/package.html b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/package.html
new file mode 100644
index 0000000..505ed58
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/package.html
@@ -0,0 +1,31 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
+<title>WTP API overview</title>
+</head>
+<body>
+<p>This package gives core (non-UI) access to the TCP/IP monitor. Clients can
+query for existing monitors, create new monitors, start/stop monitors, and
+listen for requests being received by a running monitor.</p>
+<table width="500">
+<tr>
+<td>
+<p>The MonitorCore class gives initial access to all of the API. From here you
+can query the existing monitors, create new ones, and add/remove a listener for
+monitor changes.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>The IMonitor interface provides information about a particular monitor,
+allowing you to change it via a working copy, start/stop it, or add a listener
+for request activity.</p>
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/package.xml b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/package.xml
index 2b80e09..3f4e04a 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/package.xml
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/package.xml
@@ -10,11 +10,10 @@
 
 <body>
 
-<p>TCP/IP monitor core</p>
 
-<p>This package gives core (non-UI) access to the TCP/IP monitor. Clients can
+<abstract>This package gives core (non-UI) access to the TCP/IP monitor. Clients can
 query for existing monitors, create new monitors, start/stop monitors, and
-listen for requests being received by a running monitor.</p>
+listen for requests being received by a running monitor.</abstract>
 
 <p>The MonitorCore class gives initial access to all of the API. From here you
 can query the existing monitors, create new ones, and add/remove a listener for
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.classpath b/plugins/org.eclipse.wst.internet.monitor.ui/.classpath
index 0631920..3590fb5 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/.classpath
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="monitorui/"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.cvsignore b/plugins/org.eclipse.wst.internet.monitor.ui/.cvsignore
index 7d2f75b..2eeb8bd 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/.cvsignore
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.cvsignore
@@ -3,3 +3,5 @@
 build.xml
 temp.folder
 org.eclipse.wst.internet.monitor.ui_3.0.0.jar
+@dot
+src.zip
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
index 85e5bf2..c8e7695 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
@@ -6,10 +6,10 @@
 Bundle-Activator: org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.internet.monitor.ui.internal,
+Export-Package: org.eclipse.wst.internet.monitor.ui.internal;x-internal:=true,
  org.eclipse.wst.internet.monitor.ui.internal.provisional,
- org.eclipse.wst.internet.monitor.ui.internal.view,
- org.eclipse.wst.internet.monitor.ui.internal.viewers
+ org.eclipse.wst.internet.monitor.ui.internal.view;x-internal:=true,
+ org.eclipse.wst.internet.monitor.ui.internal.viewers;x-internal:=true
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.ui.ide,
  org.eclipse.ui,
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/build.properties b/plugins/org.eclipse.wst.internet.monitor.ui/build.properties
index 4736b33..7454728 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/build.properties
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/build.properties
@@ -17,8 +17,6 @@
 bin.excludes = bin/**,\
                @dot/**,\
                temp.folder/**
-src.includes = schema/,\
-               build.properties,\
-               about.html
+src.includes = schema/
 source.. = monitorui/
 output.. = bin/
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.java
index be61d11..cb3d5ca 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.java
@@ -21,6 +21,7 @@
 	public static String remoteHost;
 	public static String remotePort;
 	public static String remoteGroup;
+	public static String connectionTimeout;
 	public static String parseType;
 	public static String errorDialogTitle;
 	public static String preferenceDescription;
@@ -40,6 +41,7 @@
 	public static String headerLabel;
 	public static String imageViewInvalid;
 	public static String xmlViewInvalid;
+	public static String htmlViewInvalid;
 	public static String viewDateFormat;
 	public static String viewTime;
 	public static String viewResponseTime;
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.properties b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.properties
index 829cd25..16b4d73 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.properties
@@ -20,45 +20,53 @@
 viewSize=Size: {0}
 viewResponseTimeFormat={0} ms
 viewSizeFormat={0} ({1}) bytes
+
+# The following string allows you to change the time format of the TCP/IP monitor
+# view. It uses the formatting options found in java.text.SimpleDateFormat:
+#   k - hour in day, h - hour in am/pm, m - minute, s - second, S - millisecond,
+#   a - am/pm marker. use duplicate chars (e.g. 'mm') to fill with zeros (i.e. 
+#   '01' instead of '1')
 viewDateFormat=h:mm.s.S a
 
 # Actions
-actionSortByResponseTime=Sort by response time
+actionSortByResponseTime=Sort By Response Time
 actionClearToolTip=Clear
-actionShowHeader=Show header
-actionProperties=Properties...
+actionShowHeader=Show Header
+actionProperties=Properties
 
 
 # --------------- RequestResponse Viewers ---------------
-headerLabel=Header
+headerLabel=Header: {0}
 imageViewInvalid=<Not a valid image file>
 xmlViewInvalid=<Not a valid XML file>
+htmlViewInvalid=<Not a valid HTML file>
 
 # --------------- Errors ---------------
 errorDialogTitle=Error
 
 # --------------- General UI ---------------
-monitorList=TCP/IP Monitors:
+monitorList=TCP/IP &Monitors:
 columnLocal=Local Port
 columnRemote=Host name
 columnType=Type
 columnStatus=Status
-add=Add...
-edit=Edit...
-remove=Remove
-start=Start
-stop=Stop
+add=&Add...
+edit=&Edit...
+remove=&Remove
+start=&Start
+stop=S&top
 started=Started
 stopped=Stopped
 
 newMonitor=New Monitor
 editMonitor=Edit Monitor
 
-localPort=Local monitoring port:
+localPort=&Local monitoring port:
 remoteGroup=Monitor
-remoteHost=Host name:
-remotePort=Port:
-parseType=Type:
+remoteHost=&Host name:
+remotePort=&Port:
+parseType=&Type:
+connectionTimeout=T&imeout (in milliseconds):
 
 preferenceDescription=Configure TCP/IP monitors on local and remote ports.
-prefShowView=&Show the TCP/IP Monitor view when there is activity
\ No newline at end of file
+prefShowView=S&how the TCP/IP Monitor view when there is activity
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorDialog.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorDialog.java
index b9aa6f2..571a3b4 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorDialog.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorDialog.java
@@ -26,6 +26,7 @@
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.wst.internet.monitor.core.internal.IProtocolAdapter;
@@ -39,21 +40,24 @@
 	protected boolean isEdit;
 	
 	private Button okButton;
-	private Text monitorPort;
-	private Text remotePort;
-	
+	private Spinner monitorPort;
+
 	interface StringModifyListener {
 		public void valueChanged(String s);
 	}
-	
+
 	interface BooleanModifyListener {
 		public void valueChanged(boolean b);
 	}
-	
+
 	interface TypeModifyListener {
 		public void valueChanged(IProtocolAdapter type);
 	}
 
+	interface IntModifyListener {
+		public void valueChanged(int i);
+	}
+
 	/**
 	 * Create a new monitor dialog.
 	 * 
@@ -83,7 +87,7 @@
 	protected Label createLabel(Composite comp, String txt) {
 		Label label = new Label(comp, SWT.NONE);
 		label.setText(txt);
-		label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING));
+		label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER));
 		return label;
 	}
 	
@@ -91,7 +95,7 @@
 		final Text text = new Text(comp, SWT.BORDER);
 		if (txt != null)
 			text.setText(txt);
-		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
 		data.widthHint = 150;
 		text.setLayoutData(data);
 		if (listener != null)
@@ -102,7 +106,25 @@
 			});
 		return text;
 	}
-	
+
+	protected Spinner createSpinner(Composite comp, int v, final IntModifyListener listener) {
+		final Spinner s = new Spinner(comp, SWT.BORDER);
+		s.setMinimum(0);
+		s.setMaximum(Integer.MAX_VALUE);
+		if (v != -1)
+			s.setSelection(v);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
+		data.widthHint = 150;
+		s.setLayoutData(data);
+		if (listener != null)
+			s.addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {	
+					listener.valueChanged(s.getSelection());
+				}
+			});
+		return s;
+	}
+
 	protected Combo createTypeCombo(Composite comp, final String[] types, String sel, final StringModifyListener listener) {
 		final Combo combo = new Combo(comp, SWT.DROP_DOWN | SWT.READ_ONLY);
 		int size = types.length;
@@ -116,7 +138,7 @@
 		combo.setItems(items);
 		if (index >= 0)
 			combo.select(index);
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
 		data.widthHint = 150;
 		combo.setLayoutData(data);
 		if (listener != null)
@@ -141,10 +163,10 @@
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.PREF_DIALOG);
 		
 		createLabel(composite, Messages.localPort);		
-		monitorPort = createText(composite, monitor.getLocalPort() + "", new StringModifyListener() {
-			public void valueChanged(String s) {
+		monitorPort = createSpinner(composite, monitor.getLocalPort(), new IntModifyListener() {
+			public void valueChanged(int i) {
 				try {
-					monitor.setLocalPort(Integer.parseInt(s));
+					monitor.setLocalPort(i);
 				} catch (Exception e) {
 					// ignore
 				}
@@ -169,10 +191,10 @@
 		});
 		
 		createLabel(group, Messages.remotePort);		
-		remotePort = createText(group, monitor.getRemotePort() + "", new StringModifyListener() {
-			public void valueChanged(String s) {
+		createSpinner(group, monitor.getRemotePort(), new IntModifyListener() {
+			public void valueChanged(int i) {
 				try {
-					monitor.setRemotePort(Integer.parseInt(s));
+					monitor.setRemotePort(i);
 				} catch (Exception e) {
 					// ignore
 				}
@@ -187,6 +209,18 @@
 			}
 		});
 		
+		createLabel(group, Messages.connectionTimeout);
+		createSpinner(group, monitor.getTimeout(), new IntModifyListener() {
+			public void valueChanged(int i) {
+				try {
+					monitor.setTimeout(i);
+				} catch (Exception e) {
+					// ignore
+				}
+				validateFields();
+			}
+		});
+		
 		return composite;
 	}
 
@@ -222,13 +256,6 @@
 			return;
 		
 		boolean result = true;
-		try {
-			Integer.parseInt(remotePort.getText());
-			Integer.parseInt(monitorPort.getText());
-		} catch (Exception e) {
-			result = false;
-		}
-		
 		IStatus status = monitor.validate();
 		if (!status.isOK())
 			result = false;
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorPreferencePage.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorPreferencePage.java
index ff767cb..a087469 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorPreferencePage.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorPreferencePage.java
@@ -337,4 +337,12 @@
 			stop.setEnabled(false);
 		}
 	}
+	
+	/**
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), ContextIds.PREF);
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/ContentViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/ContentViewer.java
index 95cd4a7..474378b 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/ContentViewer.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/ContentViewer.java
@@ -33,7 +33,7 @@
  * [issue: CS - If a ContentViewer is editable, does that mean we can edit the 
  * bytes of the message and resend it across the wire?  How is an editable ContentViewer
  * handled differently by the framework? Perhaps an example of what an editeable viewer would do. ]
- * @since 1.0
+ * @plannedfor 1.0
  */
 public abstract class ContentViewer {
 	/**
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/MonitorUICore.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/MonitorUICore.java
index e25d664..3fb4351 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/MonitorUICore.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/MonitorUICore.java
@@ -19,7 +19,7 @@
  * to be instantiated or subclassed.
  * </p>
  * 
- * @since 1.0
+ * @plannedfor 1.0
  */
 public final class MonitorUICore {
 	/**
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.html b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.html
new file mode 100644
index 0000000..d28b6c2
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.html
@@ -0,0 +1,21 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
+<title>WTP API overview</title>
+</head>
+<body>
+<p>TCP/IP monitor UI</p>
+<table width="500">
+<tr>
+<td>
+<p>The ContentViewer class is provided to
+implement the viewers extension point that allows external plugins to provide
+a view for viewing request and response data content in the monitor view.
+</p>
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.xml b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.xml
index 76873b1..be41a27 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.xml
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.xml
@@ -9,7 +9,7 @@
 </head>
 
 <body>
-<p>TCP/IP monitor UI</p>
+<abstract>TCP/IP monitor UI</abstract>
 
 <p>The ContentViewer class is provided to
 implement the viewers extension point that allows external plugins to provide
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/FilterAction.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/FilterAction.java
index cc79b00..3c4d83f 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/FilterAction.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/FilterAction.java
@@ -17,11 +17,11 @@
  * 
  */
 public class FilterAction extends Action {
-	protected IViewerManager vm;
+	protected ViewerManager vm;
 	protected IContentFilter filter;
 	protected boolean enabled;
 
-	public FilterAction(IViewerManager vm, IContentFilter filter) {
+	public FilterAction(ViewerManager vm, IContentFilter filter) {
 		super(filter.getName(), IAction.AS_CHECK_BOX);
 		this.vm = vm;
 		this.filter = filter;
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/IViewerManager.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/IViewerManager.java
deleted file mode 100644
index 3e41348..0000000
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/IViewerManager.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.internet.monitor.ui.internal.view;
-
-import java.util.List;
-
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.wst.internet.monitor.core.internal.IContentFilter;
-import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
-import org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer;
-import org.eclipse.wst.internet.monitor.ui.internal.viewers.HeaderViewer;
-/**
- * Manager interface for TCP/IP request and response message viewers
- */
-public interface IViewerManager {
-	/**
-	 * Set whether or not to show HTTP header details.
-	 * 
-	 * @param b boolean
-	 */
-	public void setDisplayHeaderInfo(boolean b);
-	
-	/**
-	 * Returns whether or not HTTP header details is showing.
-	 * 
-	 * @return boolean
-	 */
-	public boolean getDisplayHeaderInfo();
-	
-	/**
-	 * Show the TCP/IP request message in a parent Composite
-	 * 
-	 * @param request the request
-	 */
-	public void setRequest(Request request);
-	
-	/**
-	 * Returns an array of the available TCP/IP request viewer ids
-	 * 
-	 * @return a list of request viewers
-	 */
-	public List getRequestViewers();
-	
-	/**
-	 * Returns an array of the available TCP/IP response viewer ids
-	 * 
-	 * @return a list of response viewers
-	 */
-	public List getResponseViewers();
-	
-	/**
-	 * Set the TCP/IP request message viewer
-	 * 
-	 * @param element
-	 */
-	public void setRequestViewer(IConfigurationElement element);
-	
-	/**
-	 * Set the TCP/IP response message viewer
-	 * 
-	 * @param element
-	 */
-	public void setResponseViewer(IConfigurationElement element);
-	
-	/**
-	 * 
-	 * @param filter
-	 */
-	public void addFilter(IContentFilter filter);
-	
-	/**
-	 * 
-	 * @param filter
-	 */
-	public void removeFilter(IContentFilter filter);
-	
-	/**
-	 * Return the current request viewer.
-	 * 
-	 * @return the current request viewer
-	 */
-	public ContentViewer getCurrentRequestViewer();
-	
-	/**
-	 * Return the current request header viewer.
-	 * 
-	 * @return the current request header viewer
-	 */
-	public HeaderViewer getCurrentRequestHeaderViewer();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorView.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorView.java
index fdde091..078e699 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorView.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorView.java
@@ -14,7 +14,6 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.jface.action.*;
 import org.eclipse.jface.preference.IPreferenceNode;
 import org.eclipse.jface.preference.PreferenceDialog;
@@ -25,8 +24,8 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Combo;
@@ -52,15 +51,16 @@
 	protected MonitorTreeContentProvider contentProvider;
 
 	protected IRequestListener listener;
-	protected IViewerManager vm;
+	protected ViewerManager vm;
 	protected List requestViewers;
 	protected List responseViewers;
 
-	protected static SimpleDateFormat format = new SimpleDateFormat(Messages.viewDateFormat);
+	protected static SimpleDateFormat format;
 	protected static final String VIEW_ID = "org.eclipse.wst.internet.monitor.view";
-	protected static final String DEFAULT_VIEWER = "org.eclipse.wst.internet.monitor.viewers.byteviewer";
+	protected static final String DEFAULT_VIEWER = "org.eclipse.wst.internet.monitor.viewers.byte";
 
 	protected IAction httpHeaderAction;
+	protected IAction preferenceAction;
 	
 	public static MonitorView view;
 	
@@ -73,6 +73,13 @@
 	public MonitorView() {
 		super();
 		view = this;
+		
+		// try specified format, and fall back to standard format
+		try {
+			format = new SimpleDateFormat(Messages.viewDateFormat);
+		} catch (Exception e) {
+			format = new SimpleDateFormat("h:mm.s.S a");
+		}
 	}
 
 	public void doRequestAdded(final Request rr) {
@@ -91,6 +98,8 @@
 	public void doRequestChanged(final Request rr) {
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
+				if (treeViewer == null)
+					return;
 				IStructuredSelection sel = (IStructuredSelection) treeViewer.getSelection();
 				
 				treeViewer.refresh(rr);
@@ -208,7 +217,7 @@
 		requestLabel.setText(NLS.bind(Messages.viewRequest, ""));
 		requestLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		
-		Combo requestViewerCombo = new Combo(requestHeader, SWT.DROP_DOWN | SWT.READ_ONLY);
+		final Combo requestViewerCombo = new Combo(requestHeader, SWT.DROP_DOWN | SWT.READ_ONLY);
 		data = new GridData(GridData.HORIZONTAL_ALIGN_END);
 		data.verticalSpan = 2;
 		requestViewerCombo.setLayoutData(data);
@@ -240,7 +249,7 @@
 		responseLabel.setText(NLS.bind(Messages.viewResponse, ""));
 		responseLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		
-		Combo responseViewerCombo = new Combo(responseHeader, SWT.DROP_DOWN | SWT.READ_ONLY);
+		final Combo responseViewerCombo = new Combo(responseHeader, SWT.DROP_DOWN | SWT.READ_ONLY);
 		data = new GridData(GridData.HORIZONTAL_ALIGN_END);
 		data.verticalSpan = 2;
 		responseViewerCombo.setLayoutData(data);
@@ -258,37 +267,49 @@
 		Iterator iterator = requestViewers.iterator();
 		int ctr = 0;
 		while (iterator.hasNext()) {
-			IConfigurationElement element = (IConfigurationElement) iterator.next();
-			requestViewerCombo.add(element.getAttribute("label"), ctr);
-			if (element.getAttribute("id").equals(DEFAULT_VIEWER)) {
+			Viewer viewer = (Viewer) iterator.next();
+			requestViewerCombo.add(viewer.getLabel(), ctr);
+			if (viewer.getId().equals(DEFAULT_VIEWER)) {
 				requestViewerCombo.select(ctr); 
-				vm.setRequestViewer(element);
-			}  
-			ctr++;	
+				vm.setRequestViewer(viewer);
+			}
+			ctr++;
 		}
-		requestViewerCombo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent arg0) {
-				Combo rvCombo = (Combo) arg0.getSource();
-				vm.setRequestViewer((IConfigurationElement) requestViewers.get(rvCombo.getSelectionIndex()));
+		requestViewerCombo.addSelectionListener(new SelectionListener() {
+			public void widgetSelected(SelectionEvent e) {
+				Viewer viewer = (Viewer) requestViewers.get(requestViewerCombo.getSelectionIndex());
+				if (currentRequest != null && viewer != null)
+					currentRequest.setProperty("request-viewer", viewer.getId());
+				vm.setRequestViewer(viewer);
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				// ignore
 			}
 		});
 		requestHeader.layout(true);
 		
 		iterator = responseViewers.iterator();
 		ctr = 0;
-		while(iterator.hasNext()) {
-			IConfigurationElement element = (IConfigurationElement) iterator.next();
-			responseViewerCombo.add(element.getAttribute("label"), ctr);
-			if(element.getAttribute("id").equals(DEFAULT_VIEWER)) {
+		while (iterator.hasNext()) {
+			Viewer viewer = (Viewer) iterator.next();
+			responseViewerCombo.add(viewer.getLabel(), ctr);
+			if (viewer.getId().equals(DEFAULT_VIEWER)) {
 				responseViewerCombo.select(ctr); 
-				vm.setResponseViewer(element);
-			} 
+				vm.setResponseViewer(viewer);
+			}
 			ctr++;
 		}
-		responseViewerCombo.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent arg0) {
-				Combo rvCombo = (Combo) arg0.getSource();
-				vm.setResponseViewer((IConfigurationElement) requestViewers.get(rvCombo.getSelectionIndex()));
+		responseViewerCombo.addSelectionListener(new SelectionListener() {
+			public void widgetSelected(SelectionEvent e) {
+				Viewer viewer = (Viewer) responseViewers.get(responseViewerCombo.getSelectionIndex());
+				if (currentRequest != null && viewer != null)
+					currentRequest.setProperty("response-viewer", viewer.getId());
+				vm.setResponseViewer(viewer);
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				// ignore
 			}
 		});
 		responseHeader.layout(true);
@@ -298,35 +319,51 @@
 			public void selectionChanged(SelectionChangedEvent event) {
 				ISelection selection = event.getSelection();
 
-				Request req = null;
+				currentRequest = null;
 				if (selection != null && !selection.isEmpty()) {
 					StructuredSelection sel = (StructuredSelection) selection;
 					currentSelection = sel;
 					Object obj = sel.iterator().next();
 					if (obj instanceof Request)
-						req = (Request) obj;
+						currentRequest = (Request) obj;
 				}
 	
-				if (req != null) {
-					label.setText(NLS.bind(Messages.viewTime, format.format(req.getDate())));
+				if (currentRequest != null) {
+					label.setText(NLS.bind(Messages.viewTime, format.format(currentRequest.getDate())));
 	
-					if (req.getResponseTime() == -1)
+					if (currentRequest.getResponseTime() == -1)
 						label2.setText(NLS.bind(Messages.viewResponseTime, ""));
 					else {
-						String time = NLS.bind(Messages.viewResponseTimeFormat, req.getResponseTime() + "");
+						String time = NLS.bind(Messages.viewResponseTimeFormat, currentRequest.getResponseTime() + "");
 						label2.setText(NLS.bind(Messages.viewResponseTime, time));
 					}
-					label3.setText(NLS.bind(Messages.viewType, req.getProtocol()));
+					label3.setText(NLS.bind(Messages.viewType, currentRequest.getProtocol()));
 	
 					// request information
-					requestLabel.setText(NLS.bind(Messages.viewRequest, "localhost:" + req.getLocalPort()));
-					requestSizeLabel.setText(getSizeString(req.getRequest(Request.CONTENT), req.getRequest(Request.ALL)));
+					requestLabel.setText(NLS.bind(Messages.viewRequest, "localhost:" + currentRequest.getLocalPort()));
+					requestSizeLabel.setText(getSizeString(currentRequest.getRequest(Request.CONTENT), currentRequest.getRequest(Request.ALL)));
 	
 					// response information
-					responseLabel.setText(NLS.bind(Messages.viewResponse, req.getRemoteHost() + ":" + req.getRemotePort()));
-					responseSizeLabel.setText(getSizeString(req.getResponse(Request.CONTENT), req.getResponse(Request.ALL)));
-
-					vm.setRequest(req);
+					responseLabel.setText(NLS.bind(Messages.viewResponse, currentRequest.getRemoteHost() + ":" + currentRequest.getRemotePort()));
+					responseSizeLabel.setText(getSizeString(currentRequest.getResponse(Request.CONTENT), currentRequest.getResponse(Request.ALL)));
+					
+					vm.setRequest(currentRequest);
+					
+					Viewer viewer = vm.findViewer((String) currentRequest.getProperty("request-viewer"));
+					if (viewer == null)
+						viewer = vm.findViewer(DEFAULT_VIEWER);
+					if (viewer != null) {
+						vm.setRequestViewer(viewer);
+						requestViewerCombo.select(requestViewers.indexOf(viewer));
+					}
+					
+					viewer = vm.findViewer((String) currentRequest.getProperty("response-viewer"));
+					if (viewer == null && currentRequest.getName() != null)
+						viewer = vm.getDefaultViewer(currentRequest.getName());
+					if (viewer != null) {
+						vm.setResponseViewer(viewer);
+						responseViewerCombo.select(responseViewers.indexOf(viewer));
+					}
 				} else {
 					label.setText(NLS.bind(Messages.viewTime, ""));
 					label2.setText(NLS.bind(Messages.viewResponseTime, ""));
@@ -334,9 +371,8 @@
 					requestSizeLabel.setText(NLS.bind(Messages.viewSize, ""));
 					responseLabel.setText(NLS.bind(Messages.viewResponse, ""));
 					responseSizeLabel.setText(NLS.bind(Messages.viewSize, ""));
-					vm.setRequest(req);
+					vm.setRequest(currentRequest);
 				}
-				currentRequest = req;
 			}
 		});
 		treeViewer.expandToLevel(2);
@@ -345,8 +381,9 @@
 		MenuManager menuManager = new MenuManager();
 		menuManager.setRemoveAllWhenShown(true);
 		menuManager.addMenuListener(new IMenuListener() {
-			public void menuAboutToShow(IMenuManager mgr) {
-				mgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+			public void menuAboutToShow(IMenuManager menu) {
+				menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+				menu.add(preferenceAction);
 			}
 		});
 
@@ -424,7 +461,7 @@
 		httpHeaderAction.setChecked(vm.getDisplayHeaderInfo());
 		httpHeaderAction.setText(Messages.actionShowHeader);
 
-		IAction preferenceAction = new Action() {
+		preferenceAction = new Action() {
 			public void run() {
 				showPreferencePage();
 			}
@@ -444,12 +481,13 @@
 			FilterAction action = new FilterAction(vm, filters[i]);
 			menuManager.add(action);
 		}
+		menuManager.add(new Separator());
 		menuManager.add(preferenceAction);
 	}
 
 	protected boolean showPreferencePage() {
 		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
-		IPreferenceNode node = manager.find("org.eclipse.internet").findSubNode("org.eclipse.wst.internet.monitor.preferencePage");
+		IPreferenceNode node = manager.find("org.eclipse.debug.ui.DebugPreferencePage").findSubNode("org.eclipse.wst.internet.monitor.preferencePage");
 		PreferenceManager manager2 = new PreferenceManager();
 		manager2.addToRoot(node);
 		
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/Viewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/Viewer.java
new file mode 100644
index 0000000..b5cce39
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/Viewer.java
@@ -0,0 +1,73 @@
+/**********************************************************************
+ * Copyright (c) 2003, 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.wst.internet.monitor.ui.internal.view;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.wst.internet.monitor.ui.internal.Trace;
+import org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer;
+/**
+ * 
+ */
+public class Viewer {
+	private IConfigurationElement element;
+
+	/**
+	 * Create a new content viewer.
+	 * 
+	 * @param element a configuration element
+	 */
+	public Viewer(IConfigurationElement element) {
+		super();
+		this.element = element;
+	}
+
+	public String getId() {
+		return element.getAttribute("id");
+	}
+
+	public String getLabel() {
+		String label = element.getAttribute("label");
+		if (label == null)
+			return "n/a";
+		return label;
+	}
+
+	/**
+	 * Create an instance of the viewer.
+	 * 
+	 * @return the viewer, or <code>null</code> if it couldn't be loaded
+	 */
+	public ContentViewer createViewer() {
+		try {
+			return (ContentViewer) element.createExecutableExtension("class");
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not create viewer" + toString() + ": " + e.getMessage());
+			return null;
+		}
+	}
+
+	public boolean isRequestViewer() {
+		return element.getAttribute("type").toLowerCase().indexOf("request") >= 0;
+	}
+
+	public boolean isResponseViewer() {
+		return element.getAttribute("type").toLowerCase().indexOf("response") >= 0;
+	}
+
+	/**
+	 * Return a string representation of this object.
+	 * 
+	 * @return String
+	 */
+	public String toString() {
+		return "ContentViewer[" + getId() + "]";
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ViewerManager.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ViewerManager.java
index f8e2872..67486c5 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ViewerManager.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ViewerManager.java
@@ -26,11 +26,13 @@
 /**
  * 
  */
-public class ViewerManager implements IViewerManager{
+public class ViewerManager {
 	private boolean displayHeaderInf;
 
 	protected ContentViewer reqViewer;
 	protected ContentViewer respViewer;
+	protected Viewer requestViewer;
+	protected Viewer responseViewer;
 
 	protected HeaderViewer reqHeader;
 	protected HeaderViewer respHeader;
@@ -59,16 +61,45 @@
 		respViewer = new ByteViewer();
 		respViewer.init(respVComp);
 		setDisplayHeaderInfo(MonitorUIPlugin.getShowHeaderPreference());
-		setAvailableViewers();
+		loadAvailableViewers();
+	}
+	
+	protected Viewer getDefaultViewer(String name) {
+		if (name == null)
+			return null;
+		
+		String name2 = name.toLowerCase(); 
+		if (name2.endsWith(".xml"))
+			return findViewer("org.eclipse.wst.internet.monitor.viewers.xml");
+		else if (name2.endsWith(".html"))
+			return findViewer("org.eclipse.wst.internet.monitor.viewers.browser");
+		else if (name2.endsWith(".gif") || name2.endsWith(".jpg") ||
+				name2.endsWith(".jpeg") || name2.endsWith(".png"))
+			return findViewer("org.eclipse.wst.internet.monitor.viewers.image");
+		else
+			return findViewer("org.eclipse.wst.internet.monitor.viewers.byte");
 	}
 
-	private void setAvailableViewers() {
+	protected Viewer findViewer(String id) {
+		if (id == null)
+			return null;
+		
+		Iterator iterator = viewers.iterator();
+		while (iterator.hasNext()) {
+			Viewer viewer = (Viewer) iterator.next();
+			if (id.equals(viewer.getId()))
+				return viewer;
+		}
+		return null;
+	}
+
+	private void loadAvailableViewers() {
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(MonitorUIPlugin.PLUGIN_ID, "viewers");
 		int size = cf.length;
 		viewers = new ArrayList(size);
 		for (int i = 0; i < size; i++) {
-			viewers.add(cf[i]);
+			viewers.add(new Viewer(cf[i]));
 		}
 	}
 
@@ -122,8 +153,9 @@
 			b = filter(rr.getResponse(Request.CONTENT));
 		respViewer.setContent(b);
 		request = rr;
-		// Set the editor to editable if the request hasn't  been sent and the
-		// editor can be set as editable.
+		
+		// set the editor to editable if the request hasn't been sent and the
+		// editor can be set as editable
 		if (request instanceof ResendHTTPRequest && request.getResponse(Request.ALL) == null) {
 			if (displayHeaderInf) {
 				reqHeader.setEditable(true);
@@ -166,13 +198,12 @@
 	 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#getRequestViewers()
 	 */
 	public List getRequestViewers() {
-		IConfigurationElement element;
 		Iterator iterator = viewers.iterator();
 		List temp = new ArrayList();
 		while (iterator.hasNext()) {
-			element = (IConfigurationElement) iterator.next();
-			if (element.getAttribute("type").toLowerCase().indexOf("request") >= 0)
-				temp.add(element);
+			Viewer viewer = (Viewer) iterator.next();
+			if (viewer.isRequestViewer())
+				temp.add(viewer);
 		}
 		return temp;
 	}
@@ -181,13 +212,12 @@
 	 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#getResponseViewers()
 	 */
 	public List getResponseViewers() {
-		IConfigurationElement element;
 		Iterator iterator = viewers.iterator();
 		List temp = new ArrayList();
 		while (iterator.hasNext()) {
-			element = (IConfigurationElement) iterator.next();
-			if (element.getAttribute("type").toLowerCase().indexOf("response") >= 0)
-				temp.add(element);
+			Viewer viewer = (Viewer) iterator.next();
+			if (viewer.isResponseViewer())
+				temp.add(viewer);
 		}
 		return temp;
 	}
@@ -195,15 +225,19 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#setRequestViewer(java.lang.String)
 	 */
-	public void setRequestViewer(IConfigurationElement element) {
-		// Call set request to save and reset the request.
+	public void setRequestViewer(Viewer viewer) {
+		if (viewer != null && viewer.equals(requestViewer))
+			return;
+
+		// call set request to save and reset the request
 		setRequest(request);
 		reqViewer.dispose();
-		try {
-			reqViewer = (ContentViewer) element.createExecutableExtension("class");
-		} catch (CoreException e) {
-			Trace.trace(Trace.SEVERE, "Error", e);
-		}
+		
+		requestViewer = viewer;
+		reqViewer = viewer.createViewer();
+		if (reqViewer == null)
+			return;
+		
 		reqViewer.init(reqVComp);
 		//reqViewer.setRequestResponse(rr);
 		byte[] b = null;
@@ -224,13 +258,15 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#setResponseViewer(java.lang.String)
 	 */
-	public void setResponseViewer(IConfigurationElement element) {
+	public void setResponseViewer(Viewer viewer) {
+		if (viewer != null && viewer.equals(responseViewer))
+			return;
 		respViewer.dispose();
-		try {
-			respViewer = (ContentViewer) element.createExecutableExtension("class");
-		} catch (CoreException e) {
-			Trace.trace(Trace.SEVERE, "Error", e);
-		}
+		
+		responseViewer = viewer;
+		respViewer = viewer.createViewer();
+		if (respViewer == null)
+			return;
 		respViewer.init(respVComp);
 		//respViewer.setRequestResponse(rr);
 		byte[] b = null;
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/BrowserViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/BrowserViewer.java
new file mode 100644
index 0000000..4cdfd84
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/BrowserViewer.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.internet.monitor.ui.internal.viewers;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.wst.internet.monitor.ui.internal.Messages;
+import org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer;
+/**
+ * A browser viewer.
+ */
+public class BrowserViewer extends ContentViewer {
+	protected Browser browser;
+
+	protected byte[] content;
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#init(Composite)
+	 */
+	public void init(Composite parent) {
+		browser = new Browser(parent, SWT.BORDER);
+		browser.setLayoutData(new GridData(GridData.FILL_BOTH));
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#setContent(byte[])
+	 */
+	public void setContent(byte[] b) {
+		content = b;
+		if (b == null || b.length == 0) {
+			browser.setText(Messages.htmlViewInvalid);
+		} else {
+			byte cr = '\r';
+			byte lf = '\n';
+			int trimFront = 0;
+			int trimBack = 0;
+			int len = b.length - 1;
+			while (b[trimFront] == cr || b[trimFront] == lf)
+				trimFront++;
+			while (b[len - trimBack] == cr || b[len - trimBack] == lf)
+				trimBack++;
+				
+			if (trimFront + trimBack > 0) {
+				byte[] temp = b;
+				b = new byte[temp.length - trimBack - trimFront];
+				for (int i = trimFront; i < temp.length - trimBack; i++) {
+					b[i - trimFront] = temp[i];
+				}
+			}
+			browser.setText(new String(b));
+		}
+	}
+
+	/**
+	 * @see ContentViewer#getContent()
+	 */
+	public byte[] getContent() {
+		return content;
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#dispose()
+	 */
+	public void dispose() {
+		browser.dispose();
+		browser = null;
+		content = null;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ByteViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ByteViewer.java
index a88b17c..30377dd 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ByteViewer.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ByteViewer.java
@@ -13,7 +13,6 @@
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Text;
@@ -26,13 +25,46 @@
  */
 public class ByteViewer extends ContentViewer {
 	protected Text text;
-	protected Composite comp;
 
 	/** (non-Javadoc)
-	 * @see ContentViewer#dispose()
+	 * @see ContentViewer#init(Composite)
 	 */
-	public void dispose() {
-		comp.dispose();
+	public void init(Composite parent) {
+		text = new Text(parent, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL);
+		Display display = parent.getDisplay();
+		text.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		text.setForeground(display.getSystemColor(SWT.COLOR_LIST_FOREGROUND));
+		text.setLayoutData(new GridData(GridData.FILL_BOTH));
+		text.setFont(JFaceResources.getTextFont());
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(text, ContextIds.VIEW_RESPONSE);
+	}
+	
+	/** (non-Javadoc)
+	 * @see ContentViewer#setEditable(boolean)
+	 */
+	public void setEditable(boolean editable) {
+		text.setEditable(editable);
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#getContent()
+	 */
+	public byte[] getContent() {
+		if (text == null) {
+			return new byte[0];
+		}
+		String content = text.getText().trim();
+		if (content.equals("")) {
+			return new byte[0];
+		}
+		// Need to ensure that there is a newline at the end of the content.
+		// getBytes() removes the newline.
+		byte[] twoNewlines = new byte[] { '\015', '\012' };
+		byte[] contentBytes = content.getBytes();
+		byte[] retBytes = new byte[contentBytes.length + 2];
+		System.arraycopy(contentBytes, 0, retBytes, 0, contentBytes.length);
+		System.arraycopy(twoNewlines, 0, retBytes, contentBytes.length, 2);
+		return retBytes;
 	}
 
 	/** (non-Javadoc)
@@ -54,52 +86,10 @@
 	}
 
 	/** (non-Javadoc)
-	 * @see ContentViewer#init(Composite)
+	 * @see ContentViewer#dispose()
 	 */
-	public void init(Composite parent) {
-		comp = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 1;
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		comp.setLayout(layout);
-		GridData data = new GridData(GridData.FILL_BOTH);
-		comp.setLayoutData(data);
-
-		text = new Text(comp, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL);
-		Display display = comp.getDisplay();
-		text.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
-		text.setForeground(display.getSystemColor(SWT.COLOR_LIST_FOREGROUND));
-		text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));
-		text.setFont(JFaceResources.getTextFont());
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(text, ContextIds.VIEW_RESPONSE);
-	}
-	
-	/** (non-Javadoc)
-	 * @see ContentViewer#setEditable(boolean)
-	 */
-	public void setEditable(boolean editable) {
-		text.setEditable(editable);
-	}
-	
-	/** (non-Javadoc)
-	 * @see ContentViewer#getContent()
-	 */
-	public byte[] getContent() {
-		if (text == null) {
-			return new byte[0];
-		}
-		String content = text.getText().trim();
-		if (content.equals("")) {
-			return new byte[0];
-		}
-		// Need to ensure that there is a newline at the end of the content.
-		// getBytes() removes the newline.
-		byte[] twoNewlines = new byte[] { '\015', '\012' };
-		byte[] contentBytes = content.getBytes();
-		byte[] retBytes = new byte[contentBytes.length + 2];
-		System.arraycopy(contentBytes, 0, retBytes, 0, contentBytes.length);
-		System.arraycopy(twoNewlines, 0, retBytes, contentBytes.length, 2);
-		return retBytes;
+	public void dispose() {
+		text.dispose();
+		text = null;
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/HeaderViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/HeaderViewer.java
index 7888cec..9edfbc1 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/HeaderViewer.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/HeaderViewer.java
@@ -11,6 +11,7 @@
 package org.eclipse.wst.internet.monitor.ui.internal.viewers;
 
 import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -27,11 +28,12 @@
  * An transport (header) viewer.
  */
 public class HeaderViewer {
+	private static final int HEADER_TEXT_SIZE = 110;
+
 	protected boolean displayHeader;
 
 	protected Composite headerComp;
 	protected Composite innerComp;
-	protected Composite rootComp;
 
 	protected Label headerLabel;
 	protected Text headerText;
@@ -41,9 +43,6 @@
 	protected GridData data;
 
 	protected boolean hidden;
-
-	protected static int HEADER_LABEL_SIZE = 15;
-	protected static int HEADER_TEXT_SIZE = 110;
 	
 	/**
 	 * Request header constant.
@@ -62,7 +61,6 @@
 	 * @param message
 	 */
 	public HeaderViewer(Composite parent, byte message) {
-		rootComp = parent;
 		displayHeader = true;
 		hidden = false;
 		
@@ -82,7 +80,6 @@
 		layout.marginWidth = 2;
 		innerComp.setLayout(layout);
 		data = new GridData(GridData.FILL_BOTH);
-		data.heightHint = HEADER_LABEL_SIZE;
 		innerComp.setLayoutData(data);
 
 		rr = null;
@@ -133,12 +130,11 @@
 				headerText.setFont(JFaceResources.getTextFont());
 				PlatformUI.getWorkbench().getHelpSystem().setHelp(headerText, ContextIds.VIEW_RESPONSE);
 
-				rootComp.layout(true);
+				headerComp.getParent().layout(true);
 			} else {
 				innerComp.dispose();
 
 				data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
-				data.heightHint = HEADER_LABEL_SIZE;
 				headerComp.setLayoutData(data);
 				
 				innerComp = new Composite(headerComp, SWT.NONE);
@@ -148,13 +144,12 @@
 				layout.marginWidth = 2;
 				innerComp.setLayout(layout);
 				data = new GridData(GridData.FILL_BOTH);
-				data.heightHint = HEADER_LABEL_SIZE;
 				innerComp.setLayoutData(data);
 
 				headerLabel = new Label(innerComp, SWT.NONE);
 				headerLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
 				
-				rootComp.layout(true);
+				headerComp.getParent().layout(true);
 			}
 		}
 		getView();
@@ -174,21 +169,20 @@
 			}
 		}
 		
-		if (displayHeader) {
+		if (displayHeader)
 			headerText.setText(out);
-		} else {
+		else {
 			String lineSeparator = System.getProperty("line.separator");
 			int index = out.indexOf(lineSeparator);
-			if(index > 0)
-				headerLabel.setText(Messages.headerLabel + ": " + out.substring(0, index));
+			if (index > 0)
+				headerLabel.setText(NLS.bind(Messages.headerLabel, out.substring(0, index)));
 			else 
-				headerLabel.setText(Messages.headerLabel + ":  " + out);
+				headerLabel.setText(NLS.bind(Messages.headerLabel, out));
 		}
 	}
 
 	/**
-	 * Dispose the 
-	 *
+	 * Dispose the header.
 	 */
 	public void dispose() {
 		headerComp.dispose();
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ImageViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ImageViewer.java
index 6fd0e66..f8618ed 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ImageViewer.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ImageViewer.java
@@ -16,7 +16,6 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.ImageData;
 import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.wst.internet.monitor.ui.internal.Messages;
@@ -25,8 +24,6 @@
  * An image viewer.
  */
 public class ImageViewer extends ContentViewer {
-	protected Composite rootComp;
-	protected Composite viewerComp;
 	protected Label messageLabel;
 	
 	protected byte[] content;
@@ -35,19 +32,9 @@
 	 * @see ContentViewer#init(Composite)
 	 */
 	public void init(Composite parent) {
-		rootComp = parent;
-		
-		viewerComp = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 1;
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		viewerComp.setLayout(layout);
-		GridData data = new GridData(GridData.FILL_BOTH);
-		viewerComp.setLayoutData(data);
-
-		messageLabel = new Label(viewerComp, SWT.NONE);
+		messageLabel = new Label(parent, SWT.NONE);
 		messageLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING));
+		messageLabel.setText(Messages.imageViewInvalid);
 	}
 	
 	/** (non-Javadoc)
@@ -56,22 +43,22 @@
 	public void setContent(byte[] b) {
 		content = b;
 		if (b == null || b.length == 0) {
-			messageLabel.setText(Messages.imageViewInvalid);
+			messageLabel.setImage(null);
 		} else {
 			byte cr = '\r';
 			byte lf = '\n';
 			int trimFront = 0;
 			int trimBack = 0;
 			int len = b.length - 1;
-			while(b[trimFront] == cr || b[trimFront] == lf)
+			while (b[trimFront] == cr || b[trimFront] == lf)
 				trimFront++;
-			while(b[len - trimBack] == cr || b[len - trimBack] == lf)
+			while (b[len - trimBack] == cr || b[len - trimBack] == lf)
 				trimBack++;
 				
 			if (trimFront + trimBack > 0) {
 				byte[] temp = b;
 				b = new byte[temp.length - trimBack - trimFront];
-				for(int i = trimFront; i < temp.length - trimBack; i++) {
+				for (int i = trimFront; i < temp.length - trimBack; i++) {
 					b[i - trimFront] = temp[i];
 				}
 			}
@@ -80,24 +67,28 @@
 				Image img = new Image(null, imgD);
 				messageLabel.setImage(img);
 			} catch(Exception e) {
-				messageLabel.setText(Messages.imageViewInvalid);
+				messageLabel.setImage(null);
 			}
 		}
 		
-		viewerComp.layout(true);
+		Composite parent = messageLabel.getParent();
+		messageLabel.setFont(parent.getFont());
+		parent.layout(true);
 	}
-	
+
 	/**
 	 * @see ContentViewer#getContent()
 	 */
 	public byte[] getContent() {
 		return content;
 	}
-	
+
 	/** (non-Javadoc)
 	 * @see ContentViewer#dispose()
 	 */
 	public void dispose() {
-		viewerComp.dispose();
+		messageLabel.dispose();
+		messageLabel = null;
+		content = null;
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/XMLViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/XMLViewer.java
index 3d8c0f4..9113d1c 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/XMLViewer.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/XMLViewer.java
@@ -7,6 +7,9 @@
  * 
  * Contributors:
  *     IBM Corporation - Initial API and implementation
+ *     
+ *     2005-11-25 Arthur Ryman, ryman@ca.ibm.com
+ *     - fixed bug 118102: set xmlTagMissing correctly each time setContent() is called
  *******************************************************************************/
 package org.eclipse.wst.internet.monitor.ui.internal.viewers;
  
@@ -14,13 +17,7 @@
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.*;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
@@ -45,12 +42,9 @@
  * XML Viewer.
  */
 public class XMLViewer extends ContentViewer {
-	protected GridData data;
+	protected Composite viewerComp;
 	protected StackLayout layout;
 	protected Text messageText;
-
-	protected Composite rootComp;
-	protected Composite viewerComp;
 	protected Label messageLabel;
 	
 	protected boolean xmlTagMissing = false;
@@ -59,13 +53,6 @@
 	protected String originalEncoding;
 	
 	protected byte[] content;
-
-	/** (non-Javadoc)
-	 * @see ContentViewer#dispose()
-	 */
-	public void dispose() {
-		viewerComp.dispose();
-	}
 	
 	/** (non-Javadoc)
 	 * @see ContentViewer#setContent(byte[])
@@ -84,8 +71,7 @@
 		}
 		
 		String out_temp = out.toLowerCase();
-		if (out_temp.indexOf("<?xml") < 0) 
-			xmlTagMissing = true;
+		xmlTagMissing = !out_temp.startsWith("<?xml");
 		
 		if (out.length() > 0) {
 			byte[] b1 = createDocument(out);
@@ -136,15 +122,12 @@
 	 * @see ContentViewer#init(Composite)
 	 */
 	public void init(Composite parent) {
-		rootComp = parent;
-		
 		viewerComp = new Composite(parent, SWT.NONE);
 		layout = new StackLayout();
 		layout.marginHeight = 0;
 		layout.marginWidth = 0;
 		viewerComp.setLayout(layout);
-		data = new GridData(GridData.FILL_BOTH);
-		viewerComp.setLayoutData(data);
+		viewerComp.setLayoutData(new GridData(GridData.FILL_BOTH));
 	
 		messageText = new Text(viewerComp, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL);
 		Display display = viewerComp.getDisplay();
@@ -227,4 +210,13 @@
 		}
 		return out.toByteArray();
 	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#dispose()
+	 */
+	public void dispose() {
+		viewerComp.dispose();
+		viewerComp = null;
+		content = null;
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/plugin.properties b/plugins/org.eclipse.wst.internet.monitor.ui/plugin.properties
index ae803d5..6a48576 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/plugin.properties
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/plugin.properties
@@ -18,8 +18,10 @@
 actionModify=Modify request
 actionModifyResend=Send Modified Request
 
-byteView=Byte View
-imageView=Image View
-xmlView=XML View
+byteView=Byte
+imageView=Image
+xmlView=XML
+browserView=Web Browser
 
 preferenceTitle=TCP/IP Monitor
+preferenceKeywords=debug
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/plugin.xml b/plugins/org.eclipse.wst.internet.monitor.ui/plugin.xml
index 96b286e..383610e 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/plugin.xml
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/plugin.xml
@@ -25,26 +25,39 @@
   <page
     id="org.eclipse.wst.internet.monitor.preferencePage"
     name="%preferenceTitle"
-    category="org.eclipse.internet"
-    class="org.eclipse.wst.internet.monitor.ui.internal.MonitorPreferencePage"/>
+    category="org.eclipse.debug.ui.DebugPreferencePage"
+    class="org.eclipse.wst.internet.monitor.ui.internal.MonitorPreferencePage">
+      <keywordReference id="org.eclipse.wst.internet.monitor.preferenceKeywords"/>
+  </page>
+</extension>
+
+<extension point="org.eclipse.ui.keywords">
+  <keyword
+    label="%preferenceKeywords"
+    id="org.eclipse.wst.internet.monitor.preferenceKeywords"/>
 </extension>
 
 <extension point="org.eclipse.wst.internet.monitor.ui.viewers">
   <viewer
-    id="org.eclipse.wst.internet.monitor.viewers.byteviewer"
+    id="org.eclipse.wst.internet.monitor.viewers.byte"
     class="org.eclipse.wst.internet.monitor.ui.internal.viewers.ByteViewer"
     type="requestresponse"
     label="%byteView"/>
   <viewer
-    id="org.eclipse.wst.internet.monitor.viewers.imageviewer"
+    id="org.eclipse.wst.internet.monitor.viewers.image"
     class="org.eclipse.wst.internet.monitor.ui.internal.viewers.ImageViewer"
     type="requestresponse"
     label="%imageView"/>
   <viewer
-    id="org.eclipse.wst.internet.monitor.viewers.XMLViewer"
+    id="org.eclipse.wst.internet.monitor.viewers.xml"
     class="org.eclipse.wst.internet.monitor.ui.internal.viewers.XMLViewer"
     type="requestresponse"
     label="%xmlView"/>
+  <viewer
+    id="org.eclipse.wst.internet.monitor.viewers.browser"
+    class="org.eclipse.wst.internet.monitor.ui.internal.viewers.BrowserViewer"
+    type="requestresponse"
+    label="%browserView"/>
 </extension>
 
 <extension point="org.eclipse.core.runtime.adapters">
diff --git a/plugins/org.eclipse.wst.server.core/.classpath b/plugins/org.eclipse.wst.server.core/.classpath
index cf5d302..f29ae05 100644
--- a/plugins/org.eclipse.wst.server.core/.classpath
+++ b/plugins/org.eclipse.wst.server.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="servercore/"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.server.core/.cvsignore b/plugins/org.eclipse.wst.server.core/.cvsignore
index dd71f75..ac819a1 100644
--- a/plugins/org.eclipse.wst.server.core/.cvsignore
+++ b/plugins/org.eclipse.wst.server.core/.cvsignore
@@ -3,3 +3,5 @@
 build.xml
 servercore.jar
 org.eclipse.wst.server.core_3.0.0.jar
+@dot
+src.zip
diff --git a/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
index ba8116b..35c4d65 100644
--- a/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
@@ -3,17 +3,17 @@
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.server.core; singleton:=true
 Bundle-Version: 1.0.0
-Bundle-ClassPath: servercore.jar
 Bundle-Activator: org.eclipse.wst.server.core.internal.ServerPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.server.core,
- org.eclipse.wst.server.core.internal,
+ org.eclipse.wst.server.core.internal;x-friends:="org.eclipse.wst.server.ui",
  org.eclipse.wst.server.core.internal.provisional,
  org.eclipse.wst.server.core.model,
  org.eclipse.wst.server.core.util
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.core.resources,
  org.eclipse.core.expressions,
- org.eclipse.debug.core
+ org.eclipse.debug.core,
+ org.eclipse.update.core;resolution:=optional
 Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.wst.server.core/about.html b/plugins/org.eclipse.wst.server.core/about.html
new file mode 100644
index 0000000..6f6b96c
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/about.html
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>February 24, 2005</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/build.properties b/plugins/org.eclipse.wst.server.core/build.properties
index 973f460..d9a7e00 100644
--- a/plugins/org.eclipse.wst.server.core/build.properties
+++ b/plugins/org.eclipse.wst.server.core/build.properties
@@ -10,14 +10,13 @@
 ###############################################################################
 bin.includes = plugin.xml,\
                plugin.properties,\
-               servercore.jar,\
+               .,\
                .options,\
-               META-INF/
+               META-INF/,\
+               about.html
 bin.excludes = bin/**,\
                @dot/**,\
                temp.folder/**
 src.includes = schema/,\
-               build.properties,\
                component.xml
-source.servercore.jar = servercore/
-output.servercore.jar = bin/
+source.. = servercore/
diff --git a/plugins/org.eclipse.wst.server.core/component.xml b/plugins/org.eclipse.wst.server.core/component.xml
index ba4e018..4f43974 100644
--- a/plugins/org.eclipse.wst.server.core/component.xml
+++ b/plugins/org.eclipse.wst.server.core/component.xml
@@ -1 +1,76 @@
-<?xml version="1.0" encoding="UTF-8"?><component xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.wst.server"><component-depends unrestricted="true"></component-depends><plugin id="org.eclipse.wst.server.core" fragment="false"/><plugin id="org.eclipse.wst.server.ui" fragment="false"/><plugin id="org.eclipse.wst.server.util" fragment="false"/><package name="org.eclipse.wst.server.core.util"></package><package name="org.eclipse.wst.server.core.model"><type name="RuntimeTargetHandlerDelegate"/><type name="IURLProvider" subclass="false"/><type name="IModuleResource"/><type name="ModuleFactoryDelegate"/><type name="IModuleResourceDeltaVisitor"/><type name="RuntimeLocatorDelegate"/><type name="IModuleFile"/><type name="IModuleResourceDelta"/><type name="ModuleArtifactAdapterDelegate"/><type name="IModuleFolder"/><type name="RuntimeDelegate"/><type name="ServerDelegate"/><type name="LaunchableAdapterDelegate"/><type name="ClientDelegate"/><type name="ModuleDelegate"/><type name="PublishTaskDelegate"/><type name="ServerBehaviourDelegate"/></package><package name="org.eclipse.wst.server.ui.editor"><type name="ICommandManager"/><type name="IServerEditorSection"/><type name="ServerEditorPart"/><type name="ServerEditorPartFactoryDelegate"/><type name="ServerEditorSection"/><type name="ServerEditorPageSectionFactoryDelegate"/><type name="IServerEditorPartInput"/></package><package name="org.eclipse.wst.server.ui.wizard"><type name="TaskWizardPage"/><type name="IWizardHandle"/><type name="TaskWizard"/><type name="WizardFragment"/></package><package name="org.eclipse.wst.server.ui"><type name="ServerLaunchConfigurationTab"/><type name="ServerUIUtil" implement="false" subclass="false" instantiate="false"/><type name="ServerUICore" implement="false" subclass="false" instantiate="false"/></package><package name="org.eclipse.wst.server.core"><type name="IServer" implement="false" subclass="false" instantiate="false"/><type name="IModuleType" implement="false" subclass="false" instantiate="false"/><type name="ServerUtil" implement="false" subclass="false" instantiate="false"/><type name="IServerAttributes" implement="false" subclass="false" instantiate="false"/><type name="IOptionalTask" instantiate="false"/><type name="ITask" instantiate="false"/><type name="IRuntimeWorkingCopy" implement="false" subclass="false" instantiate="false"/><type name="IServerListener" subclass="false" instantiate="false"/><type name="IRuntime" implement="false" subclass="false" instantiate="false"/><type name="IServerType" implement="false" subclass="false" instantiate="false"/><type name="IModule" implement="false" subclass="false" instantiate="false"/><type name="IRuntimeLifecycleListener" subclass="false" instantiate="false"/><type name="IProjectProperties" implement="false" subclass="false" instantiate="false"/><type name="IServerLifecycleListener" subclass="false" instantiate="false"/><type name="IRuntimeTargetHandler" implement="false" subclass="false" instantiate="false"/><type name="ServerCore" implement="false" subclass="false" instantiate="false"/><type name="IServerWorkingCopy" implement="false" subclass="false" instantiate="false"/><type name="IServerPort" instantiate="false"/><type name="IRuntimeType" implement="false" subclass="false" instantiate="false"/><type name="TaskModel" implement="false"/><type name="IModuleArtifact" implement="false" subclass="false" instantiate="false"/></package></component>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?>
+<component xmlns="http://eclipse.org/wtp/releng/tools/component-model" name="org.eclipse.wst.server">
+  <component-depends unrestricted="true"/>
+  <plugin id="org.eclipse.wst.server.core" fragment="false"/>
+  <package name="org.eclipse.wst.server.core">
+    <type name="IModule" implement="false" subclass="false" instantiate="false"/>
+    <type name="IModuleArtifact" implement="false" subclass="false" instantiate="false"/>
+    <type name="IModuleType" implement="false" subclass="false" instantiate="false"/>
+<!--    <type name="IProjectProperties" implement="false" subclass="false" instantiate="false"/>-->
+    <type name="IPublishListener" subclass="false" instantiate="false"/>
+    <type name="IRuntime" implement="false" subclass="false" instantiate="false"/>
+    <type name="IRuntimeLifecycleListener" subclass="false" instantiate="false"/>
+<!--    <type name="IRuntimeTargetHandler" implement="false" subclass="false" instantiate="false"/>-->
+    <type name="IRuntimeType" implement="false" subclass="false" instantiate="false"/>
+    <type name="IRuntimeWorkingCopy" implement="false" subclass="false" instantiate="false"/>
+    <type name="IServer" implement="false" subclass="false" instantiate="false"/>
+    <type name="IServerAttributes" implement="false" subclass="false" instantiate="false"/>
+    <type name="IServerLifecycleListener" subclass="false" instantiate="false"/>
+    <type name="IServerListener" subclass="false" instantiate="false"/>
+    <type name="IServerType" implement="false" subclass="false" instantiate="false"/>
+    <type name="IServerWorkingCopy" implement="false" subclass="false" instantiate="false"/>
+    <type name="ServerCore" implement="false" subclass="false" instantiate="false"/>
+    <type name="ServerEvent" implement="false" subclass="false" instantiate="false"/>
+    <type name="ServerPort"/>
+    <type name="ServerUtil" implement="false" subclass="false" instantiate="false"/>
+    <type name="TaskModel" implement="false"/>
+  </package>
+  <package name="org.eclipse.wst.server.core.model">
+    <type name="IURLProvider" subclass="false"/>
+    <type name="ModuleFactoryDelegate"/>
+    <type name="RuntimeDelegate"/>
+    <type name="RuntimeLocatorDelegate"/>
+<!--    <type name="RuntimeTargetHandlerDelegate"/> -->
+    <type name="IModuleFile"/>
+    <type name="IModuleFolder"/>
+    <type name="IModuleResource"/>
+    <type name="IModuleResourceDelta"/>
+    <type name="ModuleArtifactAdapterDelegate"/>
+    <type name="LaunchableAdapterDelegate"/>
+    <type name="ClientDelegate"/>
+    <type name="ModuleDelegate"/>
+    <type name="PublishTaskDelegate"/>
+    <type name="PublishOperation"/>
+    <type name="ServerBehaviourDelegate"/>
+    <type name="ServerDelegate"/>
+    <type name="InternalInitializer" implement="false" subclass="false" instantiate="false" reference="false"/>
+  </package>
+  <package name="org.eclipse.wst.server.core.util">
+    <type name="HttpLaunchable"/>
+    <type name="IStaticWeb"/>
+    <type name="NullModuleArtifact"/>
+    <type name="PublishAdapter"/>
+    <type name="ProjectModule"/>
+    <type name="ProjectModuleFactoryDelegate"/>
+    <type name="RuntimeLifecycleAdapter"/>
+    <type name="ServerLifecycleAdapter"/>
+    <type name="SocketUtil"/>
+    <type name="WebResource"/>
+  </package>
+
+  <plugin id="org.eclipse.wst.server.ui" fragment="false"/>
+  <package name="org.eclipse.wst.server.ui">
+    <type name="ServerLaunchConfigurationTab"/>
+    <type name="ServerUIUtil" implement="false" subclass="false" instantiate="false"/>
+    <type name="ServerUICore" implement="false" subclass="false" instantiate="false"/>
+  </package>
+  <package name="org.eclipse.wst.server.ui.editor">
+    <type name="ServerEditorPart"/>
+    <type name="ServerEditorSection"/>
+    <type name="IServerEditorPartInput"/>
+  </package>
+  <package name="org.eclipse.wst.server.ui.wizard">
+    <type name="IWizardHandle"/>
+    <type name="WizardFragment"/>
+  </package>
+</component>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/plugin.properties b/plugins/org.eclipse.wst.server.core/plugin.properties
index d009a63..1c059b8 100644
--- a/plugins/org.eclipse.wst.server.core/plugin.properties
+++ b/plugins/org.eclipse.wst.server.core/plugin.properties
@@ -24,5 +24,7 @@
 extensionPointClients=Clients
 extensionPointPublishTasks=Publish Tasks
 extensionPointServerMonitors=Server Monitors
+extensionPointInstallableServers=Installable Servers
+extensionPointInstallableRuntimes=Installable Runtimes
 
 moduleTypeUnknown=Unknown module
diff --git a/plugins/org.eclipse.wst.server.core/plugin.xml b/plugins/org.eclipse.wst.server.core/plugin.xml
index 0d54575..c164888 100644
--- a/plugins/org.eclipse.wst.server.core/plugin.xml
+++ b/plugins/org.eclipse.wst.server.core/plugin.xml
@@ -7,7 +7,7 @@
   <extension-point id="runtimeTargetHandlers" name="%extensionPointRuntimeTargetHandlers" schema="schema/runtimeTargetHandlers.exsd"/>
   <extension-point id="runtimeLocators" name="%extensionPointRuntimeLocators" schema="schema/runtimeLocators.exsd"/>
   <extension-point id="serverTypes" name="%extensionPointServerTypes" schema="schema/serverTypes.exsd"/>
-  <extension-point id="serverLocators" name="%extensionPointServerLocators" schema="schema/serverLocators.exsd"/>
+  <extension-point id="serverLocators" name="%extensionPointServerLocators" schema="schema/internalServerLocators.exsd"/>
   <extension-point id="moduleFactories" name="%extensionPointModuleFactories" schema="schema/moduleFactories.exsd"/>
   <extension-point id="moduleArtifactAdapters" name="%extensionPointModuleArtifactAdapters" schema="schema/moduleArtifactAdapters.exsd"/>
   <extension-point id="launchableAdapters" name="%extensionPointLaunchableAdapters" schema="schema/launchableAdapters.exsd"/>
@@ -15,6 +15,8 @@
   <extension-point id="publishTasks" name="%extensionPointPublishTasks" schema="schema/publishTasks.exsd"/>
   <extension-point id="internalServerMonitors" name="%extensionPointServerMonitors" schema="schema/serverMonitors.exsd"/>
   <extension-point id="internalStartup" name="%extensionPointServerStartup" schema="schema/startup.exsd"/>
+  <extension-point id="installableServers" name="%extensionPointInstallableServers" schema="schema/installableServers.exsd"/>
+  <extension-point id="installableRuntimes" name="%extensionPointInstallableRuntimes" schema="schema/installableRuntimes.exsd"/>
   
   <extension point="org.eclipse.wst.server.core.moduleTypes">
     <moduleType
diff --git a/plugins/org.eclipse.wst.server.core/schema/clients.exsd b/plugins/org.eclipse.wst.server.core/schema/clients.exsd
index d216daf..5b78dae 100644
--- a/plugins/org.eclipse.wst.server.core/schema/clients.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/clients.exsd
@@ -61,7 +61,7 @@
          <attribute name="class" type="string" use="required">

             <annotation>

                <documentation>

-                  specifies the fully qualified name of the Java class that extend &lt;samp&gt;ClientDelegate&lt;/samp&gt;.
+                  specifies the fully qualified name of the Java class that extend &lt;samp&gt;ClientDelegate&lt;/samp&gt;.

 Clieint instances of this type will delegate to instances of this class to launch.

                </documentation>

                <appInfo>

@@ -90,26 +90,42 @@
                </documentation>

             </annotation>

          </attribute>

+         <attribute name="priority" type="string">

+            <annotation>

+               <documentation>

+                  an optional priority atrribute which specifies a relative ordering of artifact adapters. Adapters with a higher number are always used first. To override another adapter, simply provide a higher priority value that the other adapter. The priority is 0 if no priority is specified

+               </documentation>

+            </annotation>

+         </attribute>

       </complexType>

    </element>

 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a client extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-&lt;extension point=&quot;org.eclipse.wst.server.core.clients&quot;&gt;
-  &lt;client
-    id=&quot;com.example.clients&quot;
-    name=&quot;%clientName&quot;
-    description=&quot;%clientDescription&quot;
-    class=&quot;com.example.ExampleClient&quot;/&gt;
-&lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of a client extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+&lt;extension point=&quot;org.eclipse.wst.server.core.clients&quot;&gt;

+  &lt;client

+    id=&quot;com.example.clients&quot;

+    name=&quot;%clientName&quot;

+    description=&quot;%clientDescription&quot;

+    class=&quot;com.example.ExampleClient&quot;/&gt;

+&lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -128,10 +144,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/installableRuntimes.exsd b/plugins/org.eclipse.wst.server.core/schema/installableRuntimes.exsd
new file mode 100644
index 0000000..c35a66d
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/schema/installableRuntimes.exsd
@@ -0,0 +1,152 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.server.core">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.wst.server.core" id="installableRuntimes" name="Installable Runtimes"/>
+      </appInfo>
+      <documentation>
+         This extension point is used to install new runtimes from remote update manager sites.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="installableRuntime" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a fully qualified identifier of the target extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  an optional identifier of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  an optional name of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="installableRuntime">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="name"/>
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="installableRuntime"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  specifies a unique identifier for this extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="featureId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  the id of the feature containing the runtime bundle
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="featureVersion" type="string" use="required">
+            <annotation>
+               <documentation>
+                  the version of the feature containing the runtime bundle
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="featureSite" type="string" use="required">
+            <annotation>
+               <documentation>
+                  the feature (update manager) site URL
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="bundleId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  the id of the bundle in which the runtime zip is in
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="path" type="string" use="required">
+            <annotation>
+               <documentation>
+                  the relative path of the runtime zip inside the bundle
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of an installable runtime extension point:
+
+&lt;p&gt;
+&lt;pre&gt;
+  &lt;extension point=&quot;org.eclipse.wst.server.core.installableRuntimes&quot;&gt;
+    &lt;installableRuntime
+       id=&quot;com.myruntime.id&quot;
+       featureVersion=&quot;1.0.0&quot;
+       featureId=&quot;com.myfeature&quot;
+       featureSite=&quot;xyz&quot;
+       bundleId=&quot;com.ibm.mybundle&quot;
+       path=&quot;/zips/myRuntime.zip&quot;&gt;
+    &lt;/installableRuntime&gt;
+  &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;
+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 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.wst.server.core/schema/installableServers.exsd b/plugins/org.eclipse.wst.server.core/schema/installableServers.exsd
new file mode 100644
index 0000000..5fa3f09
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/schema/installableServers.exsd
@@ -0,0 +1,174 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.server.core">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.wst.server.core" id="installableServers" name="Installable Servers"/>
+      </appInfo>
+      <documentation>
+         This extension point is used to install new server adapters from remote update manager sites.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="installableServer" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a fully qualified identifier of the target extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  an optional identifier of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  an optional name of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="installableServer">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="name"/>
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+            <element ref="installableServer"/>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  specifies a unique identifier for this extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a translatable name used to identify the runtime type
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="description" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a translatable description of the runtime type
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+         <attribute name="vendor" type="string">
+            <annotation>
+               <documentation>
+                  a translatable vendor name
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="version" type="string">
+            <annotation>
+               <documentation>
+                  a translatable version number
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="featureId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  the id of the feature containing the server adapter bundle
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="featureVersion" type="string" use="required">
+            <annotation>
+               <documentation>
+                  the version of the feature containing the server adapter bundle
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="featureSite" type="string" use="required">
+            <annotation>
+               <documentation>
+                  the feature (update manager) site URL
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of an installable server extension point:
+
+&lt;p&gt;
+&lt;pre&gt;
+  &lt;extension point=&quot;org.eclipse.wst.server.core.installableServers&quot;&gt;
+    &lt;installableServer
+       id=&quot;com.myserver.id&quot;
+       name=&quot;My runtime name&quot;
+       description=&quot;My runtime description&quot;
+       vendor=&quot;xyz&quot;
+       version=&quot;1.0&quot;
+       featureVersion=&quot;1.0.0&quot;
+       featureId=&quot;com.myfeature&quot;
+       featureSite=&quot;xyz&quot;&gt;
+    &lt;/installableServer&gt;
+  &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;
+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 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.wst.server.core/schema/internalServerLocators.exsd b/plugins/org.eclipse.wst.server.core/schema/internalServerLocators.exsd
index 5e4bc99..594d10b 100644
--- a/plugins/org.eclipse.wst.server.core/schema/internalServerLocators.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/internalServerLocators.exsd
@@ -83,6 +83,15 @@
 
    <annotation>
       <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         1.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
          <meta.section type="examples"/>
       </appInfo>
       <documentation>
diff --git a/plugins/org.eclipse.wst.server.core/schema/launchableAdapters.exsd b/plugins/org.eclipse.wst.server.core/schema/launchableAdapters.exsd
index 8b951e5..576c5e1 100644
--- a/plugins/org.eclipse.wst.server.core/schema/launchableAdapters.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/launchableAdapters.exsd
@@ -58,7 +58,7 @@
          <attribute name="class" type="string" use="required">

             <annotation>

                <documentation>

-                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;LaunchableAdapterDelegate&lt;/samp&gt;.
+                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;LaunchableAdapterDelegate&lt;/samp&gt;.

 Launchable adapter instances of this type will delegate to instances of this class.

                </documentation>

                <appInfo>

@@ -78,19 +78,28 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a launchable adapter extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-  &lt;extension point=&quot;org.eclipse.wst.server.core.launchableAdapters&quot;&gt;
-     &lt;launchableAdapter
-        id=&quot;com.example.launchableAdapter&quot;
-        class=&quot;com.example.ExampleLaunchableAdapterDelegate&quot;/&gt;
-  &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of a launchable adapter extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+  &lt;extension point=&quot;org.eclipse.wst.server.core.launchableAdapters&quot;&gt;

+     &lt;launchableAdapter

+        id=&quot;com.example.launchableAdapter&quot;

+        class=&quot;com.example.ExampleLaunchableAdapterDelegate&quot;/&gt;

+  &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -109,10 +118,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/moduleArtifactAdapters.exsd b/plugins/org.eclipse.wst.server.core/schema/moduleArtifactAdapters.exsd
index 292fcad..ab7b3f4 100644
--- a/plugins/org.eclipse.wst.server.core/schema/moduleArtifactAdapters.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/moduleArtifactAdapters.exsd
@@ -80,15 +80,24 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a module object adapter extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-
-&lt;/pre&gt;
+         The following is an example of a module object adapter extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -107,11 +116,7 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
-&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

+         

       </documentation>

    </annotation>

 

diff --git a/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd b/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd
index 752ce44..901be34 100644
--- a/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd
@@ -59,7 +59,7 @@
          <attribute name="class" type="string" use="required">

             <annotation>

                <documentation>

-                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;ModuleFactoryDelegate&lt;/samp&gt;.
+                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;ModuleFactoryDelegate&lt;/samp&gt;.

 Module factory instances of this type will delegate to instances of this class.

                </documentation>

                <appInfo>

@@ -105,15 +105,24 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a module factory extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-
-&lt;/pre&gt;
+         The following is an example of a module factory extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -132,10 +141,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/moduleTypes.exsd b/plugins/org.eclipse.wst.server.core/schema/moduleTypes.exsd
index cd6f4b8..9a54f37 100644
--- a/plugins/org.eclipse.wst.server.core/schema/moduleTypes.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/moduleTypes.exsd
@@ -70,20 +70,29 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a module type extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-  &lt;extension point=&quot;org.eclipse.wst.server.core.moduleTypes&quot;&gt;
-    &lt;moduleType
-       id=&quot;com.example&quot;
-       name=&quot;%moduleTypeName&quot;
-       description=&quot;%moduleTypeDescription&quot;/&gt;
-  &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of a module type extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+  &lt;extension point=&quot;org.eclipse.wst.server.core.moduleTypes&quot;&gt;

+    &lt;moduleType

+       id=&quot;com.example&quot;

+       name=&quot;%moduleTypeName&quot;

+       description=&quot;%moduleTypeDescription&quot;/&gt;

+  &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -102,10 +111,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/publishTasks.exsd b/plugins/org.eclipse.wst.server.core/schema/publishTasks.exsd
index 6d13f90..8d6ee6f 100644
--- a/plugins/org.eclipse.wst.server.core/schema/publishTasks.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/publishTasks.exsd
@@ -78,6 +78,15 @@
 
    <annotation>
       <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         1.0
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
          <meta.section type="examples"/>
       </appInfo>
       <documentation>
diff --git a/plugins/org.eclipse.wst.server.core/schema/runtimeLocators.exsd b/plugins/org.eclipse.wst.server.core/schema/runtimeLocators.exsd
index d50f529..4c36e81 100644
--- a/plugins/org.eclipse.wst.server.core/schema/runtimeLocators.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/runtimeLocators.exsd
@@ -56,7 +56,7 @@
          <attribute name="class" type="string" use="required">

             <annotation>

                <documentation>

-                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;RuntimeLocatorDelegate&lt;/samp&gt;.
+                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;RuntimeLocatorDelegate&lt;/samp&gt;.

 Runtime locator instances of this type will delegate to instances of this class.

                </documentation>

                <appInfo>

@@ -76,21 +76,30 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a runtime locator extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-  &lt;extension point=&quot;org.eclipse.wst.server.core.runtimeLocators&quot;&gt;
-    &lt;runtimeLocator
-       id=&quot;com.example.locator&quot;
-       name=&quot;%runtimeLocatorName&quot;
-       description=&quot;%runtimeLocatorDescription&quot;
-       class=&quot;com.example.ExampleRuntimeLocator&quot;/&gt;
-  &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of a runtime locator extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+  &lt;extension point=&quot;org.eclipse.wst.server.core.runtimeLocators&quot;&gt;

+    &lt;runtimeLocator

+       id=&quot;com.example.locator&quot;

+       name=&quot;%runtimeLocatorName&quot;

+       description=&quot;%runtimeLocatorDescription&quot;

+       class=&quot;com.example.ExampleRuntimeLocator&quot;/&gt;

+  &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -109,10 +118,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd b/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd
index e441078..ff40135 100644
--- a/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd
@@ -65,7 +65,7 @@
          <attribute name="class" type="string" use="required">

             <annotation>

                <documentation>

-                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;RuntimeTargetHandlerDelegate&lt;/samp&gt;.
+                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;RuntimeTargetHandlerDelegate&lt;/samp&gt;.

 Runtime target handler instances of this type will delegate to instances of this class.

                </documentation>

                <appInfo>

@@ -85,20 +85,29 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a runtime target handler extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-  &lt;extension point=&quot;org.eclipse.wst.server.core.runtimeTargetHandlers&quot;&gt;
-     &lt;runtimeTargetHandler
-        id=&quot;com.example.runtimeTargetHandler&quot;
-        runtimeTypeIds=&quot;com.example.runtime, com.example2.*&quot;
-        class=&quot;com.example.ExampleRuntimeTargetHandler&quot;/&gt;
-   &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of a runtime target handler extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+  &lt;extension point=&quot;org.eclipse.wst.server.core.runtimeTargetHandlers&quot;&gt;

+     &lt;runtimeTargetHandler

+        id=&quot;com.example.runtimeTargetHandler&quot;

+        runtimeTypeIds=&quot;com.example.runtime, com.example2.*&quot;

+        class=&quot;com.example.ExampleRuntimeTargetHandler&quot;/&gt;

+   &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -117,10 +126,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/runtimeTypes.exsd b/plugins/org.eclipse.wst.server.core/schema/runtimeTypes.exsd
index a124f07..acd4448 100644
--- a/plugins/org.eclipse.wst.server.core/schema/runtimeTypes.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/runtimeTypes.exsd
@@ -100,9 +100,12 @@
          <attribute name="class" type="string">

             <annotation>

                <documentation>

-                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;RuntimeDelegate&lt;/samp&gt;.
+                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;RuntimeDelegate&lt;/samp&gt;.

 Runtime instances of this type will delegate to instances of this class. Delegates must also have a public 0-arg constructor.

                </documentation>

+               <appInfo>

+                  <meta.attribute kind="java"/>

+               </appInfo>

             </annotation>

          </attribute>

       </complexType>

@@ -129,27 +132,36 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a runtime type extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-  &lt;extension point=&quot;org.eclipse.wst.server.core.runtimeTypes&quot;&gt;
-    &lt;runtimeType
-       id=&quot;com.example.runtime&quot;
-       name=&quot;%runtimeTypeName&quot;
-       description=&quot;%runtimeTypeDescription&quot;
-       vendor=&quot;%runtimeTypeVendor&quot;
-       version=&quot;1.0&quot;
-       class=&quot;com.example.ExampleRuntimeDelegate&quot;&gt;
-       &lt;moduleType
-         types=&quot;j2ee.web&quot;
-         versions=&quot;1.2, 1.3, 1.4&quot;/&gt;
-    &lt;/runtimeType&gt;
-  &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of a runtime type extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+  &lt;extension point=&quot;org.eclipse.wst.server.core.runtimeTypes&quot;&gt;

+    &lt;runtimeType

+       id=&quot;com.example.runtime&quot;

+       name=&quot;%runtimeTypeName&quot;

+       description=&quot;%runtimeTypeDescription&quot;

+       vendor=&quot;%runtimeTypeVendor&quot;

+       version=&quot;1.0&quot;

+       class=&quot;com.example.ExampleRuntimeDelegate&quot;&gt;

+       &lt;moduleType

+         types=&quot;j2ee.web&quot;

+         versions=&quot;1.2, 1.3, 1.4&quot;/&gt;

+    &lt;/runtimeType&gt;

+  &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -168,10 +180,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/serverMonitors.exsd b/plugins/org.eclipse.wst.server.core/schema/serverMonitors.exsd
index 58b5811..446f938 100644
--- a/plugins/org.eclipse.wst.server.core/schema/serverMonitors.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/serverMonitors.exsd
@@ -78,8 +78,8 @@
          <attribute name="class" type="string" use="required">

             <annotation>

                <documentation>

-                  specifies the fully qualified name of the Java class that implements &lt;samp&gt;org.eclipse.wst.server.core.internal.ServerMonitorDelegate&lt;/samp&gt;
-
+                  specifies the fully qualified name of the Java class that implements &lt;samp&gt;org.eclipse.wst.server.core.internal.ServerMonitorDelegate&lt;/samp&gt;

+

 This extension point is internal and should not be used by any other plugins.

                </documentation>

                <appInfo>

@@ -92,15 +92,24 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a server monitor extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-
-&lt;/pre&gt;
+         The following is an example of a server monitor extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -119,10 +128,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/serverTypes.exsd b/plugins/org.eclipse.wst.server.core/schema/serverTypes.exsd
index 28c27e7..20b02f0 100644
--- a/plugins/org.eclipse.wst.server.core/schema/serverTypes.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/serverTypes.exsd
@@ -46,7 +46,7 @@
          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

-                  

+                  unique identifier for the server type

                </documentation>

             </annotation>

          </attribute>

@@ -73,7 +73,7 @@
          <attribute name="class" type="string" use="required">

             <annotation>

                <documentation>

-                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;org.eclipse.wst.server.core.model.ServerDelegate&lt;/samp&gt;.
+                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;org.eclipse.wst.server.core.model.ServerDelegate&lt;/samp&gt;.

 Server instances of this type will delegate to instances of this class. Delegates must also have a public 0-arg constructor.

                </documentation>

                <appInfo>

@@ -84,7 +84,7 @@
          <attribute name="behaviourClass" type="string">

             <annotation>

                <documentation>

-                  specifies the fully qualified name of the Java class that implements &lt;samp&gt;org.eclipse.wst.server.core.model.ServerBehaviourDelegate&lt;/samp&gt;.
+                  specifies the fully qualified name of the Java class that implements &lt;samp&gt;org.eclipse.wst.server.core.model.ServerBehaviourDelegate&lt;/samp&gt;.

 Server instances of this type will delegate to instances of this class. Delegates must also have a public 0-arg constructor.

                </documentation>

                <appInfo>

@@ -144,14 +144,14 @@
          <attribute name="startTimeout" type="string">

             <annotation>

                <documentation>

-                  

+                  the timeout value that the tool will wait for the server to be started. The default is 2 minutes

                </documentation>

             </annotation>

          </attribute>

          <attribute name="stopTimeout" type="string">

             <annotation>

                <documentation>

-                  

+                  the timeout value that the tool will wait for the server to be stopped. The default is 2 minutes

                </documentation>

             </annotation>

          </attribute>

@@ -167,30 +167,38 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a server type extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-&lt;extension point=&quot;org.eclipse.wst.server.core.serverTypes&quot;&gt;
-     &lt;serverType
-       id=&quot;com.example.serverType&quot;
-       name=&quot;%serverTypeName&quot;
-       description=&quot;%serverTypeDescription&quot;
-       hosts=&quot;localhost, remote&quot;
-       runtime=&quot;true&quot;
-       monitorable=&quot;true&quot;
-       initialState=&quot;stopped&quot;
-       configurationTypeId=&quot;com.example.serverConfiguration&quot;
-       launchConfigId=&quot;com.example.launchConfigurationType&quot;
-       runtimeTypeId=&quot;com.example.runtime&quot;
-       class=&quot;com.example.ExampleServerDelegate&quot;
-       workingCopyClass=&quot;com.example.ExampleServerWorkingCopyDelegate&quot;&gt;
-     &lt;/serverType&gt;
-   &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of a server type extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+&lt;extension point=&quot;org.eclipse.wst.server.core.serverTypes&quot;&gt;

+     &lt;serverType

+       id=&quot;com.example.serverType&quot;

+       name=&quot;%serverTypeName&quot;

+       description=&quot;%serverTypeDescription&quot;

+       supportsRemoteHosts=&quot;true&quot;

+       runtime=&quot;true&quot;

+       initialState=&quot;stopped&quot;

+       hasConfiguration=&quot;true&quot;

+       launchConfigId=&quot;com.example.launchConfigurationType&quot;

+       runtimeTypeId=&quot;com.example.runtime&quot;

+       class=&quot;com.example.ExampleServerDelegate&quot;

+       behaviourClass=&quot;com.example.ExampleServerBehaviourDelegate&quot;&gt;

+     &lt;/serverType&gt;

+   &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -200,8 +208,8 @@
          <meta.section type="apiInfo"/>

       </appInfo>

       <documentation>

-         Value of the attribute &lt;b&gt;class&lt;/b&gt; must be a fully qualified name of a Java class that extends the abstract class &lt;b&gt;org.eclipse.wst.server.core.model.ServerDelegate&lt;/b&gt; and has a public 0-arg constructor.
-
+         Value of the attribute &lt;b&gt;class&lt;/b&gt; must be a fully qualified name of a Java class that extends the abstract class &lt;b&gt;org.eclipse.wst.server.core.model.ServerDelegate&lt;/b&gt; and has a public 0-arg constructor.

+

 Value of the attribute &lt;b&gt;behaviourClass&lt;/b&gt; must be a fully qualified name of a Java class that extends the abstract class &lt;b&gt;org.eclipse.wst.server.core.model.ServerBehaviourDelegate&lt;/b&gt; and has a public 0-arg constructor.

       </documentation>

    </annotation>

@@ -211,10 +219,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/startup.exsd b/plugins/org.eclipse.wst.server.core/schema/startup.exsd
index 412f6c1..34867c2 100644
--- a/plugins/org.eclipse.wst.server.core/schema/startup.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/startup.exsd
@@ -6,9 +6,7 @@
          <meta.schema plugin="org.eclipse.wst.server.core" id="internalStartup" name="Startup"/>

       </appInfo>

       <documentation>

-         This extension point provides a way to invoke code during the server core plugin startup. Use sparingly.
-
-This extension point is internal and should not be used by any other plugins.

+         This extension point provides a way to invoke code during the server core plugin startup. Use sparingly.

       </documentation>

    </annotation>

 

@@ -74,19 +72,28 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         &lt;b&gt;This extension point is internal and should not be used by any other plugins.&lt;/b&gt;

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a startup extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
- &lt;extension point=&quot;org.eclipse.wst.server.core.startup&quot;&gt;
-  &lt;startup
-   id=&quot;com.example.startup&quot;
-   class=&quot;com.example.ExampleStartup&quot;/&gt;
- &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of a startup extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+ &lt;extension point=&quot;org.eclipse.wst.server.core.startup&quot;&gt;

+  &lt;startup

+   id=&quot;com.example.startup&quot;

+   class=&quot;com.example.ExampleStartup&quot;/&gt;

+ &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -105,10 +112,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModule.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModule.java
index 4339246..91fc261 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModule.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModule.java
@@ -39,14 +39,12 @@
  * <p>
  * [issue: Equality/identify for modules?]
  * </p>
+ * <p>This interface is not intended to be implemented by clients.</p>
  * <p>
- * Concrete module types are represented by concrete classes
- * implementing this interface. The only legitimate reason
- * to declare a subclass is to implement a module factory.
- * </p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
  * </p>
  * 
  * @since 1.0
@@ -91,11 +89,13 @@
 	/**
 	 * Returns an object which is an instance of the given class
 	 * associated with this object. Returns <code>null</code> if
-	 * no such object can be found.
+	 * no such object can be found, or if the delegate is not
+	 * loaded.
 	 * <p>
-	 * This method will not check the delegate class for adapting
-	 * unless it is already loaded. No plugin loading will occur
-	 * when calling this method.
+	 * This method will not check the delegate classes for adapting
+	 * unless they are already loaded. No plugin loading will occur
+	 * when calling this method. It is suitable for popup menus and
+	 * other UI artifacts where performance is a concern.
 	 * </p>
 	 *
 	 * @param adapter the adapter class to look up
@@ -103,16 +103,18 @@
 	 *    or <code>null</code> if this object does not
 	 *    have an adapter for the given class
 	 * @see IAdaptable#getAdapter(Class)
+	 * @see #loadAdapter(Class, IProgressMonitor)
 	 */
 	public Object getAdapter(Class adapter);
 
 	/**
 	 * Returns an object which is an instance of the given class
-	 * associated with this object. Returns <code>null</code> if
-	 * no such object can be found.
+	 * associated with this object. Returns <code>null</code> only if
+	 * no such object can be found after loading and initializing
+	 * delegates.
 	 * <p>
-	 * This method will force a load of the delegate class and
-	 * check it for adapting.
+	 * This method will force a load and initialization of all delegate
+	 * classes and check them for adapting.
 	 * </p>
 	 *
 	 * @param adapter the adapter class to look up
@@ -121,6 +123,7 @@
 	 * @return a object castable to the given class, 
 	 *    or <code>null</code> if this object does not
 	 *    have an adapter for the given class
+	 * @see #getAdapter(Class)
 	 */
 	public Object loadAdapter(Class adapter, IProgressMonitor monitor);
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModuleType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModuleType.java
index 6394f6b..98800b8 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModuleType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModuleType.java
@@ -15,8 +15,10 @@
  * This interface is not intended to be implemented by clients.
  * </p>
  * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
  * </p>
  * 
  * @since 1.0
@@ -27,7 +29,7 @@
 	 * <p>
 	 * The module type id is a "." separated string uniquely identifying the
 	 * type of module. Like a java package name, it should scope the type from
-	 * most general to specific. For instance, "j2ee.web".
+	 * most general to specific. For instance, "jst.web".
 	 * </p>
 	 * 
 	 * @return the module type id
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IOptionalTask.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IOptionalTask.java
deleted file mode 100644
index 201513d..0000000
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IOptionalTask.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 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.wst.server.core;
-/**
- * An optional task. 
- * 
- * [issue: EY It is not clear to me that when this task will be run. Is this task be used for
- * both the server task and the module task? Will the place where the
- * task is being run depends on the server, e.g. the TDC tasks for the v6 server should be run
- * after the server is started the modules are added to the server; however, the EJB deploy task
- * makes more sense to be run before adding the project to the server.]
- * 
- * @since 1.0
- */
-public interface IOptionalTask extends ITask {
-
-   /**
-	 * Optional task status constant (value 0) indicating that the task should
-	 * not be run.
-	 * 
-	 * @see #getStatus()
-	 */
-	public static final int TASK_UNNECESSARY = 0;
-
-	/**
-	 * Optional task status constant (value 1) indicating that the task is
-	 * completed.
-	 * 
-	 * @see #getStatus()
-	 */
-	public static final int TASK_COMPLETED = 1;
-
-	/**
-	 * Optional task status constant (value 2) indicating that the task is ready
-	 * to be run.
-	 * 
-	 * @see #getStatus()
-	 */
-	public static final int TASK_READY = 2;
-
-	/**
-	 * Optional task status constant (value 3) indicating that the task should be
-	 * selected to be run by default.
-	 * 
-	 * @see #getStatus()
-	 */
-	public static final int TASK_PREFERRED = 3;
-
-	/**
-	 * Optional task status constant (value 4) indicating that the task must be
-	 * run.
-	 * 
-	 * @see #getStatus()
-	 */
-	public static final int TASK_MANDATORY = 4;
-
-	/**
-	 * Returns the status of this task.
-	 * 
-	 * issue: EY Should this status can return any of the TASK_XXX? The TASK_XXX
-	 * looks like a mix of status, e.g. for TASK_COMPLETED and TASK_READY. The
-	 * other TASK_XXX look like a nature of the task, e.g. TASK_UNNECESSARY,
-	 * TASK_PREFERRED, TASK_MANDATORY. Is this being used for both status and
-	 * deciding whether the task should be shown?
-	 * 
-	 * @return one of the status of the task (<code>TASK_XXX</code>)
-	 *         constants declared on {@link IOptionalTask}
-	 */
-	public int getStatus();
-	
-	/**
-	 * Returns the order (index/priority) of the task that will be run. The task with
-     * a smaller order value will be run before the task with a bigger order value.
-     * For tasks that have the same order value, the order of running those task are 
-     * not guaranteed.  
-	 * 
-	 * @return the order (index/priority) of the task that will be run.
-	 */
-	public int getOrder();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IProjectProperties.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IProjectProperties.java
index 27e49a9..d8dbeed 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IProjectProperties.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IProjectProperties.java
@@ -9,57 +9,28 @@
  *     IBM Corporation - Initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.server.core;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 /**
  * This interface holds information on the properties of a given project.
  *
  * <p>This interface is not intended to be implemented by clients.</p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
  * 
- * @since 1.0
+ * @deprecated Project facet support should now be used instead of this API. @see
+ *    org.eclipse.wst.common.project.facet.core.IFacetedProject#getRuntime()
  */
 public interface IProjectProperties {
 	/**
-	 * Returns the preferred runtime server for the project. This method
-	 * returns null if the server was never chosen or does not currently exist. (if the
-	 * server is recreated or was in a closed project, etc. this method will return
-	 * the original value if it becomes available again)
-	 *
-	 * @return the current default server, or <code>null</code> if there is no
-	 *    default server
-	 */
-	public IServer getDefaultServer();
-
-	/**
-	 * Sets the preferred runtime server for the project. Set the server to
-	 * null to clear the setting. If there is a problem saving the file, a CoreException
-	 * will be thrown.
-	 *
-	 * @param server the server to set the default server, or <code>null</code>
-	 *    to unset the default
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting and cancellation are not desired
-	 * @throws CoreException if there is a problem setting the default server
-	 */
-	public void setDefaultServer(IServer server, IProgressMonitor monitor) throws CoreException;
-
-	/**
 	 * Returns the current runtime target for this project.
 	 * 
 	 * @return the current runtime target, or <code>null</code> if the project has
-	 *    no runtime target 
+	 *    no runtime target
+	 * @deprecated Project facet support should now be used instead of this API. @see
+	 *    org.eclipse.wst.common.project.facet.core.IFacetedProject#getRuntime()
 	 */
 	public IRuntime getRuntimeTarget();
-
-	/**
-	 * Sets the runtime target for the project.
-	 * 
-	 * @param runtime the runtime to use as the target, or <code>null</code> to
-	 *    unset the target 
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting and cancellation are not desired
-	 * @throws CoreException if there is a problem setting the runtime target
-	 */
-	public void setRuntimeTarget(IRuntime runtime, IProgressMonitor monitor) throws CoreException;
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishListener.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IPublishListener.java
similarity index 87%
rename from plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishListener.java
rename to plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IPublishListener.java
index 4b8bb8c..51b20a6 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishListener.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IPublishListener.java
@@ -8,10 +8,9 @@
  * Contributors:
  *     IBM Corporation - Initial API and implementation
  **********************************************************************/
-package org.eclipse.wst.server.core.internal;
+package org.eclipse.wst.server.core;
 
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.wst.server.core.IServer;
 /**
  * A publish listener is used to listen for publishing events from a server.
  * The events are typically received in the following order:
@@ -32,15 +31,15 @@
 	/**
 	 * Fired to notify that publishing has begun.
 	 *
-	 * @param server
+	 * @param server the server that publishing started on
 	 */
 	public void publishStarted(IServer server);
 
 	/**
 	 * Publishing has finished. Returns the overall status.
 	 *
-	 * @param server
-	 * @param status
+	 * @param server the server that publishing finished on
+	 * @param status indicating what (if anything) went wrong
 	 */
 	public void publishFinished(IServer server, IStatus status);
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntime.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntime.java
index c550e75..d187c8c 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntime.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntime.java
@@ -43,10 +43,6 @@
  * Two runtimes are identical if and only if they have the same id.
  * </p>
  * <p>This interface is not intended to be implemented by clients.</p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @see IRuntimeWorkingCopy
  * @since 1.0
@@ -105,11 +101,13 @@
 	/**
 	 * Returns an object which is an instance of the given class
 	 * associated with this object. Returns <code>null</code> if
-	 * no such object can be found.
+	 * no such object can be found, or if the delegate is not
+	 * loaded.
 	 * <p>
-	 * This method will not check the delegate class for adapting
-	 * unless it is already loaded. No plugin loading will occur
-	 * when calling this method.
+	 * This method will not check the delegate classes for adapting
+	 * unless they are already loaded. No plugin loading will occur
+	 * when calling this method. It is suitable for popup menus and
+	 * other UI artifacts where performance is a concern.
 	 * </p>
 	 *
 	 * @param adapter the adapter class to look up
@@ -117,16 +115,18 @@
 	 *    or <code>null</code> if this object does not
 	 *    have an adapter for the given class
 	 * @see IAdaptable#getAdapter(Class)
+	 * @see #loadAdapter(Class, IProgressMonitor)
 	 */
 	public Object getAdapter(Class adapter);
 	
 	/**
 	 * Returns an object which is an instance of the given class
-	 * associated with this object. Returns <code>null</code> if
-	 * no such object can be found.
+	 * associated with this object. Returns <code>null</code> only if
+	 * no such object can be found after loading and initializing
+	 * delegates.
 	 * <p>
-	 * This method will force a load of the delegate class and
-	 * check it for adapting.
+	 * This method will force a load and initialization of all delegate
+	 * classes and check them for adapting.
 	 * </p>
 	 *
 	 * @param adapter the adapter class to look up
@@ -135,6 +135,7 @@
 	 * @return a object castable to the given class, 
 	 *    or <code>null</code> if this object does not
 	 *    have an adapter for the given class
+	 * @see #getAdapter(Class)
 	 */
 	public Object loadAdapter(Class adapter, IProgressMonitor monitor);
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeTargetHandler.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeTargetHandler.java
index 8214150..01712ff 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeTargetHandler.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeTargetHandler.java
@@ -19,8 +19,14 @@
  * resources that can be created.
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
+ * <p>
+ * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+ * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+ * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+ * (repeatedly) as the API evolves.
+ * </p>
  * 
- * @since 1.0
+ * @deprecated use project facets instead of runtime targets
  */
 public interface IRuntimeTargetHandler extends IAdaptable {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeType.java
index 128d7bd..346cf34 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeType.java
@@ -39,10 +39,6 @@
  * <p>
  * Two runtime types are identical if and only if they have the same id.
  * </p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @since 1.0
  */
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeWorkingCopy.java
index ca2e493..66e8de3 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IRuntimeWorkingCopy.java
@@ -22,10 +22,6 @@
  * <p>
  * This interface is not intended to be implemented by clients.
  * </p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @see IRuntime
  * @since 1.0
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
index f6ca811..071df81 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
@@ -11,7 +11,6 @@
 package org.eclipse.wst.server.core;
 
 import org.eclipse.core.runtime.*;
-import org.eclipse.debug.core.ILaunch;
 /**
  * Represents a server instance. Every server is an instance of a
  * particular, fixed server type.
@@ -64,15 +63,28 @@
  * </p>
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @since 1.0
  */
 public interface IServer extends IServerAttributes {
 	/**
+	 * An operation listener is used to receive notification back about a
+	 * specific server operation, such as starting or stopping a server.
+	 * 
+	 * @since 1.0
+	 */
+	public interface IOperationListener {
+		/**
+		 * Called once when the operation is complete.
+		 * 
+		 * @param result a status object with code <code>IStatus.OK</code> if
+		 *    the operation completed successfully, otherwise a status object
+		 *    indicating why it didn't
+		 */
+		public void done(IStatus result);
+	}
+
+	/**
 	 * Server state constant (value 0) indicating that the
 	 * server is in an unknown state.
 	 * 
@@ -212,14 +224,6 @@
 	public int getServerPublishState();
 
 	/**
-	 * Returns the module's sync state.
-	 * 
-	 * @param module the module
-	 * @return one of the PUBLISH_XXX state flags
-	 */
-	public int getModulePublishState(IModule[] module);
-
-	/**
 	 * Adds the given server state listener to this server.
 	 * Once registered, a listener starts receiving notification of 
 	 * state changes to this server. The listener continues to receive
@@ -255,6 +259,24 @@
 	public void removeServerListener(IServerListener listener);
 
 	/**
+	 * Adds a publish listener to this server.
+	 * Has no effect if an identical listener is already registered.
+	 *
+	 * @param listener the publish listener
+	 * @see #removePublishListener(IPublishListener)
+	 */
+	public void addPublishListener(IPublishListener listener);
+
+	/**
+	 * Removes a publish listener from this server.
+	 * Has no effect if the listener is not registered.
+	 *
+	 * @param listener the publish listener
+	 * @see #addPublishListener(IPublishListener)
+	 */
+	public void removePublishListener(IPublishListener listener);
+
+	/**
 	 * Returns whether this server is in a state that it can
 	 * be published to.
 	 *
@@ -266,6 +288,12 @@
 	/**
 	 * Publish to the server using the progress monitor. The result of the
 	 * publish operation is returned as an IStatus.
+	 * <p>
+	 * This method should not be called from the UI thread. Publishing is long-
+	 * running and may trigger resource change events or builds. Although this
+	 * framework is safe, there is no guarantee that other bundles are UI-safe
+	 * and the risk of UI deadlock is high. 
+	 * </p>
 	 * 
 	 * @param kind the kind of publish being requested. Valid values are
 	 *    <ul>
@@ -295,17 +323,15 @@
 
 	/**
 	 * Asynchronously starts this server in the given launch mode.
-	 * Returns the debug launch object that can be used in a debug
-	 * session.
 	 * <p>
 	 * If canStart(launchMode) is false, this method will throw an
 	 * exception.
 	 * </p>
 	 * <p>
-	 * [issue: There is no way to communicate failure to the
-	 * client for the async portion of this operation. Given that
-	 * this operation can go awry, there probably should be a mechanism
-	 * that allows failing asynch operations to be diagnosed.]
+	 * If the caller wants to listen for failure or success of the
+	 * server starting, it can add a server listener or use the
+	 * version of this method that takes a status listener as a
+	 * parameter.
 	 * </p>
 	 *
 	 * @param launchMode a mode in which a server can be launched,
@@ -313,12 +339,34 @@
 	 *    {@link org.eclipse.debug.core.ILaunchManager}
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
-	 * @return a debug launch object
 	 * @exception CoreException if an error occurs while trying to start the server
 	 */
-	public ILaunch start(String launchMode, IProgressMonitor monitor) throws CoreException;
+	public void start(String launchMode, IProgressMonitor monitor) throws CoreException;
 	
 	/**
+	 * Asynchronously starts this server in the given launch mode.
+	 * <p>
+	 * If canStart(launchMode) is false, this method will throw an
+	 * exception.
+	 * </p>
+	 * <p>
+	 * The operation listener can be used to add a listener for notification
+	 * of this specific server launch. The listener will be called with a
+	 * single successful status (severity OK) when the server has
+	 * finished starting, or a single failure (severity ERROR) if
+	 * there was an error starting the server.
+	 * </p>
+	 * 
+	 * @param launchMode a mode in which a server can be launched,
+	 *    one of the mode constants defined by
+	 *    {@link org.eclipse.debug.core.ILaunchManager}
+	 * @param listener an operation listener to receive notification when this
+	 *    operation is done, or <code>null</code> if notification is not
+	 *    required
+	 */
+	public void start(String launchMode, IOperationListener listener);
+
+	/**
 	 * Starts this server in the given launch mode and waits until the server
 	 * has finished starting.
 	 * <p>
@@ -332,11 +380,12 @@
 	 *    {@link org.eclipse.debug.core.ILaunchManager}
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
-	 * @return the launch
+	 * @deprecated this method is deprecated. use start(String,
+	 *    IProgressMonitor, IOperationListener) instead
 	 * @exception CoreException if an error occurs while trying to start the server
 	 */
-	public ILaunch synchronousStart(String launchMode, IProgressMonitor monitor) throws CoreException;
-	
+	public void synchronousStart(String launchMode, IProgressMonitor monitor) throws CoreException;
+
 	/**
 	 * Returns whether this server is in a state that it can
 	 * be restarted in the given mode. Note that only servers
@@ -349,7 +398,7 @@
 	 *    be restarted, otherwise a status object indicating why it can't
 	 */
 	public IStatus canRestart(String mode);
-	
+
 	/**
 	 * Returns whether this server is out of sync and needs to be
 	 * restarted. This method will return false when the
@@ -372,18 +421,42 @@
 	 * returns <code>false</code>.
 	 * This method cannot be used to start the server from a stopped state.
 	 * <p>
-	 * [issue: There is no way to communicate failure to the
-	 * client. Given that this operation can go awry, there probably
-	 * should be a mechanism that allows failing asynch operations
-	 * to be diagnosed.]
+	 * If the caller wants to listen for failure or success of the
+	 * server restarting, it can add a server listener or use the
+	 * version of this method that takes a status listener as a
+	 * parameter.
 	 * </p>
 	 *
 	 * @param launchMode a mode in which a server can be launched,
 	 *    one of the mode constants defined by
 	 *    {@link org.eclipse.debug.core.ILaunchManager}
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
 	 */
-	public void restart(String launchMode);
-	
+	public void restart(String launchMode, IProgressMonitor monitor);
+
+	/**
+	 * Asynchronously restarts this server. This operation does
+	 * nothing if this server cannot be stopped ({@link #canRestart(String)}
+	 * returns <code>false</code>.
+	 * This method cannot be used to start the server from a stopped state.
+	 * <p>
+	 * The operation listener can be used to add a listener for notification
+	 * of this specific server restart. The listener will be called with a
+	 * single successful status (severity OK) when the server has
+	 * finished restarting, or a single failure (severity ERROR) if
+	 * there was an error restarting the server.
+	 * </p>
+	 *
+	 * @param launchMode a mode in which a server can be launched,
+	 *    one of the mode constants defined by
+	 *    {@link org.eclipse.debug.core.ILaunchManager}
+	 * @param listener an operation listener to receive notification when this
+	 *    operation is done, or <code>null</code> if notification is not
+	 *    required
+	 */
+	public void restart(String launchMode, IOperationListener listener);
+
 	/**
 	 * Synchronously restarts this server. This operation does
 	 * nothing if this server cannot be stopped ({@link #canRestart(String)}
@@ -401,6 +474,8 @@
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
 	 * @throws CoreException if there was an error
+	 * @deprecated this method is deprecated. use restart(String,
+	 *    IProgressMonitor, IOperationListener) instead
 	 */
 	public void synchronousRestart(String launchMode, IProgressMonitor monitor) throws CoreException;
 
@@ -425,10 +500,10 @@
 	 * process will be terminated any way that it can.
 	 * </p>
 	 * <p>
-	 * [issue: There is no way to communicate failure to the
-	 * client. Given that this operation can go awry, there probably
-	 * should be a mechanism that allows failing asynch operations
-	 * to be diagnosed.]
+	 * If the caller wants to listen for success or failure of the
+	 * server stopping, it can add a server listener or use the
+	 * version of this method that takes a status listener as a
+	 * parameter.
 	 * </p>
 	 * 
 	 * @param force <code>true</code> to kill the server, or <code>false</code>
@@ -437,6 +512,31 @@
 	public void stop(boolean force);
 
 	/**
+	 * Asynchronously stops this server. This operation does
+	 * nothing if this server cannot be stopped ({@link #canStop()}
+	 * returns <code>false</code>.
+	 * <p>
+	 * If force is <code>false</code>, it will attempt to stop the server
+	 * normally/gracefully. If force is <code>true</code>, then the server
+	 * process will be terminated any way that it can.
+	 * </p>
+	 * <p>
+	 * The operation listener can be used to add a listener for notification
+	 * of this specific server stop. The listener will be called with a
+	 * single successful status (severity OK) when the server has
+	 * finished stopping, or a single failure (severity ERROR) if
+	 * there was an error stopping the server.
+	 * </p>
+	 * 
+	 * @param force <code>true</code> to kill the server, or <code>false</code>
+	 *    to stop normally
+	 * @param listener an operation listener to receive notification when this
+	 *    operation is done, or <code>null</code> if notification is not
+	 *    required
+	 */
+	public void stop(boolean force, IOperationListener listener);
+
+	/**
 	 * Stops this server and waits until the server has completely stopped.
 	 * <p>
 	 * This convenience method uses {@link #stop(boolean)}
@@ -446,25 +546,29 @@
 	 * 
 	 * @param force <code>true</code> to kill the server, or <code>false</code>
 	 *    to stop normally
+	 * @deprecated this method is deprecated. use stop(boolean,
+	 *    IOperationListener) instead
 	 */
 	public void synchronousStop(boolean force);
 
 	/**
-	 * Returns whether the given module can be restarted.
-	 * <p>
-	 * [issue: It's unclear whether this operations is guaranteed to be fast
-	 * or whether it could involve communication with any actual
-	 * server. If it is not fast, the method should take a progress
-	 * monitor.]
-	 * </p>
+	 * Returns the current state of the given module on this server.
+	 * Returns <code>STATE_UNKNOWN</code> if the module
+	 * is not among the ones associated with this server.
 	 * 
 	 * @param module the module
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting and cancellation are not desired
-	 * @return a status object with code <code>IStatus.OK</code> if the module can
-	 *    be restarted, otherwise a status object indicating why it can't
+	 * @return one of the state (<code>STATE_XXX</code>) constants declared
+	 *    on {@link IServer}
 	 */
-	public IStatus canRestartModule(IModule[] module, IProgressMonitor monitor);
+	public int getModuleState(IModule[] module);
+
+	/**
+	 * Returns the module's sync state.
+	 * 
+	 * @param module the module
+	 * @return one of the PUBLISH_XXX state flags
+	 */
+	public int getModulePublishState(IModule[] module);
 
 	/**
 	 * Check if the given module is in sync on the server. It should
@@ -477,10 +581,61 @@
 	public boolean getModuleRestartState(IModule[] module);
 
 	/**
+	 * Returns whether the given module can be restarted.
+	 * <p>
+	 * This method has a progress monitor because it may involve plugin
+	 * and class loading. No communication to the server will occur.
+	 * </p>
+	 * 
+	 * @param module the module
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @return a status object with code <code>IStatus.OK</code> if the module can
+	 *    be restarted, otherwise a status object indicating why it can't
+	 */
+	public IStatus canControlModule(IModule[] module, IProgressMonitor monitor);
+
+	/**
+	 * Asynchronously starts this server in the given launch mode.
+	 * <p>
+	 * If canStart(launchMode) is false, this method will throw an
+	 * exception.
+	 * </p>
+	 * <p>
+	 * The operation listener can be used to add a listener for notification
+	 * of this specific module start. The listener will be called with a
+	 * single successful status (severity OK) when the module has
+	 * finished starting, or a single failure (severity ERROR) if
+	 * there was an error starting the module.
+	 * </p>
+	 *
+	 *@param module the module to be started
+	 * @param listener an operation listener to receive notification when this
+	 *    operation is done, or <code>null</code> if notification is not
+	 *    required
+	 */
+	public void startModule(IModule[] module, IOperationListener listener);
+
+	/**
+	 * Asynchronously stops the given module. This operation does
+	 * nothing if this module cannot be stopped.
+	 * <p>
+	 * The operation listener can be used to add a listener for notification
+	 * of this specific module stop. The listener will be called with a
+	 * single successful status (severity OK) when the module has
+	 * finished stopping, or a single failure (severity ERROR) if
+	 * there was an error stopping the module.
+	 * </p>
+	 * 
+	 * @param module the module to be stopped
+	 * @param listener an operation listener to receive notification when this
+	 *    operation is done, or <code>null</code> if notification is not
+	 *    required
+	 */
+	public void stopModule(IModule[] module, IOperationListener listener);
+
+	/**
 	 * Asynchronously restarts the given module on the server.
-	 * See the specification of 
-	 * {@link IServer#synchronousRestartModule(IModule[], IProgressMonitor)}
-	 * for further details. 
 	 * <p>
 	 * The implementation should update the module sync state and fire
 	 * an event for the module. If the module does not exist on the server,
@@ -491,9 +646,7 @@
 	 * any need for the progress monitor?]
 	 * </p>
 	 * <p>
-	 * [issue: Since this method is ascynchronous, how can
-	 * it return a meaningful IStatus? 
-	 * And IServer.synchronousModuleRestart throws CoreException
+	 * [issue: IServer.synchronousModuleRestart throws CoreException
 	 * if anything goes wrong.]
 	 * </p>
 	 * <p>
@@ -503,34 +656,9 @@
 	 * </p>
 	 * 
 	 * @param module the module to be started
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting and cancellation are not desired
-	 * @exception CoreException if an error occurs while trying to restart the module
+	 * @param listener an operation listener to receive notification when this
+	 *    operation is done, or <code>null</code> if notification is not
+	 *    required
 	 */
-	public void restartModule(IModule[] module, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Restarts the given module and waits until it has finished restarting.
-	 * If the module does not exist on the server, an exception will be thrown.
-	 * <p>
-	 * This method may not be used to initially start a module.
-	 * </p>
-	 * 
-	 * @param module the module to be restarted
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting and cancellation are not desired
-	 * @exception CoreException if an error occurs while trying to restart the module
-	 */
-	public void synchronousRestartModule(IModule[] module, IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Returns the current state of the given module on this server.
-	 * Returns <code>STATE_UNKNOWN</code> if the module
-	 * is not among the ones associated with this server.
-	 * 
-	 * @param module the module
-	 * @return one of the state (<code>STATE_XXX</code>) constants declared
-	 *    on {@link IServer}
-	 */
-	public int getModuleState(IModule[] module);
+	public void restartModule(IModule[] module, IOperationListener listener);
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerAttributes.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerAttributes.java
index c3029dd..2b2aeb8 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerAttributes.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerAttributes.java
@@ -71,10 +71,6 @@
  * </p>
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @since 1.0
  */
@@ -128,36 +124,41 @@
 	/**
 	 * Returns an object which is an instance of the given class
 	 * associated with this object. Returns <code>null</code> if
-	 * no such object can be found.
+	 * no such object can be found, or if the delegate is not
+	 * loaded.
 	 * <p>
 	 * This method will not check the delegate classes for adapting
 	 * unless they are already loaded. No plugin loading will occur
-	 * when calling this method.
+	 * when calling this method. It is suitable for popup menus and
+	 * other UI artifacts where performance is a concern.
 	 * </p>
-	 *
+	 * 
 	 * @param adapter the adapter class to look up
 	 * @return a object castable to the given class, 
 	 *    or <code>null</code> if this object does not
 	 *    have an adapter for the given class
 	 * @see IAdaptable#getAdapter(Class)
+	 * @see #loadAdapter(Class, IProgressMonitor)
 	 */
 	public Object getAdapter(Class adapter);
 
 	/**
 	 * Returns an object which is an instance of the given class
-	 * associated with this object. Returns <code>null</code> if
-	 * no such object can be found.
+	 * associated with this object. Returns <code>null</code> only if
+	 * no such object can be found after loading and initializing
+	 * delegates.
 	 * <p>
-	 * This method will force a load of all delegate classes and
-	 * check them for adapting.
+	 * This method will force a load and initialization of all delegate
+	 * classes and check them for adapting.
 	 * </p>
-	 *
+	 * 
 	 * @param adapter the adapter class to look up
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
 	 * @return a object castable to the given class, 
 	 *    or <code>null</code> if this object does not
 	 *    have an adapter for the given class
+	 * @see #getAdapter(Class)
 	 */
 	public Object loadAdapter(Class adapter, IProgressMonitor monitor);
 
@@ -256,8 +257,11 @@
 	public IServerWorkingCopy createWorkingCopy();
 
 	/**
-	 * Returns an array of user modules that are currently being published to
-	 * this server.
+	 * Returns an array of user modules that are currently configured on
+	 * the server. When the server is published, these are the projects
+	 * that will be configured on the server. This method may not return
+	 * the list of projects that are currently on the server if a module
+	 * has been added since the last publish.
 	 * <p>
 	 * This method returns the root modules, which are not parented within
 	 * another modules. Each of these may contain child modules, which are
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerType.java
index a95aa56..30a2d6e 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerType.java
@@ -30,10 +30,6 @@
  * <p>
  * Two server types are identical if and only if they have the same id.
  * </p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @since 1.0
  */
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
index 951165a..8446512 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
@@ -19,10 +19,6 @@
  * to a server instance ({@link IServer}).
  *
  * <p>This interface is not intended to be implemented by clients.</p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @since 1.0
  */
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ITask.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ITask.java
deleted file mode 100644
index d144a4e..0000000
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ITask.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.core;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-/**
- * This interface represents a task that can be executed (and then possibly
- * undone). To tie together multiple tasks, a common task model can be used
- * to pass parameters to the task or have the output of one task feed into
- * another task.
- * 
- * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
- */
-public interface ITask {
-	/**
-	 * Returns the displayable name for this task.
-	 * <p>
-	 * Note that this name is appropriate for the current locale.
-	 * </p>
-	 *
-	 * @return a displayable name for this task
-	 */
-	public String getName();
-
-	/**
-	 * Returns the displayable description for this task.
-	 * <p>
-	 * Note that this description is appropriate for the current locale.
-	 * </p>
-	 *
-	 * @return a displayable description for this task
-	 */
-	public String getDescription();
-
-	/**
-	 * Return the task model.
-	 * <p>
-	 * A task model contains information about the overall task flow and allows
-	 * tasks to store and retreive data. Its usage allows mutliple tasks to be
-	 * chained together and share data from the output of one task to the input
-	 * of another.
-	 * </p>
-	 * 
-	 * @return the task model
-	 */
-	public TaskModel getTaskModel();
-
-	/**
-	 * Set the task model.
-	 * <p>
-	 * A task model contains information about the overall task flow and allows
-	 * tasks to store and retreive data. Its usage allows mutliple tasks to be
-	 * chained together and share data from the output of one task to the input
-	 * of another.
-	 * </p>
-	 * 
-	 * @param taskModel the task model
-	 */
-	public void setTaskModel(TaskModel taskModel);
-
-	/**
-	 * Execute (perform) the task.
-	 * 
-	 * @param monitor a progress monitor, or <code>null</code> if progress
-	 *    reporting and cancellation are not desired
-	 * @throws CoreException if there was an error while executing the task
-	 */
-	public void execute(IProgressMonitor monitor) throws CoreException;
-
-	/**
-	 * Returns whether the task can be undone.
-	 * 
-	 * @return <code>true</code> if the task can be undone, and 
-	 *    <code>false</code> otherwise
-	 */
-	public boolean canUndo();
-	
-	/**
-	 * Undo the task.
-	 */
-	public void undo();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
index ef7f891..9811202 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
@@ -12,7 +12,7 @@
 
 import java.util.*;
 
-import org.eclipse.core.resources.*;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.*;
 import org.eclipse.wst.server.core.internal.*;
 /**
@@ -26,27 +26,43 @@
  * This class provides all its functionality through static members.
  * It is not intended to be subclassed or instantiated.
  * </p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @since 1.0
  */
 public class ServerCore {
+	private static final String EXTENSION_SERVER_TYPE = "serverTypes";
+	private static final String EXTENSION_RUNTIME_TYPE = "runtimeTypes";
+
 	//	cached copy of all runtime types
 	private static List runtimeTypes;
-	
-	//	cached copy of all runtime target handlers
-	private static List runtimeTargetHandlers;
 
 	//	cached copy of all server and configuration types
 	private static List serverTypes;
 
+	private static IRegistryChangeListener registryListener;
+
 	static {
 		executeStartups();
 	}
 
+	private static class RegistryChangeListener implements IRegistryChangeListener {
+		public void registryChanged(IRegistryChangeEvent event) {
+			IExtensionDelta[] deltas = event.getExtensionDeltas(ServerPlugin.PLUGIN_ID, EXTENSION_RUNTIME_TYPE);
+			if (deltas != null) {
+				for (int i = 0; i < deltas.length; i++) {
+					handleRuntimeTypeDelta(deltas[i]);
+				}
+			}
+			
+			deltas = event.getExtensionDeltas(ServerPlugin.PLUGIN_ID, EXTENSION_SERVER_TYPE);
+			if (deltas != null) {
+				for (int i = 0; i < deltas.length; i++) {
+					handleServerTypeDelta(deltas[i]);
+				}
+			}
+		}
+	}
+
 	/**
 	 * Cannot create ServerCore - use static methods.
 	 */
@@ -59,21 +75,27 @@
 	 *
 	 * @return org.eclipse.wst.server.core.internal.ResourceManager
 	 */
-	private static ResourceManager getResourceManager() {
+	private final static ResourceManager getResourceManager() {
 		return ResourceManager.getInstance();
 	}
-	
+
 	/**
 	 * Returns the preference information for the project. The project may not
 	 * be null.
 	 *
 	 * @param project a project
 	 * @return the properties of the project
+	 * @deprecated Project facet support should now be used instead of this API. @see
+	 *    org.eclipse.wst.common.project.facet.core.IFacetedProject#getRuntime()
 	 */
 	public static IProjectProperties getProjectProperties(IProject project) {
 		if (project == null)
 			throw new IllegalArgumentException();
-		return new ProjectProperties(project);
+		return new IProjectProperties() {
+			public IRuntime getRuntimeTarget() {
+				return null;
+			}
+		};
 	}
 
 	/**
@@ -129,12 +151,7 @@
 	 *    {@link IRuntimeTargetHandler}
 	 */
 	public static IRuntimeTargetHandler[] getRuntimeTargetHandlers() {
-		if (runtimeTargetHandlers == null)
-			loadRuntimeTargetHandlers();
-		
-		IRuntimeTargetHandler[] rth = new IRuntimeTargetHandler[runtimeTargetHandlers.size()];
-		runtimeTargetHandlers.toArray(rth);
-		return rth;
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
 
 	/**
@@ -149,19 +166,7 @@
 	 *   there is no runtime target handler with the given id
 	 */
 	public static IRuntimeTargetHandler findRuntimeTargetHandler(String id) {
-		if (id == null)
-			throw new IllegalArgumentException();
-
-		if (runtimeTargetHandlers == null)
-			loadRuntimeTargetHandlers();
-		
-		Iterator iterator = runtimeTargetHandlers.iterator();
-		while (iterator.hasNext()) {
-			IRuntimeTargetHandler runtimeTargetListener = (IRuntimeTargetHandler) iterator.next();
-			if (id.equals(runtimeTargetListener.getId()))
-				return runtimeTargetListener;
-		}
-		return null;
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
 
 	/**
@@ -240,12 +245,21 @@
 		if (runtimeTypes != null)
 			return;
 		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .runtimeTypes extension point ->-");
+		
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "runtimeTypes");
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, EXTENSION_RUNTIME_TYPE);
+		runtimeTypes = new ArrayList(cf.length);
+		addRuntimeTypes(cf);
+		addRegistryListener();
+		
+		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .runtimeTypes extension point -<-");
+	}
 
-		int size = cf.length;
-		runtimeTypes = new ArrayList(size);
-		for (int i = 0; i < size; i++) {
+	/**
+	 * Load the runtime types.
+	 */
+	private static synchronized void addRuntimeTypes(IConfigurationElement[] cf) {
+		for (int i = 0; i < cf.length; i++) {
 			try {
 				RuntimeType runtimeType = new RuntimeType(cf[i]);
 				runtimeTypes.add(runtimeType);
@@ -254,34 +268,6 @@
 				Trace.trace(Trace.SEVERE, "  Could not load runtimeType: " + cf[i].getAttribute("id"), t);
 			}
 		}
-		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .runtimeTypes extension point -<-");
-	}
-	
-	/**
-	 * Load the runtime target handlers.
-	 */
-	private static synchronized void loadRuntimeTargetHandlers() {
-		if (runtimeTargetHandlers != null)
-			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .runtimeTargetHandlers extension point ->-");
-		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "runtimeTargetHandlers");
-
-		int size = cf.length;
-		runtimeTargetHandlers = new ArrayList(size);
-		for (int i = 0; i < size; i++) {
-			try {
-				RuntimeTargetHandler runtimeTargetListener = new RuntimeTargetHandler(cf[i]);
-				runtimeTargetHandlers.add(runtimeTargetListener);
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded runtimeTargetHandler: " + cf[i].getAttribute("id"));
-			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load runtimeTargetHandler: " + cf[i].getAttribute("id"), t);
-			}
-		}
-		sortOrderedList(runtimeTargetHandlers);
-		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .runtimeTargetHandlers extension point -<-");
 	}
 
 	/**
@@ -290,13 +276,23 @@
 	private static synchronized void loadServerTypes() {
 		if (serverTypes != null)
 			return;
+		
 		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .serverTypes extension point ->-");
+		
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "serverTypes");
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, EXTENSION_SERVER_TYPE);
+		serverTypes = new ArrayList(cf.length);
+		addServerTypes(cf);
+		addRegistryListener();
+		
+		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .serverTypes extension point -<-");
+	}
 
-		int size = cf.length;
-		serverTypes = new ArrayList(size);
-		for (int i = 0; i < size; i++) {
+	/**
+	 * Load the server types.
+	 */
+	private static synchronized void addServerTypes(IConfigurationElement[] cf) {
+		for (int i = 0; i < cf.length; i++) {
 			try {
 				ServerType serverType = new ServerType(cf[i]);
 				serverTypes.add(serverType);
@@ -305,8 +301,6 @@
 				Trace.trace(Trace.SEVERE, "  Could not load serverType: " + cf[i].getAttribute("id"), t);
 			}
 		}
-		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .serverTypes extension point -<-");
 	}
 
 	/**
@@ -408,27 +402,107 @@
 	}
 
 	/**
-	 * Sort the given list of IOrdered items into indexed order.
+	 * Returns the preferred runtime server for the given module. This method
+	 * returns null if the server was never chosen or does not currently exist. (if the
+	 * server is recreated or was in a closed project, etc. this method will return
+	 * the original value if it becomes available again)
 	 *
-	 * @param list java.util.List
-	 * @return java.util.List
+	 * @param module a module
+	 * @return the current default server, or <code>null</code> if there is no
+	 *    default server
 	 */
-	private static List sortOrderedList(List list) {
-		if (list == null)
-			return null;
+	public static IServer getDefaultServer(IModule module) {
+		return ModuleProperties.getInstance().getDefaultServer(module);
+	}
 
-		int size = list.size();
-		for (int i = 0; i < size - 1; i++) {
-			for (int j = i + 1; j < size; j++) {
-				IOrdered a = (IOrdered) list.get(i);
-				IOrdered b = (IOrdered) list.get(j);
-				if (a.getOrder() > b.getOrder()) {
-					Object temp = a;
-					list.set(i, b);
-					list.set(j, temp);
+	/**
+	 * Sets the preferred runtime server for the given module. Set the server to
+	 * null to clear the setting. If there is a problem saving the file, a CoreException
+	 * will be thrown.
+	 * 
+	 * @param module the module to set the default for
+	 * @param server the server to set the default server, or <code>null</code>
+	 *    to unset the default
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @throws CoreException if there is a problem setting the default server
+	 */
+	public static void setDefaultServer(IModule module, IServer server, IProgressMonitor monitor) throws CoreException {
+		ModuleProperties.getInstance().setDefaultServer(module, server, monitor);
+	}
+
+	/**
+	 * Handles a change to the server type extension point due to bundles getting added
+	 * or removed dynamically at runtime.
+	 * 
+	 * @param delta an extension delta
+	 */
+	protected static void handleServerTypeDelta(IExtensionDelta delta) {
+		if (serverTypes == null) // not loaded yet
+			return;
+		
+		IConfigurationElement[] cf = delta.getExtension().getConfigurationElements();
+		
+		if (delta.getKind() == IExtensionDelta.ADDED) {
+			addServerTypes(cf);
+		} else {
+			int size = serverTypes.size();
+			ServerType[] st = new ServerType[size];
+			serverTypes.toArray(st);
+			int size2 = cf.length;
+			
+			for (int i = 0; i < size; i++) {
+				for (int j = 0; j < size2; j++) {
+					if (st[i].getId().equals(cf[j].getAttribute("id"))) {
+						st[i].dispose();
+						serverTypes.remove(st[i]);
+					}
 				}
 			}
 		}
-		return list;
+		getResourceManager().resolveServers();
+	}
+
+	/**
+	 * Handles a change to the runtime type extension point due to bundles getting added
+	 * or removed dynamically at runtime.
+	 * 
+	 * @param delta an extension delta
+	 */
+	protected static void handleRuntimeTypeDelta(IExtensionDelta delta) {
+		if (runtimeTypes == null) // not loaded yet
+			return;
+		
+		IConfigurationElement[] cf = delta.getExtension().getConfigurationElements();
+		
+		if (delta.getKind() == IExtensionDelta.ADDED) {
+			addRuntimeTypes(cf);
+		} else {
+			int size = runtimeTypes.size();
+			RuntimeType[] rt = new RuntimeType[size];
+			runtimeTypes.toArray(rt);
+			int size2 = cf.length;
+			
+			for (int i = 0; i < size; i++) {
+				for (int j = 0; j < size2; j++) {
+					if (rt[i].getId().equals(cf[j].getAttribute("id"))) {
+						rt[i].dispose();
+						runtimeTypes.remove(rt[i]);
+					}
+				}
+			}
+		}
+		getResourceManager().resolveRuntimes();
+		getResourceManager().resolveServers();
+	}
+
+	private static void addRegistryListener() {
+		if (registryListener != null)
+			return;
+		
+		registryListener = new RegistryChangeListener();
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		registry.addRegistryChangeListener(registryListener, ServerPlugin.PLUGIN_ID);
+		ServerPlugin.setRegistryListener(registryListener);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java
index 028f528..ad6c85c 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java
@@ -9,7 +9,6 @@
  *     IBM Corporation - Initial API and implementation
  **********************************************************************/
 package org.eclipse.wst.server.core;
-
 /**
  * An event fired when a server change or module changes.
  * 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
index 7e503a4..2e3822d 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
@@ -19,12 +19,7 @@
 import org.eclipse.debug.core.ILaunchConfiguration;
 
 import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.server.core.internal.IModuleVisitor;
-import org.eclipse.wst.server.core.internal.Messages;
-import org.eclipse.wst.server.core.internal.ModuleFactory;
-import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.core.internal.ServerPlugin;
-import org.eclipse.wst.server.core.internal.Trace;
+import org.eclipse.wst.server.core.internal.*;
 /**
  * Server utility methods. These static methods can be used to perform
  * common operations on server artifacts.
@@ -45,23 +40,19 @@
 	 * @param project a project
 	 * @return a possibly empty array of modules
 	 */
-	public static IModule[] getModules(IProject project) {
+	public static IModule getModule(IProject project) {
 		if (project == null)
-			return null;
+			throw new IllegalArgumentException();
 
-		List list = new ArrayList();
 		IModule[] modules = getModules();
 		if (modules != null) {
 			int size = modules.length;
 			for (int i = 0; i < size; i++) {
 				if (modules[i] != null && project.equals(modules[i].getProject()))
-					list.add(modules[i]);
+					return modules[i];
 			}
 		}
-		
-		IModule[] modules2 = new IModule[list.size()];
-		list.toArray(modules2);
-		return modules2;
+		return null;
 	}
 
 	/**
@@ -138,7 +129,8 @@
 					if (modules != null) {
 						int size2 = modules.length;
 						for (int j = 0; j < size2; j++)
-							list.add(modules[j]);
+							if(type.equals(modules[j].getModuleType().getId()))
+								list.add(modules[j]);
 					}
 				}
 			}
@@ -278,7 +270,7 @@
 	 * @param remove an array of modules to remove, or <code>null</code> to not remove any
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
-	 * @throws CoreException
+	 * @throws CoreException if anything goes wrong
 	 */
 	public static void modifyModules(IServerWorkingCopy server, IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException {
 		if (server == null)
@@ -418,7 +410,7 @@
 	 * @param type a server type
 	 * @return an unused file within the given project
 	 */
-	public static IFile getUnusedServerFile(IProject project, IServerType type) {
+	/*public static IFile getUnusedServerFile(IProject project, IServerType type) {
 		if (project == null || type == null)
 			throw new IllegalArgumentException();
 		
@@ -430,6 +422,27 @@
 			i++;
 		}
 		return project.getFile(name);
+	}*/
+
+	/**
+	 * Returns an unused file in the given project.
+	 * 
+	 * @param project a project
+	 * @param server a server
+	 * @return an unused file within the given project
+	 */
+	public static IFile getUnusedServerFile(IProject project, IServer server) {
+		if (project == null || server == null)
+			throw new IllegalArgumentException();
+		
+		String typeName = getValidFileName(server.getName());
+		String name = NLS.bind(Messages.defaultServerName3, typeName)+ "."  + Server.FILE_EXTENSION;
+		int i = 2;
+		while (isFileNameInUse(project, name)) {
+			name = NLS.bind(Messages.defaultServerName4, new String[] {typeName, i + ""}) + "."  + Server.FILE_EXTENSION;
+			i++;
+		}
+		return project.getFile(name);
 	}
 
 	/**
@@ -722,4 +735,26 @@
 	public static IStatus validateEdit(Object context, IServer server) {
 		return ((Server)server).validateEdit(context);
 	}
+
+	/**
+	 * Returns the port that is being used to monitor the given port on the server.
+	 * This method can be used whenever creating a 'client' for the server, and allows
+	 * the client to seamlessly use a monitored port instead of going directly to the
+	 * server.
+	 * 
+	 * <b>Provisional API:</b> This class/interface is part of an interim API that is still under development and expected to 
+	 * change significantly before reaching stability. It is being made available at this early stage to solicit feedback 
+	 * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken 
+	 * (repeatedly) as the API evolves.
+	 * </p>
+	 * 
+	 * @param server a server
+	 * @param port a port on the server
+	 * @param contentType the content type, e.g. "web"
+	 * @return the monitored port, or the original port number if the port is not
+	 *    currently being monitored
+	 */
+	public static int getMonitoredPort(IServer server, int port, String contentType) {
+		return ServerMonitorManager.getInstance().getMonitoredPort(server, port, contentType);
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java
new file mode 100644
index 0000000..88ed145
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java
@@ -0,0 +1,93 @@
+/**********************************************************************
+ * 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.wst.server.core.internal;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.jobs.IJobChangeEvent;
+import org.eclipse.core.runtime.jobs.IJobChangeListener;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.wst.server.core.IServer;
+/**
+ * A Job that can start another job upon successful completion.
+ */
+public abstract class ChainedJob extends Job {
+	private IServer server;
+	private Job nextJob;
+	private IJobChangeListener listener;
+
+	/**
+	 * Create a new dependant job.
+	 * 
+	 * @param name the name of the job
+	 * @param server the server to publish to
+	 */
+	public ChainedJob(String name, IServer server) {
+		super(name);
+		this.server = server;
+	}
+
+	/**
+	 * Returns the server that this job was created with.
+	 * 
+	 * @return a server
+	 */
+	public IServer getServer() {
+		return server;
+	}
+
+	/**
+	 * Create a listener for when this job finishes.
+	 */
+	protected void createListener() {
+		if (listener != null)
+			return;
+		
+		listener = new JobChangeAdapter() {
+			public void done(IJobChangeEvent event) {
+				jobDone(event.getResult());
+			}
+		};
+		
+		addJobChangeListener(listener);
+	}
+
+	/**
+	 * Called when this job is complete.
+	 * 
+	 * @param status the result of the current job
+	 */
+	protected void jobDone(IStatus status) {
+		if (listener == null)
+			return;
+		
+		removeJobChangeListener(listener);
+		listener = null;
+		
+		if (nextJob != null && status != null && status.getSeverity() != IStatus.ERROR
+				&& status.getSeverity() != IStatus.CANCEL)
+			nextJob.schedule();
+	}
+
+	/**
+	 * Set the next job, which should be scheduled if and only if this job completes
+	 * successfully. The next job will be run as long as the result of this job is
+	 * not an ERROR or CANCEL status.
+	 * This method is not thread-safe. However, the next job can be changed anytime
+	 * up until the current job completes.
+	 * 
+	 * @param job the next job that should be scheduled
+	 */
+	public void setNextJob(Job job) {
+		nextJob = job;
+		createListener();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java
index fc2b9fa..a648f73 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java
@@ -18,7 +18,6 @@
 import org.eclipse.wst.server.core.model.ClientDelegate;
 /**
  * 
- * @since 1.0
  */
 public class Client implements IClient {
 	private IConfigurationElement element;
@@ -42,6 +41,19 @@
 	}
 
 	/**
+	 * Returns the relative priority of this adapter.
+	 *
+	 * @return a priority
+	 */
+	public int getPriority() {
+		try {
+			return Integer.parseInt(element.getAttribute("priority"));
+		} catch (Exception e) {
+			return 0;
+		}
+	}
+
+	/**
 	 * @see IClient#getDescription()
 	 */
 	public String getDescription() {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/DeletedModule.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/DeletedModule.java
index 41fbeda..b0e2325 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/DeletedModule.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/DeletedModule.java
@@ -17,15 +17,16 @@
 import org.eclipse.wst.server.core.IModuleType;
 /**
  * 
- * @since 1.0
  */
 public class DeletedModule implements IModule {
 	protected String id;
-	
-	public DeletedModule(String id) {
+	protected String name;
+
+	public DeletedModule(String id, String name) {
 		this.id = id;
+		this.name = name;
 	}
-	
+
 	public String getId() {
 		return id;
 	}
@@ -35,7 +36,7 @@
 	}
 
 	public String getName() {
-		return null;
+		return name;
 	}
 
 	public IModuleType getModuleType() {
@@ -61,11 +62,11 @@
 	public Object getAdapter(Class adapter) {
 		return null;
 	}
-	
+
 	public Object loadAdapter(Class adapter, IProgressMonitor monitor) {
 		return null;
 	}
-	
+
 	public boolean equals(Object obj) {
 		if (!(obj instanceof IModule))
 			return false;
@@ -76,8 +77,8 @@
 			
 		return true;
 	}
-	
+
 	public String toString() {
-		return "Deleted module (" + getId() + ")";
+		return "DeletedModule[" + name + "," + id + "]";
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IClient.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IClient.java
index a2f1369..2f9828a 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IClient.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IClient.java
@@ -19,8 +19,6 @@
  * running on a server.
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface IClient {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IInstallableRuntime.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IInstallableRuntime.java
new file mode 100644
index 0000000..a71ce23
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IInstallableRuntime.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * 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.wst.server.core.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+/**
+ * Represents an installable runtime.
+ * <p>
+ * This interface is not intended to be implemented by clients.
+ * </p>
+ */
+public interface IInstallableRuntime {
+	/**
+	 * Returns the id of this runtime type.
+	 * Each known server runtime type has a distinct id. 
+	 * Ids are intended to be used internally as keys; they are not
+	 * intended to be shown to end users.
+	 * 
+	 * @return the runtime type id
+	 */
+	public String getId();
+
+	/**
+	 * Install this runtime.
+	 * 
+	 * @param path the path to install the runtime at
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired 
+	 * @throws CoreException if an exception occurs while creating this runtime
+	 *    or setting it's default values
+	 */
+	public void install(IPath path, IProgressMonitor monitor) throws CoreException;
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IInstallableServer.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IInstallableServer.java
new file mode 100644
index 0000000..5180a29
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IInstallableServer.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * 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.wst.server.core.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+/**
+ * Represents an installable server adapter.
+ * <p>
+ * This interface is not intended to be implemented by clients.
+ * </p>
+ */
+public interface IInstallableServer {
+	/**
+	 * Returns the id of this runtime type.
+	 * Each known server runtime type has a distinct id. 
+	 * Ids are intended to be used internally as keys; they are not
+	 * intended to be shown to end users.
+	 * 
+	 * @return the runtime type id
+	 */
+	public String getId();
+
+	/**
+	 * Returns the displayable name for this runtime type.
+	 * <p>
+	 * Note that this name is appropriate for the current locale.
+	 * </p>
+	 *
+	 * @return a displayable name for this runtime type
+	 */
+	public String getName();
+
+	/**
+	 * Returns the displayable description for this runtime type.
+	 * <p>
+	 * Note that this description is appropriate for the current locale.
+	 * </p>
+	 *
+	 * @return a displayable description for this runtime type
+	 */
+	public String getDescription();
+
+	/**
+	 * Returns the displayable vendor name for this runtime type. If the
+	 * runtime type did not specific a vendor, an empty string is returned.
+	 * <p>
+	 * Note that this description is appropriate for the current locale.
+	 * </p>
+	 *
+	 * @return a displayable vendor name for this runtime type
+	 */
+	public String getVendor();
+
+	/**
+	 * Returns the displayable version name for this runtime type. If the
+	 * runtime type did not specific a vendor, an empty string is returned.
+	 * <p>
+	 * Note that this description is appropriate for the current locale.
+	 * </p>
+	 *
+	 * @return a displayable version name for this runtime type
+	 */
+	public String getVersion();
+
+	/**
+	 * Install this server.
+	 * 
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired 
+	 * @throws CoreException if an exception occurs while creating this runtime
+	 *    or setting it's default values
+	 */
+	public void install(IProgressMonitor monitor) throws CoreException;
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ILaunchableAdapter.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ILaunchableAdapter.java
index 596e365..0d0e92d 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ILaunchableAdapter.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ILaunchableAdapter.java
@@ -19,8 +19,6 @@
  * ILaunchable.
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface ILaunchableAdapter {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleFactoryListener.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleFactoryListener.java
deleted file mode 100644
index 15696fd..0000000
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleFactoryListener.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.core.internal;
-/**
- * 
- * 
- * @since 1.0
- */
-public interface IModuleFactoryListener {
-	/**
-	 * Fired when modules have been added or removed from this factory.
-	 *
-	 * @param event org.eclipse.wst.server.core.model.ModuleFactoryEvent
-	 */
-	public void moduleFactoryChanged(ModuleFactoryEvent event);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleListener.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleListener.java
index 46f8ab6..ad03292 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleListener.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleListener.java
@@ -9,11 +9,8 @@
  *     IBM Corporation - Initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.server.core.internal;
-
-
 /**
  * 
- * @since 1.0
  */
 public interface IModuleListener {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleResourceDeltaVisitor.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleResourceDeltaVisitor.java
index 2861a28..45e7325 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleResourceDeltaVisitor.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleResourceDeltaVisitor.java
@@ -42,8 +42,6 @@
  * </p>
  *
  * [issue: @see IModuleResourceDelta#accept(IModuleResourceVisitor)]
- * 
- * @since 1.0
  */
 public interface IModuleResourceDeltaVisitor {
 	/** 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleVisitor.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleVisitor.java
index 27af6e8..00e362b 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleVisitor.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IModuleVisitor.java
@@ -13,8 +13,6 @@
 import org.eclipse.wst.server.core.IModule;
 /**
  * A visitor on a server's modules.
- * 
- * @since 1.0
  */
 public interface IModuleVisitor {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IMonitoredServerPort.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IMonitoredServerPort.java
index c5ce923..69ae23b 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IMonitoredServerPort.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IMonitoredServerPort.java
@@ -17,8 +17,6 @@
  * An monitored port on a server.
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface IMonitoredServerPort {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IOrdered.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IOrdered.java
index b4639d5..e0f3007 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IOrdered.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IOrdered.java
@@ -22,8 +22,6 @@
  * </p>
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface IOrdered {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IProjectPropertiesListener.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IProjectPropertiesListener.java
deleted file mode 100644
index e32cca5..0000000
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IProjectPropertiesListener.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.core.internal;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.IServer;
-/**
- * A project properties listener. Fires events when the default server or
- * runtime target changes.
- * <p>
- * This interface should be used for informational purposes only. If (e.g.)
- * you have code that needs to respond to a specific runtime target, you should
- * use the runtimeTargetHandler extension point. The extension point will allow
- * your code to be automatically loaded when necessary (instead of having to
- * preload and add a listener), will not cause unnecessary plugin loading, and
- * will allow ordering of setting/unsetting the runtime target.
- * </p>
- * 
- * @see org.eclipse.wst.server.core.IProjectProperties
- * @since 1.0
- */
-public interface IProjectPropertiesListener {
-	/**
-	 * Fired when the default server for the project changes.
-	 *
-	 * @param project the project that has changed
-	 * @param server the new default server, or <code>null</code> if the default
-	 *    server has been removed
-	 */
-	public void defaultServerChanged(IProject project, IServer server);
-
-	/**
-	 * Fired when the runtime target for the project changes.
-	 *
-	 * @param project the project that has changed
-	 * @param runtime the new runtime target, or <code>null</code> if the runtime
-	 *    target has been removed
-	 */
-	public void runtimeTargetChanged(IProject project, IRuntime runtime);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishTask.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishTask.java
index 2517385..50915e3 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishTask.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IPublishTask.java
@@ -11,14 +11,12 @@
 package org.eclipse.wst.server.core.internal;
 
 import java.util.List;
-import org.eclipse.wst.server.core.IOptionalTask;
 import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.PublishOperation;
 /**
  * A task for a server.
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface IPublishTask {
 	/**
@@ -46,5 +44,16 @@
 	 * @param modules a list containing IModule arrays
 	 * @return a possibly empty array of optional tasks 
 	 */
-	public IOptionalTask[] getTasks(IServer server, List modules);
+	public PublishOperation[] getTasks(IServer server, List modules);
+
+	/**
+	 * Returns the tasks that should be performed during publishing.
+	 * 
+	 * @param server the server
+	 * @param modules a list containing IModule arrays
+	 * @param kind one of the IServer.PUBLISH_XX constants
+	 * @param kindList one of the IServer publish change constants
+	 * @return the tasks that should be performed on the server
+	 */
+	public PublishOperation[] getTasks(IServer server, int kind, List modules, List kindList);
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IRuntimeLocator.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IRuntimeLocator.java
index 2f603d3..d5bf9ec 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IRuntimeLocator.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IRuntimeLocator.java
@@ -22,8 +22,6 @@
  * </p>
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface IRuntimeLocator {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerLocator.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerLocator.java
index 2cedaba..242cafb 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerLocator.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerLocator.java
@@ -21,8 +21,6 @@
  * </p>
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface IServerLocator {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerMonitor.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerMonitor.java
index 525bc7c..780d186 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerMonitor.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerMonitor.java
@@ -13,8 +13,6 @@
  * An interface to a TCP/IP monitor.
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface IServerMonitor {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerMonitorManager.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerMonitorManager.java
index 99973ec..7d1faf7 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerMonitorManager.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IServerMonitorManager.java
@@ -16,8 +16,6 @@
 /**
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface IServerMonitorManager {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IStartup.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IStartup.java
index 43e2312..f8df326 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IStartup.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/IStartup.java
@@ -14,8 +14,6 @@
  * Plug-ins that register a startup extension will be activated when the server
  * core plug-in initializes and have an opportunity to run code that can't be
  * implemented using the normal contribution mechanisms.
- * 
- * @since 1.0
  */
 public interface IStartup {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java
new file mode 100644
index 0000000..2c18430
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * 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.wst.server.core.internal;
+
+import java.io.BufferedInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.update.standalone.InstallCommand;
+import org.osgi.framework.Bundle;
+/**
+ * 
+ */
+public class InstallableRuntime implements IInstallableRuntime {
+	private IConfigurationElement element;
+
+	public InstallableRuntime(IConfigurationElement element) {
+		super();
+		this.element = element;
+	}
+
+	/**
+	 * 
+	 * @return the id
+	 */
+	public String getId() {
+		try {
+			return element.getAttribute("id");
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	public String getFeatureVersion() {
+		try {
+			return element.getAttribute("featureVersion");
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
+	public String getFeatureId() {
+		try {
+			return element.getAttribute("featureId");
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
+	public String getBundleId() {
+		try {
+			return element.getAttribute("bundleId");
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
+	public String getPath() {
+		try {
+			return element.getAttribute("path");
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
+	public String getFromSite() {
+		try {
+			return element.getAttribute("featureSite");
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
+	/*
+	 * @see IInstallableServer#install(IProgressMonitor)
+	 */
+	public void install(IPath path, IProgressMonitor monitor) throws CoreException {
+		String featureId = getFeatureId();
+		String featureVersion = getFeatureVersion();
+		String fromSite = getFromSite();
+		
+		if (featureId == null || featureVersion == null || fromSite == null)
+			return;
+		
+		// download and install plugins
+		Bundle bundle = Platform.getBundle(getBundleId());
+		if (bundle == null) {
+			try {
+				monitor.setTaskName("Installing feature");
+				InstallCommand command = new InstallCommand(featureId, featureVersion, fromSite, null, "false");
+				command.run(monitor);
+				command.applyChangesNow();
+			} catch (Exception e) {
+				Trace.trace(Trace.SEVERE, "Error installing feature", e);
+				return;
+			}
+		}
+		
+		// unzip from bundle into path
+		try {
+			byte[] buf = new byte[8192];
+			bundle = Platform.getBundle(getBundleId());
+			URL url = bundle.getEntry(getPath());
+			url = Platform.resolve(url);
+			InputStream in = url.openStream();
+			BufferedInputStream bin = new BufferedInputStream(in);
+			ZipInputStream zin = new ZipInputStream(bin);
+			ZipEntry entry = zin.getNextEntry();
+			while (entry != null) {
+				String name = entry.getName();
+				monitor.setTaskName("Unzipping: " + name);
+				
+				if (entry.isDirectory()) {
+					path.append(name).toFile().mkdirs();
+				} else {
+					FileOutputStream fout = new FileOutputStream(path.append(name).toFile());
+					int r = zin.read(buf);
+					while (r >= 0) {
+						fout.write(buf, 0, r);
+						r = zin.read(buf);
+					}
+				}
+				zin.closeEntry();
+				entry = zin.getNextEntry();
+			}
+			zin.close();
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error installing feature", e);
+		} 
+	}
+
+	public String toString() {
+		return "InstallableRuntime[" + getId() + "]";
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableServer.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableServer.java
new file mode 100644
index 0000000..69f2b47
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableServer.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * 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.wst.server.core.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.update.standalone.InstallCommand;
+/**
+ * 
+ */
+public class InstallableServer implements IInstallableServer {
+	private IConfigurationElement element;
+
+	public InstallableServer(IConfigurationElement element) {
+		super();
+		this.element = element;
+	}
+
+	/**
+	 * 
+	 * @return the id
+	 */
+	public String getId() {
+		try {
+			return element.getAttribute("id");
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	/**
+	 * 
+	 * @return the name
+	 */
+	public String getName() {
+		try {
+			return element.getAttribute("name");
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	/**
+	 * 
+	 * @return the description
+	 */
+	public String getDescription() {
+		try {
+			return element.getAttribute("description");
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	public String getVendor() {
+		try {
+			String vendor = element.getAttribute("vendor");
+			if (vendor != null)
+				return vendor;
+		} catch (Exception e) {
+			// ignore
+		}
+		return Messages.defaultVendor;
+	}
+
+	public String getVersion() {
+		try {
+			String version = element.getAttribute("version");
+			if (version != null)
+				return version;
+		} catch (Exception e) {
+			// ignore
+		}
+		return Messages.defaultVersion;
+	}
+
+	public String getFeatureVersion() {
+		try {
+			return element.getAttribute("featureVersion");
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
+	public String getFeatureId() {
+		try {
+			return element.getAttribute("featureId");
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
+	public String getFromSite() {
+		try {
+			return element.getAttribute("featureSite");
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
+	/*
+	 * @see IInstallableServer#install(IProgressMonitor)
+	 */
+	public void install(IProgressMonitor monitor) throws CoreException {
+		String featureId = getFeatureId();
+		String featureVersion = getFeatureVersion();
+		String fromSite = getFromSite();
+		
+		if (featureId == null || featureVersion == null || fromSite == null)
+			return;
+		
+		try {
+			InstallCommand command = new InstallCommand(featureId, featureVersion, fromSite, null, "false");
+			command.run(monitor);
+			command.applyChangesNow();
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error installing feature", e);
+		}
+	}
+
+	public String toString() {
+		return "InstallableServer[" + getId() + ", " + getName() + "]";
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Messages.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Messages.java
index a3d604e..7329ec2 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Messages.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Messages.java
@@ -20,6 +20,7 @@
 	public static String errorDuplicateRuntimeName;
 	public static String errorSaving;
 	public static String errorLoading;
+	public static String errorCannotAddModule;
 	public static String defaultVendor;
 	public static String defaultVersion;
 	public static String savingTask;
@@ -34,13 +35,15 @@
 	public static String defaultServerName4;
 	public static String taskModifyModules;
 	public static String errorWorkingCopyTimestamp;
-	
 	public static String errorPublishStarting;
+	public static String errorPublishNoRuntime;
 	public static String errorPublishNoConfiguration;
 	public static String errorNoConfiguration;
 	public static String canPublishOk;
-	public static String publishingStatus;
-	public static String publishingCancelled;
+	public static String publishingStatusOk;
+	public static String publishingStatusInfo;
+	public static String publishingStatusWarning;
+	public static String publishingStatusError;
 	public static String errorPublishing;
 	public static String publishingStop;
 	public static String publishingModule;
@@ -58,6 +61,9 @@
 	public static String errorStopAlreadyStopped;
 	public static String canStopOk;
 	public static String moduleTypeUnknown;
+	public static String jobStartingServer;
+	public static String jobRestartingServer;
+	public static String jobUpdateServer;
 	
 	static {
 		NLS.initializeMessages(ServerPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Messages.properties b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Messages.properties
index 56dcaa5..90cd03a 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Messages.properties
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Messages.properties
@@ -10,24 +10,25 @@
 ###############################################################################
 
 # --------------- Tasks (progress monitors) ---------------
-copyingTask=Copying from {0} to {1}
-unZippingTask=Unzipping {0}
-expandingTask=Expanding {0}
 savingTask=Saving {0}
 deletingTask=Deleting {0}
-copyingTask=File copied successfully to {0}
 
 taskPerforming=Performing Tasks
 taskModifyModules=Adding and/or removing projects.
 
 publishing=Publishing to {0}...
-publishingStatus=Publishing results
+publishingStatusOk=Publishing finished successfully
+publishingStatusInfo=Publishing completed with information
+publishingStatusWarning=Publishing completed with a warning
+publishingStatusError=Publishing failed
 publishingStop=Disconnecting from server
 
 publishingModule=Publishing: {0}
 publishedModule={0} published successfully
 
-publishingCancelled=Publishing cancelled
+jobStartingServer=Starting server - {0}
+jobRestartingServer=Restarting server - {0}
+jobUpdateServer=Updating status for {0}...
 
 # --------------- Misc UI ---------------
 
@@ -36,13 +37,13 @@
 errorNoConfiguration=The server has no configuration.
 errorLoading=Error loading from {0}.
 errorSaving=Could not save to {0}.
-errorCopyingFile=Error copying file to {0}: {1}
 errorModuleRestartFailed=Could not restart the module.
 errorWorkingCopyTimestamp=Could not save because the file has been modified since the start of editting.
 errorRuntimeName=Enter a name for the runtime.
 errorDuplicateRuntimeName=Name is already in use.
 errorStartTimeout=Timeout waiting for {0} to start. Server did not start after {1}s. 
 errorStartFailed=Server {0} failed to start.
+errorCannotAddModule=The server does not support version {1} of the {0} specification.
 
 # Default server creation names
 # {0} will be replaced by a number if the given name is already being used
@@ -59,12 +60,8 @@
 defaultVersion=Basic
 moduleTypeUnknown=Unknown module
 
-# null launchable
-nullLaunchableClient=Do nothing
-nullLaunchableClientDescription=Do not launch anything after starting the server.
-
 canStartOk=The server can be started.
-canStopOk=The server can be started.
+canStopOk=The server can be stopped.
 canRestartOk=The server can be restarted.
 canPublishOk=The server can be published to.
 canRestartModuleOk=The module can be restarted.
@@ -72,6 +69,7 @@
 errorLaunchMode=The server does not support the given launch mode.
 errorRestartNotStarted=Cannot restart the server because it is not currently running.
 errorPublishStarting=Cannot publish to the server because it is currently starting or stopping.
+errorPublishNoRuntime=Cannot publish to the server because it is missing its runtime.
 errorPublishNoConfiguration=Cannot publish to the server because the configuration is missing.
 errorStopAlreadyStopped=The server cannot be stopped because it is already stopped.
-errorRestartModule=The module cannot be restarted.
\ No newline at end of file
+errorRestartModule=The module cannot be restarted.
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Module.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Module.java
index b90393b..8ea482b 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Module.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Module.java
@@ -10,12 +10,10 @@
  *******************************************************************************/
 package org.eclipse.wst.server.core.internal;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.model.ModuleDelegate;
 /**
@@ -30,9 +28,6 @@
 	protected IProject project;
 	protected ModuleDelegate delegate;
 
-	// change listeners
-	private transient List listeners;
-
 	/**
 	 * Module constructor.
 	 * 
@@ -98,12 +93,19 @@
 	}
 
 	protected ModuleDelegate getDelegate(IProgressMonitor monitor) {
-		if (delegate == null) {
-			try {
-				delegate = factory.getDelegate().getModuleDelegate(this);
-				delegate.initialize(this);
-			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create delegate" + toString() + ": " + t.getMessage());
+		if (delegate != null)
+			return delegate;
+		
+		synchronized (this) {
+			if (delegate == null) {
+				try {
+					long time = System.currentTimeMillis();
+					delegate = factory.getDelegate(monitor).getModuleDelegate(this);
+					delegate.initialize(this);
+					Trace.trace(Trace.PERFORMANCE, "Module.getDelegate(): <" + (System.currentTimeMillis() - time) + " " + factory.getId());
+				} catch (Throwable t) {
+					Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), t);
+				}
 			}
 		}
 		return delegate;
@@ -177,72 +179,14 @@
 	}
 
 	/**
-	 * Add a listener for child modules that are added/removed from this
-	 * module.
-	 * Has no effect if an identical listener is already registered.
-	 * 
-	 * @param listener a module listener
-	 */
-	public void addModuleListener(IModuleListener listener) {
-		Trace.trace(Trace.FINEST, "Adding module listener " + listener + " to " + this);
-	
-		if (listeners == null)
-			listeners = new ArrayList();
-		else if (listeners.contains(listener))
-			return;
-		listeners.add(listener);
-	}
-
-	/**
-	 * Remove a listener for child modules that are added/removed from this
-	 * module.
-	 * Has no effect if the listener is not registered.
-	 * 
-	 * @param listener a module listener
-	 */
-	public void removeModuleListener(IModuleListener listener) {
-		Trace.trace(Trace.FINEST, "Removing module listener " + listener + " from " + this);
-	
-		if (listeners != null)
-			listeners.remove(listener);
-	}
-
-	/**
-	 * Fire a module change event.
-	 */
-	protected void fireModuleChangeEvent(boolean isChange, IModule[] added, IModule[] changed, IModule[] removed) {
-		Trace.trace(Trace.FINEST, "->- Firing module change event: " + getName() + " (" + isChange + ") ->-");
-	
-		if (listeners == null || listeners.isEmpty())
-			return;
-	
-		int size = listeners.size();
-		IModuleListener[] dcl = new IModuleListener[size];
-		listeners.toArray(dcl);
-		
-		ModuleEvent event = new ModuleEvent(this, isChange, added, changed, removed);
-	
-		for (int i = 0; i < size; i++) {
-			try {
-				Trace.trace(Trace.FINEST, "  Firing module change event to: " + dcl[i]);
-				dcl[i].moduleChanged(event);
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "  Error firing module change event", e);
-			}
-		}
-		Trace.trace(Trace.FINEST, "-<- Done firing module change event -<-");
-	}
-
-	/**
 	 * @see IModule#getAdapter(Class)
 	 */
 	public Object getAdapter(Class adapter) {
-		//if (delegate != null) {
-		getDelegate(null);
-		if (adapter.isInstance(delegate))
-			return delegate;
-		//}
-		return null;
+		if (delegate != null) {
+			if (adapter.isInstance(delegate))
+				return delegate;
+		}
+		return Platform.getAdapterManager().getAdapter(this, adapter);
 	}
 
 	/**
@@ -252,7 +196,7 @@
 		getDelegate(monitor);
 		if (adapter.isInstance(delegate))
 			return delegate;
-		return null;
+		return Platform.getAdapterManager().loadAdapter(this, adapter.getName());
 	}
 
 	public boolean equals(Object obj) {
@@ -270,12 +214,16 @@
 		return true;
 	}
 
+	public int hashCode() {
+		return getId().hashCode();
+	}
+
 	/**
 	 * Return a string representation of this object.
 	 * 
 	 * @return java.lang.String
 	 */
 	public String toString() {
-		return "Module[" + getId() + "]";
+		return "Module[" + name + "," + getId() + "]";
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleEvent.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleEvent.java
index ee9b5f9..3a0e869 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleEvent.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleEvent.java
@@ -14,8 +14,6 @@
 import org.eclipse.wst.server.core.IModule;
 /**
  * An event fired when a module changes.
- * 
- * @since 1.0
  */
 public class ModuleEvent {
 	private IModule module;
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
index 796ba66..6bc1212 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
@@ -14,22 +14,21 @@
 import java.util.List;
 
 import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
 
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IModuleType;
+import org.eclipse.wst.server.core.model.InternalInitializer;
 import org.eclipse.wst.server.core.model.ModuleFactoryDelegate;
 /**
  * 
  */
 public class ModuleFactory implements IOrdered {
 	private IConfigurationElement element;
-	private ModuleFactoryDelegate delegate;
+	public ModuleFactoryDelegate delegate;
 	private List moduleTypes;
 	
 	private List modules;
-	
-	// module factory listeners
-	private transient List listeners;
 
 	/**
 	 * ModuleFactory constructor comment.
@@ -89,11 +88,12 @@
 	/*
 	 * @see IModuleFactoryDelegate#getDelegate()
 	 */
-	public ModuleFactoryDelegate getDelegate() {
+	public ModuleFactoryDelegate getDelegate(IProgressMonitor monitor) {
 		if (delegate == null) {
 			try {
 				delegate = (ModuleFactoryDelegate) element.createExecutableExtension("class");
-				delegate.initialize(this);
+				//delegate.initialize(this);
+				InternalInitializer.initializeModuleFactoryDelegate(delegate, this, monitor);
 				//ResourceManager.getInstance().addModuleFactoryListener(delegate);
 			} catch (Throwable t) {
 				Trace.trace(Trace.SEVERE, "Could not create delegate " + toString() + ": " + t.getMessage());
@@ -117,105 +117,39 @@
 		}
 		return null;
 	}
-	
+
+	public void clearModuleCache() {
+		modules = null;
+	}
+
 	/*
 	 * @see
 	 */
 	public IModule[] getModules() {
-		modules = null;
+		//Trace.trace(Trace.FINER, "getModules() > " + this);
 		if (modules == null) {
 			try {
 				modules = new ArrayList();
-				IModule[] modules2 = getDelegate().getModules();
+				IModule[] modules2 = getDelegate(null).getModules();
 				if (modules2 != null) {
 					int size = modules2.length;
 					for (int i = 0; i < size; i++)
 						modules.add(modules2[i]);
 				}
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + t.getMessage());
 				return null;
 			}
 		}
 		
+		//Trace.trace(Trace.FINER, "getModules() < " + this);
+		
 		IModule[] m = new IModule[modules.size()];
 		modules.toArray(m);
 		return m;
 	}
 	
 	/**
-	 * Adds the given listener to this module factory.
-	 * Once registered, a listener starts receiving notification of 
-	 * modules are added/removed. The listener continues to receive
-	 * notifications until it is removed.
-	 * Has no effect if an identical listener is already registered.
-	 * <p>
-	 * This method is normally called by the web server core framework.
-	 * Clients (other than the delegate) should never call this method.
-	 * </p>
-	 *
-	 * @param listener the module factory listener to add
-	 * @see #removeModuleFactoryListener(IModuleFactoryListener)
-	 */
-	public void addModuleFactoryListener(IModuleFactoryListener listener) {
-		Trace.trace(Trace.FINEST, "Adding module factory listener " + listener + " to " + this);
-		
-		if (listeners == null)
-			listeners = new ArrayList();
-		else if (listeners.contains(listener))
-			return;
-		listeners.add(listener);
-	}
-	
-	/**
-	 * Removes the given listener from this module factory.
-	 * Has no effect if the listener is not registered.
-	 * <p>
-	 * This method is normally called by the web server core framework.
-	 * Clients (other than the delegate) should never call this method.
-	 * </p>
-	 *
-	 * @param listener the module factory listener to remove
-	 * @see #addModuleFactoryListener(IModuleFactoryListener)
-	 */
-	public void removeModuleFactoryListener(IModuleFactoryListener listener) {
-		Trace.trace(Trace.FINEST, "Removing module factory listener " + listener + " from " + this);
-		
-		if (listeners != null)
-			listeners.remove(listener);
-	}
-	
-	/**
-	 * Fire a module factory event. This method is used by the factory delegate to
-	 * fire events about module changes.
-	 * 
-	 * @param added a non-null array of modules that have been added
-	 * @param removed a non-null array of modules that have been removed
-	 */
-	public void fireModuleFactoryEvent(IModule[] added, IModule[] removed) {
-		Trace.trace(Trace.FINEST, "->- Firing module factory event: " + toString() + " ->-");
-
-		if (listeners == null || listeners.isEmpty())
-			return;
-
-		int size = listeners.size();
-		IModuleFactoryListener[] dfl = new IModuleFactoryListener[size];
-		listeners.toArray(dfl);
-		
-		ModuleFactoryEvent event = new ModuleFactoryEvent(added, removed);
-		
-		for (int i = 0; i < size; i++) {
-			try {
-				Trace.trace(Trace.FINEST, "  Firing module factory event to: " + dfl[i]);
-				dfl[i].moduleFactoryChanged(event);
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "  Error firing module factory event", e);
-			}
-		}
-		Trace.trace(Trace.FINEST, "-<- Done firing module factory event -<-");
-	}
-	
-	/**
 	 * Return a string representation of this object.
 	 * 
 	 * @return java.lang.String
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactoryEvent.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactoryEvent.java
index acdedf8..2aaf577 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactoryEvent.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactoryEvent.java
@@ -13,8 +13,6 @@
 import org.eclipse.wst.server.core.IModule;
 /**
  * An event fired when a module factory changes.
- * 
- * @since 1.0
  */
 public class ModuleFactoryEvent {
 	protected IModule[] added;
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFile.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFile.java
index 5350304..bcf6b84 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFile.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFile.java
@@ -10,18 +10,20 @@
  **********************************************************************/
 package org.eclipse.wst.server.core.internal;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.wst.server.core.model.IModuleFile;
 /**
  * 
- * @since 1.0
  */
 public class ModuleFile implements IModuleFile {
+	protected IFile file;
 	protected String name;
 	protected IPath path;
 	protected long stamp;
 	
-	public ModuleFile(String name, IPath path, long stamp) {
+	public ModuleFile(IFile file, String name, IPath path, long stamp) {
+		this.file = file;
 		this.name = name;
 		this.path = path;
 		this.stamp = stamp;
@@ -60,6 +62,12 @@
 		return true;
 	}
 	
+	public Object getAdapter(Class cl) {
+		if (IFile.class.equals(cl))
+			return file;
+		return null;
+	}
+
 	public String toString() {
 		return "ModuleFile [" + name + ", " + path + ", " + stamp + "]";
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFolder.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFolder.java
index ef97302..aa6e703 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFolder.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFolder.java
@@ -10,19 +10,22 @@
  **********************************************************************/
 package org.eclipse.wst.server.core.internal;
 
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.wst.server.core.model.IModuleFolder;
 import org.eclipse.wst.server.core.model.IModuleResource;
 /**
  * 
- * @since 1.0
  */
 public class ModuleFolder implements IModuleFolder {
+	protected IContainer container;
 	protected String name;
 	protected IPath path;
 	protected IModuleResource[] members;
 	
-	public ModuleFolder(String name, IPath path) {
+	public ModuleFolder(IContainer container, String name, IPath path) {
+		this.container = container;
 		this.name = name;
 		this.path = path;
 	}
@@ -64,6 +67,12 @@
 		return true;
 	}
 
+	public Object getAdapter(Class cl) {
+		if (IContainer.class.equals(cl) || IFolder.class.equals(cl))
+			return container;
+		return null;
+	}
+
 	public String toString() {
 		return "ModuleFolder [" + name + ", " + path + "]";
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java
new file mode 100644
index 0000000..5555635
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * 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.wst.server.core.internal;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.core.runtime.*;
+
+import org.eclipse.wst.server.core.*;
+/**
+ * Helper class that stores preference information for the server tools.
+ */
+public class ModuleProperties {
+	private static final String MODULE_DATA_FILE = "modules.xml";
+
+	protected static ModuleProperties instance;
+	protected Map modules;
+
+	/**
+	 * ModuleProperties constructor.
+	 */
+	protected ModuleProperties() {
+		super();
+		load();
+		instance = this;
+	}
+
+	/**
+	 * Return a static instance.
+	 * 
+	 * @return a static instance
+	 */
+	public static ModuleProperties getInstance() {
+		if (instance == null)
+			new ModuleProperties();
+		return instance;
+	}
+	
+	/**
+	 * Load the data.
+	 */
+	private void load() {
+		Trace.trace(Trace.FINEST, "Loading module info");
+		String filename = ServerPlugin.getInstance().getStateLocation().append(MODULE_DATA_FILE).toOSString();
+		modules = new HashMap();
+		
+		try {
+			IMemento memento = XMLMemento.loadMemento(filename);
+			
+			IMemento[] children = memento.getChildren("module");
+			int size = children.length;
+			
+			for (int i = 0; i < size; i++) {
+				String moduleId = children[i].getString("moduleId");
+				String serverId = children[i].getString("serverId");
+				modules.put(moduleId, serverId);
+			}
+		} catch (Exception e) {
+			Trace.trace(Trace.WARNING, "Could not load servers: " + e.getMessage());
+		}
+	}
+	
+	private void save(IProgressMonitor monitor) throws CoreException {
+		String filename = ServerPlugin.getInstance().getStateLocation().append(MODULE_DATA_FILE).toOSString();
+		
+		try {
+			XMLMemento memento = XMLMemento.createWriteRoot("modules");
+
+			Iterator iterator = modules.keySet().iterator();
+			while (iterator.hasNext()) {
+				String moduleId = (String) iterator.next();
+				String serverId = (String) modules.get(moduleId);
+
+				IMemento child = memento.createChild("module");
+				child.putString("moduleId", moduleId);
+				child.putString("serverId", serverId);
+			}
+
+			memento.saveToFile(filename);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not save servers", e);
+		}
+	}
+
+	/*
+	 * @see ServerCore#getDefaultServer(IModule)
+	 */
+	public IServer getDefaultServer(IModule module) {
+		if (module == null)
+			throw new IllegalArgumentException();
+		
+		String serverId = (String) modules.get(module.getId());
+		if (serverId == null || serverId.length() == 0)
+			return null;
+		
+		return ServerCore.findServer(serverId);
+	}
+
+	/*
+	 * @see ServerCore#setDefaultServer(IModule, IServer, IProgressMonitor)
+	 */
+	public void setDefaultServer(IModule module, IServer server, IProgressMonitor monitor) throws CoreException {
+		if (module == null)
+			throw new IllegalArgumentException();
+		
+		String newServerId = null;
+		if (server != null)
+			newServerId = server.getId();
+		
+		String serverId = (String) modules.get(module.getId());
+		if (serverId == null && newServerId == null)
+			return;
+		if (serverId != null && serverId.equals(newServerId))
+			return;
+		
+		modules.put(module.getId(), newServerId);
+		save(monitor);
+	}
+
+	public String toString() {
+		return "ModuleProperties[]";
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModulePublishInfo.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModulePublishInfo.java
index 0c9fbf1..2a7e720 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModulePublishInfo.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModulePublishInfo.java
@@ -27,19 +27,22 @@
 	private static final String FOLDER = "folder";
 
 	private String moduleId;
+	private String name;
 	private IModuleResource[] resources = new IModuleResource[0];
 
 	/**
 	 * ModulePublishInfo constructor.
 	 * 
 	 * @param moduleId a module id
+	 * @param name the module's name
 	 */
-	public ModulePublishInfo(String moduleId) {
+	public ModulePublishInfo(String moduleId, String name) {
 		super();
 
 		this.moduleId = moduleId;
+		this.name = name;
 	}
-	
+
 	/**
 	 * ModulePublishInfo constructor.
 	 * 
@@ -50,19 +53,23 @@
 		
 		load(memento);
 	}
-	
+
 	public String getModuleId() {
 		return moduleId;
 	}
-	
+
+	public String getName() {
+		return name;
+	}
+
 	public IModuleResource[] getResources() {
 		return resources;
 	}
-	
+
 	public void setResources(IModuleResource[] res) {
 		resources = res;
 	}
-	
+
 	/**
 	 * 
 	 */
@@ -71,13 +78,14 @@
 	
 		try {
 			moduleId = memento.getString(MODULE_ID);
+			name = memento.getString(NAME);
 	
 			resources = loadResource(memento);
 		} catch (Exception e) {
 			Trace.trace(Trace.WARNING, "Could not load module publish info information: " + e.getMessage());
 		}
 	}
-	
+
 	protected IModuleResource[] loadResource(IMemento memento) {
 		if (memento == null)
 			return new IModuleResource[0];
@@ -87,10 +95,10 @@
 		if (children != null) {
 			int size = children.length;
 			for (int i = 0; i < size; i++) {
-				String name = children[i].getString(NAME);
+				String name2 = children[i].getString(NAME);
 				IPath path = new Path(children[i].getString(PATH));
 				long stamp = Long.parseLong(children[i].getString(STAMP));
-				ModuleFile file = new ModuleFile(name, path, stamp);
+				ModuleFile file = new ModuleFile(null, name2, path, stamp);
 				list.add(file);
 			}
 		}
@@ -98,9 +106,9 @@
 		if (children != null) {
 			int size = children.length;
 			for (int i = 0; i < size; i++) {
-				String name = children[i].getString(NAME);
+				String name2 = children[i].getString(NAME);
 				IPath path = new Path(children[i].getString(PATH));
-				ModuleFolder folder = new ModuleFolder(name, path);
+				ModuleFolder folder = new ModuleFolder(null, name2, path);
 				folder.setMembers(loadResource(children[i]));
 				list.add(folder);
 			}
@@ -110,20 +118,22 @@
 		list.toArray(resources2);
 		return resources;
 	}
-	
+
 	/**
 	 * 
 	 */
 	protected void save(IMemento memento) {
 		try {
 			memento.putString(MODULE_ID, moduleId);
+			if (name != null)
+				memento.putString(NAME, name);
 			
 			saveResource(memento, resources);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Could not save module publish info", e);
 		}
 	}
-	
+
 	protected void saveResource(IMemento memento, IModuleResource[] resources2) {
 		if (resources2 == null)
 			return;
@@ -145,7 +155,7 @@
 			}
 		}
 	}
-	
+
 	public String toString() {
 		return "ModulePublishInfo [" + moduleId + "]";
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProgressUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProgressUtil.java
index 761c763..5210d1a 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProgressUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProgressUtil.java
@@ -13,8 +13,6 @@
 import org.eclipse.core.runtime.*;
 /**
  * Progress Monitor utility.
- * 
- * @since 1.0
  */
 public class ProgressUtil {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java
index df91d2a..d8310b4 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java
@@ -10,31 +10,34 @@
  *******************************************************************************/
 package org.eclipse.wst.server.core.internal;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Properties;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-
-import org.eclipse.wst.server.core.*;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.server.core.IRuntime;
 /**
  * Helper class that stores preference information for the server tools.
  * 
  * TODO: Currently this class always reads from disk. It should cache the file
  * and have a resource listener.
  */
-public class ProjectProperties implements IProjectProperties {
-	private static final String PROJECT_PREFERENCE_FILE = ".runtime";
-	
+public class ProjectProperties {
+	private static final String PREFERENCE_FOLDER = ".settings";
+	private static final String PREFERENCE_FILE = "org.eclipse.wst.server.core.prefs";
+	private static final String SERVER_PROJECT_PREF = "org.eclipse.wst.server.core.isServerProject";
+
 	protected IProject project;
-	
-	protected String serverId;
-	protected String runtimeId;
+
 	protected boolean serverProject = false;
-	
-	// project properties listeners
-	protected transient List listeners;
 
 	/**
 	 * ProjectProperties constructor.
@@ -45,30 +48,27 @@
 		super();
 		this.project = project;
 	}
-	
+
 	/**
 	 * Load the preferences.
 	 */
 	private void loadPreferences() {
 		Trace.trace(Trace.FINEST, "Loading project preferences: " + project);
 		
+		if (!project.isAccessible())
+			return;
+		
 		InputStream in = null;
 		try {
-			IMemento memento = null;
-			if (!project.exists() || !project.isOpen())
-				return;
-			IFile file = project.getFile(PROJECT_PREFERENCE_FILE);
-			if (file != null && file.exists()) {
-				in = file.getContents();
-				memento = XMLMemento.loadMemento(in);
-			}
-			
-			if (memento == null)
+			IFile file = project.getFolder(PREFERENCE_FOLDER).getFile(PREFERENCE_FILE);
+			if (file == null || !file.isAccessible())
 				return;
 			
-			serverId = memento.getString("server-id");
-			runtimeId = memento.getString("runtime-id");
-			String s = memento.getString("servers");
+			in = file.getContents();
+			Properties p = new Properties();
+			p.load(in);
+			
+			String s = p.getProperty(SERVER_PROJECT_PREF);
 			if (s != null && "true".equals(s))
 				serverProject = true;
 			else
@@ -77,109 +77,58 @@
 			Trace.trace(Trace.SEVERE, "Could not load preferences: " + e.getMessage());
 		} finally {
 			try {
-				in.close();
+				if (in != null)
+					in.close();
 			} catch (Exception e) {
 				// ignore
 			}
 		}
 	}
-	
+
 	private void savePreferences(IProgressMonitor monitor) throws CoreException {
-		if (project.exists() && project.isOpen()) {
-			IFile file = project.getFile(PROJECT_PREFERENCE_FILE);
-			
-			if (file.exists() && file.isReadOnly()) {
-				IStatus status = ResourcesPlugin.getWorkspace().validateEdit(new IFile[] { file }, null);
-				if (status.getSeverity() == IStatus.ERROR)
-					// didn't work or not under source control
-					throw new CoreException(status);
-			}
-			
-			InputStream in = null;
-			try {
-				XMLMemento memento = XMLMemento.createWriteRoot("runtime");
-
-				if (runtimeId != null)
-					memento.putString("runtime-id", runtimeId);
-				if (serverId != null)
-					memento.putString("server-id", serverId);
-				if (serverProject)
-					memento.putString("servers", "true");
-				else
-					memento.putString("servers", "false");
-				in = memento.getInputStream();
-				
-				if (file.exists())
-					file.setContents(in, true, true, monitor);
-				else
-					file.create(in, true, monitor);
-			} catch (Exception e) {
-				throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, "", e));
-			} finally {
-				try {
-					in.close();
-				} catch (Exception e) {
-					// ignore
-				}
-			}
+		if (project == null || !project.isAccessible())
 			return;
+		
+		IFolder folder = project.getFolder(PREFERENCE_FOLDER);
+		if (!folder.exists())
+			folder.create(true, true, monitor);
+		
+		IFile file = project.getFolder(PREFERENCE_FOLDER).getFile(PREFERENCE_FILE);
+		
+		if (file.exists() && file.isReadOnly()) {
+			IStatus status = ResourcesPlugin.getWorkspace().validateEdit(new IFile[] { file }, null);
+			if (status.getSeverity() == IStatus.ERROR)
+				// didn't work or not under source control
+				throw new CoreException(status);
 		}
-	}
-
-	/**
-	 * Returns the preferred runtime server for the project. This method
-	 * returns null if the server was never chosen or does not currently exist. (if the
-	 * server is recreated or was in a closed project, etc. this method will return
-	 * the original value if it becomes available again)
-	 *
-	 * @return server org.eclipse.wst.server.core.IServer
-	 */
-	public IServer getDefaultServer() {
-		loadPreferences();
-
-		if (serverId == null || serverId.length() == 0)
-			return null;
 		
-		IServer server = ServerCore.findServer(serverId);
-		/*if (server != null && ServerUtil.containsModule(server, module))
-			return server;
+		Properties p = new Properties();
+		p.put("eclipse.preferences.version", "1");
+		if (serverProject)
+			p.put(SERVER_PROJECT_PREF, "true");
 		else
-			return null;*/
-		return server;
-	}
-
-	/**
-	 * Sets the default server.
-	 * 
-	 * @param server a server
-	 * @param monitor a progress monitor
-	 * @throws CoreException if anything goes wrong
-	 */
-	public void setDefaultServer(IServer server, IProgressMonitor monitor) throws CoreException {
-		loadPreferences();
+			p.put(SERVER_PROJECT_PREF, "false");
 		
-		String newServerId = null;
-		if (server != null)
-			newServerId = server.getId();
-		if (serverId == null && newServerId == null)
-			return;
-		if (serverId != null && serverId.equals(newServerId))
-			return;
+		InputStream in = null;
+		try {
+			ByteArrayOutputStream out = new ByteArrayOutputStream();
+			p.store(out, null);
 		
-		serverId = newServerId;
-		savePreferences(monitor);
-		fireDefaultServerChanged(server);
-	}
-	
-	protected String getRuntimeTargetId() {
-		loadPreferences();
-		return runtimeId;
-	}
-	
-	protected void setRuntimeTargetId(String newRuntimeId, IProgressMonitor monitor) throws CoreException {
-		loadPreferences();
-		runtimeId = newRuntimeId;
-		savePreferences(monitor);
+			in = new ByteArrayInputStream(out.toByteArray());
+			
+			if (file.exists())
+				file.setContents(in, true, true, monitor);
+			else
+				file.create(in, true, monitor);
+		} catch (Exception e) {
+			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, "", e));
+		} finally {
+			try {
+				in.close();
+			} catch (Exception e) {
+				// ignore
+			}
+		}
 	}
 
 	/**
@@ -188,163 +137,10 @@
 	 * @return the runtime target
 	 */
 	public IRuntime getRuntimeTarget() {
-		loadPreferences();
-		if (runtimeId == null)
-			return null;
-		return ServerCore.findRuntime(runtimeId);
+		return null;
 	}
 
 	/**
-	 * Sets the runtime target for the project.
-	 * 
-	 * @param runtime the target runtime
-	 * @param monitor a progress monitor
-	 * @throws CoreException if anything goes wrong
-	 */
-	public void setRuntimeTarget(IRuntime runtime, IProgressMonitor monitor) throws CoreException {
-		loadPreferences();
-		IRuntime oldRuntime = null;
-		if (runtimeId != null)
-			oldRuntime = ServerCore.findRuntime(runtimeId);
-		setRuntimeTarget(oldRuntime, runtime, true, monitor);
-	}
-
-	protected void setRuntimeTarget(IRuntime oldRuntime, IRuntime newRuntime, boolean save, IProgressMonitor monitor) throws CoreException {
-		Trace.trace(Trace.RUNTIME_TARGET, "setRuntimeTarget : " + oldRuntime + " -> " + newRuntime);
-		
-		if (oldRuntime == null && newRuntime == null)
-			return;
-		if (oldRuntime != null && oldRuntime.equals(newRuntime))
-			return;
-		
-		IRuntimeTargetHandler[] handlers = ServerCore.getRuntimeTargetHandlers();
-		if (handlers == null)
-			return;
-	
-		int size = handlers.length;
-		// remove old target
-		if (oldRuntime != null) {
-			IRuntimeType runtimeType = oldRuntime.getRuntimeType();
-			for (int i = 0; i < size; i++) {
-				IRuntimeTargetHandler handler = handlers[i];
-				long time = System.currentTimeMillis();
-				boolean supports = handler.supportsRuntimeType(runtimeType);
-				Trace.trace(Trace.RUNTIME_TARGET, "  < " + handler + " " + supports);
-				if (supports)
-					((RuntimeTargetHandler)handler).removeRuntimeTarget(project, oldRuntime, monitor);
-				Trace.trace(Trace.PERFORMANCE, "Runtime target: <" + (System.currentTimeMillis() - time) + "> " + handler.getId());
-			}
-		}
-		
-		// add new target
-		if (newRuntime != null) {
-			runtimeId = newRuntime.getId();
-			if (save)
-				savePreferences(monitor);
-			IRuntimeType runtimeType = newRuntime.getRuntimeType();
-			for (int i = 0; i < size; i++) {
-				IRuntimeTargetHandler handler = handlers[i];
-				long time = System.currentTimeMillis();
-				boolean supports = handler.supportsRuntimeType(runtimeType);
-				Trace.trace(Trace.RUNTIME_TARGET, "  > " + handler + " " + supports);
-				if (supports)
-					((RuntimeTargetHandler)handler).setRuntimeTarget(project, newRuntime, monitor);
-				Trace.trace(Trace.PERFORMANCE, "Runtime target: <" + (System.currentTimeMillis() - time) + "> " + handler.getId());
-			}
-		} else {
-			runtimeId = null;
-			if (save)
-				savePreferences(monitor);
-		}
-		
-		fireRuntimeTargetChanged(newRuntime);
-		Trace.trace(Trace.RUNTIME_TARGET, "setRuntimeTarget <");
-	}
-
-	/**
-	 * Adds a new project properties listener.
-	 * Has no effect if an identical listener is already registered.
-	 * 
-	 * @param listener the properties listener
-	 * @see #removeProjectPropertiesListener(IProjectPropertiesListener)
-	 */
-	public void addProjectPropertiesListener(IProjectPropertiesListener listener) {
-		Trace.trace(Trace.LISTENERS, "Adding project properties listener " + listener + " to " + this);
-		
-		if (listeners == null)
-			listeners = new ArrayList();
-		listeners.add(listener);
-	}
-
-	/**
-	 * Removes an existing project properties listener.
-	 * Has no effect if the listener is not registered.
-	 * 
-	 * @param listener the properties listener
-	 * @see #addProjectPropertiesListener(IProjectPropertiesListener)
-	 */
-	public void removeProjectPropertiesListener(IProjectPropertiesListener listener) {
-		Trace.trace(Trace.LISTENERS, "Removing project properties listener " + listener + " from " + this);
-		
-		if (listeners != null)
-			listeners.remove(listener);
-	}
-	
-	/**
-	 * Fire a event because the default server changed.
-	 *
-	 * @param server org.eclipse.wst.server.core.IServer
-	 */
-	private void fireDefaultServerChanged(IServer server) {
-		Trace.trace(Trace.LISTENERS, "->- Firing defaultServerChanged event: " + server + " ->-");
-	
-		if (listeners == null || listeners.isEmpty())
-			return;
-	
-		int size = listeners.size();
-		IProjectPropertiesListener[] ppl = new IProjectPropertiesListener[size];
-		listeners.toArray(ppl);
-	
-		for (int i = 0; i < size; i++) {
-			Trace.trace(Trace.LISTENERS, "  Firing defaultServerChanged event to " + ppl[i]);
-			try {
-				ppl[i].defaultServerChanged(project, server);
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "  Error firing defaultServerChanged event to " + ppl[i], e);
-			}
-		}
-	
-		Trace.trace(Trace.LISTENERS, "-<- Done firing defaultServerChanged event -<-");
-	}
-	
-	/**
-	 * Fire a event because the runtime target changed.
-	 *
-	 * @param runtime org.eclipse.wst.server.core.IRuntime
-	 */
-	private void fireRuntimeTargetChanged(IRuntime runtime) {
-		Trace.trace(Trace.LISTENERS, "->- Firing runtimeTargetChanged event: " + runtime + " ->-");
-	
-		if (listeners == null || listeners.isEmpty())
-			return;
-	
-		int size = listeners.size();
-		IProjectPropertiesListener[] ppl = new IProjectPropertiesListener[size];
-		listeners.toArray(ppl);
-	
-		for (int i = 0; i < size; i++) {
-			Trace.trace(Trace.LISTENERS, "  Firing runtimeTargetChanged event to " + ppl[i]);
-			try {
-				ppl[i].runtimeTargetChanged(project, runtime);
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "  Error firing runtimeTargetChanged event to " + ppl[i], e);
-			}
-		}
-	
-		Trace.trace(Trace.LISTENERS, "-<- Done firing runtimeTargetChanged event -<-");
-	}
-	
-	/**
 	 * Returns <code>true</code> if this project can contain server artifacts, and
 	 * <code>false</code> otherwise.
 	 * 
@@ -371,8 +167,8 @@
 		serverProject = b;
 		savePreferences(monitor);
 	}
-	
+
 	public String toString() {
-		return "ProjectProperties[" + project + ", " + serverId + ", " + runtimeId + "]";
+		return "ProjectProperties[" + project + "]";
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishServerJob.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishServerJob.java
index 5c04344..c2fd9c7 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishServerJob.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishServerJob.java
@@ -10,18 +10,20 @@
  **********************************************************************/
 package org.eclipse.wst.server.core.internal;
 
+import org.eclipse.core.resources.IResourceRuleFactory;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.MultiRule;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.IServer;
 /**
  * Job to publish to a particular server.
  */
-public class PublishServerJob extends Job {
-	protected IServer server;
+public class PublishServerJob extends ChainedJob {
 	protected int kind;
-	protected boolean check; 
+	protected boolean check;
 
 	/**
 	 * Create a new publishing job.
@@ -31,13 +33,88 @@
 	 * @param check
 	 */
 	public PublishServerJob(IServer server, int kind, boolean check) {
-		super(NLS.bind(Messages.publishing, server.getName()));
-		this.server = server;
+		super(NLS.bind(Messages.publishing, server.getName()), server);
 		this.kind = kind;
 		this.check = check;
-		setRule(new ServerSchedulingRule(server));
-		if (kind != IServer.PUBLISH_AUTO)
-			setUser(true);
+		
+		IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
+		
+		// 102227 - lock entire workspace during publish
+		// TODO will have to revisit post 0.7 to determine if there is a better way to
+		// do this, since it would be preferrable not to lock the entire workspace, and
+		// therefore allow multiple servers to publish at once
+		
+		// find all projects that modules are in
+		/*List projectList = new ArrayList();
+		Iterator iterator = ((Server)server).getAllModules().iterator();
+		while (iterator.hasNext()) {
+			IModule[] modules = (IModule[]) iterator.next();
+			IProject project = modules[modules.length - 1].getProject();
+			if (project != null && !projectList.contains(project))
+				projectList.add(project);
+		}
+		
+		// add dependant projects
+		iterator = projectList.iterator();
+		List depProjectList = new ArrayList(); // use to avoid concurrent modification
+		while (iterator.hasNext()) {
+			IProject project = (IProject) iterator.next();
+			try {
+				IProject[] refs = project.getDescription().getReferencedProjects();
+				if (refs != null) {
+					int size = refs.length;
+					for (int i = 0; i < size; i++)
+						if (refs[i] != null && !projectList.contains(refs[i]) && !depProjectList.contains(refs[i]))
+							depProjectList.add(refs[i]);
+				}
+			} catch (CoreException ce) {
+				Trace.trace(Trace.WARNING, "Could not compute referenced projects", ce);
+			}
+		}
+		
+		iterator = depProjectList.iterator();
+		while (iterator.hasNext()) {
+			projectList.add(iterator.next());
+		}
+		
+		// combine and build all the rules
+		List list = new ArrayList();
+		iterator = projectList.iterator();
+		while (iterator.hasNext()) {
+			IProject project = (IProject) iterator.next();
+			ISchedulingRule rule = ruleFactory.createRule(project);
+			if (rule != null && !list.contains(rule))
+				list.add(rule);
+			
+			rule = ruleFactory.modifyRule(project);
+			if (rule != null && !list.contains(rule))
+				list.add(rule);
+			
+			rule = ruleFactory.validateEditRule(new IResource[] { project });
+			if (rule != null && !list.contains(rule))
+				list.add(rule);
+			
+			rule = ruleFactory.markerRule(project);
+			if (rule != null && !list.contains(rule))
+				list.add(rule);
+			
+			rule = ruleFactory.refreshRule(project);
+			if (rule != null && !list.contains(rule))
+				list.add(rule);
+		}
+		
+		int size = list.size();
+		ISchedulingRule[] rules = new ISchedulingRule[size + 1];
+		for (int i = 0; i < size; i++)
+			rules[i] = (ISchedulingRule) list.get(i);
+		
+		rules[size] = new ServerSchedulingRule(server);*/
+		
+		ISchedulingRule[] rules = new ISchedulingRule[2];
+		rules[0] = ruleFactory.createRule(ResourcesPlugin.getWorkspace().getRoot());
+		rules[1] = new ServerSchedulingRule(server);
+		
+		setRule(MultiRule.combine(rules));
 	}
 
 	/**
@@ -50,18 +127,21 @@
 	}
 
 	/**
-	 * @see Job#shouldRun()
+	 * @see org.eclipse.core.runtime.jobs.Job#shouldRun()
 	 */
 	public boolean shouldRun() {
+		if (!super.shouldRun())
+			return false;
+		
 		if (!check)
 			return true;
-		return ServerPreferences.getInstance().isAutoPublishing() && ((Server)server).shouldPublish();
+		return ServerPreferences.getInstance().isAutoPublishing() && ((Server)getServer()).shouldPublish();
 	}
 
 	/**
-	 * @see Job#run(IProgressMonitor)
+	 * @see org.eclipse.core.runtime.jobs.Job#run(IProgressMonitor)
 	 */
 	protected IStatus run(IProgressMonitor monitor) {
-		return server.publish(kind, monitor);
+		return getServer().publish(kind, monitor);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
index 7243ea1..ec9fbd5 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
@@ -75,14 +75,31 @@
 	/*
 	 * @see
 	 */
-	public IOptionalTask[] getTasks(IServer server, List modules) {
+	public PublishOperation[] getTasks(IServer server, List modules) {
 		try {
 			Trace.trace(Trace.FINEST, "Task.init " + this);
-			return getDelegate().getTasks(server, modules);
+			PublishOperation[] po = getDelegate().getTasks(server, modules);
+			if (po != null)
+				return po;
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
 		}
-		return new IOptionalTask[0];
+		return new PublishOperation[0];
+	}
+
+	/*
+	 * @see
+	 */
+	public PublishOperation[] getTasks(IServer server, int kind, List modules, List kindList) {
+		try {
+			Trace.trace(Trace.FINEST, "Task.init " + this);
+			PublishOperation[] po = getDelegate().getTasks(server, kind, modules, kindList);
+			if (po != null)
+				return po;
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
+		}
+		return new PublishOperation[0];
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
index 51b1adf..414490f 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
@@ -18,12 +18,13 @@
 
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.model.ServerDelegate;
+import org.eclipse.wst.server.core.util.ProjectModuleFactoryDelegate;
 /**
  * ResourceManager handles the mappings between resources
  * and servers or server configurations, and creates
  * notification of servers or server configurations
  * being added and removed.
- *
+ * 
  * <p>Servers and server configurations may be a single
  * resource, or they may be a folder that contains a group
  * of files. Folder-resource may not contain other servers
@@ -38,24 +39,26 @@
 
 	private static ResourceManager instance;
 
-	// currently active runtimes, servers, and server configurations
+	// currently active runtimes and servers
 	protected List runtimes;
 	protected List servers;
-	protected List configurations;
 	protected IRuntime defaultRuntime;
 
 	// lifecycle listeners
 	protected transient List runtimeListeners;
 	protected transient List serverListeners;
-	protected transient List serverConfigurationListeners;
+	
+	// cache for disposing servers & runtimes
+	protected List activeBundles;
 
 	// resource change listeners
-	private IResourceChangeListener modelResourceChangeListener;
-	private IResourceChangeListener publishResourceChangeListener;
+	private IResourceChangeListener resourceChangeListener;
 	private Preferences.IPropertyChangeListener pcl;
 	protected boolean ignorePreferenceChanges = false;
 
 	/**
+	 * Server resource change listener.
+	 * 
 	 * Resource listener - tracks changes on server resources so that
 	 * we can reload/drop server instances and configurations that
 	 * may change outside of our control.
@@ -67,11 +70,11 @@
 	 *    attached to the project at this point - OTI defect)
 	 * 2. Projects being deleted.
 	 */
-	public class ServerModelResourceChangeListener implements IResourceChangeListener {
+	public class ServerResourceChangeListener implements IResourceChangeListener {
 		/**
-		 * Create a new ServerModelResourceChangeListener.
+		 * Create a new ServerResourceChangeListener.
 		 */
-		public ServerModelResourceChangeListener() {
+		public ServerResourceChangeListener() {
 			super();
 		}
 
@@ -85,7 +88,7 @@
 			if (delta == null)
 				return;
 	
-			Trace.trace(Trace.RESOURCES, "->- ServerModelResourceManager responding to resource change: " + event.getType() + " ->-");
+			Trace.trace(Trace.RESOURCES, "->- ServerResourceChangeListener responding to resource change: " + event.getType() + " ->-");
 			IResourceDelta[] children = delta.getAffectedChildren();
 			if (children != null) {
 				int size = children.length;
@@ -96,17 +99,35 @@
 					}
 				}
 			}
-	
-			Trace.trace(Trace.RESOURCES, "-<- Done ServerModelResourceManager responding to resource change -<-");
+			
+			// search for changes to any project using a visitor
+			try {
+				delta.accept(new IResourceDeltaVisitor() {
+					public boolean visit(IResourceDelta visitorDelta) {
+						IResource resource = visitorDelta.getResource();
+
+						// only respond to project changes
+						if (resource != null && resource instanceof IProject) {
+							publishHandleProjectChange(visitorDelta);
+							return false;
+						}
+						return true;
+					}
+				});
+			} catch (Exception e) {
+				Trace.trace(Trace.SEVERE, "Error responding to resource change", e);
+			}
+			
+			Trace.trace(Trace.RESOURCES, "-<- Done ServerResourceChangeListener responding to resource change -<-");
 		}
-	
+
 		/**
 		 * React to a change within a possible server project.
 		 *
 		 * @param delta org.eclipse.core.resources.IResourceDelta
 		 */
 		protected void projectChanged(IProject project, IResourceDelta delta) {
-			if (!((ProjectProperties)ServerCore.getProjectProperties(project)).isServerProject()) {
+			if (!ServerPlugin.getProjectProperties(project).isServerProject()) {
 				Trace.trace(Trace.RESOURCES, "Not a server project: " + project.getName());
 				return;
 			}
@@ -130,49 +151,6 @@
 			}
 		}
 	}
-
-	/**
-	 * Publish resource listener
-	 */
-	public class PublishResourceChangeListener implements IResourceChangeListener {
-		/**
-		 * Create a new PublishResourceChangeListener.
-		 */
-		public PublishResourceChangeListener() {
-			super();
-		}
-
-		/**
-		 * Listen for projects being added or removed and act accordingly.
-		 *
-		 * @param event org.eclipse.core.resources.IResourceChangeEvent
-		 */
-		public void resourceChanged(IResourceChangeEvent event) {
-			IResourceDelta delta = event.getDelta();
-			if (delta == null)
-				return;
-		
-			Trace.trace(Trace.FINEST, "->- PublishResourceManager responding to resource change: " + event.getType() + " ->-");
-			// search for changes to any project using a visitor
-			try {
-				delta.accept(new IResourceDeltaVisitor() {
-					public boolean visit(IResourceDelta visitorDelta) {
-						IResource resource = visitorDelta.getResource();
-
-						// only respond to project changes
-						if (resource != null && resource instanceof IProject) {
-							publishHandleProjectChange(visitorDelta);
-							return false;
-						}
-						return true;
-					}
-				});
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error responding to resource change", e);
-			}
-			Trace.trace(Trace.FINEST, "-<- Done PublishResourceManager responding to resource change -<-");
-		}
-	}
 	
 	protected List moduleServerEventHandlers;
 	protected List moduleServerEventHandlerIndexes;
@@ -190,7 +168,7 @@
 
 	protected void init() {
 		servers = new ArrayList();
-		configurations = new ArrayList();
+		activeBundles = new ArrayList();
 		loadRuntimesList();
 		loadServersList();
 		
@@ -209,15 +187,11 @@
 		ServerPlugin.getInstance().getPluginPreferences().addPropertyChangeListener(pcl);
 		
 		resolveServers();
-
+		
 		// keep track of future changes to the file system
-		modelResourceChangeListener = new ServerModelResourceChangeListener();
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(modelResourceChangeListener, IResourceChangeEvent.POST_CHANGE | IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE);
-	
-		// add listener for future changes
-		publishResourceChangeListener = new PublishResourceChangeListener();
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(publishResourceChangeListener, IResourceChangeEvent.POST_CHANGE | IResourceChangeEvent.PRE_DELETE);
-	
+		resourceChangeListener = new ServerResourceChangeListener();
+		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_CHANGE | IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE);
+		
 		/*configurationListener = new IServerConfigurationListener() {
 			public void childProjectChange(IServerConfiguration configuration) {
 				handleConfigurationChildProjectsChange(configuration);
@@ -229,7 +203,7 @@
 		if (projects != null) {
 			int size = projects.length;
 			for (int i = 0; i < size; i++) {
-				if (((ProjectProperties)ServerCore.getProjectProperties(projects[i])).isServerProject())
+				if (ServerPlugin.getProjectProperties(projects[i]).isServerProject())
 					loadFromProject(projects[i]);
 			}
 		}
@@ -245,34 +219,42 @@
 		final ResourceManager rm = ResourceManager.getInstance();
 	
 		try {
-			project.accept(new IResourceVisitor() {
-				public boolean visit(IResource resource) {
-					try {
-						if (resource instanceof IFile) {
-							IFile file = (IFile) resource;
-							rm.handleNewFile(file, new NullProgressMonitor());
+			project.accept(new IResourceProxyVisitor() {
+				public boolean visit(IResourceProxy proxy) {
+					if (proxy.getType() == IResource.FILE &&
+						Server.FILE_EXTENSION.equals(getFileExtension(proxy.getName()))) {
+							IFile file = (IFile) proxy.requestResource();
+							try {
+								rm.handleNewFile(file, null);
+							} catch (Exception e) {
+								Trace.trace(Trace.SEVERE, "Error during initial server resource load", e);
+							}
 							return false;
 						}
-						return true;
-						//return !rm.handleNewServerResource(resource, new NullProgressMonitor());
-					} catch (Exception e) {
-						Trace.trace(Trace.SEVERE, "Error during initial server resource load", e);
-					}
 					return true;
 				}
-			});
+			}, 0);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Could not load server project " + project.getName(), e);
 		}
 	}
-	
+		
+	protected static String getFileExtension(String name) {
+		int index = name.lastIndexOf('.');
+		if (index == -1)
+			return null;
+		if (index == (name.length() - 1))
+			return ""; //$NON-NLS-1$
+		return name.substring(index + 1);
+	}
+
 	public static ResourceManager getInstance() {
 		if (instance == null)
 			new ResourceManager();
 
 		return instance;
 	}
-	
+
 	public static void shutdown() {
 		if (instance == null)
 			return;
@@ -283,29 +265,51 @@
 			Trace.trace(Trace.SEVERE, "Error during shutdown", e);
 		}
 	}
+
+	protected boolean isActiveBundle(String bundleId) {
+		return activeBundles.contains(bundleId);
+	}
+
+	protected void shutdownBundle(String id) {
+		// dispose servers
+		Iterator iterator = servers.iterator();
+		while (iterator.hasNext()) {
+			Server server = (Server) iterator.next();
+			try {
+				ServerType serverType = (ServerType) server.getServerType();
+				if (id.equals(serverType.getNamespace())) {
+					//server.stop(true);
+					server.dispose();
+				}
+			} catch (Exception e) {
+				Trace.trace(Trace.WARNING, "Error disposing server", e);
+			}
+		}
+		
+		// dispose runtimes
+		iterator = runtimes.iterator();
+		while (iterator.hasNext()) {
+			Runtime runtime = (Runtime) iterator.next();
+			try {
+				RuntimeType runtimeType = (RuntimeType) runtime.getRuntimeType();
+				if (id.equals(runtimeType.getNamespace())) {
+					runtime.dispose();
+				}
+			} catch (Exception e) {
+				Trace.trace(Trace.WARNING, "Error disposing server", e);
+			}
+		}
+		try {
+			Thread.sleep(1000);
+		} catch (Exception e) {
+			// ignore
+		}
+	}
 	
 	protected void shutdownImpl() {
-		// stop all running servers
-		// REMOVING FEATURE - can't be supported since we can't reload downstream plugins
-		// during shutdown. Individual downstream plugins should contain their own similar
-		// code to stop the servers.
-		/*Iterator iterator = getServers().iterator();
-		while (iterator.hasNext()) {
-			IServer server = (IServer) iterator.next();
-			try {
-				if (server.getServerState() != IServer.STATE_STOPPED) {
-					ServerDelegate delegate = server.getDelegate();
-					if (delegate instanceof IStartableServer && ((IStartableServer)delegate).isTerminateOnShutdown())
-						((IStartableServer) delegate).terminate();
-				}
-			} catch (Exception e) { }
-		}*/
-
 		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		if (workspace != null) {
-			workspace.removeResourceChangeListener(modelResourceChangeListener);
-			workspace.removeResourceChangeListener(publishResourceChangeListener);
-		}
+		if (workspace != null)
+			workspace.removeResourceChangeListener(resourceChangeListener);
 		
 		ServerPlugin.getInstance().getPluginPreferences().removePropertyChangeListener(pcl);
 		
@@ -364,6 +368,8 @@
 			return;
 
 		Trace.trace(Trace.RESOURCES, "Deregistering runtime: " + runtime.getName());
+		if (runtime.equals(getDefaultRuntime()))
+			setDefaultRuntime(null);
 
 		((Runtime)runtime).dispose();
 		fireRuntimeEvent(runtime, EVENT_REMOVED);
@@ -512,7 +518,7 @@
 				
 				for (int i = 0; i < size; i++) {
 					Runtime runtime = new Runtime(null);
-					runtime.loadFromMemento(children[i], new NullProgressMonitor());
+					runtime.loadFromMemento(children[i], null);
 					runtimes.add(runtime);
 				}
 				
@@ -541,12 +547,21 @@
 			
 			for (int i = 0; i < size; i++) {
 				Server server = new Server(null);
-				server.loadFromMemento(children[i], new NullProgressMonitor());
+				server.loadFromMemento(children[i], null);
 				servers.add(server);
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.WARNING, "Could not load servers: " + e.getMessage());
 		}
+		
+		if (ServerPreferences.getInstance().isSyncOnStartup()) {
+			Iterator iterator = servers.iterator();
+			while (iterator.hasNext()) {
+				IServer server = (IServer) iterator.next();
+				UpdateServerJob job = new UpdateServerJob(server);
+				job.schedule();
+			}
+		}
 	}
 	
 	protected void addRuntime(IRuntime runtime) {
@@ -595,21 +610,7 @@
 	public IRuntime[] getRuntimes() {
 		List list = new ArrayList(runtimes);
 		
-		/*int size = list.size();
-		for (int i = 0; i < size - 1; i++) {
-			for (int j = i + 1; j < size; j++) {
-				IRuntime a = (IRuntime) list.get(i);
-				IRuntime b = (IRuntime) list.get(j);
-				if (a.getRuntimeType() != null && b.getRuntimeType() != null &&
-						((RuntimeType)a.getRuntimeType()).getOrder() < ((RuntimeType)b.getRuntimeType()).getOrder()) {
-					Object temp = a;
-					list.set(i, b);
-					list.set(j, temp);
-				}
-			}
-		}*/
-		
-		if (defaultRuntime != null) {
+		if (defaultRuntime != null && list.contains(defaultRuntime)) {
 			list.remove(defaultRuntime);
 			list.add(0, defaultRuntime);
 		}
@@ -657,7 +658,15 @@
 		saveRuntimesList();
 	}
 
-	protected void resolveServers() {
+	public void resolveRuntimes() {
+		Iterator iterator = runtimes.iterator();
+		while (iterator.hasNext()) {
+			Runtime runtime = (Runtime) iterator.next();
+			runtime.resolve();
+		}
+	}
+
+	public void resolveServers() {
 		Iterator iterator = servers.iterator();
 		while (iterator.hasNext()) {
 			Server server = (Server) iterator.next();
@@ -712,24 +721,30 @@
 	 */
 	protected boolean handleResourceDelta(IResourceDelta delta) {
 		int kind = delta.getKind();
+		int flags = delta.getFlags();
 		IResource resource2 = delta.getResource();
-	
+		
 		// ignore markers
-		if (kind == IResourceDelta.CHANGED && (delta.getFlags() & IResourceDelta.MARKERS) != 0)
+		if (kind == IResourceDelta.CHANGED && (flags & IResourceDelta.MARKERS) != 0)
 			return false;
-	
+		
 		Trace.trace(Trace.RESOURCES, "Resource changed: " + resource2 + " " + kind);
 		
 		if (resource2 instanceof IFile) {
 			IFile file = (IFile) resource2;
-			IProgressMonitor monitor = new NullProgressMonitor();
-			if (kind == IResourceDelta.ADDED) {
-				handleNewFile(file, monitor);
-			} else if (kind == IResourceDelta.REMOVED) {
-				handleRemovedFile(file);
-			} else
-				handleChangedFile(file, monitor);
-			monitor.done();
+			if (Server.FILE_EXTENSION.equals(file.getFileExtension())) {
+				IProgressMonitor monitor = null;
+				if ((flags & IResourceDelta.MOVED_FROM) != 0 || (flags & IResourceDelta.MOVED_TO) != 0)
+					handleMovedFile(file, delta, monitor);
+				else if (kind == IResourceDelta.ADDED)
+					handleNewFile(file, monitor);
+				else if (kind == IResourceDelta.REMOVED)
+					handleRemovedFile(file);
+				else
+					handleChangedFile(file, monitor);
+				if (monitor != null)
+					monitor.done();
+			}
 			return false;
 		}
 		IFolder folder = (IFolder) resource2;
@@ -746,39 +761,6 @@
 			}
 		}
 		return true;
-	
-		/*IProgressMonitor monitor = new NullProgressMonitor();
-		List list = getResourceParentList(resource2);
-		monitor.beginTask("", list.size() * 1000);
-	
-		Iterator iterator = list.iterator();
-		while (iterator.hasNext()) {
-			IResource resource = (IResource) iterator.next();
-			if (!visited.contains(resource.getFullPath())) {
-				visited.add(resource.getFullPath());
-				if (kind == IResourceDelta.REMOVED) {
-					boolean b = handleRemovedFile(resource);
-					if (b) {
-						if (resource instanceof IContainer)
-							removeServerResourcesBelow((IContainer) resource);
-						return false;
-					} else
-						return true;
-				} else if (kind == IResourceDelta.ADDED) {
-					return !handleNewServerResource(resource, monitor);
-				} else {
-					boolean b = handleChangedServerResource(resource, monitor);
-					if (!b) {
-						handleRemovedFile(resource);
-					}
-					return true;
-				}
-			}
-		}
-
-		monitor.done();
-		Trace.trace(Trace.RESOURCES, "Ignored resource change: " + resource2);
-		return true;*/
 	}
 	
 	protected IServer loadServer(IFile file, IProgressMonitor monitor) throws CoreException {
@@ -805,7 +787,8 @@
 			try {
 				IServer server = loadServer(file, ProgressUtil.getSubMonitorFor(monitor, 1000));
 				if (server != null) {
-					registerServer(server);
+					if (getServer(server.getId()) == null)
+						registerServer(server);
 					monitor.done();
 					return true;
 				}
@@ -813,11 +796,50 @@
 				Trace.trace(Trace.SEVERE, "Error loading server", e);
 			}
 		}
-	
+		
 		monitor.done();
 		return false;
 	}
-	
+
+	/**
+	 * Tries to load a new server resource from the given resource.
+	 * Returns true if the load and register were successful.
+	 *
+	 * @param file
+	 * @param monitor
+	 * @return boolean
+	 */
+	protected boolean handleMovedFile(IFile file, IResourceDelta delta, IProgressMonitor monitor) {
+		Trace.trace(Trace.RESOURCES, "handleMovedFile: " + file);
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		monitor.beginTask("", 2000);
+		
+		IPath fromPath = delta.getMovedFromPath();
+		if (fromPath != null) {
+			IFile fromFile = ResourcesPlugin.getWorkspace().getRoot().getFile(fromPath);
+			if (ServerPlugin.getProjectProperties(fromFile.getProject()).isServerProject()) {
+				Server server = (Server) findServer(fromFile);
+				if (server != null)
+					server.file = file;
+			} else {
+				handleNewFile(file, monitor);
+			}
+		} else {
+			IPath toPath = delta.getMovedToPath();
+			IFile toFile = ResourcesPlugin.getWorkspace().getRoot().getFile(toPath);
+			if (ServerPlugin.getProjectProperties(toFile.getProject()).isServerProject()) {
+				Server server = (Server) findServer(file);
+				if (server != null)
+					server.file = toFile;
+			} else {
+				handleRemovedFile(file);
+			}
+		}
+		
+		monitor.done();
+		return false;
+	}
+
 	/**
 	 * Returns the server that came from the given file, or <code>null</code>
 	 * if none. This convenience method searches the list of known
@@ -868,10 +890,9 @@
 				Trace.trace(Trace.SEVERE, "Error reloading server " + server.getName() + " from " + file + ": " + e.getMessage());
 				deregisterServer(server);
 			}
-		}
-
-		Trace.trace(Trace.RESOURCES, "No server resource found at: " + file);
-	
+		} else
+			Trace.trace(Trace.RESOURCES, "No server found at: " + file);
+		
 		monitor.done();
 		return found;
 	}
@@ -884,15 +905,15 @@
 	 * @return boolean
 	 */
 	protected boolean handleRemovedFile(IFile file) {
-		Trace.trace(Trace.RESOURCES, "handleRemovedServerResource: " + file);
-	
+		Trace.trace(Trace.RESOURCES, "handleRemovedFile: " + file);
+		
 		IServer server = findServer(file);
 		if (server != null) {
 			deregisterServer(server);
 			return true;
 		}
-
-		Trace.trace(Trace.RESOURCES, "No server resource found at: " + file);
+		
+		Trace.trace(Trace.RESOURCES, "No server found at: " + file);
 		return false;
 	}
 
@@ -909,45 +930,61 @@
 		if (project == null)
 			return;
 		
-		if (isDeltaOnlyMarkers(delta))
+		if (!deltaContainsChangedFiles(delta))
 			return;
-
-		final IModule[] modules = ServerUtil.getModules(project);
-		if (modules == null)
+		
+		// process module changes
+		ProjectModuleFactoryDelegate.handleGlobalProjectChange(project, delta);
+		
+		final IModule module = ServerUtil.getModule(project);
+		if (module == null)
 			return;
 		
 		Trace.trace(Trace.FINEST, "- publishHandleProjectChange");
-
-		if (modules != null) {
-			int size2 = modules.length;
-			for (int j = 0; j < size2; j++) {
-				IServer[] servers2 = getServers();
-				if (servers2 != null) {
-					int size = servers2.length;
-					for (int i = 0; i < size; i++) {
-					if (servers2[i].getAdapter(ServerDelegate.class) != null)
-						((Server) servers2[i]).handleModuleProjectChange(modules[j]);
-					}
-				}
+		
+		IServer[] servers2 = getServers();
+		if (servers2 != null) {
+			int size = servers2.length;
+			for (int i = 0; i < size; i++) {
+			if (servers2[i].getAdapter(ServerDelegate.class) != null)
+				((Server) servers2[i]).handleModuleProjectChange(module);
 			}
 		}
 		Trace.trace(Trace.FINEST, "< publishHandleProjectChange");
 	}
-	
-	protected boolean isDeltaOnlyMarkers(IResourceDelta delta) {
+
+	/**
+	 * Returns <code>true</code> if at least one file in the delta is changed,
+	 * and <code>false</code> otherwise.
+	 * 
+	 * @param delta a resource delta
+	 * @return <code>true</code> if at least one file in the delta is changed,
+	 *    and <code>false</code> otherwise
+	 */
+	public static boolean deltaContainsChangedFiles(IResourceDelta delta) {
 		class Temp {
-			boolean b = true;
+			boolean b = false;
 		}
 		final Temp t = new Temp();
 		try {
 			delta.accept(new IResourceDeltaVisitor() {
 				public boolean visit(IResourceDelta delta2) throws CoreException {
-					if (!t.b)
+					if (t.b)
 						return false;
-					int flags = delta2.getFlags();
-					if (flags != 0 && flags != IResourceDelta.MARKERS) {
-						t.b = false;
+					//Trace.trace(Trace.FINEST, delta2.getResource() + "  " + delta2.getKind() + " " + delta2.getFlags());
+					if (delta2.getKind() == IResourceDelta.NO_CHANGE)
 						return false;
+					if (delta2.getResource() instanceof IFile) {
+						if (delta2.getKind() == IResourceDelta.CHANGED
+							&& (delta2.getFlags() & IResourceDelta.CONTENT) == 0
+							&& (delta2.getFlags() & IResourceDelta.REPLACED) == 0
+							&& (delta2.getFlags() & IResourceDelta.SYNC) == 0)
+							return true;
+						//if (delta2.getKind() == IResourceDelta.CHANGED) { // && delta2.getAffectedChildren().length == 0) {
+						t.b = true;
+						return false;
+							//return true;
+						//}
 					}
 					return true;
 				}
@@ -955,9 +992,10 @@
 		} catch (Exception e) {
 			// ignore
 		}
+		//Trace.trace(Trace.FINEST, "Delta contains change: " + t.b);
 		return t.b;
 	}
-	
+
 	/**
 	 * Registers a new runtime.
 	 *
@@ -971,8 +1009,13 @@
 	
 		runtimes.add(runtime);
 		fireRuntimeEvent(runtime, EVENT_ADDED);
+		
+		RuntimeType runtimeType = (RuntimeType) runtime.getRuntimeType();
+		String bundleId = runtimeType.getNamespace();
+		if (!activeBundles.contains(bundleId))
+			activeBundles.add(bundleId);
 	}
-	
+
 	/**
 	 * Registers a new server.
 	 *
@@ -986,6 +1029,11 @@
 	
 		servers.add(server);
 		fireServerEvent(server, EVENT_ADDED);
+		
+		ServerType serverType = (ServerType) server.getServerType();
+		String bundleId = serverType.getNamespace();
+		if (!activeBundles.contains(bundleId))
+			activeBundles.add(bundleId);
 	}
 
 	protected void fireModuleServerEvent(ModuleFactoryEvent[] factoryEvents, ModuleEvent[] events) {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RestartServerJob.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RestartServerJob.java
new file mode 100644
index 0000000..499d3ec
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RestartServerJob.java
@@ -0,0 +1,58 @@
+/**********************************************************************
+ * 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.wst.server.core.internal;
+
+import org.eclipse.core.runtime.*;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServer.IOperationListener;
+import org.eclipse.wst.server.core.internal.ServerSchedulingRule;
+/**
+ * A job for restarting a server.
+ */
+public class RestartServerJob extends ChainedJob {
+	protected String launchMode;
+	protected boolean isRestartCompleted = false;
+	protected IStatus resultStatus;
+
+	public RestartServerJob(IServer server, String launchMode) {
+		super(NLS.bind(Messages.jobRestartingServer, server.getName()), server);
+		this.launchMode = launchMode;
+		setRule(new ServerSchedulingRule(server));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.internal.jobs.InternalJob#run(org.eclipse.core.runtime.IProgressMonitor)
+	 */
+	protected IStatus run(IProgressMonitor monitor) {
+		IOperationListener listener2 = new IOperationListener() {
+			public void done(IStatus result) {
+				isRestartCompleted = true;
+				resultStatus = result;
+			}
+		};
+		getServer().restart(launchMode, listener2);
+		
+		// block util the restart is completed
+		while (!isRestartCompleted) {
+			try {
+				Thread.sleep(250);
+			} catch (InterruptedException e) {
+				// Do nothing.
+			}
+		}
+		
+		if (resultStatus != null)
+			return resultStatus;
+		
+		return Status.OK_STATUS;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Runtime.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Runtime.java
index 7a23f9a..6a4fcff 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Runtime.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Runtime.java
@@ -13,6 +13,7 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.*;
 import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.model.InternalInitializer;
 import org.eclipse.wst.server.core.model.RuntimeDelegate;
 /**
  * 
@@ -75,9 +76,9 @@
 			if (delegate == null) {
 				try {
 					long time = System.currentTimeMillis();
-					RuntimeType runtimeType2 = (RuntimeType) runtimeType;
-					delegate = (RuntimeDelegate) runtimeType2.getElement().createExecutableExtension("class");
-					delegate.initialize(this);
+					delegate = ((RuntimeType) runtimeType).createRuntimeDelegate();
+					InternalInitializer.initializeRuntimeDelegate(delegate, this, monitor);
+					//delegate.initialize(this);
 					Trace.trace(Trace.PERFORMANCE, "Runtime.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getRuntimeType().getId());
 				} catch (Throwable t) {
 					Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), t);
@@ -88,8 +89,10 @@
 	}
 
 	public void dispose() {
-		if (delegate != null)
+		if (delegate != null) {
 			delegate.dispose();
+			delegate = null;
+		}
 	}
 
 	/**
@@ -151,7 +154,11 @@
 	}
 
 	protected void loadState(IMemento memento) {
-		String runtimeTypeId = memento.getString(PROP_RUNTIME_TYPE_ID);
+		resolve();
+	}
+
+	protected void resolve() {
+		String runtimeTypeId = getAttribute(PROP_RUNTIME_TYPE_ID, (String) null);
 		if (runtimeTypeId != null)
 			runtimeType = ServerCore.findRuntimeType(runtimeTypeId);
 		else
@@ -178,11 +185,10 @@
 	 * @see IRuntime#getAdapter(Class)
 	 */
 	public Object getAdapter(Class adapter) {
-		//if (isDelegateLoaded()) {
-			RuntimeDelegate delegate2 = getDelegate(null);
-			if (adapter.isInstance(delegate2))
+		if (delegate != null) {
+			if (adapter.isInstance(delegate))
 				return delegate;
-		//}
+		}
 		return Platform.getAdapterManager().getAdapter(this, adapter);
 	}
 
@@ -190,11 +196,11 @@
 	 * @see IRuntime#loadAdapter(Class, IProgressMonitor)
 	 */
 	public Object loadAdapter(Class adapter, IProgressMonitor monitor) {
-		RuntimeDelegate delegate2 = getDelegate(monitor);
-		if (adapter.isInstance(delegate2))
+		getDelegate(monitor);
+		if (adapter.isInstance(delegate))
 			return delegate;
 	
-		return Platform.getAdapterManager().getAdapter(this, adapter);
+		return Platform.getAdapterManager().loadAdapter(this, adapter.getName());
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java
index 77a9b6d..b12ee1e 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeType.java
@@ -12,9 +12,11 @@
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.model.RuntimeDelegate;
 /**
  * 
  */
@@ -26,17 +28,17 @@
 		super();
 		this.element = element;
 	}
-	
-	protected IConfigurationElement getElement() {
-		return element;
-	}
 
 	/**
 	 * 
 	 * @return the id
 	 */
 	public String getId() {
-		return element.getAttribute("id");
+		try {
+			return element.getAttribute("id");
+		} catch (Exception e) {
+			return null;
+		}
 	}
 
 	/**
@@ -44,7 +46,11 @@
 	 * @return the name
 	 */
 	public String getName() {
-		return element.getAttribute("name");
+		try {
+			return element.getAttribute("name");
+		} catch (Exception e) {
+			return null;
+		}
 	}
 
 	/**
@@ -52,21 +58,41 @@
 	 * @return the description
 	 */
 	public String getDescription() {
-		return element.getAttribute("description");
+		try {
+			return element.getAttribute("description");
+		} catch (Exception e) {
+			return null;
+		}
 	}
 	
 	public String getVendor() {
-		String vendor = element.getAttribute("vendor");
-		if (vendor == null)
-			return Messages.defaultVendor;
-		return vendor;
+		try {
+			String vendor = element.getAttribute("vendor");
+			if (vendor != null)
+				return vendor;
+		} catch (Exception e) {
+			// ignore
+		}
+		return Messages.defaultVendor;
 	}
 	
 	public String getVersion() {
-		String version = element.getAttribute("version");
-		if (version == null)
-			return Messages.defaultVersion;
-		return version;
+		try {
+			String version = element.getAttribute("version");
+			if (version != null)
+				return version;
+		} catch (Exception e) {
+			// ignore
+		}
+		return Messages.defaultVersion;
+	}
+	
+	protected RuntimeDelegate createRuntimeDelegate() throws CoreException {
+		try {
+			return (RuntimeDelegate) element.createExecutableExtension("class");
+		} catch (Exception e) {
+			return null;
+		}
 	}
 	
 	/**
@@ -75,25 +101,46 @@
 	 * @return an array of module types
 	 */
 	public IModuleType[] getModuleTypes() {
-		if (moduleTypes == null)
-			moduleTypes = ServerPlugin.getModuleTypes(element.getChildren("moduleType"));
-
-		IModuleType[] mt = new IModuleType[moduleTypes.size()];
-		moduleTypes.toArray(mt);
-		return mt;
-	}
+		try {
+			if (moduleTypes == null)
+				moduleTypes = ServerPlugin.getModuleTypes(element.getChildren("moduleType"));
 	
+			IModuleType[] mt = new IModuleType[moduleTypes.size()];
+			moduleTypes.toArray(mt);
+			return mt;
+		} catch (Exception e) {
+			return new IModuleType[0];
+		}
+	}
+
 	public boolean canCreate() {
-		String a = element.getAttribute("class");
-		return a != null && a.length() > 0;
+		try {
+			String a = element.getAttribute("class");
+			return a != null && a.length() > 0;
+		} catch (Exception e) {
+			return false;
+		}
 	}
 
 	public IRuntimeWorkingCopy createRuntime(String id, IProgressMonitor monitor) {
+		if (element == null)
+			return null;
+		
 		RuntimeWorkingCopy rwc = new RuntimeWorkingCopy(null, id, this);
 		rwc.setDefaults(monitor);
 		return rwc;
 	}
 
+	public void dispose() {
+		element = null;
+	}
+
+	public String getNamespace() {
+		if (element == null)
+			return null;
+		return element.getDeclaringExtension().getNamespace();
+	}
+
 	public String toString() {
 		return "RuntimeType[" + getId() + ", " + getName() + "]";
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java
index a6e9f3b..8f9de4c 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java
@@ -15,11 +15,15 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.core.resources.*;
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
+import org.eclipse.wst.server.core.model.InternalInitializer;
 import org.eclipse.wst.server.core.model.RuntimeDelegate;
 /**
  * 
@@ -190,10 +194,8 @@
 	}
 
 	protected void updateRuntimeReferences(final String oldId, final String newId, final IRuntime origRuntime) {
-		class UpdateRuntimeReferencesJob extends Job {
-			/**
-			 * A job that updates runtime references when a runtime changes.
-			 */
+		// TODO fix me
+		/*class UpdateRuntimeReferencesJob extends Job {
 			public UpdateRuntimeReferencesJob() {
 				super(NLS.bind(Messages.savingTask, newId));
 			}
@@ -239,7 +241,7 @@
 			}
 		}
 		UpdateRuntimeReferencesJob job = new UpdateRuntimeReferencesJob();
-		job.schedule();
+		job.schedule();*/
 	}
 	
 	/**
@@ -252,10 +254,8 @@
 		if (runtime == null)
 			return;
 
-		class RebuildRuntimeReferencesJob extends Job {
-			/**
-			 * A job that rebuilds projects when a runtime changes.
-			 */
+		// TODO fix me
+		/*class RebuildRuntimeReferencesJob extends Job {
 			public RebuildRuntimeReferencesJob() {
 				super(Messages.taskPerforming);
 			}
@@ -286,7 +286,7 @@
 			}
 		}
 		RebuildRuntimeReferencesJob job = new RebuildRuntimeReferencesJob();
-		job.schedule();
+		job.schedule();*/
 	}
 
 	protected RuntimeDelegate getWorkingCopyDelegate(IProgressMonitor monitor) {
@@ -297,9 +297,8 @@
 			if (workingCopyDelegate == null) {
 				try {
 					long time = System.currentTimeMillis();
-					RuntimeType runtimeType2 = (RuntimeType) runtimeType;
-					workingCopyDelegate = (RuntimeDelegate) runtimeType2.getElement().createExecutableExtension("class");
-					workingCopyDelegate.initialize(this);
+					workingCopyDelegate = ((RuntimeType) runtimeType).createRuntimeDelegate();
+					InternalInitializer.initializeRuntimeDelegate(workingCopyDelegate, this, monitor);
 					Trace.trace(Trace.PERFORMANCE, "RuntimeWorkingCopy.getWorkingCopyDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getRuntimeType().getId());
 				} catch (Exception e) {
 					Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), e);
@@ -321,6 +320,8 @@
 	 * @param listener java.beans.PropertyChangeListener
 	 */
 	public void addPropertyChangeListener(PropertyChangeListener listener) {
+		if (listener == null)
+			throw new IllegalArgumentException("Listener cannot be null");
 		wch.addPropertyChangeListener(listener);
 	}
 	
@@ -330,6 +331,8 @@
 	 * @param listener java.beans.PropertyChangeListener
 	 */
 	public void removePropertyChangeListener(PropertyChangeListener listener) {
+		if (listener == null)
+			throw new IllegalArgumentException("Listener cannot be null");
 		wch.removePropertyChangeListener(listener);
 	}
 	
@@ -351,7 +354,7 @@
 	 */
 	protected void setDefaults(IProgressMonitor monitor) {
 		try {
-			getWorkingCopyDelegate(monitor).setDefaults();
+			getWorkingCopyDelegate(monitor).setDefaults(monitor);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate setDefaults() " + toString(), e);
 		}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
index 304b546..b75c51f 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
@@ -12,9 +12,7 @@
 
 import java.util.*;
 
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.debug.core.*;
@@ -37,7 +35,7 @@
 	public static final String ATTR_SERVER_ID = "server-id";
 
 	protected static final List EMPTY_LIST = new ArrayList(0);
-	
+
 	/**
 	 * File extension (value "server") for serialized representation of
 	 * server instances.
@@ -51,14 +49,20 @@
 	 * </p>
 	 */
 	public static final String FILE_EXTENSION = "server";
-	
+
+	public static final int AUTO_PUBLISH_DEFAULT = 0;
+	public static final int AUTO_PUBLISH_DISABLE = 1;
+	public static final int AUTO_PUBLISH_OVERRIDE = 2;
+
 	protected static final String PROP_HOSTNAME = "hostname";
 	protected static final String SERVER_ID = "server-id";
 	protected static final String RUNTIME_ID = "runtime-id";
 	protected static final String CONFIGURATION_ID = "configuration-id";
 	protected static final String MODULE_LIST = "modules";
-	protected static final String PROP_AUTO_PUBLISH_TIME = "auto-publish-time";
-	protected static final String PROP_AUTO_PUBLISH_DEFAULT = "auto-publish-default";
+	protected static final String PROP_DISABLED_PERFERRED_TASKS = "disabled-preferred-publish-tasks";
+	protected static final String PROP_ENABLED_OPTIONAL_TASKS = "enabled-optional-publish-tasks";
+	public static final String PROP_AUTO_PUBLISH_TIME = "auto-publish-time";
+	public static final String PROP_AUTO_PUBLISH_SETTING = "auto-publish-setting";
 
 	protected static final char[] INVALID_CHARS = new char[] {'\\', '/', ':', '*', '?', '"', '<', '>', '|', '\0', '@', '&'};
 
@@ -92,17 +96,21 @@
 		"unknown", "starting", "started", "started_debug",
 		"stopping", "stopped", "started_unsupported", "started_profile"
 	};*/
-	
+
 	// publish listeners
 	protected transient List publishListeners;
-	
+
 	// Server listeners
 	protected transient ServerNotificationManager notificationManager;
-	
+
 	public class AutoPublishThread extends Thread {
 		public boolean stop;
-		public int time = 0; 
-		
+		public int time = 0;
+
+		public AutoPublishThread() {
+			super("Automatic Publishing");
+		}
+
 		public void run() {
 			Trace.trace(Trace.FINEST, "Auto-publish thread starting for " + Server.this + " - " + time + "s");
 			if (stop)
@@ -118,12 +126,24 @@
 				return;
 			
 			Trace.trace(Trace.FINEST, "Auto-publish thread publishing " + Server.this);
-
+			
 			PublishServerJob publishJob = new PublishServerJob(Server.this, IServer.PUBLISH_AUTO, false);
 			publishJob.schedule();
 		}
 	}
 
+	private static final Comparator PUBLISH_OPERATION_COMPARTOR = new Comparator() {
+      public int compare(Object leftOp, Object rightOp) {
+          PublishOperation left = (PublishOperation) leftOp;
+          PublishOperation right = (PublishOperation) rightOp;
+          if (left.getOrder() > right.getOrder())
+              return 1;
+          if (left.getOrder() < right.getOrder())
+              return -1;
+          return 0;
+      }
+	};
+
 	// working copy, loaded resource
 	public Server(IFile file) {
 		super(file);
@@ -184,96 +204,84 @@
 	}
 
 	protected ServerDelegate getDelegate(IProgressMonitor monitor) {
-		if (delegate != null)
+		if (delegate != null || serverType == null)
 			return delegate;
 		
-		if (serverType != null) {
-			synchronized (this) {
-				if (delegate == null) {
-					Job job = new Job("Load delegate") {
-						protected IStatus run(IProgressMonitor monitor2) {
-							try {
-								long time = System.currentTimeMillis();
-								IConfigurationElement element = ((ServerType) serverType).getElement();
-								delegate = (ServerDelegate) element.createExecutableExtension("class");
-								delegate.initialize(Server.this);
-								Trace.trace(Trace.PERFORMANCE, "Server.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
-							} catch (Throwable t) {
-								Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), t);
-							}
-							return new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, "", null);
-						}
-					};
-					job.schedule();
-					try {
-						job.join();
-					} catch (Exception e) {
-						// ignore
-					}
+		synchronized (this) {
+			if (delegate == null) {
+				try {
+					long time = System.currentTimeMillis();
+					delegate = ((ServerType) serverType).createServerDelegate();
+					InternalInitializer.initializeServerDelegate(delegate, Server.this, monitor);
+					Trace.trace(Trace.PERFORMANCE, "Server.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
+				} catch (Throwable t) {
+					Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), t);
 				}
 			}
 		}
 		return delegate;
 	}
-	
+
 	protected ServerBehaviourDelegate getBehaviourDelegate(IProgressMonitor monitor) {
-		if (behaviourDelegate != null)
+		if (behaviourDelegate != null || serverType == null)
 			return behaviourDelegate;
 		
-		if (serverType != null) {
-			synchronized (this) {
-				if (behaviourDelegate == null) {
-					Job job = new Job("Load delegate") {
-						protected IStatus run(IProgressMonitor monitor2) {
-							try {
-								long time = System.currentTimeMillis();
-								IConfigurationElement element = ((ServerType) serverType).getElement();
-								behaviourDelegate = (ServerBehaviourDelegate) element.createExecutableExtension("behaviourClass");
-								behaviourDelegate.initialize(Server.this);
-								Trace.trace(Trace.PERFORMANCE, "Server.getBehaviourDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
-							} catch (Throwable t) {
-								Trace.trace(Trace.SEVERE, "Could not create behaviour delegate " + toString(), t);
-							}
-							return new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, "", null);
-						}
-					};
-					job.schedule();
-					try {
-						job.join();
-					} catch (Exception e) {
-						// ignore
-					}
+		synchronized (this) {
+			if (behaviourDelegate == null) {
+				try {
+					long time = System.currentTimeMillis();
+					behaviourDelegate = ((ServerType) serverType).createServerBehaviourDelegate();
+					InternalInitializer.initializeServerBehaviourDelegate(behaviourDelegate, Server.this, monitor);
+					Trace.trace(Trace.PERFORMANCE, "Server.getBehaviourDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
+				} catch (Throwable t) {
+					Trace.trace(Trace.SEVERE, "Could not create behaviour delegate " + toString(), t);
 				}
 			}
 		}
 		return behaviourDelegate;
 	}
 
-	/**
-	 * Returns true if the delegate has been loaded.
-	 * 
-	 * @return <code>true</code> if the delegate has been loaded, and
-	 *    <code>false</code> otherwise
-	 */
-	public boolean isDelegateLoaded() {
-		return delegate != null;
-	}
-	
 	public void dispose() {
-		if (delegate != null)
+		if (delegate != null) {
 			delegate.dispose();
+			delegate = null;
+		}
+		if (behaviourDelegate != null) {
+			behaviourDelegate.dispose();
+			behaviourDelegate = null;
+		}
 	}
 
 	public String getHost() {
 		return getAttribute(PROP_HOSTNAME, "localhost");
 	}
-	
+
 	public int getAutoPublishTime() {
 		return getAttribute(PROP_AUTO_PUBLISH_TIME, -1);
 	}
 	
-	public boolean getAutoPublishDefault() {
-		return getAttribute(PROP_AUTO_PUBLISH_DEFAULT, true);
+	public int getAutoPublishSetting() {
+		return getAttribute(PROP_AUTO_PUBLISH_SETTING, AUTO_PUBLISH_DEFAULT);
+	}
+
+	/**
+    * Returns a list of id (String) of preferred publish operations that will not be run
+    * during publish.
+    * 
+    * @return a list of publish operation ids
+    */
+	public List getDisabledPreferredPublishOperationIds() {
+		return getAttribute(PROP_DISABLED_PERFERRED_TASKS, EMPTY_LIST);		
+	}
+
+	/**
+    * Returns a list of id (String) of optional publish operations that are enabled to 
+    * be run during publish.
+    * 
+    * @return a list of publish operation ids
+    */
+	public List getEnabledOptionalPublishOperationIds() {
+		return getAttribute(PROP_ENABLED_OPTIONAL_TASKS, EMPTY_LIST);
 	}
 
 	/**
@@ -284,7 +292,7 @@
 	public int getServerState() {
 		return serverState;
 	}
-	
+
 	public String getMode() {
 		return mode;
 	}
@@ -296,17 +304,19 @@
 		this.serverState = state;
 		fireServerStateChangeEvent();
 	}
-	
+
 	/**
 	 * Add a listener to this server.
 	 *
 	 * @param listener org.eclipse.wst.server.model.IServerListener
 	 */
 	public void addServerListener(IServerListener listener) {
+		if (listener == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		Trace.trace(Trace.LISTENERS, "Adding server listener " + listener + " to " + this);
 		getServerNotificationManager().addListener(listener);
 	}
-	
+
 	/**
 	 * Add a listener to this server with the given event mask.
 	 *
@@ -314,6 +324,8 @@
 	 * @param eventMask to limit listening to certain types of events
 	 */
 	public void addServerListener(IServerListener listener, int eventMask) {
+		if (listener == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		Trace.trace(Trace.LISTENERS, "Adding server listener " + listener + " to " + this + " with eventMask " + eventMask);
 		getServerNotificationManager().addListener(listener, eventMask);
 	}
@@ -324,6 +336,8 @@
 	 * @param listener org.eclipse.wst.server.model.IServerListener
 	 */
 	public void removeServerListener(IServerListener listener) {
+		if (listener == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		Trace.trace(Trace.LISTENERS, "Removing server listener " + listener + " from " + this);
 		getServerNotificationManager().removeListener(listener);
 	}
@@ -341,7 +355,7 @@
 			new ServerEvent(ServerEvent.SERVER_CHANGE | ServerEvent.RESTART_STATE_CHANGE, this, getServerState(), 
 				getServerPublishState(), getServerRestartState()));
 	}
-	
+
 	/**
 	 * Fire a server listener state change event.
 	 */
@@ -371,25 +385,35 @@
 	}
 
 	public void setMode(String m) {
+		if (m == mode)
+			return;
+
 		this.mode = m;
+		fireServerStateChangeEvent();
 	}
 
 	public void setModuleState(IModule[] module, int state) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		Integer in = new Integer(state);
 		moduleState.put(getKey(module), in);
 		fireServerModuleStateChangeEvent(module);
 	}
-	
+
 	public void setModulePublishState(IModule[] module, int state) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		Integer in = new Integer(state);
 		modulePublishState.put(getKey(module), in);
-		//fireServerModuleStateChangeEvent(module);
+		fireServerModuleStateChangeEvent(module);
 	}
 
 	public void setModuleRestartState(IModule[] module, boolean r) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		Boolean b = new Boolean(r);
 		moduleState.put(getKey(module), b);
-		//fireServerModuleStateChangeEvent(module);
+		fireServerModuleStateChangeEvent(module);
 	}
 
 	protected void handleModuleProjectChange(final IModule module) {
@@ -402,31 +426,19 @@
 		
 		IModuleVisitor visitor = new IModuleVisitor() {
 			public boolean visit(IModule[] module2) {
+				if (helper.changed)
+					return false;
+				
 				int size = module2.length;
 				IModule m = module2[size - 1];
 				if (m.getProject() == null)
 					return true;
 				
 				if (module.equals(m)) {
-					IModuleResourceDelta[] delta2 = getPublishedResourceDelta(module2);
-					if (delta2.length > 0)
+					if (hasPublishedResourceDelta(module2)) {
 						helper.changed = true;
-					
-					// TODO
-					/*if (deployableDelta[i] == null)
-						deployableDelta[i] = moduleProjects[i].getModuleResourceDelta(delta);
-					
-					if (deployableDelta[i] != null) {
-						// updateDeployable(module, deployableDelta[i]);
-
-						ModulePublishInfo control = PublishInfo.getPublishInfo().getPublishControl(Server.this, parents, module);
-						if (control.isDirty())
-							return true;
-	
-						control.setDirty(true);
-						firePublishStateChange(parents, module);
-					}*/
-					return true;
+						return false;
+					}
 				}
 				return true;
 			}
@@ -437,15 +449,32 @@
 		if (!helper.changed)
 			return;
 		
-		// check for auto-publish
-		if (autoPublishThread != null) {
-			autoPublishThread.stop = true;
-			autoPublishThread.interrupt();
-			autoPublishThread = null;
-		}
+		if (getServerState() != IServer.STATE_STOPPED && behaviourDelegate != null)
+			behaviourDelegate.handleResourceChange();
+		
+		autoPublish();
+		
+		Trace.trace(Trace.FINEST, "< handleDeployableProjectChange()");
+	}
+	
+	protected void stopAutoPublish() {
+		if (autoPublishThread == null)
+			return;
+		
+		autoPublishThread.stop = true;
+		autoPublishThread.interrupt();
+		autoPublishThread = null;
+	}
+
+	/**
+	 * Reset automatic publish thread if it is running and start a new
+	 * thread if automatic publishing is currently enabled.
+	 */
+	protected void autoPublish() {
+		stopAutoPublish();
 		
 		int time = 0;
-		if (getAutoPublishDefault()) {
+		if (getAutoPublishSetting() == AUTO_PUBLISH_DEFAULT) {
 			boolean local = SocketUtil.isLocalhost(getHost());
 			if (local && ServerPreferences.getInstance().getAutoPublishLocal())
 				time = ServerPreferences.getInstance().getAutoPublishLocalTime();
@@ -455,16 +484,14 @@
 			time = getAutoPublishTime();
 		}
 		
-		if (time > 5) {
+		if (time > 9) {
 			autoPublishThread = new AutoPublishThread();
 			autoPublishThread.time = time;
 			autoPublishThread.setPriority(Thread.MIN_PRIORITY + 1);
 			autoPublishThread.start();
 		}
-		
-		//Trace.trace(Trace.FINEST, "< handleDeployableProjectChange()");
 	}
-	
+
 	private ServerNotificationManager getServerNotificationManager() {
 		if (notificationManager == null) {
 			notificationManager = new ServerNotificationManager();
@@ -490,7 +517,7 @@
 		if (state == serverSyncState)
 			return;
 		serverSyncState = state;
-		//fireConfigurationSyncStateChangeEvent();
+		firePublishStateChange();
 	}
 
 	/**
@@ -501,6 +528,8 @@
 	 * @see #removePublishListener(IPublishListener)
 	 */
 	public void addPublishListener(IPublishListener listener) {
+		if (listener == null)
+			throw new IllegalArgumentException("Listener cannot be null");
 		Trace.trace(Trace.LISTENERS, "Adding publish listener " + listener + " to " + this);
 
 		if (publishListeners == null)
@@ -516,6 +545,8 @@
 	 * @see #addPublishListener(IPublishListener)
 	 */
 	public void removePublishListener(IPublishListener listener) {
+		if (listener == null)
+			throw new IllegalArgumentException("Listener cannot be null");
 		Trace.trace(Trace.LISTENERS, "Removing publish listener " + listener + " from " + this);
 
 		if (publishListeners != null)
@@ -577,6 +608,20 @@
 	/**
 	 * Fire a publish state change event.
 	 */
+	protected void firePublishStateChange() {
+		Trace.trace(Trace.FINEST, "->- Firing publish state change event ->-");
+		
+		if (notificationManager == null || notificationManager.hasListenerEntries())
+			return;
+		
+		notificationManager.broadcastChange(
+			new ServerEvent(ServerEvent.SERVER_CHANGE | ServerEvent.PUBLISH_STATE_CHANGE, this, getServerState(), 
+					getServerPublishState(), getServerRestartState()));
+	}
+
+	/**
+	 * Fire a publish state change event.
+	 */
 	protected void firePublishStateChange(IModule[] module) {
 		Trace.trace(Trace.FINEST, "->- Firing publish state change event: " + module + " ->-");
 	
@@ -606,15 +651,15 @@
 	
 		// return true if the configuration can be published
 		if (getServerPublishState() != PUBLISH_STATE_NONE)
-			return new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, Messages.canPublishOk, null);
+			return Status.OK_STATUS;
 
 		// return true if any modules can be published
-		class Temp {
+		/*class Temp {
 			boolean found = false;
-		}
+		}*/
 		//final Temp temp = new Temp();
 		
-		return new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, Messages.canPublishOk, null);
+		return Status.OK_STATUS;
 	
 		/*IModuleVisitor visitor = new IModuleVisitor() {
 			public boolean visit(IModule[] parents, IModule module) {
@@ -668,7 +713,10 @@
 		if (getServerType().hasServerConfiguration() && configuration == null)
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorNoConfiguration, null);
 		
-		if (((ServerType)getServerType()).startBeforePublish()) {
+		// make sure that the delegate is loaded and the server state is correct
+		loadAdapter(ServerBehaviourDelegate.class, monitor);
+		
+		if (((ServerType)getServerType()).startBeforePublish() && (getServerState() == IServer.STATE_STOPPED)) {
 			try {
 				synchronousStart(ILaunchManager.RUN_MODE, monitor);
 			} catch (CoreException ce) {
@@ -677,70 +725,106 @@
 			}
 		}
 		
-		IStatus status = null;
-		try {
-			firePublishStarted();
-			status = doPublish(kind, monitor);
-		} catch (Exception e) {
-			status = null; // TODO
-		} finally {
-			firePublishFinished(status);
-		}
+		firePublishStarted();
+		IStatus status = doPublish(kind, monitor);
+		firePublishFinished(status);
 		return status;
 	}
 
 	protected IStatus doPublish(int kind, IProgressMonitor monitor) {
 		Trace.trace(Trace.FINEST, "-->-- Publishing to server: " + toString() + " -->--");
+		
+		stopAutoPublish();
 
 		try {
 			return getBehaviourDelegate(monitor).publish(kind, monitor);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate publish() " + toString(), e);
-			return null;
+			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e);
 		}
 	}
-	
+
 	/**
 	 * Returns the publish tasks that have been targetted to this server.
 	 * These tasks should be run during publishing.
 	 * 
+	 * @param kind one of the IServer.PUBLISH_XX constants
+	 * @param moduleList a list of modules
+	 * @param kindList one of the IServer publish change constants
 	 * @return a possibly empty array of IOptionalTasks
 	 */
-	public IOptionalTask[] getTasks() {
-		final List moduleList = new ArrayList();
-		
-		IModuleVisitor visitor = new IModuleVisitor() {
-			public boolean visit(IModule[] module) {
-				moduleList.add(module);
-				return true;
-			}
-		};
-
-		visit(visitor, null);
-	
+	public PublishOperation[] getTasks(int kind, List moduleList, List kindList) {
 		List tasks = new ArrayList();
 		
 		String serverTypeId = getServerType().getId();
 		
 		IPublishTask[] publishTasks = ServerPlugin.getPublishTasks();
 		if (publishTasks != null) {
+			List enabledTasks = getEnabledOptionalPublishOperationIds();
+			List disabledTasks = getDisabledPreferredPublishOperationIds();
+			
+			int size = publishTasks.length;
+			for (int i = 0; i < size; i++) {
+				IPublishTask task = publishTasks[i];
+				if (task.supportsType(serverTypeId)) {
+					PublishOperation[] tasks2 = task.getTasks(this, kind, moduleList, kindList);
+					if (tasks2 != null) {
+						int size2 = tasks2.length;
+						for (int j = 0; j < size2; j++) {
+							if (tasks2[j].getKind() == PublishOperation.REQUIRED) {
+								tasks.add(tasks2[j]);
+							} else if (tasks2[j].getKind() == PublishOperation.PREFERRED) {
+								String opId = getPublishOperationId(tasks2[j]);
+								if (!disabledTasks.contains(opId))
+									tasks.add(tasks2[j]);
+							} else if (tasks2[j].getKind() == PublishOperation.OPTIONAL) {
+								String opId = getPublishOperationId(tasks2[j]);
+								if (enabledTasks.contains(opId))
+									tasks.add(tasks2[j]);
+							}
+						}
+					}
+				}
+			}
+		}
+		
+		Collections.sort(tasks, PUBLISH_OPERATION_COMPARTOR);
+		
+		return (PublishOperation[]) tasks.toArray(new PublishOperation[tasks.size()]);
+	}
+	
+	/**
+	 * Returns all publish tasks that have been targetted to this server.
+	 * 
+	 * @param moduleList a list of modules
+	 * @return an array of publish operations
+	 */
+	public PublishOperation[] getAllTasks(List moduleList) {
+		String serverTypeId = getServerType().getId();
+		if (serverTypeId == null)
+			return new PublishOperation[0];
+		
+		List tasks = new ArrayList();
+		
+		IPublishTask[] publishTasks = ServerPlugin.getPublishTasks();
+		if (publishTasks != null) {
 			int size = publishTasks.length;
 			for (int i = 0; i < size; i++) {
 				IPublishTask task = publishTasks[i];
 				if (task.supportsType(serverTypeId)) {
-					IOptionalTask[] tasks2 = task.getTasks(this, moduleList);
-					if (tasks2 != null) {
-						int size2 = tasks2.length;
-						for (int j = 0; j < size2; j++) {
-							if (tasks2[j].getStatus() == IOptionalTask.TASK_MANDATORY)
-								tasks.add(tasks2[j]);
-						}
-					}
+					PublishOperation[] tasks2 = task.getTasks(this, modules);
+					tasks.addAll(Arrays.asList(tasks2));
 				}
 			}
 		}
 		
-		return (IOptionalTask[]) tasks.toArray(new IOptionalTask[tasks.size()]);
+		Collections.sort(tasks, PUBLISH_OPERATION_COMPARTOR);
+		
+		return (PublishOperation[])tasks.toArray(new PublishOperation[tasks.size()]);
+	}
+	
+	public String getPublishOperationId(PublishOperation op) {
+		return getId()+"|"+op.getLabel();
 	}
 	
 	public List getAllModules() {
@@ -748,7 +832,8 @@
 		
 		IModuleVisitor visitor = new IModuleVisitor() {
 			public boolean visit(IModule[] module) {
-				moduleList.add(module);
+				if (!moduleList.contains(module))
+					moduleList.add(module);
 				return true;
 			}
 		};
@@ -764,6 +849,8 @@
 	 * @see ServerBehaviourDelegate.getPublishedResources(IModule[], IModule)
 	 */
 	public IModuleResource[] getPublishedResources(IModule[] module) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		return getServerPublishInfo().getModulePublishInfo(module).getResources();
 	}
 
@@ -774,39 +861,51 @@
 	 * @see ServerBehaviourDelegate.getPublishedResourceDelta(IModule[], IModule)
 	 */
 	public IModuleResourceDelta[] getPublishedResourceDelta(IModule[] module) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		return getServerPublishInfo().getDelta(module);
 	}
-	
+
+	/*
+	 * Returns the delta of the current module resources that have been
+	 * published compared to the current state of the module.
+	 * 
+	 * @see ServerBehaviourDelegate.getPublishedResourceDelta(IModule[], IModule)
+	 */
+	public boolean hasPublishedResourceDelta(IModule[] module) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
+		return getServerPublishInfo().hasDelta(module);
+	}
+
 	/**
 	 * @see IServer#getAdapter(Class)
 	 */
 	public Object getAdapter(Class adapter) {
-		//if (delegate != null) {
-			ServerDelegate delegate2 = getDelegate(null);
-			if (adapter.isInstance(delegate2))
-				return delegate2;
-		//}
-		//if (behaviourDelegate != null) {
-			ServerBehaviourDelegate delegate3 = getBehaviourDelegate(null);
-			if (adapter.isInstance(delegate3))
-				return delegate3;
-		//}
+		if (delegate != null) {
+			if (adapter.isInstance(delegate))
+				return delegate;
+		}
+		if (behaviourDelegate != null) {
+			if (adapter.isInstance(behaviourDelegate))
+				return behaviourDelegate;
+		}
 		return Platform.getAdapterManager().getAdapter(this, adapter);
 	}
-	
+
 	/**
 	 * @see IServer#loadAdapter(Class, IProgressMonitor)
 	 */
 	public Object loadAdapter(Class adapter, IProgressMonitor monitor) {
-		ServerDelegate delegate2 = getDelegate(monitor);
-		if (adapter.isInstance(delegate2))
-			return delegate2;
-
-		ServerBehaviourDelegate delegate3 = getBehaviourDelegate(monitor);
-		if (adapter.isInstance(delegate3))
-			return delegate3;
+		getDelegate(monitor);
+		if (adapter.isInstance(delegate))
+			return delegate;
 		
-		return Platform.getAdapterManager().getAdapter(this, adapter);
+		getBehaviourDelegate(monitor);
+		if (adapter.isInstance(behaviourDelegate))
+			return behaviourDelegate;
+		
+		return Platform.getAdapterManager().loadAdapter(this, adapter.getName());
 	}
 
 	public String toString() {
@@ -828,7 +927,7 @@
 		if (getServerType() == null || !getServerType().supportsLaunchMode(mode2))
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorLaunchMode, null);
 
-		return new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, Messages.canStartOk, null);
+		return Status.OK_STATUS;
 	}
 	
 	public ILaunch getExistingLaunch() {
@@ -854,7 +953,7 @@
 		return null;
 	}
 
-	public void setupLaunchConfiguration(ILaunchConfigurationWorkingCopy workingCopy, IProgressMonitor monitor) throws CoreException {
+	public void setupLaunchConfiguration(ILaunchConfigurationWorkingCopy workingCopy, IProgressMonitor monitor) {
 		try {
 			getBehaviourDelegate(monitor).setupLaunchConfiguration(workingCopy, monitor);
 		} catch (Exception e) {
@@ -862,14 +961,6 @@
 		}
 	}
 
-	public void importConfiguration(IRuntime runtime2, IProgressMonitor monitor) {
-		try {
-			getDelegate(monitor).importConfiguration(runtime2, monitor);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate setLaunchDefaults() " + toString(), e);
-		}
-	}
-
 	/**
 	 * Return the launch configuration for this server. If one does not exist, it
 	 * will be created if "create" is true, and otherwise will return null.
@@ -899,10 +990,36 @@
 				try {
 					String serverId = launchConfigs[i].getAttribute(SERVER_ID, (String) null);
 					if (getId().equals(serverId)) {
-						ILaunchConfigurationWorkingCopy wc = launchConfigs[i].getWorkingCopy();
+						final ILaunchConfigurationWorkingCopy wc = launchConfigs[i].getWorkingCopy();
 						setupLaunchConfiguration(wc, monitor);
-						if (wc.isDirty())
-							return wc.doSave();
+						if (wc.isDirty()) {
+							class Temp {
+								ILaunchConfiguration lc = null;
+							}
+							final Temp temp = new Temp();
+							class SaveLaunchJob extends Job {
+								public SaveLaunchJob() {
+									super(NLS.bind(Messages.savingTask, wc.getName()));
+								}
+
+								public IStatus run(IProgressMonitor monitor2) {
+									try {
+										temp.lc = wc.doSave();
+									} catch (Exception e) {
+										// ignore
+									}
+									return Status.OK_STATUS;
+								}
+							}
+							SaveLaunchJob job = new SaveLaunchJob();
+							job.schedule();
+							try {
+								job.join();
+							} catch (Exception e) {
+								// ignore
+							}
+							return temp.lc;
+						}
 						return launchConfigs[i];
 					}
 				} catch (CoreException e) {
@@ -936,14 +1053,13 @@
 	/**
 	 * @see IServer#start(String, IProgressMonitor)
 	 */
-	public ILaunch start(String mode2, IProgressMonitor monitor) throws CoreException {
+	public void start(String mode2, IProgressMonitor monitor) throws CoreException {
 		Trace.trace(Trace.FINEST, "Starting server: " + toString() + ", launchMode: " + mode2);
 	
 		try {
 			ILaunchConfiguration launchConfig = getLaunchConfiguration(true, monitor);
-			ILaunch launch = launchConfig.launch(mode2, monitor);
+			ILaunch launch = launchConfig.launch(mode2, monitor); // , true); - causes workspace lock
 			Trace.trace(Trace.FINEST, "Launch: " + launch);
-			return launch;
 		} catch (CoreException e) {
 			Trace.trace(Trace.SEVERE, "Error starting server " + toString(), e);
 			throw e;
@@ -985,7 +1101,7 @@
 
 		int state = getServerState();
 		if (state == STATE_STARTED)
-			return new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, Messages.canRestartOk, null);
+			return Status.OK_STATUS;
 		
 		return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorRestartNotStarted, null);
 	}
@@ -1016,9 +1132,9 @@
 	}
 
 	/**
-	 * @see IServer#restart(String)
+	 * @see IServer#restart(String, IProgressMonitor)
 	 */
-	public void restart(final String mode2) {
+	public void restart(final String mode2, final IProgressMonitor monitor) {
 		if (getServerState() == STATE_STOPPED)
 			return;
 	
@@ -1051,7 +1167,7 @@
 										// ignore
 									}
 									try {
-										Server.this.start(mode2, new NullProgressMonitor());
+										Server.this.start(mode2, monitor);
 									} catch (Exception e) {
 										Trace.trace(Trace.SEVERE, "Error while restarting server", e);
 									}
@@ -1073,7 +1189,6 @@
 		}
 	}
 
-
 	/**
 	 * Returns true if the server is in a state that it can
 	 * be stopped.
@@ -1084,7 +1199,7 @@
 		if (getServerState() == STATE_STOPPED)
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorStopAlreadyStopped, null);
 
-		return new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, Messages.canStopOk, null);
+		return Status.OK_STATUS;
 	}
 
 	/**
@@ -1104,9 +1219,9 @@
 	}
 
 	/**
-	 * @see IServer#synchronousStart(String, IProgressMonitor)
+	 * @see IServer#start(String, IOperationListener)
 	 */
-	public ILaunch synchronousStart(String mode2, IProgressMonitor monitor) throws CoreException {
+	public void start(String mode2, IOperationListener listener2) {
 		Trace.trace(Trace.FINEST, "synchronousStart 1");
 		final Object mutex = new Object();
 	
@@ -1139,7 +1254,7 @@
 			boolean alreadyDone;
 		}
 		final Timer timer = new Timer();
-		
+			
 		Thread thread = new Thread() {
 			public void run() {
 				try {
@@ -1159,17 +1274,17 @@
 		};
 		thread.setDaemon(true);
 		thread.start();
-	
+		
 		Trace.trace(Trace.FINEST, "synchronousStart 2");
 	
 		// start the server
-		ILaunch launch;
 		try {
-			launch = start(mode2, monitor);
+			start(mode2, (IProgressMonitor)null);
 		} catch (CoreException e) {
 			removeServerListener(listener);
 			timer.alreadyDone = true;
-			throw e;
+			listener2.done(e.getStatus());
+			return;
 		}
 	
 		Trace.trace(Trace.FINEST, "synchronousStart 3");
@@ -1186,6 +1301,119 @@
 		removeServerListener(listener);
 		timer.alreadyDone = true;
 		
+		if (timer.timeout) {
+			listener2.done(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorStartTimeout, new String[] { getName(), serverTimeout + "" }), null));
+			return;
+		}
+		timer.alreadyDone = true;
+		
+		if (getServerState() == IServer.STATE_STOPPED) {
+			listener2.done(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorStartFailed, getName()), null));
+			return;
+		}
+	
+		Trace.trace(Trace.FINEST, "synchronousStart 4");
+		listener2.done(Status.OK_STATUS);
+	}
+
+	public void synchronousStart(String mode2, IProgressMonitor monitor) throws CoreException {
+		Trace.trace(Trace.FINEST, "synchronousStart 1");
+		final Object mutex = new Object();
+	
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		
+		// add listener to the server
+		IServerListener listener = new IServerListener() {
+			public void serverChanged(ServerEvent event) {
+				int eventKind = event.getKind();
+				IServer server = event.getServer();
+				if (eventKind == (ServerEvent.SERVER_CHANGE | ServerEvent.STATE_CHANGE)) {
+					int state = server.getServerState();
+					if (state == IServer.STATE_STARTED || state == IServer.STATE_STOPPED) {
+						// notify waiter
+						synchronized (mutex) {
+							try {
+								Trace.trace(Trace.FINEST, "synchronousStart notify");
+								mutex.notifyAll();
+							} catch (Exception e) {
+								Trace.trace(Trace.SEVERE, "Error notifying server start", e);
+							}
+						}
+					}
+				}
+			}
+		};
+		addServerListener(listener);
+		
+		final int serverTimeout = ((ServerType) getServerType()).getStartTimeout();
+		class Timer {
+			boolean timeout;
+			boolean alreadyDone;
+		}
+		final Timer timer = new Timer();
+		
+		final IProgressMonitor monitor2 = monitor;
+		Thread thread = new Thread("Synchronous Server Start") {
+			public void run() {
+				try {
+					int totalTimeout = serverTimeout;
+					boolean userCancelled = false;
+					int retryPeriod = 2500;
+					while (totalTimeout > 0 && !userCancelled && !timer.alreadyDone) {
+						Thread.sleep(retryPeriod);
+						totalTimeout -= retryPeriod;
+						if (monitor2.isCanceled()) {
+							// user cancelled - set the server state to stopped
+							userCancelled = true;
+							setServerState(IServer.STATE_STOPPED);
+							// notify waiter
+							synchronized (mutex) {
+								Trace.trace(Trace.FINEST, "synchronousStart user cancelled.");
+								mutex.notifyAll();
+							}
+						}
+					}
+					if (!userCancelled && !timer.alreadyDone) {
+						timer.timeout = true;
+						// notify waiter
+						synchronized (mutex) {
+							Trace.trace(Trace.FINEST, "synchronousStart notify timeout");
+							mutex.notifyAll();
+						}
+					}
+				} catch (Exception e) {
+					Trace.trace(Trace.SEVERE, "Error notifying server start timeout", e);
+				}
+			}
+		};
+		thread.setDaemon(true);
+		thread.start();
+	
+		Trace.trace(Trace.FINEST, "synchronousStart 2");
+	
+		// start the server
+		try {
+			start(mode2, monitor);
+		} catch (CoreException e) {
+			removeServerListener(listener);
+			timer.alreadyDone = true;
+			throw e;
+		}
+	
+		Trace.trace(Trace.FINEST, "synchronousStart 3");
+	
+		// wait for it! wait for it! ...
+		synchronized (mutex) {
+			try {
+				while (!monitor.isCanceled() && !timer.timeout && !(getServerState() == IServer.STATE_STARTED || getServerState() == IServer.STATE_STOPPED))
+					mutex.wait();
+			} catch (Exception e) {
+				Trace.trace(Trace.SEVERE, "Error waiting for server start", e);
+			}
+		}
+		removeServerListener(listener);
+		timer.alreadyDone = true;
+		
 		if (timer.timeout)
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorStartTimeout, new String[] { getName(), serverTimeout + "" }), null));
 		timer.alreadyDone = true;
@@ -1194,8 +1422,6 @@
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorStartFailed, getName()), null));
 	
 		Trace.trace(Trace.FINEST, "synchronousStart 4");
-		
-		return launch;
 	}
 
 	/*
@@ -1205,6 +1431,164 @@
 		synchronousStop(true);
 		synchronousStart(mode2, monitor);
 	}
+	
+	/*
+	 * @see IServer#restart(String, IOperationListener)
+	 */
+	public void restart(String mode2, IOperationListener listener) {
+		if (getServerState() == STATE_STOPPED)
+			return;
+	
+		Trace.trace(Trace.FINEST, "Restarting server: " + getName());
+	
+		try {
+			final IOperationListener listener2 = listener;
+			IServerListener curListener = new IServerListener() {
+				public void serverChanged(ServerEvent event) {
+					int eventKind = event.getKind();
+					IServer server = event.getServer();
+					if (eventKind == (ServerEvent.SERVER_CHANGE | ServerEvent.STATE_CHANGE)) {
+						if (server.getServerState() == STATE_STARTED) {
+							server.removeServerListener(this);
+							listener2.done(Status.OK_STATUS);
+						}
+					}
+				}
+			};
+			try {
+				addServerListener(curListener);
+				getBehaviourDelegate(null).restart(mode2);
+				return;
+			} catch (CoreException ce) {
+				Trace.trace(Trace.SEVERE, "Error calling delegate restart() " + toString());
+				removeServerListener(curListener);
+			}
+		
+			final String mode3 = mode2;
+			// add listener to start it as soon as it is stopped
+			addServerListener(new IServerListener() {
+				public void serverChanged(ServerEvent event) {
+					int eventKind = event.getKind();
+					IServer server = event.getServer();
+					if (eventKind == (ServerEvent.SERVER_CHANGE | ServerEvent.STATE_CHANGE)) {
+						if (server.getServerState() == STATE_STOPPED) {
+							server.removeServerListener(this);
+
+							// restart in a quarter second (give other listeners a chance
+							// to hear the stopped message)
+							Thread t = new Thread() {
+								public void run() {
+									try {
+										Thread.sleep(250);
+									} catch (Exception e) {
+										// ignore
+									}
+									try {
+										Server.this.start(mode3, listener2);
+									} catch (Exception e) {
+										Trace.trace(Trace.SEVERE, "Error while restarting server", e);
+									}
+								}
+							};
+							t.setDaemon(true);
+							t.setPriority(Thread.NORM_PRIORITY - 2);
+							t.start();
+						}
+					}
+					
+				}
+			});
+	
+			// stop the server
+			stop(false);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error restarting server", e);
+			listener.done(null);
+		}
+	}
+	
+	/*
+	 * @see IServer#stop(boolean, IOperationListener)
+	 */
+	public void stop(boolean force, IOperationListener listener2) {
+		if (getServerState() == IServer.STATE_STOPPED)
+			return;
+		
+		final Object mutex = new Object();
+	
+		// add listener to the server
+		IServerListener listener = new IServerListener() {
+			public void serverChanged(ServerEvent event) {
+				int eventKind = event.getKind();
+				IServer server = event.getServer();
+				if (eventKind == (ServerEvent.SERVER_CHANGE | ServerEvent.STATE_CHANGE)) {
+					int state = server.getServerState();
+					if (Server.this == server && state == IServer.STATE_STOPPED) {
+						// notify waiter
+						synchronized (mutex) {
+							try {
+								mutex.notifyAll();
+							} catch (Exception e) {
+								Trace.trace(Trace.SEVERE, "Error notifying server stop", e);
+							}
+						}
+					}
+				}
+			}
+		};
+		addServerListener(listener);
+		
+		class Timer {
+			boolean timeout;
+			boolean alreadyDone;
+		}
+		final Timer timer = new Timer();
+		
+		Thread thread = new Thread() {
+			public void run() {
+				try {
+					Thread.sleep(120000);
+					if (!timer.alreadyDone) {
+						timer.timeout = true;
+						// notify waiter
+						synchronized (mutex) {
+							Trace.trace(Trace.FINEST, "stop notify timeout");
+							mutex.notifyAll();
+						}
+					}
+				} catch (Exception e) {
+					Trace.trace(Trace.SEVERE, "Error notifying server stop timeout", e);
+				}
+			}
+		};
+		thread.setDaemon(true);
+		thread.start();
+	
+		// stop the server
+		stop(force);
+	
+		// wait for it! wait for it!
+		synchronized (mutex) {
+			try {
+				while (!timer.timeout && getServerState() != IServer.STATE_STOPPED)
+					mutex.wait();
+			} catch (Exception e) {
+				Trace.trace(Trace.SEVERE, "Error waiting for server stop", e);
+			}
+		}
+		removeServerListener(listener);
+		
+		/*
+		//can't throw exceptions
+		if (timer.timeout)
+			throw new CoreException(new Status(IStatus.ERROR, ServerCore.PLUGIN_ID, 0, ServerPlugin.getResource("%errorStartFailed", getName()), null));
+		else
+			timer.alreadyDone = true;
+		
+		if (getServerState() == IServer.STATE_STOPPED)
+			throw new CoreException(new Status(IStatus.ERROR, ServerCore.PLUGIN_ID, 0, ServerPlugin.getResource("%errorStartFailed", getName()), null));*/
+		listener2.done(Status.OK_STATUS);
+	}
 
 	/*
 	 * @see IServer#synchronousStop()
@@ -1288,13 +1672,13 @@
 			throw new CoreException(new Status(IStatus.ERROR, ServerCore.PLUGIN_ID, 0, ServerPlugin.getResource("%errorStartFailed", getName()), null));*/
 	}
 	
-	/**
+	/*
 	 * Trigger a restart of the given module and wait until it has finished restarting.
 	 *
 	 * @param module org.eclipse.wst.server.core.IModule
 	 * @param monitor org.eclipse.core.runtime.IProgressMonitor
 	 * @exception org.eclipse.core.runtime.CoreException - thrown if an error occurs while trying to restart the module
-	 */
+	 *
 	public void synchronousRestartModule(final IModule[] module, IProgressMonitor monitor) throws CoreException {
 		Trace.trace(Trace.FINEST, "synchronousModuleRestart 1");
 
@@ -1380,7 +1764,7 @@
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorModuleRestartFailed, getName()), null));
 	
 		Trace.trace(Trace.FINEST, "synchronousModuleRestart 4");
-	}
+	}*/
 
 	public IPath getTempDirectory() {
 		return ServerPlugin.getInstance().getTempDirectory(getId());
@@ -1389,19 +1773,11 @@
 	protected String getXMLRoot() {
 		return "server";
 	}
-	
+
 	protected void loadState(IMemento memento) {
-		/*String serverTypeId = memento.getString("server-type-id");
-		serverType = ServerCore.getServerType(serverTypeId);
-		
-		String runtimeId = memento.getString("runtime-id");
-		runtime = ServerCore.getResourceManager().getRuntime(runtimeId);
-		
-		String configurationId = memento.getString("configuration-id");
-		configuration = ServerCore.getResourceManager().getServerConfiguration(configurationId);*/
 		resolve();
 	}
-	
+
 	protected void resolve() {
 		IServerType oldServerType = serverType;
 		String serverTypeId = getAttribute("server-type-id", (String)null);
@@ -1423,7 +1799,7 @@
 	}
 
 	protected void setInternal(ServerWorkingCopy wc) {
-		map = wc.map;
+		map = new HashMap(wc.map);
 		configuration = wc.configuration;
 		runtime = wc.runtime;
 		serverSyncState = wc.serverSyncState;
@@ -1434,6 +1810,8 @@
 		// can never modify the following properties via the working copy
 		//serverState = wc.serverState;
 		delegate = wc.delegate;
+		
+		autoPublish();
 	}
 
 	protected void saveState(IMemento memento) {
@@ -1463,11 +1841,21 @@
 	 * @see org.eclipse.wst.server.core.IServerConfiguration#canModifyModule(org.eclipse.wst.server.core.model.IModule)
 	 */
 	public IStatus canModifyModules(IModule[] add, IModule[] remove, IProgressMonitor monitor) {
+		if ((add == null || add.length == 0) && (remove == null || remove.length == 0))
+			throw new IllegalArgumentException("Add and remove cannot both be null/empty");
+		
+		if (add != null && add.length > 0) {
+			int size = add.length;
+			for (int i = 0; i < size; i++)
+				if (!ServerUtil.isSupportedModule(getServerType().getRuntimeType().getModuleTypes(), add[i].getModuleType()))
+					return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorCannotAddModule, null);
+		}
+		
 		try {
 			return getDelegate(monitor).canModifyModules(add, remove);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate canModifyModules() " + toString(), e);
-			return null;
+			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, "", null);
 		}
 	}
 
@@ -1484,25 +1872,20 @@
 			modules = new ArrayList(list.size() + 1);
 			Iterator iterator = list.iterator();
 			while (iterator.hasNext()) {
-				String moduleStr = (String) iterator.next();
-				IModule module = ServerUtil.getModule(moduleStr);
+				String moduleId = (String) iterator.next();
+				String name = "<unknown>";
+				int index = moduleId.indexOf("::");
+				if (index > 0) {
+					name = moduleId.substring(0, index);
+					moduleId = moduleId.substring(index+2);
+				}
+				
+				IModule module = ServerUtil.getModule(moduleId);
+				if (module == null)
+					module = new DeletedModule(moduleId, name);
 				if (module != null)
 					modules.add(module);
 			}
-		} else {
-			// verify modules are still available
-			List remove = new ArrayList();
-			Iterator iterator = modules.iterator();
-			while (iterator.hasNext()) {
-				IModule module = (IModule) iterator.next();
-				if (ServerUtil.getModule(module.getId()) == null)
-					remove.add(module);
-			}
-			
-			iterator = remove.iterator();
-			while (iterator.hasNext()) {
-				modules.remove(iterator.next());
-			}
 		}
 		
 		IModule[] modules2 = new IModule[modules.size()];
@@ -1514,6 +1897,8 @@
 	 * @see org.eclipse.wst.server.core.IServer#getModuleState()
 	 */
 	public int getModuleState(IModule[] module) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			Integer in = (Integer) moduleState.get(getKey(module));
 			if (in != null)
@@ -1528,6 +1913,8 @@
 	 * @see org.eclipse.wst.server.core.IServer#getModuleState()
 	 */
 	public int getModulePublishState(IModule[] module) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			Integer in = (Integer) modulePublishState.get(getKey(module));
 			if (in != null)
@@ -1542,8 +1929,13 @@
 	 * @see IServer#getChildModule(IModule[])
 	 */
 	public IModule[] getChildModules(IModule[] module, IProgressMonitor monitor) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
-			return getDelegate(monitor).getChildModules(module);
+			IModule[] children = getDelegate(monitor).getChildModules(module);
+			if (children != null && children.length == 1 && children[0].equals(module[module.length - 1]))
+				return null;
+			return children;
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate getChildModules() " + toString(), e);
 			return null;
@@ -1554,6 +1946,8 @@
 	 * @see IServer#getRootModules(IModule)
 	 */
 	public IModule[] getRootModules(IModule module, IProgressMonitor monitor) throws CoreException {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			return getDelegate(monitor).getRootModules(module);
 		} catch (CoreException se) {
@@ -1565,18 +1959,6 @@
 		}
 	}
 	
-	/*
-	 * 
-	 */
-	/*public boolean hasRuntime() {
-		try {
-			return getDelegate().requiresRuntime();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate requiresRuntime() " + toString(), e);
-			return false;
-		}
-	}*/
-	
 	/**
 	 * Returns whether the given module can be restarted.
 	 *
@@ -1585,11 +1967,13 @@
 	 * @return <code>true</code> if the given module can be
 	 *    restarted, and <code>false</code> otherwise
 	 */
-	public IStatus canRestartModule(IModule[] module, IProgressMonitor monitor) {
+	public IStatus canControlModule(IModule[] module, IProgressMonitor monitor) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
-			boolean b = getBehaviourDelegate(monitor).canRestartModule(module);
+			boolean b = getBehaviourDelegate(monitor).canControlModule(module);
 			if (b)
-				return new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, Messages.canRestartModuleOk, null);
+				return Status.OK_STATUS;
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate canRestartRuntime() " + toString(), e);
 		}
@@ -1605,6 +1989,8 @@
 	 * @return boolean
 	 */
 	public boolean getModuleRestartState(IModule[] module) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			Boolean b = (Boolean) moduleRestartState.get(getKey(module));
 			if (b != null)
@@ -1616,11 +2002,40 @@
 	}
 
 	/*
-	 * @see IServer#restartModule(IModule[], IProgressMonitor)
+	 * @see IServer#startModule(IModule[], IOperationListener)
 	 */
-	public void restartModule(IModule[] module, IProgressMonitor monitor) throws CoreException {
+	public void startModule(IModule[] module, IOperationListener listener) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
-			getBehaviourDelegate(monitor).restartModule(module, monitor);
+			getBehaviourDelegate(null).startModule(module, null);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error calling delegate restartModule() " + toString(), e);
+		}
+	}
+	
+	/*
+	 * @see IServer#stopModule(IModule[], IOperationListener)
+	 */
+	public void stopModule(IModule[] module, IOperationListener listener) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
+		try {
+			getBehaviourDelegate(null).stopModule(module, null);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error calling delegate restartModule() " + toString(), e);
+		}
+	}
+	
+	/*
+	 * @see IServer#restartModule(IModule[], IOperationListener, IProgressMonitor)
+	 */
+	public void restartModule(IModule[] module, IOperationListener listener) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
+		try {
+			getBehaviourDelegate(null).stopModule(module, null);
+			getBehaviourDelegate(null).startModule(module, null);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate restartModule() " + toString(), e);
 		}
@@ -1649,6 +2064,8 @@
 	 *    reporting and cancellation are not desired
 	 */
 	public void visit(IModuleVisitor visitor, IProgressMonitor monitor) {
+		if (visitor == null)
+			throw new IllegalArgumentException("Visitor cannot be null");
 		IModule[] modules2 = getModules();
 		if (modules2 != null) { 
 			int size = modules2.length;
@@ -1687,8 +2104,8 @@
 		
 		return true;
 	}
-	
-	private String getKey(IModule[] module) {
+
+	protected String getKey(IModule[] module) {
 		StringBuffer sb = new StringBuffer();
 		
 		if (module != null) {
@@ -1702,26 +2119,69 @@
 		
 		return sb.toString();
 	}
-	
+
 	public void setModuleStatus(IModule[] module, IStatus status) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		moduleStatus.put(getKey(module), status);
 		//fireServerModuleStateChangeEvent(module);
 	}
 	
 	public IStatus getModuleStatus(IModule[] module) {
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			return (IStatus) moduleStatus.get(getKey(module));
 		} catch (Exception e) {
 			return null;
 		}
 	}
-	
+
 	public void setServerStatus(IStatus status) {
 		serverStatus = status;
 		//fireServerStateChangeEvent();
 	}
-	
+
 	public IStatus getServerStatus() {
 		return serverStatus;
 	}
+
+	/**
+	 * Switch the server's location between the workspace and .metadata.
+	 * 
+	 * @param server a server
+	 * @param monitor a progress monitor
+	 * @throws CoreException if something goes wrong
+	 */
+	public static void switchLocation(Server server, IProgressMonitor monitor) throws CoreException {
+		IFile file = server.getFile();
+		ServerWorkingCopy wc = (ServerWorkingCopy) server.createWorkingCopy();
+		server.delete();
+		if (file == null) {
+			IProject project = ServerType.getServerProject();
+			file = ServerUtil.getUnusedServerFile(project, wc);
+			wc.setFile(file);
+			server.file = file;
+		} else {
+			wc.setFile(null);
+			server.file = null;
+		}
+		wc.save(true, monitor);
+	}
+
+	/**
+	 * Returns the current state of the server (see SERVER_XXX constants) after
+	 * refreshing the state of the server. The only difference between this method
+	 * and the method without a progress monitor is that this method may cause
+	 * plugin loading and not return immediately. However, the server will always
+	 * be updated and in sync, so the IServer.STATE_UNKNOWN state should never be
+	 * returned.
+	 * 
+	 * @param monitor
+	 * @return the server state
+	 */
+	public int getServerState(IProgressMonitor monitor) {
+		loadAdapter(ServerBehaviourDelegate.class, monitor);
+		return getServerState();
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java
index 40450f6..38f2d4a 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java
@@ -18,8 +18,6 @@
 import org.eclipse.wst.server.core.ServerEvent;
 /**
  * Notification manager for server.
- * 
- * @since 1.0
  */
 public class ServerNotificationManager {
 	private List listenerList = new ArrayList();
@@ -38,31 +36,37 @@
 			eventMask = curEventMask;
 		}
 		
-		IServerListener getListener() {
+		protected IServerListener getListener() {
 			return listener;
 		}
 		
-		int getEventMask() {
+		protected int getEventMask() {
 			return eventMask;
 		}
 	}
 
 	/**
-	 * LaunchableClient constructor comment.
+	 * Create a new notification manager.
 	 */
 	public ServerNotificationManager() {
 		super();
 	}
 
-
 	/**
 	 * Add listener for all events.
+	 * 
 	 * @param curListener
 	 */
 	public void addListener(IServerListener curListener) {
 		addListener(curListener, ALL_EVENTS);
 	}
 	
+	/**
+	 * Add listener for the events specified by the mask.
+	 * 
+	 * @param curListener
+	 * @param eventMask
+	 */
 	public void addListener(IServerListener curListener, int eventMask) {
 		Trace.trace(Trace.FINEST, "->- Adding server listener to notification manager: " + curListener + " " + eventMask + " ->-");
 		if (curListener == null) {
@@ -73,8 +77,8 @@
 			listenerList.add(new ListenerEntry(curListener, eventMask));
 		}
 	}
-	
-	public void broadcastChange(ServerEvent event) {
+
+	protected void broadcastChange(ServerEvent event) {
 		Trace.trace(Trace.FINEST, "->- Broadcasting server event: " + event + " ->-");
 		if (event == null) {
 			return;
@@ -82,16 +86,23 @@
 		int eventKind = event.getKind();
 		Trace.trace(Trace.FINEST, "  Server event kind: " + eventKind + " ->-");
 		
-		// Only notify listeners that listen to module event.
-		Iterator listenerIter = listenerList.iterator();
-		while (listenerIter.hasNext()) {
-			ListenerEntry curEntry = (ListenerEntry)listenerIter.next();
+		// only notify listeners that listen to module event
+		int size;
+		ListenerEntry[] listeners;
+		synchronized (listenerList) {
+			size = listenerList.size();
+			listeners = (ListenerEntry[]) listenerList.toArray(new ListenerEntry[size]);
+		}
+		for (int i = 0; i < size; i++) {
+			ListenerEntry curEntry = listeners[i];
 			int mask = curEntry.getEventMask();
-			// Check if the type of the event matches the mask, e.g. server or module change.
+
+			// check if the type of the event matches the mask, e.g. server or module change
 			boolean isTypeMatch = ((mask & eventKind & ServerEvent.SERVER_CHANGE) != 0) 
-														|| ((mask & eventKind & ServerEvent.MODULE_CHANGE) != 0);
-			// Check the kind of change.
+					|| ((mask & eventKind & ServerEvent.MODULE_CHANGE) != 0);
+			// check the kind of change
 			boolean isKindMatch = (mask & eventKind ^ ServerEvent.SERVER_CHANGE ^ ServerEvent.MODULE_CHANGE) != 0;
+			
 			if (isTypeMatch && isKindMatch) {
 				Trace.trace(Trace.FINEST, "->- Firing server event to listener: " + curEntry.getListener() + " ->-");
 				try {
@@ -107,13 +118,19 @@
 	}
 	
 	/**
+	 * Returns true if the listener list is not empty; otherwise, returns false.
 	 * 
-	 * @return true if the listener list is not empty; otherwise, returns false.
+	 * @return true if the listener list is not empty; otherwise, returns false
 	 */
-	public boolean hasListenerEntries() {
+	protected boolean hasListenerEntries() {
 		return listenerList.size() == 0;
 	}
 	
+	/**
+	 * Remove a listener from notification.
+	 * 
+	 * @param curListener
+	 */
 	public void removeListener(IServerListener curListener) {
 		Trace.trace(Trace.FINEST, "->- Removing server listener from notification manager: " + curListener + " ->-");
 		if (curListener == null) {
@@ -133,4 +150,4 @@
 			}
 		}
 	}
-}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
index 3e4c94e..3c6fe33 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
@@ -14,25 +14,33 @@
 import java.util.*;
 import java.text.DateFormat;
 
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.IModuleArtifact;
+import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.ServerCore;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.BundleListener;
 /**
  * The main server plugin class.
  */
 public class ServerPlugin extends Plugin {
 	public static final String PROJECT_PREF_FILE = ".serverPreference";
-	
+
+	private static final String SHUTDOWN_JOB_FAMILY = "org.eclipse.wst.server.core.family";
+
 	protected static final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
 	protected static int num = 0;
-	
+
 	// cached copy of all launchable adapters
 	private static List launchableAdapters;
 
 	// cached copy of all launchable clients
 	private static List clients;
-	
+
 	// cached copy of all module factories
 	private static List moduleFactories;
 
@@ -41,16 +49,30 @@
 
 	// cached copy of all publish tasks
 	private static List publishTasks;
-	
+
 	//	cached copy of all server monitors
 	private static List monitors;
-	
+
 	//	cached copy of all runtime locators
 	private static List runtimeLocators;
-	
+
 	// cached copy of all module artifact adapters
 	private static List moduleArtifactAdapters;
 
+	//	cached copy of all installable servers
+	private static List installableServers;
+
+	//	cached copy of all installable runtimes
+	private static List installableRuntimes;
+
+	// registry listener
+	private static IRegistryChangeListener registryListener;
+	
+	public static BundleContext bundleContext;
+
+	// bundle listener
+	private BundleListener bundleListener;
+
 	private static final String TEMP_DATA_FILE = "tmp-data.xml";
 
 	class TempDir {
@@ -228,7 +250,7 @@
 			Trace.trace(Trace.SEVERE, "Could not save temporary directory information", e);
 		}
 	}
-	
+
 	protected void initializeDefaultPluginPreferences() {
 		ServerPreferences.getInstance().setDefaults();
 	}
@@ -239,11 +261,44 @@
 	public void start(BundleContext context) throws Exception {
 		Trace.trace(Trace.CONFIG, "----->----- Server Core plugin startup ----->-----");
 		super.start(context);
+		bundleContext = context;
 		
 		initializeDefaultPluginPreferences();
 
 		// load temp directory information
 		loadTempDirInfo();
+		
+		bundleListener = new BundleListener() {
+			public void bundleChanged(BundleEvent event) {
+				String bundleId = event.getBundle().getSymbolicName();
+				//System.out.println(event.getType() + " " + bundleId);
+				// TODO should also look for UNINSTALLED and UNRESOLVED
+				if (BundleEvent.STOPPED == event.getType() && ResourceManager.getInstance().isActiveBundle(bundleId))
+					stopBundle(bundleId);
+			}
+		};
+		context.addBundleListener(bundleListener);
+	}
+
+	protected void stopBundle(final String bundleId) {
+		class StopJob extends Job {
+			public StopJob() {
+				super("Disposing servers");
+			}
+			
+			public boolean belongsTo(Object family) {
+				return SHUTDOWN_JOB_FAMILY.equals(family);
+			}
+
+			public IStatus run(IProgressMonitor monitor2) {
+				ResourceManager.getInstance().shutdownBundle(bundleId);
+				return Status.OK_STATUS;
+			}
+		}
+		
+		StopJob job = new StopJob();
+		job.setUser(false);
+		job.schedule();
 	}
 
 	/**
@@ -253,8 +308,18 @@
 		Trace.trace(Trace.CONFIG, "-----<----- Server Core plugin shutdown -----<-----");
 		super.stop(context);
 		
+		if (registryListener != null)
+			Platform.getExtensionRegistry().removeRegistryChangeListener(registryListener);
+		
 		ResourceManager.shutdown();
 		ServerMonitorManager.shutdown();
+		
+		try {
+			Platform.getJobManager().join(SHUTDOWN_JOB_FAMILY, null);
+		} catch (Exception e) {
+			Trace.trace(Trace.WARNING, "Error waiting for shutdown job", e);
+		}
+		context.removeBundleListener(bundleListener);
 	}
 
 	public static String[] tokenize(String param, String delim) {
@@ -440,6 +505,20 @@
 				Trace.trace(Trace.SEVERE, "  Could not load clients: " + cf[i].getAttribute("id"), t);
 			}
 		}
+		
+		// sort by index to put lower numbers first in order
+		size = clients.size();
+		for (int i = 0; i < size-1; i++) {
+			for (int j = i+1; j < size; j++) {
+				Client a = (Client) clients.get(i);
+				Client b = (Client) clients.get(j);
+				if (a.getPriority() < b.getPriority()) {
+					clients.set(i, b);
+					clients.set(j, a);
+				}
+			}
+		}
+		
 		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .clients extension point -<-");
 	}
 	
@@ -480,8 +559,6 @@
 			}
 		}
 		
-		sortOrderedList(publishTasks);
-		
 		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .publishTasks extension point -<-");
 	}
 	
@@ -773,7 +850,7 @@
 	 * @return <code>true</code> if there is a module artifact adapter
 	 */
 	public static boolean hasModuleArtifact(Object obj) {
-		Trace.trace(Trace.FINEST, "ServerUIPlugin.hasModuleArtifact() " + obj);
+		Trace.trace(Trace.FINEST, "ServerPlugin.hasModuleArtifact() " + obj);
 		ModuleArtifactAdapter[] adapters = getModuleArtifactAdapters();
 		if (adapters != null) {
 			int size = adapters.length;
@@ -799,7 +876,7 @@
 	 * @return a module artifact, or null
 	 */
 	public static IModuleArtifact getModuleArtifact(Object obj) {
-		Trace.trace(Trace.FINEST, "ServerUIPlugin.getModuleArtifact() " + obj);
+		Trace.trace(Trace.FINEST, "ServerPlugin.getModuleArtifact() " + obj);
 		ModuleArtifactAdapter[] adapters = getModuleArtifactAdapters();
 		if (adapters != null) {
 			int size = adapters.length;
@@ -829,7 +906,7 @@
 	 * @return a module artifact, or null
 	 */
 	public static IModuleArtifact loadModuleArtifact(Object obj) {
-		Trace.trace(Trace.FINEST, "ServerUIPlugin.loadModuleArtifact() " + obj);
+		Trace.trace(Trace.FINEST, "ServerPlugin.loadModuleArtifact() " + obj);
 		ModuleArtifactAdapter[] adapters = getModuleArtifactAdapters();
 		if (adapters != null) {
 			int size = adapters.length;
@@ -851,4 +928,151 @@
 		
 		return null;
 	}
+	
+	/**
+	 * Returns an array of all known installable servers.
+	 * <p>
+	 * A new array is returned on each call, so clients may store or modify the result.
+	 * </p>
+	 * 
+	 * @return the array of installable servers {@link IInstallableServer}
+	 */
+	public static IInstallableServer[] getInstallableServers() {
+		if (installableServers == null)
+			loadInstallableServers();
+		
+		List availableServers = new ArrayList();
+		Iterator iterator = installableServers.iterator();
+		IRuntimeType[] runtimeTypes = ServerCore.getRuntimeTypes();
+		int size = runtimeTypes.length;
+		while (iterator.hasNext()) {
+			IInstallableServer server = (IInstallableServer) iterator.next();
+			boolean found = false;
+			for (int i = 0; i < size; i++) {
+				if (server.getId().equals(runtimeTypes[i].getId()))
+					found = true;
+			}
+			if (!found)
+				availableServers.add(server);
+		}
+		
+		IInstallableServer[] is = new IInstallableServer[availableServers.size()];
+		availableServers.toArray(is);
+		return is;
+	}
+
+	/**
+	 * Returns an array of all known installable runtimes.
+	 * <p>
+	 * A new array is returned on each call, so clients may store or modify the result.
+	 * </p>
+	 * 
+	 * @return the array of installable runtimes {@link IInstallableRuntime}
+	 */
+	public static IInstallableRuntime[] getInstallableRuntimes() {
+		if (installableRuntimes == null)
+			loadInstallableRuntimes();
+		
+		IInstallableRuntime[] ir = new IInstallableRuntime[installableRuntimes.size()];
+		installableRuntimes.toArray(ir);
+		return ir;
+	}
+
+	/**
+	 * Returns the installable runtime for the given runtime type, or <code>null</code>
+	 * if none exists.
+	 * 
+	 * @param runtimeTypeId a runtime type id
+	 * @return the installable runtime for the given runtime type, or <code>null</code>
+	 *    if none exists {@link IInstallableRuntime}
+	 */
+	public static IInstallableRuntime findInstallableRuntime(String runtimeTypeId) {
+		if (runtimeTypeId == null)
+			throw new IllegalArgumentException();
+		
+		if (installableRuntimes == null)
+			loadInstallableRuntimes();
+		
+		Iterator iterator = installableRuntimes.iterator();
+		IRuntimeType[] runtimeTypes = ServerCore.getRuntimeTypes();
+		int size = runtimeTypes.length;
+		while (iterator.hasNext()) {
+			IInstallableRuntime runtime = (IInstallableRuntime) iterator.next();
+			for (int i = 0; i < size; i++) {
+				if (runtime.getId().equals(runtimeTypeId))
+					return runtime;
+			}
+		}
+		
+		return null;
+	}
+
+	/**
+	 * Load the installable servers.
+	 */
+	private static synchronized void loadInstallableServers() {
+		if (installableServers != null)
+			return;
+		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .installableServers extension point ->-");
+		
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "installableServers");
+		
+		int size = cf.length;
+		installableServers = new ArrayList(size);
+		for (int i = 0; i < size; i++) {
+			try {
+				InstallableServer is = new InstallableServer(cf[i]);
+				installableServers.add(is);
+				Trace.trace(Trace.EXTENSION_POINT, "  Loaded installableServer: " + cf[i].getAttribute("id"));
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "  Could not load installableServer: " + cf[i].getAttribute("id"), t);
+			}
+		}
+		
+		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .installableServers extension point -<-");
+	}
+
+	/**
+	 * Load the installable runtimes.
+	 */
+	private static synchronized void loadInstallableRuntimes() {
+		if (installableRuntimes != null)
+			return;
+		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .installableRuntimes extension point ->-");
+		
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "installableRuntimes");
+		
+		int size = cf.length;
+		installableRuntimes = new ArrayList(size);
+		for (int i = 0; i < size; i++) {
+			try {
+				InstallableRuntime ir = new InstallableRuntime(cf[i]);
+				installableRuntimes.add(ir);
+				Trace.trace(Trace.EXTENSION_POINT, "  Loaded installableRuntime: " + cf[i].getAttribute("id"));
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "  Could not load installableRuntime: " + cf[i].getAttribute("id"), t);
+			}
+		}
+		
+		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .installableRuntimes extension point -<-");
+	}
+
+	public static void setRegistryListener(IRegistryChangeListener listener) {
+		registryListener = listener; 
+	}
+
+	/**
+	 * Returns the preference information for the project. The project may not
+	 * be null.
+	 * 
+	 * @param project a project
+	 * @return the properties of the project
+	 */
+	public static ProjectProperties getProjectProperties(IProject project) {
+		if (project == null)
+			throw new IllegalArgumentException();
+		return new ProjectProperties(project);
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java
index 09634fc..3a0002b 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java
@@ -17,7 +17,6 @@
 public class ServerPreferences {
 	private static final String PREF_AUTO_RESTART = "auto-restart";
 	private static final String PREF_AUTO_PUBLISH = "auto-publish";
-	private static final String PREF_CREATE_IN_WORKSPACE = "create-workspace";
 	private static final String PREF_MODULE_START_TIMEOUT = "module-start-timeout";
 	
 	private static final String PREF_AUTO_PUBLISH_LOCAL = "auto-publish-local";
@@ -27,6 +26,8 @@
 	
 	private static final String PREF_MACHINE_SPEED = "machine-speed";
 
+	private static final String PREF_SYNC_ON_STARTUP = "sync-on-startup";
+
 	private Preferences preferences;
 
 	protected static ServerPreferences instance;
@@ -89,37 +90,6 @@
 	public boolean isDefaultAutoPublishing() {
 		return true;
 	}
-	
-	/**
-	 * Returns whether servers and configurations should be created in the
-	 * workspace (as opposed to in metadata).
-	 *
-	 * @return boolean
-	 */
-	public boolean isCreateResourcesInWorkspace() {
-		return preferences.getBoolean(PREF_CREATE_IN_WORKSPACE);
-	}
-
-	/**
-	 * Returns whether servers and configurations should be created in the
-	 * workspace (as opposed to in metadata) by default.
-	 *
-	 * @return boolean
-	 */
-	public boolean isDefaultCreateResourcesInWorkspace() {
-		return false;
-	}
-
-	/**
-	 * Set whether servers and configurations should be created in the
-	 * workspace (as opposed to in metadata).
-	 *
-	 * @param b
-	 */
-	public void setCreateResourcesInWorkspace(boolean b) {
-		preferences.setValue(PREF_CREATE_IN_WORKSPACE, b);
-		ServerPlugin.getInstance().savePluginPreferences();
-	}
 
 	/**
 	 * Set whether servers will be automatically restarted when
@@ -161,12 +131,12 @@
 	}
 	
 	/**
-	 * Return the default machine speed index, 6.
+	 * Return the default machine speed index, 5.
 	 * 
 	 * @return the default speed index
 	 */
 	public int getDefaultMachineSpeed() {
-		return 6;
+		return 5;
 	}
 
 	/**
@@ -177,7 +147,34 @@
 	public void setMachineSpeed(int speed) {
 		preferences.setValue(PREF_MACHINE_SPEED, speed);
 	}
-	
+
+	/**
+	 * Return the sync on startup value.
+	 * 
+	 * @return the sync on startup value
+	 */
+	public boolean isSyncOnStartup() {
+		return preferences.getBoolean(PREF_SYNC_ON_STARTUP);
+	}
+
+	/**
+	 * Return the default sync on startup value.
+	 * 
+	 * @return the default sync on startup value
+	 */
+	public boolean getDefaultSyncOnStartup() {
+		return false;
+	}
+
+	/**
+	 * Sets the sync on startup value.
+	 * 
+	 * @param sync the sync on startup value 
+	 */
+	public void setSyncOnStartup(boolean sync) {
+		preferences.setValue(PREF_SYNC_ON_STARTUP, sync);
+	}
+
 	/**
 	 * Returns the default setting for local auto-publishing.
 	 * 
@@ -303,6 +300,8 @@
 		preferences.setDefault(PREF_AUTO_PUBLISH_REMOTE, getDefaultAutoPublishRemote());
 		preferences.setDefault(PREF_AUTO_PUBLISH_REMOTE_TIME, getDefaultAutoPublishRemoteTime());
 		
+		preferences.setDefault(PREF_SYNC_ON_STARTUP, getDefaultSyncOnStartup());
+		
 		preferences.setDefault(PREF_MODULE_START_TIMEOUT, 300001);
 		boolean save = false;
 		if (preferences.isDefault(PREF_MODULE_START_TIMEOUT)) {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java
index 615e45f..f2a9186 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java
@@ -101,7 +101,7 @@
 			return (ModulePublishInfo) modulePublishInfo.get(key);
 	
 		// have to create a new one
-		ModulePublishInfo mpi = new ModulePublishInfo(getKey(module));
+		ModulePublishInfo mpi = new ModulePublishInfo(getKey(module), module[module.length - 1].getName());
 		modulePublishInfo.put(key, mpi);
 		return mpi;
 	}
@@ -134,7 +134,7 @@
 				String moduleId = mpi.getModuleId();
 				if (moduleId != null) {
 					int index = moduleId.lastIndexOf("#");
-					module2 = new IModule[] { new DeletedModule(moduleId.substring(index + 1)) };
+					module2 = new IModule[] { new DeletedModule(moduleId.substring(index + 1), mpi.getName()) };
 				}
 			}
 			if (module2 != null && module2.length > 0) {
@@ -295,6 +295,73 @@
 		return delta;
 	}
 
+	protected boolean hasDelta(IModule[] module) {
+		if (module == null)
+			return false;
+		
+		ModulePublishInfo mpi = getModulePublishInfo(module);
+		int size = module.length;
+		ModuleDelegate pm = (ModuleDelegate) module[size - 1].loadAdapter(ModuleDelegate.class, null);
+		IModuleResource[] resources = null;
+		try {
+			if (pm != null)
+				resources = pm.members();
+		} catch (CoreException ce) {
+			// ignore
+		}
+		if (resources == null)
+			resources = new IModuleResource[0];
+		return hasDelta(mpi.getResources(), resources);
+	}
+
+	protected boolean hasDelta(IModuleResource[] original, IModuleResource[] current) {
+		if (original == null || current == null)
+			return false;
+	
+		// look for duplicates
+		List found = new ArrayList();
+		int size = original.length;
+		int size2 = current.length;
+		for (int i = 0; i < size; i++) {
+			for (int j = 0; j < size2; j++) {
+				if (!found.contains(original[i]) && !found.contains(current[j]) && original[i].equals(current[j])) {
+					// found a match
+					found.add(original[i]);
+					if (original[i] instanceof IModuleFile) {
+						// include files only if the modification stamp has changed
+						IModuleFile mf1 = (IModuleFile) original[i];
+						IModuleFile mf2 = (IModuleFile) current[j];
+						if (mf1.getModificationStamp() != mf2.getModificationStamp())
+							return true;
+					} else {
+						// include folders only if their contents have changed
+						IModuleFolder mf1 = (IModuleFolder) original[i];
+						IModuleFolder mf2 = (IModuleFolder) current[j];
+						IModuleResourceDelta[] mrdc = getDelta(mf1.members(), mf2.members());
+						if (mrdc.length > 0)
+							return true;
+					}
+				}
+			}
+		}
+		
+		// add deletions (unfound items in the original list)
+		for (int i = 0; i < size; i++) {
+			if (!found.contains(original[i])) {
+				return true;
+			}
+		}
+		
+		//	add additions (unfound items in the current list)
+		for (int j = 0; j < size2; j++) {
+			if (!found.contains(current[j])) {
+				return true;
+			}
+		}
+		
+		return false;
+	}
+
 	/**
 	 * Create a resource delta for an entire tree.
 	 */
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
index 8dc0edd..28ba83f 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
@@ -22,11 +22,14 @@
 
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
+import org.eclipse.wst.server.core.model.ServerDelegate;
 /**
  * 
  */
 public class ServerType implements IServerType {
-	protected IConfigurationElement element;
+	private static final int DEFAULT_TIMEOUT = 1000 * 60 * 5;
+	private IConfigurationElement element;
 
 	/**
 	 * ServerType constructor comment.
@@ -37,10 +40,6 @@
 		super();
 		this.element = element;
 	}
-	
-	protected IConfigurationElement getElement() {
-		return element;
-	}
 
 	/**
 	 * Returns the id of this factory.
@@ -48,41 +47,85 @@
 	 * @return java.lang.String
 	 */
 	public String getId() {
-		return element.getAttribute("id");
+		try {
+			return element.getAttribute("id");
+		} catch (Exception e) {
+			return null;
+		}
 	}
-	
+
 	public String getName() {
-		return element.getAttribute("name");
+		try {
+			return element.getAttribute("name");
+		} catch (Exception e) {
+			return null;
+		}
 	}
 
 	public boolean startBeforePublish() {
-		return "true".equals(element.getAttribute("startBeforePublish"));
+		try {
+			return "true".equals(element.getAttribute("startBeforePublish"));
+		} catch (Exception e) {
+			return false;
+		}
 	}
 
 	public String getDescription() {
-		return element.getAttribute("description");
+		try {
+			return element.getAttribute("description");
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	protected ServerDelegate createServerDelegate() throws CoreException {
+		try {
+			return (ServerDelegate) element.createExecutableExtension("class");
+		} catch (Exception e) {
+			return null;
+		}
 	}
 	
-	public IRuntimeType getRuntimeType() {
-		String typeId = element.getAttribute("runtimeTypeId");
-		if (typeId == null)
+	protected ServerBehaviourDelegate createServerBehaviourDelegate() throws CoreException {
+		try {
+			return (ServerBehaviourDelegate) element.createExecutableExtension("behaviourClass");
+		} catch (Exception e) {
 			return null;
-		return ServerCore.findRuntimeType(typeId);
+		}
+	}
+
+	public IRuntimeType getRuntimeType() {
+		try {
+			String typeId = element.getAttribute("runtimeTypeId");
+			if (typeId == null)
+				return null;
+			return ServerCore.findRuntimeType(typeId);
+		} catch (Exception e) {
+			return null;
+		}
 	}
 
 	public boolean hasRuntime() {
-		String s = element.getAttribute("runtime");
-		return "true".equals(s);
+		try {
+			String s = element.getAttribute("runtime");
+			return "true".equals(s);
+		} catch (Exception e) {
+			return false;
+		}
 	}
-	
-	protected ILaunchConfigurationType getLaunchConfigurationType() {
-		String launchConfigId = element.getAttribute("launchConfigId");
-		if (launchConfigId == null)
+
+	public ILaunchConfigurationType getLaunchConfigurationType() {
+		try {
+			String launchConfigId = element.getAttribute("launchConfigId");
+			if (launchConfigId == null)
+				return null;
+			ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
+			return launchManager.getLaunchConfigurationType(launchConfigId);
+		} catch (Exception e) {
 			return null;
-		ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
-		return launchManager.getLaunchConfigurationType(launchConfigId);
+		}
 	}
-	
+
 	/**
 	 * Returns true if this server can start or may already be started
 	 * in the given mode, and false if not. Uses the launchMode attribute,
@@ -92,51 +135,65 @@
 	 * @return boolean
 	 */
 	public boolean supportsLaunchMode(String launchMode) {
-		ILaunchConfigurationType configType = getLaunchConfigurationType();
-		if (configType == null) {
+		try {
+			ILaunchConfigurationType configType = getLaunchConfigurationType();
+			if (configType != null)
+				return configType.supportsMode(launchMode);
+			
 			String mode = element.getAttribute("launchModes");
 			if (mode == null)
 				return false;
 			return mode.indexOf(launchMode) >= 0;
+		} catch (Exception e) {
+			return false;
 		}
-		return configType.supportsMode(launchMode);
 	}
 
-	/*public IServerConfigurationType getServerConfigurationType() {
-		String configurationTypeId = element.getAttribute("configurationTypeId");
-		return ServerCore.findServerConfigurationType(configurationTypeId);
-	}*/
-	
 	public boolean supportsRemoteHosts() {
-		String hosts = element.getAttribute("supportsRemoteHosts");
-		return (hosts != null && hosts.toLowerCase().equals("true"));
+		try {
+			String hosts = element.getAttribute("supportsRemoteHosts");
+			return (hosts != null && hosts.toLowerCase().equals("true"));
+		} catch (Exception e) {
+			return false;
+		}
 	}
 
 	public byte getInitialState() {
-		String stateString = element.getAttribute("initialState");
-		if (stateString != null)
-			stateString = stateString.toLowerCase();
-		if ("stopped".equals(stateString))
-			return IServer.STATE_STOPPED;
-		else if ("started".equals(stateString))
-			return IServer.STATE_STARTED;
+		try {
+			String stateString = element.getAttribute("initialState");
+			if (stateString != null)
+				stateString = stateString.toLowerCase();
+			if ("stopped".equals(stateString))
+				return IServer.STATE_STOPPED;
+			else if ("started".equals(stateString))
+				return IServer.STATE_STARTED;
+		} catch (Exception e) {
+			// ignore
+		}
 		return IServer.STATE_UNKNOWN;
 	}
 
 	public boolean hasServerConfiguration() {
-		return ("true".equalsIgnoreCase(element.getAttribute("hasConfiguration")));
+		try {
+			return ("true".equalsIgnoreCase(element.getAttribute("hasConfiguration")));
+		} catch (Exception e) {
+			return false;
+		}
 	}
 
 	public IServerWorkingCopy createServer(String id, IFile file, IRuntime runtime, IProgressMonitor monitor) throws CoreException {
+		if (element == null)
+			return null;
+		
 		if (id == null || id.length() == 0)
 			id = ServerPlugin.generateId();
 		ServerWorkingCopy swc = new ServerWorkingCopy(id, file, runtime, this);
-		swc.setDefaults(monitor);
 		swc.setRuntime(runtime);
+		swc.setDefaults(monitor);
 		
 		// TODO
 		if (swc.getServerType().hasServerConfiguration())
-			((Server)swc).importConfiguration(runtime, null);
+			swc.importConfiguration(runtime, null);
 		
 		return swc;
 	}
@@ -172,6 +229,9 @@
 	}
 
 	public IServerWorkingCopy createServer(String id, IFile file, IProgressMonitor monitor) throws CoreException {
+		if (element == null)
+			return null;
+		
 		if (id == null || id.length() == 0)
 			id = ServerPlugin.generateId();
 		
@@ -199,10 +259,9 @@
 		if (runtime != null)
 			swc.setRuntime(runtime);
 		
-		if (swc.getServerType().hasServerConfiguration())
-			((Server)swc).importConfiguration(runtime, null);
-		
 		swc.setDefaults(monitor);
+		if (swc.getServerType().hasServerConfiguration())
+			swc.importConfiguration(runtime, null);
 		
 		return swc;
 	}
@@ -212,7 +271,7 @@
 		if (projects != null) {
 			int size = projects.length;
 			for (int i = 0; i < size; i++) {
-				if (((ProjectProperties)ServerCore.getProjectProperties(projects[i])).isServerProject())
+				if (ServerPlugin.getProjectProperties(projects[i]).isServerProject())
 					return projects[i];
 			}
 		}
@@ -221,7 +280,7 @@
 		IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(s);
 		project.create(null);
 		project.open(null);
-		((ProjectProperties)ServerCore.getProjectProperties(project)).setServerProject(true, null);
+		ServerPlugin.getProjectProperties(project).setServerProject(true, null);
 		return project;
 	}
 
@@ -232,43 +291,61 @@
 	 */
 	protected static String findUnusedServerProjectName() {
 		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
-		String name = NLS.bind(Messages.defaultServerProjectName, "");
+		String name = NLS.bind(Messages.defaultServerProjectName, "").trim();
 		int count = 1;
 		while (root.getProject(name).exists()) {
-			name = NLS.bind(Messages.defaultServerProjectName, ++count + "");
+			name = NLS.bind(Messages.defaultServerProjectName, ++count + "").trim();
 		}
 		return name;
 	}
 
 	/**
 	 * Return the timeout (in ms) that should be used to wait for the server to start.
-	 * Returns -1 if there is no timeout.
+	 * The default is 2 minutes.
 	 * 
 	 * @return the server startup timeout
 	 */
 	public int getStartTimeout() {
+		int timeout = -1;
 		try {
 			int i = Integer.parseInt(element.getAttribute("startTimeout"));
 			int s = ServerPreferences.getInstance().getMachineSpeed();
-			i = i * (10 - s) / 5;
+			timeout = i * (10 - s) / 5;
 			return i;
 		} catch (NumberFormatException e) {
-			return -1;
+			// ignore
 		}
+		if (timeout <= 0)
+			timeout = DEFAULT_TIMEOUT;
+		return timeout;
 	}
 
 	/**
 	 * Return the timeout (in ms) to wait before assuming that the server
-	 * has failed to stop. Returns -1 if there is no timeout.
+	 * has failed to stop. The default is 2 minutes.
 	 * 
 	 * @return the server shutdown timeout
 	 */
 	public int getStopTimeout() {
+		int timeout = -1;
 		try {
-			return Integer.parseInt(element.getAttribute("stopTimeout"));
+			timeout = Integer.parseInt(element.getAttribute("stopTimeout"));
 		} catch (NumberFormatException e) {
-			return -1;
+			// ignore
 		}
+		if (timeout <= 0)
+			timeout = DEFAULT_TIMEOUT;
+		return timeout;
+	}
+
+	public void dispose() {
+		element = null;
+	}
+
+	public String getNamespace() {
+		if (element == null)
+			return null;
+		return element.getDeclaringExtension().getNamespace();
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
index 1e79826..4e48797 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
@@ -24,6 +24,9 @@
 import org.eclipse.core.runtime.*;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.model.InternalInitializer;
+import org.eclipse.wst.server.core.model.PublishOperation;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
 import org.eclipse.wst.server.core.model.ServerDelegate;
 /**
  * 
@@ -157,9 +160,9 @@
 	public void setAutoPublishTime(int p) {
 		setAttribute(PROP_AUTO_PUBLISH_TIME, p);
 	}
-	
-	public void setAutoPublishDefault(boolean p) {
-		setAttribute(PROP_AUTO_PUBLISH_DEFAULT, p);
+
+	public void setAutoPublishSetting(int s) {
+		setAttribute(PROP_AUTO_PUBLISH_SETTING, s);
 	}
 
 	public void setServerConfiguration(IFolder config) {
@@ -171,6 +174,58 @@
 	}
 
 	/**
+	 * Disable the preferred publish operation.
+	 * 
+	 * @param op a publish operation
+	 * @return true if change is made. 
+	 */
+	public boolean disablePreferredPublishOperations(PublishOperation op) {
+		List list = getAttribute(PROP_DISABLED_PERFERRED_TASKS, (List)null);
+		if (list == null)
+			list = new ArrayList();
+		
+		String opId = getPublishOperationId(op);
+		if (list.contains(opId))
+			return false;
+		list.add(opId);
+		setAttribute(PROP_DISABLED_PERFERRED_TASKS, list);
+		return true;
+	}
+
+	/**
+	 * Enable the optional publish operation. Optional publish operation is not ran by default.
+	 * 
+	 * @param op a publish operation
+	 * @return true if change is made. 
+	 */
+	public boolean enableOptionalPublishOperations(PublishOperation op) {
+		List list = getAttribute(PROP_ENABLED_OPTIONAL_TASKS, (List)null);
+		if (list == null)
+			list = new ArrayList();
+		
+		String opId = getPublishOperationId(op);
+		if (list.contains(opId))
+			return false;
+		list.add(opId);
+		setAttribute(PROP_ENABLED_OPTIONAL_TASKS, list);
+		return true;
+	}
+
+	/**
+	 * Reset all preferred operations to default
+	 */
+	public void resetPreferredPublishOperations() {
+		setAttribute(PROP_DISABLED_PERFERRED_TASKS, (List)null);
+	}
+
+	/**
+	 * Reset all optional operations to default
+	 */
+	public void resetOptionalPublishOperations() {
+		setAttribute(PROP_ENABLED_OPTIONAL_TASKS, (List)null);
+	}
+
+	/**
 	 * Sets the file where this server instance is serialized.
 	 * 
 	 * @param file the file in the workspace where the server instance
@@ -188,45 +243,59 @@
 	public boolean isDirty() {
 		return wch.isDirty();
 	}
-	
+
 	public ServerDelegate getWorkingCopyDelegate(IProgressMonitor monitor) {
 		// make sure that the regular delegate is loaded 
 		//getDelegate();
 		
-		if (workingCopyDelegate != null)
+		if (workingCopyDelegate != null || serverType == null)
 			return workingCopyDelegate;
 		
-		if (serverType != null) {
-			synchronized (this) {
-				if (workingCopyDelegate == null) {
-					try {
-						long time = System.currentTimeMillis();
-						IConfigurationElement element = ((ServerType) serverType).getElement();
-						workingCopyDelegate = (ServerDelegate) element.createExecutableExtension("class");
-						workingCopyDelegate.initialize(this);
-						Trace.trace(Trace.PERFORMANCE, "ServerWorkingCopy.getWorkingCopyDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
-					} catch (Exception e) {
-						Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), e);
-					}
+		synchronized (this) {
+			if (workingCopyDelegate == null) {
+				try {
+					long time = System.currentTimeMillis();
+					workingCopyDelegate = ((ServerType) serverType).createServerDelegate();
+					InternalInitializer.initializeServerDelegate(workingCopyDelegate, this, monitor);
+					Trace.trace(Trace.PERFORMANCE, "ServerWorkingCopy.getWorkingCopyDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
+				} catch (Exception e) {
+					Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), e);
 				}
 			}
 		}
 		return workingCopyDelegate;
 	}
-	
+
+	protected ServerBehaviourDelegate getBehaviourDelegate(IProgressMonitor monitor) {
+		if (server == null)
+			return null;
+		
+		if (behaviourDelegate != null)
+			return behaviourDelegate;
+		
+		synchronized (this) {
+			if (behaviourDelegate == null)
+				behaviourDelegate = server.getBehaviourDelegate(monitor);
+		}
+		return behaviourDelegate;
+	}
+
 	public void dispose() {
+		// behaviour delegate is cached from the original server
+		behaviourDelegate = null;
+		
 		super.dispose();
 		if (workingCopyDelegate != null)
 			workingCopyDelegate.dispose();
 	}
-	
+
 	public IServer save(boolean force, IProgressMonitor monitor) throws CoreException {
 		monitor = ProgressUtil.getMonitorFor(monitor);
 		monitor.subTask(NLS.bind(Messages.savingTask, getName()));
-
+		
 		if (!force && getOriginal() != null)
 			wch.validateTimestamp(((Server)getOriginal()).getTimestamp());
-
+		
 		if (server == null) {
 			server = new Server(file);
 			server.setServerState(serverState);
@@ -253,13 +322,13 @@
 				if (project != null && !project.exists()) {
 					project.create(null);
 					project.open(null);
-					((ProjectProperties)ServerCore.getProjectProperties(project)).setServerProject(true, monitor);
+					ServerPlugin.getProjectProperties(project).setServerProject(true, monitor);
 				}
 				if (!folder.exists())
 					folder.create(IResource.FORCE, true, null);
 			}
 		}
-		getDelegate(monitor).saveConfiguration(monitor);
+		getWorkingCopyDelegate(monitor).saveConfiguration(monitor);
 		wch.setDirty(false);
 		
 		return server;
@@ -280,6 +349,8 @@
 	 * @param listener java.beans.PropertyChangeListener
 	 */
 	public void addPropertyChangeListener(PropertyChangeListener listener) {
+		if (listener == null)
+			throw new IllegalArgumentException("Listener cannot be null");
 		wch.addPropertyChangeListener(listener);
 	}
 	
@@ -289,9 +360,11 @@
 	 * @param listener java.beans.PropertyChangeListener
 	 */
 	public void removePropertyChangeListener(PropertyChangeListener listener) {
+		if (listener == null)
+			throw new IllegalArgumentException("Listener cannot be null");
 		wch.removePropertyChangeListener(listener);
 	}
-	
+
 	/**
 	 * Fire a property change event.
 	 * 
@@ -302,21 +375,21 @@
 	public void firePropertyChangeEvent(String propertyName, Object oldValue, Object newValue) {
 		wch.firePropertyChangeEvent(propertyName, oldValue, newValue);
 	}
-	
+
 	public void addServerListener(IServerListener listener) {
 		if (server != null)
 			server.addServerListener(listener);
 		else
 			super.addServerListener(listener);
 	}
-	
+
 	public void removeServerListener(IServerListener listener) {
 		if (server != null)
 			server.removeServerListener(listener);
 		else
 			super.removeServerListener(listener);
 	}
-	
+
 	public void addPublishListener(IPublishListener listener) {
 		if (server != null)
 			server.addPublishListener(listener);
@@ -338,7 +411,7 @@
 		else
 			setAttribute(RUNTIME_ID, (String)null);
 	}
-	
+
 	public void setRuntimeId(String runtimeId) {
 		setAttribute(RUNTIME_ID, runtimeId);
 		resolve();
@@ -348,6 +421,9 @@
 	 * @see org.eclipse.wst.server.core.IServer#modifyModule(org.eclipse.wst.server.core.model.IModule)
 	 */
 	public void modifyModules(IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException {
+		if ((add == null || add.length == 0) && (remove == null || remove.length == 0))
+			throw new IllegalArgumentException("Add and remove cannot both be null/empty");
+		
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.subTask(Messages.taskModifyModules);
@@ -378,9 +454,11 @@
 			Iterator iterator = modules.iterator();
 			while (iterator.hasNext()) {
 				IModule module = (IModule) iterator.next();
-				list.add(module.getId());
+				list.add(module.getName() + "::" + module.getId());
 			}
 			setAttribute(MODULE_LIST, list);
+			resetOptionalPublishOperations();
+			resetPreferredPublishOperations();
 		} catch (CoreException ce) {
 			throw ce;
 		} catch (Exception e) {
@@ -391,12 +469,95 @@
 
 	public void setDefaults(IProgressMonitor monitor) {
 		try {
-			getWorkingCopyDelegate(monitor).setDefaults();
+			getWorkingCopyDelegate(monitor).setDefaults(monitor);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate setDefaults() " + toString(), e);
 		}
 	}
-	
+
+	public void renameFiles(IProgressMonitor monitor) throws CoreException {
+		if (getServerConfiguration() != null) {
+			IFolder folder = getServerConfiguration();
+			IFolder folder2 = ServerType.getServerProject().getFolder(getName() + "-config");
+			folder.move(folder2.getFullPath(), true, true, monitor);
+			setServerConfiguration(folder2);
+			save(true, monitor);
+		}
+		
+		if (file != null) {
+			IFile file2 = ServerUtil.getUnusedServerFile(file.getProject(), this);
+			file.move(file2.getFullPath(), true, true, monitor);
+		}
+	}
+
+	/*
+	 * Publish to the server using the progress monitor. The result of the
+	 * publish operation is returned as an IStatus.
+	 */
+	public IStatus publish(int kind, IProgressMonitor monitor) {
+		if (server != null)
+			return server.publish(kind, monitor);
+		return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, null);
+	}
+
+	/**
+	 * Sets the server restart state.
+	 *
+	 * @param state boolean
+	 */
+	public void setServerRestartState(boolean state) {
+		if (server != null)
+			server.setServerRestartState(state);
+		else
+			super.setServerRestartState(state);
+	}
+
+	/**
+	 * @see IServer#getAdapter(Class)
+	 */
+	public Object getAdapter(Class adapter) {
+		if (workingCopyDelegate != null) {
+			if (adapter.isInstance(workingCopyDelegate))
+				return workingCopyDelegate;
+		}
+		if (delegate != null) {
+			if (adapter.isInstance(delegate))
+				return delegate;
+		}
+		if (behaviourDelegate != null) {
+			if (adapter.isInstance(behaviourDelegate))
+				return behaviourDelegate;
+		}
+		return Platform.getAdapterManager().getAdapter(this, adapter);
+	}
+
+	/**
+	 * @see IServer#loadAdapter(Class, IProgressMonitor)
+	 */
+	public Object loadAdapter(Class adapter, IProgressMonitor monitor) {
+		getWorkingCopyDelegate(monitor);
+		if (adapter.isInstance(workingCopyDelegate))
+			return workingCopyDelegate;
+		
+		getDelegate(monitor);
+		if (adapter.isInstance(delegate))
+			return delegate;
+		
+		getBehaviourDelegate(monitor);
+		if (adapter.isInstance(behaviourDelegate))
+			return behaviourDelegate;
+		
+		return Platform.getAdapterManager().loadAdapter(this, adapter.getName());
+	}
+
+	public void importConfiguration(IRuntime runtime2, IProgressMonitor monitor) {
+		try {
+			getWorkingCopyDelegate(monitor).importConfiguration(runtime2, monitor);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error calling delegate setLaunchDefaults() " + toString(), e);
+		}
+	}
+
 	public String toString() {
 		return "ServerWorkingCopy " + getId();
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/StartServerJob.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/StartServerJob.java
similarity index 66%
rename from plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/StartServerJob.java
rename to plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/StartServerJob.java
index 8f2db5e..2f65e67 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/StartServerJob.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/StartServerJob.java
@@ -8,28 +8,20 @@
  * Contributors:
  *     IBM Corporation - Initial API and implementation
  **********************************************************************/
-package org.eclipse.wst.server.ui.internal;
+package org.eclipse.wst.server.core.internal;
 
 import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.internal.ServerSchedulingRule;
 /**
- * 
+ * A job for starting the server.
  */
-public class StartServerJob extends Job {
-	protected IServer server;
+public class StartServerJob extends ChainedJob {
 	protected String launchMode;
-	
-	public static void startServer(IServer server, String launchMode) {
-		StartServerJob job = new StartServerJob(server, launchMode);
-		//job.setUser(true);
-		job.schedule();
-	}
 
 	public StartServerJob(IServer server, String launchMode) {
-		super("Starting server");
-		this.server = server;
+		super(NLS.bind(Messages.jobStartingServer, server.getName()), server);
 		this.launchMode = launchMode;
 		setRule(new ServerSchedulingRule(server));
 	}
@@ -38,12 +30,11 @@
 	 * @see org.eclipse.core.internal.jobs.InternalJob#run(org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	protected IStatus run(IProgressMonitor monitor) {
-		IStatus status = new Status(IStatus.OK, ServerUIPlugin.PLUGIN_ID, 0, "", null);
 		try {
-			server.synchronousStart(launchMode, monitor);
+			getServer().synchronousStart(launchMode, monitor);
 		} catch (CoreException ce) {
 			return ce.getStatus();
 		}
-		return status;
+		return Status.OK_STATUS;
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/UpdateServerJob.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/UpdateServerJob.java
new file mode 100644
index 0000000..91428ea
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/UpdateServerJob.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * 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.wst.server.core.internal;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
+/**
+ * Action to update a server's status.
+ */
+public class UpdateServerJob extends ChainedJob {
+	/**
+	 * An action to update the status of a server.
+	 * 
+	 * @param server a server
+	 */
+	public UpdateServerJob(IServer server) {
+		super(NLS.bind(Messages.jobUpdateServer, server.getName()), server);
+	}
+
+	public IStatus run(IProgressMonitor monitor) {
+		getServer().loadAdapter(ServerBehaviourDelegate.class, monitor);
+		
+		return Status.OK_STATUS;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/XMLMemento.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/XMLMemento.java
index 97d921d..3d0960c 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/XMLMemento.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/XMLMemento.java
@@ -273,7 +273,18 @@
 	 * @exception java.io.IOException
 	 */
 	public static IMemento loadMemento(String filename) throws IOException {
-		return XMLMemento.createReadRoot(new FileInputStream(filename));
+		FileInputStream fin = null;
+		try {
+			fin = new FileInputStream(filename);
+			return XMLMemento.createReadRoot(fin);
+		} finally {
+			try {
+				if (fin != null)
+					fin.close();
+			} catch (Exception e) {
+				// ignore
+			}
+		}
 	}
 
 	/*
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/provisional/ServerLocatorDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/provisional/ServerLocatorDelegate.java
index 1470e4a..04b9a67 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/provisional/ServerLocatorDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/provisional/ServerLocatorDelegate.java
@@ -20,7 +20,7 @@
  * to extend the <code>serverLocators</code> extension point.
  * </p>
  * 
- * @since 1.0
+ * @plannedfor 1.0
  */
 public abstract class ServerLocatorDelegate {
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResource.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResource.java
index 949c7d4..fceca3d 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResource.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResource.java
@@ -10,20 +10,21 @@
  **********************************************************************/
 package org.eclipse.wst.server.core.model;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IPath;
 /**
  * A resource (file or folder) within a module.
  * 
  * @since 1.0
  */
-public interface IModuleResource {
+public interface IModuleResource extends IAdaptable {
 	/**
 	 * Returns the module relative path to this resource.
 	 * 
 	 * @return the module relative path to this resource
 	 */
 	public IPath getModuleRelativePath();
-	
+
 	/**
 	 * Returns the name of this resource.
 	 * 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResourceDelta.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResourceDelta.java
index 9174fed..3650270 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResourceDelta.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResourceDelta.java
@@ -12,6 +12,7 @@
 
 import org.eclipse.core.runtime.IPath;
 /**
+ * A module resource delta.
  * 
  * @since 1.0
  */
@@ -110,7 +111,7 @@
 	 * @param path the path of the desired descendent delta
 	 * @return the descendent delta, or <code>null</code> if no such
 	 * 		descendent exists in the delta
-	 * @since 2.0
+	 * @plannedfor 2.0
 	 */
 	//public IModuleResourceDelta findMember(IPath path);
 	
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IURLProvider.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IURLProvider.java
index c0d9d5e..c8573e9 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IURLProvider.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IURLProvider.java
@@ -14,6 +14,8 @@
 
 import org.eclipse.wst.server.core.IModule;
 /**
+ * An interface for a server delegate that can provide URLs for a module published
+ * to the server.
  * 
  * @since 1.0
  */
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/InternalInitializer.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/InternalInitializer.java
new file mode 100644
index 0000000..dfe441d
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/InternalInitializer.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * 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.wst.server.core.model;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.server.core.internal.ModuleFactory;
+import org.eclipse.wst.server.core.internal.Runtime;
+import org.eclipse.wst.server.core.internal.Server;
+/**
+ * This is an internal utility class that is used by the server framework.
+ * It is not API and should never be used by clients.
+ */
+public class InternalInitializer {
+	/**
+	 * Internal method - do not call.
+	 * 
+	 * @param delegate
+	 * @param newServer
+	 * @param monitor
+	 */
+	public static void initializeServerDelegate(ServerDelegate delegate, Server newServer, IProgressMonitor monitor) {
+		delegate.initialize(newServer, monitor);
+	}
+
+	/**
+	 * Internal method - do not call.
+	 * 
+	 * @param delegate
+	 * @param newServer
+	 * @param monitor
+	 */
+	public static void initializeServerBehaviourDelegate(ServerBehaviourDelegate delegate, Server newServer, IProgressMonitor monitor) {
+		delegate.initialize(newServer, monitor);
+	}
+
+	/**
+	 * Internal method - do not call.
+	 * 
+	 * @param delegate
+	 * @param newRuntime
+	 * @param monitor
+	 */
+	public static void initializeRuntimeDelegate(RuntimeDelegate delegate, Runtime newRuntime, IProgressMonitor monitor) {
+		delegate.initialize(newRuntime, monitor);
+	}
+
+	/**
+	 * Internal method - do not call.
+	 * 
+	 * @param delegate
+	 * @param newModuleFactory
+	 * @param monitor
+	 */
+	public static void initializeModuleFactoryDelegate(ModuleFactoryDelegate delegate, ModuleFactory newModuleFactory, IProgressMonitor monitor) {
+		delegate.initialize(newModuleFactory, monitor);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/LaunchableAdapterDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/LaunchableAdapterDelegate.java
index 1ee9dfc..47fd4e8 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/LaunchableAdapterDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/LaunchableAdapterDelegate.java
@@ -18,6 +18,10 @@
  * an IModuleArtifact to an object launchable on the server.
  * 
  * <p>This is the implementation of a launchableAdapter extension point.</p>
+ * <p>
+ * This abstract class is intended to be extended only by clients
+ * to extend the <code>launchableAdapters</code> extension point.
+ * </p>
  * 
  * @since 1.0
  */
@@ -27,6 +31,7 @@
 	 * 
 	 * @param server the server
 	 * @param moduleArtifact a module artifact
+	 * [issue: if the launchable object cannot be found, should it throw a CoreExcpetion or return null?]
 	 * @return the launchable object
 	 * @throws CoreException if there was an error doing the conversion
 	 */
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleArtifactAdapterDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleArtifactAdapterDelegate.java
index effa897..c3528b7 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleArtifactAdapterDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleArtifactAdapterDelegate.java
@@ -18,6 +18,10 @@
  * 
  * <p>This is the implementation of a moduleArtifactAdapter
  * extension point.</p>
+ * <p>
+ * This abstract class is intended to be extended only by clients
+ * to extend the <code>moduleArtifactAdapters</code> extension point.
+ * </p>
  * 
  * @since 1.0
  */
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java
index 73a8d77..d63f7cd 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java
@@ -28,11 +28,8 @@
  * transient and will not be persisted across workbench sessions.
  * </p>
  * <p>
- * This interface is intended to be implemented by clients.
- * </p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
+ * This abstract class is intended to be extended only by clients
+ * to extend the <code>moduleFactories</code> extension point.
  * </p>
  * 
  * @see org.eclipse.wst.server.core.IModule
@@ -93,7 +90,7 @@
 	 * </p>
 	 *
 	 * @return a status object with code <code>IStatus.OK</code> if this
-	 *   runtime is valid, otherwise a status object indicating what is
+	 *   module is valid, otherwise a status object indicating what is
 	 *   wrong with it
 	 */
 	public abstract IStatus validate();
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java
index d087aee..2ebee80 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java
@@ -11,6 +11,7 @@
 package org.eclipse.wst.server.core.model;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.internal.Module;
 import org.eclipse.wst.server.core.internal.ModuleFactory;
@@ -28,11 +29,8 @@
  * transient and will not be persisted across workbench sessions.
  * </p>
  * <p>
- * This interface is intended to be implemented by clients.
- * </p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
+ * This abstract class is intended to be extended only by clients
+ * to extend the <code>moduleFactories</code> extension point.
  * </p>
  * 
  * @see org.eclipse.wst.server.core.IModule
@@ -58,8 +56,10 @@
 	 * </p>
 	 * 
 	 * @param newFactory the module factory instance
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
 	 */
-	public final void initialize(ModuleFactory newFactory) {
+	final void initialize(ModuleFactory newFactory, IProgressMonitor monitor) {
 		factory = newFactory;
 	}
 
@@ -70,7 +70,7 @@
 	 * 
 	 * @return the factory id
 	 */
-	protected String getId() {
+	protected final String getId() {
 		return factory.getId();
 	}
 
@@ -85,7 +85,7 @@
 	 * @param project the project that the module is contained in
 	 * @return a module instance
 	 */
-	public IModule createModule(String id, String name, String type, String version, IProject project) {
+	protected final IModule createModule(String id, String name, String type, String version, IProject project) {
 		return new Module(factory, id, name, type, version, project);
 	}
 
@@ -112,15 +112,4 @@
 	 * @return a possibly-empty array of modules {@link IModule}
 	 */
 	public abstract IModule[] getModules();
-
-	/**
-	 * Fire a module factory event. This method is used by the factory delegate to
-	 * fire events about module changes.
-	 * 
-	 * @param added a non-null array of modules that have been added
-	 * @param removed a non-null array of modules that have been removed
-	 */
-	protected void fireModuleFactoryEvent(IModule[] added, IModule[] removed) {
-		factory.fireModuleFactoryEvent(added, removed);
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java
new file mode 100644
index 0000000..2922f62
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java
@@ -0,0 +1,164 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 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.wst.server.core.model;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.server.core.TaskModel;
+/**
+ * An operation that will be executed during publishing. 
+ * 
+ * [issue: EY It is not clear to me that when this task will be run. Will the place where the
+ * task is being run depend on the server, e.g. the TDC tasks for the v6 server should be run
+ * after the server is started the modules are added to the server; however, the EJB deploy task
+ * makes more sense to be run before adding the project to the server.]
+ * 
+ * @since 1.0
+ */
+public abstract class PublishOperation {
+	private TaskModel model;
+	private String label;
+	private String description;
+
+   /**
+	 * Operation kind constant (value 0) indicating that the operation
+	 * does not need be executed.
+	 * 
+	 * @see #getKind()
+	 */
+	public static final int OPTIONAL = 0;
+
+	/**
+	 * Operation kind constant (value 1) indicating that the operation
+	 * should be executed.
+	 * 
+	 * @see #getKind()
+	 */
+	public static final int PREFERRED = 1;
+
+	/**
+	 * Operation kind constant (value 2) indicating that the operation
+	 * must be executed.
+	 * 
+	 * @see #getKind()
+	 */
+	public static final int REQUIRED = 2;
+
+	/**
+	 * Create a new operation. The label and description must be supplied
+	 * by overriding the getLabel() and getDescription() methods.
+	 */
+	public PublishOperation() {
+		// do nothing
+	}
+
+	/**
+	 * Create a new operation with the given label and description.
+	 * 
+	 * @param label a translated label for the operation
+	 * @param description the operation description
+	 */
+	public PublishOperation(String label, String description) {
+		this.label = label;
+		this.description = description;
+	}
+
+	/**
+	 * Returns the kind of this operation. Operations can either be OPTIONAL
+	 * (do not have to be executed), PREFERRED (should be executed), or
+	 * REQUIRED (must be executed).
+	 * 
+	 * @return one of the kind constants (e.g. <code>REQUIRED</code>)
+	 *    declared on {@link PublishOperation}
+	 */
+	public int getKind() {
+		return OPTIONAL;
+	}
+
+	/**
+	 * Returns the order (index/priority) of the task that will be run. The task with
+	 * a smaller order value will be run before the task with a bigger order value.
+	 * For tasks that have the same order value, the order of running those task are 
+	 * not guaranteed.  
+	 * 
+	 * @return the order (index/priority) of the task that will be run.
+	 */
+	public abstract int getOrder();
+
+	/**
+	 * Returns the displayable label for this operation.
+	 * <p>
+	 * Note that this label is appropriate for the current locale.
+	 * </p>
+	 *
+	 * @return a displayable label for this operation
+	 */
+	public String getLabel() {
+		return label;
+	}
+
+	/**
+	 * Returns the displayable description for this operation.
+	 * <p>
+	 * Note that this description is appropriate for the current locale.
+	 * </p>
+	 *
+	 * @return a displayable description for this operation
+	 */
+	public String getDescription() {
+		return description;
+	}
+
+	/**
+	 * Return the task model.
+	 * <p>
+	 * A task model contains information about the overall task flow and allows
+	 * tasks to store and retreive data. Its usage allows mutliple tasks to be
+	 * chained together and share data from the output of one task to the input
+	 * of another.
+	 * </p>
+	 * 
+	 * @return the task model
+	 */
+	public TaskModel getTaskModel() {
+		return model;
+	}
+
+	/**
+	 * Set the task model.
+	 * <p>
+	 * A task model contains information about the overall task flow and allows
+	 * tasks to store and retreive data. Its usage allows mutliple tasks to be
+	 * chained together and share data from the output of one task to the input
+	 * of another.
+	 * </p>
+	 * 
+	 * @param taskModel the task model
+	 */
+	public void setTaskModel(TaskModel taskModel) {
+		this.model = taskModel;
+	}
+
+	/**
+	 * Execute (perform) the operation.
+	 * 
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @param info the IAdaptable (or <code>null</code>) provided by the
+	 *    caller in order to supply UI information for prompting the
+	 *    user if necessary. When this parameter is not
+	 *    <code>null</code>, it should minimally contain an adapter
+	 *    for the org.eclipse.swt.widgets.Shell.class.
+	 * @throws CoreException if there was an error while executing the task
+	 */
+	public abstract void execute(IProgressMonitor monitor, IAdaptable info) throws CoreException;
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishTaskDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishTaskDelegate.java
index 5f94849..3852736 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishTaskDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishTaskDelegate.java
@@ -12,12 +12,15 @@
 
 import java.util.List;
 
-import org.eclipse.wst.server.core.IOptionalTask;
 import org.eclipse.wst.server.core.IServer;
 /**
  * A publish task delegate.
  * 
  * <p>This is the implementation of a publishTask extension point.</p>
+ * <p>
+ * This abstract class is intended to be extended only by clients
+ * to extend the <code>publishTask</code> extension point.
+ * </p>
  * 
  * @since 1.0
  */
@@ -29,5 +32,20 @@
 	 * @param modules a list containing IModule arrays
 	 * @return the tasks that should be performed on the server.
 	 */
-	public abstract IOptionalTask[] getTasks(IServer server, List modules);
+	public PublishOperation[] getTasks(IServer server, List modules) {
+		return null;
+	}
+
+	/**
+	 * Returns the tasks that should be performed during publishing.
+	 * 
+	 * @param server the server
+	 * @param modules a list containing IModule arrays
+	 * @param kind one of the IServer.PUBLISH_XX constants.
+	 * @param kindList one of the IServer publish change constants.
+	 * @return the tasks that should be performed on the server.
+	 */
+	public PublishOperation[] getTasks(IServer server, int kind, List modules, List kindList) {
+		return getTasks(server, modules);
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java
index 79e20e8..3cac8f5 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java
@@ -14,6 +14,7 @@
 import java.util.Map;
 
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.wst.server.core.IRuntime;
@@ -48,10 +49,6 @@
  * This abstract class is intended to be extended only by clients
  * to extend the <code>runtimeTypes</code> extension point.
  * </p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @see IRuntime
  * @see IRuntimeWorkingCopy
@@ -76,8 +73,10 @@
 	 * </p>
 	 * 
 	 * @param newRuntime the runtime instance
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
 	 */
-	public final void initialize(Runtime newRuntime) {
+	final void initialize(Runtime newRuntime, IProgressMonitor monitor) {
 		runtime = newRuntime;
 		if (runtime instanceof RuntimeWorkingCopy)
 			runtimeWC = (RuntimeWorkingCopy) runtime;
@@ -92,7 +91,7 @@
 	 * Clients should never call this method.
 	 * </p>
 	 */
-	public void initialize() {
+	protected void initialize() {
 		// do nothing
 	}
 
@@ -101,7 +100,7 @@
 	 * 
 	 * @return the runtime
 	 */
-	public IRuntime getRuntime() {
+	public final IRuntime getRuntime() {
 		return runtime;
 	}
 
@@ -110,7 +109,7 @@
 	 * 
 	 * @return the runtime
 	 */
-	public IRuntimeWorkingCopy getRuntimeWorkingCopy() {
+	public final IRuntimeWorkingCopy getRuntimeWorkingCopy() {
 		return runtimeWC;
 	}
 
@@ -138,7 +137,7 @@
 		if (path == null || path.isEmpty())
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, "", null);
 		
-		return new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, "", null);
+		return Status.OK_STATUS;
 	}
 
 	/**
@@ -171,7 +170,7 @@
 	 * @return the attribute value
 	 * @see #setAttribute(String, int)
 	 */
-	public int getAttribute(String id, int defaultValue) {
+	protected final int getAttribute(String id, int defaultValue) {
 		return runtime.getAttribute(id, defaultValue);
 	}
 
@@ -183,7 +182,7 @@
 	 * @return the attribute value
 	 * @see #setAttribute(String, boolean)
 	 */
-	public boolean getAttribute(String id, boolean defaultValue) {
+	protected final boolean getAttribute(String id, boolean defaultValue) {
 		return runtime.getAttribute(id, defaultValue);
 	}
 
@@ -195,7 +194,7 @@
 	 * @return the attribute value
 	 * @see #setAttribute(String, String)
 	 */
-	public String getAttribute(String id, String defaultValue) {
+	protected final String getAttribute(String id, String defaultValue) {
 		return runtime.getAttribute(id, defaultValue);
 	}
 
@@ -207,7 +206,7 @@
 	 * @return the attribute value
 	 * @see #setAttribute(String, List)
 	 */
-	public List getAttribute(String id, List defaultValue) {
+	protected final List getAttribute(String id, List defaultValue) {
 		return runtime.getAttribute(id, defaultValue);
 	}
 
@@ -219,7 +218,7 @@
 	 * @return the attribute value
 	 * @see #setAttribute(String, Map)
 	 */
-	public Map getAttribute(String id, Map defaultValue) {
+	protected final Map getAttribute(String id, Map defaultValue) {
 		return runtime.getAttribute(id, defaultValue);
 	}
 	
@@ -242,8 +241,11 @@
 	 * Initializes this runtime with default values. This method is called when
 	 * a new runtime is created so that the runtime can be initialized with
 	 * meaningful values.
+	 * 
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
 	 */
-	public void setDefaults() {
+	public void setDefaults(IProgressMonitor monitor) {
 		// do nothing
 	}
 
@@ -255,7 +257,7 @@
 	 * @param value the value of the specified attribute
 	 * @see #getAttribute(String, int)
 	 */
-	public void setAttribute(String id, int value) {
+	protected final void setAttribute(String id, int value) {
 		runtimeWC.setAttribute(id, value);
 	}
 
@@ -267,7 +269,7 @@
 	 * @param value the value of the specified attribute
 	 * @see #getAttribute(String, boolean)
 	 */
-	public void setAttribute(String id, boolean value) {
+	protected final void setAttribute(String id, boolean value) {
 		runtimeWC.setAttribute(id, value);
 	}
 
@@ -279,7 +281,7 @@
 	 * @param value the value of the specified attribute
 	 * @see #getAttribute(String, String)
 	 */
-	public void setAttribute(String id, String value) {
+	protected final void setAttribute(String id, String value) {
 		runtimeWC.setAttribute(id, value);
 	}
 
@@ -291,7 +293,7 @@
 	 * @param value the value of the specified attribute
 	 * @see #getAttribute(String, List)
 	 */
-	public void setAttribute(String id, List value) {
+	protected final void setAttribute(String id, List value) {
 		runtimeWC.setAttribute(id, value);
 	}
 
@@ -303,7 +305,7 @@
 	 * @param value the value of the specified attribute
 	 * @see #getAttribute(String, Map)
 	 */
-	public void setAttribute(String id, Map value) {
+	protected final void setAttribute(String id, Map value) {
 		runtimeWC.setAttribute(id, value);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeLocatorDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeLocatorDelegate.java
index 2a1a709..c2a9027 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeLocatorDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeLocatorDelegate.java
@@ -26,6 +26,8 @@
 public abstract class RuntimeLocatorDelegate {
 	/**
 	 * A callback listener used to report progress.
+	 * 
+	 * @since 1.0
 	 */
 	public interface IRuntimeSearchListener {
 		/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeTargetHandlerDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeTargetHandlerDelegate.java
index 5fe2c55..941392e 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeTargetHandlerDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeTargetHandlerDelegate.java
@@ -16,19 +16,25 @@
 import org.eclipse.wst.server.core.IRuntime;
 import org.eclipse.wst.server.core.IRuntimeTargetHandler;
 /**
+ * A runtime target handler is used when associating a runtime with
+ * a particular project. It has the ability to make any changes it requires
+ * on the projects - adding or removing files, setting up the classpath, etc.
+ * <p>
+ * This abstract class is intended to be extended only by clients
+ * to extend the <code>runtimeTargetHandlers</code> extension point.
+ * </p>
+ * <p>
  * 
- * @since 1.0
+ * @deprecated This function is deprecated.
  */
 public abstract class RuntimeTargetHandlerDelegate {
-	private IRuntimeTargetHandler handler;
-
 	/**
 	 * Initializes the runtime target handler.
 	 * 
 	 * @param newHandler the new handler
 	 */
 	public final void initialize(IRuntimeTargetHandler newHandler) {
-		handler = newHandler;
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
 
 	/**
@@ -37,7 +43,7 @@
 	 * @return the runtime target handler
 	 */
 	public IRuntimeTargetHandler getRuntimeTargetHandler() {
-		return handler;
+		throw new RuntimeException("Attempt to use deprecated code");
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
index a0a47d8..0a9eb52 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
@@ -17,7 +17,6 @@
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IOptionalTask;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.internal.Messages;
 import org.eclipse.wst.server.core.internal.ProgressUtil;
@@ -45,10 +44,6 @@
  * This abstract class is intended to be extended only by clients
  * to extend the <code>serverTypes</code> extension point.
  * </p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @see org.eclipse.wst.server.core.IServer
  * @see org.eclipse.wst.server.core.IServerWorkingCopy
@@ -100,10 +95,12 @@
 	 * </p>
 	 * 
 	 * @param newServer the server instance
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
 	 */
-	public final void initialize(Server newServer) {
+	final void initialize(Server newServer, IProgressMonitor monitor) {
 		server = newServer;
-		initialize();
+		initialize(monitor);
 	}
 
 	/**
@@ -120,9 +117,11 @@
 	 * This method is called by the server core framework.
 	 * Clients should never call this method.
 	 * </p>
-	 * [issue: add progress monitor?]
+	 * 
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
 	 */
-	protected void initialize() {
+	protected void initialize(IProgressMonitor monitor) {
 		// do nothing
 	}
 
@@ -142,7 +141,7 @@
 	 *    constants defined by {@link IServer}
 	 * @see IServer#getServerState()
 	 */
-	public final void setServerState(int state) {
+	protected final void setServerState(int state) {
 		server.setServerState(state);
 	}
 
@@ -155,7 +154,7 @@
 	 * @param mode the mode in which a server is running, one of the mode constants
 	 *    defined by {@link org.eclipse.debug.core.ILaunchManager}
 	 */
-	public final void setMode(String mode) {
+	protected final void setMode(String mode) {
 		server.setMode(mode);
 	}
 
@@ -165,7 +164,7 @@
 	 * @param state <code>true</code> if the server needs to be restarted,
 	 *    and <code>false</code> otherwise
 	 */
-	public final void setServerRestartState(boolean state) {
+	protected final void setServerRestartState(boolean state) {
 		server.setServerRestartState(state);
 	}
 
@@ -175,7 +174,7 @@
 	 * @param state the current publish state of the server, one of the
 	 *    publish constants defined by {@link IServer}
 	 */
-	public final void setServerPublishState(int state) {
+	protected final void setServerPublishState(int state) {
 		server.setServerPublishState(state);
 	}
 
@@ -186,7 +185,7 @@
 	 * @param state the current state of the module, one of the state
 	 *    constants defined by {@link IServer}
 	 */
-	public final void setModuleState(IModule[] module, int state) {
+	protected final void setModuleState(IModule[] module, int state) {
 		server.setModuleState(module, state);
 	}
 
@@ -197,7 +196,7 @@
 	 * @param state the current publish state of the module, one of the
 	 *    publish constants defined by {@link IServer}
 	 */
-	public final void setModulePublishState(IModule[] module, int state) {
+	protected final void setModulePublishState(IModule[] module, int state) {
 		server.setModulePublishState(module, state);
 	}
 
@@ -208,7 +207,7 @@
 	 * @param state <code>true</code> if the module needs to be restarted,
 	 *    and <code>false</code> otherwise
 	 */
-	public final void setModuleRestartState(IModule[] module, boolean state) {
+	protected final void setModuleRestartState(IModule[] module, boolean state) {
 		server.setModuleRestartState(module, state);
 	}
 
@@ -376,14 +375,13 @@
 	 * @return <code>true</code> if the given module can be
 	 * restarted, and <code>false</code> otherwise 
 	 */
-	public boolean canRestartModule(IModule[] module) {
+	public boolean canControlModule(IModule[] module) {
 		return false;
 	}
-
+	
 	/**
-	 * Asynchronously restarts the given module on the server.
-	 * See the specification of 
-	 * {@link IServer#synchronousRestartModule(IModule[], IProgressMonitor)}
+	 * Starts the given module on the server. See the specification of 
+	 * {@link IServer#startModule(IModule[], IServer.IOperationListener)}
 	 * for further details. 
 	 * <p>
 	 * The implementation should update the module sync state and fire
@@ -397,18 +395,39 @@
 	 * [issue: Since this method is ascynchronous, is there
 	 * any need for the progress monitor?]
 	 * </p>
-	 * <p>
-	 * [issue: If the module was just published to the server
-	 * and had never been started, would is be ok to "start"
-	 * the module using this method?]
-	 * </p>
 	 * 
 	 * @param module the module to be started
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
 	 * @exception CoreException if an error occurs while trying to restart the module
 	 */
-	public void restartModule(IModule[] module, IProgressMonitor monitor) throws CoreException {
+	public void startModule(IModule[] module, IProgressMonitor monitor) throws CoreException {
+		// do nothing
+	}
+
+	/**
+	 * Stops the given module on the server. See the specification of 
+	 * {@link IServer#stopModule(IModule[], IServer.IOperationListener)}
+	 * for further details. 
+	 * <p>
+	 * The implementation should update the module sync state and fire
+	 * an event for the module.
+	 * </p>
+	 * <p>
+	 * This method will throw an exception if the module does not exist on
+	 * the server.
+	 * </p>
+	 * <p>
+	 * [issue: Since this method is ascynchronous, is there
+	 * any need for the progress monitor?]
+	 * </p>
+	 * 
+	 * @param module the module to be stopped
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @exception CoreException if an error occurs while trying to restart the module
+	 */
+	public void stopModule(IModule[] module, IProgressMonitor monitor) throws CoreException {
 		// do nothing
 	}
 
@@ -443,7 +462,7 @@
 	 * @param module the module
 	 * @return an array containing the published module resource
 	 */
-	public IModuleResource[] getPublishedResources(IModule[] module) {
+	protected IModuleResource[] getPublishedResources(IModule[] module) {
 		return server.getPublishedResources(module);
 	}
 
@@ -454,7 +473,7 @@
 	 * @param module the module
 	 * @return an array containing the publish resource delta
 	 */
-	public IModuleResourceDelta[] getPublishedResourceDelta(IModule[] module) {
+	protected IModuleResourceDelta[] getPublishedResourceDelta(IModule[] module) {
 		return server.getPublishedResourceDelta(module);
 	}
 
@@ -475,7 +494,7 @@
 	 *
 	 * @return a temporary directory
 	 */
-	public final IPath getTempDirectory() {
+	protected IPath getTempDirectory() {
 		return server.getTempDirectory();
 	}
 
@@ -484,7 +503,7 @@
 	 *  
 	 * @param status the status
 	 */
-	public final void setServerStatus(IStatus status) {
+	protected final void setServerStatus(IStatus status) {
 		server.setServerStatus(status);
 	}
 
@@ -494,13 +513,24 @@
 	 * @param module the module
 	 * @param status the status
 	 */
-	public final void setModuleStatus(IModule[] module, IStatus status) {
+	protected final void setModuleStatus(IModule[] module, IStatus status) {
 		server.setModuleStatus(module, status);
 	}
-	
+
+	/**
+	 * Publish to the server.
+	 * 
+	 * @param kind the publish kind
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @return the publish status
+	 */
 	public IStatus publish(int kind, IProgressMonitor monitor) {
 		Trace.trace(Trace.FINEST, "-->-- Publishing to server: " + toString() + " -->--");
-
+		
+		if (getServer().getServerType().hasRuntime() && getServer().getRuntime() == null)
+			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishNoRuntime, null);
+		
 		final List moduleList = getAllModules();
 		final List kindList = new ArrayList();
 		
@@ -516,24 +546,22 @@
 				kindList.add(new Integer(ServerBehaviourDelegate.ADDED));
 		}
 		
-		IOptionalTask[] tasks = getTasks();
-		
 		addRemovedModules(moduleList, kindList);
 		
 		while (moduleList.size() > kindList.size()) {
 			kindList.add(new Integer(ServerBehaviourDelegate.REMOVED));
 		}
-
+		
+		PublishOperation[] tasks = getTasks(kind, moduleList, kindList);
 		int size = 2000 + 3500 * moduleList.size() + 500 * tasks.length;
 		
 		monitor = ProgressUtil.getMonitorFor(monitor);
-		monitor.beginTask(NLS.bind(Messages.publishing, toString()), size);
+		monitor.beginTask(NLS.bind(Messages.publishing, getServer().getName()), size);
 
-		// TODO - group up status until the end and use better message based on success or failure
-		MultiStatus multi = new MultiStatus(ServerPlugin.PLUGIN_ID, 0, Messages.publishingStatus, null);
+		MultiStatus tempMulti = new MultiStatus(ServerPlugin.PLUGIN_ID, 0, "", null);
 
 		if (monitor.isCanceled())
-			return new Status(IStatus.INFO, ServerPlugin.PLUGIN_ID, 0, Messages.publishingCancelled, null);
+			return Status.CANCEL_STATUS;
 		
 		// start publishing
 		Trace.trace(Trace.FINEST, "Calling publishStart()");
@@ -545,30 +573,30 @@
 		}
 		
 		// perform tasks
-		IStatus taskStatus = performTasks(tasks, monitor);
+		MultiStatus taskStatus = performTasks(tasks, monitor);
 		if (taskStatus != null)
-			multi.add(taskStatus);
+			tempMulti.addAll(taskStatus);
 		
 		// publish the server
 		try {
-			if (!monitor.isCanceled() && getServer().getServerType().hasServerConfiguration()) {
+			if (!monitor.isCanceled()) {
 				publishServer(kind, ProgressUtil.getSubMonitorFor(monitor, 1000));
 			}
 		} catch (CoreException ce) {
 			Trace.trace(Trace.INFO, "CoreException publishing to " + toString(), ce);
-			multi.add(ce.getStatus());
+			tempMulti.add(ce.getStatus());
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error publishing configuration to " + toString(), e);
-			multi.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e));
+			tempMulti.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e));
 		}
 		
 		// publish modules
 		if (!monitor.isCanceled()) {
 			try {
-				publishModules(kind, moduleList, kindList, multi, monitor);
+				publishModules(kind, moduleList, kindList, tempMulti, monitor);
 			} catch (Exception e) {
 				Trace.trace(Trace.WARNING, "Error while publishing modules", e);
-				multi.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e));
+				tempMulti.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e));
 			}
 		}
 		
@@ -578,32 +606,45 @@
 			publishFinish(ProgressUtil.getSubMonitorFor(monitor, 500));
 		} catch (CoreException ce) {
 			Trace.trace(Trace.INFO, "CoreException publishing to " + toString(), ce);
-			multi.add(ce.getStatus());
+			tempMulti.add(ce.getStatus());
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error stopping publish to " + toString(), e);
-			multi.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e));
+			tempMulti.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e));
 		}
 		
-		if (monitor.isCanceled()) {
-			IStatus status = new Status(IStatus.INFO, ServerPlugin.PLUGIN_ID, 0, Messages.publishingCancelled, null);
-			multi.add(status);
-		}
-
-		MultiStatus ps = new MultiStatus(ServerPlugin.PLUGIN_ID, 0, Messages.publishingStop, null);
-		ps.add(multi);
-
+		if (monitor.isCanceled())
+			return Status.CANCEL_STATUS;
+		
 		monitor.done();
-
+		
 		Trace.trace(Trace.FINEST, "--<-- Done publishing --<--");
 		
-		if (multi.getChildren().length == 1)
-			return multi.getChildren()[0];
+		if (tempMulti.getChildren().length == 1)
+			return tempMulti.getChildren()[0];
+		
+		MultiStatus multi = null;
+		if (tempMulti.getSeverity() == IStatus.OK)
+			multi = new MultiStatus(ServerPlugin.PLUGIN_ID, 0, Messages.publishingStatusOk, null);
+		else if (tempMulti.getSeverity() == IStatus.INFO)
+			multi = new MultiStatus(ServerPlugin.PLUGIN_ID, 0, Messages.publishingStatusInfo, null);
+		else if (tempMulti.getSeverity() == IStatus.WARNING)
+			multi = new MultiStatus(ServerPlugin.PLUGIN_ID, 0, Messages.publishingStatusWarning, null);
+		else if (tempMulti.getSeverity() == IStatus.ERROR)
+			multi = new MultiStatus(ServerPlugin.PLUGIN_ID, 0, Messages.publishingStatusError, null);
+		multi.addAll(tempMulti);
 		
 		return multi;
 	}
 
 	/**
 	 * Publish a single module.
+	 * 
+	 * @param kind a publish kind
+	 * @param module a module
+	 * @param deltaKind the delta kind
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @return the status
 	 */
 	protected IStatus publishModule(int kind, IModule[] module, int deltaKind, IProgressMonitor monitor) {
 		Trace.trace(Trace.FINEST, "Publishing module: " + module);
@@ -612,11 +653,13 @@
 		IModule m = module[size - 1];
 		monitor.beginTask(NLS.bind(Messages.publishingModule, m.getName()), 1000);
 		
-		IStatus status = new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.publishedModule, m.getName()), null);
+		IStatus status = Status.OK_STATUS;
 		try {
 			publishModule(kind, deltaKind, module, monitor);
 		} catch (CoreException ce) {
 			status = ce.getStatus();
+		} catch (Exception e) {
+			status = new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e);
 		}
 		
 		/*Trace.trace(Trace.FINEST, "Delta:");
@@ -632,15 +675,35 @@
 		Trace.trace(Trace.FINEST, "Done publishing: " + module);
 		return status;
 	}
-	
+
+	/**
+	 * Returns <code>true</code> if the given module has been published, and
+	 *    <code>false</code> otherwise.
+	 * 
+	 * @param module a module
+	 * @return <code>true</code> if the given module has been published, and
+	 *    <code>false</code> otherwise
+	 */
 	protected boolean hasBeenPublished(IModule[] module) {
 		return server.getServerPublishInfo().hasModulePublishInfo(module);
 	}
-	
+
+	/**
+	 * Adds removed modules.
+	 * 
+	 * @param moduleList a list of modules
+	 * @param kindList a list of publish kinds
+	 */
 	protected void addRemovedModules(List moduleList, List kindList) {
 		server.getServerPublishInfo().addRemovedModules(moduleList, kindList);
 	}
-	
+
+	/**
+	 * Update the stored publish info for the given module.
+	 * 
+	 * @param deltaKind a publish delta kind
+	 * @param module a module
+	 */
 	protected void updatePublishInfo(int deltaKind, IModule[] module) {
 		if (deltaKind == ServerBehaviourDelegate.REMOVED)
 			server.getServerPublishInfo().removeModulePublishInfo(module);
@@ -653,21 +716,28 @@
 	 * should continue, or false if publishing has failed or is cancelled.
 	 * 
 	 * Uses 500 ticks plus 3500 ticks per module
+	 * 
+	 * @param kind the publish kind
+	 * @param modules a list of modules
+	 * @param deltaKind a list of delta kinds
+	 * @param multi a multistatus to add the status to
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
 	 */
-	protected void publishModules(int kind, List modules2, List deltaKind, MultiStatus multi, IProgressMonitor monitor) {
-		if (modules2 == null)
+	protected void publishModules(int kind, List modules, List deltaKind, MultiStatus multi, IProgressMonitor monitor) {
+		if (modules == null)
 			return;
-
-		int size = modules2.size();
+		
+		int size = modules.size();
 		if (size == 0)
 			return;
 		
 		if (monitor.isCanceled())
 			return;
-
+		
 		// publish modules
 		for (int i = 0; i < size; i++) {
-			IStatus status = publishModule(kind, (IModule[]) modules2.get(i), ((Integer)deltaKind.get(i)).intValue(), ProgressUtil.getSubMonitorFor(monitor, 3000));
+			IStatus status = publishModule(kind, (IModule[]) modules.get(i), ((Integer)deltaKind.get(i)).intValue(), ProgressUtil.getSubMonitorFor(monitor, 3000));
 			multi.add(status);
 		}
 	}
@@ -676,10 +746,13 @@
 	 * Returns the publish tasks that have been targetted to this server.
 	 * These tasks should be run during publishing.
 	 * 
+	 * @param kind one of the IServer.PUBLISH_XX constants
+	 * @param moduleList a list of modules
+	 * @param kindList list of one of the IServer publish change constants
 	 * @return a possibly empty array of IOptionalTasks
 	 */
-	protected final IOptionalTask[] getTasks() {
-		return server.getTasks();
+	protected final PublishOperation[] getTasks(int kind, List moduleList, List kindList) {
+		return server.getTasks(kind, moduleList, kindList);
 	}
 
 	/**
@@ -700,27 +773,39 @@
 	 *    reporting and cancellation are not desired
 	 * @return the status
 	 */
-	protected IStatus performTasks(IOptionalTask[] tasks, IProgressMonitor monitor) {
+	protected MultiStatus performTasks(PublishOperation[] tasks, IProgressMonitor monitor) {
 		int size = tasks.length;
 		Trace.trace(Trace.FINEST, "Performing tasks: " + size);
 		
 		if (size == 0)
 			return null;
 		
-		Status multi = new MultiStatus(ServerPlugin.PLUGIN_ID, 0, Messages.taskPerforming, null);
-
+		MultiStatus multi = new MultiStatus(ServerPlugin.PLUGIN_ID, 0, Messages.taskPerforming, null);
+		
 		for (int i = 0; i < size; i++) {
-			IOptionalTask task = tasks[i];
+			PublishOperation task = tasks[i];
 			monitor.subTask(NLS.bind(Messages.taskPerforming, task.toString()));
 			try {
-				task.execute(ProgressUtil.getSubMonitorFor(monitor, 500));
+				task.execute(ProgressUtil.getSubMonitorFor(monitor, 500), null);
 			} catch (CoreException ce) {
 				Trace.trace(Trace.SEVERE, "Task failed", ce);
+				multi.add(ce.getStatus());
 			}
+			
+			// return early if the monitor has been cancelled
 			if (monitor.isCanceled())
 				return multi;
 		}
 		
 		return multi;
 	}
+
+	/**
+	 * Called when resources change within the workspace.
+	 * This gives the server an opportunity to update the server or module
+	 * restart state.
+	 */
+	public void handleResourceChange() {
+		// do nothing
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
index c1f26b6..cddd7e2 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
@@ -45,10 +45,6 @@
  * This abstract class is intended to be extended only by clients
  * to extend the <code>serverTypes</code> extension point.
  * </p>
- * <p>
- * <it>Caveat: The server core API is still in an early form, and is
- * likely to change significantly before the initial release.</it>
- * </p>
  * 
  * @see IServer
  * @see IServerWorkingCopy
@@ -73,8 +69,10 @@
 	 * </p>
 	 * 
 	 * @param newServer the server instance
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
 	 */
-	public final void initialize(Server newServer) {
+	final void initialize(Server newServer, IProgressMonitor monitor) {
 		server = newServer;
 		if (newServer instanceof ServerWorkingCopy)
 			serverWC = (ServerWorkingCopy) newServer;
@@ -89,7 +87,7 @@
 	 * Clients should never call this method.
 	 * </p>
 	 */
-	public void initialize() {
+	protected void initialize() {
 		// do nothing
 	}
 
@@ -98,7 +96,7 @@
 	 * 
 	 * @return the server
 	 */
-	public IServer getServer() {
+	public final IServer getServer() {
 		return server;
 	}
 
@@ -107,7 +105,7 @@
 	 * 
 	 * @return the server
 	 */
-	public IServerWorkingCopy getServerWorkingCopy() {
+	public final IServerWorkingCopy getServerWorkingCopy() {
 		return serverWC;
 	}
 
@@ -119,7 +117,7 @@
 	 * @return the attribute value
 	 * @see #setAttribute(String, int)
 	 */
-	public int getAttribute(String id, int defaultValue) {
+	protected final int getAttribute(String id, int defaultValue) {
 		return server.getAttribute(id, defaultValue);
 	}
 
@@ -131,7 +129,7 @@
 	 * @return the attribute value
 	 * @see #setAttribute(String, boolean)
 	 */
-	public boolean getAttribute(String id, boolean defaultValue) {
+	protected final boolean getAttribute(String id, boolean defaultValue) {
 		return server.getAttribute(id, defaultValue);
 	}
 
@@ -143,7 +141,7 @@
 	 * @return the attribute value
 	 * @see #setAttribute(String, String)
 	 */
-	public String getAttribute(String id, String defaultValue) {
+	protected final String getAttribute(String id, String defaultValue) {
 		return server.getAttribute(id, defaultValue);
 	}
 
@@ -155,7 +153,7 @@
 	 * @return the attribute value
 	 * @see #setAttribute(String, List)
 	 */
-	public List getAttribute(String id, List defaultValue) {
+	protected final List getAttribute(String id, List defaultValue) {
 		return server.getAttribute(id, defaultValue);
 	}
 
@@ -167,7 +165,7 @@
 	 * @return the attribute value
 	 * @see #setAttribute(String, Map)
 	 */
-	public Map getAttribute(String id, Map defaultValue) {
+	protected final Map getAttribute(String id, Map defaultValue) {
 		return server.getAttribute(id, defaultValue);
 	}
 
@@ -250,7 +248,7 @@
 	public abstract IModule[] getRootModules(IModule module) throws CoreException;
 
 	/**
-	 * Returns an array of IServerPorts that this server has.
+	 * Returns an array of ServerPorts that this server has.
 	 *
 	 * @return the server's ports
 	 */
@@ -262,8 +260,11 @@
 	 * Initializes this server with default values. This method is called when
 	 * a new server is created so that the server can be initialized with
 	 * meaningful values.
+	 * 
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
 	 */
-	public void setDefaults() {
+	public void setDefaults(IProgressMonitor monitor) {
 		// do nothing
 	}
 	
@@ -275,7 +276,7 @@
 	 * @param value the value of the specified attribute
 	 * @see #getAttribute(String, int)
 	 */
-	public void setAttribute(String id, int value) {
+	protected final void setAttribute(String id, int value) {
 		serverWC.setAttribute(id, value);
 	}
 
@@ -287,7 +288,7 @@
 	 * @param value the value of the specified attribute
 	 * @see #getAttribute(String, boolean)
 	 */
-	public void setAttribute(String id, boolean value) {
+	protected final void setAttribute(String id, boolean value) {
 		serverWC.setAttribute(id, value);
 	}
 
@@ -299,7 +300,7 @@
 	 * @param value the value of the specified attribute
 	 * @see #getAttribute(String, String)
 	 */
-	public void setAttribute(String id, String value) {
+	protected final void setAttribute(String id, String value) {
 		serverWC.setAttribute(id, value);
 	}
 
@@ -311,7 +312,7 @@
 	 * @param value the value of the specified attribute
 	 * @see #getAttribute(String, List)
 	 */
-	public void setAttribute(String id, List value) {
+	protected final void setAttribute(String id, List value) {
 		serverWC.setAttribute(id, value);
 	}
 
@@ -323,7 +324,7 @@
 	 * @param value the value of the specified attribute
 	 * @see #getAttribute(String, Map)
 	 */
-	public void setAttribute(String id, Map value) {
+	protected final void setAttribute(String id, Map value) {
 		serverWC.setAttribute(id, value);
 	}
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/package.html b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/package.html
new file mode 100644
index 0000000..d0fe412
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/package.html
@@ -0,0 +1,30 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
+<title>WTP API overview</title>
+</head>
+<body>
+<p>SPI support for the server tools framework.</p>
+<table width="500">
+<tr>
+<td>
+<p>The classes in this package would typically be extended or used by
+SPI clients of the server tools framework who are providing a new server
+type, runtime type, or other extension. These delegates are never visible
+to regular API clients unless explicitly exposed by the provider.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>The majority of these classes are delegates to implement one of the
+extension points. View the extension point documentation for further
+details.</p>
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/package.xml b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/package.xml
index 66c45c7..4e31203 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/package.xml
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/package.xml
@@ -10,7 +10,7 @@
 
 <body>
 
-<p>SPI support for the server tools framework.</p>
+<abstract>SPI support for the server tools framework.</abstract>
 
 <p>The classes in this package would typically be extended or used by
 SPI clients of the server tools framework who are providing a new server
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/package.html b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/package.html
new file mode 100644
index 0000000..236cdb5
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/package.html
@@ -0,0 +1,58 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
+<title>WTP API overview</title>
+</head>
+<body>
+<p>The main server tools framework client API.</p>
+<table width="500">
+<tr>
+<td>
+<p>ServerCore is the main entry-point and provides access to most of the
+remaining API. From here, you can get the existing server runtimes and
+servers, get the available server types, and access interfaces for all
+extension points.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>ServerUtil provides utility and convenience methods for dealing with
+server tools. It provides easy access to modules, server runtimes, and
+what combinations are supported (e.g. which runtimes can be used to
+target a particular project).</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>IRuntime and IServer are the two main API objects. IRuntime is used
+to target projects to a particular server installation and compile/build
+against them. When a runtime is targetted to a particular runtime,
+all of the applicable IRuntimeTargetHandler extensions are called to
+set the classpath or modify other project settings for the runtime.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>IServer is the main server class that clients can use to start/stop
+and publish to servers.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>IModules provide the "content" that can be published to servers.
+See the server tools API overview for more information.</p>
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/package.xml b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/package.xml
index 6805ddb..9a254d3 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/package.xml
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/package.xml
@@ -10,7 +10,7 @@
 
 <body>
 
-<p>The main server tools framework client API.</p>
+<abstract>The main server tools framework client API.</abstract>
 
 <p>ServerCore is the main entry-point and provides access to most of the
 remaining API. From here, you can get the existing server runtimes and
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/HttpLaunchable.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/HttpLaunchable.java
index 2011285..da4acc5 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/HttpLaunchable.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/HttpLaunchable.java
@@ -12,7 +12,9 @@
 
 import java.net.URL;
 /**
- *
+ * An HTTP launchable object. Encapsulates a launch of a URL for the Run on Server
+ * support.
+ * 
  * @since 1.0
  */
 public class HttpLaunchable {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/NullModuleArtifact.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/NullModuleArtifact.java
index d2029a8..88bf49b 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/NullModuleArtifact.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/NullModuleArtifact.java
@@ -13,6 +13,7 @@
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IModuleArtifact;
 /**
+ * A dummy module artifact.
  * 
  * @since 1.0
  */
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PingThread.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PingThread.java
deleted file mode 100644
index 3a44952..0000000
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PingThread.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.core.util;
-
-import java.io.FileNotFoundException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLConnection;
-
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.internal.Trace;
-import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
-/**
- * Thread used to ping server to test when it is started.
- * 
- * @since 1.0
- */
-public class PingThread {
-	// delay before pinging starts
-	private static final int PING_DELAY = 2000;
-
-	// delay between pings
-	private static final int PING_INTERVAL = 250;
-
-	// maximum number of pings before giving up
-	private int maxPings = 56; // total: 16 seconds + connection time
-
-	private boolean stop = false;
-	private String url;
-	private ServerBehaviourDelegate server;
-	private IServer server2;
-
-	/**
-	 * Create a new PingThread.
-	 * 
-	 * @param server2
-	 * @param server
-	 * @param url
-	 * @param maxPings
-	 */
-	public PingThread(IServer server2, ServerBehaviourDelegate server, String url, int maxPings) {
-		super();
-		this.server = server;
-		this.server2 = server2;
-		this.url = url;
-		this.maxPings = maxPings;
-		Thread t = new Thread() {
-			public void run() {
-				ping();
-			}
-		};
-		t.setDaemon(true);
-		t.start();
-	}
-
-	/**
-	 * Ping the server until it is started. Then set the server
-	 * state to STATE_STARTED.
-	 */
-	protected void ping() {
-		int count = 0;
-		try {
-			Thread.sleep(PING_DELAY);
-		} catch (Exception e) {
-			// ignore
-		}
-		while (!stop) {
-			try {
-				if (count == maxPings) {
-					try {
-						server2.stop(false);
-					} catch (Exception e) {
-						Trace.trace(Trace.FINEST, "Ping: could not stop server");
-					}
-					stop = true;
-					break;
-				}
-				count++;
-				
-				Trace.trace(Trace.FINEST, "Ping: pinging");
-				URL pingUrl = new URL(url);
-				URLConnection conn = pingUrl.openConnection();
-				((HttpURLConnection)conn).getResponseCode();
-	
-				// ping worked - server is up
-				if (!stop) {
-					Trace.trace(Trace.FINEST, "Ping: success");
-					Thread.sleep(200);
-					server.setServerState(IServer.STATE_STARTED);
-				}
-				stop = true;
-			} catch (FileNotFoundException fe) {
-				try {
-					Thread.sleep(200);
-				} catch (Exception e) {
-					// ignore
-				}
-				server.setServerState(IServer.STATE_STARTED);
-				stop = true;
-			} catch (Exception e) {
-				Trace.trace(Trace.FINEST, "Ping: failed");
-				// pinging failed
-				if (!stop) {
-					try {
-						Thread.sleep(PING_INTERVAL);
-					} catch (InterruptedException e2) {
-						// ignore
-					}
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Tell the pinging to stop.
-	 */
-	public void stopPinging() {
-		Trace.trace(Trace.FINEST, "Ping: stopping");
-		stop = true;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModule.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModule.java
index 99a4271..122e935 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModule.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModule.java
@@ -12,13 +12,13 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.*;
 
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.internal.ModuleFile;
 import org.eclipse.wst.server.core.internal.ModuleFolder;
-import org.eclipse.wst.server.core.internal.Trace;
 import org.eclipse.wst.server.core.model.*;
 /**
  * A simple IModuleProject that maps a folder within a project
@@ -27,8 +27,7 @@
  * @since 1.0
  */
 public abstract class ProjectModule extends ModuleDelegate {
-	protected IProject project;
-	protected IPath root;
+	private IProject project;
 
 	/**
 	 * Create a new project module.
@@ -56,96 +55,6 @@
 	}
 
 	/**
-	 * Returns the root folder. The root folder is the project relative path
-	 * that points to the root directory of the module. All resources contained
-	 * within this folder belong to the module.
-	 * 
-	 * @return the root project-relative folder that contains the contents
-	 *    of the module
-	 */
-	public IPath getRootFolder() {
-		return root;
-	}
-
-	/*
-	 * @see IModuleProject#getModuleResourceDelta(IResourceDelta)
-	 */
-	/*public IModuleResourceDelta getModuleResourceDelta(IResourceDelta delta) {
-		Trace.trace(Trace.FINEST, "> getModuleResourceDelta");
-		IPath root2 = null;
-		try {
-			root2 = getRootFolder();
-		} catch (Exception e) {
-			Trace.trace(Trace.FINEST, "Error getting root2");
-		}
-		if (root2 == null) {
-			return convertChildren(delta, null);
-		}
-		class Helper {
-			boolean found = false;
-			IModuleResourceDelta delta2;
-		}
-		final Helper helper = new Helper();
-		final IPath root3 = root2;
-		try {
-			delta.accept(new IResourceDeltaVisitor() {
-				public boolean visit(IResourceDelta visitDelta) {
-					if (!helper.found && root3.equals(visitDelta.getProjectRelativePath())) {
-						helper.delta2 = convertChildren(visitDelta, null);
-						helper.found = true;
-						return false;
-					}
-					return true;
-				}
-			});
-			Trace.trace(Trace.FINEST, "< getModuleResourceDelta");
-			return helper.delta2;
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not get module resource delta");
-		}
-		Trace.trace(Trace.FINEST, "< getModuleResourceDelta null");
-		return null;
-	}*/
-	
-	/**
-	 * 
-	 */
-	/*protected IModuleResourceDelta convertChildren(IResourceDelta delta, IModuleFolder parent) {
-		int flags = delta.getKind();
-		int kind = IModuleResourceDelta.NO_CHANGE;
-		if (flags == IResourceDelta.ADDED)
-			kind = IModuleResourceDelta.ADDED;
-		else if (flags == IResourceDelta.REMOVED)
-			kind = IModuleResourceDelta.REMOVED;
-		else if (flags == IResourceDelta.CHANGED)
-			kind = IModuleResourceDelta.CHANGED;
-		
-		IResource resource = delta.getResource();
-		
-		IModuleResource pubResource = null;
-		if (resource instanceof IContainer)
-			pubResource = new ProjectModuleFolder(this, parent, (IContainer) resource);	
-		else if (resource instanceof IFile) {
-			if (delta.getFlags() == IResourceDelta.MARKERS)
-				return null;
-			pubResource = new ProjectModuleFile(this, parent, (IFile) resource);
-		}
-		
-		ModuleResourceDelta deployDelta = new ModuleResourceDelta(pubResource, kind);
-		
-		IResourceDelta[] children = delta.getAffectedChildren();
-		if (children != null && pubResource instanceof IModuleFolder) {
-			int size = children.length;
-			for (int i = 0; i < size; i++) {
-				IModuleResourceDelta childDelta = convertChildren(children[i], (IModuleFolder) pubResource);
-				if (childDelta != null)
-					deployDelta.addChild(childDelta);
-			}
-		}
-		return deployDelta;
-	}*/
-
-	/**
 	 * Helper method - returns the module's id.
 	 * 
 	 * @return the module id
@@ -163,52 +72,6 @@
 	}
 
 	/**
-	 * @see ModuleDelegate#members()
-	 */
-	public IModuleResource[] members() throws CoreException {
-		IPath root2 = null;
-		try {
-			root2 = getRootFolder();
-		} catch (Exception e) {
-			// ignore
-		}
-		try {
-			if (root2 == null || root2.isRoot() || root2.equals(new Path("")) || root2.equals(new Path("/")))
-				return getModuleResources(Path.EMPTY, getProject());
-			
-			IFolder folder = project.getFolder(root2);
-			return getModuleResources(Path.EMPTY, folder);
-		} catch (CoreException e) {
-			throw e;
-		}
-	}
-
-	protected IModuleResource[] getModuleResources(IPath path, IContainer container) throws CoreException {
-		List list = new ArrayList();
-
- 		IResource[] resources = container.members();
-	 	if (resources != null) {
-	 		int size = resources.length;
-	 		for (int i = 0; i < size; i++) {
-				IResource resource = resources[i];
-				if (resource instanceof IContainer) {
-					IContainer container2 = (IContainer) resource;
-					ModuleFolder mf = new ModuleFolder(container2.getName(), path);
-					mf.setMembers(getModuleResources(path.append(container2.getName()), container2));
-					list.add(mf);
-				} else if (resource instanceof IFile) {
-					IFile file = (IFile) resource;
-					list.add(new ModuleFile(file.getName(), path, file.getModificationStamp()));
-				}
-			}
-	 	}
-	 	
-	 	IModuleResource[] moduleResources = new IModuleResource[list.size()];
-	 	list.toArray(moduleResources);
-	 	return moduleResources;
-	}
-
-	/**
 	 * Helper method - returns the module's name.
 	 * 
 	 * @return the module name
@@ -234,72 +97,18 @@
 	public boolean equals(Object obj) {
 		if (obj == null || !(obj instanceof ProjectModule))
 			return false;
-
+		
 		ProjectModule dp = (ProjectModule) obj;
 		//if (getFactoryId() != null && !getFactoryId().equals(dp.getFactoryId()))
 		//	return false;
-			
-		IPath root2 = null;
-		try {
-			root2 = getRootFolder();
-		} catch (Exception e) {
-			// ignore
-		}
-		
-		IPath root3 = null;
-		try {
-			root3 = dp.getRootFolder();
-		} catch (Exception e) {
-			// ignore
-		}
 		
 		if (project != null && project.exists() && !project.equals(dp.getProject()))
 			return false;
 		
 		if (getId() != null && !getId().equals(dp.getId()))
 			return false;
-
-		if (root2 == null && root3 != null)
-			return false;
-		if (root2 != null && !root2.equals(root3))
-			return false;
-
-		return true;
-	}
-	
-	/**
-	 * Fire a module change event.
-	 */
-	protected void fireModuleChangeEvent(boolean isChange, IModule[] added, IModule[] changed, IModule[] removed) {
-		Trace.trace(Trace.FINEST, "->- Firing module change event: " + getModule().getName() + " (" + isChange + ") ->-");
-	
-		// TODO: should module event still be here?
-		/*if (listeners == null || listeners.isEmpty())
-			return;
-	
-		int size = listeners.size();
-		IModuleListener[] dcl = new IModuleListener[size];
-		listeners.toArray(dcl);
 		
-		ModuleEvent event = new ModuleEvent(getModule(), isChange, added, changed, removed);
-	
-		for (int i = 0; i < size; i++) {
-			try {
-				Trace.trace(Trace.FINEST, "  Firing module change event to: " + dcl[i]);
-				dcl[i].moduleChanged(event);
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "  Error firing module change event", e);
-			}
-		}*/
-		Trace.trace(Trace.FINEST, "-<- Done firing module change event -<-");
-	}
-	
-	/**
-	 * Called when the listener paths from the module factory change.
-	 * Use this method to re-cache information about the module.
-	 */
-	protected void update() {
-		// do nothing
+		return true;
 	}
 
 	/**
@@ -310,4 +119,50 @@
 	public IModule[] getChildModules() {
 		return null;
 	}
+
+	/**
+	 * Basic implementation of members() method. Assumes that the entire project should
+	 * be published to a server.
+	 * 
+	 * @see ModuleDelegate#members()
+	 */
+	public IModuleResource[] members() throws CoreException {
+		return getModuleResources(Path.EMPTY, getProject());
+	}
+
+	/**
+	 * Return the module resources for a given path.
+	 * 
+	 * @param path a path
+	 * @param container a container
+	 * @return an array of module resources
+	 * @throws CoreException
+	 */
+	private IModuleResource[] getModuleResources(IPath path, IContainer container) throws CoreException {
+		List list = new ArrayList();
+
+		IResource[] resources = container.members();
+		if (resources != null) {
+			int size = resources.length;
+			for (int i = 0; i < size; i++) {
+				IResource resource = resources[i];
+				if (resource instanceof IContainer) {
+					IContainer container2 = (IContainer) resource;
+					if (container2 != null && container2.exists()) {
+						ModuleFolder mf = new ModuleFolder(container, container2.getName(), path);
+						mf.setMembers(getModuleResources(path.append(container2.getName()), container2));
+						list.add(mf);
+					}
+				} else if (resource instanceof IFile) {
+					IFile file = (IFile) resource;
+					if (file != null && file.exists())
+						list.add(new ModuleFile(file, file.getName(), path, file.getModificationStamp()));
+				}
+			}
+		}
+
+		IModuleResource[] moduleResources = new IModuleResource[list.size()];
+		list.toArray(moduleResources);
+		return moduleResources;
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
index bd364d7..34d8a25 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
@@ -10,41 +10,27 @@
  **********************************************************************/
 package org.eclipse.wst.server.core.util;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
-import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.internal.ModuleFactory;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
 import org.eclipse.wst.server.core.internal.Trace;
 import org.eclipse.wst.server.core.model.ModuleFactoryDelegate;
 /**
- * 
+ * A helper class for defining a module factory that provides modules
+ * based on projects.
  * 
  * @since 1.0
  */
 public abstract class ProjectModuleFactoryDelegate extends ModuleFactoryDelegate {
-	protected static IResourceChangeListener listener;
-	
-	protected static List factories = new ArrayList();
+	private static List factories = new ArrayList();
 
-	protected List added;
-	protected List removed;
-
-	// map from IProject to IModule[]
-	protected final Map projects = new HashMap();
-	protected boolean initialized = false;
+	// list of IModules
+	private List modules;
 
 	/**
 	 * Construct a new ProjectModuleFactoryDelegate.
@@ -53,49 +39,37 @@
 		super();
 		
 		factories.add(this);
+	}
+
+	/**
+	 * Cache any preexisting modules.
+	 */
+	private final void cacheModules() {
+		if (modules != null)
+			return;
 		
-		addListener();
-	}
-
-
-	/**
-	 * Cache any preexisting module.
-	 * TODO: When/where is this called?
-	 */
-	protected void cacheModules() {
-		cacheModules(true);
-	}
-
-
-	/**
-	 * Cache any preexisting module.
-	 * TODO: When/where is this called?
-	 */
-	protected void cacheModules(boolean forceUpdate) { 
 		try {
+			clearCache();
 			IProject[] projects2 = getWorkspaceRoot().getProjects();
 			int size = projects2.length;
+			modules = new ArrayList(size);
 			for (int i = 0; i < size; i++) {
 				//Trace.trace("caching: " + this + " " + projects[i] + " " + isValidModule(projects[i]));
-				if(!projects2[i].isAccessible())
-					removeModules(projects2[i]);
-				else if (isValidModule(projects2[i]) && (forceUpdate || needsUpdating(projects2[i])) ) {
-					addModules(projects2[i]);
-				} 
+				if (projects2[i].isAccessible()) {
+					try {
+						IModule module = createModule(projects2[i]);
+						if (module != null)
+							modules.add(module);
+					} catch (Throwable t) {
+						Trace.trace(Trace.SEVERE, "Error creating module", t);
+					}
+				}
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error caching modules", e);
-		} finally {
-			initialized = true;
 		}
-		fireEvents();
 	}
 
-	protected boolean needsUpdating(IProject project) {
-		return true;
-	}
-
-
 	/**
 	 * Return the workspace root.
 	 * 
@@ -106,274 +80,97 @@
 	}
 
 	/**
-	 * Returns the modules for the given project, or null
-	 * if this factory does not have a module for the given project.
+	 * Return the modules provided by this factory.
+	 * 
+	 * @return a possibly-empty array of modules
+	 */
+	public final IModule[] getModules() {
+		cacheModules();
+		
+		IModule[] modules2 = new IModule[modules.size()];
+		modules.toArray(modules2);
+		return modules2;
+	}
+
+	/**
+	 * Handle changes to a project.
 	 * 
 	 * @param project a project
-	 * @return an array of modules.
+	 * @param delta a resource delta
 	 */
-	public IModule[] getModules(IProject project) {
+	public final static void handleGlobalProjectChange(final IProject project, IResourceDelta delta) {
+		ModuleFactory[] factories2 = ServerPlugin.getModuleFactories();
+		int size = factories2.length;
+		for (int i = 0; i < size; i++) {
+			if (factories2[i].delegate != null && factories2[i].delegate instanceof ProjectModuleFactoryDelegate) {
+				ProjectModuleFactoryDelegate pmfd = (ProjectModuleFactoryDelegate) factories2[i].delegate;
+				if (pmfd.deltaAffectsModules(delta)) {
+					pmfd.modules = null;
+					factories2[i].clearModuleCache();
+				}
+			}
+		}
+	}
+
+	/**
+	 * Returns <code>true</code> if the delta may have changed modules,
+	 * and <code>false</code> otherwise.
+	 * 
+	 * @param delta a resource delta
+	 * @return <code>true</code> if the delta may have changed modules,
+	 *    and <code>false</code> otherwise
+	 */
+	private final boolean deltaAffectsModules(IResourceDelta delta) {
+		class Temp {
+			boolean b = false;
+		}
+		final Temp t = new Temp();
+		
+		final IPath[] listenerPaths = getListenerPaths();
+		if (listenerPaths == null || listenerPaths.length == 0)
+			return false;
+		final int size = listenerPaths.length;
+		
 		try {
-			return (IModule[]) projects.get(project);
+			delta.accept(new IResourceDeltaVisitor() {
+				public boolean visit(IResourceDelta delta2) throws CoreException {
+					if (t.b)
+						return false;
+					//Trace.trace(Trace.FINEST, delta2.getResource() + "  " + delta2.getKind() + " " + delta2.getFlags());
+					boolean ok = false;
+					IPath path = delta2.getProjectRelativePath();
+					for (int i = 0; i < size; i++) {
+						if (listenerPaths[i].equals(path)) {
+							t.b = true;
+							return false;
+						} else if (path.isPrefixOf(listenerPaths[i])) {
+							ok = true;
+						}
+					}
+					return ok;
+				}
+			});
 		} catch (Exception e) {
 			// ignore
 		}
-		return null;
+		//Trace.trace(Trace.FINEST, "Delta contains change: " + t.b);
+		return t.b;
 	}
 
 	/**
-	 * Add a resource listener to the workspace.
+	 * Clear and cached metadata.
 	 */
-	protected static void addListener() {
-		if (listener != null)
-			return;
-
-		listener = new IResourceChangeListener() {
-			public void resourceChanged(IResourceChangeEvent event) {
-				Trace.trace(Trace.FINEST, "->- ProjectModuleFactoryDelegate listener responding to resource change: " + event.getType() + " ->-");
-				try {
-					IResourceDelta delta = event.getDelta();
-					
-					//if (delta.getFlags() == IResourceDelta.MARKERS || delta.getFlags() == IResourceDelta.NO_CHANGE)
-					//	return;
-				
-					delta.accept(new IResourceDeltaVisitor() {
-						public boolean visit(IResourceDelta visitorDelta) {
-							IResource resource = visitorDelta.getResource();
-							//Trace.trace(Trace.FINEST, "resource: " + resource);
-	
-							// only respond changes within projects
-							if (resource != null && resource instanceof IProject) {
-								IProject project = (IProject) resource;
-								handleGlobalProjectChange(project, visitorDelta);
-								return true;
-							} else if (resource != null && resource.getProject() != null) {
-								return false;
-							} else
-								return true;
-						}
-					});
-				} catch (Exception e) {
-					//Trace.trace(Trace.SEVERE, "Error responding to resource change", e);
-				}
-				fireGlobalEvents();
-				Trace.trace(Trace.FINEST, "-<- Done ProjectModuleFactoryDelegate responding to resource change -<-");
-			}
-		};
-		
-		ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE);
-	}
-	
-	/**
-	 * Handle changes to a project.
-	 * 
-	 * @param project a project
-	 * @param delta a resource delta
-	 */
-	protected static void handleGlobalProjectChange(final IProject project, IResourceDelta delta) {
-		// handle project level changes
-		Iterator iterator = factories.iterator();
-		while (iterator.hasNext()) {
-			ProjectModuleFactoryDelegate factory = (ProjectModuleFactoryDelegate) iterator.next();
-			//Trace.trace("Firing to: " + factory);
-			factory.handleProjectChange(project, delta);
-		}
-		
-		// handle internal updates
-		iterator = factories.iterator();
-		while (iterator.hasNext()) {
-			ProjectModuleFactoryDelegate factory = (ProjectModuleFactoryDelegate) iterator.next();
-			//Trace.trace("Firing to: " + factory);
-			factory.handleProjectInternalChange(project, delta);
-		}
-	}
-	
-	/**
-	 * Fire the accumulated module factory events.
-	 */
-	protected static void fireGlobalEvents() {
-		Trace.trace(Trace.FINEST, "Firing global module event");
-		Iterator iterator = factories.iterator();
-		while (iterator.hasNext()) {
-			ProjectModuleFactoryDelegate factory = (ProjectModuleFactoryDelegate) iterator.next();
-			factory.updateProjects();
-		}
-		
-		iterator = factories.iterator();
-		while (iterator.hasNext()) {
-			ProjectModuleFactoryDelegate factory = (ProjectModuleFactoryDelegate) iterator.next();
-			factory.fireEvents();
-		}
+	protected void clearCache() {
+		// ignore
 	}
 
 	/**
-	 * Temporary to make sure that all project modules are updated.
-	 */
-	private void updateProjects() {
-		IModule[] modules2 = getModules();
-		if (modules2 != null) {
-			int size = modules2.length;
-			for (int i = 0; i < size; i++) {
-				if (modules2[i] instanceof ProjectModule)
-					((ProjectModule) modules2[i]).update();
-			}
-		}
-	}
-
-	/**
-	 * Handle changes to a project.
-	 * 
-	 * @param project a project
-	 * @param delta a resource delta
-	 */
-	private void handleProjectChange(final IProject project, IResourceDelta delta) {
-		if(!initialized)
-			cacheModules(false);
-		if (projects.containsKey(project)) {
-			// already a module
-			if (((delta.getKind() &  IResourceDelta.REMOVED) != 0) || !isValidModule(project)) {
-				removeModules(project);
-			}
-		} else {
-			// not a module
-			if (isValidModule(project)) {
-				addModules(project);
-			}
-		}
-	}
-	
-	/**
-	 * Handle changes to a project.
-	 * 
-	 * @param project a project
-	 * @param delta a resource delta
-	 */
-	private void handleProjectInternalChange(final IProject project, IResourceDelta delta) {
-		final IPath[] paths = getListenerPaths();
-		if (paths != null) {
-			final IModule[] modules = getModules(project);
-			for (int i = 0; i < modules.length; i++) {
-				final IModule module = modules[i];
-				if (module != null && module instanceof ProjectModule) {
-					// check for any changes to the module
-					final IPath root = ((ProjectModule) module).getRootFolder();
-					IResourceDelta rootDelta = delta.findMember(root);
-					if (rootDelta != null)
-						((ProjectModule) module).fireModuleChangeEvent(true, null, null, null);
-					
-					// check for listener paths
-					final int size = paths.length;
-					class Temp {
-						boolean found = false;
-					}
-					final Temp temp = new Temp();
-					try {
-						delta.accept(new IResourceDeltaVisitor() {
-							public boolean visit(IResourceDelta visitorDelta) {
-								if (temp.found)
-									return false;
-								IPath path = visitorDelta.getProjectRelativePath();
-								
-								boolean prefix = false;
-								for (int j = 0; j < size && !temp.found; j++) {
-									if (paths[j].equals(path))
-										temp.found = true;
-									else if (path.isPrefixOf(paths[j]))
-										prefix = true;
-								}
-								if (temp.found) {
-									((ProjectModule) module).update();
-									return false;
-								} else if (prefix)
-									return true;
-								else
-									return false;
-							}
-						});
-					} catch (Exception e) {
-						Trace.trace(Trace.SEVERE, "Error searching for listening paths", e);
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * Add a module for the given project.
-	 * 
-	 * @param project a project
-	 */
-	protected void addModules(IProject project) {
-		
-		IModule[] modules = createModules(project);
-		if (modules == null || modules.length == 0)
-			return;
-		projects.put(project, modules);
-		added = new ArrayList(2);
-		added.addAll(Arrays.asList(modules));
-	}
-
-	/**
-	 * Remove the modules that represents the given project.
-	 * 
-	 * @param project a project
-	 */
-	protected void removeModules(IProject project) {
-		
-		try {
-			IModule[] modules = (IModule[]) projects.get(project);
-			
-			projects.remove(project);
-			if (removed == null)
-				removed = new ArrayList(2);
-			if(modules == null)
-				return;
-			removed.addAll(Arrays.asList(modules));
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error removing module project", e);
-		}
-	}
-
-	/**
-	 * Fire the accumulated module factory events.
-	 */
-	protected void fireEvents() {
-		if ((added == null || added.isEmpty()) && (removed == null || removed.isEmpty()))
-			return;
-
-		IModule[] add = null;
-		if (added != null) {
-			add = new IModule[added.size()];
-			added.toArray(add);
-		}
-		IModule[] remove = null;
-		if (removed != null) {
-			remove = new IModule[removed.size()];
-			removed.toArray(remove);
-		}
-		
-		fireModuleFactoryEvent(add, remove);
-		added = new ArrayList(2);
-		removed = new ArrayList(2);
-	}
-
-	/**
-	 * Returns true if the project may contain modules of the correct type.
-	 * This method is used only to improve performance.
-	 * 
-	 * @param project a project
-	 * @return <code>true</code> if the project may contain modules, and
-	 *    <code>false</code> if it definitely does not
-	 */
-	protected abstract boolean isValidModule(IProject project);
-
-	/**
-	 * Creates the modules for a given project.
+	 * Creates the module for a given project.
 	 * 
 	 * @param project a project to create modules for
-	 * @return a possibly empty array of modules
+	 * @return a module, or <code>null</code> if there was no module in the project
 	 */
-	protected abstract IModule[] createModules(IProject project);
+	protected abstract IModule createModule(IProject project);
 
 	/**
 	 * Returns the list of resources that the module should listen to
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishAdapter.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishAdapter.java
similarity index 77%
rename from plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishAdapter.java
rename to plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishAdapter.java
index d0de64f..276467b 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishAdapter.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishAdapter.java
@@ -8,22 +8,29 @@
  * Contributors:
  *     IBM Corporation - Initial API and implementation
  *******************************************************************************/
-package org.eclipse.wst.server.core.internal;
+package org.eclipse.wst.server.core.util;
 
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.wst.server.core.IPublishListener;
 import org.eclipse.wst.server.core.IServer;
 /**
  * Helper class which implements the IPublishListener interface
  * with empty methods.
  * 
- * @see org.eclipse.wst.server.core.internal.IPublishListener
+ * @see org.eclipse.wst.server.core.IPublishListener
  * @since 1.0
  */
 public class PublishAdapter implements IPublishListener {
+	/**
+	 * @see IPublishListener#publishStarted(IServer)
+	 */
 	public void publishStarted(IServer server) {
 		// do nothing
 	}
 
+	/**
+	 * @see IPublishListener#publishFinished(IServer, IStatus)
+	 */
 	public void publishFinished(IServer server, IStatus status) {
 		// do nothing
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java
index c81ec35..1c09a4c 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java
@@ -11,14 +11,13 @@
 package org.eclipse.wst.server.core.util;
 
 import java.io.IOException;
+import java.lang.reflect.Method;
 import java.net.InetAddress;
 import java.net.ServerSocket;
 import java.net.SocketException;
 import java.util.Random;
 
 import org.eclipse.wst.server.core.internal.Trace;
-
-import sun.net.spi.nameservice.dns.DNSNameService;
 /**
  * A utility class for socket-related function. It's main purposes are to find
  * unused ports, check whether a port is in use, and check whether a given
@@ -30,6 +29,8 @@
 	private static final Random rand = new Random(System.currentTimeMillis());
 
 	private static String dnsHostname;
+	
+	private static final String DNSNAMESERVICE_CLASS = "sun.net.spi.nameservice.dns.DNSNameService";
 
 	/**
 	 * Static utility class - cannot create an instance.
@@ -157,8 +158,13 @@
 			
 			if (dnsHostname == null)
 				try {
-					DNSNameService dns = new DNSNameService();
-					dnsHostname = dns.getHostByAddr(localHostaddr.getAddress());
+					//	workaround to break dependency with Sun's classes
+					Class cl = Class.forName(DNSNAMESERVICE_CLASS);
+					Method getHostByAddrMeth = cl.getMethod("getHostByAddr", new Class[] {byte[].class});
+					Object dns = cl.newInstance();
+					
+					dnsHostname = (String)getHostByAddrMeth.invoke(dns,
+						new Object[] { localHostaddr.getAddress() });
 				} catch (Throwable t) {
 					dnsHostname = "*****************";
 				}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/Task.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/Task.java
deleted file mode 100644
index 1464dc0..0000000
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/Task.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.core.util;
-
-import org.eclipse.wst.server.core.*;
-/**
- * An abstract implementation of the org.eclipse.wst.server.core.ITask interface
- * that provides default implementation of the methods.
- * 
- * @since 1.0
- */
-public abstract class Task implements ITask {
-	private TaskModel model;
-	private String name;
-	private String description;
-
-	/**
-	 * Create a new task with no name or description.
-	 */
-	public Task() {
-		// do nothing
-	}
-	
-	/**
-	 * Create a new task with the given label and description.
-	 * 
-	 * @param name the task name
-	 * @param description the task description
-	 */
-	public Task(String name, String description) {
-		this.name = name;
-		this.description = description;
-	}
-	
-	/**
-	 * @see ITask#getName()
-	 */
-	public String getName() {
-		return name;
-	}
-
-	/**
-	 * @see ITask#getDescription()
-	 */
-	public String getDescription() {
-		return description;
-	}
-
-	/**
-	 * @see ITask#getTaskModel()
-	 */
-	public TaskModel getTaskModel() {
-		return model;
-	}
-	
-	/**
-	 * @see ITask#setTaskModel(TaskModel)
-	 */
-	public void setTaskModel(TaskModel taskModel) {
-		this.model = taskModel;
-	}
-	
-	/**
-	 * @see ITask#canUndo()
-	 */
-	public boolean canUndo() {
-		return false;
-	}
-	
-	/**
-	 * @see ITask#undo()
-	 */
-	public void undo() {
-		// do nothing
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/WebResource.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/WebResource.java
index e9ea19f..4863f75 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/WebResource.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/WebResource.java
@@ -15,6 +15,7 @@
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IModuleArtifact;
 /**
+ * A Web module resource.
  * 
  * @since 1.0
  */
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/package.html b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/package.html
new file mode 100644
index 0000000..41d3ed6
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/package.html
@@ -0,0 +1,45 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
+<title>WTP API overview</title>
+</head>
+<body>
+<p>Utility classes for the server tools framework.</p>
+<table width="500">
+<tr>
+<td>
+<p>PingThread is a utility class for pinging a server to determine if
+it is running and updating the server's state.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>SocketUtil contains utility methods for determining if ports are
+free and whether a given hostname is a local hostname.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>The four XXXAdapter classes are implementations of server tools
+listener interfaces with the method bodies stubbed in; they can be
+subclassed by clients who only want to implement a single listener
+interface method.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>ServerPort, Task, and TaskModel are standard implementations of
+other interface classes.</p>
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/package.xml b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/package.xml
index 7df1938..ffb2444 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/package.xml
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/package.xml
@@ -10,7 +10,7 @@
 
 <body>
 
-<p>Utility classes for the server tools framework.</p>
+<abstract>Utility classes for the server tools framework.</abstract>
 
 <p>PingThread is a utility class for pinging a server to determine if
 it is running and updating the server's state.</p>
diff --git a/plugins/org.eclipse.wst.server.ui/.classpath b/plugins/org.eclipse.wst.server.ui/.classpath
index 4cb0786..e058d45 100644
--- a/plugins/org.eclipse.wst.server.ui/.classpath
+++ b/plugins/org.eclipse.wst.server.ui/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="serverui/"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.server.ui/.cvsignore b/plugins/org.eclipse.wst.server.ui/.cvsignore
index 3644936..e1e4e9e 100644
--- a/plugins/org.eclipse.wst.server.ui/.cvsignore
+++ b/plugins/org.eclipse.wst.server.ui/.cvsignore
@@ -3,3 +3,5 @@
 build.xml
 temp.folder
 org.eclipse.wst.server.ui_3.0.0.jar
+@dot
+src.zip
diff --git a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
index 88f8ef6..de4997c 100644
--- a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
@@ -8,18 +8,16 @@
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.server.ui,
  org.eclipse.wst.server.ui.editor,
- org.eclipse.wst.server.ui.internal,
- org.eclipse.wst.server.ui.internal.actions,
- org.eclipse.wst.server.ui.internal.command,
- org.eclipse.wst.server.ui.internal.editor,
- org.eclipse.wst.server.ui.internal.provisional,
- org.eclipse.wst.server.ui.internal.task,
- org.eclipse.wst.server.ui.internal.view.servers,
- org.eclipse.wst.server.ui.internal.view.tree,
- org.eclipse.wst.server.ui.internal.viewers,
- org.eclipse.wst.server.ui.internal.wizard,
- org.eclipse.wst.server.ui.internal.wizard.fragment,
- org.eclipse.wst.server.ui.internal.wizard.page,
+ org.eclipse.wst.server.ui.internal;x-internal:=true,
+ org.eclipse.wst.server.ui.internal.actions;x-internal:=true,
+ org.eclipse.wst.server.ui.internal.command;x-internal:=true,
+ org.eclipse.wst.server.ui.internal.editor;x-internal:=true,
+ org.eclipse.wst.server.ui.internal.provisional;x-internal:=true,
+ org.eclipse.wst.server.ui.internal.view.servers;x-internal:=true,
+ org.eclipse.wst.server.ui.internal.viewers;x-internal:=true,
+ org.eclipse.wst.server.ui.internal.wizard;x-internal:=true,
+ org.eclipse.wst.server.ui.internal.wizard.fragment;x-internal:=true,
+ org.eclipse.wst.server.ui.internal.wizard.page;x-internal:=true,
  org.eclipse.wst.server.ui.wizard
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.core.resources,
@@ -28,7 +26,9 @@
  org.eclipse.ui.ide,
  org.eclipse.ui.forms,
  org.eclipse.ui.workbench.texteditor,
+ org.eclipse.ui.browser,
  org.eclipse.debug.core,
  org.eclipse.debug.ui,
- org.eclipse.wst.server.core
+ org.eclipse.wst.server.core,
+ org.eclipse.wst.internet.monitor.core
 Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.wst.server.ui/about.html b/plugins/org.eclipse.wst.server.ui/about.html
new file mode 100644
index 0000000..6f6b96c
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/about.html
@@ -0,0 +1,22 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>February 24, 2005</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/build.properties b/plugins/org.eclipse.wst.server.ui/build.properties
index 599eadf..b08a26c 100644
--- a/plugins/org.eclipse.wst.server.ui/build.properties
+++ b/plugins/org.eclipse.wst.server.ui/build.properties
@@ -13,10 +13,10 @@
                .,\
                icons/,\
                .options,\
-               META-INF/
+               META-INF/,\
+               about.html
 bin.excludes = bin/**,\
                @dot/**,\
                temp.folder/**
-src.includes = schema/,\
-               build.properties
+src.includes = schema/
 source.. = serverui/
diff --git a/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_category.gif b/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_category.gif
new file mode 100644
index 0000000..74a5388
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_category.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_disabled.gif b/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_disabled.gif
new file mode 100644
index 0000000..519b846
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_disabled.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_enabled.gif b/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_enabled.gif
new file mode 100644
index 0000000..bb900ed
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_enabled.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_sound.gif b/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_sound.gif
new file mode 100644
index 0000000..5ed8553
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_sound.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_unavailable.gif b/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_unavailable.gif
new file mode 100644
index 0000000..0fe25c1
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/obj16/audio_unavailable.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/obj16/internal_browser.gif b/plugins/org.eclipse.wst.server.ui/icons/obj16/internal_browser.gif
new file mode 100644
index 0000000..09f609d
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/obj16/internal_browser.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/plugin.properties b/plugins/org.eclipse.wst.server.ui/plugin.properties
index 1c13beb..ec096e5 100644
--- a/plugins/org.eclipse.wst.server.ui/plugin.properties
+++ b/plugins/org.eclipse.wst.server.ui/plugin.properties
@@ -16,445 +16,70 @@
 extensionPointEditorActions=Editor Actions
 extensionPointServerImages=Server Images
 extensionPointWizardFragments=Wizard Fragments
+extensionPointInitialSelectionProvider=Initial Selection Provider
+extensionPointAudio=Audio
 
-# --------------- Wizards ---------------
-# (If the first two lines in a group do not start with "wiz", it is because
-# those lines are displayed in the workbench "New" wizard. The rest of the
-# text is displayed in each actual wizard)
+# --------------- Wizards and Views ---------------
 
-wizardCategoryTitle=Server
-
-# New Server (and Configuration) Wizard
+category=Server
 newServer=Server
 newServerDescription=Define a new server
-wizNewServerWizardTitle=New Server
-wizNewServerTitle=Define a New Server
-wizNewServerDescription=Choose the type of server to create.
-wizNewServerRuntime=Server runtime:
 
-wizNewServerSelect=How do you want to select the server?
-wizNewServerExisting=Choose an e&xisting server
-wizNewServerDetect=&Automatically detect servers
-wizNewServerManual=&Manually define a server
-wizNewServerSelectExisting=Select the server that you want to use:
-
-# Import Server Configuration wizard
-importServerConfiguration=Server Configuration
-wizImportConfigurationWizardTitle=Import a Server Configuration
-wizImportConfigurationTitle=Import a server configuration
-wizImportConfigurationDescription=Fill out the fields below to import the configuration.
-wizImportConfigurationType=Configuration type:
-wizImportConfigurationLocation=&Location:
-wizImportConfigurationFile=Choose the server configuration file
-wizImportConfigurationDirectory=Choose the directory containing the server configuration
-
-# Select Server wizard
-wizRunOnServerTitle=Run On Server
-wizDebugOnServerTitle=Debug On Server
-wizProfileOnServerTitle=Profile On Server
-wizSelectServerPreferred=Set server as project &default (do not ask again)
-
-# Select Server Client Wizard
-wizSelectClientWizardTitle=Select a Server Client
-wizSelectClientTitle=Select a server client
-wizSelectClientDescription=Select a client to use with this server.
-wizSelectClientMessage=Multiple clients can run on the current selection. Select a client from the list below:
-
-# Task Wizard
-wizTaskWizardTitle=Select Tasks
-wizTaskTitle=Select Tasks
-wizTaskDescription=Select the tasks to perform on the server.
-wizTaskDetail=Tasks for:
-wizTaskNone=There are currently no tasks that need to be performed.
-
-# New Runtime Wizard
-wizNewRuntimeWizardTitle=New Server Runtime
-wizNewRuntimeTitle=New Server Runtime
-wizNewRuntimeDescription=Define a new installed server runtime environment
-wizEditRuntimeWizardTitle=Edit Server Runtime
-
-# Add/Remove Modules
-wizModuleWizardTitle=Add and Remove Projects
-wizModuleTitle=Add and Remove Projects
-wizModuleDescription=Modify the projects that are configured on the server
-wizModuleMessage=Move projects to the right to configure them on the server
-wizModuleAvailableList=&Available projects:
-wizModuleDeployedList=&Configured projects:
-wizModuleAdd=A&dd >
-wizModuleAddAll=Add A&ll >>
-wizModuleRemove=< &Remove
-wizModuleRemoveAll=<< Re&move All
-
-# General text used in multiple wizards
-wizFolder=F&older:
-wizBrowse=B&rowse...
-wizDescription=Description:
-
-# Wizard info and error messages
-wizErrorInvalidFolder=The folder must be a server project or a folder within a server project
-wizErrorClosedProject=The folder must not be in a closed project
-wizErrorResourceAlreadyExists=The specified resource already exists
-wizErrorServerCreationError=Cannot create a server using the selected type
-wizErrorImport=Could not find a valid server configuration at the specified location
-
-
-# --------------- Views ---------------
-
-viewCategoryTitle=Server
-
-# --- Server Configuration view ---
 viewServers=Servers
 
-viewNoConfiguration=No configuration
-viewNoModules=Nothing deployed
-
-# Actions
-actionDelete=Delete
-actionOpen=Open
-actionSwitchConfiguration=Switch Configuration
-actionMonitor=Monitoring
-actionMonitorPort=Monitor port {0} ({1})
-actionMonitorProperties=Properties...
-actionNew=New
-actionNewServer=Server
-
-# --- Servers view ---
-viewServersTitle=Servers
-
-# Column titles
-viewServer=Server
-viewHost=Host name
-viewStatus=Status
-viewSync=State
-
-actionRestartProject=Restart Project
-
-# Actions
-actionStart=Start
-actionStartToolTip=Start the server
-actionDebug=Debug
-actionDebugToolTip=Start the server in debug mode
-actionProfile=Profile
-actionProfileToolTip=Start the server in profiling mode
-actionStop=Stop
-actionStopToolTip=Stop the server
-actionRestart=Restart
-actionRestartToolTip=Restart the server
-actionPublish=Publish
-actionPublishToolTip=Publish to the server
-actionModifyModules=Add and remove projects...
-actionModifyModulesToolTip=Add and remove projects
-
-# Status column text
-viewStatusStarting=Starting
-viewStatusStarted=Started
-viewStatusStartedDebug=Debugging
-viewStatusStartedProfile=Profiling
-viewStatusStopping=Stopping
-viewStatusStopped=Stopped
-viewStatusUnsupported=Unsupported
-
-viewStatusStarting1=Starting.
-viewStatusStarting2=Starting..
-viewStatusStarting3=Starting...
-
-viewStatusStopping1=Stopping.
-viewStatusStopping2=Stopping..
-viewStatusStopping3=Stopping...
-
-# Server State text
-viewSyncOkay=Synchronized
-viewSyncRestart=Restart
-viewSyncPublish=Republish
-viewSyncRestartPublish=Restart & republish
-viewSyncPublishing=Publishing...
-
-# --- set 2 ---
-# Actions
-actionStart2=Connect
-actionStartToolTip2=Connect the server
-actionDebug2=Debug
-actionDebugToolTip2=Connect to the server in debug mode
-actionProfile2=Profile
-actionProfileToolTip2=Connect to the server in profiling mode
-actionStop2=Disconnect
-actionStopToolTip2=Disconnect from the server
-actionRestart2=Reconnect
-actionRestartToolTip2=Reconnect to the server
-actionPublish2=Publish
-actionPublishToolTip2=Publish to the server
-
-# Status column text
-viewStatusStarting4=Connecting
-viewStatusStarted2=Connected
-viewStatusStartedDebug2=Debugging
-viewStatusStopping4=Disconnecting
-viewStatusStopped2=Disconnected
-viewStatusUnsupported2=Unsupported
-viewStatusStartedProfile2=Profiling
-
-# Server State text
-viewSyncOkay2=Synchronized
-viewSyncRestart2=Reconnect
-viewSyncPublish2=Republish
-viewSyncRestartPublish2=Reconnect and republish
-viewSyncPublishing2=Publishing...
-
-
 # --------------- Action Sets (toolbar icon groups) ---------------
 
 # Servers action set
 actionSetTitle=Server
-actionSetNewServer=Create Server and Server Configuration
 actionSetNewServer=Create Server
 
 # Run on Server actions
-actionRunOnServer=Run on Server...
-actionDebugOnServer=Debug on Server...
-actionProfileOnServer=Profile on Server...
-
+actionRunOnServer=Run on Server
+actionDebugOnServer=Debug on Server
+actionProfileOnServer=Profile on Server
 
 # --------------- Preferences ---------------
 
-# Names of the preference pages
 preferenceServersTitle=Server
 preferenceRuntimesTitle=Installed Runtimes
-preferenceRuntimesTitleLong=Installed Server Runtime Environments
+preferenceServerKeywords=servers runtime environment build installed publishing deploy assembly
 
-# Server preferences
-prefAutoPublish=Automatically p&ublish before starting servers
-prefAutoPublishLocal=Automatically publish to local servers every:
-prefAutoPublishRemote=Automatically publish to remote servers every:
-prefAutoPublishSeconds=s
-prefAutoRestart=Automatically &restart servers when necessary
-prefPromptIrreversible=Prompt before making &irreversible changes within an editor
-prefCreateInWorkspace=Create server resources in workspace
-prefShowOnActivity=Show Servers view when server state changes
-prefMachineSpeed=Relative machine speed:
-prefMachineSpeedVerySlow=Very slow
-prefMachineSpeedSlow=Slow
-prefMachineSpeedAverage=Average
-prefMachineSpeedFast=Fast
-prefMachineSpeedVeryFast=Very fast
-
-
-prefSaveEditorsGroup=Save dirty editors before starting server
-prefSaveEditorsNever=&Never
-prefSaveEditorsPrompt=Pro&mpt
-prefSaveEditorsAutosave=Auto-sav&e
- 
 # Project properties preferences
 propertiesServer=Server
-prefProjectDescription=Set the runtime target and the default server for the project.
-prefProject=Project:
-prefProjectDefaultServer=Default server:
-prefProjectNotModule=This project cannot be deployed to a server.
-prefProjectNotConfigured=Not currently deployed to any servers
-prefProjectNoServer=<None>
 
-# Installed runtimes
-preferenceRuntimesDescription=Add, remove, or edit installed server runtime definitions.\nThe checked runtime will be used by default when creating new projects.
-preferenceRuntimesTable=Installed server runtimes:
-
-
-# --------------- Tasks (progress monitors) ---------------
-
-# Creating default server project
-createServerProjectTask=Creating server project.
-
-# General tasks
-savingTask=Saving {0}.
-loadingTask=Loading {0}.
-performingTasks=Performing tasks.
-
-publishingStart=Connecting to server
-
-# --------------- Dialogs ---------------
-
-# Delete Server Resource dialog
-deleteServerResourceDialogTitle=Delete Server Resource
-deleteServerResourceDialogMessage=Are you sure you want to delete {0}?
-deleteServerResourceDialogMessageMany=Are you sure you want to delete the {0} server resources?
-deleteServerResourceDialogLooseConfigurations=Also delete unused server configuration {0}.
-deleteServerResourceDialogLooseConfigurationsMany=Also delete {0} unused server configurations.
-
-# Create Server Project dialog
-createServerProjectDialogTitle=Create Server Project
-createServerProjectDialogMessage=Do you want to create a new server project with the name {0}?
-
-# Terminate Server dialog
-terminateServerDialogTitle=Terminate Server
-terminateServerDialogMessage=Server {0} is not responding. Do you want to terminate this server? Click OK to terminate the server or click Cancel to continue waiting.
-
-# Server resource dirty dialog
-resourceDirtyDialogTitle=Server Resource Dirty
-resourceDirtyDialogMessage=The server resource {0} has unsaved changes. Do you want to continue?
-resourceDirtyDialogContinue=Continue
-
-runtimeTargetCombo=Target runtime:
-runtimeTargetNone=<None>
-runtimeTargetNewRuntime=New...
-runtimeTargetRuntimePreferences=Installed Runtimes...
-runtimeTargetChildren=Include child projects
-
-# General dialogs
-defaultDialogTitle=Server
-dialogStoppingServer=Stopping server {0}.
-dialogRestartingProject=Restarting project {0}.
-
-# restart warning dialog
-dialogModeWarningDebug=The server is not running in debug mode. You may restart the server in debug mode, continue without debugging, or cancel the operation.
-dialogModeWarningProfile=The server is not running in profiling mode. You may restart the server in profiling mode, continue without profiling, or cancel the operation.
-dialogModeWarningRestart=Restart
-dialogModeWarningContinue=Continue
-
-# Monitor dialog
-dialogMonitorTitle=Monitoring Ports
-dialogMonitorDescription=The following ports are being monitored on server {0}:
-dialogMonitorAddDescription=The server {0} has the following ports that can be monitored:
-dialogMonitorColumnPort=Server Port
-dialogMonitorColumnType=Type
-dialogMonitorColumnMonitorPort=Monitor Port
-dialogMonitorColumnContentType=Content Type
-dialogMonitorColumnStatus=Status
-dialogMonitorMonitorPort=Monitor port:
-dialogMonitorContentType=Content type:
-dialogMonitorContentTypeAll=All
-dialogMonitorContentTypeWeb=Web
-dialogMonitorContentTypeWebServices=WebServices
-
-start=Start
-stop=Stop
-started=Started
-stopped=Stopped
-
-# Confirm runtime removal
-dialogRuntimeInUse=The runtime is currently being used and deleting it will cause compilation or runtime problems. Delete the runtime anyway?
-
-# runtime locator search dialog
-dialogRuntimeSearchTitle=Search For Runtimes
-dialogRuntimeSearchMessage=Select the directory in which to search for server runtimes:
-dialogRuntimeSearchProgress=Searching for server runtimes...
-
-# Can't add remove
-dialogAddRemoveModulesNone=There are no projects that can be added or removed from the server.
-
-# --------------- Misc UI ---------------
-
-serverLaunchShortcut=Run on Server
+# --------------- Editor ---------------
 
 serverEditor=Server Editor
-
-# runtime composite
-runtimeTypeCompDescription=Runtimes are used at build time to compile projects.
-runtimeTypeCompTree=Select the type of &runtime that you want to define:
-serverTypeCompDescription=Select the &server type:
-name=Name
-vendor=Vendor
-version=Version
-host=Host name
-moduleSupport=Module Support
-viewBy=&View By:
-
-# misc composites
-hostnameTitle=Specify the host where you want to publish
-hostname=&Host name:
-
-# Server launch configuration tab
-serverLaunchConfigurationTab=Server
-serverLaunchServer=Server:
-serverLaunchRuntime=Runtime:
-serverLaunchHost=Host name:
-
-# Error Messages
-errorDialogTitle=Server Error
-errorServerAlreadyRunning=Server already running
-errorNoServerSelected=No server selected
-errorInvalidServer=Invalid server
-errorServerStartFailed=The server named {0} did not start correctly. Check the Console for error messages.
-errorPublishing=Could not publish to the server.
-errorCouldNotCreateServerProject=Could not create server project
-errorCouldNotCreateServerProjectStatus=Could not create server project: {0}
-errorNoModules=Did not find anything to deploy to a server
-errorNoServer=Could not find a server to run the selection
-errorNoClient=Could not find a client that is able to launch the selection
-errorCouldNotSavePreference=Could not save server preference information.
-errorEditorCantSave=Can't save the server resource for the following reason(s):
-errorEditor=Could not open editor because {0} is not a valid server or server configuration.
-errorVersionLevel=The selected server does not support version {1} of the {0} specification.
-
-# Info messages
-infoNoRuntimesFound=No server runtimes were found.
-
-# Default server creation names
-# {0} will be replaced by a number if the given name is already being used
-defaultServerProjectName=Servers{0}
-
-serverStartError=Error received while starting the server
-
-# Used when a name can't be found
-elementUnknownName=<unknown>
-
-columnName=Name
-columnType=Type
-
-add=Add...
-edit=Edit...
-remove=Remove
-search=Search...
-
-
-# --------------- Editor support ---------------
-
 serverEditorOverviewPage=Overview
-serverEditorOverviewPageTitle=Server Overview
-serverEditorOverviewSection=General
-serverEditorOverviewDescription=Specify the host name and other settings.
-serverEditorOverviewServerName=Server name:
-serverEditorOverviewServerNameCommand=set server name
-serverEditorOverviewServerNameDescription=Set the server name
-serverEditorOverviewServerConfigurationPath=Server configuration path:
-serverEditorOverviewServerHostname=Host name:
-serverEditorOverviewServerHostnameCommand=set host name
-serverEditorOverviewServerHostnameDescription=Set the host name
-serverEditorOverviewRuntime=Runtime:
-serverEditorOverviewRuntimeEdit=Edit runtime
-serverEditorOverviewRuntimeCommand=set runtime
-serverEditorOverviewRuntimeDescription=Set the runtime
-serverEditorOverviewAutoPublishDefault=Use default auto-publish settings
-serverEditorOverviewAutoPublishOverride=Auto-publish every:
-serverEditorOverviewAutoPublishCommand=modify auto-publish settings
-serverEditorOverviewAutoPublishDescription=Modify auto-publish settings
 
-# Menu items. {0} will be replaced by one of the xxxEditorActionXxx fields
-# from below. @Ctrl+Z is the menu mnemonic
-editorUndoEnabled=Undo {0}@Ctrl+Z
-editorUndoDisabled=Undo@Ctrl+Z
-editorRedoEnabled=Redo {0}@Ctrl+Y
-editorRedoDisabled=Redo@Ctrl+Y
+# --------------- Audio ---------------
 
-editorSaveErrorDialog=Save Problems
-editorSaveErrorMessage=Error while saving. {0}
+extensionPointAudio=Audio
 
-editorReadOnly=Read Only
-editorWritable=Writable
-editorReadOnlyFiles=Read Only files: {0}
+audioPreferenceTitle=Audio
+preferenceAudioKeywords=sound volume
 
-editorServerEditor=Server Editor
-editorPromptIrreversible=This operation cannot be undone. Do you want to proceed?
+launchableWebBrowser=Web browser
+launchableWebBrowserDescription=Open the Resource in a Web Browser
 
-# message if a dirty resource is deleted
-editorResourceDeleteTitle=Server Resource Deleted
-editorResourceDeleteServerMessage=The server {0} has been deleted from the file system. Do you want to save your changes or close the editor without saving?
-editorResourceDeleteServerConfigurationMessage=The server configuration {0} has been deleted from the file system. Do you want to save your changes or close the editor without saving?
-editorResourceDeleteSave=Save
+audioCategoryServer=Server
+audioServerStarted=Server Started
+audioServerStopped=Server Stopped
 
-editorResourceModifiedTitle=File Changed
-editorServerModifiedMessage=The server has been changed on the file system. Do you want to load the changes?
-editorServerConfigurationModifiedMessage=The server configuration has been changed on the file system. Do you want to load the changes?
+audioCategoryPublish=Publishing
+audioPublishFinished=Publish Finished
 
-editorValidateEditFailureMessage=The server resource cannot be edited.
-editorReadOnlyMessage=File(s) being edited have become read-only. The editor will become read-only and changes will be lost.
+monitorLabel=TCP/IP monitor
+monitorDescription=Uses the internal TCP/IP monitor to monitor server requests.
 
-editorResourceWarnTitle=Server Modification Warning
-editorResourceWarnMessage=The resource you are modifying is read-only. All changes will be lost because the resource cannot be saved. 
\ No newline at end of file
+# --------------- Action Sets (toolbar icon groups) ---------------
+
+# Web Browser action set
+actionSetWebBrowserTitle=Web Browser
+actionSetOpenWebBrowser=Open Web Browser
+actionSetSwitchBrowser=Web Browser
+
+# --------------- Preferences ---------------
+
+# Name of the preference pages
+preferenceInternetTitle=Internet
diff --git a/plugins/org.eclipse.wst.server.ui/plugin.xml b/plugins/org.eclipse.wst.server.ui/plugin.xml
index cd3812f..d565101 100644
--- a/plugins/org.eclipse.wst.server.ui/plugin.xml
+++ b/plugins/org.eclipse.wst.server.ui/plugin.xml
@@ -7,18 +7,13 @@
   <extension-point id="editorActions" name="%extensionPointEditorActions" schema="schema/editorActions.exsd"/>
   <extension-point id="serverImages" name="%extensionPointServerImages" schema="schema/serverImages.exsd"/>
   <extension-point id="wizardFragments" name="%extensionPointWizardFragments" schema="schema/wizardFragments.exsd"/>
-
-<extension point="org.eclipse.ui.ide.projectNatureImages">
-  <image
-    id="org.eclipse.wst.server.ui.projectNatureImage"
-    natureId="org.eclipse.wst.server.core.nature"
-    icon="icons/ovr16/server_ovr.gif"/>
-</extension>
+  <extension-point id="initialSelectionProvider" name="%extensionPointInitialSelectionProvider" schema="schema/initialSelectionProvider.exsd"/>
+  <extension-point id="audio" name="%extensionPointAudio" schema="schema/audio.exsd"/>
 
 <extension point="org.eclipse.ui.newWizards">
   <category
     id="org.eclipse.wst.server.ui"
-    name="%wizardCategoryTitle"/>
+    name="%category"/>
 
   <wizard
       id="org.eclipse.wst.server.ui.new.server"
@@ -30,26 +25,14 @@
   </wizard>
 </extension>
 
-<!--
-<extension point="org.eclipse.ui.importWizards">
-  <wizard
-      id="org.eclipse.wst.server.ui.import.configuration"
-      name="%importServerConfiguration"
-      class="org.eclipse.wst.server.ui.internal.wizard.ImportServerConfigurationWizard"
-      icon="icons/ctool16/wiz_import_configuration.gif">
-    <description>%importServerConfigurationDescription</description>
-  </wizard>
-</extension>
--->
-
 <extension point="org.eclipse.ui.views"> 
   <category
     id="org.eclipse.wst.server.ui"
-    name="%viewCategoryTitle"/>
+    name="%category"/>
 
   <view
     id="org.eclipse.wst.server.ui.ServersView"
-    name="%viewServersTitle"
+    name="%viewServers"
     category="org.eclipse.wst.server.ui"
     class="org.eclipse.wst.server.ui.internal.view.servers.ServersView"
     icon="icons/cview16/servers_view.gif"/>
@@ -70,12 +53,36 @@
   <page
     id="org.eclipse.wst.server.ui.preferencePage"
     name="%preferenceServersTitle"
-    class="org.eclipse.wst.server.ui.internal.ServerPreferencePage"/>
+    class="org.eclipse.wst.server.ui.internal.ServerPreferencePage">
+      <keywordReference id="org.eclipse.wst.server.preferenceKeywords"/>
+  </page>
   <page
     id="org.eclipse.wst.server.ui.runtime.preferencePage"
     name="%preferenceRuntimesTitle"
     category="org.eclipse.wst.server.ui.preferencePage"
-    class="org.eclipse.wst.server.ui.internal.RuntimePreferencePage"/>
+    class="org.eclipse.wst.server.ui.internal.RuntimePreferencePage">
+      <keywordReference id="org.eclipse.wst.server.preferenceKeywords"/>
+  </page>
+  <page
+    id="org.eclipse.wst.audio.preferencePage"
+    category="org.eclipse.wst.server.ui.preferencePage"
+    name="%audioPreferenceTitle"
+    class="org.eclipse.wst.server.ui.internal.audio.AudioPreferencePage">
+      <keywordReference id="org.eclipse.wst.server.audio.preferenceKeywords"/>
+  </page>
+  <page
+    id="org.eclipse.internet"
+    name="%preferenceInternetTitle"
+    class="org.eclipse.wst.server.ui.internal.webbrowser.InternetPreferencePage"/>
+</extension>
+
+<extension point="org.eclipse.ui.keywords">
+  <keyword
+    label="%preferenceServerKeywords"
+    id="org.eclipse.wst.server.preferenceKeywords"/>
+  <keyword
+    label="%preferenceAudioKeywords"
+    id="org.eclipse.wst.server.audio.preferenceKeywords"/>
 </extension>
 
 <extension point="org.eclipse.ui.editors">
@@ -118,8 +125,8 @@
 </extension>
 
 <extension point="org.eclipse.debug.ui.launchShortcuts">
-   <shortcut id="org.eclipse.wst.server.core.launchShortcut"
-      label="%serverLaunchShortcut"
+   <shortcut id="org.eclipse.wst.server.launchShortcut"
+      label="%actionRunOnServer"
       class="org.eclipse.wst.server.ui.internal.ServerLaunchShortcut"
       modes="run, debug, profile"
       path="aa"
@@ -162,22 +169,15 @@
       type="java.lang.Object"
       class="org.eclipse.wst.server.ui.internal.ServerPropertyTester">
    </propertyTester>
+   <propertyTester
+      id="org.eclipse.wst.server.ui.propertyTester"
+      namespace="org.eclipse.wst.server.ui"
+      properties="serverType"
+      type="org.eclipse.wst.server.core.IServer"
+      class="org.eclipse.wst.server.ui.internal.ServerPropertyTester">
+   </propertyTester>
 </extension>
 
-  <extension point="org.eclipse.ui.popupMenus">
-    <objectContribution
-      id="org.eclipse.wst.server.ui.popupMenu"
-      objectClass="org.eclipse.wst.server.core.IServer"
-      adaptable="true">
-      <action
-        id="org.eclipse.wst.server.ui.action.modifyModules"
-        label="%actionModifyModules"
-        icon="icons/ctool16/wiz_modify_modules.gif"
-        class="org.eclipse.wst.server.ui.internal.actions.ModifyModulesAction">
-      </action>
-    </objectContribution>
-  </extension>
-
   <extension point="org.eclipse.wst.server.ui.editorPages">
      <page
         id="org.eclipse.wst.server.editor.overview"
@@ -196,4 +196,141 @@
     </factory>
   </extension>
 
+<extension point="org.eclipse.wst.server.core.clients">
+  <client
+    id="org.eclipse.wst.server.ui.web"
+    name="%launchableWebBrowser"
+    description="%launchableWebBrowserDescription"
+    launchable="org.eclipse.wst.server.core.util.HttpLaunchable"
+    class="org.eclipse.wst.server.ui.internal.WebLaunchableClient"/>
+</extension>
+
+<extension point="org.eclipse.ui.perspectiveExtensions">
+  <perspectiveExtension
+    targetID="org.eclipse.wst.server.ui.perspective">
+    <actionSet id="org.eclipse.wst.webbrowser.actionSet"/>
+  </perspectiveExtension>
+</extension>
+
+<extension point="org.eclipse.wst.server.core.internalStartup">
+  <startup
+    id="org.eclipse.wst.server.ui.startup"
+    class="org.eclipse.wst.server.ui.internal.Startup"/>
+</extension>
+
+<extension point="org.eclipse.wst.server.ui.audio">
+  <category id="org.eclipse.wst.server.sound.server"
+    name="%audioCategoryServer"/>
+  <sound id="org.eclipse.wst.server.sound.serverStart"
+    category="org.eclipse.wst.server.sound.server"
+    name="%audioServerStarted"/>
+  <sound id="org.eclipse.wst.server.sound.serverStop"
+    category="org.eclipse.wst.server.sound.server"
+    name="%audioServerStopped"/>
+  <category id="org.eclipse.wst.server.sound.publish"
+    name="%audioCategoryPublish"/>
+  <sound id="org.eclipse.wst.server.sound.publishFinished"
+    category="org.eclipse.wst.server.sound.publish"
+    name="%audioPublishFinished"/>
+</extension>
+
+<extension point="org.eclipse.wst.server.core.internalServerMonitors">
+  <monitor
+    id="org.eclipse.wst.server.ui.monitor"
+    name="%monitorLabel"
+    description="%monitorDescription"
+    class="org.eclipse.wst.server.ui.internal.DefaultMonitorDelegate"/>
+</extension>
+
+<extension point="org.eclipse.ui.actionSets">
+  <actionSet
+    id="org.eclipse.wst.server.ui.internal.webbrowser.actionSet"
+    label="%actionSetWebBrowserTitle"
+    visible="true">
+    <action
+      id="org.eclipse.wst.server.ui.internal.webbrowser.action.open"
+      toolbarPath="browser"
+      label="%actionSetOpenWebBrowser"
+      tooltip="%actionSetOpenWebBrowser"
+      icon="icons/obj16/internal_browser.gif"
+      class="org.eclipse.wst.server.ui.internal.webbrowser.OpenBrowserWorkbenchAction"/>
+    <action
+      id="org.eclipse.wst.server.ui.internal.webbrowser.action.switch"
+      menubarPath="window/browser"
+      label="%actionSetSwitchBrowser"
+      tooltip="%actionSetSwitchBrowser"
+      style="pulldown"
+      class="org.eclipse.wst.server.ui.internal.webbrowser.SwitchBrowserWorkbenchAction"/>
+  </actionSet>
+</extension>
+
+<!--
+<extension point="org.eclipse.debug.ui.launchGroups">
+  <launchGroup
+     label="%ExternalToolsLaunchGroup.label"
+     bannerImage="icons/full/wizban/ext_tools_wiz.gif"
+     category="org.eclipse.ui.externaltools"
+     image="icons/full/obj16/external_tools.gif"
+     mode="run"
+     id="org.eclipse.ui.externaltools.launchGroup"
+     title="%ExternalToolsLaunchGroup.title">
+  </launchGroup>
+  <launchGroup
+     label="%ExternalToolsLaunchGroup.label"
+     bannerImage="icons/full/wizban/ext_tools_wiz.gif"
+     category="org.eclipse.ui.externaltools.builder"
+     image="icons/full/obj16/external_tools.gif"
+     public="false"
+     mode="run"
+     id="org.eclipse.ui.externaltools.launchGroup.builder">
+   </launchGroup>
+</extension>
+-->
+
+<!-- commands and their bindings
+NOTE:
+M1 = CTRL/COMMAND
+M2 = SHIFT
+M3 = ALT
+M4 = Platform-specific fourth key
+-->
+<extension point="org.eclipse.ui.commands">
+  <command
+    name="%actionDebugOnServer"
+    description="%actionDebugOnServer"
+    categoryId="org.eclipse.debug.ui.category.run"
+    id="org.eclipse.wst.server.launchShortcut.debug">
+  </command>
+  <command
+    name="%actionRunOnServer"
+    description="%actionRunOnServer"
+    categoryId="org.eclipse.debug.ui.category.run"
+    id="org.eclipse.wst.server.launchShortcut.run">
+  </command>
+  <command
+    name="%actionProfileOnServer"
+    description="%actionProfileOnServer"
+    categoryId="org.eclipse.debug.ui.category.run"
+    id="org.eclipse.wst.server.launchShortcut.profile">
+  </command>
+</extension>
+
+<extension point="org.eclipse.ui.bindings">
+  <key
+    sequence="M3+M2+D R"
+    contextId="org.eclipse.ui.globalScope"
+    commandId="org.eclipse.wst.server.launchShortcut.debug"
+    schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/>
+  <key
+    sequence="M3+M2+X R"
+    contextId="org.eclipse.ui.globalScope"
+    commandId="org.eclipse.wst.server.launchShortcut.run"
+    schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/>
+  <key
+    sequence="M3+M2+P R"
+    contextId="org.eclipse.ui.globalScope"
+    commandId="org.eclipse.wst.server.launchShortcut.profile"
+    schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"/>
+</extension>
+
 </plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/schema/audio.exsd b/plugins/org.eclipse.wst.server.ui/schema/audio.exsd
new file mode 100644
index 0000000..ce70a24
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/schema/audio.exsd
@@ -0,0 +1,145 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.server.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.wst.server.ui" id="audio" name="Audio"/>
+      </appInfo>
+      <documentation>
+         This extension point provides a way to sort runtime types, runtimes, server types, and servers. The first extension found is always used and it is expected that only one comparator exists in an installation.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <choice>
+            <element ref="category" minOccurs="0" maxOccurs="unbounded"/>
+            <element ref="sound" minOccurs="0" maxOccurs="unbounded"/>
+         </choice>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a fully qualified identifier of the target extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  an optional identifier of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  an optional name of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="category">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="name"/>
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  specifies a unique identifier for this extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="sound">
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="category" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of a sorter extension point:
+
+&lt;p&gt;
+&lt;pre&gt;
+ &lt;extension point=&quot;org.eclipse.wst.server.ui.sorter&quot;&gt;
+    &lt;image
+       id=&quot;com.example&quot;
+       class=&quot;com.example.runtime.MyComparator&quot;/&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
+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 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.wst.server.ui/schema/editorActions.exsd b/plugins/org.eclipse.wst.server.ui/schema/editorActions.exsd
index ce5cc1c..e98cbe9 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/editorActions.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/editorActions.exsd
@@ -97,15 +97,24 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of an editor action extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
- 
-&lt;/pre&gt;
+         The following is an example of an editor action extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+ 

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -124,10 +133,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.ui/schema/editorPageSections.exsd b/plugins/org.eclipse.wst.server.ui/schema/editorPageSections.exsd
index 97deed1..af16ddf 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/editorPageSections.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/editorPageSections.exsd
@@ -94,22 +94,31 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of an editor page section extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
- &lt;extension point=&quot;org.eclipse.wst.server.ui.editorPageSections&quot;&gt;
-    &lt;section
-       id=&quot;com.example&quot;
-       order=&quot;0&quot;
-       insertionId=&quot;com.example.left&quot;
-       typeIds=&quot;com.example.*&quot;
-         class=&quot;com.example.ExampleEditorSectionFactory&quot;/&gt;
- &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of an editor page section extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+ &lt;extension point=&quot;org.eclipse.wst.server.ui.editorPageSections&quot;&gt;

+    &lt;section

+       id=&quot;com.example&quot;

+       order=&quot;0&quot;

+       insertionId=&quot;com.example.left&quot;

+       typeIds=&quot;com.example.*&quot;

+         class=&quot;com.example.ExampleEditorSectionFactory&quot;/&gt;

+ &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -128,10 +137,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.ui/schema/editorPages.exsd b/plugins/org.eclipse.wst.server.ui/schema/editorPages.exsd
index f9db5d9..79af905 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/editorPages.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/editorPages.exsd
@@ -104,22 +104,31 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of an editor page extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
-  &lt;extension point=&quot;org.eclipse.wst.server.ui.editorPages&quot;&gt;
-    &lt;page
-       id=&quot;com.example&quot;
-       order=&quot;20&quot;
-       name=&quot;%editorPage&quot;
-       typeIds=&quot;com.example.*&quot;
-         class=&quot;com.example.ExampleEditorFactory&quot;/&gt;
-   &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of an editor page extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+  &lt;extension point=&quot;org.eclipse.wst.server.ui.editorPages&quot;&gt;

+    &lt;page

+       id=&quot;com.example&quot;

+       order=&quot;20&quot;

+       name=&quot;%editorPage&quot;

+       typeIds=&quot;com.example.*&quot;

+         class=&quot;com.example.ExampleEditorFactory&quot;/&gt;

+   &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -138,10 +147,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.ui/schema/initialSelectionProvider.exsd b/plugins/org.eclipse.wst.server.ui/schema/initialSelectionProvider.exsd
new file mode 100644
index 0000000..45f3073
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/schema/initialSelectionProvider.exsd
@@ -0,0 +1,121 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.wst.server.ui">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="org.eclipse.wst.server.ui" id="initialSelectionProvider" name="InitialSelectionProvider"/>
+      </appInfo>
+      <documentation>
+         This extension point provides a way to initially select runtime types, runtimes, server types, and servers in the server wizards. The first extension found is always used and it is expected that only one initialSelectionProvider exists in an installation.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="selectionProvider"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  a fully qualified identifier of the target extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  an optional identifier of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  an optional name of the extension instance
+               </documentation>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="selectionProvider">
+      <annotation>
+         <appInfo>
+            <meta.element labelAttribute="name"/>
+         </appInfo>
+      </annotation>
+      <complexType>
+         <sequence>
+         </sequence>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  specifies a unique identifier for this extension point
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;org.eclipse.wst.server.ui.internal.viewers.InitialSelectionProvider&lt;/samp&gt;. The class must have a public 0-arg constructor.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         &lt;b&gt;This extension point is part of an interim API that is still under development and expected to change significantly before reaching stability. It is being made available at this early stage to solicit feedback from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken (repeatedly) as the API evolves.&lt;/b&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of the extension point:
+
+&lt;p&gt;
+&lt;pre&gt;
+ &lt;extension point=&quot;org.eclipse.wst.server.ui.initialSelectionProvider&quot;&gt;
+    &lt;selectionProvider
+       id=&quot;com.example&quot;
+       class=&quot;com.example.runtime.MySelectionProvider&quot;/&gt;
+ &lt;/extension&gt;
+&lt;/pre&gt;
+&lt;/p&gt;
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="apiInfo"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2005 IBM Corporation and others.&lt;br&gt;
+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 
+&lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/plugins/org.eclipse.wst.server.ui/schema/serverImages.exsd b/plugins/org.eclipse.wst.server.ui/schema/serverImages.exsd
index c4bd33f..8243187 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/serverImages.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/serverImages.exsd
@@ -77,20 +77,29 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a server image extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
- &lt;extension point=&quot;org.eclipse.wst.server.ui.serverImages&quot;&gt;
-    &lt;image
-       id=&quot;com.example&quot;
-       icon=&quot;icons/obj16/runtime.gif&quot;
-       typeIds=&quot;com.example.runtime&quot;/&gt;
- &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of a server image extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+ &lt;extension point=&quot;org.eclipse.wst.server.ui.serverImages&quot;&gt;

+    &lt;image

+       id=&quot;com.example&quot;

+       icon=&quot;icons/obj16/runtime.gif&quot;

+       typeIds=&quot;com.example.runtime&quot;/&gt;

+ &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -109,10 +118,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.ui/schema/wizardFragments.exsd b/plugins/org.eclipse.wst.server.ui/schema/wizardFragments.exsd
index 06499af..adba10f 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/wizardFragments.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/wizardFragments.exsd
@@ -77,20 +77,29 @@
 

    <annotation>

       <appInfo>

+         <meta.section type="since"/>

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="examples"/>

       </appInfo>

       <documentation>

-         The following is an example of a wizard fragment extension point:
-
-&lt;p&gt;
-&lt;pre&gt;
- &lt;extension point=&quot;org.eclipse.wst.server.ui.wizardFragments&quot;&gt;
-   &lt;fragment
-      id=&quot;com.example&quot;
-      typeIds=&quot;com.example.runtime&quot;
-      class=&quot;com.example.ExampleWizardFragment&quot;/&gt;
- &lt;/extension&gt;
-&lt;/pre&gt;
+         The following is an example of a wizard fragment extension point:

+

+&lt;p&gt;

+&lt;pre&gt;

+ &lt;extension point=&quot;org.eclipse.wst.server.ui.wizardFragments&quot;&gt;

+   &lt;fragment

+      id=&quot;com.example&quot;

+      typeIds=&quot;com.example.runtime&quot;

+      class=&quot;com.example.ExampleWizardFragment&quot;/&gt;

+ &lt;/extension&gt;

+&lt;/pre&gt;

 &lt;/p&gt;

       </documentation>

    </annotation>

@@ -109,10 +118,10 @@
          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;
-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 
+         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+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 

 &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;

       </documentation>

    </annotation>

diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java
index 3b85ffd..477733f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java
@@ -38,17 +38,17 @@
  * @since 1.0
  */
 public class ServerLaunchConfigurationTab extends AbstractLaunchConfigurationTab {
-	protected String[] serverTypeIds;
+	private String[] serverTypeIds;
 
-	protected Combo serverCombo;
-	
-	protected Label runtimeLabel;
-	protected Label runtimeLocation;
-	
-	protected IServer server;
-	
+	private Combo serverCombo;
+
+	private Label runtimeLabel;
+	private Label hostname;
+
+	private IServer server;
+
 	// list of servers that are in combo
-	protected List servers;
+	private List servers;
 
 	// flag to be used to decide whether to enable combo in launch config dialog
 	// after the user requests a launch, they cannot change it
@@ -76,17 +76,25 @@
 	public void createControl(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
 		GridLayout layout = new GridLayout();
-		layout.marginWidth = 10;
-		layout.marginHeight = 10;
-		layout.numColumns = 1;
+		layout.marginWidth = 5;
+		layout.marginHeight = 5;
+		layout.numColumns = 2;
 		composite.setLayout(layout);
 
-		GridData data = new GridData(GridData.FILL_HORIZONTAL);
-		composite.setLayoutData(data);
+		//GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		//data.widthHint = 200;
+		//composite.setLayoutData(data);
 
 		Label label = new Label(composite, SWT.WRAP);
+		label.setText(Messages.serverLaunchDescription);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		data.horizontalSpan = 2;
+		data.grabExcessHorizontalSpace = false;
+		data.widthHint = 300;
+		label.setLayoutData(data);
+		
+		label = new Label(composite, SWT.NONE);
 		label.setText(Messages.serverLaunchServer);
-		label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		serverCombo = new Combo(composite, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
 		serverCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		serverCombo.addSelectionListener(new SelectionListener() {
@@ -99,10 +107,15 @@
 		});
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(serverCombo, ContextIds.LAUNCH_CONFIGURATION_SERVER_COMBO);
 
+		label = new Label(composite, SWT.NONE);
+		label.setText(Messages.serverLaunchRuntime);
 		runtimeLabel = new Label(composite, SWT.NONE);
 		runtimeLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		runtimeLocation = new Label(composite, SWT.NONE);
-		runtimeLocation.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		label = new Label(composite, SWT.NONE);
+		label.setText(Messages.serverLaunchHost);
+		hostname = new Label(composite, SWT.NONE);
+		hostname.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		
 		// initialize
 		IServer[] servers2 = ServerCore.getServers();
@@ -111,7 +124,7 @@
 			int size = servers2.length;
 			for (int i = 0; i < size; i++) {
 				IServer server2 = servers2[i];
-				if (isSupportedServer(server2.getServerType().getId())) {
+				if (server2.getServerType() != null && isSupportedServer(server2.getServerType().getId())) {
 					serverCombo.add(server2.getName());
 					servers.add(server2);
 				}
@@ -159,14 +172,14 @@
 		IRuntime runtime = null;
 		if (server != null) {
 			runtime = server.getRuntime();
-			runtimeLocation.setText(Messages.serverLaunchHost + " " + server.getHost());
+			hostname.setText(server.getHost());
 		} else
-			runtimeLocation.setText(Messages.serverLaunchHost);
-			
+			hostname.setText("");
+		
 		if (runtime != null)
-			runtimeLabel.setText(Messages.serverLaunchRuntime + " " + runtime.getName());
+			runtimeLabel.setText(runtime.getName());
 		else
-			runtimeLabel.setText(Messages.serverLaunchRuntime);
+			runtimeLabel.setText("");
 
 		if (server == null)
 			setErrorMessage(Messages.errorNoServerSelected);
@@ -194,11 +207,7 @@
 		if (servers != null) {
 			server = (IServer) servers.get(serverCombo.getSelectionIndex());
 			if (server != null)
-				try {
-					((Server) server).setupLaunchConfiguration(configuration, null);
-				} catch (CoreException ce) {
-					Trace.trace(Trace.SEVERE, "Error setting up launch configuration", ce);
-				}
+				((Server) server).setupLaunchConfiguration(configuration, null);
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ICommandManager.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ICommandManager.java
deleted file mode 100644
index f283c29..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ICommandManager.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.editor;
-
-import org.eclipse.wst.server.core.ITask;
-/**
- * A command manager.
- * 
- * @since 1.0
- */
-public interface ICommandManager {
-	/**
-	 * Execute the given command and place it in the undo stack.
-	 * If the command cannot be undone, the user will be notifed
-	 * before it is executed.
-	 *
-	 * @param task a task to execute
-	 */
-	public void executeCommand(ITask task);
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/IServerEditorPartInput.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/IServerEditorPartInput.java
index 101b72f..114c9d7 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/IServerEditorPartInput.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/IServerEditorPartInput.java
@@ -14,7 +14,7 @@
 
 import org.eclipse.wst.server.core.IServerWorkingCopy;
 /**
- *
+ * An input into a server part or section editor.
  *
  * @since 1.0
  */
@@ -33,13 +33,4 @@
 	 *    and <code>false</code> otherwise
 	 */
 	public boolean isServerReadOnly();
-	
-	/**
-	 * Gets the command manager. The editor is only responsible for creating an
-	 * ICommand and passing it to the command manager, which actually performs
-	 * the action and updates the server.
-	 *
-	 * @return commandManager the command manager
-	 */
-	public ICommandManager getServerCommandManager();
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/IServerEditorSection.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/IServerEditorSection.java
deleted file mode 100644
index f4f7ff6..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/IServerEditorSection.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.editor;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorSite;
-/**
- * 
- * @since 1.0
- */
-public interface IServerEditorSection {
-	/**
-	 * Initialize the section.
-	 * 
-	 * @param site the editor site
-	 * @param input the editor input
-	 */
-	public void init(IEditorSite site, IEditorInput input);
-	
-	/**
-	 * Create the section.
-	 * 
-	 * @param parent the parent composite
-	 */
-	public void createSection(Composite parent);
-
-	/**
-	 * Disposes of the section.
-	 */
-	public void dispose();
-	
-	/**
-	 * Return the error message for this page.
-	 * 
-	 * @return the error message
-	 */
-	public String getErrorMessage();
-
-	/**
-	 * Returns error or status messages that will be displayed when the
-	 * server resource is saved. If there are any error messages, the
-	 * user will be unable to save the editor.
-	 * 
-	 * @return a status object with code <code>IStatus.OK</code> if this
-	 *   server can be saved, otherwise a status object indicating why
-	 *   it can't be
-	 */
-	public IStatus[] getSaveStatus();
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
index 398bd2f..6516e2c 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
@@ -12,6 +12,7 @@
 
 import java.util.*;
 
+import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.swt.widgets.Composite;
@@ -21,9 +22,7 @@
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.part.EditorPart;
 import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.ui.internal.editor.IServerEditorPageSectionFactory;
-import org.eclipse.wst.server.ui.internal.editor.IServerEditorPartFactory;
-import org.eclipse.wst.server.ui.internal.editor.ServerEditorCore;
+import org.eclipse.wst.server.ui.internal.editor.*;
 /**
  * An abstract server editor which implements the most common methods
  * from IEditorPart.
@@ -38,18 +37,23 @@
 	 * Property change id for the error message.
 	 */
 	public static final int PROP_ERROR = 5;
-	
+
 	private String errorMessage = null;
-	
 	private Map sectionToInsertionId = null;
 	private List sections = null;
-	
-	protected IServerEditorPartFactory pageFactory;
-	protected IServerWorkingCopy server;
-	protected ICommandManager commandManager;
-	protected boolean readOnly;
-	
+	private ServerResourceCommandManager commandManager;
 	private FormToolkit toolkit;
+	
+	/**
+	 * The server currently being edited.
+	 */
+	protected IServerWorkingCopy server;
+	
+	/**
+	 * <code>true</code> if the server is read-only, and <code>false</code>
+	 * otherwise.
+	 */
+	protected boolean readOnly;
 
 	/**
 	 * Create a new server editor part.
@@ -59,15 +63,6 @@
 	}
 
 	/**
-	 * Sets the editor part factory for this page.
-	 * 
-	 * @param pageFactory the part factory
-	 */
-	public void setPageFactory(IServerEditorPartFactory pageFactory) {
-		this.pageFactory = pageFactory;
-	}
-
-	/**
 	 * @see org.eclipse.ui.IEditorPart#doSave(IProgressMonitor)
 	 */
 	public void doSave(IProgressMonitor monitor) {
@@ -127,7 +122,7 @@
 		if (errorMessage == null) {
 			Iterator iterator = getSections().iterator();
 			while (iterator.hasNext()) {
-				IServerEditorSection section = (IServerEditorSection) iterator.next();
+				ServerEditorSection section = (ServerEditorSection) iterator.next();
 				String error = section.getErrorMessage();
 				if (error != null)
 					return error;
@@ -147,7 +142,7 @@
 		Iterator iterator = getSections().iterator();
 		List list = new ArrayList();
 		while (iterator.hasNext()) {
-			IServerEditorSection section = (IServerEditorSection) iterator.next();
+			ServerEditorSection section = (ServerEditorSection) iterator.next();
 			IStatus[] status = section.getSaveStatus();
 			if (status != null) {
 				int size = status.length;
@@ -171,16 +166,16 @@
 				IServerEditorPageSectionFactory factory = (IServerEditorPageSectionFactory) iterator.next();
 				String insertionId = factory.getInsertionId();
 				
+				IServerEditorPartFactory pageFactory = ServerEditor.getPageFactory(this);
 				if (pageFactory.supportsInsertionId(insertionId)) {
 					String serverTypeId = null;
 					if (server != null) 
 						serverTypeId = server.getServerType().getId();
 					if (serverTypeId != null && factory.supportsType(serverTypeId)
 							&& factory.shouldCreateSection(server)) {
-						IServerEditorSection section = factory.createSection();
+						ServerEditorSection section = factory.createSection();
 						if (section != null) {
-							if (section instanceof ServerEditorSection)
-								((ServerEditorSection) section).setServerEditorPart(this);
+							section.setServerEditorPart(this);
 							sections.add(section);
 							List list = null;
 							try {
@@ -208,9 +203,11 @@
 		List list = new ArrayList();
 		try {
 			List sections2 = (List) sectionToInsertionId.get(insertionId);
-			Iterator iterator = sections2.iterator();
-			while (iterator.hasNext()) {
-				list.add(iterator.next());
+			if (sections2 != null) {
+				Iterator iterator = sections2.iterator();
+				while (iterator.hasNext()) {
+					list.add(iterator.next());
+				}
 			}
 		} catch (Exception e) {
 			// ignore
@@ -227,16 +224,26 @@
 		if (input instanceof IServerEditorPartInput) {
 			IServerEditorPartInput sepi = (IServerEditorPartInput) input;
 			server = sepi.getServer();
-			commandManager = sepi.getServerCommandManager();
+			commandManager = ((ServerEditorPartInput) sepi).getServerCommandManager();
 			readOnly = sepi.isServerReadOnly();
 		}
 		
 		Iterator iterator = getSections().iterator();
 		while (iterator.hasNext()) {
-			IServerEditorSection section = (IServerEditorSection) iterator.next();
+			ServerEditorSection section = (ServerEditorSection) iterator.next();
 			section.init(site, input);
 		}
 	}
+	
+	/**
+	 * Executes the given operation and adds it to the operation history
+	 * with the correct context.
+	 * 
+	 * @param operation an operation ready to be executed
+	 */
+	public void execute(IUndoableOperation operation) {
+		commandManager.execute(operation);
+	}
 
 	/**
 	 * Return the server that is being editted.
@@ -259,7 +266,7 @@
 		
 		Iterator iterator = getSections(id).iterator();
 		while (iterator.hasNext()) {
-			IServerEditorSection section = (IServerEditorSection) iterator.next();
+			ServerEditorSection section = (ServerEditorSection) iterator.next();
 			section.createSection(parent);
 		}
 	}
@@ -272,7 +279,7 @@
 
 		Iterator iterator = getSections().iterator();
 		while (iterator.hasNext()) {
-			IServerEditorSection section = (IServerEditorSection) iterator.next();
+			ServerEditorSection section = (ServerEditorSection) iterator.next();
 			section.dispose();
 		}
 		
@@ -284,7 +291,7 @@
 	 * Get a form toolkit to create widgets. It will automatically be disposed
 	 * when the editor is disposed.
 	 * 
-	 * @param display
+	 * @param display the display
 	 * @return FormToolkit
 	 */
 	protected FormToolkit getFormToolkit(Display display) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java
index 61c563d..218d922 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.editor;
 
+import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
@@ -18,41 +19,58 @@
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.wst.server.core.IServerWorkingCopy;
+import org.eclipse.wst.server.ui.internal.editor.ServerEditorPartInput;
+import org.eclipse.wst.server.ui.internal.editor.ServerResourceCommandManager;
 /**
- * 
+ * An abstract server editor section.
  * 
  * @since 1.0
  */
-public abstract class ServerEditorSection implements IServerEditorSection {
+public abstract class ServerEditorSection {
 	private String errorMessage = null;
 
-	/**
-	 * The server working copy.
-	 */
-	public IServerWorkingCopy server;
+	private ServerResourceCommandManager commandManager;
+
+	private Composite parentComp;
+	private ServerEditorPart editor;
 
 	/**
-	 * The command manager.
+	 * The server currently being edited.
 	 */
-	public ICommandManager commandManager;
+	protected IServerWorkingCopy server;
 
+	/**
+	 * <code>true</code> if the server is read-only, and <code>false</code>
+	 * otherwise.
+	 */
 	protected boolean readOnly;
-	protected Composite parentComp;
-	protected ServerEditorPart editor;
 
 	/**
-	 * @see org.eclipse.wst.server.ui.editor.IServerEditorSection#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
+	 * Initialize the section.
+	 * 
+	 * @param site the editor site
+	 * @param input the editor input
 	 */
 	public void init(IEditorSite site, IEditorInput input) {
 		if (input instanceof IServerEditorPartInput) {
 			IServerEditorPartInput sepi = (IServerEditorPartInput) input;
 			server = sepi.getServer();
-			commandManager = sepi.getServerCommandManager();
+			commandManager = ((ServerEditorPartInput) sepi).getServerCommandManager();
 			readOnly = sepi.isServerReadOnly();
 		}
 	}
 
 	/**
+	 * Executes the given operation and adds it to the operation history
+	 * with the correct context.
+	 * 
+	 * @param operation an operation ready to be executed
+	 */
+	public void execute(IUndoableOperation operation) {
+		commandManager.execute(operation);
+	}
+
+	/**
 	 * Create the section.
 	 * 
 	 * @param parent the parent composite
@@ -84,7 +102,9 @@
 	 * server resource is saved. If there are any error messages, the
 	 * user will be unable to save the editor.
 	 * 
-	 * @return org.eclipse.core.runtime.IStatus
+	 * @return a status object with code <code>IStatus.OK</code> if this
+	 *   server can be saved, otherwise a status object indicating why
+	 *   it can't be
 	 */
 	public IStatus[] getSaveStatus() {
 		return null;
@@ -102,7 +122,7 @@
 	/**
 	 * Set an error message for this page.
 	 * 
-	 * @param error java.lang.String
+	 * @param error an error message
 	 */
 	public void setErrorMessage(String error) {
 		if (error == null && errorMessage == null)
@@ -120,15 +140,15 @@
 	 * Get a form toolkit to create widgets. It will automatically be disposed
 	 * when the editor is disposed.
 	 * 
-	 * @param display
+	 * @param display the display
 	 * @return FormToolkit
 	 */
-	public FormToolkit getFormToolkit(Display display) {
+	protected FormToolkit getFormToolkit(Display display) {
 		return editor.getFormToolkit(display);
 	}
 
 	/**
-	 * @see IServerEditorSection#dispose()
+	 * Disposes of the section.
 	 */
 	public void dispose() {
 		// ignore
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/package.html b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/package.html
new file mode 100644
index 0000000..b464c18
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/package.html
@@ -0,0 +1,22 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
+<title>WTP API overview</title>
+</head>
+<body>
+<p>Provides editor support for the server tools UI.</p>
+<table width="500">
+<tr>
+<td>
+<p>Using extension points, clients can provide pages, sections, and
+actions to be added to the editor for a specific server type. This
+package contains the delegate classes for these extension points, as
+well as the API that they can use to put commands on the shared
+editor command history stack and interact with the editing framework.</p>
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/package.xml b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/package.xml
index 862b08a..024c4a2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/package.xml
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/package.xml
@@ -10,7 +10,7 @@
 
 <body>
 
-<p>Provides editor support for the server tools UI.</p>
+<abstract>Provides editor support for the server tools UI.</abstract>
 
 <p>Using extension points, clients can provide pages, sections, and
 actions to be added to the editor for a specific server type. This
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ContextIds.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ContextIds.java
index dfb29aa..8ef317d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ContextIds.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ContextIds.java
@@ -23,66 +23,44 @@
 	public static final String SELECT_CLIENT_WIZARD = ServerUIPlugin.PLUGIN_ID + ".swsc0000";
 	public static final String SELECT_CLIENT = ServerUIPlugin.PLUGIN_ID + ".swsc0002";
 
-	public static final String NEW_INSTANCE_WIZARD = ServerUIPlugin.PLUGIN_ID + ".swni0000";
-	public static final String NEW_INSTANCE_NAME = ServerUIPlugin.PLUGIN_ID + ".swni0002";
-	public static final String NEW_INSTANCE_FOLDER = ServerUIPlugin.PLUGIN_ID + ".swni0004";
-	public static final String NEW_INSTANCE_FACTORY = ServerUIPlugin.PLUGIN_ID + ".swni0006";
-	
-	public static final String NEW_CONFIGURATION_WIZARD = ServerUIPlugin.PLUGIN_ID + ".swnc0000";
-	public static final String NEW_CONFIGURATION_NAME = ServerUIPlugin.PLUGIN_ID + ".swnc0002";
-	public static final String NEW_CONFIGURATION_FOLDER = ServerUIPlugin.PLUGIN_ID + ".swnc0004";
-	public static final String NEW_CONFIGURATION_FACTORY = ServerUIPlugin.PLUGIN_ID + ".swnc0006";
-	
 	public static final String NEW_SERVER_WIZARD = ServerUIPlugin.PLUGIN_ID + ".swns0000";
-	public static final String NEW_SERVER_NAME = ServerUIPlugin.PLUGIN_ID + ".swns0002";
-	public static final String NEW_SERVER_FOLDER = ServerUIPlugin.PLUGIN_ID + ".swns0004";
-	public static final String NEW_SERVER_INSTANCE_FACTORY = ServerUIPlugin.PLUGIN_ID + ".swns0006";
-	
+	public static final String NEW_SERVER_TYPE = ServerUIPlugin.PLUGIN_ID + ".swns0006";
+
 	public static final String LAUNCH_CONFIGURATION_SERVER_COMBO = ServerUIPlugin.PLUGIN_ID + ".swsl0000";
-	
+
 	public static final String SELECT_TASK_WIZARD = ServerUIPlugin.PLUGIN_ID + ".sstw0000";
 
-	public static final String IMPORT_CONFIGURATION_WIZARD = ServerUIPlugin.PLUGIN_ID + ".swic0000";
+	/*public static final String IMPORT_CONFIGURATION_WIZARD = ServerUIPlugin.PLUGIN_ID + ".swic0000";
 	public static final String IMPORT_CONFIGURATION_NAME = ServerUIPlugin.PLUGIN_ID + ".swic0002";
 	public static final String IMPORT_CONFIGURATION_FOLDER = ServerUIPlugin.PLUGIN_ID + ".swic0004";
 	public static final String IMPORT_CONFIGURATION_FACTORY = ServerUIPlugin.PLUGIN_ID + ".swic0006";
 	public static final String IMPORT_CONFIGURATION_LOCATION = ServerUIPlugin.PLUGIN_ID + ".swic0008";
-	public static final String IMPORT_CONFIGURATION_LOCATION_BROWSE = ServerUIPlugin.PLUGIN_ID + ".swic0010";
+	public static final String IMPORT_CONFIGURATION_LOCATION_BROWSE = ServerUIPlugin.PLUGIN_ID + ".swic0010";*/
 	
 	public static final String MODIFY_MODULES_COMPOSITE = ServerUIPlugin.PLUGIN_ID + ".swmm0000";
 
-	public static final String NEW_SERVER_PROJECT_DIALOG = ServerUIPlugin.PLUGIN_ID + ".sdnp0000";
-
 	public static final String TERMINATE_SERVER_DIALOG = ServerUIPlugin.PLUGIN_ID + ".sdti0000";
 
 	public static final String PREF_GENERAL = ServerUIPlugin.PLUGIN_ID + ".spge0000";
-	public static final String PREF_GENERAL_SHOW_PUBLISHING_DETAILS = ServerUIPlugin.PLUGIN_ID + ".spge0010";
+	public static final String PREF_GENERAL_AUTOPUBLISH_LOCAL = ServerUIPlugin.PLUGIN_ID + ".spge0002";
+	public static final String PREF_GENERAL_AUTOPUBLISH_REMOTE = ServerUIPlugin.PLUGIN_ID + ".spge0006";
 	public static final String PREF_GENERAL_PUBLISH_BEFORE_START = ServerUIPlugin.PLUGIN_ID + ".spge0012";
 	public static final String PREF_GENERAL_AUTO_RESTART = ServerUIPlugin.PLUGIN_ID + ".spge0014";
-	public static final String PREF_GENERAL_SHOW_ON_ACTIVITY = ServerUIPlugin.PLUGIN_ID + ".spge0016";
-	public static final String PREF_GENERAL_REPAIR = ServerUIPlugin.PLUGIN_ID + ".spge0018";
 	public static final String PREF_GENERAL_PROMPT_IRREVERSIBLE = ServerUIPlugin.PLUGIN_ID + ".spge0020";
-	public static final String PREF_GENERAL_CREATE_IN_WORKSPACE = ServerUIPlugin.PLUGIN_ID + ".spge0022";
+	public static final String PREF_GENERAL_SHOW_ON_ACTIVITY = ServerUIPlugin.PLUGIN_ID + ".spge0022";
 	public static final String PREF_GENERAL_SAVE_EDITORS = ServerUIPlugin.PLUGIN_ID + ".spge0024";
+	public static final String PREF_GENERAL_TIMEOUT_DELAY = ServerUIPlugin.PLUGIN_ID + ".spge0026";
+	public static final String PREF_GENERAL_SYNC_STARTUP = ServerUIPlugin.PLUGIN_ID + ".spge0028";
 
-	public static final String VIEW_CONFIG = ServerUIPlugin.PLUGIN_ID + ".svcf0000";
-
-	public static final String VIEW_CONTROL = ServerUIPlugin.PLUGIN_ID + ".svcp0000";
+	public static final String VIEW_SERVERS = ServerUIPlugin.PLUGIN_ID + ".svcp0000";
 
 	public static final String PUBLISH_DETAILS_DIALOG = ServerUIPlugin.PLUGIN_ID + ".sdpd0000";
 	public static final String PUBLISH_DETAILS_DIALOG_STATUS = ServerUIPlugin.PLUGIN_ID + ".sdpd0002";
 	public static final String PUBLISH_DETAILS_DIALOG_DETAILS_BUTTON = ServerUIPlugin.PLUGIN_ID + ".sdpd0004";
 	public static final String PUBLISH_DETAILS_DIALOG_DETAILS = ServerUIPlugin.PLUGIN_ID + ".sdpd0006";
 
-	public static final String PUBLISHER_DIALOG = ServerUIPlugin.PLUGIN_ID + ".sdpr0000";
-	public static final String PUBLISHER_DIALOG_TREE = ServerUIPlugin.PLUGIN_ID + ".sdpr0002";
-	public static final String PUBLISHER_DIALOG_SELECT_ALL = ServerUIPlugin.PLUGIN_ID + ".sdpr0004";
-	public static final String PUBLISHER_DIALOG_DESELECT_ALL = ServerUIPlugin.PLUGIN_ID + ".sdpr0006";
-	public static final String PUBLISHER_DIALOG_FILTER = ServerUIPlugin.PLUGIN_ID + ".sdpr0008";
-	public static final String PUBLISHER_DIALOG_FILTER_DIALOG = ServerUIPlugin.PLUGIN_ID + ".sdpr0010";
-	
 	public static final String PROMPT_IRREVERSIBLE_DIALOG = ServerUIPlugin.PLUGIN_ID + ".sdpi0000";
-	
+
 	public static final String EDITOR_OVERVIEW_PAGE = ServerUIPlugin.PLUGIN_ID + ".seop0000";
 	public static final String EDITOR_SERVER = ServerUIPlugin.PLUGIN_ID + ".seop0002";
 	public static final String EDITOR_CONFIGURATION = ServerUIPlugin.PLUGIN_ID + ".seop0004";
@@ -90,5 +68,13 @@
 	public static final String EDITOR_RUNTIME = ServerUIPlugin.PLUGIN_ID + ".seop0008";
 	public static final String EDITOR_AUTOPUBLISH_DEFAULT = ServerUIPlugin.PLUGIN_ID + ".seop0010";
 	public static final String EDITOR_AUTOPUBLISH_OVERRIDE = ServerUIPlugin.PLUGIN_ID + ".seop0012";
-	public static final String EDITOR_AUTOPUBLISH_TIME = ServerUIPlugin.PLUGIN_ID + ".seop0014";
+	public static final String EDITOR_AUTOPUBLISH_DISABLE = ServerUIPlugin.PLUGIN_ID + ".seop0016";
+
+	public static final String AUDIO_PREFERENCES = ServerUIPlugin.PLUGIN_ID + ".aupr0000";
+	public static final String AUDIO_PREFERENCES_ENABLE = ServerUIPlugin.PLUGIN_ID + ".aupr0002";
+	public static final String AUDIO_PREFERENCES_VOLUME = ServerUIPlugin.PLUGIN_ID + ".aupr0004";
+	public static final String AUDIO_PREFERENCES_SOUNDS_TABLE = ServerUIPlugin.PLUGIN_ID + ".aupr0006";
+	public static final String AUDIO_PREFERENCES_PLAY = ServerUIPlugin.PLUGIN_ID + ".aupr0008";
+	public static final String AUDIO_PREFERENCES_BROWSE = ServerUIPlugin.PLUGIN_ID + ".aupr0010";
+	public static final String AUDIO_PREFERENCES_RESET = ServerUIPlugin.PLUGIN_ID + ".aupr0012";
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultMonitorDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultMonitorDelegate.java
new file mode 100644
index 0000000..0eede40
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultMonitorDelegate.java
@@ -0,0 +1,76 @@
+/**********************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.IMonitor;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.IMonitorWorkingCopy;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.MonitorCore;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerPort;
+import org.eclipse.wst.server.core.internal.ServerMonitorDelegate;
+import org.eclipse.wst.server.core.util.SocketUtil;
+/**
+ * 
+ */
+public class DefaultMonitorDelegate extends ServerMonitorDelegate {
+	protected Map monitors = new HashMap();
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.server.core.model.ServerMonitorDelegate#startMonitoring(org.eclipse.wst.server.core.ServerPort)
+	 */
+	public int startMonitoring(IServer server, ServerPort port, int monitorPort) throws CoreException {
+		try {
+			IMonitor monitor = (IMonitor) monitors.get(port);
+			int mport = -1;
+			if (monitor == null) {
+				mport = monitorPort;
+				if (mport == -1)
+					mport = SocketUtil.findUnusedPort(5000, 15000);
+				
+				// should search for a monitor first ..
+				IMonitorWorkingCopy wc = MonitorCore.createMonitor();
+				wc.setLocalPort(mport);
+				wc.setRemoteHost(server.getHost());
+				wc.setRemotePort(port.getPort());
+				if ("HTTP".equals(port.getProtocol()))
+					wc.setProtocol("HTTP");
+				monitor = wc.save();
+			} else
+				mport = monitor.getLocalPort();
+			monitor.start();
+			monitors.put(port, monitor);
+			return mport;
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not start monitoring", e);
+			throw new CoreException(new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorStartingMonitor, e.getLocalizedMessage()), null));
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.server.core.model.ServerMonitorDelegate#stopMonitoring(org.eclipse.wst.server.core.ServerPort)
+	 */
+	public void stopMonitoring(IServer server, ServerPort port) {
+		try {
+			IMonitor monitor = (IMonitor) monitors.get(port);
+			if (monitor != null)
+				monitor.stop();
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not stop monitoring", e);
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java
index ebf418a..0de5140 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java
@@ -10,14 +10,23 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -26,8 +35,8 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.actions.WorkspaceModifyOperation;
-
 import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServer.IOperationListener;
 /**
  * Dialog that prompts a user to delete server(s) and/or server configuration(s).
  */
@@ -35,7 +44,11 @@
 	protected IServer[] servers;
 	protected IFolder[] configs;
 
-	protected Button check;
+	protected List runningServersList;
+
+	protected Button checkDeleteConfigs;
+	protected Button checkDeleteRunning;
+	protected Button checkDeleteRunningStop;
 
 	/**
 	 * DeleteServerDialog constructor comment.
@@ -52,6 +65,12 @@
 		
 		this.servers = servers;
 		this.configs = configs;
+		
+		runningServersList = new ArrayList();
+		for (int i = 0 ; i < servers.length ; ++i) {
+			if (servers[i].getServerState() != IServer.STATE_STOPPED)
+				runningServersList.add(servers[i]);
+		}
 
 		setBlockOnOpen(true);
 	}
@@ -61,7 +80,7 @@
 	 */
 	protected void configureShell(Shell newShell) {
 		super.configureShell(newShell);
-		newShell.setText(Messages.deleteServerResourceDialogTitle);
+		newShell.setText(Messages.deleteServerDialogTitle);
 	}
 
 	/**
@@ -81,38 +100,69 @@
 		//WorkbenchHelp.setHelp(composite, ContextIds.TERMINATE_SERVER_DIALOG);
 	
 		Label label = new Label(composite, SWT.NONE);
-		if (servers.length == 1) {
-			label.setText(NLS.bind(Messages.deleteServerResourceDialogMessage, servers[0].getName()));
-		} else
-			label.setText(NLS.bind(Messages.deleteServerResourceDialogMessageMany, servers.length + ""));
-		label.setLayoutData(new GridData());
+		if (servers.length == 1)
+			label.setText(NLS.bind(Messages.deleteServerDialogMessage, servers[0].getName()));
+		else
+			label.setText(NLS.bind(Messages.deleteServerDialogMessageMany, servers.length + ""));
+		//label.setLayoutData(new GridData());
 		
 		if (configs.length > 0) {
-			check = new Button(composite, SWT.CHECK);
+			checkDeleteConfigs = new Button(composite, SWT.CHECK);
+			checkDeleteConfigs.setText(NLS.bind(Messages.deleteServerDialogLooseConfigurations, configs[0].getName()));
+			checkDeleteConfigs.setSelection(true);
+		}
 		
-			if (configs.length == 1) {
-				check.setText(NLS.bind(Messages.deleteServerResourceDialogLooseConfigurations, configs[0].getName()));
-			} else
-				check.setText(NLS.bind(Messages.deleteServerResourceDialogLooseConfigurationsMany, configs.length + ""));
-			check.setSelection(true);
-			check.setLayoutData(new GridData());
+		// prompt for stopping running servers
+		int size = runningServersList.size();
+		if (size > 0) {
+			checkDeleteRunning = new Button(composite, SWT.CHECK);
+			checkDeleteRunning.setText(NLS.bind(Messages.deleteServerDialogRunningServer, ((IServer)runningServersList.get(0)).getName()));
+			checkDeleteRunning.setSelection(true);
+			
+			checkDeleteRunningStop = new Button(composite, SWT.CHECK);
+			checkDeleteRunningStop.setText(NLS.bind(Messages.deleteServerDialogRunningServerStop, ((IServer)runningServersList.get(0)).getName()));
+			checkDeleteRunningStop.setSelection(true);
+			GridData data = new GridData();
+			data.horizontalIndent = 15;
+			checkDeleteRunningStop.setLayoutData(data);
+			
+			checkDeleteRunning.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					checkDeleteRunningStop.setEnabled(checkDeleteRunning.getSelection());
+				}
+			});
 		}
 		
 		Dialog.applyDialogFont(composite);
-	
+		
 		return composite;
 	}
 
 	protected void okPressed() {
-		final boolean checked = (check != null && check.getSelection());
+		final boolean checked = (checkDeleteConfigs != null && checkDeleteConfigs.getSelection());
+		final boolean deleteRunning = (checkDeleteRunning != null && checkDeleteRunning.getSelection());
+		final boolean deleteRunningStop = (checkDeleteRunningStop != null && checkDeleteRunningStop.getSelection());
+		
+		if (runningServersList.size() > 0) {
+			// stop servers and/or updates servers' list
+			prepareForDeletion(deleteRunning, deleteRunningStop);
+			//monitor.worked(1);
+		}
 		
 		try {
 			WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
 				protected void execute(IProgressMonitor monitor) throws CoreException {
+					// since stopping can be long, let's animate progessDialog
+					monitor.beginTask(Messages.deleteServerTask, 2);
+					
+					if (servers.length == 0) {
+						// all servers have been deleted from list
+						return;
+					}
 					try {
 						int size = servers.length;
 						for (int i = 0; i < size; i++) {
-							servers[0].delete();
+							servers[i].delete();
 						}
 						
 						if (checked) {
@@ -133,4 +183,74 @@
 		
 		super.okPressed();
 	}
+
+	/**
+	 * Updates servers' & configs' lists. If <code>deleteRunning</code> is <code>true</code>
+	 * 	and a server can't be stopped, it isn't removed.
+	 * @param deleteRunning if <code>true</code> running servers will be stopped
+	 * 	before being deleted, if <code>false</code> running servers will be removed
+	 *    from deletion list.
+	 */
+	protected void prepareForDeletion(boolean deleteRunning, boolean stopRunning) {
+		// converts servers & configs to list to facilitate removal
+		List serversList = new LinkedList(Arrays.asList(servers));
+		List configsList = new LinkedList(Arrays.asList(configs));
+		if (deleteRunning == false) {
+			// don't delete servers or configurations
+			int size = runningServersList.size();
+			for (int i = 0; i < size; i++) {
+				IServer server = (IServer) runningServersList.get(i);
+				serversList.remove(server);
+				if (server.getServerConfiguration() != null)
+					configsList.remove(server.getServerConfiguration());
+			}
+		} else {
+			if (stopRunning) {
+				// stop running servers and wait for them (stop is asynchronous)
+				IServer s;
+				MultiServerStopListener listener = new MultiServerStopListener();
+				int expected = 0;
+				Iterator iter = runningServersList.iterator();
+				while (iter.hasNext()) {
+					s = (IServer) iter.next();
+					if (s.canStop().isOK()) {
+						++expected;
+						s.stop(false, listener);
+					} else {
+						// server can't be stopped, don't delete it
+						serversList.remove(s);
+						configsList.remove(s.getServerConfiguration());
+					}
+				}
+				try {
+					while (expected != listener.getNumberStopped()) {
+						Thread.sleep(100);
+					}
+				} catch (InterruptedException e) {
+					Trace.trace(Trace.WARNING, "Interrupted while waiting for servers stop");
+				}
+			}
+		}
+		servers = new IServer[serversList.size()];
+		serversList.toArray(servers);
+		configs = new IFolder[configsList.size()];
+		configsList.toArray(configs);
+	}
+
+	/**
+	 * Class used to wait all servers stop. Use one instance
+	 * for a group of servers and loop to see if the number stopped
+	 * equals the number of servers waiting to stop.
+	 */
+	class MultiServerStopListener implements IOperationListener {
+		protected int num; 
+
+		public void done(IStatus result) {
+			num++;
+		}
+
+		public int getNumberStopped() {
+			return num;
+		}
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/EclipseUtil.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/EclipseUtil.java
index 4282f03..dcdabd9 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/EclipseUtil.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/EclipseUtil.java
@@ -21,9 +21,8 @@
 import org.eclipse.ui.model.IWorkbenchAdapter;
 
 import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.ServerCore;
 import org.eclipse.wst.server.core.ServerUtil;
-import org.eclipse.wst.server.core.internal.ProjectProperties;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
 /**
  * Eclipse utility methods.
  */
@@ -47,29 +46,29 @@
 	private static IStatus createServerProject(String name, IPath path, IProgressMonitor monitor) {
 		//monitor = ProgressUtil.getMonitorFor(monitor);
 		//monitor.beginTask(ServerPlugin.getResource("%createServerProjectTask"), 3000);
-
+		
 		try {
 			IWorkspace workspace = ResourcesPlugin.getWorkspace();
 			IProject project = workspace.getRoot().getProject(name);
-	
+			
 			// get a project descriptor
 			IProjectDescription description = workspace.newProjectDescription(name);
 			description.setLocation(path);
-	
+			
 			project.create(description, ProgressUtil.getSubMonitorFor(monitor, 1000));
 			if (monitor.isCanceled())
 				return null;
 			project.open(ProgressUtil.getSubMonitorFor(monitor, 1000));
 			if (monitor.isCanceled())
 				return null;
-
+			
 			// add the server project nature
-			((ProjectProperties)ServerCore.getProjectProperties(project)).setServerProject(true, monitor);
-	
+			ServerPlugin.getProjectProperties(project).setServerProject(true, monitor);
+			
 			if (monitor.isCanceled())
 				return null;
-	
-			return new Status(IStatus.OK, ServerUIPlugin.PLUGIN_ID, 0, Messages.serverProjectCreated, null);
+			
+			return Status.OK_STATUS;
 		} catch (CoreException ce) {
 			Trace.trace(Trace.SEVERE, "Could not create server project named " + name, ce);
 			return new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotCreateServerProjectStatus, ce.getMessage()), ce);
@@ -89,9 +88,8 @@
 	 * @param name a name
 	 * @param path a path
 	 * @param monitor a progress monitor, or null
-	 * @return a status object
 	 */
-	public static IStatus createNewServerProject(final Shell shell, String name, IPath path, IProgressMonitor monitor) {
+	public static void createNewServerProject(final Shell shell, String name, IPath path, IProgressMonitor monitor) {
 		final IStatus status = createServerProject(name, path, monitor);
 		if (!status.isOK()) {
 			Display.getDefault().asyncExec(new Runnable() {
@@ -103,7 +101,6 @@
 				}
 			});
 		}
-		return status;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java
index 3163c14..42efa6b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java
@@ -15,6 +15,7 @@
 import java.util.Map;
 
 import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionDelta;
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -139,6 +140,13 @@
 	public static final String IMG_MONITOR_OFF = "monitorOff";
 	
 	public static final String IMG_DEFAULT_SERVER_OVERLAY = "defaultServerOverlay";
+	
+	// Audio images
+	public static final String IMG_AUDIO_SOUND = "sound";
+	public static final String IMG_AUDIO_CATEGORY = "category";
+	public static final String IMG_AUDIO_ENABLED = "enabled";
+	public static final String IMG_AUDIO_DISABLED = "disabled";
+	public static final String IMG_AUDIO_UNAVAILABLE = "unavailable";
 
 	/**
 	 * Cannot construct an ImageResource. Use static methods only.
@@ -272,6 +280,13 @@
 		
 		registerImage(IMG_DEFAULT_SERVER_OVERLAY, URL_OVR + "default_server_ovr.gif");
 		
+		// audio images
+		registerImage(IMG_AUDIO_SOUND, URL_OBJ + "audio_sound.gif");
+		registerImage(IMG_AUDIO_CATEGORY, URL_OBJ + "audio_category.gif");
+		registerImage(IMG_AUDIO_ENABLED, URL_OBJ + "audio_enabled.gif");
+		registerImage(IMG_AUDIO_DISABLED, URL_OBJ + "audio_disabled.gif");
+		registerImage(IMG_AUDIO_UNAVAILABLE, URL_OBJ + "audio_unavailable.gif");
+		
 		loadServerImages();
 	}
 
@@ -290,35 +305,60 @@
 			Trace.trace(Trace.SEVERE, "Error registering image " + key + " from " + partialURL, e);
 		}
 	}
-	
+
 	/**
 	 * Load the server images.
 	 */
 	private static void loadServerImages() {
 		Trace.trace(Trace.CONFIG, "->- Loading .serverImages extension point ->-");
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "serverImages");
+		loadServerImages(registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, ServerUIPlugin.EXTENSION_SERVER_IMAGES));
+		ServerUIPlugin.addRegistryListener();
+		Trace.trace(Trace.CONFIG, "-<- Done loading .serverImages extension point -<-");
+	}
 
+	/**
+	 * Load the server images.
+	 */
+	private static void loadServerImages(IConfigurationElement[] cf) {
 		int size = cf.length;
 		for (int i = 0; i < size; i++) {
 			try {
 				String pluginId = cf[i].getDeclaringExtension().getNamespace();
 				String iconPath = cf[i].getAttribute("icon");
 				ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(pluginId, iconPath);
-				if (imageDescriptor == null)
-					ImageDescriptor.getMissingImageDescriptor();
+				if (imageDescriptor == null && iconPath != null && iconPath.length() > 0)
+					imageDescriptor = ImageDescriptor.getMissingImageDescriptor();
 				
-				String typeId = cf[i].getAttribute("typeIds");
-				if (typeId == null)
-					typeId = cf[i].getAttribute("moduleId");
-				imageRegistry.put(typeId, imageDescriptor);		
-				imageDescriptors.put(typeId, imageDescriptor);
+				if (imageDescriptor != null) {
+					String typeId = cf[i].getAttribute("typeIds");
+					if (typeId == null)
+						typeId = cf[i].getAttribute("moduleId");
+					imageRegistry.put(typeId, imageDescriptor);		
+					imageDescriptors.put(typeId, imageDescriptor);
+				}
 				Trace.trace(Trace.CONFIG, "  Loaded serverImage: " + cf[i].getAttribute("id"));
 			} catch (Throwable t) {
 				Trace.trace(Trace.SEVERE, "  Could not load serverImage: " + cf[i].getAttribute("id"), t);
 			}
 		}
+	}
 
-		Trace.trace(Trace.CONFIG, "-<- Done loading .serverImages extension point -<-");
+	protected static void handleServerImageDelta(IExtensionDelta delta) {
+		if (imageRegistry == null) // not loaded yet
+			return;
+		
+		IConfigurationElement[] cf = delta.getExtension().getConfigurationElements();
+		
+		if (delta.getKind() == IExtensionDelta.ADDED)
+			loadServerImages(cf);
+		else {
+			int size = cf.length;
+			for (int i = 0; i < size; i++) {
+				String typeId = cf[i].getAttribute("typeIds");
+				imageRegistry.remove(typeId);
+				imageDescriptors.remove(typeId);
+			}
+		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java
index c1d1704..4513bef 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java
@@ -13,30 +13,21 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.*;
 /**
  * 
  */
-public class LaunchClientJob extends Job {
-	protected IServer server;
+public class LaunchClientJob extends ChainedJob {
 	protected IModule[] module;
 	protected IClient client;
 	protected ILaunchableAdapter launchableAdapter;
 	protected String launchMode;
 	protected IModuleArtifact moduleArtifact;
 
-	public static void launchClient(IServer server, IModule[] module, String launchMode, IModuleArtifact moduleArtifact, ILaunchableAdapter launchableAdapter, IClient client) {
-		LaunchClientJob job = new LaunchClientJob(server, module, launchMode, moduleArtifact, launchableAdapter, client);
-		//job.setUser(true);
-		job.schedule();
-	}
-
 	public LaunchClientJob(IServer server, IModule[] module, String launchMode, IModuleArtifact moduleArtifact, ILaunchableAdapter launchableAdapter, IClient client) {
-		super("Launch client");
-		this.server = server;
+		super(Messages.launchingClientTask, server);
 		this.module = module;
 		this.launchMode = launchMode;
 		this.moduleArtifact = moduleArtifact;
@@ -45,21 +36,15 @@
 		setRule(new ServerSchedulingRule(server));
 	}
 
-	/**
-	 * @see Job#shouldRun()
-	 */
-	public boolean shouldRun() {
-		return server.getServerState() == IServer.STATE_STARTED;
-	}
-
 	/** (non-Javadoc)
-	 * @see Job#run(org.eclipse.core.runtime.IProgressMonitor)
+	 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	protected IStatus run(IProgressMonitor monitor) {
 		Trace.trace(Trace.FINER, "LaunchClient job");
-		IStatus status = new Status(IStatus.OK, ServerUIPlugin.PLUGIN_ID, 0, "", null);
+		IStatus status = Status.OK_STATUS;
 
 		// wait for up to 5 minutes
+		final Server server = (Server) getServer();
 		int state = server.getModuleState(module);
 		int count = ServerPreferences.getInstance().getModuleStartTimeout();
 		while (state == IServer.STATE_STARTING && count > 0) {
@@ -90,7 +75,7 @@
 				Trace.trace(Trace.FINEST, "Attempting to load client: " + client);
 				try {
 					Object launchable = launchableAdapter.getLaunchable(server, moduleArtifact);
-					client.launch(server, launchable, launchMode, ((Server) server).getExistingLaunch());
+					client.launch(server, launchable, launchMode, server.getExistingLaunch());
 				} catch (Exception e) {
 					Trace.trace(Trace.SEVERE, "Server client failed", e);
 				}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
index 3d46948..1929da0 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
@@ -23,10 +23,13 @@
 	public static String defaultServerProjectName;
 	public static String terminateServerDialogMessage;
 	public static String actionMonitorPort;
-	public static String deleteServerResourceDialogMessage;
-	public static String deleteServerResourceDialogMessageMany;
-	public static String deleteServerResourceDialogLooseConfigurations;
-	public static String deleteServerResourceDialogLooseConfigurationsMany;
+	public static String deleteServerDialogTitle;
+	public static String deleteServerDialogMessage;
+	public static String deleteServerDialogMessageMany;
+	public static String deleteServerDialogLooseConfigurations;
+	public static String deleteServerDialogRunningServer;
+	public static String deleteServerDialogRunningServerStop;
+	public static String deleteServerTask;
 	public static String errorCouldNotCreateServerProjectStatus;
 	public static String dialogStoppingServer;
 	public static String savingTask;
@@ -47,6 +50,7 @@
 	public static String resourceDirtyDialogTitle;
 	public static String resourceDirtyDialogContinue;
 	public static String wizNewRuntimeWizardTitle;
+	public static String serverLaunchDescription;
 	public static String serverLaunchServer;
 	public static String serverLaunchHost;
 	public static String serverLaunchRuntime;
@@ -55,8 +59,6 @@
 	public static String errorInvalidServer;
 	public static String serverLaunchConfigurationTab;
 	public static String wizSelectClientMessage;
-	public static String deleteServerResourceDialogTitle;
-	public static String serverProjectCreated;
 	public static String errorCouldNotCreateServerProject;
 	public static String errorDialogTitle;
 	public static String editorValidateEditFailureMessage;
@@ -88,12 +90,13 @@
 	public static String runtimeTargetRuntimePreferences;
 	public static String prefAutoPublish;
 	public static String prefAutoPublishLocal;
-	public static String prefAutoPublishSeconds;
+	public static String prefAutoPublishLocalTime;
 	public static String prefAutoPublishRemote;
+	public static String prefAutoPublishRemoteTime;
 	public static String prefAutoRestart;
 	public static String prefPromptIrreversible;
 	public static String prefShowOnActivity;
-	public static String prefCreateInWorkspace;
+	public static String prefSyncStartup;
 	public static String prefSaveEditorsGroup;
 	public static String prefSaveEditorsNever;
 	public static String prefSaveEditorsPrompt;
@@ -117,10 +120,16 @@
 	public static String actionPublishToolTip;
 	public static String actionPublish;
 	public static String actionDelete;
+	public static String actionRemove;
+	public static String dialogRemoveModuleConfirm;
 	public static String terminateServerDialogTitle;
 	public static String actionDebugOnServer;
 	public static String actionProfileOnServer;
 	public static String actionRunOnServer;
+	public static String actionRestartModule;
+	public static String actionUpdateStatus;
+	public static String actionMoveServerToMetadata;
+	public static String actionMoveServerToWorkspace;
 	public static String dialogAddRemoveModulesNone;
 	public static String actionSetNewServer;
 	public static String errorNoModules;
@@ -130,7 +139,6 @@
 	public static String errorNoClient;
 	public static String dialogModeWarningRestart;
 	public static String dialogModeWarningContinue;
-	public static String hostnameTitle;
 	public static String hostname;
 	public static String wizModuleTitle;
 	public static String wizModuleDescription;
@@ -153,8 +161,6 @@
 	public static String wizNewServerManual;
 	public static String wizSelectServerPreferred;
 	public static String wizNewServerExisting;
-	public static String wizImportConfigurationTitle;
-	public static String wizImportConfigurationDescription;
 	public static String wizNewServerRuntime;
 	public static String wizErrorServerCreationError;
 	public static String wizRunOnServerTitle;
@@ -163,7 +169,6 @@
 	public static String wizNewRuntimeTitle;
 	public static String wizNewRuntimeDescription;
 	public static String performingTasks;
-	public static String wizImportConfigurationWizardTitle;
 	public static String wizModuleWizardTitle;
 	public static String wizNewServerWizardTitle;
 	public static String wizSelectClientWizardTitle;
@@ -193,13 +198,13 @@
 	public static String vendor;
 	public static String version;
 	public static String moduleSupport;
+	public static String installedRuntimes;
 	public static String wizNewServerSelectExisting;
 	public static String host;
 	public static String elementUnknownName;
-	public static String serverTypeCompDescription;
+	public static String serverTypeCompLabel;
 	public static String viewServers;
 	public static String viewNoModules;
-	public static String viewConfigurationUnused;
 	public static String actionMonitorProperties;
 	public static String actionOpen;
 	public static String viewServer;
@@ -222,6 +227,7 @@
 	public static String viewSyncPublishing2;
 	public static String editorServerEditor;
 	public static String editorPromptIrreversible;
+	public static String editorRenameFiles;
 	public static String errorEditorCantSave;
 	public static String editorReadOnly;
 	public static String editorWritable;
@@ -231,23 +237,29 @@
 	public static String editorResourceWarnTitle;
 	public static String editorResourceWarnMessage;
 	public static String serverEditorOverviewPageTitle;
-	public static String serverEditorOverviewSection;
-	public static String serverEditorOverviewDescription;
+	public static String serverEditorOverviewGeneralSection;
+	public static String serverEditorOverviewGeneralDescription;
 	public static String serverEditorOverviewServerName;
 	public static String serverEditorOverviewServerHostname;
 	public static String serverEditorOverviewRuntime;
 	public static String serverEditorOverviewRuntimeEdit;
 	public static String serverEditorOverviewServerConfigurationPath;
-	public static String serverEditorOverviewAutoPublishDefault;
-	public static String serverEditorOverviewAutoPublishOverride;
+	public static String serverEditorOverviewServerConfigurationBrowse;
+	public static String serverEditorOverviewServerConfigurationBrowseMessage;
+	public static String serverEditorOverviewAutoPublishSection;
 	public static String serverEditorOverviewAutoPublishDescription;
+	public static String serverEditorOverviewAutoPublishDefault;
+	public static String serverEditorOverviewAutoPublishDefaultEdit;
+	public static String serverEditorOverviewAutoPublishDisable;
+	public static String serverEditorOverviewAutoPublishOverride;
+	public static String serverEditorOverviewAutoPublishOverrideInterval;
 	public static String serverEditorOverviewAutoPublishCommand;
-	public static String serverEditorOverviewServerHostnameDescription;
+	public static String serverEditorOverviewAutoPublishInvalid;
 	public static String serverEditorOverviewServerHostnameCommand;
-	public static String serverEditorOverviewServerNameDescription;
 	public static String serverEditorOverviewServerNameCommand;
-	public static String serverEditorOverviewRuntimeDescription;
 	public static String serverEditorOverviewRuntimeCommand;
+	public static String serverEditorOverviewOpenLaunchConfiguration;
+	public static String errorMissingConfiguration;
 	public static String viewStatusStarting4;
 	public static String viewStatusStarted2;
 	public static String viewStatusStopping4;
@@ -264,6 +276,28 @@
 	public static String viewStatusStopped;
 	public static String actionStopToolTip2;
 	public static String actionStop2;
+	public static String launchingClientTask;
+	public static String wizNewInstallableServerTitle;
+	public static String wizNewInstallableServerDescription;
+	public static String installableServerCompTree;
+	public static String installableServerLink;
+
+	public static String errorStartingMonitor;
+	public static String audioPrefSelectFile;
+	public static String audioPrefEnable;
+	public static String audioPrefVolume;
+	public static String audioPrefSounds;
+	public static String audioPrefSound;
+	public static String audioPrefFile;
+	public static String audioPrefPlay;
+	public static String audioPrefBrowse;
+	public static String audioPrefReset;
+	public static String audioUnknown;
+	public static String audioNone;
+	public static String audioDefault;
+
+	public static String preferenceInternetDescription;
+	public static String internalWebBrowserName;
 
 	static {
 		NLS.initializeMessages(ServerUIPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
index cf64c43..14ea23a 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
@@ -14,32 +14,17 @@
 # those lines are displayed in the workbench "New" wizard. The rest of the
 # text is displayed in each actual wizard)
 
-wizardCategoryTitle=Server
-
 # New Server (and Configuration) Wizard
-newServer=Server
-newServerDescription=Define a new server
 wizNewServerWizardTitle=New Server
 wizNewServerTitle=Define a New Server
-wizNewServerDescription=Choose the type of server to create.
-wizNewServerRuntime=Server runtime:
+wizNewServerDescription=Choose the type of server to create
+wizNewServerRuntime=Server &runtime:
 
 wizNewServerSelect=How do you want to select the server?
 wizNewServerExisting=Choose an e&xisting server
-wizNewServerDetect=&Automatically detect servers
-wizNewServerManual=&Manually define a server
+wizNewServerManual=&Manually define a new server
 wizNewServerSelectExisting=Select the server that you want to use:
 
-# Import Server Configuration wizard
-importServerConfiguration=Server Configuration
-wizImportConfigurationWizardTitle=Import a Server Configuration
-wizImportConfigurationTitle=Import a server configuration
-wizImportConfigurationDescription=Fill out the fields below to import the configuration.
-wizImportConfigurationType=Configuration type:
-wizImportConfigurationLocation=&Location:
-wizImportConfigurationFile=Choose the server configuration file
-wizImportConfigurationDirectory=Choose the directory containing the server configuration
-
 # Select Server wizard
 wizRunOnServerTitle=Run On Server
 wizDebugOnServerTitle=Debug On Server
@@ -56,7 +41,6 @@
 wizTaskWizardTitle=Select Tasks
 wizTaskTitle=Select Tasks
 wizTaskDescription=Select the tasks to perform on the server.
-wizTaskDetail=Tasks for:
 wizTaskNone=There are currently no tasks that need to be performed.
 
 # New Runtime Wizard
@@ -65,6 +49,10 @@
 wizNewRuntimeDescription=Define a new installed server runtime environment
 wizEditRuntimeWizardTitle=Edit Server Runtime
 
+# New Installable Server Wizard
+wizNewInstallableServerTitle=Install New Server
+wizNewInstallableServerDescription=Download and install support for a new server
+
 # Add/Remove Modules
 wizModuleWizardTitle=Add and Remove Projects
 wizModuleTitle=Add and Remove Projects
@@ -78,49 +66,37 @@
 wizModuleRemoveAll=<< Re&move All
 
 # General text used in multiple wizards
-wizFolder=F&older:
-wizBrowse=B&rowse...
 wizDescription=Description:
 
 # Wizard info and error messages
 wizErrorInvalidFolder=The folder must be a server project or a folder within a server project
 wizErrorClosedProject=The folder must not be in a closed project
-wizErrorResourceAlreadyExists=The specified resource already exists
 wizErrorServerCreationError=Cannot create a server using the selected type
-wizErrorImport=Could not find a valid server configuration at the specified location
 
 
 # --------------- Views ---------------
 
-viewCategoryTitle=Server
-
 # --- Server Configuration view ---
 viewServers=Servers
 
-viewNoConfiguration=No configuration
 viewNoModules=Nothing deployed
 
 # Actions
 actionDelete=Delete
+actionRemove=Remove
 actionOpen=Open
-actionSwitchConfiguration=Switch Configuration
 actionMonitor=Monitoring
 actionMonitorPort=Monitor port {0} ({1})
-actionMonitorProperties=Properties...
+actionMonitorProperties=Properties
 actionNew=New
 actionNewServer=Server
 
 # --- Servers view ---
-viewServersTitle=Servers
-
 # Column titles
 viewServer=Server
-viewHost=Host name
 viewStatus=Status
 viewSync=State
 
-actionRestartProject=Restart Project
-
 # Actions
 actionStart=Start
 actionStartToolTip=Start the server
@@ -134,17 +110,18 @@
 actionRestartToolTip=Restart the server
 actionPublish=Publish
 actionPublishToolTip=Publish to the server
-actionModifyModules=Add and remove projects...
+actionModifyModules=Add and Remove Projects...
 actionModifyModulesToolTip=Add and remove projects
+actionRestartModule=Restart {0}
+actionUpdateStatus=Refresh Status
+actionMoveServerToMetadata=Move to Metadata
+actionMoveServerToWorkspace=Move to Workspace
 
 # Status column text
-viewStatusStarting=Starting
 viewStatusStarted=Started
 viewStatusStartedDebug=Debugging
 viewStatusStartedProfile=Profiling
-viewStatusStopping=Stopping
 viewStatusStopped=Stopped
-viewStatusUnsupported=Unsupported
 
 viewStatusStarting1=Starting.
 viewStatusStarting2=Starting..
@@ -163,27 +140,14 @@
 
 # --- set 2 ---
 # Actions
-actionStart2=Connect
-actionStartToolTip2=Connect the server
-actionDebug2=Debug
-actionDebugToolTip2=Connect to the server in debug mode
-actionProfile2=Profile
-actionProfileToolTip2=Connect to the server in profiling mode
 actionStop2=Disconnect
 actionStopToolTip2=Disconnect from the server
-actionRestart2=Reconnect
-actionRestartToolTip2=Reconnect to the server
-actionPublish2=Publish
-actionPublishToolTip2=Publish to the server
 
 # Status column text
 viewStatusStarting4=Connecting
 viewStatusStarted2=Connected
-viewStatusStartedDebug2=Debugging
 viewStatusStopping4=Disconnecting
 viewStatusStopped2=Disconnected
-viewStatusUnsupported2=Unsupported
-viewStatusStartedProfile2=Profiling
 
 # Server State text
 viewSyncOkay2=Synchronized
@@ -196,8 +160,6 @@
 # --------------- Action Sets (toolbar icon groups) ---------------
 
 # Servers action set
-actionSetTitle=Server
-actionSetNewServer=Create Server and Server Configuration
 actionSetNewServer=Create Server
 
 # Run on Server actions
@@ -209,26 +171,24 @@
 # --------------- Preferences ---------------
 
 # Names of the preference pages
-preferenceServersTitle=Server
-preferenceRuntimesTitle=Installed Runtimes
 preferenceRuntimesTitleLong=Installed Server Runtime Environments
 
 # Server preferences
-prefAutoPublish=Automatically p&ublish before starting servers
-prefAutoPublishLocal=Automatically publish to local servers every:
-prefAutoPublishRemote=Automatically publish to remote servers every:
-prefAutoPublishSeconds=s
+prefAutoPublish=Automatically p&ublish when starting servers
+prefAutoPublishLocal=Automatically publish to &local servers
+prefAutoPublishLocalTime=Publishing inter&val (in seconds):
+prefAutoPublishRemote=Automatically publish to rem&ote servers
+prefAutoPublishRemoteTime=Publishing interv&al (in seconds):
 prefAutoRestart=Automatically &restart servers when necessary
 prefPromptIrreversible=Prompt before making &irreversible changes within an editor
-prefCreateInWorkspace=Create server resources in workspace
-prefShowOnActivity=Show Servers view when server state changes
-prefMachineSpeed=Relative machine speed:
-prefMachineSpeedVerySlow=Very slow
-prefMachineSpeedSlow=Slow
-prefMachineSpeedAverage=Average
-prefMachineSpeedFast=Fast
-prefMachineSpeedVeryFast=Very fast
-
+prefShowOnActivity=Show &Servers view when server state changes
+prefMachineSpeed=Server &timeout delay:
+prefMachineSpeedVerySlow=Longer
+prefMachineSpeedSlow=Long
+prefMachineSpeedAverage=Normal
+prefMachineSpeedFast=Short
+prefMachineSpeedVeryFast=Shorter
+prefSyncStartup=S&ynchronize servers on startup
 
 prefSaveEditorsGroup=Save dirty editors before starting server
 prefSaveEditorsNever=&Never
@@ -236,39 +196,36 @@
 prefSaveEditorsAutosave=Auto-sav&e
  
 # Project properties preferences
-propertiesServer=Server
 prefProjectDescription=Set the runtime target and the default server for the project.
 prefProject=Project:
-prefProjectDefaultServer=Default server:
+prefProjectDefaultServer=De&fault server:
 prefProjectNotModule=This project cannot be deployed to a server.
 prefProjectNotConfigured=Not currently deployed to any servers
 prefProjectNoServer=<None>
 
 # Installed runtimes
 preferenceRuntimesDescription=Add, remove, or edit installed server runtime definitions.\nThe checked runtime will be used by default when creating new projects.
-preferenceRuntimesTable=Installed server runtimes:
+preferenceRuntimesTable=&Installed server runtimes:
 
 
 # --------------- Tasks (progress monitors) ---------------
 
-# Creating default server project
-createServerProjectTask=Creating server project.
-
 # General tasks
 savingTask=Saving {0}.
 loadingTask=Loading {0}.
 performingTasks=Performing tasks.
-
-publishingStart=Connecting to server
+launchingClientTask=Launching client
 
 # --------------- Dialogs ---------------
 
-# Delete Server Resource dialog
-deleteServerResourceDialogTitle=Delete Server Resource
-deleteServerResourceDialogMessage=Are you sure you want to delete {0}?
-deleteServerResourceDialogMessageMany=Are you sure you want to delete the {0} server resources?
-deleteServerResourceDialogLooseConfigurations=Also delete unused server configuration {0}.
-deleteServerResourceDialogLooseConfigurationsMany=Also delete {0} unused server configurations.
+# Delete Server dialog
+deleteServerDialogTitle=Delete Server
+deleteServerDialogMessage=Are you sure you want to delete {0}?
+deleteServerDialogMessageMany=Are you sure you want to delete the {0} servers?
+deleteServerDialogLooseConfigurations=Delete unused server configuration(s)
+deleteServerDialogRunningServer=Delete running server(s)
+deleteServerDialogRunningServerStop=Stop server(s) before deleting
+deleteServerTask=Deleting server(s)...
 
 # Create Server Project dialog
 createServerProjectDialogTitle=Create Server Project
@@ -283,16 +240,15 @@
 resourceDirtyDialogMessage=The server resource {0} has unsaved changes. Do you want to continue?
 resourceDirtyDialogContinue=Continue
 
-runtimeTargetCombo=Target runtime:
+runtimeTargetCombo=&Target runtime:
 runtimeTargetNone=<None>
-runtimeTargetNewRuntime=New...
-runtimeTargetRuntimePreferences=Installed Runtimes...
-runtimeTargetChildren=Include child projects
+runtimeTargetNewRuntime=&New...
+runtimeTargetRuntimePreferences=Configure &Installed Runtimes...
+runtimeTargetChildren=Target contained projects
 
 # General dialogs
 defaultDialogTitle=Server
 dialogStoppingServer=Stopping server {0}.
-dialogRestartingProject=Restarting project {0}.
 
 # restart warning dialog
 dialogModeWarningDebug=The server is not running in debug mode. You may restart the server in debug mode, continue without debugging, or cancel the operation.
@@ -326,33 +282,36 @@
 # runtime locator search dialog
 dialogRuntimeSearchTitle=Search For Runtimes
 dialogRuntimeSearchMessage=Select the directory in which to search for server runtimes:
-dialogRuntimeSearchProgress=Searching for server runtimes...
+dialogRuntimeSearchProgress=Searching for server runtime environments...
 
 # Can't add remove
 dialogAddRemoveModulesNone=There are no projects that can be added or removed from the server.
 
+dialogRemoveModuleConfirm=Are you sure you want to remove the project from the server?
+
 # --------------- Misc UI ---------------
 
-serverLaunchShortcut=Run on Server
-
-serverEditor=Server Editor
-
 # runtime composite
 runtimeTypeCompDescription=Runtimes are used at build time to compile projects.
 runtimeTypeCompTree=Select the type of &runtime that you want to define:
-serverTypeCompDescription=Select the &server type:
+serverTypeCompLabel=Select the &server type:
 name=Name
 vendor=Vendor
 version=Version
 host=Host name
 moduleSupport=Module Support
 viewBy=&View By:
+installedRuntimes=&Installed Runtimes...
+
+# installable server composite
+installableServerCompTree=Select the &server support to install:
+installableServerLink=Don't see your server listed? Click here
 
 # misc composites
-hostnameTitle=Specify the host where you want to publish
-hostname=&Host name:
+hostname=Server's &host name:
 
 # Server launch configuration tab
+serverLaunchDescription=This launch configuration can be used to launch the server specified below. To access further options for configuring the server, open the server's editor from the Servers view.
 serverLaunchConfigurationTab=Server
 serverLaunchServer=Server:
 serverLaunchRuntime=Runtime:
@@ -363,17 +322,16 @@
 errorServerAlreadyRunning=Server already running
 errorNoServerSelected=No server selected
 errorInvalidServer=Invalid server
-errorServerStartFailed=The server named {0} did not start correctly. Check the Console for error messages.
-errorPublishing=Could not publish to the server.
 errorCouldNotCreateServerProject=Could not create server project
 errorCouldNotCreateServerProjectStatus=Could not create server project: {0}
-errorNoModules=Did not find anything to deploy to a server
+errorNoModules=No launchable artifact could be found in the selection
 errorNoServer=Could not find a server to run the selection
 errorNoClient=Could not find a client that is able to launch the selection
 errorCouldNotSavePreference=Could not save server preference information.
 errorEditorCantSave=Can't save the server resource for the following reason(s):
 errorEditor=Could not open editor because {0} is not a valid server or server configuration.
-errorVersionLevel=The selected server does not support version {1} of the {0} specification.
+errorVersionLevel=The server does not support version {1} of the {0} specification.
+errorMissingConfiguration=The server configuration is missing or invalid
 
 # Info messages
 infoNoRuntimesFound=No server runtimes were found.
@@ -382,41 +340,43 @@
 # {0} will be replaced by a number if the given name is already being used
 defaultServerProjectName=Servers{0}
 
-serverStartError=Error received while starting the server
-
 # Used when a name can't be found
 elementUnknownName=<unknown>
 
 columnName=Name
 columnType=Type
 
-add=Add...
-edit=Edit...
-remove=Remove
-search=Search...
-
+add=&Add...
+edit=&Edit...
+remove=&Remove
+search=&Search...
 
 # --------------- Editor support ---------------
 
-serverEditorOverviewPage=Overview
 serverEditorOverviewPageTitle=Server Overview
-serverEditorOverviewSection=General
-serverEditorOverviewDescription=Specify the host name and other settings.
+serverEditorOverviewGeneralSection=General
+serverEditorOverviewGeneralDescription=Specify the host name and other common settings.
 serverEditorOverviewServerName=Server name:
 serverEditorOverviewServerNameCommand=set server name
-serverEditorOverviewServerNameDescription=Set the server name
-serverEditorOverviewServerConfigurationPath=Server configuration path:
+serverEditorOverviewServerConfigurationPath=Configuration path:
+serverEditorOverviewServerConfigurationBrowse=Browse
+serverEditorOverviewServerConfigurationBrowseMessage=Specify the location of the server configuration.
 serverEditorOverviewServerHostname=Host name:
 serverEditorOverviewServerHostnameCommand=set host name
-serverEditorOverviewServerHostnameDescription=Set the host name
 serverEditorOverviewRuntime=Runtime:
-serverEditorOverviewRuntimeEdit=Edit runtime
+serverEditorOverviewRuntimeEdit=Edit
 serverEditorOverviewRuntimeCommand=set runtime
-serverEditorOverviewRuntimeDescription=Set the runtime
-serverEditorOverviewAutoPublishDefault=Use default auto-publish settings
-serverEditorOverviewAutoPublishOverride=Auto-publish every:
-serverEditorOverviewAutoPublishCommand=modify auto-publish settings
-serverEditorOverviewAutoPublishDescription=Modify auto-publish settings
+
+serverEditorOverviewAutoPublishSection=Automatic Publishing
+serverEditorOverviewAutoPublishDescription=Override when the server is automatically published to.
+serverEditorOverviewAutoPublishDefault=Use default publishing settings
+serverEditorOverviewAutoPublishDefaultEdit=Edit
+serverEditorOverviewAutoPublishOverride=Override default settings
+serverEditorOverviewAutoPublishOverrideInterval=Publishing interval (in seconds):
+serverEditorOverviewAutoPublishDisable=Never publish automatically
+serverEditorOverviewAutoPublishCommand=modify publish settings
+serverEditorOverviewOpenLaunchConfiguration=Open launch configuration
+serverEditorOverviewAutoPublishInvalid=The automatic publish setting is invalid. It must be a 10 seconds or more.
 
 # Menu items. {0} will be replaced by one of the xxxEditorActionXxx fields
 # from below. @Ctrl+Z is the menu mnemonic
@@ -434,19 +394,39 @@
 
 editorServerEditor=Server Editor
 editorPromptIrreversible=This operation cannot be undone. Do you want to proceed?
+editorRenameFiles=The server has been renamed. Do you want to rename the corresponding files to match?
 
 # message if a dirty resource is deleted
-editorResourceDeleteTitle=Server Resource Deleted
+editorResourceDeleteTitle=Server Deleted
 editorResourceDeleteServerMessage=The server {0} has been deleted from the file system. Do you want to save your changes or close the editor without saving?
-editorResourceDeleteServerConfigurationMessage=The server configuration {0} has been deleted from the file system. Do you want to save your changes or close the editor without saving?
 editorResourceDeleteSave=Save
 
 editorResourceModifiedTitle=File Changed
 editorServerModifiedMessage=The server has been changed on the file system. Do you want to load the changes?
-editorServerConfigurationModifiedMessage=The server configuration has been changed on the file system. Do you want to load the changes?
 
-editorValidateEditFailureMessage=The server resource cannot be edited.
+editorValidateEditFailureMessage=The server cannot be edited.
 editorReadOnlyMessage=File(s) being edited have become read-only. The editor will become read-only and changes will be lost.
 
 editorResourceWarnTitle=Server Modification Warning
-editorResourceWarnMessage=The resource you are modifying is read-only. All changes will be lost because the resource cannot be saved. 
\ No newline at end of file
+editorResourceWarnMessage=The server you are modifying is read-only. All changes will be lost because the server cannot be saved.
+
+
+audioPrefSelectFile=Select Audio File
+audioPrefEnable=&Enable sounds
+audioPrefVolume=&Volume:
+audioPrefSounds=&Sounds:
+audioPrefSound=Sound
+audioPrefFile=Audio File
+audioPrefPlay=&Play
+audioPrefBrowse=&Browse...
+audioPrefReset=&Reset
+
+audioUnknown=(unknown)
+audioDefault=(default)
+audioNone=(none)
+
+errorStartingMonitor=Could not start the server monitor: {0}
+
+internalWebBrowserName=Internal Web Browser
+
+preferenceInternetDescription=General internet settings are available in the contained preference pages.
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java
index 33e52e3..0ff6db2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java
@@ -12,13 +12,11 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.ui.ServerUICore;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -30,6 +28,12 @@
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.ui.dialogs.PropertyPage;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IModuleType;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.wst.server.ui.ServerUICore;
 /**
  * PropertyPage for IProjects. It shows the server and runtime preference for the project.
  */
@@ -37,8 +41,6 @@
 	protected IProject project;
 	protected IModule module;
 	protected IServer server;
-	
-	protected RuntimeTargetComposite rtComp;
 
 	/**
 	 * ProjectPropertyPage constructor comment.
@@ -63,7 +65,7 @@
 			GridLayout layout = new GridLayout();
 			layout.marginHeight = 0;
 			layout.marginWidth = 0;
-			layout.numColumns = 3;
+			layout.numColumns = 4;
 			layout.verticalSpacing = 10;
 			composite.setLayout(layout);
 			composite.setLayoutData(new GridData(GridData.FILL_BOTH));
@@ -71,19 +73,16 @@
 			Label label = new Label(composite, SWT.WRAP);
 			label.setText(Messages.prefProjectDescription);
 			GridData data = new GridData(GridData.FILL_HORIZONTAL);
-			data.horizontalSpan = 3;
+			data.horizontalSpan = 4;
 			data.widthHint = 200;
 			label.setLayoutData(data);
-
-			IModule[] modules = ServerUtil.getModules(project);
-			if (modules != null && modules.length > 0)
-				module = modules[0];
-
+			
+			module = ServerUtil.getModule(project);
 			if (module == null) {
 				label = new Label(composite, SWT.NONE);
 				label.setText(Messages.prefProjectNotModule);
 				data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-				data.horizontalSpan = 3;
+				data.horizontalSpan = 4;
 				label.setLayoutData(data);
 			} else {
 				IModuleType mt = module.getModuleType();
@@ -95,15 +94,12 @@
 				
 					Label moduleKind = new Label(composite, SWT.NONE);
 					data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-					data.horizontalSpan = 2;
+					data.horizontalSpan = 3;
 					moduleKind.setLayoutData(data);
 					moduleKind.setText(module.getName() + " (" + mt.getName() + ")");
 				}
 				
-				rtComp = new RuntimeTargetComposite(composite, project);
-				
-				IProjectProperties prefs = ServerCore.getProjectProperties(project);
-				IServer prefServer = prefs.getDefaultServer();
+				IServer prefServer = ServerCore.getDefaultServer(module);
 	
 				label = new Label(composite, SWT.NONE);
 				label.setText(Messages.prefProjectDefaultServer);
@@ -115,12 +111,12 @@
 					label = new Label(composite, SWT.WRAP);
 					label.setText(Messages.prefProjectNotConfigured);
 					data = new GridData();
-					data.horizontalSpan = 2;
+					data.horizontalSpan = 3;
 					label.setLayoutData(data);
 				} else {
 					final Table table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
 					data = new GridData(GridData.FILL_HORIZONTAL);
-					data.horizontalSpan = 2;
+					data.horizontalSpan = 3;
 					data.heightHint = 70;
 					table.setLayoutData(data);
 					
@@ -191,17 +187,13 @@
 		return allServers;
 	}
 
-	/** 
+	/**
 	 * @see org.eclipse.jface.preference.PreferencePage#performOk()
 	 */
 	public boolean performOk() {
 		if (module != null) {
 			try {
-				if (rtComp.hasChanged())
-					rtComp.apply(new NullProgressMonitor());
-				
-				IProjectProperties props = ServerCore.getProjectProperties(project);
-				props.setDefaultServer(server, null);
+				ServerCore.setDefaultServer(module, server, null);
 			} catch (CoreException e) {
 				Trace.trace(Trace.SEVERE, "Error setting preferred server", e);
 				EclipseUtil.openError(Messages.errorCouldNotSavePreference, e.getStatus());
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RestartServerJob.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RestartServerJob.java
deleted file mode 100644
index c04def5..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RestartServerJob.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**********************************************************************
- * 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.wst.server.ui.internal;
-
-import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.internal.ServerSchedulingRule;
-/**
- * 
- */
-public class RestartServerJob extends Job {
-	protected IServer server;
-	protected String launchMode;
-	
-	public static void restartServer(IServer server, String launchMode) {
-		RestartServerJob job = new RestartServerJob(server, launchMode);
-		job.setUser(true);
-		job.schedule();
-	}
-
-	public RestartServerJob(IServer server, String launchMode) {
-		super("Restart server");
-		this.server = server;
-		this.launchMode = launchMode;
-		setRule(new ServerSchedulingRule(server));
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.internal.jobs.InternalJob#run(org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	protected IStatus run(IProgressMonitor monitor) {
-		IStatus status = new Status(IStatus.OK, ServerUIPlugin.PLUGIN_ID, 0, "", null);
-		try {
-			server.synchronousRestart(launchMode, monitor);
-		} catch (CoreException ce) {
-			return ce.getStatus();
-		}
-		return status;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
index 0236803..b576ed5 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
@@ -14,12 +14,9 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -45,11 +42,10 @@
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.IRuntimeLocator;
 import org.eclipse.wst.server.core.internal.ServerPlugin;
-import org.eclipse.wst.server.ui.internal.task.FinishWizardFragment;
-import org.eclipse.wst.server.ui.internal.task.SaveRuntimeTask;
 import org.eclipse.wst.server.ui.internal.viewers.RuntimeComposite;
 import org.eclipse.wst.server.ui.internal.wizard.ClosableWizardDialog;
 import org.eclipse.wst.server.ui.internal.wizard.TaskWizard;
+import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.NewRuntimeWizardFragment;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
@@ -76,6 +72,7 @@
 	 */
 	protected Control createContents(Composite parent) {
 		initializeDialogUnits(parent);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ContextIds.PREF_GENERAL);
 		
 		Composite composite = new Composite(parent, SWT.NONE);
 		GridLayout layout = new GridLayout();
@@ -87,7 +84,6 @@
 		composite.setLayout(layout);
 		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
 		composite.setLayoutData(data);
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.PREF_GENERAL);
 		
 		Label label = new Label(composite, SWT.WRAP);
 		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
@@ -149,7 +145,7 @@
 					IRuntimeWorkingCopy runtimeWorkingCopy = runtime.createWorkingCopy();
 					if (showWizard(runtimeWorkingCopy) != Window.CANCEL) {
 						try {
-							runtimeWorkingCopy.save(false, new NullProgressMonitor());
+							runtimeWorkingCopy.save(false, null);
 							runtimeComp.refresh(runtime);
 						} catch (Exception ex) {
 							// ignore
@@ -249,7 +245,7 @@
 							if (runtimes != null) {
 								int size = runtimes.length;
 								for (int i = 0; i < size; i++) {
-									if (runtimes[i].getLocation().equals(wc.getLocation()))
+									if (runtimes[i].getLocation() != null && runtimes[i].getLocation().equals(wc.getLocation()))
 										dup = true;
 								}
 							}
@@ -299,7 +295,7 @@
 			}
 		}
 		
-		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+		/*IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
 		if (projects != null) {
 			int size = projects.length;
 			for (int i = 0; i < size; i++) {
@@ -307,7 +303,7 @@
 				if (runtime.equals(props.getRuntimeTarget()))
 					inUse = true;
 			}
-		}
+		}*/
 		
 		if (inUse) {
 			if (!MessageDialog.openConfirm(getShell(), Messages.defaultDialogTitle, Messages.dialogRuntimeInUse))
@@ -320,12 +316,17 @@
 	protected int showWizard(final IRuntimeWorkingCopy runtimeWorkingCopy) {
 		String title = null;
 		WizardFragment fragment = null;
+		TaskModel taskModel = new TaskModel();
 		if (runtimeWorkingCopy == null) {
 			title = Messages.wizNewRuntimeWizardTitle;
 			fragment = new WizardFragment() {
 				protected void createChildFragments(List list) {
 					list.add(new NewRuntimeWizardFragment());
-					list.add(new FinishWizardFragment(new SaveRuntimeTask()));
+					list.add(new WizardFragment() {
+						public void performFinish(IProgressMonitor monitor) throws CoreException {
+							WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+						}
+					});
 				}
 			};
 		} else {
@@ -335,19 +336,19 @@
 				edit.setEnabled(false);
 				return Window.CANCEL;
 			}
+			taskModel.putObject(TaskModel.TASK_RUNTIME, runtimeWorkingCopy);
 			fragment = new WizardFragment() {
 				protected void createChildFragments(List list) {
+					list.add(fragment2);
 					list.add(new WizardFragment() {
-						public void enter() {
-							getTaskModel().putObject(TaskModel.TASK_RUNTIME, runtimeWorkingCopy);
+						public void performFinish(IProgressMonitor monitor) throws CoreException {
+							WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
 						}
 					});
-					list.add(fragment2);
-					list.add(new FinishWizardFragment(new SaveRuntimeTask()));
 				}
 			};
 		}
-		TaskWizard wizard = new TaskWizard(title, fragment);
+		TaskWizard wizard = new TaskWizard(title, fragment, taskModel);
 		wizard.setForcePreviousAndNextButtons(true);
 		ClosableWizardDialog dialog = new ClosableWizardDialog(getShell(), wizard);
 		return dialog.open();
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimeTargetComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimeTargetComposite.java
deleted file mode 100644
index 51eaf37..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimeTargetComposite.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.preference.IPreferenceNode;
-import org.eclipse.jface.preference.PreferenceDialog;
-import org.eclipse.jface.preference.PreferenceManager;
-import org.eclipse.jface.window.Window;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.Module;
-import org.eclipse.wst.server.ui.ServerUIUtil;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-/**
- * Dialog that prompts a user to change the target runtime.
- * 
- * TODO - must support multiple modules per project (remove [0] from getModules(IProject))
- */
-public class RuntimeTargetComposite {
-	protected IProject project;
-	protected IProjectProperties props;
-	protected IRuntime currentRuntime;
-	protected IRuntime newRuntime;
-	protected IRuntime[] targets;
-	protected String[] items;
-	
-	protected List childProjects;
-	protected boolean setChildren = true;
-	protected int offset = 0;
-
-	/**
-	 * RuntimeTargetComposite constructor comment.
-	 * @param parent Composite
-	 * @param project IProject
-	 */
-	protected RuntimeTargetComposite(Composite parent, IProject project) {
-		this.project = project;
-		props = ServerCore.getProjectProperties(project);
-		currentRuntime = props.getRuntimeTarget();
-		if (currentRuntime == null)
-			offset = 1;
-		
-		// get child modules
-		IModule projectModule = ServerUtil.getModules(project)[0];
-		childProjects = new ArrayList();
-		if (projectModule != null) {
-			List children = new ArrayList();
-			IModule[] child = ((Module) projectModule).getChildModules(null);
-			if (child != null) {
-				int size = child.length;
-				for (int i = 0; i < size; i++)
-					children.add(child[i]);
-				int a = 0;
-				while (a < children.size()) {
-					IModule module = (IModule) children.get(a);
-					IModule[] child2 = ((Module) module).getChildModules(null);
-					if (child2 != null) {
-						size = child2.length;
-						for (int i = 0; i < size; i++)
-							children.add(child2[i]);
-					}
-					a++;
-				}
-			}
-			
-			Iterator iterator = children.iterator();
-			while (iterator.hasNext()) {
-				IModule module = (IModule) iterator.next();
-				if (module.getProject() != null)
-					childProjects.add(module);
-			}
-		}
-		
-		createContents(parent);
-	}
-
-	/**
-	 * 
-	 */
-	protected void createContents(final Composite parent) {
-		Label label = new Label(parent, SWT.NONE);
-		label.setText(Messages.runtimeTargetCombo);
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		label.setLayoutData(data);
-		
-		final Combo combo = new Combo(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		combo.setLayoutData(data);
-		
-		int sel = updateRuntimes();
-		combo.setItems(items);
-		if (items.length == 0)
-			combo.setEnabled(false);
-		else {
-			combo.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					int select = combo.getSelectionIndex();
-					if (offset > 0 && select == 0)
-						newRuntime = null;
-					else
-						newRuntime = targets[select - offset];
-				}
-			});
-			if (sel >= 0) {
-				combo.select(sel);
-				if (offset == 0 || sel > 0)
-					newRuntime = targets[sel - offset];
-			} else
-				combo.select(0);
-		}
-
-		final IModule projectModule = ServerUtil.getModules(project)[0];
-		
-		Button newButton = SWTUtil.createButton(parent, Messages.runtimeTargetNewRuntime);
-		newButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				String currentRuntime2 = combo.getText();
-				String type = null;
-				String version = null;
-				if (projectModule != null) {
-					IModuleType mt = projectModule.getModuleType();
-					type = mt.getId();
-					version = mt.getVersion();
-				}
-				if (ServerUIUtil.showNewRuntimeWizard(parent.getShell(), type, version)) {
-					int sel2 = updateRuntimes();
-					combo.setItems(items);
-					combo.setText(currentRuntime2);
-					if (combo.getSelectionIndex() == -1)
-						combo.select(sel2);
-				}
-			}
-		});
-		
-		// child module selection
-		if (!childProjects.isEmpty()) {
-			final Button includeChildren = new Button(parent, SWT.CHECK);
-			includeChildren.setText(Messages.runtimeTargetChildren);
-			data = new GridData();
-			data.horizontalSpan = 2;
-			includeChildren.setLayoutData(data);
-			includeChildren.setSelection(true);
-			
-			includeChildren.addSelectionListener(new SelectionListener() {
-				public void widgetSelected(SelectionEvent e) {
-					setChildren = includeChildren.getSelection();
-				}
-
-				public void widgetDefaultSelected(SelectionEvent e) {
-					widgetSelected(e);
-				}
-			});
-		} else {
-			new Label(parent, SWT.NONE);
-			new Label(parent, SWT.NONE);
-		}
-		
-		Button prefsButton = SWTUtil.createButton(parent, Messages.runtimeTargetRuntimePreferences);
-		prefsButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				String currentRuntime2 = combo.getText();
-				if (showRuntimePreferencePage(parent.getShell())) {
-					int sel2 = updateRuntimes();
-					combo.setItems(items);
-					combo.setText(currentRuntime2);
-					if (combo.getSelectionIndex() == -1)
-						combo.select(sel2);
-				}
-			}
-		});
-	}
-	
-	protected static boolean showRuntimePreferencePage(Shell shell) {
-		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
-		IPreferenceNode node = manager.find("org.eclipse.wst.server.ui.preferencePage").findSubNode("org.eclipse.wst.server.ui.runtime.preferencePage");
-		PreferenceManager manager2 = new PreferenceManager();
-		manager2.addToRoot(node);
-		final PreferenceDialog dialog = new PreferenceDialog(shell, manager2);
-		final boolean[] result = new boolean[] { false };
-		BusyIndicator.showWhile(shell.getDisplay(), new Runnable() {
-			public void run() {
-				dialog.create();
-				if (dialog.open() == Window.OK)
-					result[0] = true;
-			}
-		});
-		return result[0];
-	}
-	
-	protected int updateRuntimes() {
-		IModule pm = ServerUtil.getModules(project)[0];
-		if (pm != null) {
-			IModuleType mt = pm.getModuleType();
-			targets = ServerUtil.getRuntimes(mt.getId(), mt.getVersion());
-		}
-
-		items = new String[0];
-		int sel = -1;
-		if (targets != null) {
-			int size = targets.length;
-			items = new String[size + offset];
-			if (offset > 0) {
-				items[0] = Messages.runtimeTargetNone;
-				sel = 0;
-			}
-			for (int i = 0; i < size; i++) {
-				IRuntime target = targets[i];
-				items[i+offset] = target.getName();
-				if (target.equals(currentRuntime))
-					sel = i;
-			}
-		}
-		return sel;
-	}
-	
-	public IRuntime getSelectedRuntime() {
-		return newRuntime;
-	}
-	
-	public boolean hasChanged() {
-		if (!childProjects.isEmpty())
-			return true;
-		if (newRuntime == null)
-			return false;
-		if (newRuntime.equals(currentRuntime))
-			return false;
-		return true;
-	}
-
-	public void apply(IProgressMonitor monitor) throws CoreException {
-		if (newRuntime == null || !newRuntime.equals(props.getRuntimeTarget()))
-			props.setRuntimeTarget(newRuntime, monitor);
-		
-		if (setChildren) {
-			Iterator iterator = childProjects.iterator();
-			while (iterator.hasNext()) {
-				IModule module = (IModule) iterator.next();
-				IProject proj = module.getProject();
-				props = ServerCore.getProjectProperties(proj);
-				
-				if (newRuntime == null || !newRuntime.equals(props.getRuntimeTarget()))
-					props.setRuntimeTarget(newRuntime, monitor);
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java
index ad2a690..52efdbc 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java
@@ -10,21 +10,15 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
 import org.eclipse.core.runtime.IAdapterFactory;
 import org.eclipse.ui.IActionFilter;
-import org.eclipse.wst.server.core.IServer;
 /**
  * Adapter factory to adapt servers to IActionFilter.
  */
 public class ServerAdapterFactory implements IAdapterFactory {
 	IActionFilter actionFilter = new IActionFilter() {
 		public boolean testAttribute(Object target, String name, String value) {
-			IServer server = (IServer) target;
-			String[] typeIds = tokenize(value, ",");
-			return supportsServerType(server.getServerType().getId(), typeIds);
+			return ServerPropertyTester.checkProperty(target, name, value);
 		}
 	};
 
@@ -44,45 +38,4 @@
 	public Class[] getAdapterList() {
 		return new Class[] { IActionFilter.class };
 	}
-
-	protected static String[] tokenize(String param, String delim) {
-		if (param == null)
-			return new String[0];
-		
-		List list = new ArrayList();
-		
-		StringTokenizer st = new StringTokenizer(param, delim);
-		while (st.hasMoreTokens()) {
-			String str = st.nextToken();
-			if (str != null && str.length() > 0)
-				list.add(str.trim());
-		}
-
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
-	}
-
-	/**
-	 * Returns true if the given server type (given by the id) can use this action.
-	 *
-	 * @return boolean
-	 */
-	protected boolean supportsServerType(String id, String[] typeIds) {
-		if (id == null || id.length() == 0)
-			return false;
-
-		if (typeIds == null)
-			return false;
-		
-		int size = typeIds.length;
-		for (int i = 0; i < size; i++) {
-			if (typeIds[i].endsWith("*")) {
-				if (id.length() >= typeIds[i].length() && id.startsWith(typeIds[i].substring(0, typeIds[i].length() - 1)))
-					return true;
-			} else if (id.equals(typeIds[i]))
-				return true;
-		}
-		return false;
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLabelProvider.java
index 01ee288..1ba1468 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLabelProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLabelProvider.java
@@ -73,6 +73,11 @@
 				IModule module = (IModule) element;
 				IModuleType mt = module.getModuleType();
 				return getModuleImageDescriptor(mt.getId());
+			} else if (element instanceof IModule[]) {
+				IModule[] modules = (IModule[]) element;
+				IModule module = modules[modules.length - 1];
+				IModuleType mt = module.getModuleType();
+				return getModuleImageDescriptor(mt.getId());
 			} else if (element instanceof IWorkbenchAdapter) {
 				return ((IWorkbenchAdapter) element).getImageDescriptor(null);
 			}
@@ -105,6 +110,17 @@
 			} else if (element instanceof IModule) {
 				IModule module = (IModule) element;
 				IModuleType mt = module.getModuleType();
+				if (mt == null)
+					return null;
+				
+				return getModuleImage(mt.getId());
+			} else if (element instanceof IModule[]) {
+				IModule[] modules = (IModule[]) element;
+				IModule module = modules[modules.length - 1];
+				IModuleType mt = module.getModuleType();
+				if (mt == null)
+					return null;
+				
 				return getModuleImage(mt.getId());
 			}
 		} catch (Exception e) {
@@ -139,6 +155,9 @@
 			return ((IClient) element).getName();
 		} else if (element instanceof IModule) {
 			return ((IModule) element).getName();
+		} else if (element instanceof IModule[]) {
+			IModule[] modules = (IModule[]) element;
+			return modules[modules.length - 1].getName();
 		} else if (element instanceof IWorkbenchAdapter) {
 			return ((IWorkbenchAdapter) element).getLabel(null);
 		}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPreferencePage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPreferencePage.java
index c60fcdd..0e748be 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPreferencePage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPreferencePage.java
@@ -10,6 +10,7 @@
  **********************************************************************/
 package org.eclipse.wst.server.ui.internal;
 
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.wst.server.core.IServer;
@@ -47,8 +48,7 @@
 	protected Button saveNever;
 	protected Button savePrompt;
 	protected Button saveAuto;
-	
-	protected Button createInWorkspace;
+	protected Button syncOnStartup;
 
 	protected ServerPreferences preferences;
 	protected ServerUIPreferences uiPreferences;
@@ -79,6 +79,8 @@
 	 */
 	protected Control createContents(Composite parent) {
 		initializeDialogUnits(parent);
+		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
+		whs.setHelp(parent, ContextIds.PREF_GENERAL);
 		
 		Composite composite = new Composite(parent, SWT.NONE);
 		GridLayout layout = new GridLayout();
@@ -86,45 +88,64 @@
 		layout.verticalSpacing = convertVerticalDLUsToPixels(4);
 		layout.marginWidth = 0;
 		layout.marginHeight = 0;
-		layout.numColumns = 4;
+		layout.numColumns = 3;
 		composite.setLayout(layout);
 		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
 		composite.setLayoutData(data);
-		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
-		whs.setHelp(composite, ContextIds.PREF_GENERAL);
+		
+		showOnActivity = new Button(composite, SWT.CHECK);
+		showOnActivity.setText(Messages.prefShowOnActivity);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		data.horizontalSpan = 3;
+		showOnActivity.setLayoutData(data);
+		showOnActivity.setSelection(uiPreferences.getShowOnActivity());
+		whs.setHelp(showOnActivity, ContextIds.PREF_GENERAL_SHOW_ON_ACTIVITY);
 		
 		publishBeforeStart = new Button(composite, SWT.CHECK);
 		publishBeforeStart.setText(Messages.prefAutoPublish);
 		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.horizontalSpan = 4;
+		data.horizontalSpan = 3;
 		publishBeforeStart.setLayoutData(data);
 		publishBeforeStart.setSelection(preferences.isAutoPublishing());
 		whs.setHelp(publishBeforeStart, ContextIds.PREF_GENERAL_PUBLISH_BEFORE_START);
 		
+		syncOnStartup = new Button(composite, SWT.CHECK);
+		syncOnStartup.setText(Messages.prefSyncStartup);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		data.horizontalSpan = 3;
+		syncOnStartup.setLayoutData(data);
+		syncOnStartup.setSelection(preferences.isSyncOnStartup());
+		whs.setHelp(syncOnStartup, ContextIds.PREF_GENERAL_SYNC_STARTUP);
+		
 		autoPublishLocal = new Button(composite, SWT.CHECK);
 		autoPublishLocal.setText(Messages.prefAutoPublishLocal);
 		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 2;
+		data.horizontalSpan = 3;
 		autoPublishLocal.setLayoutData(data);
 		autoPublishLocal.setSelection(preferences.getAutoPublishLocal());
-		//WorkbenchHelp.setHelp(savePrompt, ContextIds.);
+		whs.setHelp(autoPublishLocal, ContextIds.PREF_GENERAL_AUTOPUBLISH_LOCAL);
+		
+		final Label autoPublishLocalTimeLabel = new Label(composite, SWT.NONE);
+		autoPublishLocalTimeLabel.setText(Messages.prefAutoPublishLocalTime);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		data.horizontalSpan = 2;
+		data.horizontalIndent = 20;
+		autoPublishLocalTimeLabel.setLayoutData(data);
+		autoPublishLocalTimeLabel.setEnabled(autoPublishLocal.getSelection());
 		
 		autoPublishLocalTime = new Spinner(composite, SWT.BORDER);
 		autoPublishLocalTime.setMinimum(0);
 		autoPublishLocalTime.setMaximum(120);
 		autoPublishLocalTime.setSelection(preferences.getAutoPublishLocalTime());
 		autoPublishLocalTime.setEnabled(autoPublishLocal.getSelection());
-		data = new GridData(GridData.HORIZONTAL_ALIGN_END);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
 		data.widthHint = 60;
 		autoPublishLocalTime.setLayoutData(data);
-		
-		Label label = new Label(composite, SWT.NONE);
-		label.setText(Messages.prefAutoPublishSeconds);
-		data = new GridData(GridData.HORIZONTAL_ALIGN_END);
-		label.setLayoutData(data);
+		whs.setHelp(autoPublishLocalTime, ContextIds.PREF_GENERAL_AUTOPUBLISH_LOCAL);
 		
 		autoPublishLocal.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
+				autoPublishLocalTimeLabel.setEnabled(autoPublishLocal.getSelection());
 				autoPublishLocalTime.setEnabled(autoPublishLocal.getSelection());
 			}
 		});
@@ -132,35 +153,40 @@
 		autoPublishRemote = new Button(composite, SWT.CHECK);
 		autoPublishRemote.setText(Messages.prefAutoPublishRemote);
 		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.horizontalSpan = 2;
+		data.horizontalSpan = 3;
 		autoPublishRemote.setLayoutData(data);
 		autoPublishRemote.setSelection(preferences.getAutoPublishRemote());
-		//WorkbenchHelp.setHelp(autoPublishRemote, ContextIds.);
+		whs.setHelp(autoPublishRemote, ContextIds.PREF_GENERAL_AUTOPUBLISH_REMOTE);
+		
+		final Label autoPublishRemoteTimeLabel = new Label(composite, SWT.NONE);
+		autoPublishRemoteTimeLabel.setText(Messages.prefAutoPublishRemoteTime);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		data.horizontalSpan = 2;
+		data.horizontalIndent = 20;
+		autoPublishRemoteTimeLabel.setLayoutData(data);
+		autoPublishRemoteTimeLabel.setEnabled(autoPublishRemote.getSelection());
 		
 		autoPublishRemoteTime = new Spinner(composite, SWT.BORDER);
-		autoPublishLocalTime.setMinimum(0);
-		autoPublishLocalTime.setMaximum(120);
+		autoPublishRemoteTime.setMinimum(0);
+		autoPublishRemoteTime.setMaximum(120);
 		autoPublishRemoteTime.setSelection(preferences.getAutoPublishRemoteTime());
 		autoPublishRemoteTime.setEnabled(autoPublishRemote.getSelection());
-		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
 		data.widthHint = 60;
 		autoPublishRemoteTime.setLayoutData(data);
+		whs.setHelp(autoPublishRemoteTime, ContextIds.PREF_GENERAL_AUTOPUBLISH_REMOTE);
 		
 		autoPublishRemote.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
+				autoPublishRemoteTimeLabel.setEnabled(autoPublishRemote.getSelection());
 				autoPublishRemoteTime.setEnabled(autoPublishRemote.getSelection());
 			}
 		});
 		
-		label = new Label(composite, SWT.NONE);
-		label.setText(Messages.prefAutoPublishSeconds);
-		data = new GridData(GridData.HORIZONTAL_ALIGN_END);
-		label.setLayoutData(data);
-		
 		autoRestart = new Button(composite, SWT.CHECK);
 		autoRestart.setText(Messages.prefAutoRestart);
 		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.horizontalSpan = 4;
+		data.horizontalSpan = 3;
 		autoRestart.setLayoutData(data);
 		autoRestart.setSelection(preferences.isAutoRestarting());
 		whs.setHelp(autoRestart, ContextIds.PREF_GENERAL_AUTO_RESTART);
@@ -168,26 +194,15 @@
 		promptIrreversible = new Button(composite, SWT.CHECK);
 		promptIrreversible.setText(Messages.prefPromptIrreversible);
 		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.horizontalSpan = 4;
+		data.horizontalSpan = 3;
 		promptIrreversible.setLayoutData(data);
 		promptIrreversible.setSelection(uiPreferences.getPromptBeforeIrreversibleChange());
 		whs.setHelp(promptIrreversible, ContextIds.PREF_GENERAL_PROMPT_IRREVERSIBLE);
 		
-		showOnActivity = new Button(composite, SWT.CHECK);
-		showOnActivity.setText(Messages.prefShowOnActivity);
-		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.horizontalSpan = 4;
-		showOnActivity.setLayoutData(data);
-		showOnActivity.setSelection(uiPreferences.getShowOnActivity());
-		whs.setHelp(showOnActivity, ContextIds.PREF_GENERAL_SHOW_ON_ACTIVITY);
-		
-		createInWorkspace = new Button(composite, SWT.CHECK);
-		createInWorkspace.setText(Messages.prefCreateInWorkspace);
-		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.horizontalSpan = 4;
-		createInWorkspace.setLayoutData(data);
-		createInWorkspace.setSelection(preferences.isCreateResourcesInWorkspace());
-		whs.setHelp(createInWorkspace, ContextIds.PREF_GENERAL_CREATE_IN_WORKSPACE);
+		Label label = new Label(composite, SWT.NONE);
+		data = new GridData();
+		data.horizontalSpan = 3;
+		label.setLayoutData(data);
 		
 		// save editors group
 		Group saveEditorGroup = new Group(composite, SWT.NONE);
@@ -197,7 +212,7 @@
 		layout.numColumns = 3;
 		saveEditorGroup.setLayout(layout);
 		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 4;
+		data.horizontalSpan = 3;
 		saveEditorGroup.setLayoutData(data);
 		
 		saveNever = new Button(saveEditorGroup, SWT.RADIO);
@@ -228,6 +243,11 @@
 		whs.setHelp(saveAuto, ContextIds.PREF_GENERAL_SAVE_EDITORS);
 		
 		label = new Label(composite, SWT.NONE);
+		data = new GridData();
+		data.horizontalSpan = 3;
+		label.setLayoutData(data);
+		
+		label = new Label(composite, SWT.NONE);
 		label.setText(Messages.prefMachineSpeed);
 		
 		machineSpeedCombo = new Combo(composite, SWT.READ_ONLY);
@@ -239,11 +259,11 @@
 			Messages.prefMachineSpeedVeryFast
 		};
 		machineSpeedCombo.setItems(items);
-		machineSpeedCombo.select(preferences.getMachineSpeed() / 2);
-		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		data.horizontalSpan = 3;
+		machineSpeedCombo.select((preferences.getMachineSpeed() - 1) / 2);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+		data.horizontalSpan = 2;
 		machineSpeedCombo.setLayoutData(data);
-		//whs.setHelp(machineSpeedSlider, ContextIds.PREF_GENERAL_PROMPT_IRREVERSIBLE);
+		whs.setHelp(machineSpeedCombo, ContextIds.PREF_GENERAL_TIMEOUT_DELAY);
 		
 		setSaveEditorStatus(uiPreferences.getSaveEditors());
 		
@@ -276,17 +296,17 @@
 		publishBeforeStart.setSelection(preferences.isDefaultAutoPublishing());
 		promptIrreversible.setSelection(uiPreferences.getDefaultPromptBeforeIrreversibleChange());
 		showOnActivity.setSelection(uiPreferences.getDefaultShowOnActivity());
-		createInWorkspace.setSelection(preferences.isDefaultCreateResourcesInWorkspace());
 		
+		syncOnStartup.setSelection(preferences.getDefaultSyncOnStartup());
 		autoPublishLocal.setSelection(preferences.getDefaultAutoPublishLocal());
 		autoPublishLocalTime.setSelection(preferences.getDefaultAutoPublishLocalTime());
 		autoPublishRemote.setSelection(preferences.getDefaultAutoPublishRemote());
 		autoPublishRemoteTime.setSelection(preferences.getDefaultAutoPublishRemoteTime());
 		
-		machineSpeedCombo.select(preferences.getDefaultMachineSpeed() / 2);
+		machineSpeedCombo.select((preferences.getDefaultMachineSpeed() - 1) / 2);
 		
 		setSaveEditorStatus(uiPreferences.getDefaultSaveEditors());
-	
+		
 		super.performDefaults();
 	}
 
@@ -296,17 +316,17 @@
 	public boolean performOk() {
 		preferences.setAutoPublishing(publishBeforeStart.getSelection());
 		preferences.setAutoRestarting(autoRestart.getSelection());
+		preferences.setSyncOnStartup(syncOnStartup.getSelection());
 		uiPreferences.setSaveEditors(saveEditors);
 		uiPreferences.setPromptBeforeIrreversibleChange(promptIrreversible.getSelection());
 		uiPreferences.setShowOnActivity(showOnActivity.getSelection());
-		preferences.setCreateResourcesInWorkspace(createInWorkspace.getSelection());
 		
 		preferences.setAutoPublishLocal(autoPublishLocal.getSelection());
 		preferences.setAutoPublishLocalTime(autoPublishLocalTime.getSelection());
 		preferences.setAutoPublishRemote(autoPublishRemote.getSelection());
 		preferences.setAutoPublishRemoteTime(autoPublishRemoteTime.getSelection());
 		
-		preferences.setMachineSpeed(machineSpeedCombo.getSelectionIndex() * 2);
+		preferences.setMachineSpeed(machineSpeedCombo.getSelectionIndex() * 2 + 1);
 	
 		// auto restart any servers that are ready for restart
 		if (autoRestart.getSelection())
@@ -331,7 +351,7 @@
 					if (server.canRestart(mode).isOK())
 						try {
 							Trace.trace(Trace.FINEST, "Attempting to auto restart " + server.getName());
-							server.restart(mode);
+							server.restart(mode, (IProgressMonitor)null);
 						} catch (Exception e) {
 							Trace.trace(Trace.SEVERE, "Error restarting: " + server, e);
 						}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyTester.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyTester.java
index e5e09d3..3a4b6e0 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyTester.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyTester.java
@@ -11,6 +11,9 @@
 package org.eclipse.wst.server.ui.internal;
 
 import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.internal.ServerPlugin;
 /**
  * 
@@ -20,6 +23,69 @@
 	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
 	 */
 	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
-		return ServerPlugin.hasModuleArtifact(receiver);
+		if (expectedValue instanceof String)
+			return checkProperty(receiver, property, (String) expectedValue);
+		return checkProperty(receiver, property, null);
+	}
+
+	protected static boolean checkProperty(Object target, String property, String value) {
+		if ("isRunnable".equals(property)) {
+			boolean b = ServerPlugin.hasModuleArtifact(target);
+			if (b)
+				return true;
+			
+			/*if (!(receiver instanceof IEditorPart))
+				return false;
+			
+			//	 check if the editor input itself can be run. Otherwise, check if
+			// the editor has a file input that can be run
+			IEditorPart editor = (IEditorPart) receiver;
+			IEditorInput input = editor.getEditorInput();
+			
+			b = ServerPlugin.hasModuleArtifact(input);
+			if (b)
+				return true;*/
+	
+			if (target instanceof IFileEditorInput) {
+				IFileEditorInput fei = (IFileEditorInput) target;
+				IFile file = fei.getFile();
+				b = ServerPlugin.hasModuleArtifact(file);
+				if (b)
+					return true;
+			}
+			return false;
+		} else if ("serverType".equals(property)) {
+			if (!(target instanceof IServer))
+				return false;
+			
+			IServer server = (IServer) target;
+			
+			String[] typeIds = ServerPlugin.tokenize(value, ",");
+			return supportsServerType(server.getServerType().getId(), typeIds);
+		}
+		return false;
+	}
+	
+	/**
+	 * Returns true if the given server type (given by the id) can use this action.
+	 *
+	 * @return boolean
+	 */
+	protected static boolean supportsServerType(String id, String[] typeIds) {
+		if (id == null || id.length() == 0)
+			return false;
+
+		if (typeIds == null)
+			return false;
+		
+		int size = typeIds.length;
+		for (int i = 0; i < size; i++) {
+			if (typeIds[i].endsWith("*")) {
+				if (id.length() >= typeIds[i].length() && id.startsWith(typeIds[i].substring(0, typeIds[i].length() - 1)))
+					return true;
+			} else if (id.equals(typeIds[i]))
+				return true;
+		}
+		return false;
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerTree.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerTree.java
deleted file mode 100644
index 0154199..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerTree.java
+++ /dev/null
@@ -1,371 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.ui.internal.actions.NewServerWizardAction;
-import org.eclipse.wst.server.ui.internal.view.servers.*;
-import org.eclipse.wst.server.ui.internal.view.tree.ServerElementAdapter;
-import org.eclipse.wst.server.ui.internal.view.tree.ServerTreeAction;
-import org.eclipse.swt.widgets.Shell;
-/**
- * 
- */
-public class ServerTree {
-	/**
-	 * Constants for actions
-	 */
-	public static final byte ACTION_OPEN = 0;
-	public static final byte ACTION_DELETE = 1;
-	public static final byte ACTION_BOOKMARK = 2;
-
-	private ServerTree() {
-		// do nothing
-	}
-	
-	public static void fillContextMenu(Shell shell, ISelection selection, IMenuManager menu) {
-		MenuManager newMenu = new MenuManager(Messages.actionNew);
-		fillNewContextMenu(shell, selection, newMenu);
-		menu.add(newMenu);
-		fillOtherContextMenu(shell, selection, menu);
-	}
-	
-	public static void fillNewContextMenu(Shell shell, ISelection selection, IMenuManager menu) {
-		IAction newServerAction = new NewServerWizardAction();
-		newServerAction.setText(Messages.actionNewServer);
-		menu.add(newServerAction);
-	}
-
-	public static void fillOtherContextMenu(Shell shell, ISelection selection, IMenuManager menu) {
-		if (selection == null)
-			return;
-
-		if (selection.isEmpty() || !(selection instanceof IStructuredSelection))
-			return;
-
-		//IStructuredSelection sel = (IStructuredSelection) selection;
-		
-		//boolean singleSelect = (sel.size() == 1);
-		//Object first = sel.getFirstElement();
-
-		// open menu
-		/*if (singleSelect && first instanceof ServerLifecycleAdapter) {
-			ServerLifecycleAdapter adapter = (ServerLifecycleAdapter) first;
-			IServerResource resource = adapter.getServerResource();
-			menu.add(new OpenAction(resource));
-			menu.add(new Separator());
-		}
-		
-		// delete menu
-		List list = new ArrayList();
-		boolean canDelete = true;
-		Iterator iterator2 = sel.iterator();
-		while (iterator2.hasNext()) {
-			Object obj = iterator2.next();
-			
-			if (obj instanceof ServerLifecycleAdapter)
-				list.add(((ServerLifecycleAdapter) obj).getServerResource());
-			else
-				canDelete = false;
-		}
-		if (canDelete) {
-			IServerResource[] res = new IServerResource[list.size()];
-			list.toArray(res);
-			menu.add(new DeleteAction(shell, res));
-		}
-
-		if (singleSelect && first instanceof IServerElementTag)
-			menu.add(new Separator());
-
-		if (singleSelect && first instanceof ServerLifecycleAdapter) {
-			ServerLifecycleAdapter adapter = (ServerLifecycleAdapter) first;
-			IServerResource resource = adapter.getServerResource();
-
-			IServer server = null;
-			if (resource instanceof IServer)
-				server = (IServer) resource;
-
-			// switch configuration menu
-			if (server != null) {
-				addServerActions(shell, menu, server);
-
-				MenuManager menuManager = new MenuManager(Messages.actionSwitchConfiguration"));
-				menuManager.add(new SwitchConfigurationAction(shell, Messages.viewNoConfiguration"), server, null));
-
-				List configs = ServerUtil.getSupportedServerConfigurations(server);
-				Iterator iterator = configs.iterator();
-				while (iterator.hasNext()) {
-					IServerConfiguration config = (IServerConfiguration) iterator.next();
-					menuManager.add(new SwitchConfigurationAction(shell, ServerUtil.getName(config), server, config));
-				}
-
-				menu.add(menuManager);
-			}
-			
-			if (server != null && server instanceof IModuleRestartable) {
-				menu.add(new Separator());
-
-				MenuManager restartProjectMenu = new MenuManager(Messages.actionRestartProject"));
-
-				IModuleRestartable restartable = (IModuleRestartable) server;
-
-				IServerConfiguration configuration = ServerUtil.getServerConfiguration(server);
-				if (configuration != null) {
-					Iterator iterator = ServerUtil.getAllContainedModules(configuration).iterator();
-					while (iterator.hasNext()) {
-						IModule module = (IModule) iterator.next();
-						Action action = new RestartModuleAction(restartable, module);
-						restartProjectMenu.add(action);
-					}
-				}
-				if (restartProjectMenu.isEmpty())
-					menu.add(new DisabledMenuManager(Messages.actionRestartProject")));
-				else
-					menu.add(restartProjectMenu);
-			}
-		}
-		if (singleSelect && first instanceof ModuleResourceAdapter) {
-			ModuleResourceAdapter adapter = (ModuleResourceAdapter) first;
-			IServerConfiguration configuration = adapter.getServerConfiguration();
-			IModule module = adapter.getModule();
-			
-			IModule[] modules = configuration.getModules();
-			boolean found = false;
-			if (modules != null && module != null) {
-				int size = modules.length;
-				for (int i = 0; i < size; i++) {
-					if (module.equals(modules[i]) && configuration.canRemoveModule(module))
-						found = true;
-				}
-			}
-	
-			if (found)
-				menu.add(new ModifyConfigurationModulesAction(shell, configuration, module, false));
-		}
-		
-		if (singleSelect && first instanceof ServerLifecycleAdapter) {
-			ServerLifecycleAdapter adapter = (ServerLifecycleAdapter) first;
-			IServerResource resource = adapter.getServerResource();
-
-			IServer server = null;
-			IServerConfiguration configuration = null;
-			if (resource instanceof IServerConfiguration)
-				configuration = (IServerConfiguration) resource;
-			else if (resource instanceof IServer) {
-				server = (IServer) resource;
-				configuration = ServerUtil.getServerConfiguration(server);
-			}
-			
-			ServerAction.addServerMenuItems(shell, menu, server, configuration);
-		}*/
-	}
-
-	protected static void addServerActions(Shell shell, IMenuManager menu, IServer server) {
-		final ISelection selection = new StructuredSelection(server);
-		ISelectionProvider provider = new ISelectionProvider() {
-			public void addSelectionChangedListener(ISelectionChangedListener listener) {
-				// do nothing
-			}
-			public ISelection getSelection() {
-				return selection;
-			}
-			public void removeSelectionChangedListener(ISelectionChangedListener listener) {
-				// do nothing
-			}
-			public void setSelection(ISelection sel) {
-				// do nothing
-			}
-		};
-	
-		// create the debug action
-		Action debugAction = new StartAction(shell, provider, "debug", ILaunchManager.DEBUG_MODE);
-		debugAction.setToolTipText(Messages.actionDebugToolTip);
-		debugAction.setText(Messages.actionDebug);
-		debugAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_DEBUG));
-		debugAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_DEBUG));
-		debugAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_DEBUG));
-		menu.add(debugAction);
-	
-		// create the start action
-		Action runAction = new StartAction(shell, provider, "start", ILaunchManager.RUN_MODE);
-		runAction.setToolTipText(Messages.actionStartToolTip);
-		runAction.setText(Messages.actionStart);
-		runAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START));
-		runAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START));
-		runAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START));
-		menu.add(runAction);
-		
-		// create the profile action
-		Action profileAction = new StartAction(shell, provider, "profile", ILaunchManager.PROFILE_MODE);
-		profileAction.setToolTipText(Messages.actionProfileToolTip);
-		profileAction.setText(Messages.actionProfile);
-		profileAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_PROFILE));
-		profileAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_PROFILE));
-		profileAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_PROFILE));
-		menu.add(profileAction);
-	
-		// create the restart action
-		MenuManager menuManager = new MenuManager(Messages.actionRestart);
-		
-		Action restartAction = new RestartAction(shell, provider, "restart", ILaunchManager.RUN_MODE);
-		restartAction.setToolTipText(Messages.actionRestartToolTip);
-		restartAction.setText(Messages.actionRestart);
-		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_RESTART));
-		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_RESTART));
-		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_RESTART));
-		menuManager.add(restartAction);
-		//menu.add(restartAction);
-		menu.add(menuManager);
-
-		// create the stop action
-		/*Action stopAction = new StopAction(shell, provider, "stop", IServerFactory.SERVER_STATE_SET_MANAGED);
-		stopAction.setToolTipText(Messages.actionStopToolTip"));
-		stopAction.setText(Messages.actionStop"));
-		stopAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_STOP));
-		stopAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_STOP));
-		stopAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_STOP));
-		menu.add(stopAction);
-
-		// create the disconnect action
-		Action disconnectAction = new StopAction(shell, provider, "disconnect", IServerFactory.SERVER_STATE_SET_ATTACHED);
-		disconnectAction.setToolTipText(Messages.actionStopToolTip2"));
-		disconnectAction.setText(Messages.actionStop2"));
-		disconnectAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_DISCONNECT));
-		disconnectAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_DISCONNECT));
-		disconnectAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_DISCONNECT));
-		menu.add(disconnectAction);*/
-
-		// create the publish action
-		Action publishAction = new PublishAction(shell, provider, "publish");
-		publishAction.setToolTipText(Messages.actionPublishToolTip);
-		publishAction.setText(Messages.actionPublish);
-		publishAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_PUBLISH));
-		publishAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_PUBLISH));
-		publishAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_PUBLISH));
-		menu.add(publishAction);
-	}
-
-	public static boolean isActionEnabled(ISelection selection, byte action) {
-		if (selection == null || action < 0)
-			return false;
-
-		if (selection.isEmpty() || !(selection instanceof IStructuredSelection))
-			return false;
-
-		IStructuredSelection sel = (IStructuredSelection) selection;
-		
-		if (action == ACTION_OPEN) {
-			if (sel.size() != 1)
-				return false;
-
-			Object obj = sel.getFirstElement();
-
-			return (obj instanceof ServerElementAdapter);
-		} else if (action == ACTION_DELETE) {
-			if (sel.size() == 0)
-				return false;
-			
-			Iterator iterator = sel.iterator();
-			while (iterator.hasNext()) {
-				Object obj = iterator.next();
-				
-				if (!(obj instanceof ServerElementAdapter) && !(obj instanceof IServer))
-					return false;
-			}
-			return true;
-		}
-
-		return false;
-	}
-
-	public static boolean performAction(Shell shell, ISelection selection, byte action) {
-		//if (!isActionEnabled(selection, action))
-		//	return false;
-
-		if (selection == null || action < 0)
-			return false;
-
-		if (selection.isEmpty() || !(selection instanceof IStructuredSelection))
-			return false;
-
-		IStructuredSelection sel = (IStructuredSelection) selection;
-
-		if (action == ACTION_OPEN) {
-			if (sel.size() != 1)
-				return false;
-
-			Object obj = sel.getFirstElement();
-			if (obj instanceof IServer) {
-				Action open = new OpenAction((IServer) obj);
-				open.run();
-				return true;
-			} else if (obj instanceof ServerElementAdapter) {
-				ServerElementAdapter adapter = (ServerElementAdapter) obj;
-				Object element = adapter.getObject();
-				if (element instanceof IServer) {
-					Action open = new OpenAction((IServer) element);
-					open.run();
-					return true;
-				}
-				return false;
-			}
-			return false;
-		} else if (action == ACTION_DELETE) {
-			if (sel.size() == 0)
-				return false;
-			
-			List list = new ArrayList();
-			Iterator iterator = sel.iterator();
-			while (iterator.hasNext()) {
-				Object obj = iterator.next();
-				
-				if (obj instanceof ServerElementAdapter)
-					list.add(((ServerElementAdapter) obj).getObject());
-				else if (obj instanceof IServer)
-					list.add(obj);
-			}
-			
-			IServer[] servers = new IServer[list.size()];
-			list.toArray(servers);
-			
-			Action delete = new DeleteAction(shell, servers);
-			delete.run();
-			return true;
-		}
-
-		return false;
-	}
-	
-	/**
-	 * Returns an action of the specified type, which can be used for global.
-	 * 
-	 * @param shell a shell
-	 * @param provider a selection provider
-	 * @param action an action
-	 * @return an action
-	 */
-	public static IAction getAction(Shell shell, ISelectionProvider provider, byte action) {
-		if (action == ACTION_DELETE) {
-			return new ServerTreeAction(shell, provider, Messages.actionDelete, ServerTree.ACTION_DELETE);
-		}
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerTreeContentProvider.java
deleted file mode 100644
index c1d42ff..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerTreeContentProvider.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal;
-
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.ui.internal.view.tree.ModuleResourceAdapter;
-import org.eclipse.wst.server.ui.internal.view.tree.ServerElementAdapter;
-import org.eclipse.wst.server.ui.internal.view.tree.TextResourceAdapter;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-/**
- * Provides tree contents for objects that have the IWorkbenchAdapter
- * adapter registered. 
- */
-public class ServerTreeContentProvider implements ITreeContentProvider {
-	protected TreeViewer viewer;
-	
-	// listeners
-	protected LifecycleListener listener;
-	//protected IServerListener serverListener;
-	protected IResourceChangeListener resourceChangeListener;
-
-	class LifecycleListener implements IServerLifecycleListener {
-		public void serverAdded(final IServer server) {
-			//server.addServerListener(serverListener);
-			Display.getDefault().syncExec(new Runnable() {
-				public void run() {
-					handleServerResourceAdded(server);
-				}
-			});
-		}
-		public void serverRemoved(final IServer server) {
-			//server.removeServerListener(serverListener);
-			Display.getDefault().syncExec(new Runnable() {
-				public void run() {
-					handleServerResourceRemoved(server);
-				}
-			});
-		}
-		public void serverChanged(final IServer server) {
-			Display.getDefault().syncExec(new Runnable() {
-				public void run() {
-					handleServerResourceChanged(server);
-				}
-			});
-		}
-	}
-
-	/**
-	 * 
-	 */
-	public ServerTreeContentProvider() {
-		// add listeners
-		addServerResourceListener();
-		addServerListener();
-	}
-
-	public Object[] getServerTreeRoots(Object parent) {
-		/*looseConfig = getLooseConfigurations();
-		if (looseConfig.length == 0)
-			return new Object[] { new TextResourceAdapter(parent, TextResourceAdapter.STYLE_SERVERS) };
-		else*/
-			return new Object[] { new TextResourceAdapter(parent, TextResourceAdapter.STYLE_SERVERS) };
-				//new TextResourceAdapter(parent, TextResourceAdapter.STYLE_LOOSE_CONFIGURATIONS) };
-	}
-
-	/* (non-Javadoc)
-	 * Method declared on IContentProvider.
-	 */
-	public void dispose() {
-		// remove listeners
-		/*IServer[] servers = ServerCore.getServers();
-		if (servers != null) {
-			int size = servers.length;
-			for (int i = 0; i < size; i++)
-				servers[i].removeServerListener(serverListener);
-		}*/
-
-		ServerCore.removeServerLifecycleListener(listener);
-	}
-
-	/**
-	 * Returns the implementation of IWorkbenchAdapter for the given
-	 * object.  Returns null if the adapter is not defined or the
-	 * object is not adaptable.
-	 */
-	protected IWorkbenchAdapter getAdapter(Object o) {
-		if (!(o instanceof IAdaptable))
-			return null;
-
-		return (IWorkbenchAdapter)((IAdaptable)o).getAdapter(IWorkbenchAdapter.class);
-	}
-
-	/* (non-Javadoc)
-	 * Method declared on ITreeContentProvider.
-	 */
-	public Object[] getChildren(Object element) {
-		if (element instanceof TextResourceAdapter) {
-			TextResourceAdapter adapter = (TextResourceAdapter) element;
-			Object[] children = adapter.getChildren(null);
-			if (children != null) {
-				int size = children.length;
-				for (int i = 0; i < size; i++) {
-					if (children[i] instanceof ServerElementAdapter) {
-						ServerElementAdapter adapter2 = (ServerElementAdapter) children[i];
-						adapter2.setFlags((byte) 1);
-					}
-				}
-			}
-			return children;
-		} else if (element instanceof ModuleResourceAdapter) {
-			ModuleResourceAdapter adapter = (ModuleResourceAdapter) element;
-			return adapter.getChildren(null);
-		} else if (element instanceof ServerElementAdapter) {
-			ServerElementAdapter adapter = (ServerElementAdapter) element;
-			return adapter.getChildren();
-		}
-		
-		IWorkbenchAdapter adapter = getAdapter(element);
-		if (adapter != null)
-		    return adapter.getChildren(element);
-
-		return new Object[0];
-	}
-	
-	/* (non-Javadoc)
-	 * Method declared on IStructuredContentProvider.
-	 */
-	public Object[] getElements(Object element) {
-		return getChildren(element);
-	}
-	
-	/* (non-Javadoc)
-	 * Method declared on ITreeContentProvider.
-	 */
-	public Object getParent(Object element) {
-		IWorkbenchAdapter adapter = getAdapter(element);
-		if (adapter != null)
-		    return adapter.getParent(element);
-
-		return null;
-	}
-	
-	/* (non-Javadoc)
-	 * Method declared on ITreeContentProvider.
-	 */
-	public boolean hasChildren(Object element) {
-		return getChildren(element).length > 0;
-	}
-	
-	/* (non-Javadoc)
-	 * Method declared on IContentProvider.
-	 */
-	public void inputChanged(Viewer newViewer, Object oldInput, Object newInput) {
-		if (newViewer instanceof TreeViewer)
-			this.viewer = (TreeViewer) newViewer;
-	}
-	
-	/**
-	 * Add listeners for resource changes.
-	 */
-	private void addServerListener() {
-		// add a listener for configuration child module changes
-		/*serverListener = new IServerListener() {
-			public void modulesChanged(final IServer server) {
-				Display.getDefault().syncExec(new Runnable() {
-					public void run() {
-						handleServerModulesChanged(server);
-					}
-				});
-			}
-		};
-
-		IServer[] servers = ServerCore.getServers();
-		if (servers != null) {
-			int size = servers.length;
-			for (int i = 0; i < size; i++)
-				servers[i].addServerListener(serverListener);
-		}*/
-	}
-	
-	/**
-	 * Add listeners for server resource changes.
-	 */
-	private void addServerResourceListener() {
-		// add a listener for resources being added or removed
-		listener = new LifecycleListener();
-		ServerCore.addServerLifecycleListener(listener);
-	}
-
-	/**
-	 * Updates a server in the tree.
-	 *
-	 * @param server2 a server
-	 */
-	protected void handleServerModulesChanged(IServer server2) {
-		if (viewer != null) {
-			viewer.refresh(new ServerElementAdapter(null, server2));
-			IServer[] servers = ServerCore.getServers();
-			if (servers != null) {
-				int size = servers.length;
-				for (int i = 0; i < size; i++) {
-					if (server2.equals(servers[i])) {
-						viewer.refresh(new ServerElementAdapter(null, servers[i]));
-					}
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Handles the add of a new server resource.
-	 *
-	 * @param element
-	 */
-	protected void handleServerResourceAdded(Object element) {
-		//Trace.trace("add: " + element);
-		if (viewer == null)
-			return;
-
-		ServerElementAdapter adapter = new ServerElementAdapter(null, element);
-		adapter.setFlags((byte) 1);
-		if (element instanceof IServer) {
-			viewer.add(new TextResourceAdapter(null, TextResourceAdapter.STYLE_SERVERS), adapter);
-		}
-	}
-
-	/**
-	 * Updates an element in the tree.
-	 *
-	 * @param element
-	 */
-	protected void handleServerResourceChanged(Object element) {
-		//Trace.trace("change: " + element);
-		if (viewer == null)
-			return;
-
-		if (element instanceof IServer) {
-			ServerElementAdapter adapter = new ServerElementAdapter(null, element);
-			adapter.setFlags((byte) 1);
-			viewer.refresh(adapter);
-		}
-	}
-
-	/**
-	 * Handles the removal of a server resource.
-	 *
-	 * @param element
-	 */
-	protected void handleServerResourceRemoved(Object element) {
-		//Trace.trace("remove: " + element);
-		if (viewer == null)
-			return;
-		
-		TextResourceAdapter.deleted = element;
-		
-		if (element instanceof IServer) {
-			//IServer server = (IServer) element;
-			TextResourceAdapter adapter = new TextResourceAdapter(null, TextResourceAdapter.STYLE_SERVERS);
-			viewer.refresh(adapter);
-			/*IServerConfiguration configuration = Reference.getServerConfigurationByRef(server.getConfigurationRef());
-			
-			boolean used = false;
-			Iterator iterator = ServerCore.getResourceManager().getServers().iterator();
-			while (iterator.hasNext()) {
-				IServer server2 = (IServer) iterator.next();
-				if (!server.equals(server2)) {
-					IServerConfiguration cfg = Reference.getServerConfigurationByRef(server2.getConfigurationRef());
-					if (cfg != null && cfg.equals(configuration)) {
-						used = true;
-					}
-				}
-			}
-			if (!used) {
-				ServerLifecycleAdapter adapter2 = new ServerLifecycleAdapter(null, configuration);
-				adapter2.setFlags((byte) 1);
-				viewer.add(new TextResourceAdapter(null, TextResourceAdapter.STYLE_LOOSE_CONFIGURATIONS), adapter2);
-			}*/
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
index bd7029a..8abfb27 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
@@ -24,19 +24,17 @@
 import org.eclipse.jface.viewers.StructuredSelection;
 
 import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.IPublishListener;
-import org.eclipse.wst.server.core.internal.PublishAdapter;
-import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.core.internal.ServerType;
+import org.eclipse.wst.server.core.internal.*;
+import org.eclipse.wst.server.core.util.PublishAdapter;
 import org.eclipse.wst.server.ui.ServerUIUtil;
 import org.eclipse.wst.server.ui.internal.actions.RunOnServerActionDelegate;
 import org.eclipse.wst.server.ui.internal.editor.IServerEditorInput;
+import org.eclipse.wst.server.ui.internal.editor.ServerEditorCore;
 import org.eclipse.wst.server.ui.internal.editor.ServerEditorInput;
-import org.eclipse.wst.server.ui.internal.task.FinishWizardFragment;
-import org.eclipse.wst.server.ui.internal.task.InputWizardFragment;
-import org.eclipse.wst.server.ui.internal.task.SaveRuntimeTask;
+import org.eclipse.wst.server.ui.internal.viewers.InitialSelectionProvider;
 import org.eclipse.wst.server.ui.internal.wizard.ClosableWizardDialog;
 import org.eclipse.wst.server.ui.internal.wizard.TaskWizard;
+import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.NewRuntimeWizardFragment;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 
@@ -54,22 +52,64 @@
  */
 public class ServerUIPlugin extends AbstractUIPlugin {
 	protected static final String VIEW_ID = "org.eclipse.wst.server.ui.ServersView";
-	
+
 	// server UI plugin id
 	public static final String PLUGIN_ID = "org.eclipse.wst.server.ui";
+	
+	protected static final String EXTENSION_SERVER_IMAGES = "serverImages";
+	private static final String EXTENSION_WIZARD_FRAGMENTS = "wizardFragments";
+	public static final String EXTENSION_EDITOR_PAGES = "editorPages";
+	public static final String EXTENSION_EDITOR_PAGE_SECTIONS = "editorPageSections";
 
 	//public static final byte START = 0;
 	public static final byte STOP = 1;
 	//public static final byte RESTART = 2;
-	
+
 	// singleton instance of this class
 	private static ServerUIPlugin singleton;
 
 	protected Map imageDescriptors = new HashMap();
-	
+
 	// cached copy of all runtime wizards
 	private static Map wizardFragments;
-	
+
+	// cached initial selection provider
+	private static InitialSelectionProvider selectionProvider;
+
+	private static IRegistryChangeListener registryListener;
+
+	private static class RegistryChangeListener implements IRegistryChangeListener {
+		public void registryChanged(IRegistryChangeEvent event) {
+			IExtensionDelta[] deltas = event.getExtensionDeltas(ServerPlugin.PLUGIN_ID, EXTENSION_WIZARD_FRAGMENTS);
+			if (deltas != null) {
+				for (int i = 0; i < deltas.length; i++) {
+					handleWizardFragmentDelta(deltas[i]);
+				}
+			}
+			
+			deltas = event.getExtensionDeltas(ServerPlugin.PLUGIN_ID, EXTENSION_SERVER_IMAGES);
+			if (deltas != null) {
+				for (int i = 0; i < deltas.length; i++) {
+					ImageResource.handleServerImageDelta(deltas[i]);
+				}
+			}
+			
+			deltas = event.getExtensionDeltas(ServerPlugin.PLUGIN_ID, EXTENSION_EDITOR_PAGES);
+			if (deltas != null) {
+				for (int i = 0; i < deltas.length; i++) {
+					ServerEditorCore.handleEditorPageFactoriesDelta(deltas[i]);
+				}
+			}
+			
+			deltas = event.getExtensionDeltas(ServerPlugin.PLUGIN_ID, EXTENSION_EDITOR_PAGE_SECTIONS);
+			if (deltas != null) {
+				for (int i = 0; i < deltas.length; i++) {
+					ServerEditorCore.handleEditorPageSectionFactoriesDelta(deltas[i]);
+				}
+			}
+		}
+	}
+
 	static class WizardFragmentData {
 		String id;
 		IConfigurationElement ce;
@@ -136,20 +176,6 @@
 	}
 
 	/**
-	 * Returns the translated String found with the given key.
-	 *
-	 * @param key java.lang.String
-	 * @return java.lang.String
-	 */
-	public static String getResource2(String key) {
-		try {
-			return Platform.getResourceString(getInstance().getBundle(), key);
-		} catch (Exception e) {
-			return key;
-		}
-	}
-
-	/**
 	 * Convenience method for logging.
 	 *
 	 * @param status org.eclipse.core.runtime.IStatus
@@ -196,6 +222,11 @@
 		Trace.trace(Trace.CONFIG, "-----<----- Server UI plugin stop -----<-----");
 		super.stop(context);
 		
+		if (registryListener != null) {
+			IExtensionRegistry registry = Platform.getExtensionRegistry();
+			registry.removeRegistryChangeListener(registryListener);
+		}
+		
 		ImageResource.dispose();
 		
 		IServer[] servers = ServerCore.getServers();
@@ -228,7 +259,11 @@
 		class TerminateThread extends Thread {
 			public boolean alive = true;
 			public IServerListener listener;
-	
+
+			public TerminateThread() {
+				super("Server Termination Thread");
+			}
+
 			public void run() {
 				while (alive) {
 					ServerType serverType = (ServerType) server.getServerType();
@@ -295,55 +330,6 @@
 		t.start();
 	}
 	
-	//protected static final String MODULE_ARTIFACT_CLASS = "org.eclipse.wst.server.core.IModuleArtifact";
-	
-	/**
-	 * Returns the module artifact for the given object, or null if a module artifact
-	 * can't be found.
-	 *
-	 * @return the module artifact
-	 */
-	/*public static boolean hasModuleArtifact(Object adaptable) {
-		if (adaptable instanceof IModuleArtifact)
-			return true;
-		
-		return Platform.getAdapterManager().hasAdapter(adaptable, MODULE_ARTIFACT_CLASS);
-	}*/
-	
-	/**
-	 * Returns the module artifact for the given object, or null if a module artifact
-	 * can't be found.
-	 *
-	 * @return the module artifact
-	 */
-	/*public static IModuleArtifact getModuleArtifact(Object adaptable) {
-		if (adaptable instanceof IModuleArtifact)
-			return (IModuleArtifact) adaptable;
-		
-		if (Platform.getAdapterManager().hasAdapter(adaptable, MODULE_ARTIFACT_CLASS)) {
-			return (IModuleArtifact) Platform.getAdapterManager().getAdapter(adaptable, MODULE_ARTIFACT_CLASS);
-		}
-		
-		return null;
-	}*/
-
-	/**
-	 * Returns the module artifact for the given object, or null if a module artifact
-	 * can't be found.
-	 *
-	 * @return the module artifact
-	 */
-	/*public static IModuleArtifact loadModuleArtifact(Object obj) {
-		if (obj instanceof IModuleArtifact)
-			return (IModuleArtifact) obj;
-		
-		if (Platform.getAdapterManager().hasAdapter(obj, MODULE_ARTIFACT_CLASS)) {
-			return (IModuleArtifact) Platform.getAdapterManager().loadAdapter(obj, MODULE_ARTIFACT_CLASS);
-		}
-		
-		return null;
-	}*/
-	
 	/**
 	 * Returns the server that came from the given file, or <code>null</code>
 	 * if none. This convenience method searches the list of known
@@ -533,7 +519,11 @@
 		WizardFragment fragment = new WizardFragment() {
 			protected void createChildFragments(List list) {
 				list.add(new NewRuntimeWizardFragment(type, version, runtimeTypeId));
-				list.add(new FinishWizardFragment(new SaveRuntimeTask()));
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+					}
+				});
 			}
 		};
 		TaskWizard wizard = new TaskWizard(Messages.wizNewRuntimeWizardTitle, fragment);
@@ -556,14 +546,20 @@
 		if (runtimeType != null) {
 			try {
 				final IRuntimeWorkingCopy runtime = runtimeType.createRuntime(null, null);
+				TaskModel taskModel = new TaskModel();
+				taskModel.putObject(TaskModel.TASK_RUNTIME, runtime);
+				
 				WizardFragment fragment = new WizardFragment() {
 					protected void createChildFragments(List list) {
-						list.add(new InputWizardFragment(TaskModel.TASK_RUNTIME, runtime));
 						list.add(getWizardFragment(runtimeTypeId));
-						list.add(new FinishWizardFragment(new SaveRuntimeTask()));
+						list.add(new WizardFragment() {
+							public void performFinish(IProgressMonitor monitor) throws CoreException {
+								WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+							}
+						});
 					}
 				};
-				TaskWizard wizard = new TaskWizard(Messages.wizNewRuntimeWizardTitle, fragment);
+				TaskWizard wizard = new TaskWizard(Messages.wizNewRuntimeWizardTitle, fragment, taskModel);
 				wizard.setForcePreviousAndNextButtons(true);
 				ClosableWizardDialog dialog = new ClosableWizardDialog(shell, wizard);
 				return (dialog.open() == IDialogConstants.OK_ID);
@@ -615,11 +611,20 @@
 			return;
 		Trace.trace(Trace.CONFIG, "->- Loading .wizardFragments extension point ->-");
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "wizardFragments");
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, EXTENSION_WIZARD_FRAGMENTS);
 
-		int size = cf.length;
-		wizardFragments = new HashMap(size);
-		for (int i = 0; i < size; i++) {
+		wizardFragments = new HashMap(cf.length);
+		loadWizardFragments(cf);
+		addRegistryListener();
+		
+		Trace.trace(Trace.CONFIG, "-<- Done loading .wizardFragments extension point -<-");
+	}
+
+	/**
+	 * Load wizard fragments.
+	 */
+	private static synchronized void loadWizardFragments(IConfigurationElement[] cf) {
+		for (int i = 0; i < cf.length; i++) {
 			try {
 				String id = cf[i].getAttribute("typeIds");
 				wizardFragments.put(id, new WizardFragmentData(id, cf[i]));
@@ -628,8 +633,47 @@
 				Trace.trace(Trace.SEVERE, "  Could not load wizardFragment: " + cf[i].getAttribute("id"), t);
 			}
 		}
+	}
+
+	/**
+	 * Returns the initial selection provider.
+	 *
+	 * @return an initial selection provider, or <code>null</code> if none could be found
+	 */
+	public static InitialSelectionProvider getInitialSelectionProvider() {
+		if (selectionProvider == null)
+			loadInitialSelectionProvider();
 		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .wizardFragments extension point -<-");
+		return selectionProvider;
+	}
+
+	/**
+	 * Load the initial selection provider.
+	 */
+	private static synchronized void loadInitialSelectionProvider() {
+		if (selectionProvider != null)
+			return;
+		
+		Trace.trace(Trace.CONFIG, "->- Loading .initialSelectionProvider extension point ->-");
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "initialSelectionProvider");
+		
+		if (cf.length == 1) {
+			try {
+				selectionProvider = (InitialSelectionProvider) cf[0].createExecutableExtension("class");
+				Trace.trace(Trace.CONFIG, "  Loaded initialSelectionProvider: " + cf[0].getAttribute("id"));
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "  Could not load initialSelectionProvider: " + cf[0].getAttribute("id"), t);
+			}
+		} else if (cf.length > 1)
+			Trace.trace(Trace.WARNING, "More that one initial selection provider found - ignoring");
+		else
+			Trace.trace(Trace.CONFIG, "No initial selection provider found");
+		
+		if (selectionProvider == null)
+			selectionProvider = new InitialSelectionProvider();
+		
+		Trace.trace(Trace.CONFIG, "-<- Done loading .initialSelectionProvider extension point -<-");
 	}
 
 	protected static WizardFragment getWizardFragment(WizardFragmentData fragment) {
@@ -659,4 +703,38 @@
 
 		delegate.run(action);
 	}
+
+	public static void addRegistryListener() {
+		if (registryListener != null)
+			return;
+		
+		registryListener = new RegistryChangeListener();
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		registry.addRegistryChangeListener(registryListener, ServerPlugin.PLUGIN_ID);
+	}
+
+	protected static void handleWizardFragmentDelta(IExtensionDelta delta) {
+		if (wizardFragments == null) // not loaded yet
+			return;
+		
+		IConfigurationElement[] cf = delta.getExtension().getConfigurationElements();
+		
+		if (delta.getKind() == IExtensionDelta.ADDED) {
+			loadWizardFragments(cf);
+		} else {
+			/*int size = wizardFragments.size();
+			WizardFragment[] wf = new WizardFragment[size];
+			wizardFragments.toArray(wf);
+			int size2 = cf.length;
+			
+			for (int i = 0; i < size; i++) {
+				for (int j = 0; j < size2; j++) {
+					if (wf[i].getId().equals(cf[j].getAttribute("id"))) {
+						wf[i].dispose();
+						wizardFragments.remove(wf[i]);
+					}
+				}
+			}*/
+		}
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java
new file mode 100644
index 0000000..066ada6
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal;
+
+import org.eclipse.core.runtime.IStatus;
+
+import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.internal.IStartup;
+import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.util.PublishAdapter;
+import org.eclipse.wst.server.ui.internal.audio.Audio;
+/**
+ *
+ */
+public class Startup implements IStartup {
+	/**
+	 * @see org.eclipse.wst.server.core.internal.IStartup#startup()
+	 */
+	public void startup() {
+		Trace.trace(Trace.FINEST, "Audio startup");
+
+		final IPublishListener publishListener = new PublishAdapter() {
+			public void publishFinished(IServer server, IStatus status) {
+				Audio.playSound("org.eclipse.wst.server.sound.publishFinished");
+			}
+		};
+		
+		final IServerListener serverListener = new IServerListener() {
+			public void serverChanged(ServerEvent event) {
+				int eventKind = event.getKind();
+				IServer server = event.getServer();
+				if (eventKind == (ServerEvent.SERVER_CHANGE | ServerEvent.STATE_CHANGE)) {
+					int state = server.getServerState();
+					if (state == IServer.STATE_STARTED)
+						Audio.playSound("org.eclipse.wst.server.sound.serverStart");
+					else if (state == IServer.STATE_STOPPED)
+						Audio.playSound("org.eclipse.wst.server.sound.serverStop");
+				}
+			}
+		};
+
+		IServerLifecycleListener listener = new IServerLifecycleListener() {
+			public void serverAdded(IServer server) {
+				server.addServerListener(serverListener);
+				((Server) server).addPublishListener(publishListener);
+			}
+			
+			public void serverChanged(IServer server) {
+				// do nothing
+			}
+
+			public void serverRemoved(IServer server) {
+				server.removeServerListener(serverListener);
+				((Server) server).removePublishListener(publishListener);
+			}
+		};
+		ServerCore.addServerLifecycleListener(listener);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/WebLaunchableClient.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/WebLaunchableClient.java
new file mode 100644
index 0000000..fb694d0
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/WebLaunchableClient.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.ui.browser.IWebBrowser;
+import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.ClientDelegate;
+import org.eclipse.wst.server.core.util.HttpLaunchable;
+/**
+ *
+ */
+public class WebLaunchableClient extends ClientDelegate {
+	/*
+	 * @see ClientDelegate#supports(ILaunchable)
+	 */
+	public boolean supports(IServer server, Object launchable, String launchMode) {
+		return (launchable instanceof HttpLaunchable);
+	}
+
+	/*
+	 * @see ClientDelegate#launch(ILaunchable)
+	 */
+	public IStatus launch(IServer server, Object launchable, String launchMode, ILaunch launch) {
+		HttpLaunchable http = (HttpLaunchable) launchable;
+		try {
+			IWorkbenchBrowserSupport browserSupport = ServerUIPlugin.getInstance().getWorkbench().getBrowserSupport();
+			IWebBrowser browser = browserSupport.createBrowser(IWorkbenchBrowserSupport.LOCATION_BAR | IWorkbenchBrowserSupport.NAVIGATION_BAR, null, null, null);
+			browser.openURL(http.getURL());
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error opening browser", e);
+		}
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DebugOnServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DebugOnServerAction.java
index 20d53f2..a5adc30 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DebugOnServerAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DebugOnServerAction.java
@@ -19,8 +19,6 @@
  * object, and have automatic server creation, launching, and
  * the appropriate client to appear. A new instance of this
  * action must be created for each object that the user selects.
- * 
- * @since 1.0
  */
 public class DebugOnServerAction extends Action {
 	protected DebugOnServerActionDelegate delegate;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DeleteActionDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DeleteActionDelegate.java
index 8ad4573..0835966 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DeleteActionDelegate.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DeleteActionDelegate.java
@@ -19,7 +19,6 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.ui.internal.view.servers.DeleteAction;
-import org.eclipse.wst.server.ui.internal.view.tree.ServerElementAdapter;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.IWorkbenchWindowActionDelegate;
@@ -74,8 +73,6 @@
 			Object obj = iterator.next();
 			if (obj instanceof IServer)
 				list.add(obj);
-			else if (obj instanceof ServerElementAdapter)
-				list.add(((ServerElementAdapter) obj).getObject());
 			else {
 				action.setEnabled(false);
 				return;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/LaunchWizardAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/LaunchWizardAction.java
index 2a2d4e8..a1ee767 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/LaunchWizardAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/LaunchWizardAction.java
@@ -21,8 +21,6 @@
 import org.eclipse.ui.PlatformUI;
 /**
  * An abstract action that opens up a workbench wizard when run.
- * 
- * @since 1.0
  */
 abstract class LaunchWizardAction extends Action {
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/NewServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/NewServerAction.java
index 9c20cc8..24a98e2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/NewServerAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/NewServerAction.java
@@ -18,14 +18,30 @@
  * Action to create a new server.
  */
 public class NewServerAction extends NewWizardAction {
+	protected String[] ids;
+	protected String[] values;
+
 	/**
-	 * NewServerWizardAction constructor comment.
+	 * Create a new NewServerAction.
 	 */
 	public NewServerAction() {
 		super();
 	}
 
 	/**
+	 * Create a new NewServerAction with some initial task model
+	 * properties.
+	 * 
+	 * @param ids
+	 * @param values
+	 */
+	public NewServerAction(String[] ids, String[] values) {
+		super();
+		this.ids = ids;
+		this.values = values;
+	}
+
+	/**
 	 * Performs this action.
 	 * <p>
 	 * This method is called when the delegating action has been triggered.
@@ -36,7 +52,11 @@
 	 *   action
 	 */
 	public void run(IAction action) {
-		NewServerWizard wizard = new NewServerWizard();
+		NewServerWizard wizard = null;
+		if (ids == null)
+			wizard = new NewServerWizard();
+		else
+			wizard = new NewServerWizard(ids, values);
 		wizard.init(workbench, selection);
 		ClosableWizardDialog dialog = new ClosableWizardDialog(workbench.getActiveWorkbenchWindow().getShell(), wizard);
 		dialog.open();
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/NewServerWizardAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/NewServerWizardAction.java
index 1c4cab9..0c1a2f6 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/NewServerWizardAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/NewServerWizardAction.java
@@ -16,8 +16,6 @@
 import org.eclipse.wst.server.ui.internal.wizard.NewServerWizard;
 /**
  * An action to invoke the new server and server configuration wizard.
- * 
- * @since 1.0
  */
 public class NewServerWizardAction extends LaunchWizardAction {
 	protected String[] ids;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ProfileOnServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ProfileOnServerAction.java
index a25cfec..6f4d203 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ProfileOnServerAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ProfileOnServerAction.java
@@ -19,8 +19,6 @@
  * object, and have automatic server creation, launching, and
  * the appropriate client to appear. A new instance of this
  * action must be created for each object that the user selects.
- * 
- * @since 1.0
  */
 public class ProfileOnServerAction extends Action {
 	protected ProfileOnServerActionDelegate delegate;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerAction.java
index 090b57a..67642d3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerAction.java
@@ -19,8 +19,6 @@
  * object, and have automatic server creation, launching, and
  * the appropriate client to appear. A new instance of this
  * action must be created for each object that the user selects.
- * 
- * @since 1.0
  */
 public class RunOnServerAction extends Action {
 	protected RunOnServerActionDelegate delegate;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
index 71ea341..3bcb807 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
@@ -15,7 +15,6 @@
 import java.util.Iterator;
 import java.util.Map;
 
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.*;
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.jface.action.IAction;
@@ -30,7 +29,10 @@
 import org.eclipse.wst.server.core.internal.IClient;
 import org.eclipse.wst.server.core.internal.ILaunchableAdapter;
 import org.eclipse.wst.server.core.internal.PublishServerJob;
+import org.eclipse.wst.server.core.internal.RestartServerJob;
 import org.eclipse.wst.server.core.internal.ServerPlugin;
+import org.eclipse.wst.server.core.internal.ServerType;
+import org.eclipse.wst.server.core.internal.StartServerJob;
 import org.eclipse.wst.server.ui.internal.*;
 import org.eclipse.wst.server.ui.internal.wizard.*;
 import org.eclipse.swt.widgets.Shell;
@@ -78,10 +80,7 @@
 	}
 	
 	public IServer getServer(IModule module, String launchMode, IProgressMonitor monitor) {
-		IServer server = null;
-		IProject project = module.getProject();
-		if (project != null)
-			server = ServerCore.getProjectProperties(project).getDefaultServer();
+		IServer server = ServerCore.getDefaultServer(module);
 		
 		// ignore preference if the server doesn't support this mode.
 		if (server != null && !ServerUIPlugin.isCompatibleWithLaunchMode(server, launchMode))
@@ -114,7 +113,7 @@
 			}
 
 			try {
-				Platform.getJobManager().join("org.eclipse.wst.server.ui.family", new NullProgressMonitor());
+				Platform.getJobManager().join("org.eclipse.wst.server.ui.family", null);
 			} catch (Exception e) {
 				Trace.trace(Trace.WARNING, "Error waiting for job", e);
 			}
@@ -123,9 +122,9 @@
 			tasksRun = true;
 
 			// set preferred server if requested
-			if (server != null && preferred && project != null) {
+			if (server != null && preferred) {
 				try {
-					ServerCore.getProjectProperties(project).setDefaultServer(server, monitor);
+					ServerCore.setDefaultServer(module, server, monitor);
 				} catch (CoreException ce) {
 					String message = Messages.errorCouldNotSavePreference;
 					ErrorDialog.openError(shell, Messages.errorDialogTitle, message, ce.getStatus());
@@ -258,9 +257,9 @@
 		IClient[] clients = new IClient[0];
 		if (launchable != null)
 			clients = getClients(server, launchable, launchMode);
-
+		
 		Trace.trace(Trace.FINEST, "Launchable clients: " + clients);
-
+		
 		IClient client = null;
 		if (clients == null || clients.length == 0) {
 			EclipseUtil.openError(Messages.errorNoClient);
@@ -276,15 +275,16 @@
 			if (client == null)
 				return;
 		}
-
+		
 		Trace.trace(Trace.FINEST, "Ready to launch");
-
+		
 		// start server if it's not already started
 		// and cue the client to start
 		IModule[] modules = new IModule[] { module }; // TODO: get parent heirarchy correct
 		int state = server.getServerState();
 		if (state == IServer.STATE_STARTING) {
-			LaunchClientJob.launchClient(server, modules, launchMode, moduleArtifact, launchableAdapter, client);
+			LaunchClientJob clientJob = new LaunchClientJob(server, modules, launchMode, moduleArtifact, launchableAdapter, client);
+			clientJob.schedule();
 		} else if (state == IServer.STATE_STARTED) {
 			boolean restart = false;
 			String mode = server.getMode();
@@ -305,17 +305,31 @@
 				else
 					return;
 			}
-			if (restart)
-				RestartServerJob.restartServer(server, launchMode);
 			
 			PublishServerJob publishJob = new PublishServerJob(server);
-			publishJob.schedule();
-			LaunchClientJob.launchClient(server, modules, launchMode, moduleArtifact, launchableAdapter, client);
+			LaunchClientJob clientJob = new LaunchClientJob(server, modules, launchMode, moduleArtifact, launchableAdapter, client);
+			publishJob.setNextJob(clientJob);
+			
+			if (restart) {
+				RestartServerJob restartJob = new RestartServerJob(server, launchMode);
+				restartJob.setNextJob(publishJob);
+				restartJob.schedule();
+			} else
+				publishJob.schedule();
 		} else if (state != IServer.STATE_STOPPING) {
 			PublishServerJob publishJob = new PublishServerJob(server);
-			publishJob.schedule();
-			StartServerJob.startServer(server, launchMode);
-			LaunchClientJob.launchClient(server, modules, launchMode, moduleArtifact, launchableAdapter, client);
+			StartServerJob startServerJob = new StartServerJob(server, launchMode);
+			LaunchClientJob clientJob = new LaunchClientJob(server, modules, launchMode, moduleArtifact, launchableAdapter, client);
+			
+			if (((ServerType)server.getServerType()).startBeforePublish()) {
+				startServerJob.setNextJob(publishJob);
+				publishJob.setNextJob(clientJob);
+				startServerJob.schedule();
+			} else {
+				publishJob.setNextJob(startServerJob);
+				startServerJob.setNextJob(clientJob);
+				publishJob.schedule();
+			}
 		}
 	}
 
@@ -411,7 +425,8 @@
 
 		IStructuredSelection select = (IStructuredSelection) sel;
 		Iterator iterator = select.iterator();
-		selection = iterator.next();
+		if (iterator.hasNext())
+			selection = iterator.next();
 		if (iterator.hasNext()) { // more than one selection (should never happen)
 			action.setEnabled(false);
 			selection = null;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/Audio.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/Audio.java
new file mode 100644
index 0000000..24f7717
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/Audio.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.audio;
+
+/**
+ * Audio is the main interface to the audio plugin.<p>
+ *
+ * Adding a new sound to your plugin is as easy as ABC:
+ * <ul>
+ * <li>A: Add the following requires to your plugin.xml:<br>
+ *   <pre>&lt;import plugin="org.eclipse.wst.server.util"&gt;</pre></li>
+ *
+ * <li>B: Define a new sound extension point in your plugin.xml:<br>
+ *   <pre>&lt;extension point="org.eclipse.wst.server.util.sound"&gt;
+ *     &lt;category id="org.eclipse.myPlugin"
+ *       name="My Plugin Name"/&gt;
+ *     &lt;sound id="org.eclipse.myPlugin.mySound"
+ *       category="org.eclipse.myPlugin"
+ *       name="Something Happened"
+ *       location="sounds/mySound.wav"/&gt;
+ *     &lt;sound id="org.eclipse.myPlugin.myOtherSounds"
+ *       category="org.eclipse.myPlugin"
+ *       name="Another Event Happened"/&gt;
+ *   &lt;/extension&gt;</pre><br>
+ *   (the location is optional. If it is not specified, the sound
+ *    will not play until the user specifies an audio file)</li>
+ *
+ * <li>C: Call the sounds when the appropriate events occur within
+ *   your plugin:<br>
+ *   <pre>org.eclipse.wst.audio.Audio.playSound("org.eclipse.myPlugin.mySound");</pre></li>
+ * </ul>
+ */
+public class Audio {
+	/**
+	 * AudioCore constructor comment.
+	 */
+	private Audio() {
+		super();
+	}
+
+	/**
+	 * Plays the sound with the given id.
+	 *
+	 * @param id java.lang.String
+	 */
+	public static void playSound(String id) {
+		AudioCore.getInstance().playSound(id);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioCore.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioCore.java
new file mode 100644
index 0000000..80499cb
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioCore.java
@@ -0,0 +1,694 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.audio;
+
+import java.util.*;
+import java.io.*;
+import java.net.URL;
+import javax.sound.sampled.*;
+
+import org.eclipse.core.runtime.*;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.ui.IMemento;
+import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
+import org.eclipse.wst.server.ui.internal.Trace;
+/**
+ * Main audio plugin class.
+ */
+public class AudioCore {
+	protected static AudioCore instance;
+
+	public static final String PREF_SOUND_ENABLED = "soundEnabled";
+	public static final String PREF_VOLUME = "volume";
+
+	public static final String SOUNDS_FILE = "sounds.xml";
+	public static final String DISABLED_FILE = "disabled-sounds.xml";
+
+	// Categories - map of String id to String names
+	private Map categories;
+
+	// Sounds - map of String id to Sound
+	private Map sounds;
+
+	// specific sounds or categories that have been disabled, by id
+	private List disabledSounds;
+	private List disabledCategories;
+
+	// SoundMap - map of String id to an IPath
+	private Map userSoundMap;
+
+	/**
+	 * AudioCore constructor comment.
+	 */
+	private AudioCore() {
+		super();
+	
+		loadExtensionPoints();
+	
+		loadSoundMap();
+		loadDisabledLists();
+		
+		
+	}
+
+	/**
+	 * Return the categories
+	 *
+	 * @return java.util.Map
+	 */
+	protected Map getCategories() {
+		return categories;
+	}
+
+	/**
+	 * Returns the audio clip.
+	 *
+	 * @param url java.net.URL
+	 * @return javax.sound.sampled.Clip
+	 */
+	protected static Clip getClip(URL url) {
+		try {
+			AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(url);
+	
+			AudioFormat format = audioInputStream.getFormat();
+	
+			/**
+			 * we can't yet open the device for ALAW/ULAW playback,
+			 * convert ALAW/ULAW to PCM
+			 */
+			if ((format.getEncoding() == AudioFormat.Encoding.ULAW) ||
+				(format.getEncoding() == AudioFormat.Encoding.ALAW)) {
+				AudioFormat tmp = new AudioFormat(
+					AudioFormat.Encoding.PCM_SIGNED, 
+					format.getSampleRate(),
+					format.getSampleSizeInBits() * 2,
+					format.getChannels(),
+					format.getFrameSize() * 2,
+					format.getFrameRate(), true);
+				audioInputStream = AudioSystem.getAudioInputStream(tmp, audioInputStream);
+				format = tmp;
+			}
+			DataLine.Info info = new DataLine.Info(
+				Clip.class, audioInputStream.getFormat(), 
+				((int) audioInputStream.getFrameLength() *
+				format.getFrameSize()));
+		
+			Clip clip = (Clip) AudioSystem.getLine(info);
+			clip.open(audioInputStream);
+			return clip;
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not get clip: " + url, e);
+		}
+		return null;
+	}
+	
+	/**
+	 * Returns true if audio is currently available on this system.
+	 *
+	 * @return boolean
+	 */
+	protected static boolean isAudioSupported() {
+		try {
+			boolean sound = false;
+			Mixer.Info[] info2 = AudioSystem.getMixerInfo();
+			if (info2 != null) {
+				int size = info2.length;
+				for (int i = 0; i < size; i++) {
+					//Trace.trace(" " + info2[i]);
+					Mixer mixer = AudioSystem.getMixer(info2[i]);
+					if (mixer != null) {
+						//Trace.trace("   Mixer:" + mixer);
+						//Trace.trace("   " + mixer.getLineInfo());
+						try {
+							Line.Info info = mixer.getLineInfo();
+							Line line = mixer.getLine(info);
+							//Trace.trace("   Line:" + line);
+							if (line != null && line.toString().indexOf("Output") >= 0)
+								sound = true;
+						} catch (Exception e) {
+							// ignore
+						}
+					}
+				}
+			}
+			return sound;
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not verify audio status", e);
+		}
+		return true;
+	}
+	
+	/**
+	 * Returns true if sound is enabled.
+	 *
+	 * @return boolean
+	 */
+	public boolean getDefaultSoundsEnabled() {
+		return getPreferenceStore().getDefaultBoolean(PREF_SOUND_ENABLED);
+	}
+
+	/**
+	 * Returns the default volume.
+	 *
+	 * @return int
+	 */
+	public int getDefaultVolume() {
+		return getPreferenceStore().getDefaultInt(PREF_VOLUME);
+	}
+
+	/**
+	 * Returns the singleton instance.
+	 *
+	 * @return org.eclipse.audio.internal.AudioCore
+	 */
+	public static AudioCore getInstance() {
+		if (instance == null)
+			instance = new AudioCore();
+		return instance;
+	}
+
+	/**
+	 * 
+	 * @return org.eclipse.jface.preference.IPreferenceStore
+	 */
+	protected IPreferenceStore getPreferenceStore() {
+		return ServerUIPlugin.getInstance().getPreferenceStore();
+	}
+
+	/**
+	 * Returns the sound with the given id.
+	 *
+	 * @param id java.lang.String
+	 * @return org.eclipse.audio.Sound
+	 */
+	protected Sound getSound(String id) {
+		try {
+			return (Sound) sounds.get(id);
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	/**
+	 * Return the sounds.
+	 *
+	 * @return java.util.Map
+	 */
+	protected Map getSounds() {
+		return sounds;
+	}
+
+	/**
+	 * Returns the full user sound map.
+	 *
+	 * @return java.util.Map
+	 */
+	protected Map getUserSoundMap() {
+		if (userSoundMap == null)
+			loadSoundMap();
+		return userSoundMap;
+	}
+
+	/**
+	 * Return the current URL for this sound.
+	 *
+	 * @param id java.lang.String
+	 * @return java.net.URL
+	 */
+	protected IPath getUserSoundPath(String id) {
+		try {
+			if (userSoundMap == null)
+				loadSoundMap();
+	
+			IPath path = (IPath) userSoundMap.get(id);
+			if (path != null)
+				return path;
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not get sound URL: " + id, e);
+		}
+		return null;
+	}
+
+	/**
+	 * Returns the preferred volume.
+	 *
+	 * @return int
+	 */
+	public int getVolume() {
+		return getPreferenceStore().getInt(PREF_VOLUME);
+	}
+
+	/**
+	 * Initialize the default preferences.
+	 *
+	 * @param store org.eclipse.jface.preference.IPreferenceStore
+	 */
+	public static void initializeDefaultPreferences(IPreferenceStore store) {
+		store.setDefault(PREF_VOLUME, 18);
+	}
+
+	/**
+	 * Returns true if the given category is enabled.
+	 *
+	 * @param id java.lang.String
+	 * @return boolean
+	 */
+	public boolean isCategoryEnabled(String id) {
+		if (id == null)
+			return false;
+	
+		if (disabledCategories == null)
+			loadDisabledLists();
+	
+		return (!disabledCategories.contains(id));
+	}
+
+	/**
+	 * Returns true if sound is enabled.
+	 *
+	 * @return boolean
+	 */
+	public boolean isSoundEnabled() {
+		return getPreferenceStore().getBoolean(PREF_SOUND_ENABLED);
+	}
+
+	/**
+	 * Returns true if the given sound is enabled.
+	 *
+	 * @param id java.lang.String
+	 * @return boolean
+	 */
+	public boolean isSoundEnabled(String id) {
+		if (id == null)
+			return false;
+	
+		if (disabledSounds == null)
+			loadDisabledLists();
+	
+		return (!disabledSounds.contains(id));
+	}
+
+	/**
+	 * Saves the disabled sound list.
+	 */
+	private void loadDisabledLists() {
+		String filename = ServerUIPlugin.getInstance().getStateLocation().append(DISABLED_FILE).toOSString();
+	
+		FileInputStream in = null;
+		disabledCategories = new ArrayList();
+		disabledSounds = new ArrayList();
+		try {
+			in = new FileInputStream(filename);
+			IMemento memento = XMLMemento.loadMemento(in);
+	
+			IMemento cat = memento.getChild("categories");
+			IMemento[] children = cat.getChildren("category");
+	
+			int size = children.length;
+			for (int i = 0; i < size; i++) {
+				try {
+					IMemento child = children[i];
+					String id = child.getString("id");
+	
+					disabledCategories.add(id);
+				} catch (Exception ex) {
+					Trace.trace(Trace.SEVERE, "Error reading URL map ", ex);
+				}
+			}
+	
+			IMemento sound = memento.getChild("sounds");
+			children = sound.getChildren("sound");
+	
+			size = children.length;
+			for (int i = 0; i < size; i++) {
+				try {
+					IMemento child = children[i];
+					String id = child.getString("id");
+	
+					disabledSounds.add(id);
+				} catch (Exception ex) {
+					Trace.trace(Trace.SEVERE, "Error reading URL map ", ex);
+				}
+			}
+		} catch (Exception e) {
+			//AudioPlugin.log(new Status(IStatus.WARNING, AudioPlugin.PLUGIN_ID, 0, "Could not load disabled sound information", e));
+		} finally {
+			if (in != null) {
+				try {
+					in.close();
+				} catch (Exception e) {
+					// ignore
+				}
+			}
+		}
+	}
+
+	/**
+	 * Load extension point.
+	 */
+	private void loadExtensionPoints() {
+		// load extension points
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "audio");
+	
+		int size = cf.length;
+		categories = new HashMap();
+		sounds = new HashMap();
+	
+		for (int i = 0; i < size; i++) {
+			try {
+				String elementName = cf[i].getName();
+				String id = cf[i].getAttribute("id");
+				String name = cf[i].getAttribute("name");
+				if ("category".equals(elementName)) {
+					categories.put(id, name);
+				} else if ("sound".equals(elementName)) {
+					String category = cf[i].getAttribute("category");
+					String location = cf[i].getAttribute("location");
+	
+					URL realURL = null;
+					if (location != null && location.length() > 0) {
+						String pluginId = cf[i].getDeclaringExtension().getNamespace();
+						URL url = Platform.find(Platform.getBundle(pluginId), new Path(location));
+						realURL = Platform.resolve(url);
+					}
+	
+					Sound sound = new Sound(id, category, name, realURL);
+					sounds.put(id, sound);
+				}
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "Could not load audio: " + cf[i].getAttribute("id"), t);
+			}
+		}
+	}
+
+	/**
+	 * Saves the disabled sound list.
+	 */
+	private void loadSoundMap() {
+		String filename = ServerUIPlugin.getInstance().getStateLocation().append(SOUNDS_FILE).toOSString();
+	
+		InputStream in = null;
+		userSoundMap = new HashMap();
+		try {
+			in = new FileInputStream(filename);
+			IMemento memento = XMLMemento.loadMemento(in);
+	
+			IMemento[] children = memento.getChildren("map");
+	
+			int size = children.length;
+			for (int i = 0; i < size; i++) {
+				try {
+					IMemento child = children[i];
+					String id = child.getString("id");
+					String pathStr = child.getString("path");
+					IPath path = new Path(pathStr);
+	
+					userSoundMap.put(id, path);
+				} catch (Exception ex) {
+					Trace.trace(Trace.SEVERE, "Error reading URL map ", ex);
+				}
+			}
+		} catch (Exception e) {
+			// ignore
+		} finally {
+			if (in != null) {
+				try {
+					in.close();
+				} catch (Exception e) {
+					// ignore
+				}
+			}
+		}
+	}
+
+	/**
+	 * Play the sound with the given id. (provided that
+	 * the user has enabled the sound)
+	 *
+	 * @param id java.lang.String
+	 */
+	public void playSound(String id) {
+		if (!isSoundEnabled())
+			return;
+	
+		if (!isSoundEnabled(id))
+			return;
+	
+		try {
+			Sound sound = (Sound) sounds.get(id);
+			String category = sound.getCategory();
+			if (category != null && categories.containsKey(category)) {
+				if (!isCategoryEnabled(category))
+					return;
+			}
+	
+			URL url = sound.getLocation();
+			IPath path = getUserSoundPath(id);
+			if (path != null)
+				url = path.toFile().toURL();
+	
+			playSound(url, getVolume());
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error playing audio: " + id, e);
+		}
+	}
+
+	/**
+	 * Plays the sound at the given url.
+	 *
+	 * @param url java.net.URL
+	 */
+	protected static void playSound(URL url, final int volume) {
+		try {
+			Trace.trace(Trace.FINEST, "playSound");
+			if (url == null || volume <= 0)
+				return;
+	
+			final Clip clip = getClip(url);
+			if (clip == null)
+				return;
+				
+			Trace.trace(Trace.FINEST, "playing");
+	
+			Thread t = new Thread("Sound Thread") {
+				public void run() {
+					// set gain
+					FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
+					double value = volume / 20.0;
+					float dB = (float) (Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0);
+					gainControl.setValue(dB);
+	
+					Trace.trace(Trace.FINEST, "start");
+					clip.start();
+					try {
+						sleep(99);
+					} catch (Exception e) {
+						// ignore
+					}
+	
+					while (clip.isActive()) {
+						try {
+							sleep(99);
+						} catch (Exception e) {
+							break;
+						}
+					}
+					clip.stop();
+					clip.close();
+					Trace.trace(Trace.FINEST, "stop");
+				}
+			};
+			t.setDaemon(true);
+			t.start();
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error playing audio: " + url, e);
+		}
+	}
+
+	/**
+	 * Saves the disabled sounds and categories list.
+	 */
+	private void saveDisabledLists() {
+		String filename = ServerUIPlugin.getInstance().getStateLocation().append(DISABLED_FILE).toOSString();
+	
+		FileOutputStream fout = null;
+		try {
+			XMLMemento memento = XMLMemento.createWriteRoot("disabled");
+	
+			IMemento cat = memento.createChild("categories");
+			Iterator iterator = disabledCategories.iterator();
+			while (iterator.hasNext()) {
+				IMemento child = cat.createChild("category");
+				String id = (String) iterator.next();
+				child.putString("id", id);
+			}
+	
+			IMemento sound = memento.createChild("sounds");
+			iterator = disabledSounds.iterator();
+			while (iterator.hasNext()) {
+				IMemento child = sound.createChild("sound");
+				String id = (String) iterator.next();
+				child.putString("id", id);
+			}
+	
+			fout = new FileOutputStream(filename);
+			memento.save(fout);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not save disabled information", e);
+		} finally {
+			if (fout != null) {
+				try {
+					fout.close();
+				} catch (Exception e) {
+					// ignore
+				}
+			}
+		}
+	}
+
+	/**
+	 * Saves the disabled sound list.
+	 */
+	private void saveSoundMap() {
+		String filename = ServerUIPlugin.getInstance().getStateLocation().append(SOUNDS_FILE).toOSString();
+	
+		FileOutputStream fout = null;
+		try {
+			XMLMemento memento = XMLMemento.createWriteRoot("sound-map");
+	
+			Iterator iterator = userSoundMap.keySet().iterator();
+			while (iterator.hasNext()) {
+				IMemento child = memento.createChild("map");
+				String id = (String) iterator.next();
+				child.putString("id", id);
+				IPath path = (IPath) userSoundMap.get(id);
+				child.putString("path", path.toString());
+			}
+	
+			fout = new FileOutputStream(filename);
+			memento.save(fout);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not save URL map information", e);
+		} finally {
+			if (fout != null) {
+				try {
+					fout.close();
+				} catch (Exception e) {
+					// ignore
+				}
+			}
+		}
+	}
+
+	/**
+	 * Enable or disable a specific category.
+	 *
+	 * @param id java.lang.String
+	 * @param b boolean
+	 */
+	public void setCategoryEnabled(String id, boolean b) {
+		if (id == null)
+			return;
+	
+		if (disabledCategories == null)
+			loadDisabledLists();
+	
+		if (b) {
+			if (disabledCategories.contains(id)) {
+				disabledCategories.remove(id);
+				saveDisabledLists();
+			}
+		} else {
+			if (!disabledCategories.contains(id)) {
+				disabledCategories.add(id);
+				saveDisabledLists();
+			}
+		}
+	}
+
+	/**
+	 * Enable or disable a specific sound.
+	 *
+	 * @param id java.lang.String
+	 * @param b boolean
+	 */
+	public void setSoundEnabled(String id, boolean b) {
+		if (id == null)
+			return;
+	
+		if (disabledSounds == null)
+			loadDisabledLists();
+	
+		if (b) {
+			if (disabledSounds.contains(id)) {
+				disabledSounds.remove(id);
+				saveDisabledLists();
+			}
+		} else {
+			if (!disabledSounds.contains(id)) {
+				disabledSounds.add(id);
+				saveDisabledLists();
+			}
+		}
+	}
+
+	/**
+	 * Sets whether sound is enabled.
+	 *
+	 * @param enabled
+	 */
+	public void setSoundsEnabled(boolean enabled) {
+		getPreferenceStore().setValue(PREF_SOUND_ENABLED, enabled);
+	}
+
+	/**
+	 * Sets the current URL for this sound.
+	 *
+	 * @param id java.lang.String
+	 * @param path IPath
+	 */
+	protected void setSoundURL(String id, IPath path) {
+		if (id == null || path == null)
+			return;
+	
+		try {
+			if (userSoundMap == null)
+				loadSoundMap();
+	
+			userSoundMap.put(id, path);
+			saveSoundMap();
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not get sound URL: " + id, e);
+		}
+	}
+
+	/**
+	 * Sets the full user sound map.
+	 *
+	 * @param map the sound map
+	 */
+	protected void setUserSoundMap(Map map) {
+		if (map != null) {
+			userSoundMap = map;
+			saveSoundMap();
+		}
+	}
+
+	/**
+	 * Sets the volume.
+	 *
+	 * @param volume the volume
+	 */
+	public void setVolume(int volume) {
+		getPreferenceStore().setValue(PREF_VOLUME, volume);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioPreferencePage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioPreferencePage.java
new file mode 100644
index 0000000..fd8e448
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioPreferencePage.java
@@ -0,0 +1,448 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.audio;
+
+import java.net.URL;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.help.IWorkbenchHelpSystem;
+import org.eclipse.wst.server.ui.internal.ContextIds;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.SWTUtil;
+import org.eclipse.wst.server.ui.internal.Trace;
+import org.eclipse.wst.server.ui.internal.viewers.LockedTableViewer;
+/**
+ * Audio preference page.
+ */
+public class AudioPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+	protected Button enableButton;
+	protected Spinner volume;
+
+	protected Map userSoundMap;
+
+	protected TableViewer viewer;
+	
+	boolean soundAvailable = true;
+
+	/**
+	 * AudioPreferencePage constructor comment.
+	 */
+	public AudioPreferencePage() {
+		super();
+	
+		loadUserMapInfo();
+	}
+	
+	protected IPath chooseAudioFile() {
+		FileDialog dialog = new FileDialog(getShell(), SWT.SINGLE);
+		dialog.setText(Messages.audioPrefSelectFile);
+		dialog.setFilterExtensions(new String[] {"*.au;*.wav"});
+		dialog.setFilterPath(null);
+		dialog.open();
+	
+		String[] filenames = dialog.getFileNames();
+		if (filenames != null && filenames.length > 0) {
+			String filterPath = dialog.getFilterPath();
+			return new Path(filterPath + java.io.File.separator + filenames[0]);
+		}
+		return null;
+	}
+
+	/**
+	 * Creates and returns the SWT control for the customized body 
+	 * of this preference page under the given parent composite.
+	 * <p>
+	 * This framework method must be implemented by concrete
+	 * subclasses.
+	 * </p>
+	 *
+	 * @param parent the parent composite
+	 * @return the new control
+	 */
+	protected Control createContents(Composite parent) {
+		initializeDialogUnits(parent);
+		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
+		whs.setHelp(parent, ContextIds.AUDIO_PREFERENCES);
+	
+		final AudioCore core = AudioCore.getInstance();
+	
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 3;
+		layout.horizontalSpacing = convertHorizontalDLUsToPixels(4);
+		layout.verticalSpacing = convertVerticalDLUsToPixels(3);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		composite.setLayout(layout);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
+		composite.setLayoutData(data);
+	
+		enableButton = new Button(composite, SWT.CHECK);
+		enableButton.setText(Messages.audioPrefEnable);
+		enableButton.setSelection(AudioCore.getInstance().isSoundEnabled());
+		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		data.horizontalSpan = 3;
+		enableButton.setLayoutData(data);
+		whs.setHelp(enableButton, ContextIds.AUDIO_PREFERENCES_ENABLE);
+		
+		final Label volumeLabel = new Label(composite, SWT.NONE);
+		volumeLabel.setText(Messages.audioPrefVolume);
+		data = new GridData();
+		data.horizontalIndent = 20;
+		volumeLabel.setLayoutData(data);
+		volumeLabel.setEnabled(enableButton.getSelection());
+		
+		volume = new Spinner(composite, SWT.BORDER);
+		volume.setMinimum(0);
+		volume.setMaximum(20);
+		volume.setSelection(AudioCore.getInstance().getVolume());
+		data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+		data.horizontalSpan = 2;
+		data.widthHint = 60;
+		volume.setLayoutData(data);
+		volume.setEnabled(enableButton.getSelection());
+		whs.setHelp(volume, ContextIds.AUDIO_PREFERENCES_VOLUME);
+		
+		enableButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				volumeLabel.setEnabled(enableButton.getSelection());
+				volume.setEnabled(enableButton.getSelection());
+			}
+		});
+		
+		Label label = new Label(composite, SWT.NONE);
+		data = new GridData();
+		data.horizontalSpan = 3;
+		label.setLayoutData(data);
+		
+		label = new Label(composite, SWT.NONE);
+		label.setText(Messages.audioPrefSounds);
+		data = new GridData();
+		data.horizontalSpan = 3;
+		label.setLayoutData(data);
+	
+		final Table table = new Table(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.SINGLE | SWT.FULL_SELECTION);
+		data = new GridData(GridData.FILL_BOTH);
+		data.horizontalSpan = 2;
+		table.setLayoutData(data);
+		whs.setHelp(table, ContextIds.AUDIO_PREFERENCES_SOUNDS_TABLE);
+	
+		viewer = new LockedTableViewer(table);
+	
+		TableLayout tableLayout = new TableLayout();
+		table.setLayout(tableLayout);
+		table.setHeaderVisible(true);
+	
+		tableLayout.addColumnData(new ColumnPixelData(19, false));
+		TableColumn col = new TableColumn(table, SWT.NONE, 0);
+		col.setText("");
+		col.setResizable(false);
+	
+		tableLayout.addColumnData(new ColumnWeightData(11, 110, true));
+		col = new TableColumn(table, SWT.NONE, 1);
+		col.setText(Messages.audioPrefSound);
+		col.setResizable(true);
+	
+		tableLayout.addColumnData(new ColumnWeightData(15, 150, true));
+		col = new TableColumn(table, SWT.NONE, 2);
+		col.setText(Messages.audioPrefFile);
+		col.setResizable(true);
+	
+		viewer.setContentProvider(new AudioTableContentProvider());
+		viewer.setLabelProvider(new AudioTableLabelProvider(this));
+		viewer.setInput("root");
+		viewer.setColumnProperties(new String[] {"enabled", "sound", "file"});
+	
+		CellEditor editors[] = new CellEditor[3];
+		editors[0] = new CheckboxCellEditor(table);
+		viewer.setCellEditors(editors);
+	
+		ICellModifier cellModifier = new ICellModifier() {
+			public Object getValue(Object element, String property) {
+				if ("enabled".equals(property)) {
+					if (element instanceof String)
+						return new Boolean(core.isCategoryEnabled((String) element));
+					
+					Sound s = (Sound) element;
+					return new Boolean(core.isSoundEnabled(s.getId()));
+				}
+				return "xx";
+			}
+	
+			public boolean canModify(Object element, String property) {
+				if (!"enabled".equals(property))
+					return false;
+				if (element instanceof String)
+					return true;
+				Sound sound = (Sound) element;
+				return (core.isCategoryEnabled(sound.getCategory()));
+			}
+	
+			public void modify(Object element, String property, Object value) {
+				Item item = (Item) element;
+				Object obj = item.getData();
+				Boolean b = (Boolean) value;
+	
+				if (obj instanceof String) {
+					String id = (String) obj;
+					core.setCategoryEnabled(id, b.booleanValue());
+					viewer.refresh();
+				} else {
+					Sound sound = (Sound) obj;
+					core.setSoundEnabled(sound.getId(), b.booleanValue());
+					viewer.refresh(sound);
+				}
+			}
+		};
+		viewer.setCellModifier(cellModifier);
+		
+	
+		Composite right = new Composite(composite, SWT.NONE);
+		layout = new GridLayout();
+		layout.numColumns = 1;
+		layout.horizontalSpacing = convertHorizontalDLUsToPixels(4);
+		layout.verticalSpacing = convertVerticalDLUsToPixels(4);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		right.setLayout(layout);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_FILL);
+		right.setLayoutData(data);
+	
+		// play button and table selection listener
+		final Button playButton = SWTUtil.createButton(right, Messages.audioPrefPlay);
+		playButton.setEnabled(false);
+		whs.setHelp(playButton, ContextIds.AUDIO_PREFERENCES_PLAY);
+	
+		final Button browseButton = SWTUtil.createButton(right, Messages.audioPrefBrowse);
+		browseButton.setEnabled(false);
+		whs.setHelp(browseButton, ContextIds.AUDIO_PREFERENCES_BROWSE);
+	
+		final Button resetButton = SWTUtil.createButton(right, Messages.audioPrefReset);
+		resetButton.setEnabled(false);
+		whs.setHelp(resetButton, ContextIds.AUDIO_PREFERENCES_RESET);
+	
+		table.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				try {
+					int sel = table.getSelectionIndex();
+					Object obj = table.getItem(sel).getData();
+					if (obj instanceof Sound) {
+						Sound sound = (Sound) obj;
+						URL url = getSoundURL(sound.getId());
+						if (url != null && soundAvailable)
+							playButton.setEnabled(true);
+						else
+							playButton.setEnabled(false);
+						browseButton.setEnabled(true);
+	
+						if (getUserSoundPath(sound.getId()) != null)
+							resetButton.setEnabled(true);
+						else
+							resetButton.setEnabled(false);
+					} else {
+						playButton.setEnabled(false);
+						browseButton.setEnabled(false);
+					}
+				} catch (Exception ex) {
+					Trace.trace(Trace.SEVERE, "Error in table selection", ex);
+				}
+			}
+		});
+	
+		soundAvailable = AudioCore.isAudioSupported();
+		if (soundAvailable) {
+			playButton.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					try {
+						int sel = table.getSelectionIndex();
+						Sound sound = (Sound) table.getItem(sel).getData();
+						AudioCore.playSound(getSoundURL(sound.getId()), volume.getSelection());
+					} catch (Exception ex) {
+						Trace.trace(Trace.SEVERE, "Error in table selection", ex);
+					}
+				}
+			});
+		} else {
+			playButton.setEnabled(false);
+		}
+		
+		browseButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				try {
+					IPath path = chooseAudioFile();
+					if (path != null) {
+						int sel = table.getSelectionIndex();
+						Sound sound = (Sound) table.getItem(sel).getData();
+						setUserSoundPath(sound.getId(), path);
+						viewer.refresh(sound);
+						playButton.setEnabled(true);
+					}
+				} catch (Exception ex) {
+					Trace.trace(Trace.SEVERE, "Error browsing", ex);
+				}
+			}
+		});
+	
+		resetButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				try {
+					int sel = table.getSelectionIndex();
+					Sound sound = (Sound) table.getItem(sel).getData();
+					removeUserSoundPath(sound.getId());
+					viewer.refresh(sound);
+					//playButton.setEnabled(true);
+				} catch (Exception ex) {
+					Trace.trace(Trace.SEVERE, "Error reseting sound", ex);
+				}
+			}
+		});
+		
+		Dialog.applyDialogFont(composite);
+	
+		return composite;
+	}
+
+	/**
+	 * 
+	 * @return org.eclipse.core.runtime.IPath
+	 * @param id java.lang.String
+	 */
+	protected URL getSoundURL(String id) {
+		try {
+			IPath path = (IPath) userSoundMap.get(id);
+			if (path != null)
+				return path.toFile().toURL();
+		} catch (Exception e) {
+			// ignore
+		}
+	
+		return AudioCore.getInstance().getSound(id).getLocation();
+	}
+
+	/**
+	 * 
+	 * @return org.eclipse.core.runtime.IPath
+	 * @param id java.lang.String
+	 */
+	protected IPath getUserSoundPath(String id) {
+		try {
+			IPath path = (IPath) userSoundMap.get(id);
+			if (path != null)
+				return path;
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
+	/**
+	 * Initializes this preference page for the given workbench.
+	 * <p>
+	 * This method is called automatically as the preference page is being created
+	 * and initialized. Clients must not call this method.
+	 * </p>
+	 *
+	 * @param workbench the workbench
+	 */
+	public void init(IWorkbench workbench) {
+		// do nothing
+	}
+
+	/**
+	 * 
+	 */
+	protected void loadUserMapInfo() {
+		// create a copy of the user sound map
+		Map map = AudioCore.getInstance().getUserSoundMap();
+		userSoundMap = new HashMap(map.size());
+	
+		Iterator iterator = map.keySet().iterator();
+		while (iterator.hasNext()) {
+			String id = (String) iterator.next();
+			IPath path = (IPath) map.get(id);
+			userSoundMap.put(id, path);
+		}
+	}
+
+	/**
+	 * @see PreferencePage#performDefaults()
+	 */
+	protected void performDefaults() {
+		AudioCore core = AudioCore.getInstance();
+		
+		enableButton.setSelection(core.getDefaultSoundsEnabled());
+		volume.setSelection(core.getDefaultVolume());
+	
+		userSoundMap = new HashMap();
+		viewer.refresh();
+	
+		super.performDefaults();
+	}
+
+	/** 
+	 * @see PreferencePage#performOk()
+	 */
+	public boolean performOk() {
+		AudioCore core = AudioCore.getInstance();
+		core.setSoundsEnabled(enableButton.getSelection());
+		core.setVolume(volume.getSelection());
+	
+		core.setUserSoundMap(userSoundMap);
+		viewer.refresh();
+	
+		return super.performOk();
+	}
+
+	/**
+	 * 
+	 */
+	protected void removeUserSoundPath(String id) {
+		if (userSoundMap.containsKey(id))
+			userSoundMap.remove(id);
+	}
+
+	/**
+	 * 
+	 */
+	protected void saveUserMapInfo() {
+		// create a copy of the user sound map
+		Map map = AudioCore.getInstance().getUserSoundMap();
+		userSoundMap = new HashMap(map.size());
+	
+		Iterator iterator = map.keySet().iterator();
+		while (iterator.hasNext()) {
+			String id = (String) iterator.next();
+			IPath path = (IPath) map.get(id);
+			userSoundMap.put(id, path);
+		}
+	}
+
+	/**
+	 * 
+	 * @param path org.eclipse.core.runtime.IPath
+	 */
+	protected void setUserSoundPath(String id, IPath path) {
+		userSoundMap.put(id, path);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioTableContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioTableContentProvider.java
new file mode 100644
index 0000000..cfc79a3
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioTableContentProvider.java
@@ -0,0 +1,184 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.audio;
+
+import java.util.*;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+/**
+ * Audio table content provider.
+ */
+class AudioTableContentProvider implements IStructuredContentProvider {
+	protected static final String MISC_CATEGORY = "miscCategory";
+
+	/**
+	 * AudioTableContentProvider constructor comment.
+	 */
+	public AudioTableContentProvider() {
+		super();
+	}
+
+	/**
+	 * Disposes of this content provider.  
+	 * This is called by the viewer when it is disposed.
+	 */
+	public void dispose() {
+		// do nothing
+	}
+
+	/**
+	 * Returns the elements to display in the viewer 
+	 * when its input is set to the given element. 
+	 * These elements can be presented as rows in a table, items in a list, etc.
+	 * The result is not modified by the viewer.
+	 *
+	 * @param inputElement the input element
+	 * @return the array of elements to display in the viewer
+	 */
+	public Object[] getElements(Object inputElement) {
+		AudioCore core = AudioCore.getInstance();
+	
+		Map categories = core.getCategories();
+		Map sounds = core.getSounds();
+	
+		List list = new ArrayList(sounds.size());
+	
+		// first, find all the categories and sort
+		List cats = new ArrayList();
+		Iterator iterator = categories.keySet().iterator();
+		while (iterator.hasNext())
+			cats.add(iterator.next());
+		sortCategories(cats);
+	
+		// list them, ignoring empty ones
+		iterator = categories.keySet().iterator();
+		while (iterator.hasNext()) {
+			String id = (String) iterator.next();
+			List l = getSoundsByCategory(id);
+			if (!l.isEmpty()) {
+				list.add(id);
+				sortSounds(l);
+	
+				int size = l.size();
+				for (int i = 0; i < size; i++)
+					list.add(l.get(i));
+			}
+		}
+	
+		// finally, list the "misc" sounds
+		List l = getSoundsByCategory(null);
+		if (!l.isEmpty()) {
+			list.add(MISC_CATEGORY);
+			sortSounds(l);
+	
+			int size = l.size();
+			for (int i = 0; i < size; i++)
+				list.add(l.get(i));
+		}
+	
+		return list.toArray();
+	}
+
+	/**
+	 * Returns the sounds from the given category. Use null
+	 * to return all miscelleneous sounds with no category or
+	 * an invalid category.
+	 *
+	 * @return java.util.List
+	 * @param category java.lang.String
+	 */
+	protected List getSoundsByCategory(String category) {
+		AudioCore core = AudioCore.getInstance();
+	
+		Map sounds = core.getSounds();
+		Map categories = core.getCategories();
+		List list = new ArrayList();
+	
+		Iterator iterator = sounds.keySet().iterator();
+		while (iterator.hasNext()) {
+			String id = (String) iterator.next();
+			Sound sound = (Sound) sounds.get(id);
+			if (category != null && category.equals(sound.getCategory()))
+				list.add(sound);
+			else if (category == null && (sound.getCategory() == null || !categories.containsKey(sound.getCategory())))
+				list.add(sound);
+		}
+		return list;
+	}
+
+	/**
+	 * Notifies this content provider that the given viewer's input
+	 * has been switched to a different element.
+	 * <p>
+	 * A typical use for this method is registering the content provider as a listener
+	 * to changes on the new input (using model-specific means), and deregistering the viewer 
+	 * from the old input. In response to these change notifications, the content provider
+	 * propagates the changes to the viewer.
+	 * </p>
+	 *
+	 * @param viewer the viewer
+	 * @param oldInput the old input element, or <code>null</code> if the viewer
+	 *   did not previously have an input
+	 * @param newInput the new input element, or <code>null</code> if the viewer
+	 *   does not have an input
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		// do nothing
+	}
+
+	/**
+	 * Sorts a list of categories, in place.
+	 *
+	 * @param list java.util.List
+	 */
+	protected void sortCategories(List list) {
+		int size = list.size();
+		if (size < 2)
+			return;
+	
+		Map categories = AudioCore.getInstance().getCategories();
+	
+		for (int i = 0; i < size - 1; i++) {
+			for (int j = i+1; j < size; j++) {
+				String a = (String) list.get(i);
+				String aa = (String) categories.get(a);
+				String b = (String) list.get(j);
+				String bb = (String) categories.get(b);
+				if (aa.compareTo(bb) > 0) {
+					list.set(i, b);
+					list.set(j, a);
+				}
+			}
+		}
+	}
+
+	/**
+	 * Sorts a list of sounds, in place.
+	 *
+	 * @param sounds java.util.List
+	 */
+	protected void sortSounds(List sounds) {
+		int size = sounds.size();
+		if (size < 2)
+			return;
+	
+		for (int i = 0; i < size - 1; i++) {
+			for (int j = i+1; j < size; j++) {
+				Sound a = (Sound) sounds.get(i);
+				Sound b = (Sound) sounds.get(j);
+				if (a.getName().compareTo(b.getName()) > 0) {
+					sounds.set(i, b);
+					sounds.set(j, a);
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioTableLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioTableLabelProvider.java
new file mode 100644
index 0000000..f24a8d4
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioTableLabelProvider.java
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.audio;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.core.runtime.*;
+import java.net.URL;
+import java.util.Map;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.wst.server.ui.internal.ImageResource;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.viewers.ILockedLabelProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+/**
+ * Audio table label provider.
+ */
+class AudioTableLabelProvider implements ITableLabelProvider, ILockedLabelProvider {
+	protected AudioPreferencePage page;
+
+	/**
+	 * AudioTableLabelProvider constructor comment.
+	 * 
+	 * @param page the preference page
+	 */
+	public AudioTableLabelProvider(AudioPreferencePage page) {
+		super();
+		this.page = page;
+	}
+
+	/**
+	 * Adds a listener to this label provider. 
+	 * Has no effect if an identical listener is already registered.
+	 * <p>
+	 * Label provider listeners are informed about state changes 
+	 * that affect the rendering of the viewer that uses this label provider.
+	 * </p>
+	 *
+	 * @param listener a label provider listener
+	 */
+	public void addListener(ILabelProviderListener listener) {
+		// do nothing
+	}
+
+	/**
+	 * Disposes of this label provider.  When a label provider is
+	 * attached to a viewer, the viewer will automatically call
+	 * this method when the viewer is being closed.  When label providers
+	 * are used outside of the context of a viewer, it is the client's
+	 * responsibility to ensure that this method is called when the
+	 * provider is no longer needed.
+	 */
+	public void dispose() {
+		// do nothing
+	}
+
+	/**
+	 * @see ITableLabelProvider#getColumnImage(java.lang.Object, int)
+	 */
+	public Image getColumnImage(Object element, int columnIndex) {
+		AudioCore core = AudioCore.getInstance();
+	
+		if (columnIndex == 0) {
+			if (element instanceof String) {
+				if (element != AudioTableContentProvider.MISC_CATEGORY) {
+					if (core.isCategoryEnabled((String) element))
+						return ImageResource.getImage(ImageResource.IMG_AUDIO_ENABLED);
+					return ImageResource.getImage(ImageResource.IMG_AUDIO_DISABLED);
+				}
+				return null;
+			}
+			Sound sound = (Sound) element;
+			if (!core.isCategoryEnabled(sound.getCategory()))
+				return ImageResource.getImage(ImageResource.IMG_AUDIO_UNAVAILABLE);
+			if (core.isSoundEnabled(sound.getId()))
+				return ImageResource.getImage(ImageResource.IMG_AUDIO_ENABLED);
+			return ImageResource.getImage(ImageResource.IMG_AUDIO_DISABLED);
+		} else if (columnIndex == 1) {
+			if (element instanceof String)
+				return ImageResource.getImage(ImageResource.IMG_AUDIO_CATEGORY);
+			return ImageResource.getImage(ImageResource.IMG_AUDIO_SOUND);
+		}
+		return null;
+	}
+
+	/**
+	 * @see ITableLabelProvider#getColumnText(java.lang.Object, int)
+	 */
+	public String getColumnText(Object element, int columnIndex) {
+		if (element instanceof String) {
+			String categoryId = (String) element;
+			if (columnIndex == 1) {
+				if (categoryId.equals(AudioTableContentProvider.MISC_CATEGORY))
+					return ""; //(Miscellaneous)";
+				Map categories = AudioCore.getInstance().getCategories();
+				return (String) categories.get(categoryId);
+			}
+			return "";
+		}
+		Sound sound = (Sound) element;
+		if (columnIndex == 0)
+			return "";
+		else if (columnIndex == 1) {
+			String s = sound.getName();
+			if (s != null)
+				return s;
+			return Messages.audioUnknown;
+		} else if (columnIndex == 2) {
+			IPath path = page.getUserSoundPath(sound.getId());
+			if (path != null)
+				return path.lastSegment();
+			
+			URL url = page.getSoundURL(sound.getId());
+			if (url == null)
+				return Messages.audioNone;
+			return Messages.audioDefault;
+		}
+		return "";
+	}
+
+	/**
+	 * Returns whether the label would be affected 
+	 * by a change to the given property of the given element.
+	 * This can be used to optimize a non-structural viewer update.
+	 * If the property mentioned in the update does not affect the label,
+	 * then the viewer need not update the label.
+	 *
+	 * @param element the element
+	 * @param property the property
+	 * @return <code>true</code> if the label would be affected,
+	 *    and <code>false</code> if it would be unaffected
+	 */
+	public boolean isLabelProperty(Object element, String property) {
+		return false;
+	}
+
+	/**
+	 * Removes a listener to this label provider.
+	 * Has no affect if an identical listener is not registered.
+	 *
+	 * @param listener a label provider listener
+	 */
+	public void removeListener(ILabelProviderListener listener) {
+		// do nothing
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.server.ui.internal.audio.ILockedLabelProvider#isLocked(java.lang.Object)
+	 */
+	public boolean isLocked(Object element) {
+		if (element instanceof String)
+			return true;
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/Sound.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/Sound.java
new file mode 100644
index 0000000..de29438
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/Sound.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.audio;
+
+import java.net.URL;
+/**
+ * A single sound.
+ */
+class Sound {
+	protected String id;
+	protected String name;
+	public URL location;
+	protected String category;
+
+	/**
+	 * Sound constructor comment.
+	 */
+	public Sound() {
+		super();
+	}
+
+	/**
+	 * Sound constructor comment.
+	 * 
+	 * @param id an id
+	 * @param category a category
+	 * @param name a name
+	 * @param loc location
+	 */
+	public Sound(String id, String category, String name, URL loc) {
+		super();
+	
+		this.id = id;
+		this.category = category;
+		this.name = name;
+		this.location = loc;
+	}
+
+	/**
+	 * 
+	 * @return org.eclipse.audio.Category
+	 */
+	public String getCategory() {
+		return category;
+	}
+
+	/**
+	 * 
+	 * @return java.lang.String
+	 */
+	public String getId() {
+		return id;
+	}
+
+	/**
+	 * 
+	 * @return java.net.URL
+	 */
+	public URL getLocation() {
+		return location;
+	}
+
+	/**
+	 * 
+	 * @return java.lang.String
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * 
+	 * @param newCategory org.eclipse.audio.Category
+	 */
+	public void setCategory(String newCategory) {
+		category = newCategory;
+	}
+
+	/**
+	 * 
+	 * @param newId java.lang.String
+	 */
+	public void setId(String newId) {
+		id = newId;
+	}
+
+	/**
+	 * 
+	 * @param newLocation java.net.URL
+	 */
+	public void setLocation(URL newLocation) {
+		location = newLocation;
+	}
+
+	/**
+	 * 
+	 * @param newName java.lang.String
+	 */
+	public void setName(String newName) {
+		name = newName;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/XMLMemento.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/XMLMemento.java
new file mode 100644
index 0000000..de3c1de
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/XMLMemento.java
@@ -0,0 +1,334 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.audio;
+
+import java.io.*;
+import java.util.*;
+import org.w3c.dom.*;
+import org.xml.sax.*;
+import javax.xml.parsers.*;
+import javax.xml.transform.*;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.eclipse.ui.IMemento;
+/**
+ * A Memento is a class independent container for persistence
+ * info.  It is a reflection of 3 storage requirements.
+ *
+ * 1)   We need the ability to persist an object and restore it.  
+ * 2)   The class for an object may be absent.  If so we would 
+ *      like to skip the object and keep reading. 
+ * 3)   The class for an object may change.  If so the new class 
+ *      should be able to read the old persistence info.
+ *
+ * We could ask the objects to serialize themselves into an 
+ * ObjectOutputStream, DataOutputStream, or Hashtable.  However 
+ * all of these approaches fail to meet the second requirement.
+ *
+ * Memento supports binary persistance with a version ID.
+ */
+public final class XMLMemento implements IMemento {
+	private Document factory;
+	private Element element;
+
+	/**
+	 * Answer a memento for the document and element.  For simplicity
+	 * you should use createReadRoot and createWriteRoot to create the initial
+	 * mementos on a document.
+	 */
+	private XMLMemento(Document doc, Element el) {
+		factory = doc;
+		element = el;
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public IMemento createChild(String type) {
+		Element child = factory.createElement(type);
+		element.appendChild(child);
+		return new XMLMemento(factory, child);
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public IMemento createChild(String type, String id) {
+		Element child = factory.createElement(type);
+		child.setAttribute(TAG_ID, id);
+		element.appendChild(child);
+		return new XMLMemento(factory, child);
+	}
+	
+	/**
+	 * Create a Document from a Reader and answer a root memento for reading 
+	 * a document.
+	 */
+	protected static XMLMemento createReadRoot(Reader reader) {
+		Document document = null;
+		try {
+			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+			DocumentBuilder parser = factory.newDocumentBuilder();
+			document = parser.parse(new InputSource(reader));
+			Node node = document.getFirstChild();
+			if (node instanceof Element)
+				return new XMLMemento(document, (Element) node);
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+	
+	/**
+	 * Answer a root memento for writing a document.
+	 * 
+	 * @param type a type
+	 * @return a memento
+	 */
+	public static XMLMemento createWriteRoot(String type) {
+		Document document;
+		try {
+			document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+			Element element = document.createElement(type);
+			document.appendChild(element);
+			return new XMLMemento(document, element);            
+		} catch (ParserConfigurationException e) {
+			throw new Error(e);
+		}
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public IMemento getChild(String type) {
+		
+		// Get the nodes.
+		NodeList nodes = element.getChildNodes();
+		int size = nodes.getLength();
+		if (size == 0)
+			return null;
+	
+		// Find the first node which is a child of this node.
+		for (int nX = 0; nX < size; nX ++) {
+			Node node = nodes.item(nX);
+			if (node instanceof Element) {
+				Element element2 = (Element)node;
+				if (element2.getNodeName().equals(type))
+					return new XMLMemento(factory, element2);
+			}
+		}
+	
+		// A child was not found.
+		return null;
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public IMemento [] getChildren(String type) {
+	
+		// Get the nodes.
+		NodeList nodes = element.getChildNodes();
+		int size = nodes.getLength();
+		if (size == 0)
+			return new IMemento[0];
+	
+		// Extract each node with given type.
+		ArrayList list = new ArrayList(size);
+		for (int nX = 0; nX < size; nX ++) {
+			Node node = nodes.item(nX);
+			if (node instanceof Element) {
+				Element element2 = (Element)node;
+				if (element2.getNodeName().equals(type))
+					list.add(element2);
+			}
+		}
+	
+		// Create a memento for each node.
+		size = list.size();
+		IMemento [] results = new IMemento[size];
+		for (int x = 0; x < size; x ++) {
+			results[x] = new XMLMemento(factory, (Element)list.get(x));
+		}
+		return results;
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public Float getFloat(String key) {
+		Attr attr = element.getAttributeNode(key);
+		if (attr == null)
+			return null; 
+		String strValue = attr.getValue();
+		try {
+			return new Float(strValue);
+		} catch (NumberFormatException e) {
+			return null;
+		}
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public String getID() {
+		return element.getAttribute(TAG_ID);
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public Integer getInteger(String key) {
+		Attr attr = element.getAttributeNode(key);
+		if (attr == null)
+			return null; 
+		String strValue = attr.getValue();
+		try {
+			return new Integer(strValue);
+		} catch (NumberFormatException e) {
+			return null;
+		}
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public String getString(String key) {
+		Attr attr = element.getAttributeNode(key);
+		if (attr == null)
+			return null; 
+		return attr.getValue();
+	}
+	
+	/**
+	 * Loads a memento from the given filename.
+	 *
+	 * @param in java.io.InputStream
+	 * @return org.eclipse.ui.IMemento
+	 */
+	public static IMemento loadMemento(InputStream in) {
+		Document document = null;
+		try {
+			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+			DocumentBuilder parser = factory.newDocumentBuilder();
+			document = parser.parse(in);
+			Node node = document.getFirstChild();
+			if (node instanceof Element)
+				return new XMLMemento(document, (Element) node);
+		} catch (Exception e) {
+			// ignore
+		} finally {
+			try {
+				in.close();
+			} catch (Exception e) {
+				// ignore
+			}
+		}
+		return null;
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	private void putElement(Element element2) {
+		NamedNodeMap nodeMap = element2.getAttributes();
+		int size = nodeMap.getLength();
+		for (int i = 0; i < size; i++){
+			Attr attr = (Attr)nodeMap.item(i);
+			putString(attr.getName(),attr.getValue());
+		}
+					
+		NodeList nodes = element2.getChildNodes();
+		size = nodes.getLength();
+		for (int i = 0; i < size; i ++) {
+			Node node = nodes.item(i);
+			if (node instanceof Element) {
+				XMLMemento child = (XMLMemento)createChild(node.getNodeName());
+				child.putElement((Element)node);
+			}
+		}
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public void putFloat(String key, float f) {
+		element.setAttribute(key, String.valueOf(f));
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public void putInteger(String key, int n) {
+		element.setAttribute(key, String.valueOf(n));
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public void putMemento(IMemento memento) {
+		XMLMemento xmlMemento = (XMLMemento) memento;
+		putElement(xmlMemento.element);
+	}
+	
+	/*
+	 * @see IMemento
+	 */
+	public void putString(String key, String value) {
+		if (value == null)
+			return;
+		element.setAttribute(key, value);
+	}
+	
+	/**
+	 * Save this Memento to a Writer.
+	 */
+	protected void save(OutputStream os) throws IOException {
+		Result result = new StreamResult(os);
+		Source source = new DOMSource(factory);
+		try {
+			Transformer transformer = TransformerFactory.newInstance().newTransformer();
+			transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
+			transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
+			transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$
+			transformer.transform(source, result);            
+		}
+		catch (TransformerConfigurationException e) {
+			throw (IOException) (new IOException().initCause(e));
+		}
+		catch (TransformerException e) {
+			throw (IOException) (new IOException().initCause(e));
+		}
+	}
+
+	/**
+	 * Returns the data of the Text node of the memento. Each memento is allowed
+	 * only one Text node.
+	 * 
+	 * @return the data of the Text node of the memento, or <code>null</code>
+	 * if the memento has no Text node.
+	 */
+	public String getTextData() {
+		return null;
+	}
+	
+	/**
+	 * Sets the memento's Text node to contain the given data. Creates the Text node if
+	 * none exists. If a Text node does exist, it's current contents are replaced. 
+	 * Each memento is allowed only one text node.
+	 *
+	 * @param data the data to be placed on the Text node
+	 */
+	public void putTextData(String data) {
+		// do nothing
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/ServerCommand.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/ServerCommand.java
index f76735b..8653915 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/ServerCommand.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/ServerCommand.java
@@ -10,36 +10,43 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.command;
 
+import org.eclipse.core.commands.operations.AbstractOperation;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.core.util.Task;
 /**
  * A command on a server.
  */
-public abstract class ServerCommand extends Task {
+public abstract class ServerCommand extends AbstractOperation {
 	protected IServerWorkingCopy server;
 
 	/**
 	 * ServerCommand constructor.
 	 * 
 	 * @param server a server
+	 * @param name a label
 	 */
-	public ServerCommand(IServerWorkingCopy server) {
-		super();
+	public ServerCommand(IServerWorkingCopy server, String name) {
+		super(name);
 		this.server = server;
 	}
 
-	/**
-	 * Returns true if this command can be undone.
-	 * @return boolean
-	 */
-	public boolean canUndo() {
-		return true;
+	public abstract void execute();
+
+	public IStatus execute(IProgressMonitor monitor, IAdaptable adapt) {
+		execute();
+		return null;
+	}
+
+	public abstract void undo();
+
+	public IStatus undo(IProgressMonitor monitor, IAdaptable adapt) {
+		undo();
+		return null;
 	}
 	
-	public abstract boolean execute();
-	
-	public void execute(IProgressMonitor monitor) {
-		execute();
+	public IStatus redo(IProgressMonitor monitor, IAdaptable adapt) {
+		return execute(monitor, adapt);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishDefaultCommand.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishDefaultCommand.java
index a254d72..ffec80f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishDefaultCommand.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishDefaultCommand.java
@@ -17,45 +17,27 @@
  * Command to change the server's auto-publish setting.
  */
 public class SetServerAutoPublishDefaultCommand extends ServerCommand {
-	protected boolean time;
-	protected boolean oldTime;
+	protected int setting;
+	protected int oldSetting;
 
 	/**
 	 * SetServerAutoPublishDefaultCommand constructor.
 	 * 
 	 * @param server a server
-	 * @param time <code>true</code> to use the default time
+	 * @param setting the auto-publish setting
 	 */
-	public SetServerAutoPublishDefaultCommand(IServerWorkingCopy server, boolean time) {
-		super(server);
-		this.time = time;
+	public SetServerAutoPublishDefaultCommand(IServerWorkingCopy server, int setting) {
+		super(server, Messages.serverEditorOverviewAutoPublishCommand);
+		this.setting = setting;
 	}
 
 	/**
 	 * Execute the command.
-	 * @return boolean
 	 */
-	public boolean execute() {
+	public void execute() {
 		ServerWorkingCopy swc = (ServerWorkingCopy) server;
-		oldTime = swc.getAutoPublishDefault();
-		swc.setAutoPublishDefault(time);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.serverEditorOverviewAutoPublishDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.serverEditorOverviewAutoPublishCommand;
+		oldSetting = swc.getAutoPublishSetting();
+		swc.setAutoPublishSetting(setting);
 	}
 
 	/**
@@ -63,6 +45,6 @@
 	 */
 	public void undo() {
 		ServerWorkingCopy swc = (ServerWorkingCopy) server;
-		swc.setAutoPublishDefault(oldTime);
+		swc.setAutoPublishSetting(oldSetting);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishTimeCommand.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishTimeCommand.java
index 5b3af6f..e1b3c9a 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishTimeCommand.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishTimeCommand.java
@@ -27,35 +27,17 @@
 	 * @param time a publish time
 	 */
 	public SetServerAutoPublishTimeCommand(IServerWorkingCopy server, int time) {
-		super(server);
+		super(server, Messages.serverEditorOverviewAutoPublishCommand);
 		this.time = time;
 	}
 
 	/**
 	 * Execute the command.
-	 * @return boolean
 	 */
-	public boolean execute() {
+	public void execute() {
 		ServerWorkingCopy swc = (ServerWorkingCopy) server;
 		oldTime = swc.getAutoPublishTime();
 		swc.setAutoPublishTime(time);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.serverEditorOverviewAutoPublishDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.serverEditorOverviewAutoPublishCommand;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerConfigurationFolderCommand.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerConfigurationFolderCommand.java
new file mode 100644
index 0000000..931bb61
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerConfigurationFolderCommand.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.command;
+
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.wst.server.core.IServerWorkingCopy;
+import org.eclipse.wst.server.ui.internal.Messages;
+/**
+ * Command to change the server configuration folder.
+ */
+public class SetServerConfigurationFolderCommand extends ServerCommand {
+	protected IFolder folder;
+	protected IFolder oldFolder;
+
+	/**
+	 * SetServerConfigurationFolderCommand constructor.
+	 * 
+	 * @param server a server
+	 * @param folder a new server configuration location
+	 */
+	public SetServerConfigurationFolderCommand(IServerWorkingCopy server, IFolder folder) {
+		super(server, Messages.serverEditorOverviewServerHostnameCommand);
+		this.folder = folder;
+	}
+
+	/**
+	 * Execute the command.
+	 */
+	public void execute() {
+		oldFolder = server.getServerConfiguration();
+		server.setServerConfiguration(folder);
+	}
+
+	/**
+	 * Undo the command.
+	 */
+	public void undo() {
+		server.setServerConfiguration(oldFolder);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerHostnameCommand.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerHostnameCommand.java
index ca03dfb..158bd84 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerHostnameCommand.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerHostnameCommand.java
@@ -26,34 +26,16 @@
 	 * @param name a hostname or IP address
 	 */
 	public SetServerHostnameCommand(IServerWorkingCopy server, String name) {
-		super(server);
+		super(server, Messages.serverEditorOverviewServerHostnameCommand);
 		this.name = name;
 	}
 
 	/**
 	 * Execute the command.
-	 * @return boolean
 	 */
-	public boolean execute() {
+	public void execute() {
 		oldName = server.getHost();
 		server.setHost(name);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.serverEditorOverviewServerHostnameDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.serverEditorOverviewServerHostnameCommand;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerNameCommand.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerNameCommand.java
index b29c3bc..7ba416f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerNameCommand.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerNameCommand.java
@@ -26,34 +26,16 @@
 	 * @param name a name for the server
 	 */
 	public SetServerNameCommand(IServerWorkingCopy server, String name) {
-		super(server);
+		super(server, Messages.serverEditorOverviewServerNameCommand);
 		this.name = name;
 	}
 
 	/**
 	 * Execute the command.
-	 * @return boolean
 	 */
-	public boolean execute() {
+	public void execute() {
 		oldName = server.getName();
 		server.setName(name);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.serverEditorOverviewServerNameDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.serverEditorOverviewServerNameCommand;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerRuntimeCommand.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerRuntimeCommand.java
index 0dc5e38..70c9a06 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerRuntimeCommand.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerRuntimeCommand.java
@@ -27,34 +27,16 @@
 	 * @param runtime a server runtime
 	 */
 	public SetServerRuntimeCommand(IServerWorkingCopy server, IRuntime runtime) {
-		super(server);
+		super(server, Messages.serverEditorOverviewRuntimeCommand);
 		this.runtime = runtime;
 	}
 
 	/**
 	 * Execute the command.
-	 * @return boolean
 	 */
-	public boolean execute() {
+	public void execute() {
 		oldRuntime = server.getRuntime();
 		server.setRuntime(runtime);
-		return true;
-	}
-
-	/**
-	 * Returns this command's description.
-	 * @return java.lang.String
-	 */
-	public String getDescription() {
-		return Messages.serverEditorOverviewRuntimeDescription;
-	}
-
-	/**
-	 * Returns this command's label.
-	 * @return java.lang.String
-	 */
-	public String getName() {
-		return Messages.serverEditorOverviewRuntimeCommand;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java
index 1920064..bfa2e0c 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java
@@ -19,14 +19,14 @@
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.ui.editor.ICommandManager;
 import org.eclipse.wst.server.ui.editor.IServerEditorPartInput;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
@@ -41,7 +41,7 @@
 	private static final int MAX_HISTORY = 200;
 
 	class ServerResourceCommand {
-		ITask command;
+		IUndoableOperation command;
 		String id;
 	}
 	
@@ -246,7 +246,7 @@
 		return (info != null && info.count == 1);
 	}
 	
-	protected IServerEditorPartInput getPartInput(String serverId, ICommandManager serverCommandManager) {
+	protected IServerEditorPartInput getPartInput(String serverId, ServerResourceCommandManager serverCommandManager) {
 		CommandManagerInfo serverInfo = null;
 		IServerWorkingCopy server = null;
 		boolean serverReadOnly = false;
@@ -281,7 +281,7 @@
 	 * @param id an id
 	 * @param command a task
 	 */
-	public void executeCommand(String id, ITask command) {
+	public void executeCommand(String id, IUndoableOperation command) {
 		if (!command.canUndo() && !undoList.isEmpty() && ServerUIPlugin.getPreferences().getPromptBeforeIrreversibleChange()) {
 			try {
 				Display d = Display.getCurrent();
@@ -301,8 +301,8 @@
 		src.command = command;
 
 		try {
-			command.execute(new NullProgressMonitor());
-		} catch (CoreException ce) {
+			command.execute(new NullProgressMonitor(), null);
+		} catch (ExecutionException ce) {
 			return;
 		}
 
@@ -406,7 +406,7 @@
 	 * @param a an id
 	 * @return a task
 	 */
-	public ITask getUndoCommand(String a) {
+	public IUndoableOperation getUndoCommand(String a) {
 		int size = undoList.size();
 		for (int i = size - 1; i >= 0; i--) {
 			ServerResourceCommand src = (ServerResourceCommand) undoList.get(i);
@@ -422,7 +422,7 @@
 	 * @param a an id
 	 * @return a task
 	 */
-	public ITask getRedoCommand(String a) {
+	public IUndoableOperation getRedoCommand(String a) {
 		int size = redoList.size();
 		for (int i = size - 1; i >= 0; i--) {
 			ServerResourceCommand src = (ServerResourceCommand) redoList.get(i);
@@ -516,7 +516,11 @@
 		if (src == null)
 			return;
 
-		src.command.undo();
+		try {
+			src.command.undo(null, null);
+		} catch (ExecutionException ee) {
+			// do something
+		}
 		undoList.remove(src);
 		firePropertyChangeEvent(PROP_UNDO, src.id, null);
 		redoList.add(src);
@@ -542,8 +546,8 @@
 			return;
 
 		try {
-			src.command.execute(new NullProgressMonitor());
-		} catch (CoreException ce) {
+			src.command.execute(new NullProgressMonitor(), null);
+		} catch (ExecutionException ce) {
 			return;
 		}
 		redoList.remove(src);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IOrdered.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IOrdered.java
index 608944c..8872f8b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IOrdered.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IOrdered.java
@@ -22,8 +22,6 @@
  * </p>
  * 
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface IOrdered {
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IServerEditorInput.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IServerEditorInput.java
index 3badd8a..61ec8d9 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IServerEditorInput.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IServerEditorInput.java
@@ -18,8 +18,6 @@
  * and server configuration.
  *
  * <p>This interface is not intended to be implemented by clients.</p>
- * 
- * @since 1.0
  */
 public interface IServerEditorInput extends IEditorInput {
 	public static final String EDITOR_ID = ServerUIPlugin.PLUGIN_ID + ".editor";
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IServerEditorPageSectionFactory.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IServerEditorPageSectionFactory.java
index 92f4bed..4743853 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IServerEditorPageSectionFactory.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/IServerEditorPageSectionFactory.java
@@ -11,7 +11,7 @@
 package org.eclipse.wst.server.ui.internal.editor;
 
 import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.ui.editor.IServerEditorSection;
+import org.eclipse.wst.server.ui.editor.ServerEditorSection;
 /**
  *
  */
@@ -50,5 +50,5 @@
 	 * 
 	 * @return the section
 	 */
-	public IServerEditorSection createSection();
+	public ServerEditorSection createSection();
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
index df68426..961b1bf 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
@@ -16,10 +16,24 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationType;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.jface.preference.IPreferenceNode;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.preference.PreferenceManager;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -31,35 +45,41 @@
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.ContainerSelectionDialog;
 import org.eclipse.ui.forms.FormColors;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
 import org.eclipse.ui.forms.events.HyperlinkEvent;
-import org.eclipse.ui.forms.events.IHyperlinkListener;
 import org.eclipse.ui.forms.widgets.*;
 import org.eclipse.ui.help.IWorkbenchHelpSystem;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.internal.ServerType;
 import org.eclipse.wst.server.core.util.SocketUtil;
 import org.eclipse.wst.server.ui.editor.*;
 import org.eclipse.wst.server.ui.internal.ContextIds;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
+import org.eclipse.wst.server.ui.internal.Trace;
 import org.eclipse.wst.server.ui.internal.command.*;
-import org.eclipse.wst.server.ui.internal.task.FinishWizardFragment;
-import org.eclipse.wst.server.ui.internal.task.SaveRuntimeTask;
 import org.eclipse.wst.server.ui.internal.wizard.ClosableWizardDialog;
 import org.eclipse.wst.server.ui.internal.wizard.TaskWizard;
+import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
  * Server general editor page.
  */
 public class OverviewEditorPart extends ServerEditorPart {
 	protected Text serverName;
-	protected Label serverConfigurationName;
+	protected Text serverConfigurationName;
 	protected Text hostname;
 	protected Combo runtimeCombo;
 	protected Button autoPublishDefault;
+	protected Button autoPublishDisable;
 	protected Button autoPublishOverride;
 	protected Spinner autoPublishTime;
+	
+	protected Color colorDefault;
+	protected Color colorRed;
 
 	protected boolean updating;
 
@@ -74,16 +94,20 @@
 		super();
 	}
 
-	protected ICommandManager getCommandManager() {
-		return commandManager;
-	}
-
 	/**
 	 * 
 	 */
 	protected void addChangeListener() {
 		listener = new PropertyChangeListener() {
 			public void propertyChange(PropertyChangeEvent event) {
+				if (event.getPropertyName().equals("configuration-id") && serverConfigurationName != null) {
+					IFolder folder = getServer().getServerConfiguration();
+					if (folder == null || !folder.exists())
+						serverConfigurationName.setForeground(colorRed);
+					else
+						serverConfigurationName.setForeground(colorDefault);
+				}
+				validate();
 				if (updating)
 					return;
 				updating = true;
@@ -101,6 +125,19 @@
 						if (runtimes[i].equals(runtime))
 							runtimeCombo.select(i);
 					}
+				} else if (event.getPropertyName().equals("configuration-id") && serverConfigurationName != null) {
+					String path = (String) event.getNewValue();
+					serverConfigurationName.setText(path);
+				} else if (event.getPropertyName().equals(Server.PROP_AUTO_PUBLISH_TIME)) {
+					Integer curAutoPublishTime = (Integer)event.getNewValue();
+					autoPublishTime.setSelection(curAutoPublishTime.intValue());
+				} else if (event.getPropertyName().equals(Server.PROP_AUTO_PUBLISH_SETTING)) {
+					Integer autoPublishSetting = (Integer)event.getNewValue();
+					int setting = autoPublishSetting.intValue();
+					autoPublishDefault.setSelection(setting == Server.AUTO_PUBLISH_DEFAULT);
+					autoPublishOverride.setSelection(setting == Server.AUTO_PUBLISH_OVERRIDE);
+					autoPublishDisable.setSelection(setting == Server.AUTO_PUBLISH_DISABLE);
+					autoPublishTime.setEnabled(setting == Server.AUTO_PUBLISH_OVERRIDE);
 				}
 				updating = false;
 			}
@@ -119,7 +156,7 @@
 	 *
 	 * @param parent the parent control
 	 */
-	public final void createPartControl(Composite parent) {
+	public final void createPartControl(final Composite parent) {
 		FormToolkit toolkit = getFormToolkit(parent.getDisplay());
 		
 		ScrolledForm form = toolkit.createScrolledForm(parent);
@@ -146,14 +183,38 @@
 		leftColumnComp.setLayout(layout);
 		leftColumnComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
 		
-		Section section = toolkit.createSection(leftColumnComp, ExpandableComposite.TWISTIE|ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
-		section.setText(Messages.serverEditorOverviewSection);
-		section.setDescription(Messages.serverEditorOverviewDescription);
+		createGeneralSection(leftColumnComp, toolkit);
+		
+		insertSections(leftColumnComp, "org.eclipse.wst.server.editor.overview.left");
+		
+		// right column
+		Composite rightColumnComp = toolkit.createComposite(columnComp);
+		layout = new GridLayout();
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		layout.verticalSpacing = 10;
+		layout.horizontalSpacing = 0;
+		rightColumnComp.setLayout(layout);
+		rightColumnComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
+		
+		createAutoPublishSection(rightColumnComp, toolkit);
+		
+		insertSections(rightColumnComp, "org.eclipse.wst.server.editor.overview.right");
+		
+		form.reflow(true);
+		
+		initialize();
+	}
+
+	protected void createGeneralSection(Composite leftColumnComp, FormToolkit toolkit) {
+		Section section = toolkit.createSection(leftColumnComp, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
+		section.setText(Messages.serverEditorOverviewGeneralSection);
+		section.setDescription(Messages.serverEditorOverviewGeneralDescription);
 		section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
 
 		Composite composite = toolkit.createComposite(section);
-		layout = new GridLayout();
-		layout.numColumns = 2;
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 3;
 		layout.marginHeight = 5;
 		layout.marginWidth = 10;
 		layout.verticalSpacing = 5;
@@ -164,39 +225,39 @@
 		whs.setHelp(composite, ContextIds.EDITOR_OVERVIEW_PAGE);
 		toolkit.paintBordersFor(composite);
 		section.setClient(composite);
-
+		
 		// server name
 		if (server != null) {
 			createLabel(toolkit, composite, Messages.serverEditorOverviewServerName);
 			
 			serverName = toolkit.createText(composite, server.getName());
 			GridData data = new GridData(GridData.FILL_HORIZONTAL);
+			data.horizontalSpan = 2;
 			serverName.setLayoutData(data);
 			serverName.addModifyListener(new ModifyListener() {
 				public void modifyText(ModifyEvent e) {
 					if (updating)
 						return;
 					updating = true;
-					getCommandManager().executeCommand(new SetServerNameCommand(getServer(), serverName.getText()));
+					execute(new SetServerNameCommand(getServer(), serverName.getText()));
 					updating = false;
 				}
 			});
 			whs.setHelp(serverName, ContextIds.EDITOR_SERVER);
-		}
 		
-		// hostname
-		if (server != null) {
+			// hostname
 			createLabel(toolkit, composite, Messages.serverEditorOverviewServerHostname);
 			
 			hostname = toolkit.createText(composite, server.getHost());
-			GridData data = new GridData(GridData.FILL_HORIZONTAL);
+			data = new GridData(GridData.FILL_HORIZONTAL);
+			data.horizontalSpan = 2;
 			hostname.setLayoutData(data);
 			hostname.addModifyListener(new ModifyListener() {
 				public void modifyText(ModifyEvent e) {
 					if (updating)
 						return;
 					updating = true;
-					getCommandManager().executeCommand(new SetServerHostnameCommand(getServer(), hostname.getText()));
+					execute(new SetServerHostnameCommand(getServer(), hostname.getText()));
 					updating = false;
 				}
 			});
@@ -217,8 +278,7 @@
 				toolkit.createLabel(composite, runtime.getName());
 			else {
 				runtimeCombo = new Combo(composite, SWT.READ_ONLY);
-				GridData data = new GridData(GridData.FILL_HORIZONTAL);
-				runtimeCombo.setLayoutData(data);
+				runtimeCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 				updateRuntimeCombo();
 				
 				int size = runtimes.length;
@@ -234,7 +294,7 @@
 								return;
 							updating = true;
 							IRuntime newRuntime = runtimes[runtimeCombo.getSelectionIndex()];
-							getCommandManager().executeCommand(new SetServerRuntimeCommand(getServer(), newRuntime));
+							execute(new SetServerRuntimeCommand(getServer(), newRuntime));
 							updating = false;
 						} catch (Exception ex) {
 							// ignore
@@ -247,23 +307,13 @@
 				whs.setHelp(runtimeCombo, ContextIds.EDITOR_RUNTIME);
 			}
 			
-			createLabel(toolkit, composite, "");
 			Hyperlink link = toolkit.createHyperlink(composite, Messages.serverEditorOverviewRuntimeEdit, SWT.NONE);
-			//GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-			//link.setLayoutData(data);
-			link.addHyperlinkListener(new IHyperlinkListener() {
-				public void linkEntered(HyperlinkEvent e) {
-					// ignore
-				}
-
-				public void linkExited(HyperlinkEvent e) {
-					// ignore
-				}
-
+			link.addHyperlinkListener(new HyperlinkAdapter() {
 				public void linkActivated(HyperlinkEvent e) {
 					editRuntime(runtime);
 				}
 			});
+			link.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
 		}
 		
 		// server configuration path
@@ -272,52 +322,182 @@
 			
 			IFolder folder = server.getServerConfiguration();
 			if (folder == null)
-				serverConfigurationName = toolkit.createLabel(composite, Messages.elementUnknownName);
+				serverConfigurationName = toolkit.createText(composite, Messages.elementUnknownName);
 			else
-				serverConfigurationName = toolkit.createLabel(composite, "" + server.getServerConfiguration().getFullPath());
-			GridData data = new GridData(GridData.FILL_HORIZONTAL);
-			serverConfigurationName.setLayoutData(data);
+				serverConfigurationName = toolkit.createText(composite, "" + server.getServerConfiguration().getFullPath());
+			colorDefault = serverConfigurationName.getForeground();
+			colorRed = serverConfigurationName.getDisplay().getSystemColor(SWT.COLOR_RED); 
+			if (folder == null || !folder.exists())
+				serverConfigurationName.setForeground(colorRed);
+			//if (!server.getServerConfiguration().getFullPath().toFile().exists())
+			
+			serverConfigurationName.setEditable(false);
+			serverConfigurationName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 			
 			whs.setHelp(serverConfigurationName, ContextIds.EDITOR_CONFIGURATION);
-		}
-		
-		// auto-publish
-		if (server != null) {
-			//Label label = createLabel(toolkit, composite, Messages.serverEditorOverviewServerHostname"));
-			//label.
 			
-			autoPublishDefault = toolkit.createButton(composite, Messages.serverEditorOverviewAutoPublishDefault, SWT.RADIO);
-			GridData data = new GridData(GridData.FILL_HORIZONTAL);
-			data.horizontalSpan = 2;
-			autoPublishDefault.setLayoutData(data);
-			Server svr = (Server) server;
-			autoPublishDefault.setSelection(svr.getAutoPublishDefault());
-			whs.setHelp(autoPublishDefault, ContextIds.EDITOR_AUTOPUBLISH_DEFAULT);
-			
-			autoPublishOverride = toolkit.createButton(composite, Messages.serverEditorOverviewAutoPublishOverride, SWT.RADIO);
-			autoPublishOverride.setSelection(!svr.getAutoPublishDefault());
-			whs.setHelp(autoPublishOverride, ContextIds.EDITOR_AUTOPUBLISH_OVERRIDE);
-			
-			autoPublishOverride.addSelectionListener(new SelectionAdapter() {
+			final IFolder currentFolder = server.getServerConfiguration();
+			Button browse = toolkit.createButton(composite, Messages.serverEditorOverviewServerConfigurationBrowse, SWT.PUSH);
+			browse.addSelectionListener(new SelectionAdapter() {
 				public void widgetSelected(SelectionEvent e) {
-					if (updating)
-						return;
-					updating = true;
-					getCommandManager().executeCommand(new SetServerAutoPublishDefaultCommand(getServer(), autoPublishDefault.getSelection()));
-					updating = false;
-					autoPublishTime.setEnabled(autoPublishOverride.getSelection());
+					ContainerSelectionDialog dialog = new ContainerSelectionDialog(serverConfigurationName.getShell(),
+						currentFolder, true, Messages.serverEditorOverviewServerConfigurationBrowseMessage);
+					dialog.showClosedProjects(false);
+					
+					if (dialog.open() != Window.CANCEL) {
+						Object[] result = dialog.getResult();
+						if (result != null && result.length == 1) {
+							IPath path = (IPath) result[0];
+							
+							IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+							IResource resource = root.findMember(path);
+							if (resource != null && resource instanceof IFolder) {
+								IFolder folder2 = (IFolder) resource;
+							
+								if (updating)
+									return;
+								updating = true;
+								execute(new SetServerConfigurationFolderCommand(getServer(), folder2));
+								serverConfigurationName.setText(folder2.getFullPath().toString());
+								updating = false;
+							}
+						}
+					}
 				}
 			});
+			browse.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+		}
+		
+		if (server != null) {
+			IServerType serverType = server.getServerType();
+			if (serverType.supportsLaunchMode(ILaunchManager.RUN_MODE) || serverType.supportsLaunchMode(ILaunchManager.DEBUG_MODE)
+					|| serverType.supportsLaunchMode(ILaunchManager.PROFILE_MODE)) {
+				ILaunchConfigurationType launchType = ((ServerType) serverType).getLaunchConfigurationType();
+				if (launchType != null && launchType.isPublic()) {
+					final Hyperlink link = toolkit.createHyperlink(composite, Messages.serverEditorOverviewOpenLaunchConfiguration, SWT.NONE);
+					GridData data = new GridData();
+					data.horizontalSpan = 2;
+					link.setLayoutData(data);
+					link.addHyperlinkListener(new HyperlinkAdapter() {
+						public void linkActivated(HyperlinkEvent e) {
+							try {
+								ILaunchConfiguration launchConfig = ((Server) getServer()).getLaunchConfiguration(true, null);
+								// TODO: use correct launch group
+								DebugUITools.openLaunchConfigurationPropertiesDialog(link.getShell(), launchConfig, "org.eclipse.debug.ui.launchGroup.run");
+							} catch (CoreException ce) {
+								Trace.trace(Trace.SEVERE, "Could not create launch configuration", ce);
+							}
+						}
+					});
+				}
+			}
+		}
+	}
+
+	protected void createAutoPublishSection(Composite rightColumnComp, FormToolkit toolkit) {
+		Section section = toolkit.createSection(rightColumnComp, ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR | Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
+		section.setText(Messages.serverEditorOverviewAutoPublishSection);
+		section.setDescription(Messages.serverEditorOverviewAutoPublishDescription);
+		section.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
+
+		Composite composite = toolkit.createComposite(section);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.marginHeight = 5;
+		layout.marginWidth = 10;
+		layout.verticalSpacing = 5;
+		layout.horizontalSpacing = 15;
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
+		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
+		whs.setHelp(composite, ContextIds.EDITOR_OVERVIEW_PAGE);
+		toolkit.paintBordersFor(composite);
+		section.setClient(composite);
+		
+		//	 auto-publish
+		if (server != null) {
+			final Server svr = (Server) server;
+			int publishSetting = svr.getAutoPublishSetting();
+			autoPublishDefault = toolkit.createButton(composite, Messages.serverEditorOverviewAutoPublishDefault, SWT.RADIO);
+			GridData data = new GridData(GridData.FILL_HORIZONTAL);
+			autoPublishDefault.setLayoutData(data);
+			autoPublishDefault.setSelection(publishSetting == Server.AUTO_PUBLISH_DEFAULT);
+			whs.setHelp(autoPublishDefault, ContextIds.EDITOR_AUTOPUBLISH_DEFAULT);
 			
-			//autoPublishTime = toolkit.createText(composite, svr.getAutoPublishTime() + "");
+			Hyperlink editDefaults = toolkit.createHyperlink(composite, Messages.serverEditorOverviewAutoPublishDefaultEdit, SWT.NONE);
+			editDefaults.addHyperlinkListener(new HyperlinkAdapter() {
+				public void linkActivated(HyperlinkEvent e) {
+					showPreferencePage();
+				}
+			});
+			editDefaults.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+			whs.setHelp(editDefaults, ContextIds.EDITOR_AUTOPUBLISH_DEFAULT);
+			
+			autoPublishDisable = toolkit.createButton(composite, Messages.serverEditorOverviewAutoPublishDisable, SWT.RADIO);
+			data = new GridData(GridData.FILL_HORIZONTAL);
+			data.horizontalSpan = 2;
+			autoPublishDisable.setLayoutData(data);
+			autoPublishDisable.setSelection(publishSetting == Server.AUTO_PUBLISH_DISABLE);
+			whs.setHelp(autoPublishDisable, ContextIds.EDITOR_AUTOPUBLISH_DISABLE);
+			
+			autoPublishOverride = toolkit.createButton(composite, Messages.serverEditorOverviewAutoPublishOverride, SWT.RADIO);
+			autoPublishOverride.setSelection(publishSetting == Server.AUTO_PUBLISH_OVERRIDE);
+			data = new GridData(GridData.FILL_HORIZONTAL);
+			data.horizontalSpan = 2;
+			autoPublishOverride.setLayoutData(data);
+			whs.setHelp(autoPublishOverride, ContextIds.EDITOR_AUTOPUBLISH_OVERRIDE);
+			
+			final Label autoPublishTimeLabel = toolkit.createLabel(composite, Messages.serverEditorOverviewAutoPublishOverrideInterval);
+			data = new GridData();
+			data.horizontalIndent = 20;
+			autoPublishTimeLabel.setLayoutData(data);
+			autoPublishTimeLabel.setEnabled(autoPublishOverride.getSelection());
+			
 			autoPublishTime = new Spinner(composite, SWT.BORDER);
 			autoPublishTime.setMinimum(0);
 			autoPublishTime.setMaximum(120);
 			autoPublishTime.setSelection(svr.getAutoPublishTime());
-			data = new GridData(GridData.FILL_HORIZONTAL);
+			data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+			data.widthHint = 60;
 			autoPublishTime.setLayoutData(data);
 			autoPublishTime.setEnabled(autoPublishOverride.getSelection());
-			whs.setHelp(autoPublishTime, ContextIds.EDITOR_AUTOPUBLISH_TIME);
+			whs.setHelp(autoPublishTime, ContextIds.EDITOR_AUTOPUBLISH_OVERRIDE);
+			
+			autoPublishOverride.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					if (updating || !autoPublishOverride.getSelection())
+						return;
+					updating = true;
+					execute(new SetServerAutoPublishDefaultCommand(getServer(), Server.AUTO_PUBLISH_OVERRIDE));
+					updating = false;
+					autoPublishTimeLabel.setEnabled(autoPublishOverride.getSelection());
+					autoPublishTime.setEnabled(autoPublishOverride.getSelection());
+				}
+			});
+			
+			autoPublishDefault.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					if (updating || !autoPublishDefault.getSelection())
+						return;
+					updating = true;
+					execute(new SetServerAutoPublishDefaultCommand(getServer(), Server.AUTO_PUBLISH_DEFAULT));
+					updating = false;
+					autoPublishTimeLabel.setEnabled(autoPublishOverride.getSelection());
+					autoPublishTime.setEnabled(autoPublishOverride.getSelection());
+				}
+			});
+			
+			autoPublishDisable.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					if (updating || !autoPublishDisable.getSelection())
+						return;
+					updating = true;
+					execute(new SetServerAutoPublishDefaultCommand(getServer(), Server.AUTO_PUBLISH_DISABLE));
+					updating = false;
+					autoPublishTimeLabel.setEnabled(autoPublishOverride.getSelection());
+					autoPublishTime.setEnabled(autoPublishOverride.getSelection());
+				}
+			});
 			
 			autoPublishTime.addModifyListener(new ModifyListener() {
 				public void modifyText(ModifyEvent e) {
@@ -325,7 +505,7 @@
 						return;
 					updating = true;
 					try {
-						getCommandManager().executeCommand(new SetServerAutoPublishTimeCommand(getServer(), autoPublishTime.getSelection()));
+						execute(new SetServerAutoPublishTimeCommand(getServer(), autoPublishTime.getSelection()));
 					} catch (Exception ex) {
 						// ignore
 					}
@@ -333,57 +513,58 @@
 				}
 			});
 		}
-		
-		insertSections(leftColumnComp, "org.eclipse.wst.server.editor.overview.left");
-		
-		// right column
-		Composite rightColumnComp = toolkit.createComposite(columnComp);
-		layout = new GridLayout();
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
-		layout.verticalSpacing = 10;
-		layout.horizontalSpacing = 0;
-		rightColumnComp.setLayout(layout);
-		rightColumnComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
-		
-		insertSections(rightColumnComp, "org.eclipse.wst.server.editor.overview.right");
-		
-		form.setContent(columnComp);
-		form.reflow(true);
-
-		initialize();
 	}
-	
+
 	protected void editRuntime(IRuntime runtime) {
 		IRuntimeWorkingCopy runtimeWorkingCopy = runtime.createWorkingCopy();
 		if (showWizard(runtimeWorkingCopy) != Window.CANCEL) {
 			try {
-				runtimeWorkingCopy.save(false, new NullProgressMonitor());
+				runtimeWorkingCopy.save(false, null);
 			} catch (Exception ex) {
 				// ignore
 			}
 		}
 	}
-	
+
+	protected boolean showPreferencePage() {
+		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
+		IPreferenceNode node = manager.find("org.eclipse.wst.server.ui.preferencePage");
+		PreferenceManager manager2 = new PreferenceManager();
+		manager2.addToRoot(node);
+		
+		final PreferenceDialog dialog = new PreferenceDialog(getSite().getShell(), manager2);
+		final boolean[] result = new boolean[] { false };
+		BusyIndicator.showWhile(getSite().getShell().getDisplay(), new Runnable() {
+			public void run() {
+				dialog.create();
+				if (dialog.open() == Window.OK)
+					result[0] = true;
+			}
+		});
+		return result[0];
+	}
+
 	protected int showWizard(final IRuntimeWorkingCopy runtimeWorkingCopy) {
 		String title = Messages.wizEditRuntimeWizardTitle;
 		final WizardFragment fragment2 = ServerUIPlugin.getWizardFragment(runtimeWorkingCopy.getRuntimeType().getId());
 		if (fragment2 == null)
 			return Window.CANCEL;
 		
+		TaskModel taskModel = new TaskModel();
+		taskModel.putObject(TaskModel.TASK_RUNTIME, runtimeWorkingCopy);
+
 		WizardFragment fragment = new WizardFragment() {
 			protected void createChildFragments(List list) {
+				list.add(fragment2);
 				list.add(new WizardFragment() {
-					public void enter() {
-						getTaskModel().putObject(TaskModel.TASK_RUNTIME, runtimeWorkingCopy);
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
 					}
 				});
-				list.add(fragment2);
-				list.add(new FinishWizardFragment(new SaveRuntimeTask()));
 			}
 		};
 		
-		TaskWizard wizard = new TaskWizard(title, fragment);
+		TaskWizard wizard = new TaskWizard(title, fragment, taskModel);
 		wizard.setForcePreviousAndNextButtons(true);
 		ClosableWizardDialog dialog = new ClosableWizardDialog(getEditorSite().getShell(), wizard);
 		return dialog.open();
@@ -425,7 +606,7 @@
 		if (server != null)
 			server.removePropertyChangeListener(listener);
 	}
-	
+
 	/* (non-Javadoc)
 	 * Initializes the editor part with a site and input.
 	 */
@@ -453,9 +634,28 @@
 		}
 		
 		updating = false;
+		validate();
 	}
-	
-	//protected void validate() { }
+
+	protected void validate() {
+		if (server != null && server.getServerType().hasServerConfiguration()) {
+			IFolder folder = getServer().getServerConfiguration();
+			if (folder == null || !folder.exists()) {
+				setErrorMessage(Messages.errorMissingConfiguration);
+				return;
+			}
+		}
+		
+		if (autoPublishTime.isEnabled() && autoPublishOverride.getSelection()) {
+			int i = autoPublishTime.getSelection();
+			if (i < 10) {
+				setErrorMessage(Messages.serverEditorOverviewAutoPublishInvalid);
+				return;
+			}
+		}
+		
+		setErrorMessage(null);
+	}
 
 	/*
 	 * @see IWorkbenchPart#setFocus()
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditor.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditor.java
index 97a846d..42a8e13 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditor.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditor.java
@@ -15,6 +15,7 @@
 import java.util.*;
 import java.util.List;
 
+import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.runtime.*;
@@ -31,6 +32,7 @@
 
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.internal.ServerWorkingCopy;
 import org.eclipse.wst.server.ui.ServerUICore;
 import org.eclipse.wst.server.ui.editor.*;
 import org.eclipse.wst.server.ui.internal.*;
@@ -100,6 +102,7 @@
 
 	protected IServerWorkingCopy server;
 	protected String serverId;
+	protected String serverName;
 
 	protected GlobalCommandManager commandManager;
 
@@ -132,6 +135,8 @@
 	
 	// Used for disabling resource change check when saving through editor.
 	protected boolean isSaving = false;
+	
+	protected static Map pageToFactory = new HashMap();
 
 	/**
 	 * ServerEditor constructor comment.
@@ -140,7 +145,7 @@
 		super();
 		
 		ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
-
+		
 		undoAction = new Action() {
 			public void run() {
 				getCommandManager().undo(serverId);
@@ -150,7 +155,7 @@
 		undoAction.setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO));
 		//undoAction.setHoverImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO_HOVER));
 		//undoAction.setDisabledImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_UNDO_DISABLED));
-	
+		
 		redoAction = new Action() {
 			public void run() {
 				getCommandManager().redo(serverId);
@@ -172,7 +177,7 @@
 			}
 		});
 	}
-	
+
 	protected void createActions() {
 		List actionList = new ArrayList();
 		
@@ -191,13 +196,22 @@
 		actionList.toArray(editorActions);
 	}
 
+	public static IServerEditorPartFactory getPageFactory(ServerEditorPart part) {
+		try {
+			return (IServerEditorPartFactory) pageToFactory.get(part);
+		} catch (Exception e) {
+			// ignore
+		}
+		return null;
+	}
+
 	/**
 	 * Creates the pages of this multi-page editor.
 	 * <p>
 	 * Subclasses of <code>MultiPageEditor</code> must implement this method.
 	 * </p>
 	 */
-	protected void createPages() {	
+	protected void createPages() {
 		try {
 			int index = 0;
 			serverPages = new ArrayList();
@@ -217,14 +231,11 @@
 					try {
 						IEditorPart page = factory.createPage();
 						if (page != null) {
-							if (page instanceof ServerEditorPart) {
-								ServerEditorPart srep = (ServerEditorPart) page;
-								srep.setPageFactory(factory);
-							}
+							pageToFactory.put(page, factory);
 							index = addPage(page, editorPartInput);
-							serverPages.add(page);
-		
 							setPageText(index, factory.getName());
+							
+							serverPages.add(page);
 					
 							pageCount ++;
 						}
@@ -260,7 +271,21 @@
 		
 		if (resourceListener != null)
 			ServerCore.removeServerLifecycleListener(resourceListener);
-
+		
+		if (serverName != null && !server.getName().equals(serverName)) {
+			// only prompt if the server is in the workspace or there is a configuration
+			if (server.getServerConfiguration() != null || ((Server)server).getFile() != null) {
+				String title = Messages.editorServerEditor;
+				String message = Messages.editorRenameFiles;
+				if (MessageDialog.openQuestion(getEditorSite().getShell(), title,  message))
+					try {
+						((ServerWorkingCopy)server).renameFiles(null);
+					} catch (Exception e) {
+						Trace.trace(Trace.SEVERE, "Error renaming server", e);
+					}
+			}
+		}
+		
 		super.dispose();
 		if (commandManager != null)
 			commandManager.removePropertyChangeListener(listener);
@@ -279,7 +304,7 @@
 	 * @see IEditorPart
 	 */
 	public void doSave(IProgressMonitor monitor) {
-		// Set the isSaving flag to true.
+		// set the isSaving flag to true
 		isSaving = true;
 		
 		// check pages for errors first
@@ -307,7 +332,7 @@
 
 			EclipseUtil.openError(getEditorSite().getShell(), sb.toString());
 			monitor.setCanceled(true);
-			// Reset the isSaving flag.
+			// reset the isSaving flag
 			isSaving = false;
 			return;
 		}
@@ -321,7 +346,7 @@
 			monitor.beginTask(NLS.bind(Messages.savingTask, name), ticks);
 			if (server != null)
 				ticks /= 2;
-
+			
 			if (server != null)  {
 				server.save(false, ProgressUtil.getSubMonitorFor(monitor, ticks));
 				getCommandManager().resourceSaved(serverId);
@@ -332,17 +357,17 @@
 			if (server != null)
 				setPartName(labelProvider.getText(server));
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error saving from configuration editor", e);
-	
+			Trace.trace(Trace.SEVERE, "Error saving server editor", e);
+			
 			monitor.setCanceled(true);
-	
+			
 			String title = Messages.editorSaveErrorDialog;
 			String message = NLS.bind(Messages.editorSaveErrorMessage, e.getLocalizedMessage());
 			MessageDialog.openError(getEditorSite().getShell(), title,  message);
 		} finally {
 			monitor.done();
 		}
-		// Reset the isSaving flag.
+		// reset the isSaving flag
 		isSaving = false;
 	}
 
@@ -624,7 +649,6 @@
 	 */
 	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
 		commandManager = GlobalCommandManager.getInstance();
-		
 		super.init(site, input);
 
 		if (input instanceof IFileEditorInput) {
@@ -652,6 +676,7 @@
 			setPartName(labelProvider.getText(server));
 			setTitleImage(labelProvider.getImage(server));
 			setTitleToolTip(serverId);
+			serverName = server.getName();
 		} else
 			setPartName("-");
 
@@ -688,7 +713,7 @@
 		commandManager.addPropertyChangeListener(listener);
 		
 		// create editor input
-		ICommandManager serverCommandManager = null;
+		ServerResourceCommandManager serverCommandManager = null;
 		if (server != null)
 			serverCommandManager = new ServerResourceCommandManager(this, serverId, commandManager);
 		editorPartInput = commandManager.getPartInput(serverId, serverCommandManager);
@@ -739,17 +764,17 @@
 	 * Update the undo action.
 	 */
 	protected void updateUndoAction() {
-		ITask command = commandManager.getUndoCommand(serverId);
+		IUndoableOperation command = commandManager.getUndoCommand(serverId);
 		if (command == null) {
 			undoAction.setText(Messages.editorUndoDisabled);
 			undoAction.setToolTipText("");
 			undoAction.setDescription("");
 			undoAction.setEnabled(false);
 		} else {
-			String text = NLS.bind(Messages.editorUndoEnabled, new Object[] {command.getName()});
+			String text = NLS.bind(Messages.editorUndoEnabled, new Object[] {command.getLabel()});
 			undoAction.setText(text);
-			undoAction.setToolTipText(command.getDescription());
-			undoAction.setDescription(command.getDescription());
+			undoAction.setToolTipText(command.getLabel());
+			undoAction.setDescription(command.getLabel());
 			undoAction.setEnabled(true);
 		}
 	}
@@ -758,17 +783,17 @@
 	 * Update the redo action.
 	 */
 	protected void updateRedoAction() {
-		ITask command = commandManager.getRedoCommand(serverId);
+		IUndoableOperation command = commandManager.getRedoCommand(serverId);
 		if (command == null) {
 			redoAction.setText(Messages.editorRedoDisabled);
 			redoAction.setToolTipText("");
 			redoAction.setDescription("");
 			redoAction.setEnabled(false);
 		} else {
-			String text = NLS.bind(Messages.editorRedoEnabled, new Object[] {command.getName()});
+			String text = NLS.bind(Messages.editorRedoEnabled, new Object[] {command.getLabel()});
 			redoAction.setText(text);
-			redoAction.setToolTipText(command.getDescription());
-			redoAction.setDescription(command.getDescription());
+			redoAction.setToolTipText(command.getLabel());
+			redoAction.setDescription(command.getLabel());
 			redoAction.setEnabled(true);
 		}
 	}
@@ -814,7 +839,7 @@
 	 */
 	protected void refresh() {
 		// create editor input
-		ICommandManager serverCommandManager = null;
+		ServerResourceCommandManager serverCommandManager = null;
 		if (server != null)
 			serverCommandManager = new ServerResourceCommandManager(this, serverId, commandManager);
 		editorPartInput = commandManager.getPartInput(serverId, serverCommandManager);
@@ -869,9 +894,9 @@
 	 * 
 	 */
 	protected void checkResourceState() {
-		// Do not check the resource state change if saving through the editor.
+		// do not check the resource state change if saving through the editor
 		if (isSaving) {
-			// Do nothing.
+			// do nothing
 			return;
 		}
 		
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorCore.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorCore.java
index 6acd393..39da118 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorCore.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorCore.java
@@ -14,6 +14,7 @@
 import java.util.List;
 
 import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionDelta;
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
@@ -26,7 +27,7 @@
 	private static List editorPageFactories;
 	private static List editorPageSectionFactories;
 	private static List editorActionFactories;
-	
+
 	/**
 	 * Returns a List of all editor page factories
 	 *
@@ -37,7 +38,7 @@
 			loadEditorPageFactories();
 		return editorPageFactories;
 	}
-	
+
 	/**
 	 * Returns a List of all editor page section factories
 	 *
@@ -48,17 +49,25 @@
 			loadEditorPageSectionFactories();
 		return editorPageSectionFactories;
 	}
-	
+
 	/**
 	 * Load the editor page factory extension point.
 	 */
 	private static void loadEditorPageFactories() {
 		Trace.trace(Trace.CONFIG, "->- Loading .editorPages extension point ->-");
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "editorPages");
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, ServerUIPlugin.EXTENSION_EDITOR_PAGES);
+		editorPageFactories = new ArrayList(cf.length);
+		loadEditorPageFactories(cf);
+		ServerUIPlugin.addRegistryListener();
+		Trace.trace(Trace.CONFIG, "-<- Done loading .editorPages extension point -<-");
+	}
 
+	/**
+	 * Load the editor page factory extension point.
+	 */
+	private static void loadEditorPageFactories(IConfigurationElement[] cf) {
 		int size = cf.length;
-		editorPageFactories = new ArrayList(size);
 		for (int i = 0; i < size; i++) {
 			try {
 				editorPageFactories.add(new ServerEditorPartFactory(cf[i]));
@@ -70,19 +79,50 @@
 		
 		// sort pages
 		sortOrderedList(editorPageFactories);
-		Trace.trace(Trace.CONFIG, "-<- Done loading .editorPages extension point -<-");
 	}
-	
+
+	public static void handleEditorPageFactoriesDelta(IExtensionDelta delta) {
+		if (editorPageFactories == null) // not loaded yet
+			return;
+		
+		IConfigurationElement[] cf = delta.getExtension().getConfigurationElements();
+		
+		if (delta.getKind() == IExtensionDelta.ADDED)
+			loadEditorPageFactories(cf);
+		else {
+			int size = editorPageFactories.size();
+			ServerEditorPartFactory[] sepf = new ServerEditorPartFactory[size];
+			editorPageFactories.toArray(sepf);
+			int size2 = cf.length;
+			
+			for (int i = 0; i < size; i++) {
+				for (int j = 0; j < size2; j++) {
+					if (sepf[i].getId().equals(cf[j].getAttribute("id"))) {
+						editorPageFactories.remove(sepf[i]);
+					}
+				}
+			}
+		}
+	}
+
 	/**
 	 * Load the editor page section factory extension point.
 	 */
 	private static void loadEditorPageSectionFactories() {
 		Trace.trace(Trace.CONFIG, "->- Loading .editorPageSections extension point ->-");
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "editorPageSections");
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, ServerUIPlugin.EXTENSION_EDITOR_PAGE_SECTIONS);
+		editorPageSectionFactories = new ArrayList(cf.length);
+		loadEditorPageSectionFactories(cf);
+		ServerUIPlugin.addRegistryListener();
+		Trace.trace(Trace.CONFIG, "-<- Done loading .editorPageSections extension point -<-");
+	}
 
+	/**
+	 * Load the editor page section factory extension point.
+	 */
+	private static void loadEditorPageSectionFactories(IConfigurationElement[] cf) {
 		int size = cf.length;
-		editorPageSectionFactories = new ArrayList(size);
 		for (int i = 0; i < size; i++) {
 			try {
 				editorPageSectionFactories.add(new ServerEditorPageSectionFactory(cf[i]));
@@ -94,7 +134,30 @@
 		
 		// sort sections
 		sortOrderedList(editorPageSectionFactories);
-		Trace.trace(Trace.CONFIG, "-<- Done loading .editorPageSections extension point -<-");
+	}
+
+	public static void handleEditorPageSectionFactoriesDelta(IExtensionDelta delta) {
+		if (editorPageSectionFactories == null) // not loaded yet
+			return;
+		
+		IConfigurationElement[] cf = delta.getExtension().getConfigurationElements();
+		
+		if (delta.getKind() == IExtensionDelta.ADDED)
+			loadEditorPageSectionFactories(cf);
+		else {
+			int size = editorPageSectionFactories.size();
+			ServerEditorPageSectionFactory[] seps = new ServerEditorPageSectionFactory[size];
+			editorPageSectionFactories.toArray(seps);
+			int size2 = cf.length;
+			
+			for (int i = 0; i < size; i++) {
+				for (int j = 0; j < size2; j++) {
+					if (seps[i].getId().equals(cf[j].getAttribute("id"))) {
+						editorPageSectionFactories.remove(seps[i]);
+					}
+				}
+			}
+		}
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPageSectionFactory.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPageSectionFactory.java
index 06b5a62..208a291 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPageSectionFactory.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPageSectionFactory.java
@@ -138,9 +138,9 @@
 	/**
 	 * @see IServerEditorPageSectionFactory#createSection()
 	 */
-	public IServerEditorSection createSection() {
+	public ServerEditorSection createSection() {
 		try {
-			return (IServerEditorSection) element.createExecutableExtension("class");
+			return (ServerEditorSection) element.createExecutableExtension("class");
 		} catch (Throwable t) {
 			Trace.trace(Trace.SEVERE, "Could not create server editor section", t);
 			return null;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java
index 33a4a5f..bc71268 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java
@@ -64,12 +64,15 @@
 
 	protected String[] getInsertionIds() {
 		try {
+			String insertionIds = element.getAttribute("insertionIds");
 			List list = new ArrayList();
-			StringTokenizer st = new StringTokenizer(element.getAttribute("insertionIds"), ",");
-			while (st.hasMoreTokens()) {
-				String str = st.nextToken();
-				if (str != null && str.length() > 0)
-					list.add(str.trim());
+			if (insertionIds != null && insertionIds.length() > 0) {
+				StringTokenizer st = new StringTokenizer(insertionIds, ",");
+				while (st.hasMoreTokens()) {
+					String str = st.nextToken();
+					if (str != null && str.length() > 0)
+						list.add(str.trim());
+				}
 			}
 			String[] s = new String[list.size()];
 			list.toArray(s);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartInput.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartInput.java
index 1dbfdc7..79045b2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartInput.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartInput.java
@@ -14,7 +14,6 @@
 import org.eclipse.ui.IPersistableElement;
 
 import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.ui.editor.ICommandManager;
 import org.eclipse.wst.server.ui.editor.IServerEditorPartInput;
 /**
  * 
@@ -22,10 +21,10 @@
 public class ServerEditorPartInput implements IServerEditorPartInput {
 	protected IServerWorkingCopy server;
 	protected boolean serverReadOnly;
-	protected ICommandManager serverCommandManager;
+	protected ServerResourceCommandManager serverCommandManager;
 	
-	public ServerEditorPartInput(
-			ICommandManager serverCommandManager, IServerWorkingCopy server,  boolean serverReadOnly) {
+	public ServerEditorPartInput(ServerResourceCommandManager serverCommandManager,
+			IServerWorkingCopy server,  boolean serverReadOnly) {
 		
 		this.server = server;
 		this.serverReadOnly = serverReadOnly;
@@ -74,7 +73,7 @@
 		return serverReadOnly;
 	}
 	
-	public ICommandManager getServerCommandManager() {
+	public ServerResourceCommandManager getServerCommandManager() {
 		return serverCommandManager;
 	}
 	
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerResourceCommandManager.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerResourceCommandManager.java
index a753955..bca43f3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerResourceCommandManager.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerResourceCommandManager.java
@@ -10,18 +10,18 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.editor;
 
+import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.ui.editor.ICommandManager;
 import org.eclipse.wst.server.ui.internal.Messages;
 /**
  * A command manager for a single server resource.
  */
-public class ServerResourceCommandManager implements ICommandManager {
+public class ServerResourceCommandManager {
 	protected ServerEditor editor;
 	protected GlobalCommandManager commandManager;
 	protected String id;
@@ -41,9 +41,9 @@
 	 * If the command cannot be undone, the user will be notifed
 	 * before it is executed.
 	 *
-	 * @param command ICommand
+	 * @param operation an undoable operation
 	 */
-	public void executeCommand(ITask command) {
+	public void execute(IUndoableOperation operation) {
 		if (!validateEdit())
 			return;
 
@@ -51,7 +51,7 @@
 			warnReadOnly();
 			return;
 		}
-		commandManager.executeCommand(id, command);
+		commandManager.executeCommand(id, operation);
 	}
 
 	protected void warnReadOnly() {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/provisional/ServerEditorActionFactoryDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/provisional/ServerEditorActionFactoryDelegate.java
index 0859015..d60a390 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/provisional/ServerEditorActionFactoryDelegate.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/provisional/ServerEditorActionFactoryDelegate.java
@@ -17,7 +17,7 @@
 import org.eclipse.wst.server.ui.editor.IServerEditorPartInput;
 /**
  *
- * @since 1.0
+ * @plannedfor 1.0
  */
 public abstract class ServerEditorActionFactoryDelegate {
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/AddModuleTask.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/AddModuleTask.java
deleted file mode 100644
index 4e2d1d0..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/AddModuleTask.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.task;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.util.Task;
-import org.eclipse.wst.server.ui.internal.Trace;
-/**
- * 
- */
-public class AddModuleTask extends Task {
-	protected IModule module;
-
-	public AddModuleTask(IModule module) {
-		this.module = module;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.server.ui.internal.task.ITask#doTask()
-	 */
-	public void execute(IProgressMonitor monitor) throws CoreException {
-		if (module == null)
-			return;
-
-		IServer server = (IServer) getTaskModel().getObject(TaskModel.TASK_SERVER);
-		IModule parentModule = null;
-		try {
-			IModule[] parents = server.getRootModules(module, monitor);
-			if (parents != null && parents.length > 0) {
-				parentModule = parents[0];
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not find parent module", e);
-		}
-		
-		if (parentModule == null) {
-			// Use the original module since no parent module is available.
-			parentModule = module;
-		}
-
-		IModule[] modules = server.getModules();
-		int size = modules.length;
-		for (int i = 0; i < size; i++) {
-			if (parentModule.equals(modules[i]))
-				return;
-		}
-
-		IServerWorkingCopy workingCopy = server.createWorkingCopy();
-		workingCopy.modifyModules(new IModule[] { parentModule }, new IModule[0], monitor);
-		getTaskModel().putObject(TaskModel.TASK_SERVER, workingCopy.save(false, monitor));
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/CompositeTask.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/CompositeTask.java
deleted file mode 100644
index 068e14c..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/CompositeTask.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.task;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.server.core.util.Task;
-/**
- * 
- */
-public class CompositeTask extends Task {
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.server.ui.internal.task.Task#doTask(org.eclipse.core.runtime.IProgressMonitor)
-	 */
-	public void execute(IProgressMonitor monitor) {
-		// do nothing
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/FinishWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/FinishWizardFragment.java
deleted file mode 100644
index f263ff4..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/FinishWizardFragment.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.task;
-
-import org.eclipse.wst.server.core.ITask;
-import org.eclipse.wst.server.ui.wizard.WizardFragment;
-/**
- * 
- */
-public class FinishWizardFragment extends WizardFragment {
-	protected ITask finishTask;
-	
-	public FinishWizardFragment(ITask finishTask) {
-		this.finishTask = finishTask;
-	}
-	
-	public ITask createFinishTask() {
-		return finishTask;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/InputTask.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/InputTask.java
deleted file mode 100644
index 0ceb32b..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/InputTask.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.task;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.server.core.util.Task;
-/**
- * 
- */
-public class InputTask extends Task {
-	protected String[] ids;
-	protected Object[] values;
-	
-	public InputTask(String id, Object value) {
-		this(new String[] { id }, new Object[] { value });
-	}
-
-	public InputTask(String[] ids, Object[] values) {
-		this.ids = ids;
-		this.values = values;
-	}
-	
-	public void execute(IProgressMonitor monitor) {
-		int size = ids.length;
-		for (int i = 0; i < size; i++) {
-			getTaskModel().putObject(ids[i], values[i]);
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/InputWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/InputWizardFragment.java
deleted file mode 100644
index 39d70c7..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/InputWizardFragment.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.task;
-
-import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.ui.wizard.WizardFragment;
-/**
- * 
- */
-public class InputWizardFragment extends WizardFragment {
-	protected String[] ids;
-	protected Object[] values;
-	
-	public InputWizardFragment(String id, Object value) {
-		this(new String[] { id }, new Object[] { value });
-	}
-
-	public InputWizardFragment(String[] ids, Object[] values) {
-		this.ids = ids;
-		this.values = values;
-	}
-	
-	/*public void enter() {
-		int size = ids.length;
-		for (int i = 0; i < size; i++)
-			getTaskModel().putObject(ids[i], values[i]);
-	}*/
-	
-	public void setTaskModel(TaskModel taskModel) {
-		super.setTaskModel(taskModel);
-		if (taskModel == null)
-			return;
-		
-		int size = ids.length;
-		for (int i = 0; i < size; i++)
-			taskModel.putObject(ids[i], values[i]);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/ModifyModulesTask.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/ModifyModulesTask.java
deleted file mode 100644
index ad39b38..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/ModifyModulesTask.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.task;
-
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.ProjectProperties;
-import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.core.internal.ServerType;
-import org.eclipse.wst.server.core.util.Task;
-import org.eclipse.wst.server.ui.internal.EclipseUtil;
-/**
- * 
- */
-public class ModifyModulesTask extends Task {
-	protected List add;
-	protected List remove;
-	
-	public ModifyModulesTask() {
-		// do nothing
-	}
-	
-	public void setAddModules(List add) {
-		this.add = add;
-	}
-	
-	public void setRemoveModules(List remove) {
-		this.remove = remove;
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.server.ui.internal.task.ITask#doTask()
-	 */
-	public void execute(IProgressMonitor monitor) throws CoreException {
-		if ((add == null || add.isEmpty()) && (remove == null || remove.isEmpty()))
-			return;
-
-		IServerWorkingCopy workingCopy = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
-		
-		boolean sbp = ((ServerType) workingCopy.getServerType()).startBeforePublish();
-		if (sbp) {
-			IServer server = workingCopy.getOriginal();
-			int state = server.getServerState();
-			if (state == IServer.STATE_STOPPED || state == IServer.STATE_UNKNOWN) {
-				String mode = (String) getTaskModel().getObject(TaskModel.TASK_LAUNCH_MODE);
-				if (mode == null || mode.length() == 0)
-					mode = ILaunchManager.DEBUG_MODE;
-				
-				server.synchronousStart(mode, monitor);
-			}
-		}
-
-		// modify modules
-		IModule[] remove2 = new IModule[0];
-		if (remove != null) {
-			remove2 = new IModule[remove.size()];
-			remove.toArray(remove2);
-		}
-		
-		IModule[] add2 = new IModule[0];
-		if (add != null) {
-			add2 = new IModule[add.size()];
-			add.toArray(add2);
-		}
-		
-		IFile file = ((Server)workingCopy).getFile();
-		if (file != null) {
-			IProject project = file.getProject();
-			
-			if (!file.getProject().exists())
-				EclipseUtil.createNewServerProject(null, project.getName(), null, monitor);
-			
-			ProjectProperties pp = (ProjectProperties) ServerCore.getProjectProperties(project);
-			if (!pp.isServerProject())
-				pp.setServerProject(true, monitor);
-		}
-		
-		workingCopy.modifyModules(add2, remove2, monitor);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/SaveRuntimeTask.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/SaveRuntimeTask.java
deleted file mode 100644
index 35689c2..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/SaveRuntimeTask.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.task;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
-import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.util.Task;
-/**
- * 
- */
-public class SaveRuntimeTask extends Task {
-	public SaveRuntimeTask() {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.server.ui.internal.task.ITask#doTask()
-	 */
-	public void execute(IProgressMonitor monitor) throws CoreException {
-		IRuntime runtime = (IRuntime) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
-		if (runtime != null && runtime instanceof IRuntimeWorkingCopy) {
-			IRuntimeWorkingCopy workingCopy = (IRuntimeWorkingCopy) runtime;
-			if (workingCopy.isDirty())
-				getTaskModel().putObject(TaskModel.TASK_RUNTIME, workingCopy.save(false, monitor));
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/SaveServerTask.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/SaveServerTask.java
deleted file mode 100644
index 6691704..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/SaveServerTask.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.task;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.ProjectProperties;
-import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.core.util.Task;
-import org.eclipse.wst.server.ui.internal.EclipseUtil;
-/**
- * 
- */
-public class SaveServerTask extends Task {
-	public SaveServerTask() {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.server.ui.internal.task.ITask#doTask()
-	 */
-	public void execute(IProgressMonitor monitor) throws CoreException {
-		IServer server = (IServer) getTaskModel().getObject(TaskModel.TASK_SERVER);
-		if (server != null && server instanceof IServerWorkingCopy) {
-			IServerWorkingCopy workingCopy = (IServerWorkingCopy) server;
-			if (workingCopy.isDirty()) {
-				IFile file = ((Server)workingCopy).getFile();
-				if (file != null) {
-					IProject project = file.getProject();
-					
-					if (!file.getProject().exists())
-						EclipseUtil.createNewServerProject(null, project.getName(), null, monitor);
-					
-					ProjectProperties pp = (ProjectProperties) ServerCore.getProjectProperties(project);
-					if (!pp.isServerProject())
-						pp.setServerProject(true, monitor);
-				}
-				getTaskModel().putObject(TaskModel.TASK_SERVER, workingCopy.save(false, monitor));
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/TempSaveRuntimeTask.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/TempSaveRuntimeTask.java
deleted file mode 100644
index a62226e..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/TempSaveRuntimeTask.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.task;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
-import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.util.Task;
-/**
- * 
- */
-public class TempSaveRuntimeTask extends Task {
-	public TempSaveRuntimeTask() {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see com.ibm.wtp.server.ui.internal.task.ITask#doTask()
-	 */
-	public void execute(IProgressMonitor monitor) throws CoreException {
-		IRuntime runtime = (IRuntime) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
-		if (runtime != null && runtime instanceof IRuntimeWorkingCopy) {
-			IRuntimeWorkingCopy workingCopy = (IRuntimeWorkingCopy) runtime;
-			if (!workingCopy.isDirty())
-				return;
-		
-			runtime = workingCopy.save(false, monitor);
-			getTaskModel().putObject(TaskModel.TASK_RUNTIME, runtime.createWorkingCopy());
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/TempSaveServerTask.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/TempSaveServerTask.java
deleted file mode 100644
index b8613a7..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/task/TempSaveServerTask.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.task;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.ProjectProperties;
-import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.core.util.Task;
-import org.eclipse.wst.server.ui.internal.EclipseUtil;
-/**
- * 
- */
-public class TempSaveServerTask extends Task {
-	public TempSaveServerTask() {
-		// do nothing
-	}
-
-	/* (non-Javadoc)
-	 * @see com.ibm.wtp.server.ui.internal.task.ITask#doTask()
-	 */
-	public void execute(IProgressMonitor monitor) throws CoreException {
-		IServer server = (IServer) getTaskModel().getObject(TaskModel.TASK_SERVER);
-		if (server != null && server instanceof IServerWorkingCopy) {
-			IServerWorkingCopy workingCopy = (IServerWorkingCopy) server;
-			if (!workingCopy.isDirty())
-				return;
-			
-			IFile file = ((Server)workingCopy).getFile();
-			if (file != null) {
-				IProject project = file.getProject();
-				
-				if (!file.getProject().exists())
-					EclipseUtil.createNewServerProject(null, project.getName(), null, monitor);
-				
-				ProjectProperties pp = (ProjectProperties) ServerCore.getProjectProperties(project);
-				if (!pp.isServerProject())
-					pp.setServerProject(true, monitor);
-			}
-			IRuntime runtime = workingCopy.getRuntime();
-			
-			server = workingCopy.save(false, monitor);
-			workingCopy = server.createWorkingCopy();
-			
-			workingCopy.setRuntime(runtime);
-			if (workingCopy.getServerType().hasServerConfiguration()) {
-				((Server)workingCopy).importConfiguration(runtime, null);
-			}
-			getTaskModel().putObject(TaskModel.TASK_SERVER, workingCopy);
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ModifyModulesAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModifyModulesAction.java
similarity index 92%
rename from plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ModifyModulesAction.java
rename to plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModifyModulesAction.java
index 3009138..f8fa261 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ModifyModulesAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModifyModulesAction.java
@@ -8,13 +8,14 @@
  * Contributors:
  *     IBM Corporation - Initial API and implementation
  *******************************************************************************/
-package org.eclipse.wst.server.ui.internal.actions;
+package org.eclipse.wst.server.ui.internal.view.servers;
 
 import java.util.ArrayList;
 import java.util.List;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.swt.widgets.Shell;
@@ -28,15 +29,18 @@
 /**
  * Action to modify the modules of a server.
  */
-public class ModifyModulesAction implements IObjectActionDelegate {
+public class ModifyModulesAction extends Action {
 	protected IWorkbenchPart part;
 	protected IServer server;
 
 	/**
 	 * ModifyModulesAction constructor comment.
+	 * 
+	 * @param server a server
 	 */
-	public ModifyModulesAction() {
-		super();
+	public ModifyModulesAction(IServer server) {
+		super(Messages.actionModifyModules);
+		this.server = server;
 	}
 
 	/*
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModuleSloshAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModuleSloshAction.java
index ab77141..07f690f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModuleSloshAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModuleSloshAction.java
@@ -10,10 +10,20 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.view.servers;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.swt.widgets.Shell;
 
+import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.wizard.ClosableWizardDialog;
+import org.eclipse.wst.server.ui.internal.wizard.ModifyModulesWizard;
 /**
  * 
  */
@@ -36,13 +46,45 @@
 	 * @param server org.eclipse.wst.server.core.IServer
 	 */
 	public void perform(final IServer server) {
-		/*if (!ServerUIUtil.promptIfDirty(shell, server))
+		if (server == null)
 			return;
+		
+		//if (!ServerUIUtil.promptIfDirty(shell, server))
+		//	return;
+		
+		// check if there are any projects first
+		// get currently deployed modules
+		List deployed = new ArrayList();
+		List modules = new ArrayList();
+		IModule[] currentModules = server.getModules();
+		if (currentModules != null) {
+			int size = currentModules.length;
+			for (int i = 0; i < size; i++) {
+				deployed.add(currentModules[i]);
+			}
+		}
 
-		IServerConfiguration configuration = ServerUtil.getServerConfiguration(server);
-		ModifyModulesWizard wizard = new ModifyModulesWizard(configuration);
+		// get remaining modules
+		IModule[] modules2 = ServerUtil.getModules(server.getServerType().getRuntimeType().getModuleTypes());
+		if (modules != null) {
+			int size = modules2.length;
+			for (int i = 0; i < size; i++) {
+				IModule module = modules2[i];
+				if (!deployed.contains(module)) {
+					IStatus status = server.canModifyModules(new IModule[] { module }, null, null);
+					if (status != null && status.getSeverity() != IStatus.ERROR)
+						modules.add(module);
+				}
+			}
+		}
+		
+		if (deployed.isEmpty() && modules.isEmpty()) {
+			MessageDialog.openInformation(shell, Messages.defaultDialogTitle, Messages.dialogAddRemoveModulesNone);
+			return;
+		}
+
+		ModifyModulesWizard wizard = new ModifyModulesWizard(server);
 		ClosableWizardDialog dialog = new ClosableWizardDialog(shell, wizard);
-		if (dialog.open() == Window.CANCEL)
-			return;*/
+		dialog.open();
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerPortAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerPortAction.java
index 7f8dc80..d63b630 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerPortAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerPortAction.java
@@ -41,13 +41,14 @@
 		if (msps != null) {
 			int size = msps.length;
 			for (int i = 0; i < size; i++) {
-				if (port.equals(msps[i].getServerPort()) && msps[i].isStarted() &&
-						(msps[i].getContentTypes() == null || (port.getContentTypes() != null && msps[i].getContentTypes().length == port.getContentTypes().length)))
+				if (port.equals(msps[i].getServerPort()) && // msps[i].isStarted() &&
+						(msps[i].getContentTypes() == null || msps[i].getContentTypes().length == 0 ||
+						(port.getContentTypes() != null && msps[i].getContentTypes().length == port.getContentTypes().length)))
 					monitoredPort = msps[i];
 			}
 		}
 
-		checked = monitoredPort != null && monitoredPort.isStarted();
+		checked = monitoredPort != null; // && monitoredPort.isStarted();
 		setChecked(checked);
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java
index acc0473..c86ce8d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java
@@ -50,6 +50,7 @@
 			return;
 
 		PublishServerJob publishJob = new PublishServerJob(server, IServer.PUBLISH_INCREMENTAL, false);
+		publishJob.setUser(true);
 		publishJob.schedule();
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RemoveModuleAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RemoveModuleAction.java
new file mode 100644
index 0000000..72fc7ba
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RemoveModuleAction.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * 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.wst.server.ui.internal.view.servers;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServerWorkingCopy;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.swt.widgets.Shell;
+/**
+ * Action for removing a module from a server.
+ */
+public class RemoveModuleAction extends Action {
+	protected IServer server;
+	protected IModule module;
+	protected Shell shell;
+
+	/**
+	 * RemoveModuleAction constructor.
+	 * 
+	 * @param shell a shell
+	 * @param server a server
+	 * @param module a module
+	 */
+	public RemoveModuleAction(Shell shell, IServer server, IModule module) {
+		super(Messages.actionRemove);
+		this.shell = shell;
+		
+		this.server = server;
+		this.module = module;
+	}
+
+	/**
+	 * Invoked when an action occurs. 
+	 */
+	public void run() {
+		if (MessageDialog.openConfirm(shell, Messages.defaultDialogTitle, Messages.dialogRemoveModuleConfirm)) {
+			try {
+				IServerWorkingCopy wc = server.createWorkingCopy();
+				wc.modifyModules(null, new IModule[] { module }, null);
+				wc.save(true, null);
+			} catch (Exception e) {
+				// ignore
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartAction.java
index 2184ad5..6375dab 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartAction.java
@@ -10,14 +10,13 @@
  **********************************************************************/
 package org.eclipse.wst.server.ui.internal.view.servers;
 
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.internal.PublishServerJob;
-import org.eclipse.wst.server.ui.internal.RestartServerJob;
+import org.eclipse.wst.server.core.internal.RestartServerJob;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
+import org.eclipse.wst.server.ui.internal.Trace;
 import org.eclipse.wst.server.ui.internal.provisional.UIDecoratorManager;
 import org.eclipse.swt.widgets.Shell;
 /**
@@ -61,22 +60,16 @@
 		if (!ServerUIPlugin.promptIfDirty(shell, server))
 			return;
 		
-		IProgressMonitor pm = Platform.getJobManager().createProgressGroup();
 		try {
-			pm.beginTask("Restarting", 100);
 			PublishServerJob publishJob = new PublishServerJob(server); 
-			publishJob.setProgressGroup(pm, 50);
-			publishJob.schedule();
 			String launchMode = mode;
 			if (launchMode == null)
 				launchMode = server.getMode();
 			RestartServerJob restartJob = new RestartServerJob(server, launchMode);
-			restartJob.setProgressGroup(pm, 50);
-			restartJob.schedule();
+			publishJob.setNextJob(restartJob);
+			publishJob.schedule();
 		} catch (Exception e) {
-			// ignore
-		} finally {
-			pm.done();
+			Trace.trace(Trace.SEVERE, "Error restarting server", e);
 		}	
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartModuleAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartModuleAction.java
index 4e6c1e3..f5fd982 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartModuleAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartModuleAction.java
@@ -10,13 +10,11 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.view.servers;
 
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.action.Action;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.ui.ServerUICore;
-import org.eclipse.wst.server.ui.internal.ServerLabelProvider;
+import org.eclipse.wst.server.ui.internal.Messages;
 /**
  * Restart a module on a server.
  */
@@ -28,24 +26,17 @@
 		super();
 		this.server = server;
 		this.module = module;
-	
-		int size = module.length;
-		setText(module[size - 1].getName());
 		
-		ServerLabelProvider slp = (ServerLabelProvider) ServerUICore.getLabelProvider();
-		setImageDescriptor(slp.getImageDescriptor(module[size - 1]));
-	
-		setEnabled(server.canRestartModule(module, null).isOK());
+		int size = module.length;
+		setText(NLS.bind(Messages.actionRestartModule, module[size - 1].getName()));
+		
+		setEnabled(server.canControlModule(module, null).isOK() && server.getModuleState(module) != IServer.STATE_STOPPED);
 	}
 
 	/**
 	 * Implementation of method defined on <code>IAction</code>.
 	 */
 	public void run() {
-		try {
-			server.restartModule(module, new NullProgressMonitor());
-		} catch (CoreException e) {
-			// ignore
-		}
+		server.restartModule(module, null);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ServerTreeAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerAction.java
similarity index 76%
rename from plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ServerTreeAction.java
rename to plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerAction.java
index da4ef55..4500312 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ServerTreeAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerAction.java
@@ -8,26 +8,25 @@
  * Contributors:
  *     IBM Corporation - Initial API and implementation
  *******************************************************************************/
-package org.eclipse.wst.server.ui.internal.view.tree;
+package org.eclipse.wst.server.ui.internal.view.servers;
 
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.wst.server.ui.internal.ServerTree;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.actions.SelectionProviderAction;
 /**
  * 
  */
-public class ServerTreeAction extends SelectionProviderAction {
+public class ServerAction extends SelectionProviderAction {
 	protected Shell shell;
 	protected byte action;
 
-	public ServerTreeAction(Shell shell, ISelectionProvider provider, String label, byte action) {
+	public ServerAction(Shell shell, ISelectionProvider provider, String label, byte action) {
 		super(provider, label);
 		this.shell = shell;
 		this.action = action;
-		setEnabled(ServerTree.isActionEnabled(getSelection(), action));
+		setEnabled(ServerActionHelper.isActionEnabled(getSelection(), action));
 	}
 	
 	/**
@@ -41,11 +40,11 @@
 	 * @param selection the new selection
 	 */
 	public void selectionChanged(ISelection selection) {
-		setEnabled(ServerTree.isActionEnabled(selection, action));
+		setEnabled(ServerActionHelper.isActionEnabled(selection, action));
 	}
 	
 	public void selectionChanged(IStructuredSelection selection) {
-		setEnabled(ServerTree.isActionEnabled(selection, action));
+		setEnabled(ServerActionHelper.isActionEnabled(selection, action));
 	}
 	
 	/**
@@ -55,6 +54,6 @@
 	 * or override <code>run(Event)</code> if they do.
 	 */
 	public void run() {
-		ServerTree.performAction(shell, getSelection(), action);
+		ServerActionHelper.performAction(shell, getSelection(), action);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerActionHelper.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerActionHelper.java
new file mode 100644
index 0000000..a766536
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerActionHelper.java
@@ -0,0 +1,247 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.view.servers;
+
+import java.util.Iterator;
+
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.ui.internal.ImageResource;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.actions.NewServerWizardAction;
+import org.eclipse.swt.widgets.Shell;
+/**
+ * 
+ */
+public class ServerActionHelper {
+	/**
+	 * Constants for actions
+	 */
+	public static final byte ACTION_OPEN = 0;
+	public static final byte ACTION_DELETE = 1;
+	public static final byte ACTION_BOOKMARK = 2;
+
+	private ServerActionHelper() {
+		// do nothing
+	}
+	
+	public static void fillContextMenu(Shell shell, ISelection selection, IMenuManager menu) {
+		MenuManager newMenu = new MenuManager(Messages.actionNew);
+		fillNewContextMenu(shell, selection, newMenu);
+		menu.add(newMenu);
+		fillOtherContextMenu(shell, selection, menu);
+	}
+	
+	public static void fillNewContextMenu(Shell shell, ISelection selection, IMenuManager menu) {
+		IAction newServerAction = new NewServerWizardAction();
+		newServerAction.setText(Messages.actionNewServer);
+		menu.add(newServerAction);
+	}
+
+	public static void fillOtherContextMenu(Shell shell, ISelection selection, IMenuManager menu) {
+		if (selection == null)
+			return;
+
+		if (selection.isEmpty() || !(selection instanceof IStructuredSelection))
+			return;
+	}
+
+	protected static void addServerActions(Shell shell, IMenuManager menu, IServer server) {
+		final ISelection selection = new StructuredSelection(server);
+		ISelectionProvider provider = new ISelectionProvider() {
+			public void addSelectionChangedListener(ISelectionChangedListener listener) {
+				// do nothing
+			}
+			public ISelection getSelection() {
+				return selection;
+			}
+			public void removeSelectionChangedListener(ISelectionChangedListener listener) {
+				// do nothing
+			}
+			public void setSelection(ISelection sel) {
+				// do nothing
+			}
+		};
+	
+		// create the debug action
+		Action debugAction = new StartAction(shell, provider, "debug", ILaunchManager.DEBUG_MODE);
+		debugAction.setToolTipText(Messages.actionDebugToolTip);
+		debugAction.setText(Messages.actionDebug);
+		debugAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_DEBUG));
+		debugAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_DEBUG));
+		debugAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_DEBUG));
+		menu.add(debugAction);
+	
+		// create the start action
+		Action runAction = new StartAction(shell, provider, "start", ILaunchManager.RUN_MODE);
+		runAction.setToolTipText(Messages.actionStartToolTip);
+		runAction.setText(Messages.actionStart);
+		runAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START));
+		runAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START));
+		runAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START));
+		menu.add(runAction);
+		
+		// create the profile action
+		Action profileAction = new StartAction(shell, provider, "profile", ILaunchManager.PROFILE_MODE);
+		profileAction.setToolTipText(Messages.actionProfileToolTip);
+		profileAction.setText(Messages.actionProfile);
+		profileAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_PROFILE));
+		profileAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_PROFILE));
+		profileAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_PROFILE));
+		menu.add(profileAction);
+	
+		// create the restart action
+		MenuManager menuManager = new MenuManager(Messages.actionRestart);
+		
+		Action restartAction = new RestartAction(shell, provider, "restart", ILaunchManager.RUN_MODE);
+		restartAction.setToolTipText(Messages.actionRestartToolTip);
+		restartAction.setText(Messages.actionRestart);
+		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_RESTART));
+		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_RESTART));
+		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_RESTART));
+		menuManager.add(restartAction);
+		//menu.add(restartAction);
+		menu.add(menuManager);
+
+		// create the stop action
+		/*Action stopAction = new StopAction(shell, provider, "stop", IServerFactory.SERVER_STATE_SET_MANAGED);
+		stopAction.setToolTipText(Messages.actionStopToolTip"));
+		stopAction.setText(Messages.actionStop"));
+		stopAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_STOP));
+		stopAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_STOP));
+		stopAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_STOP));
+		menu.add(stopAction);
+
+		// create the disconnect action
+		Action disconnectAction = new StopAction(shell, provider, "disconnect", IServerFactory.SERVER_STATE_SET_ATTACHED);
+		disconnectAction.setToolTipText(Messages.actionStopToolTip2"));
+		disconnectAction.setText(Messages.actionStop2"));
+		disconnectAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_DISCONNECT));
+		disconnectAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_DISCONNECT));
+		disconnectAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_DISCONNECT));
+		menu.add(disconnectAction);*/
+
+		// create the publish action
+		Action publishAction = new PublishAction(shell, provider, "publish");
+		publishAction.setToolTipText(Messages.actionPublishToolTip);
+		publishAction.setText(Messages.actionPublish);
+		publishAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_PUBLISH));
+		publishAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_PUBLISH));
+		publishAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_PUBLISH));
+		menu.add(publishAction);
+	}
+
+	public static boolean isActionEnabled(ISelection selection, byte action) {
+		if (selection == null || action < 0)
+			return false;
+
+		if (selection.isEmpty() || !(selection instanceof IStructuredSelection))
+			return false;
+
+		IStructuredSelection sel = (IStructuredSelection) selection;
+		
+		if (action == ACTION_OPEN) {
+			return false;
+		} else if (action == ACTION_DELETE) {
+			// get selection but avoid no selection or multiple selection
+			IModule[] module = null;
+			if (!sel.isEmpty()) {
+				Iterator iterator = sel.iterator();
+				Object obj = iterator.next();
+				if (obj instanceof ModuleServer) {
+					ModuleServer ms = (ModuleServer) obj;
+					module = ms.module;
+				}
+				if (iterator.hasNext())
+					module = null;
+			}
+			
+			return (module == null || module.length == 1);
+		}
+
+		return false;
+	}
+
+	public static boolean performAction(Shell shell, ISelection selection, byte action) {
+		//if (!isActionEnabled(selection, action))
+		//	return false;
+
+		if (selection == null || action < 0)
+			return false;
+
+		if (selection.isEmpty() || !(selection instanceof IStructuredSelection))
+			return false;
+
+		IStructuredSelection sel = (IStructuredSelection) selection;
+
+		if (action == ACTION_OPEN) {
+			if (sel.size() != 1)
+				return false;
+
+			Object obj = sel.getFirstElement();
+			if (obj instanceof IServer) {
+				Action open = new OpenAction((IServer) obj);
+				open.run();
+				return true;
+			}
+			return false;
+		} else if (action == ACTION_DELETE) {
+			// get selection but avoid no selection or multiple selection
+			IServer server = null;
+			IModule[] module = null;
+			if (!sel.isEmpty()) {
+				Iterator iterator = sel.iterator();
+				Object obj = iterator.next();
+				if (obj instanceof IServer)
+					server = (IServer) obj;
+				if (obj instanceof ModuleServer) {
+					ModuleServer ms = (ModuleServer) obj;
+					server = ms.server;
+					module = ms.module;
+				}
+				if (iterator.hasNext()) {
+					server = null;
+					module = null;
+				}
+			}
+			
+			if (module == null)
+				new DeleteAction(shell, server).run();
+			else if (module.length == 1)
+				new RemoveModuleAction(shell, server, module[0]).run();
+			
+			return true;
+		}
+
+		return false;
+	}
+	
+	/**
+	 * Returns an action of the specified type, which can be used for global.
+	 * 
+	 * @param shell a shell
+	 * @param provider a selection provider
+	 * @param action an action
+	 * @return an action
+	 */
+	public static IAction getAction(Shell shell, ISelectionProvider provider, byte action) {
+		if (action == ACTION_DELETE) {
+			return new ServerAction(shell, provider, Messages.actionDelete, ServerActionHelper.ACTION_DELETE);
+		}
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
index d40bc97..9eedbce 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
@@ -13,25 +13,18 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.viewers.*;
 
 import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.IPublishListener;
-import org.eclipse.wst.server.core.internal.PublishAdapter;
 import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.ui.internal.ServerTree;
+import org.eclipse.wst.server.core.util.PublishAdapter;
 import org.eclipse.wst.server.ui.internal.Trace;
-import org.eclipse.wst.server.ui.internal.view.tree.ServerTreeAction;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Tree;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.ISelectionListener;
-import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.actions.ActionFactory;
 /**
  * Tree view showing servers and their associations.
@@ -44,6 +37,8 @@
 	protected IServerListener serverListener;
 
 	protected static Object deletedElement = null;
+	
+	//protected static Shell fShell;
 
 	// servers that are currently publishing and starting
 	protected static List publishing = new ArrayList();
@@ -86,7 +81,7 @@
 					for (int i = 0; i < size; i++) {
 						int size2 = ms.module.length;
 						IModule[] module = new IModule[size2 + 1];
-						System.arraycopy(ms.module, 0, ms2[i].module, 0, size2);
+						System.arraycopy(ms.module, 0, module, 0, size2);
 						module[size2] = children[i];
 						ms2[i] = new ModuleServer(ms.server, module);
 					}
@@ -115,47 +110,50 @@
 		}
 
 		public boolean hasChildren(Object element) {
-			if (element instanceof ModuleServer)
+			if (element instanceof ModuleServer) {
+				// Check if the module server has child modules.
+				ModuleServer curModuleServer = (ModuleServer)element;
+				IServer curServer = curModuleServer.server;
+				IModule[] curModule = curModuleServer.module;
+				if (curServer != null &&  curModule != null) {
+					IModule[] curChildModule = curServer.getChildModules(curModule, null);
+					if (curChildModule != null && curChildModule.length > 0)
+						return true;
+					
+					return false;
+				}
+				
 				return false;
+			}
 			
 			IServer server = (IServer) element;
 			return server.getModules().length > 0;
 		}
 	}
 
-	/*protected void createHover(Shell parent, Point p) {
-		final Shell fShell = new Shell(parent, SWT.NO_FOCUS | SWT.ON_TOP | SWT.RESIZE | SWT.NO_TRIM);
+	/*protected void createHoverHelp(Shell parent, Point p) {
+		if (fShell != null) {
+			fShell.dispose();
+			fShell = null;
+		}
+		fShell = new Shell(parent, SWT.NO_FOCUS | SWT.ON_TOP | SWT.RESIZE | SWT.NO_TRIM);
 		GridLayout layout = new GridLayout();
-		layout.marginHeight = 1;
-		layout.marginWidth = 1;
+		layout.marginHeight = 3;
+		layout.marginWidth = 3;
 		fShell.setLayout(layout);
 		
 		Display display = parent.getDisplay();
 		StyledText text = new StyledText(fShell, SWT.NONE);
 		text.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND));
 		text.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND));
-		text.append("Testing <b>me</b>");
+		text.append("Testing\nThis is multi-line");
 		
 		fShell.setLocation(p.x, p.y);
 		fShell.setBackground(display.getSystemColor(SWT.COLOR_BLACK));
 		fShell.pack();
 		fShell.setVisible(true);
-		
-		Thread t = new Thread() {
-			public void run() {
-				try {
-					Thread.sleep(2000);
-				} catch (Exception e) { }
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						fShell.dispose();
-					}
-				});
-			}
-		};
-		t.start();
 	}*/
-	
+
 	protected Thread thread = null;
 	protected boolean stopThread = false;
 	
@@ -164,7 +162,7 @@
 		if (thread != null)
 			return;
 		
-		thread = new Thread("Servers view animator") {
+		thread = new Thread("Servers View Animator") {
 			public void run() {
 				while (!stopThread) {
 					try {
@@ -176,7 +174,7 @@
 									update(rootElements, null);
 							}
 						});
-						Thread.sleep(200);
+						Thread.sleep(250);
 					} catch (Exception e) {
 						Trace.trace(Trace.FINEST, "Error in animated server view", e);
 					}
@@ -201,15 +199,25 @@
 	public ServerTableViewer(final ServersView view, final Tree tree) {
 		super(tree);
 		this.view = view;
-		/*table.addMouseTrackListener(new MouseTrackListener() {
+		/*tree.addMouseMoveListener(new MouseMoveListener() {
+			public void mouseMove(MouseEvent e) {
+				if (fShell != null) {
+					fShell.dispose();
+					fShell = null;
+				}
+			}
+		});
+		tree.addMouseTrackListener(new MouseTrackListener() {
 			public void mouseEnter(MouseEvent event) {
+				// ignore
 			}
 
 			public void mouseExit(MouseEvent event) {
+				// ignore
 			}
 
 			public void mouseHover(MouseEvent event) {
-				createHover(table.getShell(), table.toDisplay(event.x, event.y));
+				createHoverHelp(tree.getShell(), tree.toDisplay(event.x, event.y));
 			}
 		});*/
 	
@@ -225,9 +233,10 @@
 		addListeners();
 		
 		IActionBars actionBars = view.getViewSite().getActionBars();
-		actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), new ServerTreeAction(getControl().getShell(), this, "Delete it!", ServerTree.ACTION_DELETE));
+		actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), new ServerAction(getControl().getShell(), this, "Delete it!", ServerActionHelper.ACTION_DELETE));
 		
-		dsListener = new ISelectionListener() {
+		// TODO: add default server listener
+		/*dsListener = new ISelectionListener() {
 			public void selectionChanged(IWorkbenchPart part, ISelection selection) {
 				if (!(selection instanceof IStructuredSelection))
 					return;
@@ -238,7 +247,7 @@
 					IResource res = (IResource) obj;
 					proj = res.getProject();
 				}
-				if (proj == null) {
+				if (proj == null && obj != null) {
 					try {
 						IResource res = (IResource) Platform.getAdapterManager().getAdapter(obj, IResource.class);
 						if (res != null)
@@ -274,7 +283,7 @@
 				}
 			}
 		};
-		view.getViewSite().getPage().addSelectionListener(dsListener);
+		view.getViewSite().getPage().addSelectionListener(dsListener);*/
 	}
 
 	protected void addListeners() {
@@ -370,7 +379,7 @@
 
 	protected void handleDispose(DisposeEvent event) {
 		stopThread();
-		view.getViewSite().getPage().removeSelectionListener(dsListener);
+		//view.getViewSite().getPage().removeSelectionListener(dsListener);
 
 		ServerCore.removeServerLifecycleListener(serverResourceListener);
 		
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java
index 1acf54e..5ea7fa1 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java
@@ -42,6 +42,10 @@
  * View of server, their configurations and status.
  */
 public class ServersView extends ViewPart {
+	private static final String TAG_COLUMN_WIDTH = "columnWidth";
+
+	protected int[] cols;
+
 	protected Tree treeTable;
 	protected ServerTableViewer tableViewer;
 
@@ -55,7 +59,7 @@
 	public ServersView() {
 		super();
 	}
-	
+
 	/**
 	 * createPartControl method comment.
 	 * 
@@ -67,40 +71,24 @@
 		treeTable.setLinesVisible(false);
 		treeTable.setLayoutData(new GridData(GridData.FILL_BOTH));
 		treeTable.setFont(parent.getFont());
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(treeTable, ContextIds.VIEW_CONTROL);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(treeTable, ContextIds.VIEW_SERVERS);
 		
-		//TableLayout tableLayout = new TableLayout();
-	
 		// add columns
 		TreeColumn column = new TreeColumn(treeTable, SWT.SINGLE);
 		column.setText(Messages.viewServer);
-		column.setWidth(200);
-		//ColumnWeightData colData = new ColumnWeightData(200, 200, true);
-		//tableLayout.addColumnData(colData);
+		column.setWidth(cols[0]);
 		
-		/*column = new TreeColumn(treeTable, SWT.SINGLE);
-		column.setText(Messages.viewHost"));
-		column.setWidth(200);
-		colData = new ColumnWeightData(100, 150, true);
-		//tableLayout.addColumnData(colData);*/
-	
-		column = new TreeColumn(treeTable, SWT.SINGLE);
-		column.setText(Messages.viewStatus);
-		column.setWidth(200);
-		//colData = new ColumnWeightData(100, 150, true);
-		//tableLayout.addColumnData(colData);
-	
-		column = new TreeColumn(treeTable, SWT.SINGLE);
-		column.setText(Messages.viewSync);
-		column.setWidth(200);
-		//colData = new ColumnWeightData(100, 150, true);
-		//tableLayout.addColumnData(colData);
+		TreeColumn column2 = new TreeColumn(treeTable, SWT.SINGLE);
+		column2.setText(Messages.viewStatus);
+		column2.setWidth(cols[1]);
 		
-		//treeTable.setLayout(tableLayout);
-	
+		TreeColumn column3 = new TreeColumn(treeTable, SWT.SINGLE);
+		column3.setText(Messages.viewSync);
+		column3.setWidth(cols[2]);
+		
 		tableViewer = new ServerTableViewer(this, treeTable);
 		initializeActions(tableViewer);
-	
+		
 		treeTable.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent event) {
 				try {
@@ -161,6 +149,25 @@
 		initDragAndDrop();
 	}
 
+	public void init(IViewSite site, IMemento memento) throws PartInitException {
+		super.init(site, memento);
+		cols = new int[3];
+		for (int i = 0; i < 3; i++) {
+			cols[i] = 200;
+			if (memento != null) {
+				Integer in = memento.getInteger(TAG_COLUMN_WIDTH + i);
+				if (in != null)
+					cols[i] = in.intValue();
+			}
+		}
+	}
+
+	public void saveState(IMemento memento) {
+		TreeColumn[] tc = treeTable.getColumns();
+		for (int i = 0; i < 3; i++)
+			memento.putInteger(TAG_COLUMN_WIDTH + i, tc[i].getWidth());
+	}
+
 	protected void selectServerProcess(Object process) {
 		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow() ;
 		if (window != null) {
@@ -179,7 +186,7 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Initialize actions
 	 * 
@@ -294,7 +301,7 @@
 			cm.add(actions[i]);
 		}
 	}
-	
+
 	protected void fillContextMenu(Shell shell, IMenuManager menu) {
 		// get selection but avoid no selection or multiple selection
 		IServer server = null;
@@ -318,17 +325,22 @@
 		
 		// new action
 		MenuManager newMenu = new MenuManager(Messages.actionNew);
-		ServerTree.fillNewContextMenu(null, selection, newMenu);
+		ServerActionHelper.fillNewContextMenu(null, selection, newMenu);
 		menu.add(newMenu);
 		
 		// open action
 		if (server != null) {
 			menu.add(new OpenAction(server));
+			if (server.getServerState() == IServer.STATE_UNKNOWN)
+				menu.add(new UpdateStatusAction(server));
 			menu.add(new Separator());
 			
-			menu.add(new DeleteAction(shell, server));
+			if (module == null)
+				menu.add(new DeleteAction(shell, server));
+			else if (module.length == 1)
+				menu.add(new RemoveModuleAction(shell, server, module[0]));
 			menu.add(new Separator());
-		
+			
 			// server actions
 			for (int i = 0; i < actions.length - 1; i++) {
 				if (i == 3)
@@ -336,22 +348,6 @@
 				else
 					menu.add(actions[i]);
 			}
-		
-			// switch config
-			/*if (server.getServerType() != null && server.getServerType().hasServerConfiguration()) {
-				MenuManager menuManager = new MenuManager(Messages.actionSwitchConfiguration"));
-				menuManager.add(new SwitchConfigurationAction(shell, Messages.viewNoConfiguration"), server, null));
-	
-				IServerConfiguration[] configs = getSupportedServerConfigurations(server);
-				if (configs != null) {
-					int size = configs.length;
-					for (int i = 0; i < size; i++) {
-						menuManager.add(new SwitchConfigurationAction(shell, configs[i].getName(), server, configs[i]));
-					}
-				}
-	
-				menu.add(menuManager);
-			}*/
 			
 			// monitor
 			if (server.getServerType() != null) {
@@ -373,6 +369,9 @@
 							}
 						}
 						
+						if (!menuManager.isEmpty())
+							menuManager.add(new Separator());
+						
 						menuManager.add(new MonitorServerAction(shell2, server2));
 					}
 				});
@@ -381,63 +380,21 @@
 				menuManager.add(new MonitorServerAction(shell, server));
 				menu.add(menuManager);
 			}
+			menu.add(new SwitchServerLocationAction(server));
 		}
-	
+		
 		if (server != null && module != null) {
 			menu.add(new Separator());
-	
-			/*MenuManager restartProjectMenu = new MenuManager(Messages.actionRestartProject"));
-	
-			if (server != null) {
-				IModule[] modules = getAllContainedModules(server, null);
-				if (modules != null) {
-					int size = modules.length;
-					for (int i = 0; i < size; i++) {
-						Action action = new RestartModuleAction(server, modules[i]);
-						restartProjectMenu.add(action);
-					}
-				}
-			}
-			if (restartProjectMenu.isEmpty())
-				menu.add(new DisabledMenuManager(Messages.actionRestartProject")));
-			else
-				menu.add(restartProjectMenu);*/
-			Action action = new RestartModuleAction(server, module);
-			menu.add(action);
+			menu.add(new RestartModuleAction(server, module));
 		}
 		
+		menu.add(new Separator());
+		menu.add(actions[6]);
+		
 		menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
 		menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end"));
 	}
-	
-	/**
-	 * Returns a list of configurations that are supported by this
-	 * server.
-	 *
-	 * @param server org.eclipse.wst.server.core.IServer
-	 * @return java.util.List
-	 */
-	/*protected static IServerConfiguration[] getSupportedServerConfigurations(IServer server) {
-		if (server == null)
-			return new IServerConfiguration[0];
-	
-		List list = new ArrayList();
-	
-		IServerConfiguration[] configs = ServerCore.getServerConfigurations();
-		if (configs != null) {
-			int size = configs.length;
-			for (int i = 0; i < size; i++) {
-				//Trace.trace("Is supported configuration: " + getName(server) + " " + getName(configuration) + " " + server.isSupportedConfiguration(configuration));
-				if (server.isSupportedConfiguration(configs[i]))
-					list.add(configs[i]);
-			}
-		}
-		
-		IServerConfiguration[] sc = new IServerConfiguration[list.size()];
-		list.toArray(sc);
-		return sc;
-	}*/
-	
+
 	/**
 	 * 
 	 */
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java
index e5d3109..355700b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java
@@ -10,7 +10,9 @@
  **********************************************************************/
 package org.eclipse.wst.server.ui.internal.view.servers;
 
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerDropAdapter;
@@ -20,6 +22,7 @@
 import org.eclipse.swt.dnd.TransferData;
 import org.eclipse.ui.part.ResourceTransfer;
 import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
+import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.ui.internal.actions.RunOnServerActionDelegate;
 /**
@@ -48,13 +51,17 @@
 		
 		final IServer finalServer = server;
 		RunOnServerActionDelegate ros = new RunOnServerActionDelegate() {
-			protected IServer getServer() {
+			public IServer getServer(IModule module, String launchMode, IProgressMonitor monitor) {
 				return finalServer;
 			}
 		};
 		Action action = new Action() {
 			//
 		};
+		if (data instanceof IStructuredSelection) {
+			IStructuredSelection sel = (IStructuredSelection) data;
+			data = sel.getFirstElement();
+		}
 		ros.selectionChanged(action, new StructuredSelection(data));
 		
 		//if (!action.isEnabled())
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java
index e3e0356..93f31b1 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java
@@ -10,15 +10,16 @@
  **********************************************************************/
 package org.eclipse.wst.server.ui.internal.view.servers;
 
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.internal.PublishServerJob;
+import org.eclipse.wst.server.core.internal.ServerPreferences;
+import org.eclipse.wst.server.core.internal.ServerType;
+import org.eclipse.wst.server.core.internal.StartServerJob;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.StartServerJob;
+import org.eclipse.wst.server.ui.internal.Trace;
 import org.eclipse.swt.widgets.Shell;
 /**
  * Start a server.
@@ -52,23 +53,29 @@
 	public void perform(final IServer server) {
 		//if (!ServerUIUtil.promptIfDirty(shell, server))
 		//	return;				
-	
+		
 		if (!ServerUIPlugin.saveEditors())
 			return;
 		
-		IProgressMonitor pm = Platform.getJobManager().createProgressGroup();
-		try {
-			pm.beginTask("Starting", 10);
-			PublishServerJob publishJob = new PublishServerJob(server); 
-			publishJob.setProgressGroup(pm, 5);
-			publishJob.schedule();
+		if (!ServerPreferences.getInstance().isAutoPublishing()) {
 			StartServerJob startJob = new StartServerJob(server, launchMode);
-			startJob.setProgressGroup(pm, 5);
 			startJob.schedule();
+			return;
+		}
+		
+		try {
+			PublishServerJob publishJob = new PublishServerJob(server); 
+			StartServerJob startJob = new StartServerJob(server, launchMode);
+
+			if (((ServerType)server.getServerType()).startBeforePublish()) {
+				startJob.setNextJob(publishJob);
+				startJob.schedule();
+			} else {
+				publishJob.setNextJob(startJob);
+				publishJob.schedule();
+			}
 		} catch (Exception e) {
-			// ignore
-		} finally {
-			pm.done();
+			Trace.trace(Trace.SEVERE, "Error starting server", e);
 		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/SwitchServerLocationAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/SwitchServerLocationAction.java
new file mode 100644
index 0000000..05adf79
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/SwitchServerLocationAction.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * 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.wst.server.ui.internal.view.servers;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.action.Action;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.internal.*;
+import org.eclipse.wst.server.ui.internal.Messages;
+/**
+ * Action to switch a server's location between the workspace and metadata.
+ */
+public class SwitchServerLocationAction extends Action {
+	protected Server server;
+
+	/**
+	 * An action to switch a server's location between the workspace and metadata.
+	 * 
+	 * @param server a servers
+	 */
+	public SwitchServerLocationAction(IServer server) {
+		super();
+		this.server = (Server) server;
+		if (this.server.getFile() != null)
+			setText(Messages.actionMoveServerToMetadata);
+		else
+			setText(Messages.actionMoveServerToWorkspace);
+	}
+
+	/**
+	 * Invoked when an action occurs. 
+	 */
+	public void run() {
+		try {
+			Server.switchLocation(server, null);
+		} catch (CoreException ce) {
+			// ignore for now
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/UpdateStatusAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/UpdateStatusAction.java
new file mode 100644
index 0000000..371e329
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/UpdateStatusAction.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * 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.wst.server.ui.internal.view.servers;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.internal.*;
+import org.eclipse.wst.server.ui.internal.Messages;
+/**
+ * Action to update a server's status.
+ */
+public class UpdateStatusAction extends Action {
+	protected IServer server;
+
+	/**
+	 * An action to update the status of a server.
+	 * 
+	 * @param server a server
+	 */
+	public UpdateStatusAction(IServer server) {
+		super(Messages.actionUpdateStatus);
+		this.server = server;
+	}
+
+	/**
+	 * Invoked when an action occurs. 
+	 */
+	public void run() {
+		UpdateServerJob job = new UpdateServerJob(server);
+		job.schedule();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/DisabledMenuManager.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/DisabledMenuManager.java
deleted file mode 100644
index 905a4f8..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/DisabledMenuManager.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.view.tree;
-
-import org.eclipse.jface.action.MenuManager;
-/**
- * 
- */
-public class DisabledMenuManager extends MenuManager {
-	public DisabledMenuManager(String label) {
-		super(label);
-	}
-	public boolean isEnabled() {
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/IServerElementTag.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/IServerElementTag.java
deleted file mode 100644
index 10bc305..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/IServerElementTag.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.view.tree;
-/**
- * Tagging interface for identifying elements on a server tree.
- */
-public interface IServerElementTag {
-	// marker
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ModuleResourceAdapter.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ModuleResourceAdapter.java
deleted file mode 100644
index 08b3744..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ModuleResourceAdapter.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.view.tree;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.ui.ServerUICore;
-import org.eclipse.wst.server.ui.internal.ServerLabelProvider;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-/**
- *
- */
-public class ModuleResourceAdapter implements IAdaptable, IWorkbenchAdapter, IServerElementTag {
-	private static final Object[] NO_CHILDREN = new Object[0];
-
-	protected IServer server;
-	protected IModule module;
-	protected Object parent;
-
-	public ModuleResourceAdapter(Object parent, IServer server, IModule module) {
-		super();
-		this.parent = parent;
-		this.server = server;
-		this.module = module;
-	}
-
-	/*
-	 * @see IAdaptable#getAdapter(Class)
-	 */
-	public Object getAdapter(Class adapter) {
-		if (adapter.equals(IAdaptable.class))
-			return this;
-		else if (adapter.equals(IWorkbenchAdapter.class))
-			return this;
-		else
-			return Platform.getAdapterManager().getAdapter(this, adapter);
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getChildren(Object)
-	 */
-	public Object[] getChildren(Object o) {
-		//IModule[] childModules = server.getChildModules(module, null);
-		//if (childModules == null)
-			return NO_CHILDREN;
-		
-		/*List child = new ArrayList();
-		if (childModules != null) {
-			int size = childModules.length;
-			for (int i = 0; i < size; i++)
-				child.add(new ModuleResourceAdapter(this, server, childModules[i]));
-		}
-
-		ModuleResourceAdapter[] adapters = new ModuleResourceAdapter[child.size()];
-		child.toArray(adapters);
-		return adapters;*/
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getImageDescriptor(Object)
-	 */
-	public ImageDescriptor getImageDescriptor(Object object) {
-		return ((ServerLabelProvider)ServerUICore.getLabelProvider()).getImageDescriptor(module);
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getLabel(Object)
-	 */
-	public String getLabel(Object o) {
-		if (module == null)
-			return "";
-		
-		return module.getName();
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getParent(Object)
-	 */
-	public Object getParent(Object o) {
-		return parent;
-	}
-	
-	public IModule getModules() {
-		return module;
-	}
-	
-	public IServer getServer() {
-		return server;
-	}
-	
-	public int hashCode() {
-		int hash = 0;
-		if (server != null) {
-			IFile file = ((Server)server).getFile();
-			if (file != null)
-				hash = file.hashCode();
-		}
-		if (module != null)
-			hash += module.hashCode();
-		return hash;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ServerElementAdapter.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ServerElementAdapter.java
deleted file mode 100644
index 440cac1..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ServerElementAdapter.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.view.tree;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.internal.Server;
-import org.eclipse.wst.server.ui.ServerUICore;
-import org.eclipse.wst.server.ui.internal.ServerLabelProvider;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-/**
- * 
- */
-public class ServerElementAdapter implements IAdaptable, IWorkbenchAdapter, IServerElementTag {
-	private static final Object[] NO_CHILDREN = new Object[0];
-
-	protected Object resource;
-	protected Object parent;
-	protected byte flags;
-
-	public ServerElementAdapter(Object parent, Object resource) {
-		this.parent = parent;
-		this.resource = resource;
-	}
-	
-	public void setFlags(byte b) {
-		flags = b;
-	}
-	
-	public byte getFlags() {
-		return flags;
-	}
-
-	/*
-	 * @see IAdaptable#getAdapter(Class)
-	 */
-	public Object getAdapter(Class adapter) {
-		if (adapter.equals(IAdaptable.class))
-			return this;
-		else if (adapter.equals(IWorkbenchAdapter.class))
-			return this;
-		/*else if (adapter.equals(IResource.class)) {
-			IResourceManager rm = ServerCore.getResourceManager();
-			return rm.getServerResourceLocation(resource);
-		}*/
-		else
-			return Platform.getAdapterManager().getAdapter(this, adapter);
-	}
-
-	public Object[] getChildren(Object o) {
-		return NO_CHILDREN;
-	}
-	
-	/*
-	 * @see IWorkbenchAdapter#getChildren(Object)
-	 */
-	public Object[] getChildren() {
-		if (resource instanceof IServer) {
-			IServer server = (IServer) resource;
-			
-			IModule[] modules = server.getModules();
-			if (modules == null || modules.length == 0) {
-				//return new Object[] { new TextResourceAdapter(this, TextResourceAdapter.STYLE_NO_MODULES)};
-				return NO_CHILDREN;
-			}
-			int size = modules.length;
-			Object[] obj = new Object[size];
-			for (int i = 0; i < size; i++)
-				obj[i] = new ModuleResourceAdapter(this, server, modules[i]);
-
-			return obj;
-		}/* else if (resource instanceof IServerConfiguration) {
-			IServerConfiguration configuration = (IServerConfiguration) resource;
-			
-			List list = new ArrayList();
-			
-			// add modules
-			IModule[] modules = server.getModules();
-			if (modules == null || modules.length == 0) {
-				//list.add(new TextResourceAdapter(this, TextResourceAdapter.STYLE_NO_MODULES));
-			} else {
-				int size = modules.length;
-				for (int i = 0; i < size; i++)
-					list.add(new ModuleResourceAdapter(this, configuration, modules[i]));
-			}
-
-			Object[] obj = new Object[list.size()];
-			list.toArray(obj);
-			return obj;
-		}*/
-		return NO_CHILDREN;
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getImageDescriptor(Object)
-	 */
-	public ImageDescriptor getImageDescriptor(Object object) {
-		/*try {
-			IServerResourceFactory factory = ServerUtil.getServerResourceFactory(resource);
-			String icon = factory.getConfigurationElement().getAttribute("icon");
-			URL url = factory.getConfigurationElement().getDeclaringExtension().getDeclaringPluginDescriptor().getInstallURL();
-			return ImageDescriptor.createFromURL(new URL(url, icon));
-		} catch (Exception e) {
-			Trace.trace("Error getting image descriptor", e);
-		}*/
-		return ((ServerLabelProvider)ServerUICore.getLabelProvider()).getImageDescriptor(resource);
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getLabel(Object)
-	 */
-	public String getLabel(Object o) {
-		return ServerUICore.getLabelProvider().getText(resource);
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getParent(Object)
-	 */
-	public Object getParent(Object o) {
-		return parent;
-	}
-
-	public Object getObject() {
-		return resource;
-	}
-
-	protected IFile getFile() {
-		if (resource instanceof IServer)
-			return ((Server) resource).getFile();
-		return null;
-	}
-	
-	public boolean equals(Object obj) {
-		if (!(obj instanceof ServerElementAdapter))
-			return false;
-		
-		ServerElementAdapter adapter = (ServerElementAdapter) obj;
-		IFile file1 = getFile();
-		IFile file2 = adapter.getFile();
-		return ((file1 == null && file2 == null)) ||
-			(file1 != null && file1.equals(file2));
-	}
-	
-	public int hashCode() {
-		return getFile().hashCode();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ServerRootAdapter.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ServerRootAdapter.java
deleted file mode 100644
index f26f5d4..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/ServerRootAdapter.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.view.tree;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-/**
- * 
- */
-public class ServerRootAdapter implements IAdaptable, IWorkbenchAdapter {
-	protected Object[] children;
-
-	public ServerRootAdapter() {
-		// do nothing
-	}
-	
-	public void setChildren(Object[] obj) {
-		children = obj;
-	}
-
-	/*
-	 * @see IAdaptable#getAdapter(Class)
-	 */
-	public Object getAdapter(Class adapter) {
-		if (adapter.equals(IAdaptable.class))
-			return this;
-		else if (adapter.equals(IWorkbenchAdapter.class))
-			return this;
-		else
-			return Platform.getAdapterManager().getAdapter(this, adapter);
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getChildren(Object)
-	 */
-	public Object[] getChildren(Object o) {
-		return children;
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getImageDescriptor(Object)
-	 */
-	public ImageDescriptor getImageDescriptor(Object object) {
-		return null;
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getLabel(Object)
-	 */
-	public String getLabel(Object o) {
-		return "Server Root";
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getParent(Object)
-	 */
-	public Object getParent(Object o) {
-		return null;
-	}
-	
-	public boolean equals(Object obj) {
-		if (!(obj instanceof ServerRootAdapter))	
-			return false;
-		
-		ServerRootAdapter adapter = (ServerRootAdapter) obj;
-		return (adapter.children.equals(children));
-	}
-	
-	public int hashCode() {
-		return 0;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/SwitchConfigurationAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/SwitchConfigurationAction.java
deleted file mode 100644
index acf1cb7..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/SwitchConfigurationAction.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.view.tree;
-
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.dialogs.ProgressMonitorDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.ui.ServerUICore;
-import org.eclipse.wst.server.ui.internal.*;
-import org.eclipse.swt.widgets.Shell;
-/**
- * Action to add or remove configuration to/from a server.
- */
-public class SwitchConfigurationAction extends Action {
-	protected IServer server;
-	protected IFolder config;
-	protected Shell shell;
-	protected IStatus status;
-
-	/**
-	 * SwitchConfigurationAction constructor.
-	 * 
-	 * @param shell a shell
-	 * @param label a label
-	 * @param server a server
-	 * @param config a server configuration
-	 */
-	public SwitchConfigurationAction(Shell shell, String label, IServer server, IFolder config) {
-		super(label);
-		this.shell = shell;
-		this.server = server;
-		this.config = config;
-
-		IFolder tempConfig = server.getServerConfiguration();
-		if ((tempConfig == null && config == null) || (tempConfig != null && tempConfig.equals(config)))
-			setChecked(true);
-
-		if (config == null)
-			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_SERVER_CONFIGURATION_NONE));
-		else
-			setImageDescriptor(((ServerLabelProvider)ServerUICore.getLabelProvider()).getImageDescriptor(config));
-		
-		if (server.getServerState() != IServer.STATE_STOPPED)
-			setEnabled(false);
-	}
-	
-	public void run() {
-		IFolder tempConfig = server.getServerConfiguration();
-		if ((tempConfig == null && config == null) || (tempConfig != null && tempConfig.equals(config)))
-			return;
-			
-		if (!EclipseUtil.validateEdit(shell, server))
-			return;
-
-		IRunnableWithProgress runnable = new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) {
-				try {
-					monitor = ProgressUtil.getMonitorFor(monitor);
-					IServerWorkingCopy workingCopy = server.createWorkingCopy();
-					workingCopy.setServerConfiguration(config);
-					workingCopy.save(false, monitor);
-				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Could not save configuration", e);
-				}
-			}
-		};
-
-		try {
-			ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
-			dialog.run(true, true, runnable);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error switching server configuration", e);
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/TextResourceAdapter.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/TextResourceAdapter.java
deleted file mode 100644
index 0196c65..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/tree/TextResourceAdapter.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.view.tree;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.wst.server.core.ServerCore;
-import org.eclipse.wst.server.ui.internal.ImageResource;
-import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-/**
- * 
- */
-public class TextResourceAdapter implements IAdaptable, IWorkbenchAdapter, IServerElementTag {
-	protected Object parent;
-	protected byte thisStyle;
-	
-	public static Object deleted;
-	
-	public final static byte STYLE_SERVERS = 0;
-	public final static byte STYLE_NO_MODULES = 4;
-	public final static byte STYLE_NO_SERVERS = 5;
-
-	public TextResourceAdapter(Object parent, byte thisStyle) {
-		this.parent = parent;
-		this.thisStyle = thisStyle;
-	}
-	
-	public byte getStyle() {
-		return thisStyle;
-	}
-	
-	public void setStyle(byte b) {
-		thisStyle = b;
-	}
-
-	/*
-	 * @see IAdaptable#getAdapter(Class)
-	 */
-	public Object getAdapter(Class adapter) {
-		if (adapter.equals(IAdaptable.class))
-			return this;
-		else if (adapter.equals(IWorkbenchAdapter.class))
-			return this;
-		else
-			return Platform.getAdapterManager().getAdapter(this, adapter);
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getChildren(Object)
-	 */
-	public Object[] getChildren(Object o) {
-		if (thisStyle == STYLE_NO_MODULES || thisStyle == STYLE_NO_SERVERS)
-			return new Object[0];
-		/*else if (thisStyle == STYLE_SERVERS_AND_CONFIGURATIONS) 
-			return new Object[] {
-				new TextResourceAdapter(this, STYLE_SERVERS),
-				new TextResourceAdapter(this, STYLE_CONFIGURATIONS)
-			};*/
-
-		Object[] elements = null;
-		if (thisStyle == STYLE_SERVERS)
-			elements = ServerCore.getServers();
-
-		List list = new ArrayList();
-		if (elements != null) {
-			int size = elements.length;
-			for (int i = 0; i < size; i++) {
-				if (elements[i] != deleted)
-					list.add(new ServerElementAdapter(this, elements[i]));
-			}
-		}
-		return list.toArray();
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getImageDescriptor(Object)
-	 */
-	public ImageDescriptor getImageDescriptor(Object object) {
-		if (thisStyle == STYLE_SERVERS)
-			return null;
-		//else if (thisStyle == STYLE_SERVERS_AND_CONFIGURATIONS)
-		//	return ServerImageResource.getImageDescriptor(ServerImageResource.IMG_SERVER_PROJECT);
-		//else if (thisStyle == STYLE_NO_CONFIGURATION)
-		//	return ServerImageResource.getImageDescriptor(ServerImageResource.IMG_SERVER_CONFIGURATION_NONE);
-		else if (thisStyle == STYLE_NO_MODULES) {
-			ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
-			return sharedImages.getImageDescriptor(IDE.SharedImages.IMG_OBJ_PROJECT);
-		}
-		else if (thisStyle == STYLE_NO_SERVERS)
-			return ImageResource.getImageDescriptor(ImageResource.IMG_SERVER_CONFIGURATION_MISSING);
-		else
-			return null;
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getLabel(Object)
-	 */
-	public String getLabel(Object o) {
-		if (thisStyle == STYLE_SERVERS)
-			return Messages.viewServers;
-		//else if (thisStyle == STYLE_SERVERS_AND_CONFIGURATIONS)
-		//	return "Server Info";
-		//else if (thisStyle == STYLE_NO_CONFIGURATION)
-		//	return "No configuration";
-		else if (thisStyle == STYLE_NO_MODULES)
-			return Messages.viewNoModules;
-		else if (thisStyle == STYLE_NO_SERVERS)
-			return Messages.viewConfigurationUnused;
-		else
-			return "n/a";
-	}
-
-	/*
-	 * @see IWorkbenchAdapter#getParent(Object)
-	 */
-	public Object getParent(Object o) {
-		return parent;
-	}
-	
-	public boolean equals(Object obj) {
-		if (!(obj instanceof TextResourceAdapter))	
-			return false;
-		
-		TextResourceAdapter adapter = (TextResourceAdapter) obj;
-		return (adapter.getStyle() == thisStyle);
-	}
-	
-	public int hashCode() {
-		return thisStyle;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java
index 20a949a..a86da40 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.viewers;
 
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
@@ -22,6 +24,7 @@
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.Tree;
 
 import org.eclipse.wst.server.ui.internal.Messages;
@@ -47,9 +50,6 @@
 		layout.marginHeight = 0;
 		layout.numColumns = 2;
 		setLayout(layout);
-
-		//GridData data = new GridData(GridData.FILL_BOTH);
-		//setLayoutData(data);
 		
 		String descriptionText = getDescriptionLabel();
 		if (descriptionText != null) {
@@ -63,16 +63,40 @@
 		Label label = new Label(this, SWT.WRAP);
 		label.setText(getTitleLabel());
 		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
+		if (descriptionText != null)
+			data.verticalIndent = 7;
 		data.horizontalSpan = 2;
 		label.setLayoutData(data);
-
+		
+		String details = getDetailsLabel();
+		if (details != null) {
+			Link prefLink = new Link(this, SWT.NONE);
+			data = new GridData(GridData.HORIZONTAL_ALIGN_END);
+			data.horizontalSpan = 2;
+			prefLink.setLayoutData(data);
+			prefLink.setText("<a>" + details + "</a>");
+			prefLink.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					detailsSelected();
+				}
+			});
+		}
+		
 		tree = new Tree(this, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE);
 		data = new GridData(GridData.FILL_BOTH);
 		data.horizontalSpan = 2;
 		tree.setLayoutData(data);
-		treeViewer = new TreeViewer(tree);
 		
+		treeViewer = new TreeViewer(tree);
 		treeViewer.setSorter(new ViewerSorter());
+		treeViewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				IStructuredSelection s = (IStructuredSelection) event.getSelection();
+				Object element = s.getFirstElement();
+				if (treeViewer.isExpandable(element))
+					treeViewer.setExpandedState(element, !treeViewer.getExpandedState(element));
+		    }
+		});
 		
 		label = new Label(this, SWT.NONE);
 		label.setText("");
@@ -116,6 +140,8 @@
 			data.heightHint = 35;
 			description.setLayoutData(data);
 		}
+		
+		tree.forceFocus();
 	}
 	
 	protected abstract String getDescriptionLabel();
@@ -155,4 +181,12 @@
 	public void remove(Object obj) {
 		treeViewer.remove(obj);
 	}
+
+	protected String getDetailsLabel() {
+		return null;
+	}
+	
+	protected void detailsSelected() {
+		// do nothing
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java
index dc06c47..9cb8785 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java
@@ -17,6 +17,7 @@
 
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 /**
  * Runtime type content provider.
  */
@@ -24,12 +25,11 @@
 	public static final byte STYLE_FLAT = 0;
 
 	public static final String ROOT = "root";
-	
+
 	protected byte style;
-	
+
 	protected Object initialSelection;
-	protected int initialSelectionOrder;
-	
+
 	public class TreeElement {
 		String text;
 		List contents;
@@ -50,12 +50,12 @@
 		
 		fillTree();
 	}
-	
+
 	public AbstractTreeContentProvider(byte style, boolean init) {
 		super();
 		this.style = style;
 	}
-	
+
 	protected abstract void fillTree();
 
 	protected void clean() {
@@ -64,7 +64,6 @@
 		textMap = new HashMap(2);
 		
 		initialSelection = null;
-		initialSelectionOrder = -1000;
 	}
 
 	protected TreeElement getOrCreate(List list, String text) {
@@ -187,8 +186,38 @@
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 		// do nothing
 	}
-	
+
+	private Object[] getAllObjects() {
+		List list = new ArrayList();
+		Object[] obj = getElements(null);
+		if (obj != null) {
+			int size = obj.length;
+			for (int i = 0; i < size; i++) {
+				if (!(obj[i] instanceof AbstractTreeContentProvider.TreeElement))
+					list.add(obj[i]);
+				getAllChildren(list, obj[i]);
+			}
+		}
+		return list.toArray();
+	}
+
+	private void getAllChildren(List list, Object element) {
+		Object[] obj = getChildren(element);
+		if (obj != null) {
+			int size = obj.length;
+			for (int i = 0; i < size; i++) {
+				if (!(obj[i] instanceof AbstractTreeContentProvider.TreeElement))
+					list.add(obj[i]);
+				getAllChildren(list, obj[i]);
+			}
+		}
+	}
+
 	public Object getInitialSelection() {
+		if (initialSelection == null) {
+			InitialSelectionProvider isp = ServerUIPlugin.getInitialSelectionProvider();
+			initialSelection = isp.getInitialSelection(getAllObjects());
+		}
 		return initialSelection;
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.java
new file mode 100644
index 0000000..a4b9587
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.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.wst.server.ui.internal.viewers;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.IServerType;
+/**
+ * Class used to sort categories, runtime types, and server types in the
+ * New wizards.
+ */
+public class DefaultViewerSorter extends ViewerSorter {
+	/**
+	 * @see ViewerSorter#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+	 */
+	public int compare(Viewer viewer, Object o1, Object o2) {
+		if (o1 instanceof AbstractTreeContentProvider.TreeElement)
+			o1 = ((AbstractTreeContentProvider.TreeElement) o1).text;
+		
+		if (o2 instanceof AbstractTreeContentProvider.TreeElement)
+			o2 = ((AbstractTreeContentProvider.TreeElement) o2).text;
+		
+		// filter out strings
+		if (o1 instanceof String && o2 instanceof String)
+			return compareCategories((String) o1, (String) o2);
+		if (o1 instanceof String)
+			return -1;
+		if (o2 instanceof String)
+			return 1;
+		
+		if (o1 instanceof IRuntimeType && o2 instanceof IRuntimeType)
+			return compareRuntimeTypes((IRuntimeType) o1, (IRuntimeType) o2);
+		
+		if (o1 instanceof IServerType && o2 instanceof IServerType)
+			return compareServerTypes((IServerType) o1, (IServerType) o2);
+		
+		return 0;
+	}
+
+	/**
+	 * Sort two category names.
+	 * 
+	 * @param s1 the first category
+	 * @param s2 the second category
+	 * @return a negative number if the first element is less  than the 
+	 *    second element; the value <code>0</code> if the first element is
+	 *    equal to the second element; and a positive number if the first
+	 *    element is greater than the second element
+	 */
+	protected int compareCategories(String s1, String s2) {
+		return s1.compareTo(s2);
+	}
+
+	/**
+	 * Sort two runtime types.
+	 * 
+	 * @param r1 the first runtime type
+	 * @param r2 the second runtime type
+	 * @return a negative number if the first element is less  than the 
+	 *    second element; the value <code>0</code> if the first element is
+	 *    equal to the second element; and a positive number if the first
+	 *    element is greater than the second element
+	 */
+	protected int compareRuntimeTypes(IRuntimeType r1, IRuntimeType r2) {
+		return r1.getName().compareToIgnoreCase(r2.getName());
+	}
+
+	/**
+	 * Sort two server types.
+	 * 
+	 * @param s1 the first server type
+	 * @param s2 the second server type
+	 * @return a negative number if the first element is less  than the 
+	 *    second element; the value <code>0</code> if the first element is
+	 *    equal to the second element; and a positive number if the first
+	 *    element is greater than the second element
+	 */
+	protected int compareServerTypes(IServerType s1, IServerType s2) {
+		return s1.getName().compareToIgnoreCase(s2.getName());
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java
new file mode 100644
index 0000000..b1dbff9
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * 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.wst.server.ui.internal.viewers;
+
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServerType;
+import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
+/**
+ * Class used to sort categories, runtime types, and server types in the
+ * New wizards.
+ */
+public class InitialSelectionProvider extends ViewerSorter {
+
+	public Object getInitialSelection(Object[] obj) {
+		if (obj == null || obj.length == 0)
+			return null;
+		
+		if (obj[0] instanceof IRuntimeType) {
+			int size = obj.length;
+			IRuntimeType[] rt = new IRuntimeType[size];
+			for (int i = 0; i < size; i++)
+				rt[i] = (IRuntimeType) obj[i];
+			return getInitialSelection(rt);
+		}
+		
+		if (obj[0] instanceof IServerType) {
+			int size = obj.length;
+			IServerType[] st = new IServerType[size];
+			for (int i = 0; i < size; i++)
+				st[i] = (IServerType) obj[i];
+			return getInitialSelection(st);
+		}
+		
+		if (obj[0] instanceof IServer) {
+			int size = obj.length;
+			IServer[] st = new IServer[size];
+			for (int i = 0; i < size; i++)
+				st[i] = (IServer) obj[i];
+			return getInitialSelection(st);
+		}
+		
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param serverTypes
+	 * @return the initial selection
+	 */
+	public IServerType getInitialSelection(IServerType[] serverTypes) {
+		if (serverTypes == null)
+			return null;
+		
+		int size = serverTypes.length;
+		for (int i = 0; i < size; i++) {
+			if (hasRuntime(serverTypes[i]))
+				return serverTypes[i];
+		}
+		return serverTypes[0];
+	}
+
+	/**
+	 * 
+	 * @param servers
+	 * @return the initial selection
+	 */
+	public IServer getInitialSelection(IServer[] servers) {
+		if (servers == null)
+			return null;
+		
+		return servers[0];
+	}
+
+	/**
+	 * 
+	 * @param runtimeTypes
+	 * @return the initial selection
+	 */
+	public IRuntimeType getInitialSelection(IRuntimeType[] runtimeTypes) {
+		if (runtimeTypes == null)
+			return null;
+		
+		int size = runtimeTypes.length;
+		for (int i = 0; i < size; i++) {
+			if (hasRuntime(runtimeTypes[i]))
+				return runtimeTypes[i];
+		}
+		return runtimeTypes[0];
+	}
+
+	protected boolean hasRuntime(IServerType serverType) {
+		return hasRuntime(serverType.getRuntimeType());
+	}
+
+	protected boolean hasRuntime(IRuntimeType runtimeType) {
+		if (runtimeType == null)
+			return false;
+		IRuntime[] runtimes = ServerUIPlugin.getRuntimes(runtimeType);
+		return runtimes != null && runtimes.length > 0;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerComposite.java
new file mode 100644
index 0000000..4d00e8a
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerComposite.java
@@ -0,0 +1,102 @@
+/*******************************************************************************
+ * 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.wst.server.ui.internal.viewers;
+
+import org.eclipse.jface.viewers.*;
+import org.eclipse.swt.widgets.Composite;
+
+import org.eclipse.wst.server.core.internal.IInstallableServer;
+import org.eclipse.wst.server.ui.internal.Messages;
+/**
+ * 
+ */
+public class InstallableServerComposite extends AbstractTreeComposite {
+	protected IInstallableServer selection;
+	protected InstallableServerSelectionListener listener;
+	
+	protected InstallableServerContentProvider contentProvider;
+	protected boolean initialSelection = true;
+	
+	public interface InstallableServerSelectionListener {
+		public void installableServerSelected(IInstallableServer server);
+	}
+
+	public InstallableServerComposite(Composite parent, int style, InstallableServerSelectionListener listener2) {
+		super(parent, style);
+		this.listener = listener2;
+	
+		contentProvider = new InstallableServerContentProvider(InstallableServerContentProvider.STYLE_VENDOR);
+		treeViewer.setContentProvider(contentProvider);
+		treeViewer.setLabelProvider(new InstallableServerLabelProvider());
+		treeViewer.setInput(AbstractTreeContentProvider.ROOT);
+
+		treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				Object obj = getSelection(event.getSelection());
+				if (obj instanceof IInstallableServer) {
+					selection = (IInstallableServer) obj;
+					setDescription(selection.getDescription());
+				} else {
+					selection = null;
+					setDescription("");
+				}
+				listener.installableServerSelected(selection);
+			}
+		});
+		
+		treeViewer.setSorter(new ViewerSorter() {
+			public int compare(Viewer viewer, Object e1, Object e2) {
+				if (e1 instanceof IInstallableServer && !(e2 instanceof IInstallableServer))
+					return 1;
+				if (!(e1 instanceof IInstallableServer) && e2 instanceof IInstallableServer)
+					return -1;
+				if (!(e1 instanceof IInstallableServer && e2 instanceof IInstallableServer))
+					return super.compare(viewer, e1, e2);
+				IInstallableServer r1 = (IInstallableServer) e1;
+				IInstallableServer r2 = (IInstallableServer) e2;
+				return r1.getName().compareToIgnoreCase(r2.getName());
+			}
+		});
+		treeViewer.expandToLevel(2);
+	}
+
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible && initialSelection) {
+			initialSelection = false;
+			if (contentProvider.getInitialSelection() != null)
+				treeViewer.setSelection(new StructuredSelection(contentProvider.getInitialSelection()), true);
+		}
+	}
+
+	protected String getTitleLabel() {
+		return Messages.installableServerCompTree;
+	}
+
+	protected String getDescriptionLabel() {
+		return null;
+	}
+
+	protected String[] getComboOptions() {
+		return new String[] { Messages.name,
+			Messages.vendor, Messages.version };
+	}
+
+	protected void viewOptionSelected(byte option) {
+		ISelection sel = treeViewer.getSelection();
+		treeViewer.setContentProvider(new InstallableServerContentProvider(option));
+		treeViewer.setSelection(sel);
+	}
+
+	public IInstallableServer getSelectedInstallableServer() {
+		return selection;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerContentProvider.java
new file mode 100644
index 0000000..add684f
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerContentProvider.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * 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.wst.server.ui.internal.viewers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.wst.server.core.internal.IInstallableServer;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
+/**
+ * Installable server content provider.
+ */
+public class InstallableServerContentProvider extends AbstractTreeContentProvider {
+	public static final byte STYLE_VENDOR = 1;
+	public static final byte STYLE_VERSION = 2;
+
+	public InstallableServerContentProvider(byte style) {
+		super(style, false);
+		
+		fillTree();
+	}
+
+	public void fillTree() {
+		clean();
+		List list = new ArrayList();
+		if (style != STYLE_FLAT) {
+			IInstallableServer[] iis = ServerPlugin.getInstallableServers();
+			if (iis != null) {
+				int size = iis.length;
+				for (int i = 0; i < size; i++) {
+					IInstallableServer is = iis[i];
+					TreeElement ele = null;
+					if (style == STYLE_VENDOR) {
+						ele = getOrCreate(list, is.getVendor());
+						ele.contents.add(is);
+						elementToParentMap.put(is, ele);
+					} else if (style == STYLE_VERSION) {
+						ele = getOrCreate(list, is.getVersion());
+						ele.contents.add(is);
+						elementToParentMap.put(is, ele);
+					}
+				}
+			}
+		} else {
+			IInstallableServer[] iis = ServerPlugin.getInstallableServers();
+			if (iis != null) {
+				int size = iis.length;
+				for (int i = 0; i < size; i++)
+					list.add(iis[i]);
+			}
+		}
+		elements = list.toArray();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerLabelProvider.java
new file mode 100644
index 0000000..3cb7072
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerLabelProvider.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * 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.wst.server.ui.internal.viewers;
+
+import org.eclipse.wst.server.core.internal.IInstallableServer;
+import org.eclipse.wst.server.ui.internal.ImageResource;
+import org.eclipse.swt.graphics.Image;
+/**
+ * Installable server label provider.
+ */
+public class InstallableServerLabelProvider extends AbstractTreeLabelProvider {
+	/**
+	 * InstallableServerLabelProvider constructor comment.
+	 */
+	public InstallableServerLabelProvider() {
+		super();
+	}
+
+	/**
+	 * 
+	 */
+	protected Image getImageImpl(Object element) {
+		return ImageResource.getImage(ImageResource.IMG_SERVER);
+	}
+
+	/**
+	 * 
+	 */
+	protected String getTextImpl(Object element) {
+		IInstallableServer is = (IInstallableServer) element;
+		return notNull(is.getName());
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorDialog.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorDialog.java
index 6d55ee3..8f564b5 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorDialog.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorDialog.java
@@ -211,7 +211,7 @@
 			portChanged = true;
 			String[] ct = contentTypes;
 			tableViewer.setSelection(new StructuredSelection(port));
-			if (ct != null)
+			if (ct != null && ct.length > 0)
 				combo.setText(MonitorLabelProvider.getContentTypeString(ct[0]));
 		} else if (tableViewer != null) {
 			try {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
index c75965a..7e1799f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
@@ -17,9 +17,13 @@
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
@@ -40,6 +44,32 @@
 		public void runtimeSelected(IRuntime runtime);
 	}
 	
+	class RuntimeViewerSorter extends ViewerSorter {
+		boolean sortByName;
+		public RuntimeViewerSorter(boolean sortByName) {
+			this.sortByName = sortByName;
+		}
+		
+		public int compare(Viewer viewer, Object e1, Object e2) {
+			IRuntime r1 = (IRuntime) e1;
+			IRuntime r2 = (IRuntime) e2;
+			if (sortByName)
+				return collator.compare(notNull(r1.getName()), notNull(r2.getName()));
+			
+			if (r1.getRuntimeType() == null)
+				return -1;
+			if (r2.getRuntimeType() == null)
+				return 1;
+			return collator.compare(notNull(r1.getRuntimeType().getName()), notNull(r2.getRuntimeType().getName()));
+		}
+		
+		protected String notNull(String s) {
+			if (s == null)
+				return "";
+			return s;
+		}
+	}
+	
 	public RuntimeComposite(Composite parent, int style, RuntimeSelectionListener listener2) {
 		super(parent, style);
 		this.listener = listener2;
@@ -51,19 +81,34 @@
 		tableLayout.addColumnData(new ColumnWeightData(60, 160, true));
 		TableColumn col = new TableColumn(table, SWT.NONE);
 		col.setText(Messages.columnName);
-		
-		/*tableLayout.addColumnData(new ColumnWeightData(12, 120, true));
-		col = new TableColumn(table, SWT.NONE);
-		col.setText("Location");*/
+		col.addSelectionListener(new SelectionListener() {
+			public void widgetSelected(SelectionEvent e) {
+				tableViewer.setSorter(new RuntimeViewerSorter(true));
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+		});
 
 		tableLayout.addColumnData(new ColumnWeightData(45, 125, true));
 		col = new TableColumn(table, SWT.NONE);
 		col.setText(Messages.columnType);
+		col.addSelectionListener(new SelectionListener() {
+			public void widgetSelected(SelectionEvent e) {
+				tableViewer.setSorter(new RuntimeViewerSorter(false));
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				widgetSelected(e);
+			}
+		});
 		
 		tableViewer.setContentProvider(new RuntimeContentProvider());
 		tableViewer.setLabelProvider(new RuntimeTableLabelProvider());
 		tableViewer.setInput(AbstractTreeContentProvider.ROOT);
-		tableViewer.setColumnProperties(new String[] {"name", "location", "type"});
+		tableViewer.setColumnProperties(new String[] {"name", "type"});
+		tableViewer.setSorter(new RuntimeViewerSorter(true));
 
 		tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java
index 95407c5..cbafa16 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java
@@ -11,10 +11,14 @@
 package org.eclipse.wst.server.ui.internal.viewers;
 
 import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Composite;
 
 import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
 import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.wizard.NewInstallableServerWizard;
 /**
  * 
  */
@@ -60,21 +64,9 @@
 			}
 		});
 		
-		treeViewer.setSorter(new ViewerSorter() {
-			public int compare(Viewer viewer, Object e1, Object e2) {
-				if (e1 instanceof IRuntimeType && !(e2 instanceof IRuntimeType))
-					return 1;
-				if (!(e1 instanceof IRuntimeType) && e2 instanceof IRuntimeType)
-					return -1;
-				if (!(e1 instanceof IRuntimeType && e2 instanceof IRuntimeType))
-					return super.compare(viewer, e1, e2);
-				IRuntimeType r1 = (IRuntimeType) e1;
-				IRuntimeType r2 = (IRuntimeType) e2;
-				return r1.getName().compareToIgnoreCase(r2.getName());
-			}
-		});
+		treeViewer.setSorter(new DefaultViewerSorter());
 	}
-	
+
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible && initialSelection) {
@@ -83,7 +75,7 @@
 				treeViewer.setSelection(new StructuredSelection(contentProvider.getInitialSelection()), true);
 		}
 	}
-	
+
 	protected String getTitleLabel() {
 		return Messages.runtimeTypeCompTree;
 	}
@@ -104,7 +96,27 @@
 		treeViewer.setSelection(sel);
 	}
 
+	public void refresh() {
+		ISelection sel = treeViewer.getSelection();
+		RuntimeTypeTreeContentProvider cp = (RuntimeTypeTreeContentProvider) treeViewer.getContentProvider();
+		treeViewer.setContentProvider(new RuntimeTypeTreeContentProvider(cp.style, creation, type, version, runtimeTypeId));
+		treeViewer.setSelection(sel);
+	}
+
 	public IRuntimeType getSelectedRuntimeType() {
 		return selection;
 	}
+
+	protected String getDetailsLabel() {
+		if (ServerPlugin.getInstallableServers().length > 0)
+			return Messages.installableServerLink;
+		return null;
+	}
+
+	protected void detailsSelected() {
+		NewInstallableServerWizard wizard2 = new NewInstallableServerWizard();
+		WizardDialog dialog = new WizardDialog(getShell(), wizard2);
+		if (dialog.open() != Window.CANCEL)
+			refresh();
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeTreeContentProvider.java
index cc4d09b..88f77ce 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeTreeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeTreeContentProvider.java
@@ -58,11 +58,6 @@
 				for (int i = 0; i < size; i++) {
 					IRuntimeType runtimeType = runtimeTypes[i];
 					if (!creation || runtimeType.canCreate()) {
-						int order = getRuntimeOrder(runtimeType);
-						if (order > initialSelectionOrder) {
-							initialSelection = runtimeType;
-							initialSelectionOrder = order;
-						}
 						TreeElement ele = null;
 						if (style == STYLE_VENDOR) {
 							ele = getOrCreate(list, runtimeType.getVendor());
@@ -73,7 +68,7 @@
 							ele.contents.add(runtimeType);
 							elementToParentMap.put(runtimeType, ele);
 						} else if (style == STYLE_MODULE_TYPE) {
-							// TODO: does not handle "j2ee.*" format
+							// TODO: does not handle "jst.*" format
 							IModuleType[] moduleTypes = runtimeType.getModuleTypes();
 							if (moduleTypes != null) {
 								int size2 = moduleTypes.length;
@@ -98,21 +93,11 @@
 				int size = runtimeTypes.length;
 				for (int i = 0; i < size; i++) {
 					IRuntimeType runtimeType = runtimeTypes[i];
-					if (!creation || runtimeType.canCreate()) {
-						int order = getRuntimeOrder(runtimeType);
-						if (order > initialSelectionOrder) {
-							initialSelection = runtimeType;
-							initialSelectionOrder = order;
-						}
+					if (!creation || runtimeType.canCreate())
 						list.add(runtimeType);
-					}
 				}
 			}
 		}
 		elements = list.toArray();
 	}
-	
-	private int getRuntimeOrder(IRuntimeType runtimeType) {
-		return 0;
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTreeContentProvider.java
index 108caa1..c13a38b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTreeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTreeContentProvider.java
@@ -67,11 +67,6 @@
 					if (acceptServer(servers[i])) {
 						IServerType serverType = servers[i].getServerType();
 						IRuntimeType runtimeType = serverType.getRuntimeType();
-						int order = getServerOrder(serverType);
-						if (order > initialSelectionOrder) {
-							initialSelection = servers[i];
-							initialSelectionOrder = order;
-						}
 						TreeElement te = null;
 						if (style == STYLE_HOST) {
 							te = getOrCreate(list, servers[i].getHost());
@@ -96,15 +91,8 @@
 			if (servers != null) {
 				int size = servers.length;
 				for (int i = 0; i < size; i++) {
-					if (acceptServer(servers[i])) {
-						IServerType serverType = servers[i].getServerType();
+					if (acceptServer(servers[i]))
 						list.add(servers[i]);
-						int order = getServerOrder(serverType);
-						if (order > initialSelectionOrder) {
-							initialSelection = servers[i];
-							initialSelectionOrder = order;
-						}
-					}
 				}
 			}
 		}
@@ -127,8 +115,4 @@
 		}
 		return true;
 	}
-	
-	private int getServerOrder(IServerType serverType) {
-		return 0;
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java
index e1258da..ab05734 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java
@@ -14,13 +14,15 @@
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Composite;
 
 import org.eclipse.wst.server.core.IModuleType;
 import org.eclipse.wst.server.core.IServerType;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
 import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.wizard.NewInstallableServerWizard;
 /**
  * 
  */
@@ -64,21 +66,9 @@
 			}
 		});
 		
-		treeViewer.setSorter(new ViewerSorter() {
-			public int compare(Viewer viewer, Object e1, Object e2) {
-				if (e1 instanceof IServerType && !(e2 instanceof IServerType))
-					return 1;
-				if (!(e1 instanceof IServerType) && e2 instanceof IServerType)
-					return -1;
-				if (!(e1 instanceof IServerType && e2 instanceof IServerType))
-					return super.compare(viewer, e1, e2);
-				IServerType r1 = (IServerType) e1;
-				IServerType r2 = (IServerType) e2;
-				return r1.getName().compareTo(r2.getName());
-			}
-		});
+		treeViewer.setSorter(new DefaultViewerSorter());
 	}
-	
+
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		if (visible && initialSelection) {
@@ -87,7 +77,7 @@
 				treeViewer.setSelection(new StructuredSelection(contentProvider.getInitialSelection()), true);
 		}
 	}
-	
+
 	public void setHost(boolean newHost) {
 		if (isLocalhost == newHost)
 			return;
@@ -99,7 +89,7 @@
 		//treeViewer.expandToLevel(2);
 		treeViewer.setSelection(sel, true);
 	}
-	
+
 	public void setIncludeIncompatibleVersions(boolean b) {
 		includeIncompatibleVersions = b;
 		ISelection sel = treeViewer.getSelection();
@@ -109,11 +99,11 @@
 	}
 
 	protected String getDescriptionLabel() {
-		return null; //Messages.serverTypeCompDescription");
+		return null;
 	}
 
 	protected String getTitleLabel() {
-		return Messages.serverTypeCompDescription;
+		return Messages.serverTypeCompLabel;
 	}
 
 	protected String[] getComboOptions() {
@@ -134,4 +124,24 @@
 	public IServerType getSelectedServerType() {
 		return selection;
 	}
+
+	public void refresh() {
+		ISelection sel = treeViewer.getSelection();
+		ServerTypeTreeContentProvider cp = (ServerTypeTreeContentProvider) treeViewer.getContentProvider();
+		treeViewer.setContentProvider(new ServerTypeTreeContentProvider(cp.style, moduleType));
+		treeViewer.setSelection(sel);
+	}
+
+	protected String getDetailsLabel() {
+		if (ServerPlugin.getInstallableServers().length > 0)
+			return Messages.installableServerLink;
+		return null;
+	}
+
+	protected void detailsSelected() {
+		NewInstallableServerWizard wizard2 = new NewInstallableServerWizard();
+		WizardDialog dialog = new WizardDialog(getShell(), wizard2);
+		if (dialog.open() != Window.CANCEL)
+			refresh();
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java
index 5b4dc29..7c91e41 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java
@@ -55,11 +55,6 @@
 			for (int i = 0; i < size; i++) {
 				IServerType serverType = serverTypes[i];
 				if (include(serverType)) {
-					int order = getServerOrder(serverType);
-					if (order > initialSelectionOrder) {
-						initialSelection = serverType;
-						initialSelectionOrder = order;
-					}
 					if (style == STYLE_FLAT) {
 						list.add(serverType);
 					} else if (style != STYLE_MODULE_TYPE) {
@@ -148,8 +143,4 @@
 		includeIncompatibleVersions = b;
 		fillTree();
 	}
-	
-	private int getServerOrder(IServerType serverType) {
-		return 0;
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/InternetPreferencePage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/InternetPreferencePage.java
new file mode 100644
index 0000000..02f08d3
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/InternetPreferencePage.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.webbrowser;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.wst.server.ui.internal.Messages;
+/**
+ * A preference page that holds internet preferences.
+ */
+public class InternetPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+	/**
+	 * InternetPreferencePage constructor comment.
+	 */
+	public InternetPreferencePage() {
+		super();
+		noDefaultAndApplyButton();
+	}
+
+	/**
+	 * Create the preference options.
+	 *
+	 * @param parent org.eclipse.swt.widgets.Composite
+	 * @return org.eclipse.swt.widgets.Control
+	 */
+	protected Control createContents(Composite parent) {
+		initializeDialogUnits(parent);
+		
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 1;
+		layout.horizontalSpacing = convertHorizontalDLUsToPixels(4);
+		layout.verticalSpacing = convertVerticalDLUsToPixels(4);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		composite.setLayout(layout);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
+		composite.setLayoutData(data);
+		//PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.PREF_BROWSER);
+		
+		Label label = new Label(composite, SWT.WRAP);
+		label.setText(Messages.preferenceInternetDescription);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+		label.setLayoutData(data);
+		
+		Dialog.applyDialogFont(composite);
+		
+		return composite;
+	}
+
+	/**
+	 * Initializes this preference page using the passed workbench.
+	 *
+	 * @param workbench the current workbench
+	 */
+	public void init(IWorkbench workbench) {
+		// do nothing
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/OpenBrowserWorkbenchAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/OpenBrowserWorkbenchAction.java
new file mode 100644
index 0000000..4e9e921
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/OpenBrowserWorkbenchAction.java
@@ -0,0 +1,81 @@
+/**********************************************************************
+ * Copyright (c) 2004, 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.wst.server.ui.internal.webbrowser;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.ui.*;
+import org.eclipse.ui.browser.IWebBrowser;
+import org.eclipse.ui.browser.IWorkbenchBrowserSupport;
+import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
+import org.eclipse.wst.server.ui.internal.Trace;
+/**
+ * Action to open the Web broswer.
+ */
+public class OpenBrowserWorkbenchAction implements IWorkbenchWindowActionDelegate {
+	/**
+	 * OpenBrowserWorkbenchAction constructor comment.
+	 */
+	public OpenBrowserWorkbenchAction() {
+		super();
+	}
+
+	/**
+	 * Disposes this action delegate.  The implementor should unhook any references
+	 * to itself so that garbage collection can occur.
+	 */
+	public void dispose() {
+		// do nothing
+	}
+
+	/**
+	 * Initializes this action delegate with the workbench window it will work in.
+	 *
+	 * @param window the window that provides the context for this delegate
+	 */
+	public void init(IWorkbenchWindow window) {
+		// do nothing
+	}
+
+	/**
+	 * Performs this action.
+	 * <p>
+	 * This method is called when the delegating action has been triggered.
+	 * Implement this method to do the actual work.
+	 * </p>
+	 *
+	 * @param action the action proxy that handles the presentation portion of the
+	 *   action
+	 */
+	public void run(IAction action) {
+		try {
+			IWorkbenchBrowserSupport browserSupport = ServerUIPlugin.getInstance().getWorkbench().getBrowserSupport();
+			IWebBrowser browser = browserSupport.createBrowser(IWorkbenchBrowserSupport.LOCATION_BAR | IWorkbenchBrowserSupport.NAVIGATION_BAR, null, null, null);
+			browser.openURL(null);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error opening browser", e);
+		}
+	}
+
+	/**
+	 * Notifies this action delegate that the selection in the workbench has changed.
+	 * <p>
+	 * Implementers can use this opportunity to change the availability of the
+	 * action or to modify other presentation properties.
+	 * </p>
+	 *
+	 * @param action the action proxy that handles presentation portion of the action
+	 * @param selection the current selection in the workbench
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		// do nothing
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/SwitchBrowserWorkbenchAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/SwitchBrowserWorkbenchAction.java
new file mode 100644
index 0000000..10f0f62
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/SwitchBrowserWorkbenchAction.java
@@ -0,0 +1,150 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.webbrowser;
+
+import java.util.Iterator;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.swt.events.MenuAdapter;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.ui.*;
+import org.eclipse.ui.internal.browser.BrowserManager;
+import org.eclipse.ui.internal.browser.IBrowserDescriptor;
+import org.eclipse.ui.internal.browser.WebBrowserPreference;
+import org.eclipse.ui.internal.browser.WebBrowserUtil;
+/**
+ * Action to open the Web broswer.
+ */
+public class SwitchBrowserWorkbenchAction implements IWorkbenchWindowPulldownDelegate2 {
+	/**
+	 * The menu created by this action
+	 */
+	private Menu fMenu;
+		
+	protected boolean recreateMenu = false;
+
+	/**
+	 * SwitchBrowserWorkbenchAction constructor comment.
+	 */
+	public SwitchBrowserWorkbenchAction() {
+		super();
+	}
+
+	public void dispose() {
+		setMenu(null);
+	}
+	
+	/**
+	 * Sets this action's drop-down menu, disposing the previous menu.
+	 * 
+	 * @param menu the new menu
+	 */
+	private void setMenu(Menu menu) {
+		if (fMenu != null) {
+			fMenu.dispose();
+		}
+		fMenu = menu;
+	}
+
+	public void init(IWorkbenchWindow window) {
+		// do nothing
+	}
+	
+	/**
+	 * Adds the given action to the specified menu with an accelerator specified
+	 * by the given number.
+	 * 
+	 * @param menu the menu to add the action to
+	 * @param action the action to add
+	 * @param accelerator the number that should appear as an accelerator
+	 */
+	protected void addToMenu(Menu menu, IAction action, int accelerator) {
+		StringBuffer label= new StringBuffer();
+		if (accelerator >= 0 && accelerator < 10) {
+			//add the numerical accelerator
+			label.append('&');
+			label.append(accelerator);
+			label.append(' ');
+		}
+		label.append(action.getText());
+		action.setText(label.toString());
+		ActionContributionItem item= new ActionContributionItem(action);
+		item.fill(menu, -1);
+	}
+
+	/**
+	 * Fills the drop-down menu with favorites and launch history,
+	 * launch shortcuts, and an action to open the launch configuration dialog.
+	 *
+	 * @param menu the menu to fill
+	 */
+	protected void fillMenu(Menu menu) {
+		int i = 0;
+		if (WebBrowserUtil.canUseInternalWebBrowser()) {
+			addToMenu(menu, new SwitchDefaultBrowserAction(null, WebBrowserPreference.getBrowserChoice() == WebBrowserPreference.INTERNAL, null), i++);
+		}
+		IBrowserDescriptor current = BrowserManager.getInstance().getCurrentWebBrowser();
+		BrowserManager browserManager = BrowserManager.getInstance();
+		Iterator iterator = browserManager.getWebBrowsers().iterator();
+		while (iterator.hasNext()) {
+			IBrowserDescriptor browser = (IBrowserDescriptor) iterator.next();
+			addToMenu(menu, new SwitchDefaultBrowserAction(browser, WebBrowserPreference.getBrowserChoice() != WebBrowserPreference.INTERNAL && browser.equals(current), browserManager), i++);
+		}
+	}
+
+	/**
+	 * Creates the menu for the action
+	 */
+	private void initMenu() {
+		// Add listener to repopulate the menu each time
+		// it is shown because of dynamic history list
+		fMenu.addMenuListener(new MenuAdapter() {
+			public void menuShown(MenuEvent e) {
+				//if (recreateMenu) {
+					Menu m = (Menu) e.widget;
+					MenuItem[] items = m.getItems();
+					for (int i = 0; i < items.length; i++) {
+						items[i].dispose();
+					}
+					fillMenu(m);
+					recreateMenu = false;
+				//}
+			}
+		});
+	}
+
+	public void selectionChanged(IAction action, ISelection selection) {
+		// do nothing
+	}
+	
+	public void run(IAction action) {
+		// do nothing
+	}
+
+	public Menu getMenu(Menu parent) {
+		setMenu(new Menu(parent));
+		//fillMenu(fMenu);
+		initMenu();
+		return fMenu;
+	}
+
+	public Menu getMenu(Control parent) {
+		setMenu(new Menu(parent));
+		//fillMenu(fMenu);
+		initMenu();
+		return fMenu;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/SwitchDefaultBrowserAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/SwitchDefaultBrowserAction.java
new file mode 100644
index 0000000..d9f8a16
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/SwitchDefaultBrowserAction.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.webbrowser;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.ui.internal.browser.BrowserManager;
+import org.eclipse.ui.internal.browser.IBrowserDescriptor;
+import org.eclipse.ui.internal.browser.WebBrowserPreference;
+import org.eclipse.wst.server.ui.internal.Messages;
+/**
+ * Action to open the Web browser.
+ */
+public class SwitchDefaultBrowserAction extends Action {
+	protected IBrowserDescriptor webbrowser;
+	protected BrowserManager browserManager;
+
+	/**
+	 * SwitchDefaultBrowserAction constructor comment.
+	 * 
+	 * @param webbrowser a browser
+	 * @param current true if this is the current browser
+	 * @param manager the browser manager
+	 */
+	public SwitchDefaultBrowserAction(IBrowserDescriptor webbrowser, boolean current, BrowserManager manager) {
+		super();
+		
+		this.webbrowser = webbrowser;
+		this.browserManager = manager;
+		if (webbrowser == null)
+			setText(Messages.internalWebBrowserName);
+		else
+			setText(webbrowser.getName());
+		
+		if (current)
+			setChecked(true);
+	}
+
+	/**
+	 * Implementation of method defined on <code>IAction</code>.
+	 */
+	public void run() {
+		if (webbrowser == null)
+			WebBrowserPreference.setBrowserChoice(WebBrowserPreference.INTERNAL);
+		else {
+			WebBrowserPreference.setBrowserChoice(WebBrowserPreference.EXTERNAL);
+			browserManager.setCurrentWebBrowser(webbrowser);
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ImportServerConfigurationWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ImportServerConfigurationWizard.java
deleted file mode 100644
index f14da00..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ImportServerConfigurationWizard.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.wizard;
-
-import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.wizard.page.ImportConfigurationWizardPage;
-import org.eclipse.wst.server.ui.internal.wizard.page.WizardUtil;
-import org.eclipse.ui.IImportWizard;
-/**
- * A wizard to import existing server configurations.
- */
-public class ImportServerConfigurationWizard extends AbstractWizard implements IImportWizard {
-	protected ImportConfigurationWizardPage page;
-
-	/**
-	 * ImportServerConfiguration constructor comment.
-	 */
-	public ImportServerConfigurationWizard() {
-		super();
-		setWindowTitle(Messages.wizImportConfigurationWizardTitle);
-	}
-	
-	public void addPages() {
-		page = new ImportConfigurationWizardPage();
-		page.setDefaultContainer(WizardUtil.getSelectionContainer(selection));
-		addPage(page);
-	}
-	
-	public boolean performFinish() {
-		return page.performFinish();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ModifyModulesWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ModifyModulesWizard.java
index 2fcc861..0f36479 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ModifyModulesWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ModifyModulesWizard.java
@@ -12,34 +12,29 @@
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.internal.PublishServerJob;
 import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.task.SaveServerTask;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.ModifyModulesWizardFragment;
-import org.eclipse.wst.server.ui.internal.wizard.fragment.TasksWizardFragment;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
  * A wizard used to add and remove modules.
  */
 public class ModifyModulesWizard extends TaskWizard {
 	static class ModifyModulesWizard2 extends WizardFragment {
-		protected IServerWorkingCopy server;
-		
-		public ModifyModulesWizard2(IServerWorkingCopy server) {
-			this.server = server;
-		}
-
 		protected void createChildFragments(List list) {
-			list.add(new WizardFragment() {
-				public void enter() {
-					getTaskModel().putObject(TaskModel.TASK_SERVER, server);
-				}
-			});
 			list.add(new ModifyModulesWizardFragment());
-			list.add(new TasksWizardFragment());
 			list.add(new WizardFragment() {
-				public ITask createFinishTask() {
-					return new SaveServerTask();
+				public void performFinish(IProgressMonitor monitor) throws CoreException {
+					WizardTaskUtil.saveServer(getTaskModel(), monitor);
+					
+					IServer server = (IServer) getTaskModel().getObject(TaskModel.TASK_SERVER);
+					if (server.getServerState() != IServer.STATE_STOPPED) {
+						PublishServerJob publishJob = new PublishServerJob(server);
+						publishJob.schedule();
+					}
 				}
 			});
 		}
@@ -51,8 +46,9 @@
 	 * @param server a server
 	 */
 	public ModifyModulesWizard(IServer server) {
-		super(Messages.wizModuleWizardTitle, new ModifyModulesWizard2(server.createWorkingCopy()));
-	
-		setNeedsProgressMonitor(true);
+		super(Messages.wizModuleWizardTitle, new ModifyModulesWizard2());
+		
+		if (server != null)
+			getTaskModel().putObject(TaskModel.TASK_SERVER, server.createWorkingCopy());
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewInstallableServerWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewInstallableServerWizard.java
new file mode 100644
index 0000000..be5c3fa
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewInstallableServerWizard.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * 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.wst.server.ui.internal.wizard;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.wst.server.core.internal.IInstallableServer;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.wizard.fragment.NewInstallableServerWizardFragment;
+import org.eclipse.wst.server.ui.wizard.WizardFragment;
+/**
+ * A wizard to create a new installable server.
+ */
+public class NewInstallableServerWizard extends TaskWizard {
+	/**
+	 * NewInstallableServerWizard constructor comment.
+	 */
+	public NewInstallableServerWizard() {
+		super(Messages.wizNewServerWizardTitle, new WizardFragment() {
+			protected void createChildFragments(List list) {
+				list.add(new NewInstallableServerWizardFragment());
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						IInstallableServer is = (IInstallableServer) getTaskModel().getObject("installableServer");
+						if (is != null)
+							is.install(monitor);
+					}
+				});
+			}
+		});
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewRuntimeWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewRuntimeWizard.java
index 463d0ac..04a2249 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewRuntimeWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewRuntimeWizard.java
@@ -12,10 +12,10 @@
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.task.FinishWizardFragment;
-import org.eclipse.wst.server.ui.internal.task.SaveRuntimeTask;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.NewRuntimeWizardFragment;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 import org.eclipse.ui.INewWizard;
@@ -31,7 +31,11 @@
 		super(Messages.wizNewRuntimeWizardTitle, new WizardFragment() {
 			protected void createChildFragments(List list) {
 				list.add(new NewRuntimeWizardFragment());
-				list.add(new FinishWizardFragment(new SaveRuntimeTask()));
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+					}
+				});
 			}
 		});
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewServerWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewServerWizard.java
index c5ac0f6..00e954d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewServerWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewServerWizard.java
@@ -18,10 +18,8 @@
 
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.util.Task;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.task.*;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.ModifyModulesWizardFragment;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.NewServerWizardFragment;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.TasksWizardFragment;
@@ -42,17 +40,19 @@
 	public NewServerWizard(final String[] ids, final String[] values) {
 		super(Messages.wizNewServerWizardTitle, new WizardFragment() {
 			protected void createChildFragments(List list) {
-				if (ids != null)
-					list.add(new InputWizardFragment(ids, values));
 				list.add(new NewServerWizardFragment());
-				list.add(new FinishWizardFragment(new TempSaveRuntimeTask()));
-				list.add(new FinishWizardFragment(new TempSaveServerTask()));
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.tempSaveRuntime(getTaskModel(), monitor);
+						WizardTaskUtil.tempSaveServer(getTaskModel(), monitor);
+					}
+				});
 				list.add(new ModifyModulesWizardFragment());
 				list.add(new TasksWizardFragment());
-				list.add(new FinishWizardFragment(new SaveRuntimeTask()));
-				list.add(new FinishWizardFragment(new SaveServerTask()));
-				list.add(new FinishWizardFragment(new Task() {
-					public void execute(IProgressMonitor monitor) throws CoreException {
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+						WizardTaskUtil.saveServer(getTaskModel(), monitor);
 						try {
 							IServer server = (IServer) getTaskModel().getObject(TaskModel.TASK_SERVER);
 							ServerUIPlugin.getPreferences().addHostname(server.getHost());
@@ -60,11 +60,17 @@
 							// ignore
 						}
 					}
-				}));
+				});
 			}
 		});
 		
-		setForcePreviousAndNextButtons(true);
+		if (ids != null) {
+			TaskModel taskModel2 = getTaskModel();
+			int size = ids.length;
+			for (int i = 0; i < size; i++) {
+				taskModel2.putObject(ids[i], values[i]);
+			}
+		}
 	}
 	
 	public void init(IWorkbench newWorkbench, IStructuredSelection newSelection) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java
index 5d0e563..ed5165c 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java
@@ -18,10 +18,8 @@
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.util.Task;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.task.*;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.ModifyModulesWizardFragment;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.NewServerWizardFragment;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.TasksWizardFragment;
@@ -43,14 +41,18 @@
 			protected void createChildFragments(List list) {
 				task = new NewServerWizardFragment(module, launchMode);
 				list.add(task);
-				list.add(new FinishWizardFragment(new TempSaveRuntimeTask()));
-				list.add(new FinishWizardFragment(new TempSaveServerTask()));
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.tempSaveRuntime(getTaskModel(), monitor);
+						WizardTaskUtil.tempSaveServer(getTaskModel(), monitor);
+					}
+				});
 				list.add(new ModifyModulesWizardFragment(module));
 				list.add(new TasksWizardFragment());
-				list.add(new FinishWizardFragment(new SaveRuntimeTask()));
-				list.add(new FinishWizardFragment(new SaveServerTask()));
-				list.add(new FinishWizardFragment(new Task() {
-					public void execute(IProgressMonitor monitor) throws CoreException {
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+						WizardTaskUtil.saveServer(getTaskModel(), monitor);
 						try {
 							IServer server = (IServer) getTaskModel().getObject(TaskModel.TASK_SERVER);
 							ServerUIPlugin.getPreferences().addHostname(server.getHost());
@@ -58,10 +60,7 @@
 							// ignore
 						}
 					}
-				}));
-			}
-			protected boolean useJob() {
-				return true;
+				});
 			}
 		});
 	
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/SelectTasksWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/SelectTasksWizard.java
index 5785c40..16eb7f6 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/SelectTasksWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/SelectTasksWizard.java
@@ -12,36 +12,37 @@
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.TaskModel;
 import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.task.FinishWizardFragment;
-import org.eclipse.wst.server.ui.internal.task.InputWizardFragment;
-import org.eclipse.wst.server.ui.internal.task.SaveServerTask;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.TasksWizardFragment;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
  * A wizard used to select server and module tasks.
  */
 public class SelectTasksWizard extends TaskWizard {
-	protected TasksWizardFragment fragment;
-	
+	protected static TasksWizardFragment fragment;
+
 	/**
 	 * SelectTasksWizard constructor.
 	 * 
 	 * @param server a server
 	 */
 	public SelectTasksWizard(final IServer server) {
-		super(Messages.wizTaskWizardTitle);
-		
-		setRootFragment(new WizardFragment() {
+		super(Messages.wizTaskWizardTitle, new WizardFragment() {
 			protected void createChildFragments(List list) {
-				list.add(new InputWizardFragment(new String[] { TaskModel.TASK_SERVER }, new Object[] { server }));
 				fragment = new TasksWizardFragment();
 				list.add(fragment);
-				list.add(new FinishWizardFragment(new SaveServerTask()));
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveServer(getTaskModel(), monitor);
+					}
+				});
 			}
 		});
+		getTaskModel().putObject(TaskModel.TASK_SERVER, server);
 		addPages();
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java
index 36e859b..4a3dcd6 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java
@@ -29,7 +29,7 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.wst.server.core.ITask;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.wst.server.core.TaskModel;
 import org.eclipse.wst.server.ui.internal.EclipseUtil;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
@@ -38,8 +38,6 @@
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
  * A wizard used to execute tasks.
- * 
- * @since 1.0
  */
 public class TaskWizard implements IWizard {
 	private static final byte FINISH = 2;
@@ -48,7 +46,7 @@
 	private List pages;
 	private boolean addingPages;
 	private Map fragmentData = new HashMap();
-	protected TaskModel taskModel = new TaskModel();
+	protected TaskModel taskModel;
 	
 	private IWizardContainer container = null;
 	
@@ -69,52 +67,45 @@
 	private WizardFragment rootFragment;
 	private WizardFragment currentFragment;
 
-	class FragmentData {
-		public TaskWizardPage page;
-		public ITask finishTask;
-		public ITask cancelTask;
-		
-		public FragmentData(WizardFragment fragment) {
-			finishTask = fragment.createFinishTask();
-			if (finishTask != null)
-				finishTask.setTaskModel(taskModel);
-			
-			cancelTask = fragment.createCancelTask();
-			if (cancelTask != null)
-				cancelTask.setTaskModel(taskModel);
-		}
-	}
-	
 	/**
-	 * TaskWizard constructor comment.
+	 * Create a new TaskWizard with the given title and root fragment.
+	 * 
+	 * @param title a title
+	 * @param rootFragment a root fragment
 	 */
-	public TaskWizard() {
+	public TaskWizard(String title, WizardFragment rootFragment) {
+		this(title, rootFragment, null);
+		setWindowTitle(title);
+	}
+
+	/**
+	 * Create a new TaskWizard with the given title, root fragment, and task model.
+	 * 
+	 * @param title a title
+	 * @param rootFragment a root fragment
+	 * @param taskModel a task model
+	 */
+	public TaskWizard(String title, WizardFragment rootFragment, TaskModel taskModel) {
 		super();
+		if (title != null)
+			setWindowTitle(title);
+		this.rootFragment = rootFragment;
+		this.taskModel = taskModel;
+		if (taskModel == null)
+			this.taskModel = new TaskModel();
 		
 		setNeedsProgressMonitor(true);
 		setForcePreviousAndNextButtons(true);
 	}
 
-	/**
-	 * TaskWizard constructor comment.
-	 * 
-	 * @param rootFragment a root fragment
-	 */
-	public TaskWizard(WizardFragment rootFragment) {
-		this();
-		this.rootFragment = rootFragment;
+	public void setTaskModel(TaskModel taskModel) {
+		this.taskModel = taskModel;
 	}
 	
-	public TaskWizard(String title) {
-		this();
-		setWindowTitle(title);
+	public TaskModel getTaskModel() {
+		return taskModel;
 	}
-	
-	public TaskWizard(String title, WizardFragment rootFragment) {
-		this(rootFragment);
-		setWindowTitle(title);
-	}
-	
+
 	public void setRootFragment(WizardFragment rootFragment) {
 		this.rootFragment = rootFragment;
 	}
@@ -177,10 +168,14 @@
 				// enter & exit the remaining pages
 				int index = list.indexOf(cFragment);
 				while (index > 0 && index < list.size() - 1) {
-					WizardFragment fragment = (WizardFragment) list.get(++index);
+					final WizardFragment fragment = (WizardFragment) list.get(++index);
 					try {
-						fragment.enter();
-						fragment.exit();
+						Display.getDefault().syncExec(new Runnable() {
+							public void run() {
+								fragment.enter();
+								fragment.exit();
+							}
+						});
 					} catch (Exception e) {
 						Trace.trace(Trace.WARNING, "Could not enter/exit page", e);
 					}
@@ -205,7 +200,7 @@
 								Trace.trace(Trace.SEVERE, "Error finishing wizard job", ce);
 								return new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, ce.getLocalizedMessage(), null);
 							}
-							return new Status(IStatus.OK, ServerUIPlugin.PLUGIN_ID, 0, "", null);
+							return Status.OK_STATUS;
 						}
 					}
 					
@@ -254,11 +249,10 @@
 		if (fragment == null)
 			return;
 		
-		FragmentData data = getFragmentData(fragment);
-		if (type == FINISH && data.finishTask != null)
-			data.finishTask.execute(monitor);
-		else if (type == CANCEL && data.cancelTask != null)
-			data.cancelTask.execute(monitor);
+		if (type == FINISH)
+			fragment.performFinish(monitor);
+		else if (type == CANCEL)
+			fragment.performCancel(monitor);
 	}
 	
 	protected WizardFragment getCurrentWizardFragment() {
@@ -334,14 +328,14 @@
 			Iterator iterator = getAllWizardFragments().iterator();
 			while (iterator.hasNext()) {
 				WizardFragment fragment = (WizardFragment) iterator.next();
-				FragmentData data = getFragmentData(fragment);
+				TaskWizardPage page = getFragmentData(fragment);
 				if (fragment.hasComposite()) {
-					if (data.page != null)
-						addPage(data.page);
-					else {
-						TaskWizardPage page = new TaskWizardPage(fragment);
-						data.page = page;
+					if (page != null)
 						addPage(page);
+					else {
+						TaskWizardPage page2 = new TaskWizardPage(fragment);
+						fragmentData.put(fragment, page2);
+						addPage(page2);
 					}
 				}	
 			}
@@ -361,18 +355,16 @@
 		}
 	}*/
 	
-	private FragmentData getFragmentData(WizardFragment fragment) {
+	private TaskWizardPage getFragmentData(WizardFragment fragment) {
 		try {
-			FragmentData data = (FragmentData) fragmentData.get(fragment);
-			if (data != null)
-				return data;
+			TaskWizardPage page = (TaskWizardPage) fragmentData.get(fragment);
+			if (page != null)
+				return page;
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error getting fragment data", e);
 		}
 		
-		FragmentData data = new FragmentData(fragment);
-		fragmentData.put(fragment, data);
-		return data;
+		return null;
 	}
 	
 	protected void updatePages() {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java
index 2debf12..02658ff 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java
@@ -15,14 +15,16 @@
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.wst.server.ui.internal.Trace;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
- * 
- * 
- * @since 1.0
+ * A task wizard page.
  */
 class TaskWizardPage extends WizardPage implements IWizardHandle {
 	protected WizardFragment fragment;
@@ -35,7 +37,18 @@
 	}
 	
 	public void createControl(Composite parentComp) {
-		Composite comp = fragment.createComposite(parentComp, this);
+		Composite comp = null;
+		try {
+			comp = fragment.createComposite(parentComp, this);
+		} catch (Exception e) {
+			Trace.trace(Trace.WARNING, "Could not create wizard page composite", e);
+		}
+		if (comp == null) {
+			comp = new Composite(parentComp, SWT.NONE);
+			comp.setLayout(new FillLayout(SWT.VERTICAL));
+			Label label = new Label(comp, SWT.NONE);
+			label.setText("Internal error");
+		}
 		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
 		data.widthHint = convertHorizontalDLUsToPixels(150);
 		//data.heightHint = convertVerticalDLUsToPixels(350);
@@ -44,19 +57,31 @@
 	}
 
 	public boolean isPageComplete() {
-		if (!fragment.isComplete())
+		//if (isEmptyError)
+		//	return false;
+		try {
+			if (!fragment.isComplete())
+				return false;
+		} catch (Exception e) {
 			return false;
-		if (isEmptyError)
-			return false;
-		return (getMessage() == null || getMessageType() != ERROR);
+		}
+		//return (getMessage() == null || getMessageType() != ERROR);
+		return true;
 	}
 
 	public boolean canFlipToNextPage() {
 		if (getNextPage() == null)
 			return false;
-		if (isEmptyError)
+		//if (isEmptyError)
+		//	return false;
+		try {
+			if (!fragment.isComplete())
+				return false;
+		} catch (Exception e) {
 			return false;
-		return (getMessage() == null || getMessageType() != ERROR);
+		}
+		return true;
+		//return (getMessage() == null || getMessageType() != ERROR);
 	}
 
 	public void setVisible(boolean visible) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java
new file mode 100644
index 0000000..07c1044
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java
@@ -0,0 +1,174 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 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.wst.server.ui.internal.wizard;
+
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.internal.ProjectProperties;
+import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
+import org.eclipse.wst.server.core.internal.ServerWorkingCopy;
+import org.eclipse.wst.server.ui.internal.EclipseUtil;
+import org.eclipse.wst.server.ui.internal.Trace;
+/**
+ * 
+ */
+public class WizardTaskUtil {
+	private WizardTaskUtil() {
+		// do nothing
+	}
+	
+	public static void saveRuntime(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
+		IRuntime runtime = (IRuntime) taskModel.getObject(TaskModel.TASK_RUNTIME);
+		if (runtime != null && runtime instanceof IRuntimeWorkingCopy) {
+			IRuntimeWorkingCopy workingCopy = (IRuntimeWorkingCopy) runtime;
+			if (workingCopy.isDirty())
+				taskModel.putObject(TaskModel.TASK_RUNTIME, workingCopy.save(false, monitor));
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.server.ui.internal.task.ITask#doTask()
+	 */
+	public static void saveServer(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
+		IServer server = (IServer) taskModel.getObject(TaskModel.TASK_SERVER);
+		if (server != null && server instanceof IServerWorkingCopy) {
+			IServerWorkingCopy workingCopy = (IServerWorkingCopy) server;
+			if (workingCopy.isDirty()) {
+				IFile file = ((Server)workingCopy).getFile();
+				if (file != null) {
+					IProject project = file.getProject();
+					
+					if (!file.getProject().exists())
+						EclipseUtil.createNewServerProject(null, project.getName(), null, monitor);
+					
+					ProjectProperties pp = ServerPlugin.getProjectProperties(project);
+					if (!pp.isServerProject())
+						pp.setServerProject(true, monitor);
+				}
+				taskModel.putObject(TaskModel.TASK_SERVER, workingCopy.save(false, monitor));
+			}
+		}
+	}
+	
+	public static void tempSaveRuntime(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
+		IRuntime runtime = (IRuntime) taskModel.getObject(TaskModel.TASK_RUNTIME);
+		if (runtime != null && runtime instanceof IRuntimeWorkingCopy) {
+			IRuntimeWorkingCopy workingCopy = (IRuntimeWorkingCopy) runtime;
+			if (!workingCopy.isDirty())
+				return;
+		
+			runtime = workingCopy.save(false, monitor);
+			taskModel.putObject(TaskModel.TASK_RUNTIME, runtime.createWorkingCopy());
+		}
+	}
+	
+	public static void tempSaveServer(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
+		IServer server = (IServer) taskModel.getObject(TaskModel.TASK_SERVER);
+		if (server != null && server instanceof IServerWorkingCopy) {
+			IServerWorkingCopy workingCopy = (IServerWorkingCopy) server;
+			if (!workingCopy.isDirty())
+				return;
+			
+			IFile file = ((Server)workingCopy).getFile();
+			if (file != null) {
+				IProject project = file.getProject();
+				
+				if (!file.getProject().exists())
+					EclipseUtil.createNewServerProject(null, project.getName(), null, monitor);
+				
+				ProjectProperties pp = ServerPlugin.getProjectProperties(project);
+				if (!pp.isServerProject())
+					pp.setServerProject(true, monitor);
+			}
+			IRuntime runtime = workingCopy.getRuntime();
+			
+			server = workingCopy.save(false, monitor);
+			workingCopy = server.createWorkingCopy();
+			
+			workingCopy.setRuntime(runtime);
+			if (workingCopy.getServerType().hasServerConfiguration()) {
+				((ServerWorkingCopy)workingCopy).importConfiguration(runtime, null);
+			}
+			taskModel.putObject(TaskModel.TASK_SERVER, workingCopy);
+		}
+	}
+	
+	public static void addModule(IModule module, TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
+		if (module == null)
+			return;
+
+		IServer server = (IServer) taskModel.getObject(TaskModel.TASK_SERVER);
+		IModule parentModule = null;
+		try {
+			IModule[] parents = server.getRootModules(module, monitor);
+			if (parents != null && parents.length > 0) {
+				parentModule = parents[0];
+			}
+		} catch (Exception e) {
+			Trace.trace(Trace.WARNING, "Could not find parent module", e);
+		}
+		
+		if (parentModule == null) {
+			// Use the original module since no parent module is available.
+			parentModule = module;
+		}
+
+		IModule[] modules = server.getModules();
+		int size = modules.length;
+		for (int i = 0; i < size; i++) {
+			if (parentModule.equals(modules[i]))
+				return;
+		}
+
+		IServerWorkingCopy workingCopy = server.createWorkingCopy();
+		workingCopy.modifyModules(new IModule[] { parentModule }, new IModule[0], monitor);
+		taskModel.putObject(TaskModel.TASK_SERVER, workingCopy.save(false, monitor));
+	}
+	
+	public static void modifyModules(List add, List remove, TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
+		if ((add == null || add.isEmpty()) && (remove == null || remove.isEmpty()))
+			return;
+
+		IServerWorkingCopy workingCopy = (IServerWorkingCopy) taskModel.getObject(TaskModel.TASK_SERVER);
+
+		// modify modules
+		IModule[] remove2 = new IModule[0];
+		if (remove != null) {
+			remove2 = new IModule[remove.size()];
+			remove.toArray(remove2);
+		}
+		
+		IModule[] add2 = new IModule[0];
+		if (add != null) {
+			add2 = new IModule[add.size()];
+			add.toArray(add2);
+		}
+		
+		IFile file = ((Server)workingCopy).getFile();
+		if (file != null) {
+			IProject project = file.getProject();
+			
+			if (!file.getProject().exists())
+				EclipseUtil.createNewServerProject(null, project.getName(), null, monitor);
+			
+			ProjectProperties pp = ServerPlugin.getProjectProperties(project);
+			if (!pp.isServerProject())
+				pp.setServerProject(true, monitor);
+		}
+		
+		workingCopy.modifyModules(add2, remove2, monitor);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java
index 32c8317..594974f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java
@@ -13,12 +13,14 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.IModuleVisitor;
 import org.eclipse.wst.server.core.internal.Server;
 import org.eclipse.wst.server.ui.internal.Trace;
-import org.eclipse.wst.server.ui.internal.task.ModifyModulesTask;
+import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
 import org.eclipse.wst.server.ui.internal.wizard.page.ModifyModulesComposite;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
@@ -27,7 +29,6 @@
  */
 public class ModifyModulesWizardFragment extends WizardFragment {
 	protected ModifyModulesComposite comp;
-	protected ModifyModulesTask task;
 	
 	protected IModule module;
 
@@ -113,17 +114,8 @@
 		}
 	}
 
-	public void exit() {
-		if (comp != null) {
-			createFinishTask();
-			task.setAddModules(comp.getModulesToAdd());
-			task.setRemoveModules(comp.getModulesToRemove());
-		}
-	}
-
-	public ITask createFinishTask() {
-		if (task == null)
-			task = new ModifyModulesTask(); 
-		return task;
+	public void performFinish(IProgressMonitor monitor) throws CoreException {
+		if (comp != null)
+			WizardTaskUtil.modifyModules(comp.getModulesToAdd(), comp.getModulesToRemove(), getTaskModel(), monitor);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewInstallableServerWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewInstallableServerWizardFragment.java
new file mode 100644
index 0000000..9716ce2
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewInstallableServerWizardFragment.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * 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.wst.server.ui.internal.wizard.fragment;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.wst.server.ui.internal.ImageResource;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.wizard.page.NewInstallableServerComposite;
+import org.eclipse.wst.server.ui.wizard.WizardFragment;
+import org.eclipse.wst.server.ui.wizard.IWizardHandle;
+/**
+ * 
+ */
+public class NewInstallableServerWizardFragment extends WizardFragment {
+	protected NewInstallableServerComposite comp;
+
+	public NewInstallableServerWizardFragment() {
+		// do nothing
+	}
+
+	public boolean hasComposite() {
+		return true;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.server.ui.internal.task.WizardTask#getWizardPage()
+	 */
+	public Composite createComposite(Composite parent, IWizardHandle wizard) {
+		comp = new NewInstallableServerComposite(parent, getTaskModel(), wizard);
+		
+		wizard.setTitle(Messages.wizNewInstallableServerTitle);
+		wizard.setDescription(Messages.wizNewInstallableServerDescription);
+		wizard.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_WIZBAN_NEW_SERVER));
+		return comp;
+	}
+
+	public boolean isComplete() {
+		return getTaskModel().getObject("installableServer") != null;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java
index 0889da9..741d96f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java
@@ -19,7 +19,6 @@
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.swt.widgets.Composite;
 /**
  * 
@@ -56,16 +55,6 @@
 		return page;
 	}
 
-	public boolean isComplete() {
-		if (page != null) {
-			if (page.getRuntime() == null)
-				return false;
-			IStatus status = page.getRuntime().validate(null);
-			return status == null || status.getSeverity() != IStatus.ERROR;
-		}
-		return true;
-	}
-
 	protected void createChildFragments(List list) {
 		if (getTaskModel() == null)
 			return;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
index 2d2ca5f..ac4675c 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
@@ -17,7 +17,7 @@
 
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.internal.ServerWorkingCopy;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 import org.eclipse.wst.server.ui.internal.wizard.page.NewServerComposite;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
@@ -66,48 +66,6 @@
 		return comp;
 	}
 
-	/*protected void createConfiguration(IServerWorkingCopy server) {
-		TaskModel model = getTaskModel();
-		IRuntime runtime = (IRuntime) model.getObject(TaskModel.TASK_RUNTIME);
-		
-		IServerType type = server.getServerType();
-		if (type.hasServerConfiguration()) {
-			server.setServerConfiguration(null);
-			IStatus status = null;
-			if (runtime != null)
-				status = runtime.validate(null);
-			if (status == null || status.isOK()) {
-				try {
-					IFile file = null;
-					if (ServerCore.getServerPreferences().isCreateResourcesInWorkspace())
-						file = ServerUtil.getUnusedServerConfigurationFile(WizardUtil.getServerProject(), null);
-					
-					IServerConfigurationWorkingCopy serverConfiguration = getServerConfiguration(type.getServerConfigurationType(), file, runtime);
-					model.putObject(TaskModel.TASK_SERVER_CONFIGURATION, serverConfiguration);
-					server.setServerConfiguration(serverConfiguration);
-				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Could not create configuration", e);
-				}
-			}
-		}
-	}*/
-	
-	/*protected IServerConfigurationWorkingCopy getServerConfiguration(IServerConfigurationType type, IFile file, IRuntime runtime) throws CoreException {
-		Object key = type.getId() + "|" + file + "|" + runtime;
-		try {
-			IServerConfigurationWorkingCopy serverConfiguration = (IServerConfigurationWorkingCopy) configMap.get(key);
-			if (serverConfiguration != null)
-				return serverConfiguration;
-		} catch (Exception e) {
-			// ignore
-		}
-
-		IServerConfigurationWorkingCopy serverConfiguration = type.importFromRuntime(null, file, runtime, new NullProgressMonitor());
-		ServerUtil.setServerConfigurationDefaultName(serverConfiguration);
-		configMap.put(key, serverConfiguration);
-		return serverConfiguration;
-	}*/
-
 	protected WizardFragment getWizardFragment(String typeId) {
 		try {
 			WizardFragment fragment = (WizardFragment) fragmentMap.get(typeId);
@@ -146,7 +104,7 @@
 			if (server != null) {
 				// createConfiguration(server);
 				if (server.getServerType().hasServerConfiguration()) {
-					((Server)server).importConfiguration(runtime, null);
+					((ServerWorkingCopy)server).importConfiguration(runtime, null);
 				}
 				WizardFragment sub = getWizardFragment(server.getServerType().getId());
 				if (sub != null)
@@ -161,6 +119,12 @@
 		}
 	}
 	
+	public boolean isComplete() {
+		if (comp == null)
+			return false;
+		return comp.getServer() != null; 
+	}
+	
 	public IServerWorkingCopy getServer() {
 		if (comp == null)
 			return null;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/TasksWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/TasksWizardFragment.java
index e368c46..1e14da1 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/TasksWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/TasksWizardFragment.java
@@ -16,21 +16,14 @@
 import java.util.List;
 import java.util.Map;
 
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.*;
-import org.eclipse.wst.server.core.util.Task;
-import org.eclipse.wst.server.ui.internal.EclipseUtil;
-import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.ProgressUtil;
-import org.eclipse.wst.server.ui.internal.Trace;
+import org.eclipse.wst.server.core.model.PublishOperation;
 import org.eclipse.wst.server.ui.internal.editor.IOrdered;
-import org.eclipse.wst.server.ui.internal.editor.ServerEditorCore;
 import org.eclipse.wst.server.ui.internal.wizard.page.TasksComposite;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
@@ -39,33 +32,33 @@
  */
 public class TasksWizardFragment extends WizardFragment {
 	public class TaskInfo implements IOrdered {
-		public int status;
+		public int kind;
 		public String id;
-		public IOptionalTask task2;
+		public PublishOperation task2;
 		
 		private static final String DEFAULT = "default:";
 		
 		public boolean isSelected() {
-			try {
-				Boolean b = (Boolean) selectedTaskMap.get(getId());
-				return b.booleanValue();
-			} catch (Exception e) {
-				// ignore
-			}
+			if (id == null)
+				return false;
 			
-			try {
-				Boolean b = (Boolean) selectedTaskMap.get(DEFAULT + getId());
-				return b.booleanValue();
-			} catch (Exception e) {
-				// ignore
-			}
+			if (selectedTaskMap.containsKey(id))
+				return ((Boolean) selectedTaskMap.get(id)).booleanValue();
+			
+			if (selectedTaskMap.containsKey(DEFAULT + id))
+				return ((Boolean) selectedTaskMap.get(DEFAULT + id)).booleanValue();
+
 			return false;
 		}
 		
 		public void setDefaultSelected(boolean sel) {
 			selectedTaskMap.put(DEFAULT + getId(), new Boolean(sel));
 		}
-		
+
+		public boolean getDefaultSelected() {
+			return ((Boolean) selectedTaskMap.get(DEFAULT + id)).booleanValue();
+		}
+
 		public void setSelected(boolean sel) {
 			selectedTaskMap.put(getId(), new Boolean(sel));
 		}
@@ -141,43 +134,37 @@
 	}
 	
 	protected void createTasks(IServer server, List modules) {
-		String serverTypeId = null;
-		if (server != null)
-			serverTypeId = server.getServerType().getId();
-		
-		// server tasks
-		IPublishTask[] publishTasks = ServerPlugin.getPublishTasks();
-		if (publishTasks != null) {
-			int size = publishTasks.length;
-			for (int i = 0; i < size; i++) {
-				IPublishTask task = publishTasks[i];
-				if (serverTypeId != null && task.supportsType(serverTypeId)) {
-					IOptionalTask[] tasks2 = task.getTasks(server, modules);
-					if (tasks2 != null) {
-						int size2 = tasks2.length;
-						for (int j = 0; j < size2; j++) {
-							int status = tasks2[j].getStatus(); 
-							if (status != IOptionalTask.TASK_UNNECESSARY) {
-								if (status == IOptionalTask.TASK_READY || status == IOptionalTask.TASK_PREFERRED)
-									hasOptionalTasks = true;
-								tasks2[i].setTaskModel(getTaskModel());
-								addServerTask(server, tasks2[j]);
-							}
-						}
-					}
-				}
+		if (server == null)
+			return;
+
+		List enabledTasks = ((Server)server).getEnabledOptionalPublishOperationIds();
+		List disabledTasks = ((Server)server).getDisabledPreferredPublishOperationIds();
+		PublishOperation[] tasks2 = ((Server)server).getAllTasks(modules);
+		for (int j = 0; j < tasks2.length; j++) {
+			int kind = tasks2[j].getKind(); 
+			String id = ((Server)server).getPublishOperationId(tasks2[j]);
+			if (kind == PublishOperation.OPTIONAL || kind == PublishOperation.PREFERRED)
+				hasOptionalTasks = true;
+			tasks2[j].setTaskModel(getTaskModel());
+			
+			boolean selected = true;
+			if (kind == PublishOperation.OPTIONAL) {
+				if (!enabledTasks.contains(id))
+					selected = false;
+			} else if (kind == PublishOperation.PREFERRED) {
+				if (disabledTasks.contains(id))
+					selected = false;
 			}
+			addServerTask(server, tasks2[j], selected);
 		}
 	}
 
-	public void addServerTask(IServer server, IOptionalTask task2) {
+	public void addServerTask(IServer server, PublishOperation task2, boolean selected) {
 		TaskInfo sti = new TaskInfo();
 		sti.task2 = task2;
-		sti.status = task2.getStatus();
-		String id = server.getId();
-		sti.id = id + "|" + task2.getName();
-		if (sti.status == IOptionalTask.TASK_PREFERRED || sti.status == IOptionalTask.TASK_MANDATORY)
-			sti.setDefaultSelected(true);
+		sti.kind = task2.getKind();
+		sti.id = ((Server)server).getPublishOperationId(task2);
+		sti.setDefaultSelected(selected);
 		
 		tasks.add(sti);
 	}
@@ -194,95 +181,49 @@
 		return comp;
 	}
 
-	public ITask createFinishTask() {
-		return new Task() {
-			public void execute(IProgressMonitor monitor) throws CoreException {
-				performFinish(monitor);
-			}
-		};
-	}
-	
 	/**
-	 * Returns the number of tasks run, or -1 if there was an error.
-	 *
-	 * @param monitor
+	 * @see WizardFragment#performFinish(IProgressMonitor)
 	 */
-	protected void performFinish(IProgressMonitor monitor) throws CoreException {
-		List performTasks = new ArrayList();
-
-		if (tasks == null)
-			return;
-		int size = tasks.size();
-		for (int i = 0; i < size; i++) {
-			TaskInfo ti = (TaskInfo) tasks.get(i);
-			if (ti.isSelected())
-				performTasks.add(tasks.get(i));
-		}
-		
-		Trace.trace(Trace.FINEST, "Performing wizard tasks: " + performTasks.size());
-		
-		if (performTasks.size() == 0)
+	public void performFinish(IProgressMonitor monitor) throws CoreException {
+		if (!hasOptionalTasks)
 			return;
 		
-		// get most recent server/configuration
-		boolean createdServerWC = false;
+		if (tasks == null || tasks.isEmpty())
+			return;
+		
 		TaskModel taskModel = getTaskModel();
-		IServer server = (IServer) taskModel.getObject(TaskModel.TASK_SERVER);
+		IServer server = (IServer)taskModel.getObject(TaskModel.TASK_SERVER);
 		if (server == null)
 			return;
-
-		// get working copies
-		IServerWorkingCopy serverWC = null;
-		if (server instanceof IServerWorkingCopy)
-			serverWC = (IServerWorkingCopy) server;
+		
+		boolean createdWC = false;
+		ServerWorkingCopy wc = null;
+		if (server instanceof ServerWorkingCopy)
+			wc = (ServerWorkingCopy)server;
 		else {
-			serverWC = server.createWorkingCopy();
-			createdServerWC = true;
+			wc = (ServerWorkingCopy)server.createWorkingCopy();
+			createdWC = true;
 		}
+		wc.resetPreferredPublishOperations();
+		wc.resetOptionalPublishOperations();
 		
-		taskModel.putObject(TaskModel.TASK_SERVER, serverWC);
-		
-		// begin task
-		monitor.beginTask(Messages.performingTasks, performTasks.size() * 1000);
-		
-		ServerEditorCore.sortOrderedList(performTasks);
-
-		Iterator iterator = performTasks.iterator();
+		Iterator iterator = tasks.iterator();
 		while (iterator.hasNext()) {
-			IProgressMonitor subMonitor = ProgressUtil.getSubMonitorFor(monitor, 1000);
-			Object obj = iterator.next();
-			if (obj instanceof TasksWizardFragment.TaskInfo) {
-				TasksWizardFragment.TaskInfo sti = (TasksWizardFragment.TaskInfo) obj;
-				try {
-					Trace.trace(Trace.FINER, "Executing task: " + sti.task2.getName());
-					sti.task2.setTaskModel(taskModel);
-					sti.task2.execute(subMonitor);
-				} catch (final CoreException ce) {
-					Trace.trace(Trace.SEVERE, "Error executing task " + sti.task2.getName(), ce);
-					throw ce;
-				}
+			TaskInfo task = (TaskInfo)iterator.next();
+			if (PublishOperation.REQUIRED == task.kind)
+				continue;
+			
+			if (PublishOperation.PREFERRED == task.kind) {
+				if (!task.isSelected())
+					wc.disablePreferredPublishOperations(task.task2);
+			} else if (PublishOperation.OPTIONAL == task.kind) {
+				if (task.isSelected())
+					wc.enableOptionalPublishOperations(task.task2);
 			}
-			subMonitor.done();
 		}
 		
-		if (createdServerWC) {
-			if (serverWC.isDirty()) {
-				IFile file = ((Server)serverWC).getFile();
-				if (file != null) {
-					IProject project = file.getProject();
-					
-					if (!file.getProject().exists())
-						EclipseUtil.createNewServerProject(null, project.getName(), null, monitor);
-					
-					ProjectProperties pp = (ProjectProperties) ServerCore.getProjectProperties(project);
-					if (!pp.isServerProject())
-						pp.setServerProject(true, monitor);
-				}
-				taskModel.putObject(TaskModel.TASK_SERVER, serverWC.save(false, monitor));
-			} else
-				taskModel.putObject(TaskModel.TASK_SERVER, serverWC.getOriginal());
-		}
-				
+		if (createdWC && wc.isDirty())
+			wc.save(true, monitor);
 		monitor.done();
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ElementCreationCache.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ElementCreationCache.java
index 79532b0..985961e 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ElementCreationCache.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ElementCreationCache.java
@@ -20,8 +20,6 @@
 import org.eclipse.wst.server.core.IRuntime;
 import org.eclipse.wst.server.core.IServerType;
 import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.core.ServerUtil;
-import org.eclipse.wst.server.core.internal.ServerPreferences;
 /**
  * A helper class used to cache the creation of server elements.
  */
@@ -69,8 +67,8 @@
 	
 		try {
 			IFile file = null;
-			if (ServerPreferences.getInstance().isCreateResourcesInWorkspace())
-				file = ServerUtil.getUnusedServerFile(WizardUtil.getServerProject(), type);
+			//if (ServerPreferences.getInstance().isCreateResourcesInWorkspace())
+			//	file = ServerUtil.getUnusedServerFile(WizardUtil.getServerProject(), type);
 			
 			IServerWorkingCopy server = type.createServer(null, file, (IRuntime)null, monitor);
 			elementCache.put(getKey(type, host), server);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/HostnameComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/HostnameComposite.java
index be399db..408d9ba 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/HostnameComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/HostnameComposite.java
@@ -13,7 +13,6 @@
 import java.util.List;
 
 import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.resource.JFaceResources;
 
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.SWTUtil;
@@ -57,35 +56,6 @@
 		createControl();
 	}
 
-	protected Label createHeadingLabel(Composite parent, String text, int span) {
-		Label label = createLabel(parent, text, span, true, false);
-		label.setFont(JFaceResources.getBannerFont());
-		return label;
-	}
-
-	protected Label createLabel(Composite parent, String text, int span, boolean alignTop, boolean indent) {
-		Label label = new Label(parent, SWT.WRAP);
-		label.setText(text);
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
-		if (alignTop)
-			data.verticalAlignment = GridData.BEGINNING;
-		data.horizontalSpan = span;
-		if (indent)
-			data.horizontalIndent = 10;
-		label.setLayoutData(data);
-		return label;
-	}
-	
-	protected Combo createCombo(Composite parent, String[] items, String text2, int span) {
-		Combo combo2 = new Combo(parent, SWT.DROP_DOWN);
-		combo2.setItems(items);
-		combo2.setText(text2);
-		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
-		data.horizontalSpan = span;
-		combo2.setLayoutData(data);
-		return combo2;
-	}
-
 	/**
 	 * Creates the UI of the page.
 	 */
@@ -98,15 +68,22 @@
 		layout.numColumns = 3;
 		setLayout(layout);
 		//WorkbenchHelp.setHelp(this, ContextIds.SELECT_CLIENT_WIZARD);
-	
-		createHeadingLabel(this, Messages.hostnameTitle, 3);
-
-		createLabel(this, Messages.hostname, 1, false, true);
+		
+		Label label = new Label(this, SWT.WRAP);
+		label.setText(Messages.hostname);
+		label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
 		
 		List hosts = ServerUIPlugin.getPreferences().getHostnames();
 		String[] s = new String[hosts.size()];
 		hosts.toArray(s);
-		combo = createCombo(this, s, LOCALHOST, 2);
+		
+		combo = new Combo(this, SWT.DROP_DOWN);
+		combo.setItems(s);
+		combo.setText(LOCALHOST);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
+		data.horizontalSpan = 2;
+		combo.setLayoutData(data);
+		
 		combo.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				hostnameChanged(combo.getText());
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ImportConfigurationWizardPage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ImportConfigurationWizardPage.java
deleted file mode 100644
index 734cc0f..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ImportConfigurationWizardPage.java
+++ /dev/null
@@ -1,541 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2003, 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.wst.server.ui.internal.wizard.page;
-/*import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.*;
-import org.eclipse.jface.dialogs.Dialog;*/
-import org.eclipse.core.resources.IContainer;
-import org.eclipse.jface.wizard.WizardPage;
-/*import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;*/
-import org.eclipse.swt.widgets.Composite;
-/*import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.help.WorkbenchHelp;
-import org.eclipse.wst.server.core.internal.ServerPlugin;
-import org.eclipse.wst.server.ui.ServerUICore;*/
-import org.eclipse.wst.server.ui.internal.*;
-/**
- * Wizard page to import a configuration.
- */
-public class ImportConfigurationWizardPage extends WizardPage {
-	/*
-	//protected IServerConfigurationType selectedConfigType;
-	//protected IServerConfigurationWorkingCopy configuration;
-	protected Combo serverProject;
-	protected Button create;
-	protected Text name;
-	protected Text filename;
-	//protected ServerConfigurationTypeComposite configTypeComposite;
-	private Label description;
-	protected Button browse;
-	private IContainer defaultContainer;
-	
-	private String[] validationErrors = new String[5];
-	private static final int INVALID_NAME = 0;
-	private static final int INVALID_FOLDER = 1;
-	private static final int INVALID_TYPE = 2;
-	private static final int INVALID_FILENAME = 3;
-	private static final int INVALID_IMPORT = 4;
-	
-	protected LoadThread thread;
-	protected boolean threadDone;*/
-
-	/*class LoadThread extends Thread {
-		final int DELAY = 800;
-		String filename2;
-		IFile file;
-		public void run() {
-			boolean b = true;
-			while (b) {
-				try {
-					sleep(DELAY);
-					b = false;
-					thread = null;
-				} catch (InterruptedException ie) {
-					// ignore
-				}
-			}
-			try {
-				performLoadConfiguration(file, filename2);
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						validatePage(INVALID_IMPORT);
-					}
-				});
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error importing configuration", e);
-			}
-			threadDone = true;
-		}
-	}*/
-
-	/**
-	 * ImportConfigurationWizardPage constructor comment.
-	 */
-	public ImportConfigurationWizardPage() {
-		super("import configuration");
-	
-		setTitle(Messages.wizImportConfigurationTitle);
-		setDescription(Messages.wizImportConfigurationDescription);
-		setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_WIZBAN_IMPORT_SERVER_CONFIGURATION));
-	}
-	
-	/**
-	 * Creates the UI part of the page. Subclasses must reimplement 
-	 * this method to provide their own graphical page content.
-	 * 
-	 * @param parent a parent composite
-	 */
-	public void createControl(Composite parent) {
-		initializeDialogUnits(parent);
-	}
-	/*
-		Composite composite = new Composite(parent, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 3;
-		layout.horizontalSpacing = convertHorizontalDLUsToPixels(4);
-		layout.verticalSpacing = convertVerticalDLUsToPixels(4);
-		layout.marginWidth = convertHorizontalDLUsToPixels(5);
-		layout.marginHeight = convertVerticalDLUsToPixels(5);
-		composite.setLayout(layout);
-		GridData data = new GridData(GridData.FILL_BOTH);
-		data.widthHint = convertHorizontalDLUsToPixels(500);
-		data.heightHint = convertVerticalDLUsToPixels(470);
-		WorkbenchHelp.setHelp(composite, ContextIds.IMPORT_CONFIGURATION_WIZARD);
-	
-		new Label(composite, SWT.NONE).setText(Messages.serverEditorOverviewServerConfigurationName"));
-	
-		name = new Text(composite, SWT.BORDER);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 2;
-		name.setLayoutData(data);
-		name.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent me) {
-				validateName();
-				validatePage(INVALID_NAME);
-			}
-		});
-		name.addFocusListener(new FocusAdapter() {
-			public void focusGained(FocusEvent e) {
-				 validatePage(INVALID_NAME);
-			}
-		});
-		WorkbenchHelp.setHelp(name, ContextIds.IMPORT_CONFIGURATION_NAME);
-	
-		// choose a server project
-		new Label(composite, SWT.NONE).setText(Messages.wizFolder"));
-		serverProject = new Combo(composite, SWT.BORDER);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 2;
-		serverProject.setLayoutData(data);
-		if (defaultContainer != null)
-			serverProject.setText(WizardUtil.getContainerText(defaultContainer));
-		else if (serverProject.getItemCount() == 0)
-			serverProject.setText(ServerPlugin.getResource("%defaultServerProjectName", ""));
-	
-		serverProject.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent me) {
-				validateName();
-				validateFolder();
-				validatePage(INVALID_FOLDER);
-			}
-		});
-		serverProject.addFocusListener(new FocusAdapter() {
-			public void focusGained(FocusEvent e) {
-				 validatePage(INVALID_FOLDER);
-			}
-		});
-		WorkbenchHelp.setHelp(serverProject, ContextIds.IMPORT_CONFIGURATION_FOLDER);
-	
-		configTypeComposite = new ServerConfigurationTypeComposite(composite, SWT.NONE, new ServerConfigurationTypeComposite.ServerConfigurationTypeSelectionListener() {
-			public void configurationTypeSelected(IServerConfigurationType type) {
-				handleFactorySelection(type);
-				validateName();
-				validatePage(INVALID_TYPE);
-			}
-		});
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.heightHint = 130;
-		data.horizontalSpan = 3;
-		configTypeComposite.setLayoutData(data);
-		WorkbenchHelp.setHelp(configTypeComposite, ContextIds.IMPORT_CONFIGURATION_FACTORY);
-	
-		Label label = new Label(composite, SWT.NONE);
-		label.setText(Messages.wizDescription"));
-		data = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
-		label.setLayoutData(data);
-	
-		description = new Label(composite, SWT.WRAP);
-		description.setText("");
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.heightHint = 58;
-		data.horizontalSpan = 2;
-		description.setLayoutData(data);
-	
-		label = new Label(composite, SWT.NONE);
-		label.setText(Messages.wizImportConfigurationLocation"));
-	
-		filename = new Text(composite, SWT.BORDER);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		data.widthHint = 300;
-		filename.setLayoutData(data);
-		filename.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent me) {
-				handleFileSelection();
-				validatePage(INVALID_TYPE);
-			}
-		});
-		WorkbenchHelp.setHelp(filename, ContextIds.IMPORT_CONFIGURATION_LOCATION);
-	
-		browse = SWTUtil.createButton(composite, Messages.wizBrowse")); 
-		browse.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent se) {
-				if (selectedConfigType == null)
-					return;
-				String[] filter = selectedConfigType.getImportFilterExtensions();
-				if (filter != null) {
-					int size = filter.length;
-					String[] s = new String[size];
-					for (int i = 0; i < size; i++) {
-						if (!filter[i].startsWith("*."))
-							s[i] = "*." + filter[i];
-						else
-							s[i] = filter[i];
-					}
-					FileDialog dialog = new FileDialog(getShell());
-					dialog.setText(Messages.wizImportConfigurationFile"));
-					dialog.setFilterPath(filename.getText());
-					dialog.setFilterExtensions(s);
-					String selectedFile = dialog.open();
-					if (selectedFile != null)
-						filename.setText(selectedFile);
-				} else {
-					DirectoryDialog dialog = new DirectoryDialog(getShell());
-					dialog.setMessage(Messages.wizImportConfigurationDirectory"));
-					dialog.setFilterPath(filename.getText());
-					String selectedDirectory = dialog.open();
-					if (selectedDirectory != null)
-						filename.setText(selectedDirectory);
-				}
-			}
-		});
-		browse.setEnabled(false);
-		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		//data.widthHint = 75;
-		data.heightHint = 22;
-		browse.setLayoutData(data);
-		WorkbenchHelp.setHelp(browse, ContextIds.IMPORT_CONFIGURATION_LOCATION_BROWSE);
-	
-		//fillFactoryTree();
-		validationErrors[INVALID_TYPE] = "";
-		validationErrors[INVALID_FILENAME] = "";
-		
-		ServerUIPreferences sp = (ServerUIPreferences) ServerUICore.getPreferences();
-		if (sp.getImportLocation() != null) {
-			filename.setText(sp.getImportLocation());
-			handleFileSelection();
-			validatePage(INVALID_TYPE);
-		}
-	
-		setControl(composite);
-		Dialog.applyDialogFont(composite);
-	}*/
-	
-	/*protected void loadConfiguration() {
-		if (thread != null) {
-			try {
-				thread.interrupt();
-				thread.filename2 = filename.getText();
-				IFile file = null;
-				String theName = name.getText();
-				if (theName != null && !theName.endsWith(IServerConfiguration.FILE_EXTENSION))
-					theName += "." + IServerConfiguration.FILE_EXTENSION;
-				String projectName = serverProject.getText();
-				if (!"metadata".equals(projectName))
-					file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(projectName).append(theName));
-				thread.file = file;
-			} catch (Exception e) {
-				// ignore
-			}
-		} else {
-			// try to avoid multiple threads
-			if (!threadDone) {
-				try {
-					Thread.sleep(200);
-				} catch (Exception e) {
-					// ignore
-				}
-			}
-			if (validationErrors[INVALID_TYPE] != null || validationErrors[INVALID_FILENAME] != null)
-				return;
-			thread = new LoadThread();
-			thread.filename2 = filename.getText();
-			IFile file = null;
-			String theName = name.getText();
-			if (theName != null && !theName.endsWith(IServerConfiguration.FILE_EXTENSION))
-				theName += "." + IServerConfiguration.FILE_EXTENSION;
-			String projectName = serverProject.getText();
-			if (!"metadata".equals(projectName))
-				file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(projectName).append(theName));
-			thread.file = file;
-			getContainer().updateButtons();
-			threadDone = false;
-			thread.start();
-		}
-	}*/
-	
-	/**
-	 * Handle the server factory selection.
-	 */
-	/*protected void handleFactorySelection(IServerConfigurationType type) {
-		validationErrors[INVALID_IMPORT] = null;
-		configuration = null;
-		selectedConfigType = type;
-	
-		validationErrors[INVALID_TYPE] = null;
-		
-		if (selectedConfigType == null) {
-			browse.setEnabled(false);
-			description.setText("");
-			return;
-		}
-	
-		try {
-			String text = selectedConfigType.getDescription();
-			if (text == null)
-				text = "";
-			description.setText(text);
-			browse.setEnabled(true);
-			
-			loadConfiguration();
-		} catch (Exception e) {
-			validationErrors[INVALID_TYPE] = Messages.wizErrorImport");
-			Trace.trace(Trace.SEVERE, "Could not import from " + filename.getText(), e);
-		}
-	}
-	
-	protected void handleFileSelection() {
-		validationErrors[INVALID_IMPORT] = null;
-		String text = filename.getText();
-		if (text == null || text.length() == 0)
-			validationErrors[INVALID_FILENAME] = "";
-		else {
-			validationErrors[INVALID_FILENAME] = null;
-			loadConfiguration();
-		}
-	}
-	
-	protected void performLoadConfiguration(IFile file, String filename2) {
-		try {
-			try {
-				configuration = selectedConfigType.importFromPath(null, file, new Path(filename2), new NullProgressMonitor());
-				if (configuration == null)
-					validationErrors[INVALID_IMPORT] = Messages.wizErrorImport");
-				else
-					validationErrors[INVALID_IMPORT] = null;
-			} catch (CoreException ce) {
-				IStatus status = ce.getStatus();
-				if (status != null && status.getMessage() != null && status.getMessage().length() > 1)
-					validationErrors[INVALID_IMPORT] = ce.getStatus().getMessage();
-				else
-					validationErrors[INVALID_IMPORT] = Messages.wizErrorImport");
-			}
-		} catch (Exception e) {
-			validationErrors[INVALID_IMPORT] = Messages.wizErrorImport");
-			Trace.trace(Trace.SEVERE, "Could not import from " + filename, e);
-		}
-	}*/
-	
-	/**
-	 * Return true if this page is complete.
-	 * @return boolean
-	 */
-	/*public boolean isPageComplete() {
-		// check for validation first
-		for (int i = 0; i < validationErrors.length; i++) {
-			if (validationErrors[i] != null)
-				return false;
-		}
-	
-		if (configuration == null)
-			return false;
-			
-		if (thread != null)
-			return false;
-	
-		// otherwise, defer to superclass
-		return super.isPageComplete();
-	}*/
-	
-	/**
-	 * Finish the wizard by saving the configuration into
-	 * the selected folder.
-	 * @return boolean
-	 */
-	public boolean performFinish() {
-		return true;
-	}
-	/*
-		if (configuration == null)
-			return false;
-			
-		ServerUIPreferences sp = (ServerUIPreferences) ServerUICore.getPreferences();
-		sp.setImportLocation(filename.getText());
-	
-		try {
-			final String theName = name.getText();
-			IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
-				public void run(IProgressMonitor monitor) throws CoreException {
-					saveConfiguration(configuration, theName, new NullProgressMonitor());
-				}
-			};
-			
-			getWizard().getContainer().run(true, true, new WorkspaceRunnableAdapter(runnable));
-
-			return true;
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error saving imported configuration", e);
-			return false;
-		}
-	}*/
-	
-	/**
-	 * Save the element to the given file name.
-	 * @param element org.eclipse.wst.server.core.IServer
-	 * @param name java.lang.String
-	 * @param org.eclipse.core.runtime.IProgressMonitor monitor
-	 */
-	/*protected void saveConfiguration(IServerConfigurationWorkingCopy config, String theName, IProgressMonitor monitor) throws CoreException {
-		// save the element
-		try {
-			IFile file = config.getFile();
-			if (file != null && !file.getProject().exists()) {
-				IProject project = file.getProject();
-				EclipseUtil.createNewServerProject(getShell(), project.getName(), null, monitor);
-			}
-			config.setName(theName);
-			config.save(false, monitor);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error saving created element", e);
-			throw new CoreException(new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, "Could not create server project", null));
-		}
-	}*/
-	
-	/**
-	 * Sets the default container.
-	 * 
-	 * @param container
-	 */
-	public void setDefaultContainer(IContainer container) {
-		//defaultContainer = container;
-	}
-	
-	/*public void setVisible(boolean visible) {
-		super.setVisible(visible);
-	
-		if (visible) {
-			// force the focus to initially validate the fields
-			validateName();
-			validateFolder();
-			handleFactorySelection(null);
-			validatePage(INVALID_NAME);
-	
-			name.forceFocus();
-		}
-	}*/
-	
-	/**
-	 * Validates the folder.
-	 */
-	/*protected void validateFolder() {
-		String text = serverProject.getText();
-		if (text == null || text.length() == 0) {
-			validationErrors[INVALID_FOLDER] = "";
-			return;
-		}
-	
-		validationErrors[INVALID_FOLDER] = WizardUtil.validateContainer(text);
-	}*/
-	
-	/**
-	 * Validates the name.
-	 */
-	/*protected void validateName() {
-		String text = name.getText();
-		if (text == null || text.length() == 0) {
-			validationErrors[INVALID_NAME] = "";
-			return;
-		}
-	
-		IStatus status = ResourcesPlugin.getWorkspace().validateName(text, IResource.FILE);
-		if (status.isOK())
-			status = ResourcesPlugin.getWorkspace().validateName(text, IResource.FOLDER);
-		
-		if (!status.isOK())
-			validationErrors[INVALID_NAME] = status.getMessage();
-		else {
-			// check if file exists
-			String fileName = text;
-			if (selectedConfigType != null) {
-				String ext = IServerConfiguration.FILE_EXTENSION;
-				if (ext != null && !fileName.endsWith("." + ext))
-					fileName += "." + ext;
-			}
-		
-			IContainer container = WizardUtil.findContainer(serverProject.getText());
-			if (container != null && container.getLocation().append(fileName).toFile().exists()) {
-				validationErrors[INVALID_NAME] = Messages.wizErrorResourceAlreadyExists");
-			} else
-				validationErrors[INVALID_NAME] = null;
-		}
-	}*/
-	
-	/**
-	 * Display the correct error message and enable/disable
-	 * the Finish or Next button.
-	 * @param x the current control (error message gets precedence)
-	 */
-	/*protected void validatePage(int x) {
-		if (x >= 0 && validationErrors[x] != null && validationErrors[x].length() > 0) {
-			setErrorMessage(validationErrors[x]);
-			getContainer().updateButtons();
-			return;
-		}
-		int size = validationErrors.length;
-		for (int i = 0; i < size; i++) {
-			if (validationErrors[i] != null && validationErrors[i].length() > 0) {
-				setErrorMessage(validationErrors[i]);
-				getContainer().updateButtons();
-				return;
-			}
-		}
-		setErrorMessage(null);
-		getContainer().updateButtons();
-	}*/
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ModifyModulesComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ModifyModulesComposite.java
index c5f6aed..9e2df33 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ModifyModulesComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ModifyModulesComposite.java
@@ -20,7 +20,15 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IMessageProvider;
-import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -31,7 +39,6 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.ui.ServerUICore;
@@ -41,36 +48,148 @@
  * A wizard page used to add and remove modules.
  */
 public class ModifyModulesComposite extends Composite {
-	protected static final ILabelProvider slp = ServerUICore.getLabelProvider();
-	
 	protected IWizardHandle wizard;
-	
+
 	protected IServerAttributes server;
 
 	protected Map childModuleMap = new HashMap();
-	protected Map parentTreeItemMap = new HashMap();
+	protected Map parentModuleMap = new HashMap();
 
 	// original modules on the server
 	protected List originalModules = new ArrayList();
-	
+
 	// modules available to be added to the server
 	protected List modules = new ArrayList();
-	
+
 	// current modules on the server
 	protected List deployed = new ArrayList();
 
-	protected Tree availableTree;
-	protected Tree deployedTree;
-	
+	protected TreeViewer availableTreeViewer;
+	protected TreeViewer deployedTreeViewer;
+
 	protected Button add, addAll;
 	protected Button remove, removeAll;
-	
+
 	protected TaskModel taskModel;
 	protected IModule newModule;
 	protected IModule origNewModule;
-	
+
 	protected Map errorMap;
 
+	abstract class TreeContentProvider implements ITreeContentProvider {
+		public void dispose() {
+			// do nothing
+		}
+
+		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+			// do nothing
+		}
+		
+		public Object[] getChildren(Object parentElement) {
+			IModule[] parent = (IModule[]) parentElement;
+			IModule[] children = (IModule[]) childModuleMap.get(new ChildModuleMapKey(parent));
+			
+			List list = new ArrayList();
+			if (children != null) {
+				int size = children.length;
+				for (int i = 0; i < size; i++) {
+					IModule child = children[i];
+					
+					parentModuleMap.put(child, parent);
+					
+					int size2 = parent.length;
+					IModule[] module2 = new IModule[size2 + 1];
+					System.arraycopy(parent, 0, module2, 0, size2);
+					module2[size2] = child;
+					list.add(module2);
+				}
+			}
+			return list.toArray();
+		}
+
+		public Object getParent(Object element) {
+			IModule[] child = (IModule[]) element;
+			return (IModule[]) parentModuleMap.get(child);
+		}
+
+		public boolean hasChildren(Object element) {
+			IModule[] parent = (IModule[]) element;
+			IModule[] children = (IModule[]) childModuleMap.get(new ChildModuleMapKey(parent));
+			return (children != null && children.length > 0);
+		}
+	}
+
+	class AvailableContentProvider extends TreeContentProvider {
+		public Object[] getElements(Object inputElement) {
+			List list = new ArrayList();
+			Iterator iterator = modules.iterator();
+			while (iterator.hasNext()) {
+				IModule module = (IModule) iterator.next();
+				list.add(new IModule[] { module });
+			}
+			return list.toArray();
+		}
+	}
+
+	class DeployedContentProvider extends TreeContentProvider {
+		public Object[] getElements(Object inputElement) {
+			List list = new ArrayList();
+			Iterator iterator = deployed.iterator();
+			while (iterator.hasNext()) {
+				IModule module = (IModule) iterator.next();
+				list.add(new IModule[] { module });
+			}
+			return list.toArray();
+		}
+	}
+
+	/**
+	 * The key element for the child module map
+	 * ChildMapModuleKey
+	 */
+	protected class ChildModuleMapKey {
+		private IModule[] moduleTree;
+		
+		protected ChildModuleMapKey(IModule curModule) {
+			if (curModule != null) {
+				moduleTree = new IModule[] { curModule };
+			}
+		}
+		
+		protected ChildModuleMapKey(IModule[] curModuleTree) {
+			moduleTree = curModuleTree;
+		}
+		
+		public boolean equals(Object obj) {
+			if (obj == this) // same object
+				return true;
+			
+			if (!(obj instanceof ChildModuleMapKey))
+				return false;
+				
+			IModule[] curCompareModule = ((ChildModuleMapKey) obj).moduleTree;
+			if (curCompareModule == moduleTree) {
+				// the module tree is the same
+				return true;
+			} else if (moduleTree == null || curCompareModule == null || moduleTree.length != curCompareModule.length){
+				return false;
+			} else {
+				// compare each module
+				for (int i = 0; i < curCompareModule.length; i++) {
+					if (!curCompareModule[i].equals(moduleTree[i]))
+						return false;
+				}
+				return true;
+			}
+		}
+
+		public int hashCode() {
+			// force the same hash code on all the instances to makes sure the
+			// equals(Object) method is being used for comparing the objects
+			return 12345;
+		}
+	}
+
 	/**
 	 * Create a new ModifyModulesComposite.
 	 * 
@@ -116,6 +235,7 @@
 		
 		// add new module
 		newModule = null;
+		errorMap = new HashMap();
 		if (origNewModule != null) {
 			try {
 				IModule[] parents = server.getRootModules(origNewModule, null);
@@ -123,8 +243,11 @@
 					newModule = parents[0];
 				else
 					newModule = origNewModule;
+			} catch (CoreException ce) {
+				errorMap.put(newModule, ce.getStatus());
+				newModule = null;
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not find parent module", e);
+				Trace.trace(Trace.WARNING, "Could not find root module", e);
 				newModule = null;
 			}
 		}
@@ -132,7 +255,6 @@
 			deployed.add(newModule);
 
 		// get remaining modules
-		errorMap = new HashMap();
 		IModule[] modules2 = ServerUtil.getModules(server.getServerType().getRuntimeType().getModuleTypes());
 		if (modules2 != null) {
 			int size = modules2.length;
@@ -166,7 +288,8 @@
 			IModule module = (IModule) iterator.next();
 			try {
 				IModule[] children = server.getChildModules(new IModule[] { module }, null);
-				childModuleMap.put(module, children);
+				if (children != null && children.length > 0)
+					childModuleMap.put(new ChildModuleMapKey(module), children);
 			} catch (Exception e) {
 				// ignore
 			}
@@ -177,19 +300,19 @@
 			IModule module = (IModule) iterator.next();
 			try {
 				IModule[] children = server.getChildModules(new IModule[] { module }, null);
-				childModuleMap.put(module, children);
+				if (children != null && children.length > 0)
+					childModuleMap.put(new ChildModuleMapKey(module), children);
 			} catch (Exception e) {
 				// ignore
 			}
 		}
 		
-		if (availableTree != null)
+		if (availableTreeViewer != null)
 			Display.getDefault().syncExec(new Runnable() {
 				public void run() {
 					try { // update trees if we can
-						parentTreeItemMap = new HashMap();
-						fillTree(availableTree, modules);
-						fillTree(deployedTree, deployed);
+						availableTreeViewer.refresh();
+						deployedTreeViewer.refresh();
 						setEnablement();
 					} catch (Exception e) {
 						// ignore
@@ -210,8 +333,6 @@
 		GridLayout layout = new GridLayout();
 		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
 		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
 		layout.numColumns = 3;
 		setLayout(layout);
 		setFont(getParent().getFont());
@@ -232,16 +353,30 @@
 		label = new Label(this, SWT.NONE);
 		label.setText(Messages.wizModuleDeployedList);
 
-		availableTree = new Tree(this, SWT.BORDER);
+		Tree availableTree = new Tree(this, SWT.BORDER);
 		data = new GridData(GridData.FILL_BOTH);
 		data.heightHint = 200;
 		data.widthHint = 150;
 		availableTree.setLayoutData(data);
-		availableTree.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
+		
+		availableTreeViewer = new TreeViewer(availableTree);
+		availableTreeViewer.setLabelProvider(ServerUICore.getLabelProvider());
+		availableTreeViewer.setContentProvider(new AvailableContentProvider());
+		availableTreeViewer.setSorter(new ViewerSorter());
+		availableTreeViewer.setInput("root");
+		
+		availableTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
 				setEnablement();
 			}
 		});
+		availableTreeViewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				setEnablement();
+				if (add.isEnabled())
+					add(false);
+			}
+		});
 
 		// slosh buttons
 		Composite comp = new Composite(this, SWT.NONE);
@@ -294,36 +429,59 @@
 			}
 		});
 		
-		deployedTree = new Tree(this, SWT.BORDER);
+		Tree deployedTree = new Tree(this, SWT.BORDER);
 		data = new GridData(GridData.FILL_BOTH);
 		data.widthHint = 150;
 		deployedTree.setLayoutData(data);
-		deployedTree.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
+		
+		deployedTreeViewer = new TreeViewer(deployedTree);
+		deployedTreeViewer.setLabelProvider(ServerUICore.getLabelProvider());
+		deployedTreeViewer.setContentProvider(new DeployedContentProvider());
+		deployedTreeViewer.setSorter(new ViewerSorter());
+		deployedTreeViewer.setInput("root");
+		
+		deployedTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
 				setEnablement();
 			}
 		});
-		
-		parentTreeItemMap = new HashMap();
-		fillTree(availableTree, modules);
-		fillTree(deployedTree, deployed);
+		deployedTreeViewer.addDoubleClickListener(new IDoubleClickListener() {
+			public void doubleClick(DoubleClickEvent event) {
+				setEnablement();
+				if (remove.isEnabled())
+					remove(false);
+			}
+		});
 		
 		setEnablement();
-		
 		availableTree.setFocus();
 		
 		Dialog.applyDialogFont(this);
 	}
-	
+
+	protected IModule getAvailableSelection() {
+		IStructuredSelection sel = (IStructuredSelection) availableTreeViewer.getSelection();
+		return getModule((IModule[]) sel.getFirstElement());
+	}
+
+	protected IModule getDeployedSelection() {
+		IStructuredSelection sel = (IStructuredSelection) deployedTreeViewer.getSelection();
+		return getModule((IModule[]) sel.getFirstElement());
+	}
+
+	protected static IModule getModule(IModule[] modules2) {
+		if (modules2 == null)
+			return null;
+		return modules2[modules2.length - 1];
+	}
+
 	protected void setEnablement() {
 		boolean enabled = false;
 		wizard.setMessage(null, IMessageProvider.NONE);
-		if (availableTree.getItemCount() > 0) {
+		
+		IModule module = getAvailableSelection();		
+		if (module != null) {
 			try {
-				TreeItem item = availableTree.getSelection()[0];
-				item = (TreeItem) parentTreeItemMap.get(item);
-				IModule module = (IModule) item.getData();
-				
 				IStatus status = (IStatus) errorMap.get(module);
 				if (modules.contains(module)) {
 					if (status == null)
@@ -340,14 +498,12 @@
 			}
 		}
 		add.setEnabled(enabled);
-		addAll.setEnabled(availableTree.getItemCount() > 0);
+		addAll.setEnabled(modules.size() > 0);
 		
 		enabled = false;
-		if (deployedTree.getItemCount() > 0) {
+		module = getDeployedSelection();
+		if (module != null) {
 			try {
-				TreeItem item = deployedTree.getSelection()[0];
-				item = (TreeItem) parentTreeItemMap.get(item);
-				IModule module = (IModule) item.getData();
 				if (deployed.contains(module) && !module.equals(newModule))
 					enabled = true;
 			} catch (Exception e) {
@@ -356,77 +512,39 @@
 		}
 		remove.setEnabled(enabled);
 		if (newModule == null)
-			removeAll.setEnabled(deployedTree.getItemCount() > 0);
+			removeAll.setEnabled(deployed.size() > 0);
 		else
-			removeAll.setEnabled(deployedTree.getItemCount() > 1);
-	}
-
-	protected void addChildren(TreeItem item, IModule[] module) {
-		try {
-			IModule[] children = (IModule[]) childModuleMap.get(module);
-			if (children != null) {
-				int size = children.length;
-				for (int i = 0; i < size; i++) {
-					IModule child = children[i];
-					TreeItem childItem = new TreeItem(item, SWT.NONE);
-					childItem.setText(slp.getText(child));
-					childItem.setImage(slp.getImage(child));
-					childItem.setData(child);
-					parentTreeItemMap.put(childItem, item);
-					
-					int size2 = module.length;
-					IModule[] module2 = new IModule[size2 + 1];
-					System.arraycopy(module, 0, module2, 0, size2);
-					module2[size2] = child;
-					addChildren(childItem, module2);
-				}
-			}
-		} catch (Exception e) {
-			// ignore
-		}
-	}
-
-	protected void fillTree(Tree tree, List modules2) {
-		tree.removeAll();
-
-		Iterator iterator = modules2.iterator();
-		while (iterator.hasNext()) {
-			IModule module = (IModule) iterator.next();
-			TreeItem item = new TreeItem(tree, SWT.NONE);
-			item.setText(slp.getText(module));
-			item.setImage(slp.getImage(module));
-			item.setData(module);
-			parentTreeItemMap.put(item, item);
-			addChildren(item, new IModule[] { module });
-		}
+			removeAll.setEnabled(deployed.size() > 1);
 	}
 
 	protected void add(boolean all) {
-		if (all)
-			moveAll(availableTree.getItems(), true);
-		else
-			moveAll(availableTree.getSelection(), true);
+		if (all) {
+			IModule[] modules2 = new IModule[modules.size()];
+			modules.toArray(modules2);
+			moveAll(modules2, true);
+		} else
+			moveAll(new IModule[] { getAvailableSelection() }, true);
 		updateTaskModel();
 	}
 
 	protected void remove(boolean all) {
-		if (all)
-			moveAll(deployedTree.getItems(), false);
-		else
-			moveAll(deployedTree.getSelection(), false);
+		if (all) {
+			IModule[] modules2 = new IModule[deployed.size()];
+			deployed.toArray(modules2);
+			moveAll(modules2, false);
+		} else
+			moveAll(new IModule[] { getDeployedSelection() }, false);
 		updateTaskModel();
 	}
 
-	protected void moveAll(TreeItem[] items, boolean add2) {
-		int size = items.length;
+	protected void moveAll(IModule[] mods, boolean add2) {
+		int size = mods.length;
 		List list = new ArrayList();
 		for (int i = 0; i < size; i++) {
-			TreeItem item = (TreeItem) parentTreeItemMap.get(items[i]);
-			IModule module = (IModule) item.getData();
-			IStatus status = (IStatus) errorMap.get(module);
+			IStatus status = (IStatus) errorMap.get(mods[i]);
 			
-			if (status == null && !list.contains(module))
-				list.add(module);
+			if (status == null && !list.contains(mods[i]))
+				list.add(mods[i]);
 		}
 
 		Iterator iterator = list.iterator();
@@ -440,10 +558,9 @@
 				deployed.remove(module);
 			}
 		}
-
-		parentTreeItemMap = new HashMap();
-		fillTree(availableTree, modules);
-		fillTree(deployedTree, deployed);
+		
+		availableTreeViewer.refresh();
+		deployedTreeViewer.refresh();
 
 		setEnablement();
 	}
@@ -456,14 +573,6 @@
 		wizard.update();
 	}
 
-	/**
-	 * Return true if this page is complete.
-	 * @return boolean
-	 */
-	public boolean isPageComplete() {
-		return true;
-	}
-
 	public List getModulesToRemove() {
 		List list = new ArrayList();
 		Iterator iterator = originalModules.iterator();
@@ -500,7 +609,7 @@
 			modules2[size2] = module;
 			map.add(modules2);
 			
-			IModule[] children2 = (IModule[]) childModuleMap.get(module);
+			IModule[] children2 = (IModule[]) childModuleMap.get(new ChildModuleMapKey(module));
 			if (children2 != null)
 				addChildMap(map, modules2, children2);
 		}
@@ -514,7 +623,7 @@
 			IModule module = (IModule) iterator.next();
 			IModule[] moduleTree = new IModule[] { module };
 			map.add(moduleTree);
-			IModule[] children = (IModule[]) childModuleMap.get(module);
+			IModule[] children = (IModule[]) childModuleMap.get(new ChildModuleMapKey(module));
 			if (children != null)
 				addChildMap(map, moduleTree, children);
 		}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewInstallableServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewInstallableServerComposite.java
new file mode 100644
index 0000000..e921b20
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewInstallableServerComposite.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * 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.wst.server.ui.internal.wizard.page;
+
+import org.eclipse.jface.dialogs.Dialog;
+
+import org.eclipse.wst.server.core.TaskModel;
+import org.eclipse.wst.server.core.internal.IInstallableServer;
+import org.eclipse.wst.server.ui.internal.SWTUtil;
+import org.eclipse.wst.server.ui.internal.viewers.InstallableServerComposite;
+import org.eclipse.wst.server.ui.wizard.IWizardHandle;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+/**
+ * A composite used to select a server to install.
+ */
+public class NewInstallableServerComposite extends Composite {
+	private TaskModel taskModel;
+	private IWizardHandle wizard;
+
+	/**
+	 * Create a new NewInstallableServerComposite.
+	 * 
+	 * @param parent a parent composite
+	 * @param taskModel a task model
+	 * @param wizard the wizard this composite is contained in
+	 */
+	public NewInstallableServerComposite(Composite parent, TaskModel taskModel, IWizardHandle wizard) {
+		super(parent, SWT.NONE);
+		this.taskModel = taskModel;
+		this.wizard = wizard;
+		
+		createControl();
+	}
+
+	/**
+	 * Creates the UI of the page.
+	 */
+	protected void createControl() {
+		GridLayout layout = new GridLayout();
+		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
+		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		layout.numColumns = 3;
+		setLayout(layout);
+		//WorkbenchHelp.setHelp(this, ContextIds.SELECT_CLIENT_WIZARD);
+		
+		InstallableServerComposite comp = new InstallableServerComposite(this, SWT.NONE, new InstallableServerComposite.InstallableServerSelectionListener() {
+			public void installableServerSelected(IInstallableServer server) {
+				handleSelection(server);
+			}
+		});
+		GridData data = new GridData(GridData.FILL_BOTH);
+		data.heightHint = 200;
+		comp.setLayoutData(data);
+		
+		Dialog.applyDialogFont(this);
+	}
+
+	protected void handleSelection(IInstallableServer server) {
+		taskModel.putObject("installableServer", server);
+		wizard.update();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
index 4a0c5be..61a17a3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
@@ -19,12 +19,19 @@
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.preference.IPreferenceNode;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jface.window.Window;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
@@ -32,7 +39,7 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.help.IWorkbenchHelpSystem;
 import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.internal.ServerWorkingCopy;
 import org.eclipse.wst.server.core.util.SocketUtil;
 import org.eclipse.wst.server.ui.internal.*;
 import org.eclipse.wst.server.ui.internal.viewers.ServerTypeComposite;
@@ -52,22 +59,21 @@
 	}
 	protected IWizardHandle2 wizard;
 
-	//private IContainer defaultContainer;
-	//private String defaultServerTypeId;
-	private ServerTypeComposite serverTypeComposite;
-	
+	protected ServerTypeComposite serverTypeComposite;
+
 	protected Label runtimeLabel;
 	protected Combo runtimeCombo;
+	protected Button runtimeButton;
 	protected IRuntime[] runtimes;
 
 	protected IRuntime runtime;
 	protected IServerWorkingCopy server;
 	protected ServerSelectionListener listener;
-	
+
 	protected String host;
-	
+
 	protected IModuleType moduleType;
-	
+
 	protected ElementCreationCache cache = new ElementCreationCache();
 
 	/**
@@ -88,7 +94,7 @@
 		this.moduleType = moduleType;
 
 		createControl();
-		wizard.setMessage("", IMessageProvider.ERROR);
+		wizard.setMessage("", IMessageProvider.ERROR); //$NON-NLS-1$
 	}
 
 	/**
@@ -97,7 +103,7 @@
 	protected void createControl() {
 		// top level group
 		GridLayout layout = new GridLayout();
-		layout.numColumns = 2;
+		layout.numColumns = 3;
 		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
 		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
 		layout.marginWidth = 0;
@@ -116,16 +122,15 @@
 		});
 		serverTypeComposite.setIncludeIncompatibleVersions(true);
 		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
-		data.horizontalSpan = 2;
+		data.horizontalSpan = 3;
 		serverTypeComposite.setLayoutData(data);
-		whs.setHelp(serverTypeComposite, ContextIds.NEW_SERVER_INSTANCE_FACTORY);
+		whs.setHelp(serverTypeComposite, ContextIds.NEW_SERVER_TYPE);
 		
 		runtimeLabel = new Label(this, SWT.NONE);
 		runtimeLabel.setText(Messages.wizNewServerRuntime);
 		
 		runtimeCombo = new Combo(this, SWT.READ_ONLY);
-		data = new GridData(GridData.FILL_HORIZONTAL);
-		runtimeCombo.setLayoutData(data);
+		runtimeCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		runtimeCombo.addSelectionListener(new SelectionListener() {
 			public void widgetSelected(SelectionEvent e) {
 				try {
@@ -143,9 +148,34 @@
 			}
 		});
 		
+		runtimeButton = SWTUtil.createButton(this, Messages.installedRuntimes);
+		runtimeButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
+		runtimeButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if (showPreferencePage())
+					updateRuntimeCombo(serverTypeComposite.getSelectedServerType());
+			}
+		});
 		Dialog.applyDialogFont(this);
 	}
 
+	protected boolean showPreferencePage() {
+		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
+		IPreferenceNode node = manager.find("org.eclipse.wst.server.ui.preferencePage").findSubNode("org.eclipse.wst.server.ui.runtime.preferencePage"); //$NON-NLS-1$ //$NON-NLS-2$
+		PreferenceManager manager2 = new PreferenceManager();
+		manager2.addToRoot(node);
+		final PreferenceDialog dialog = new PreferenceDialog(this.getShell(), manager2);
+		final boolean[] result = new boolean[] { false };
+		BusyIndicator.showWhile(this.getDisplay(), new Runnable() {
+			public void run() {
+				dialog.create();
+				if (dialog.open() == Window.OK)
+					result[0] = true;
+			}
+		});
+		return result[0];
+	}
+
 	public void setHost(String host) {
 		this.host = host;
 		if (serverTypeComposite == null)
@@ -156,6 +186,7 @@
 			serverTypeComposite.setHost(true);
 		else
 			serverTypeComposite.setHost(false);
+		handleTypeSelection(serverTypeComposite.getSelectedServerType());
 		if (server != null) {
 			server.setHost(host);
 			ServerUtil.setServerDefaultName(server);
@@ -198,14 +229,14 @@
 							server.setRuntime(runtime);
 							
 							if (server.getServerType().hasServerConfiguration()) {
-								((Server)server).importConfiguration(runtime, null);
+								((ServerWorkingCopy)server).importConfiguration(runtime, null);
 							}
 						}
 					}
 				} catch (CoreException cex) {
 					ce[0] = cex;
 				} catch (Throwable t) {
-					Trace.trace(Trace.SEVERE, "Error creating element", t);
+					Trace.trace(Trace.SEVERE, "Error creating element", t); //$NON-NLS-1$
 				} finally {
 					monitor.done();
 				}
@@ -214,7 +245,7 @@
 		try {
 			wizard.run(true, false, runnable);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error with runnable", e);
+			Trace.trace(Trace.SEVERE, "Error with runnable", e); //$NON-NLS-1$
 		}
 	
 		if (ce[0] != null)
@@ -252,6 +283,9 @@
 				runtimeCombo.setEnabled(false);
 				runtimeLabel.setVisible(false);
 				runtimeCombo.setVisible(false);
+				runtimeButton.setEnabled(false);
+				runtimeButton.setVisible(false);
+				
 			}
 			return;
 		}
@@ -279,7 +313,7 @@
 				runtimes = new IRuntime[1];
 				runtimes[0] = runtimeWC;
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Couldn't create runtime", e);
+				Trace.trace(Trace.SEVERE, "Couldn't create runtime", e); //$NON-NLS-1$
 			}
 		}
 		
@@ -297,10 +331,14 @@
 						runtimeCombo.select(i);
 				}
 			}
-			runtimeCombo.setEnabled(size > 1);
-			runtimeLabel.setEnabled(size > 1);
-			runtimeLabel.setVisible(size > 1);
-			runtimeCombo.setVisible(size > 1);
+			
+			boolean showRuntime = ServerUIPlugin.getRuntimes(runtimeType).length >=1;
+			runtimeCombo.setEnabled(showRuntime);
+			runtimeLabel.setEnabled(showRuntime);
+			runtimeButton.setEnabled(showRuntime);
+			runtimeLabel.setVisible(showRuntime);
+			runtimeCombo.setVisible(showRuntime);
+			runtimeButton.setVisible(showRuntime);
 		}
 	}
 
@@ -320,10 +358,12 @@
 		
 		updateRuntimeCombo(serverType);
 		if (wrong) {
+			server = null;
 			wizard.setMessage(NLS.bind(Messages.errorVersionLevel, new Object[] { moduleType.getName(), moduleType.getVersion() }), IMessageProvider.ERROR);
-		} else if (serverType == null)
-			wizard.setMessage("", IMessageProvider.ERROR);
-		else {
+		} else if (serverType == null) {
+			server = null;
+			wizard.setMessage("", IMessageProvider.ERROR); //$NON-NLS-1$
+		} else {
 			wizard.setMessage(null, IMessageProvider.NONE);
 			loadServerImpl(serverType);
 		}
@@ -353,11 +393,15 @@
 		if (visible)
 			handleTypeSelection(serverTypeComposite.getSelectedServerType());
 	}
-	
+
+	public void refresh() {
+		serverTypeComposite.refresh();
+	}
+
 	public IRuntime getRuntime() {
 		return runtime;
 	}
-	
+
 	public IServerWorkingCopy getServer() {
 		return server;
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
index 9aac853..06b33c3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
@@ -67,18 +67,15 @@
 		GridLayout layout = new GridLayout();
 		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
 		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		layout.numColumns = 1;
 		setLayout(layout);
 		
-		RuntimeTypeComposite comp = new RuntimeTypeComposite(this, SWT.NONE, true, new RuntimeTypeComposite.RuntimeTypeSelectionListener() {
+		final RuntimeTypeComposite comp = new RuntimeTypeComposite(this, SWT.NONE, true, new RuntimeTypeComposite.RuntimeTypeSelectionListener() {
 			public void runtimeTypeSelected(IRuntimeType runtimeType) {
 				handleSelection(runtimeType);
 			}
 		}, type, version, runtimeTypeId);
 		GridData data = new GridData(GridData.FILL_BOTH);
-		data.heightHint = 200;
+		data.heightHint = 250;
 		comp.setLayoutData(data);
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewServerComposite.java
index d106a79..348b95c 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewServerComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewServerComposite.java
@@ -12,10 +12,11 @@
 
 import java.lang.reflect.InvocationTargetException;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.resource.JFaceResources;
 
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.SWT;
@@ -100,13 +101,7 @@
 	public NewServerComposite(Composite parent, IWizardHandle wizard) {
 		this(parent, wizard, null, null);
 	}
-	
-	protected Label createHeadingLabel(Composite parent, String text, int span) {
-		Label label = createLabel(parent, text, span);
-		label.setFont(JFaceResources.getBannerFont());
-		return label;
-	}
-	
+
 	protected Label createLabel(Composite parent, String text, int span) {
 		Label label = new Label(parent, SWT.WRAP);
 		label.setText(text);
@@ -115,11 +110,11 @@
 		label.setLayoutData(data);
 		return label;
 	}
-	
+
 	protected Label createLabel(Composite parent, String text) {
 		return createLabel(parent, text, 1);
 	}
-	
+
 	protected Button createRadioButton(Composite parent, String text, int span) {
 		Button button = new Button(parent, SWT.RADIO);
 		button.setText(text);
@@ -146,14 +141,11 @@
 		GridLayout layout = new GridLayout();
 		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
 		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		layout.numColumns = 1;
 		setLayout(layout);
 		//WorkbenchHelp.setHelp(this, ContextIds.SELECT_CLIENT_WIZARD);
 	
 		if (module != null)
-			createHeadingLabel(this, Messages.wizNewServerSelect, 1);
+			createLabel(this, Messages.wizNewServerSelect, 1);
 			
 		Button existing = null;
 		if (module != null) {
@@ -189,7 +181,7 @@
 		}
 		
 		stack = new Composite(this, SWT.NONE);
-		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+		GridData data = new GridData(GridData.FILL_BOTH);
 		stack.setLayoutData(data);
 		stackLayout = new StackLayout();
 		stackLayout.marginHeight = 0;
@@ -242,11 +234,11 @@
 		
 		Dialog.applyDialogFont(this);
 	}
-	
+
 	protected void toggleMode(byte newMode) {
 		if (!isVisible())
 			return;
-
+		
 		if (newMode == mode)
 			return;
 		
@@ -269,7 +261,7 @@
 			updateTaskModel();
 		}
 	}
-	
+
 	protected HostnameComposite createHostComposite(Composite comp) {
 		HostnameComposite hostComp = new HostnameComposite(comp, new HostnameComposite.IHostnameSelectionListener() {
 			public void hostnameSelected(String host) {
@@ -332,6 +324,23 @@
 						wizard.setMessage(NLS.bind(Messages.errorVersionLevel, new Object[] { type, mt.getVersion() }), IMessageProvider.ERROR);
 						server = null;
 					}
+					if (wizard.getMessage() == null) {
+						try {
+							server.getRootModules(module, null);
+						} catch (CoreException ce) {
+							IStatus status = ce.getStatus();
+							if (status != null) {
+								if (status.getSeverity() == IStatus.ERROR)
+									wizard.setMessage(status.getMessage(), IMessageProvider.ERROR);
+								else if (status.getSeverity() == IStatus.WARNING)
+									wizard.setMessage(status.getMessage(), IMessageProvider.WARNING);
+								else if (status.getSeverity() == IStatus.INFO)
+											wizard.setMessage(status.getMessage(), IMessageProvider.INFORMATION);
+							}
+						} catch (Exception e) {
+							Trace.trace(Trace.WARNING, "Could not find root module", e);
+						}
+					}
 				}
 				
 				if (existingWC != null) {
@@ -377,6 +386,7 @@
 		layout.marginHeight = 0;
 		layout.numColumns = 1;
 		manualComp2.setLayout(layout);
+		manualComp2.setLayoutData(new GridData(GridData.FILL_BOTH));
 		
 		manualHostComp = createHostComposite(manualComp2);
 		IModuleType mt = null;
@@ -407,7 +417,7 @@
 		else
 			manualComp.setHost("localhost");
 
-		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
+		GridData data = new GridData(GridData.FILL_BOTH);
 		data.horizontalSpan = 3;
 		data.heightHint = 300;
 		manualComp.setLayoutData(data);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksComposite.java
index 3283a9e..1d292ec 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksComposite.java
@@ -13,7 +13,7 @@
 import java.util.List;
 
 import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.wst.server.core.IOptionalTask;
+import org.eclipse.wst.server.core.model.PublishOperation;
 import org.eclipse.wst.server.ui.internal.ContextIds;
 import org.eclipse.wst.server.ui.internal.ImageResource;
 import org.eclipse.wst.server.ui.internal.Messages;
@@ -92,7 +92,11 @@
 			Object obj = tasks.get(i);
 			final TasksWizardFragment.TaskInfo sti = (TasksWizardFragment.TaskInfo) obj;
 			final Button checkbox = new Button(this, SWT.CHECK | SWT.WRAP);
-			checkbox.setText(sti.task2.getName());
+			String label = sti.task2.getLabel();
+			if (label != null)
+				checkbox.setText(label);
+			else
+				checkbox.setText(Messages.elementUnknownName);
 			checkbox.setFocus();
 		
 			checkbox.addSelectionListener(new SelectionListener() {
@@ -105,19 +109,18 @@
 			});
 			
 			Label description = new Label(this, SWT.WRAP);
-			description.setText(sti.task2.getDescription());
+			String desc = sti.task2.getDescription();
+			if (desc != null)
+				description.setText(desc);
+			else
+				description.setText(Messages.elementUnknownName);
 			
-			int status = sti.status;
-			if (status == IOptionalTask.TASK_COMPLETED) {
-				checkbox.setEnabled(false);
-				description.setEnabled(false);
-			} else if (status == IOptionalTask.TASK_PREFERRED) {
-				checkbox.setSelection(true);
-			} else if (status == IOptionalTask.TASK_MANDATORY) {
+			if (sti.kind == PublishOperation.REQUIRED) {
 				checkbox.setSelection(true);
 				checkbox.setEnabled(false);
 				description.setEnabled(false);
-			}
+			} else
+				checkbox.setSelection(sti.getDefaultSelected());
 		}
 		
 		if (size == 0) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/WizardUtil.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/WizardUtil.java
index 46fa6d7..e3a819f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/WizardUtil.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/WizardUtil.java
@@ -17,8 +17,7 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.IWizard;
 import org.eclipse.jface.wizard.IWizardPage;
-import org.eclipse.wst.server.core.ServerCore;
-import org.eclipse.wst.server.core.internal.ProjectProperties;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 import org.eclipse.wst.server.ui.internal.wizard.ClosableWizardDialog;
@@ -45,7 +44,7 @@
 		if (projects != null) {
 			int size = projects.length;
 			for (int i = 0; i < size; i++) {
-				if (((ProjectProperties)ServerCore.getProjectProperties(projects[i])).isServerProject())
+				if (ServerPlugin.getProjectProperties(projects[i]).isServerProject())
 					return projects[i];
 			}
 		}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/package.html b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/package.html
new file mode 100644
index 0000000..3babaea
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/package.html
@@ -0,0 +1,38 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
+<title>WTP API overview</title>
+</head>
+<body>
+<p>The server tools UI.</p>
+<table width="500">
+<tr>
+<td>
+<p>ServerUICore is the main entry-point for the API. From here, clients
+can get the wizard pages for a particular server type, get a label
+provider for all server types, or launch Run on Server directly.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>ServerUIUtil provides utility methods. Currently, this is limited to
+launching the server runtime wizard and editing an existing server
+runtime.</p>
+</td>
+</tr>
+</table>
+<table width="500">
+<tr>
+<td>
+<p>ServerLaunchConfigurationTab is a generic server tools tab that can
+be used in launch configuration tab groups for a server launch. It shows
+information about the server to the user.</p>
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/package.xml b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/package.xml
index fec593a..873e264 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/package.xml
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/package.xml
@@ -10,7 +10,7 @@
 
 <body>
 
-<p>The server tools UI.</p>
+<abstract>The server tools UI.</abstract>
 
 <p>ServerUICore is the main entry-point for the API. From here, clients
 can get the wizard pages for a particular server type, get a label
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/IWizardHandle.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/IWizardHandle.java
index 5d48ad2..85c9752 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/IWizardHandle.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/IWizardHandle.java
@@ -16,7 +16,7 @@
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.resource.ImageDescriptor;
 /**
- * 
+ * A wizard handle.
  * 
  * @since 1.0
  */
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java
index 4cb9608..d6e4d7b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java
@@ -13,12 +13,29 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.swt.widgets.Composite;
 
-import org.eclipse.wst.server.core.ITask;
 import org.eclipse.wst.server.core.TaskModel;
 /**
- * A wizard fragment is a
+ * A wizard fragment is a node within a wizard that provides a completely
+ * extendable wizard flow by supporting a flexible tree structure for the
+ * pages. As the user walks pages through the wizard, they are actually
+ * traversing the nodes of a tree, and each node can add or remove children
+ * at any time.
+ * 
+ * Each node may be non-UI (useful for injecting behaviour into the tree)
+ * or contain a single wizard page (@see hasComposite() and
+ * createComposite(Composite, IWizardHandle)). The node may also have
+ * children (@see getChildFragments(), which should be updated or refreshed
+ * whenever the updateChildFragments() method is called by another node to
+ * let this node know that it's state may have changed.
+ * 
+ * This implementation uses a createChildFragments() method to allow the
+ * fragment to add it's children into the tree. Note that this method may
+ * be called multiple times as the tree is updated and it must return the
+ * same instance of any children that have previously been returned.
  * 
  * @since 1.0
  */
@@ -38,11 +55,11 @@
 	}
 
 	/**
-	 * Creates the composite associated with this fragment. 
+	 * Creates the composite associated with this fragment.
 	 * This method is only called when hasComposite() returns true.
 	 * 
-	 * @param parent
-	 * @param handle
+	 * @param parent a parent composite
+	 * @param handle a wizard handle
 	 * @return the created composite
 	 */
 	public Composite createComposite(Composite parent, IWizardHandle handle) {
@@ -69,35 +86,71 @@
 	}
 
 	/**
-	 * The fragment has been entered.
+	 * Called when the wizard that this fragment belongs to has traversed
+	 * into this wizard fragment. It is called to give the fragment the
+	 * opportunity to initialize any values shown in the composite or
+	 * update the task model.
+	 * <p>
+	 * When finish is pressed, the current fragment is exit()ed, and then
+	 * performFinish() is called on all of the fragments in the tree.
+	 * enter() and exit() are not called on the remaining fragments.
+	 * </p>
 	 */
 	public void enter() {
 		// do nothing
 	}
 
 	/**
-	 * The fragment has been left.
+	 * Called when the wizard that this fragment belongs to has traversed
+	 * out of this wizard fragment. It is called to give the fragment the
+	 * opportunity to save any values entered into the composite or
+	 * update the task model.
+	 * <p>
+	 * When finish is pressed, the current fragment is exit()ed, and then
+	 * performFinish() is called on all of the fragments in the tree.
+	 * enter() and exit() are not called on the remaining fragments. 
+	 * </p>
 	 */
 	public void exit() {
 		// do nothing
 	}
 
 	/**
-	 * Create a task to run when the wizard finishes.
+	 * Called when the wizard that this fragment belongs to is finished.
+	 * After exit()ing the current page, all fragment's performFinish()
+	 * methods are called in order.
+	 * <p>
+	 * This method is not called on the UI thread and must not access the
+	 * composite. Not only might the user never have accessed the fragment's
+	 * composite, but this method may be called asynchronously on a job
+	 * once the wizard has closed.
+	 * </p>
 	 * 
-	 * @return the task
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @throws CoreException if something goes wrong
 	 */
-	public ITask createFinishTask() {
-		return null;
+	public void performFinish(IProgressMonitor monitor) throws CoreException {
+		// do nothing
 	}
 
 	/**
-	 * Create a task to run when the wizard is cancelled.
+	 * Called when the wizard that this fragment belongs to is canceled.
+	 * After exit()ing the current page, all fragment's performCancel()
+	 * methods are called in order.
+	 * <p>
+	 * This method is not called on the UI thread and must not access the
+	 * composite. Not only might the user never have accessed the fragment's
+	 * composite, but this method may be called asynchronously on a job
+	 * once the wizard has closed.
+	 * </p>
 	 * 
-	 * @return the task
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @throws CoreException if something goes wrong
 	 */
-	public ITask createCancelTask() {
-		return null;
+	public void performCancel(IProgressMonitor monitor) throws CoreException {
+		// do nothing
 	}
 
 	/**
@@ -115,25 +168,35 @@
 	}
 
 	/**
-	 * Gives the fragment a chance to update it's child fragments.
+	 * Called to give the fragment a chance to update it's child fragments in
+	 * response to other changes within the wizard or task model.
 	 */
 	public void updateChildFragments() {
 		listImpl = null;
 	}
 
 	/**
-	 * Called to allow the fragment to update it's children.
+	 * This method is called by the implementation of getChildFragments() to
+	 * allow this fragment to add it's children. This method must cache and
+	 * return the same instance of any child fragment created. If new
+	 * instances are created each time the wizard is updated, the enablement
+	 * state and the flow of the wizard will be incorrect. 
 	 * 
-	 * @param list
+	 * @param list a list to add the child fragments to
 	 */	
 	protected void createChildFragments(List list) {
 		// do nothing
 	}
 
 	/**
-	 * Returns true if this fragment is complete (can finish).
+	 * Returns true if this fragment is complete (can finish). If it is
+	 * complete the user will be allowed to go to the next fragment or
+	 * finish the wizard. If the fragment is not complete, the Next button
+	 * will be disabled. If the fragment is complete but another fragment
+	 * is not complete, the Finish button will not be enabled.
 	 * 
-	 * @return true if the fragment is complete
+	 * @return <code>true</code> if the fragment is complete, and
+	 *    <code>false</code> otherwise
 	 */
 	public boolean isComplete() {
 		return isComplete;
@@ -142,7 +205,8 @@
 	/**
 	 * Set the isComplete state.
 	 * 
-	 * @param complete
+	 * @param complete <code>true</code> if the fragment is complete, and
+	 *    <code>false</code> otherwise
 	 */
 	protected void setComplete(boolean complete) {
 		this.isComplete = complete;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/package.html b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/package.html
new file mode 100644
index 0000000..29657b7
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/package.html
@@ -0,0 +1,22 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
+<title>WTP API overview</title>
+</head>
+<body>
+<p>Wizard and task support for the server tools UI.</p>
+<table width="500">
+<tr>
+<td>
+<p>WizardFragment is extended to provide a subtree of wizard pages or tasks
+that can be inserted into a larger wizard flow. TaskWizard is the standard
+wizard that knows how to handle WizardFragments and display them in order
+within a single wizard. It uses the TaskWizardPages to display the wizard
+fragment's composites within the wizard.</p>
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/package.xml b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/package.xml
index 8443da8..9043333 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/package.xml
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/package.xml
@@ -10,7 +10,7 @@
 
 <body>
 
-<p>Wizard and task support for the server tools UI.</p>
+<abstract>Wizard and task support for the server tools UI.</abstract>
 
 <p>WizardFragment is extended to provide a subtree of wizard pages or tasks
 that can be inserted into a larger wizard flow. TaskWizard is the standard