This commit was manufactured by cvs2svn to create tag 'R1_5_3'.
diff --git a/features/org.eclipse.jst.server_adapters.feature/feature.xml b/features/org.eclipse.jst.server_adapters.feature/feature.xml
index 8179dd3..59f8f87 100644
--- a/features/org.eclipse.jst.server_adapters.feature/feature.xml
+++ b/features/org.eclipse.jst.server_adapters.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.server_adapters.feature"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.jst.server_adapters.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.jst.server_adapters.feature/sourceTemplateFeature/feature.xml
index 0af0987..d12a1e9 100644
--- a/features/org.eclipse.jst.server_adapters.feature/sourceTemplateFeature/feature.xml
+++ b/features/org.eclipse.jst.server_adapters.feature/sourceTemplateFeature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.server_adapters.feature.source"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.jst.server_core.feature/feature.xml b/features/org.eclipse.jst.server_core.feature/feature.xml
index 064b382..3b63ef5 100644
--- a/features/org.eclipse.jst.server_core.feature/feature.xml
+++ b/features/org.eclipse.jst.server_core.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.server_core.feature"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.jst.server_core.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.jst.server_core.feature/sourceTemplateFeature/feature.xml
index 15604a5..6b7c26d 100644
--- a/features/org.eclipse.jst.server_core.feature/sourceTemplateFeature/feature.xml
+++ b/features/org.eclipse.jst.server_core.feature/sourceTemplateFeature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.server_core.feature.source"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.jst.server_sdk.feature/feature.xml b/features/org.eclipse.jst.server_sdk.feature/feature.xml
index 041444a..5fc8922 100644
--- a/features/org.eclipse.jst.server_sdk.feature/feature.xml
+++ b/features/org.eclipse.jst.server_sdk.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.server_sdk.feature"
       label="%featureName"
-      version="1.5.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.jst.server_tests.feature/feature.xml b/features/org.eclipse.jst.server_tests.feature/feature.xml
index d4109d3..234e27b 100644
--- a/features/org.eclipse.jst.server_tests.feature/feature.xml
+++ b/features/org.eclipse.jst.server_tests.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.server_tests.feature"
       label="%featureName"
-      version="1.5.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.jst.server_ui.feature/feature.xml b/features/org.eclipse.jst.server_ui.feature/feature.xml
index 384099d..3d2b185 100644
--- a/features/org.eclipse.jst.server_ui.feature/feature.xml
+++ b/features/org.eclipse.jst.server_ui.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.server_ui.feature"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.jst.server_ui.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.jst.server_ui.feature/sourceTemplateFeature/feature.xml
index 3e02217..a456283 100644
--- a/features/org.eclipse.jst.server_ui.feature/sourceTemplateFeature/feature.xml
+++ b/features/org.eclipse.jst.server_ui.feature/sourceTemplateFeature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.server_ui.feature.source"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.jst.server_userdoc.feature/feature.xml b/features/org.eclipse.jst.server_userdoc.feature/feature.xml
index 81c1ff6..8d7c589 100644
--- a/features/org.eclipse.jst.server_userdoc.feature/feature.xml
+++ b/features/org.eclipse.jst.server_userdoc.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jst.server_userdoc.feature"
       label="%featureName"
-      version="1.5.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.server_core.feature/feature.xml b/features/org.eclipse.wst.server_core.feature/feature.xml
index d213a53..8bb3ba0 100644
--- a/features/org.eclipse.wst.server_core.feature/feature.xml
+++ b/features/org.eclipse.wst.server_core.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.server_core.feature"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.server_core.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.wst.server_core.feature/sourceTemplateFeature/feature.xml
index 4270ffa..a62de62 100644
--- a/features/org.eclipse.wst.server_core.feature/sourceTemplateFeature/feature.xml
+++ b/features/org.eclipse.wst.server_core.feature/sourceTemplateFeature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.server_core.feature.source"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.server_sdk.feature/feature.xml b/features/org.eclipse.wst.server_sdk.feature/feature.xml
index c7661a4..0c5bb55 100644
--- a/features/org.eclipse.wst.server_sdk.feature/feature.xml
+++ b/features/org.eclipse.wst.server_sdk.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.server_sdk.feature"
       label="%featureName"
-      version="1.5.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.server_tests.feature/feature.xml b/features/org.eclipse.wst.server_tests.feature/feature.xml
index ee9ebee..7cfabdd 100644
--- a/features/org.eclipse.wst.server_tests.feature/feature.xml
+++ b/features/org.eclipse.wst.server_tests.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.server_tests.feature"
       label="%featureName"
-      version="1.5.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.server_ui.feature/feature.xml b/features/org.eclipse.wst.server_ui.feature/feature.xml
index 1c10ea9..7e3c902 100644
--- a/features/org.eclipse.wst.server_ui.feature/feature.xml
+++ b/features/org.eclipse.wst.server_ui.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.server_ui.feature"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.server_ui.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.wst.server_ui.feature/sourceTemplateFeature/feature.xml
index 4c80a5c..b9f23c0 100644
--- a/features/org.eclipse.wst.server_ui.feature/sourceTemplateFeature/feature.xml
+++ b/features/org.eclipse.wst.server_ui.feature/sourceTemplateFeature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.server_ui.feature.source"
       label="%featureName"
-      version="1.5.1.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.server_userdoc.feature/feature.xml b/features/org.eclipse.wst.server_userdoc.feature/feature.xml
index 78f33e4..7d91eb7 100644
--- a/features/org.eclipse.wst.server_userdoc.feature/feature.xml
+++ b/features/org.eclipse.wst.server_userdoc.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.server_userdoc.feature"
       label="%featureName"
-      version="1.5.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
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 903b299..f474d3f 100644
--- a/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.server.core; singleton:=true
-Bundle-Version: 1.0.103.qualifier
+Bundle-Version: 1.0.105.qualifier
 Bundle-Activator: org.eclipse.jst.server.core.internal.JavaServerPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jst.server.core/plugin.xml b/plugins/org.eclipse.jst.server.core/plugin.xml
index f8e59fe..cf23753 100644
--- a/plugins/org.eclipse.jst.server.core/plugin.xml
+++ b/plugins/org.eclipse.jst.server.core/plugin.xml
@@ -5,6 +5,7 @@
   <extension-point id="runtimeClasspathProviders" name="%extensionPointRuntimeClasspathProviders" schema="schema/runtimeClasspathProviders.exsd"/>
   <extension-point id="runtimeFacetMappings" name="%extensionPointRuntimeFacetMappings" schema="schema/runtimeFacetMappings.exsd"/>
   <extension-point id="serverProfilers" name="%extensionPointServerProfilers" schema="schema/serverProfilers.exsd"/>
+  <extension-point id="internalRuntimeComponentProviders" name="internalRuntimeComponentProviders" schema="schema/internalRuntimeComponentProviders.exsd"/>
 
   <extension point="org.eclipse.jdt.core.classpathContainerInitializer">
     <classpathContainerInitializer
diff --git a/plugins/org.eclipse.jst.server.core/schema/internalRuntimeComponentProviders.exsd b/plugins/org.eclipse.jst.server.core/schema/internalRuntimeComponentProviders.exsd
new file mode 100644
index 0000000..bacc5c9
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/schema/internalRuntimeComponentProviders.exsd
@@ -0,0 +1,138 @@
+<?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="runtimeComponentProviders" name="Runtime Component Providers"/>
+      </appInfo>
+      <documentation>
+         This extension point is internal and experimental and should not be used by downstream components.
+This extension point is used to provide new runtime components to an existing facet runtime.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <complexType>
+         <sequence>
+            <element ref="runtimeComponentProvider" minOccurs="1" 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="runtimeComponentProvider">
+      <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="since"/>
+      </appInfo>
+      <documentation>
+         1.5.1
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="examples"/>
+      </appInfo>
+      <documentation>
+         The following is an example of a runtime component provider extension point:
+
+&lt;pre&gt;
+  &lt;extension point=&quot;org.eclipse.jst.server.core.runtimeComponentProviders&quot;&gt;
+     &lt;runtimeComponentProvider
+        id=&quot;com.example.runtimeComponentProvider&quot;
+        runtimeTypeIds=&quot;com.example.runtime, com.example2.*&quot;
+        class=&quot;com.example.ExampleRuntimeComponentProvider&quot;/&gt;
+   &lt;/extension&gt;
+&lt;/pre&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="implementation"/>
+      </appInfo>
+      <documentation>
+         
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2006 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/PublishUtil.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/PublishUtil.java
index b058eb4..c11087f 100644
--- 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
@@ -16,8 +16,8 @@
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
+import org.eclipse.core.resources.IContainer;
 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.internal.JavaServerPlugin;
@@ -42,11 +42,17 @@
  */
 public class PublishUtil {
 	// size of the buffer
-	private static final int BUFFER = 10240;
+	private static final int BUFFER = 65536;
 
 	// the buffer
 	private static byte[] buf = new byte[BUFFER];
 
+	private static final IStatus[] EMPTY_STATUS = new IStatus[0];
+
+	private static final File tempDir = JavaServerPlugin.getInstance().getStateLocation().toFile();
+	
+	private static final String TEMPFILE_PREFIX = "tmp";
+
 	/**
 	 * FileUtil cannot be created. Use static methods.
 	 */
@@ -177,8 +183,7 @@
 		File tempFile = null;
 		try {
 			File file = to.toFile();
-			File tempDir = JavaServerPlugin.getInstance().getStateLocation().toFile();
-			tempFile = File.createTempFile("tmp", "." + to.getFileExtension(), tempDir);
+			tempFile = File.createTempFile(TEMPFILE_PREFIX, "." + to.getFileExtension(), tempDir);
 			
 			out = new FileOutputStream(tempFile);
 			
@@ -231,7 +236,7 @@
 		if (!dir.exists() || !dir.isDirectory())
 			return new IStatus[] { new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorNotADirectory, dir.getAbsolutePath()), null) };
 		
-		List status = new ArrayList();
+		List status = new ArrayList(2);
 		
 		try {
 			File[] files = dir.listFiles();
@@ -282,40 +287,53 @@
 	 */
 	public static IStatus[] publishSmart(IModuleResource[] resources, IPath path, IProgressMonitor monitor) {
 		if (resources == null)
-			return new IStatus[0];
+			return EMPTY_STATUS;
 		
-		List status = new ArrayList();
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		
+		List status = new ArrayList(2);
 		File toDir = path.toFile();
-		File[] toFiles = toDir.listFiles();
 		int fromSize = resources.length;
+		String[] fromFileNames = new String[fromSize];
+		for (int i = 0; i < fromSize; i++)
+			fromFileNames[i] = resources[i].getName();
 		
-		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;
-				}
+		//	cache files and file names for performance
+		File[] toFiles = null;
+		String[] toFileNames = null;
+		
+		boolean foundExistingDir = false;
+		if (toDir.exists()) {
+			if (toDir.isDirectory()) {
+				foundExistingDir = true;
+				toFiles = toDir.listFiles();
+				int toSize = toFiles.length;
+				toFileNames = new String[toSize];
 				
-				// delete file if it can't be found or isn't the correct type
-				if (!found) {
-					if (isDir) {
-						IStatus[] stat = deleteDirectory(toFiles[i], null);
-						addArrayToList(status, stat);
-					} else {
-						if (!toFiles[i].delete())
-							status.add(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorDeleting, toFiles[i].getAbsolutePath()), null));
+				// check if this exact file exists in the new directory
+				for (int i = 0; i < toSize; i++) {
+					toFileNames[i] = toFiles[i].getName();
+					boolean isDir = toFiles[i].isDirectory();
+					boolean found = false;
+					for (int j = 0; j < fromSize; j++) {
+						if (toFileNames[i].equals(fromFileNames[j]) && 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) {
+							IStatus[] stat = deleteDirectory(toFiles[i], null);
+							addArrayToList(status, stat);
+						} else {
+							if (!toFiles[i].delete())
+								status.add(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorDeleting, toFiles[i].getAbsolutePath()), null));
+						}
+						toFiles[i] = null;
+						toFileNames[i] = null;
 					}
 				}
-				if (monitor.isCanceled())
-					return new IStatus[] { Status.CANCEL_STATUS };
-			}
-		} else {
-			if (toDir.isFile()) {
+			} else { //if (toDir.isFile())
 				if (!toDir.delete()) {
 					status.add(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorDeleting, toDir.getAbsolutePath()), null));
 					IStatus[] stat = new IStatus[status.size()];
@@ -323,31 +341,47 @@
 					return stat;
 				}
 			}
-			if (!toDir.mkdir()) {
-				status.add(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorMkdir, toDir.getAbsolutePath()), null));
-				IStatus[] stat = new IStatus[status.size()];
-				status.toArray(stat);
-				return stat;
-			}
 		}
+		if (!foundExistingDir && !toDir.mkdir()) {
+			status.add(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorMkdir, toDir.getAbsolutePath()), null));
+			IStatus[] stat = new IStatus[status.size()];
+			status.toArray(stat);
+			return stat;
+		}
+		
+		if (monitor.isCanceled())
+			return new IStatus[] { Status.CANCEL_STATUS };
 		
 		monitor.worked(50);
 		
 		// cycle through files and only copy when it doesn't exist
 		// or is newer
-		toFiles = toDir.listFiles();
+		if (toFiles == null)
+			toFiles = toDir.listFiles();
 		int toSize = 0;
 		if (toFiles != null)
 			toSize = toFiles.length;
+		
 		int dw = 0;
 		if (toSize > 0)
 			dw = 500 / toSize;
 		
+		// cache file names and last modified dates for performance
+		if (toFileNames == null)
+			toFileNames = new String[toSize];
+		long[] toFileMod = new long[toSize];
+		for (int i = 0; i < toSize; i++) {
+			if (toFiles[i] != null) {
+				if (toFileNames[i] != null)
+					toFileNames[i] = toFiles[i].getName();
+				toFileMod[i] = toFiles[i].lastModified();
+			}
+		}
+		
 		for (int i = 0; i < fromSize; i++) {
 			IModuleResource current = resources[i];
-			String name = current.getName();
+			String name = fromFileNames[i];
 			boolean currentIsDir = current instanceof IModuleFolder;
-			IPath toPath = path.append(name);
 			
 			if (!currentIsDir) {
 				// check if this is a new or newer file
@@ -364,13 +398,13 @@
 				}
 				
 				for (int j = 0; j < toSize; j++) {
-					if (name.equals(toFiles[j].getName()) && mod == toFiles[j].lastModified())
+					if (name.equals(toFileNames[j]) && mod == toFileMod[j])
 						copy = false;
 				}
 				
 				if (copy) {
 					try {
-						copyFile(mf, toPath);
+						copyFile(mf, path.append(name));
 					} catch (CoreException ce) {
 						status.add(ce.getStatus());
 					}
@@ -379,13 +413,14 @@
 			} else { //if (currentIsDir) {
 				IModuleFolder folder = (IModuleFolder) current;
 				IModuleResource[] children = folder.members();
-				monitor.subTask(NLS.bind(Messages.copyingTask, new String[] {resources[i].getName(), current.getName()}));
-				IStatus[] stat = publishSmart(children, toPath, ProgressUtil.getSubMonitorFor(monitor, dw));
+				monitor.subTask(NLS.bind(Messages.copyingTask, new String[] {name, name}));
+				IStatus[] stat = publishSmart(children, path.append(name), ProgressUtil.getSubMonitorFor(monitor, dw));
 				addArrayToList(status, stat);
 			}
-			if (monitor.isCanceled())
-				return new IStatus[] { Status.CANCEL_STATUS };
 		}
+		if (monitor.isCanceled())
+			return new IStatus[] { Status.CANCEL_STATUS };
+		
 		monitor.worked(500 - dw * toSize);
 		monitor.done();
 		
@@ -403,8 +438,35 @@
 	 *    reporting and cancellation are not desired
 	 * @return a possibly-empty array of error and warning status
 	 */
+	public static IStatus[] publishDelta(IModuleResourceDelta[] delta, IPath path, IProgressMonitor monitor) {
+		if (delta == null)
+			return EMPTY_STATUS;
+		
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		
+		List status = new ArrayList(2);
+		int size2 = delta.length;
+		for (int i = 0; i < size2; i++) {
+			IStatus[] stat = publishDelta(delta[i], path, monitor);
+			addArrayToList(status, stat);
+		}
+		
+		IStatus[] stat = new IStatus[status.size()];
+		status.toArray(stat);
+		return stat;
+	}
+
+	/**
+	 * Handle a delta publish.
+	 * 
+	 * @param delta a module resource delta
+	 * @param path the path to publish to
+	 * @param monitor a progress monitor, or <code>null</code> if progress
+	 *    reporting and cancellation are not desired
+	 * @return a possibly-empty array of error and warning status
+	 */
 	public static IStatus[] publishDelta(IModuleResourceDelta delta, IPath path, IProgressMonitor monitor) {
-		List status = new ArrayList();
+		List status = new ArrayList(2);
 		
 		IModuleResource resource = delta.getModuleResource();
 		int kind2 = delta.getKind();
@@ -497,9 +559,11 @@
 	 */
 	public static IStatus[] publishFull(IModuleResource[] resources, IPath path, IProgressMonitor monitor) {
 		if (resources == null)
-			return new IStatus[0];
+			return EMPTY_STATUS;
 		
-		List status = new ArrayList();
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		
+		List status = new ArrayList(2);
 		int size = resources.length;
 		for (int i = 0; i < size; i++) {
 			IStatus[] stat = copy(resources[i], path, monitor);
@@ -512,15 +576,16 @@
 	}
 
 	private static IStatus[] copy(IModuleResource resource, IPath path, IProgressMonitor monitor) {
-		Trace.trace(Trace.PUBLISHING, "Copying: " + resource.getName() + " to " + path.toString());
-		List status = new ArrayList();
+		String name = resource.getName();
+		Trace.trace(Trace.PUBLISHING, "Copying: " + name + " to " + path.toString());
+		List status = new ArrayList(2);
 		if (resource instanceof IModuleFolder) {
 			IModuleFolder folder = (IModuleFolder) resource;
 			IStatus[] stat = publishFull(folder.members(), path, monitor);
 			addArrayToList(status, stat);
 		} else {
 			IModuleFile mf = (IModuleFile) resource;
-			path = path.append(mf.getModuleRelativePath()).append(mf.getName());
+			path = path.append(mf.getModuleRelativePath()).append(name);
 			File f = path.toFile().getParentFile();
 			if (!f.exists())
 				f.mkdirs();
@@ -551,14 +616,15 @@
 			File file = path.toFile();
 			if (file.exists())
 				file.delete();
-			return new IStatus[0];
+			return EMPTY_STATUS;
 		}
 		
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		
 		File tempFile = null;
 		try {
 			File file = path.toFile();
-			File tempDir = JavaServerPlugin.getInstance().getStateLocation().toFile();
-			tempFile = File.createTempFile("tmp", "." + path.getFileExtension(), tempDir);
+			tempFile = File.createTempFile(TEMPFILE_PREFIX, "." + path.getFileExtension(), tempDir);
 			
 			BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(tempFile));
 			ZipOutputStream zout = new ZipOutputStream(bout);
@@ -575,7 +641,7 @@
 			if (tempFile != null && tempFile.exists())
 				tempFile.deleteOnExit();
 		}
-		return new IStatus[0];
+		return EMPTY_STATUS;
 	}
 
 	private static void addZipEntries(ZipOutputStream zout, IModuleResource[] resources) throws Exception {
@@ -596,7 +662,7 @@
 				ZipEntry ze = new ZipEntry(entryPath);
 				
 				long ts = 0;
-				IFolder folder = (IFolder) mf.getAdapter(IFolder.class);
+				IContainer folder = (IContainer) mf.getAdapter(IContainer.class);
 				if (folder != null)
 					ts = folder.getLocalTimeStamp();
 				
@@ -723,8 +789,10 @@
 	 * @return <code>true</code> if it succeeds, <code>false</code> otherwise
 	 */
 	private static boolean safeRename(File from, File to, int retrys) {
-		if (!from.exists())
-			return false;
+		// make sure parent dir exists
+		File dir = to.getParentFile();
+		if (dir != null && !dir.exists())
+			dir.mkdirs();
 		
 		int count = 0;
 		while (count < retrys) {
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 acd18d6..22b76d6 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
@@ -45,6 +45,9 @@
 	//	cached copy of all runtime classpath providers
 	private static List runtimeClasspathProviders;
 
+	//	cached copy of all runtime component providers
+	private static List runtimeComponentProviders;
+
 	//	cached copy of all runtime facet mappings
 	private static List runtimeFacetMappings;
 
@@ -322,6 +325,57 @@
 	}
 
 	/**
+	 * Returns the runtime component provider that supports the given runtime type, or <code>null</code>
+	 * if none. This convenience method searches the list of known runtime
+	 * component providers for the one with a matching runtime type.
+	 * The runtimeType may not be null.
+	 *
+	 * @param runtimeType a runtime type
+	 * @return the runtime component provider instance, or <code>null</code> if
+	 *   there is no runtime component provider with the given id
+	 */
+	public static RuntimeComponentProviderWrapper findRuntimeComponentProvider(IRuntimeType runtimeType) {
+		if (runtimeType == null)
+			throw new IllegalArgumentException();
+
+		if (runtimeComponentProviders == null)
+			loadRuntimeComponentProviders();
+		
+		Iterator iterator = runtimeComponentProviders.iterator();
+		while (iterator.hasNext()) {
+			RuntimeComponentProviderWrapper runtimeComponentProvider = (RuntimeComponentProviderWrapper) iterator.next();
+			if (runtimeComponentProvider.supportsRuntimeType(runtimeType))
+				return runtimeComponentProvider;
+		}
+		return null;
+	}
+
+	/**
+	 * Load the runtime component providers.
+	 */
+	private static synchronized void loadRuntimeComponentProviders() {
+		if (runtimeComponentProviders != null)
+			return;
+		Trace.trace(Trace.CONFIG, "->- Loading .runtimeComponentProviders extension point ->-");
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(JavaServerPlugin.PLUGIN_ID, "internalRuntimeComponentProviders");
+		
+		int size = cf.length;
+		List list = new ArrayList(size);
+		for (int i = 0; i < size; i++) {
+			try {
+				list.add(new RuntimeComponentProviderWrapper(cf[i]));
+				Trace.trace(Trace.CONFIG, "  Loaded runtimeComponentProviders: " + cf[i].getAttribute("id"));
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "  Could not load runtimeComponentProvider: " + cf[i].getAttribute("id"), t);
+			}
+		}
+		runtimeComponentProviders = list;
+		
+		Trace.trace(Trace.CONFIG, "-<- Done loading .runtimeComponentProviders extension point -<-");
+	}
+
+	/**
 	 * Load the runtime facet mappings.
 	 */
 	private static synchronized void loadRuntimeFacetMapping() {
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
index 998c21a..0dd1491 100644
--- 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
@@ -1,5 +1,6 @@
 /******************************************************************************
  * Copyright (c) 2005 BEA Systems, Inc.
+ * Copyright (c) 2006 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
@@ -47,8 +48,19 @@
 	}
 
 	private static void addMapping(String id, String id2, String version) {
+		ArrayList list = null;
 		try {
-			mappings.put(id, RuntimeManager.getRuntimeComponentType(id2).getVersion(version));
+			list = (ArrayList) mappings.get(id);
+		} catch (Exception e) {
+			// ignore
+		}
+		
+		if (list == null)
+			list = new ArrayList(2);
+		
+		try {
+			list.add(RuntimeManager.getRuntimeComponentType(id2).getVersion(version));
+			mappings.put(id, list);
 		} catch (Exception e) {
 			// ignore
 		}
@@ -118,9 +130,6 @@
 				return components;
 			
 			// define server runtime component
-			String typeId = runtime.getRuntimeType().getId();
-			IRuntimeComponentVersion mapped = (IRuntimeComponentVersion) mappings.get(typeId);
-			
 			Map properties = new HashMap(5);
 			if (runtime.getLocation() != null)
 				properties.put("location", runtime.getLocation().toPortableString());
@@ -137,7 +146,15 @@
 				properties.put(CLASSPATH, path.toPortableString());
 			}
 			
-			components.add(RuntimeManager.createRuntimeComponent(mapped, properties));
+			String typeId = runtime.getRuntimeType().getId();
+			if (mappings.containsKey(typeId)) {
+				ArrayList list = (ArrayList) mappings.get(typeId);
+				int size = list.size();
+				for (int i = 0; i < size; i++) {
+					IRuntimeComponentVersion mapped = (IRuntimeComponentVersion) list.get(i);
+					components.add(RuntimeManager.createRuntimeComponent(mapped, properties));
+				}
+			}
 			
 			// define JRE component
 			IJavaRuntime javaRuntime = (IJavaRuntime) runtime.loadAdapter(IJavaRuntime.class, null);
@@ -191,6 +208,13 @@
 				components.add(RuntimeManager.createRuntimeComponent(rcv, properties));
 			}
 			
+			RuntimeComponentProviderWrapper componentProvider = JavaServerPlugin.findRuntimeComponentProvider(runtime.getRuntimeType());
+			if (componentProvider != null) {
+				List list = componentProvider.getComponents(runtime);
+				if (list != null)
+					components.addAll(list);
+			}
+			
 			return components;
 		}
 
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 5b15855..9eb946e 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
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,11 +10,18 @@
  **********************************************************************/
 package org.eclipse.jst.server.core.internal;
 
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
+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.*;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jdt.core.*;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.IRuntime;
 import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
 /**
  * 
  */
@@ -69,11 +76,79 @@
 					if (runtimeId != null)
 						runtime = ServerCore.findRuntime(runtimeId);
 					delegate.requestClasspathContainerUpdate(runtime, containerSuggestion.getClasspathEntries());
+					//JavaCore.setClasspathContainer(containerPath, new IJavaProject[] { project },
+					//		new IClasspathContainer[] { containerSuggestion }, new NullProgressMonitor());
+					updateClasspath(runtime, containerPath, containerSuggestion);
 				}
 			}
 		}
 	}
 
+	private void updateClasspath(final IRuntime runtime, final IPath containerPath, final IClasspathContainer containerSuggestion) {
+		class UpdateClasspathJob extends Job {
+			public UpdateClasspathJob() {
+				super(NLS.bind(Messages.updateClasspathContainers, runtime.getName()));
+			}
+
+			public boolean belongsTo(Object family) {
+				return ServerPlugin.PLUGIN_ID.equals(family);
+			}
+
+			public IStatus run(IProgressMonitor monitor) {
+				IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+				List list = new ArrayList();
+				if (projects != null) {
+					int size = projects.length;
+					for (int i = 0; i < size; i++) {
+						if (projects[i].isAccessible()) {
+							try {
+								if (!projects[i].isNatureEnabled(JavaCore.NATURE_ID))
+									continue;
+								
+								IJavaProject javaProject = JavaCore.create(projects[i]); // TODO is java project?
+								
+								boolean found = false;
+								IClasspathEntry[] ce = javaProject.getRawClasspath();
+								for (int j = 0; j < ce.length; j++) {
+									if (ce[j].getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
+										if (containerPath.isPrefixOf(ce[j].getPath()))
+											found = true;
+									}
+								}
+								
+								Trace.trace(Trace.FINEST, "Classpath change on: " + projects[i] + " " + found);
+								
+								if (found)
+									list.add(javaProject);
+							} catch (Exception e) {
+								Trace.trace(Trace.SEVERE, "Could not update classpath container", e);
+							}
+						}
+					}
+				}
+				
+				int size = list.size();
+				if (size > 0) {
+					IJavaProject[] javaProjects = new IJavaProject[size];
+					list.toArray(javaProjects);
+					IClasspathContainer[] containers = new IClasspathContainer[size];
+					for (int i = 0; i < size; i++)
+						containers[i] = containerSuggestion;
+					
+					try {
+						JavaCore.setClasspathContainer(containerPath, javaProjects, containers, monitor);
+					} catch (JavaModelException jme) {
+						return jme.getStatus();
+					}
+				}
+				
+				return Status.OK_STATUS;
+			}
+		}
+		UpdateClasspathJob job = new UpdateClasspathJob();
+		job.schedule();
+	}
+
 	/** (non-Javadoc)
 	 * @see org.eclipse.jdt.core.ClasspathContainerInitializer#getComparisonID(org.eclipse.core.runtime.IPath, org.eclipse.jdt.core.IJavaProject)
 	 */
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeComponentProviderDelegate.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeComponentProviderDelegate.java
new file mode 100644
index 0000000..e5185f5
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeComponentProviderDelegate.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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.List;
+
+import org.eclipse.wst.server.core.IRuntime;
+/**
+ * A runtime component provider can provide additional runtime components for a facet runtime.
+ * This provider is scoped by runtime type and may provide components for multiple
+ * runtime instances.
+ * <p>
+ * This abstract class is intended to be extended only by clients
+ * to extend the <code>internalRuntimeComponentProviders</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 2.0
+ */
+public abstract class RuntimeComponentProviderDelegate {
+	public RuntimeComponentProviderDelegate() {
+		// default constructor
+	}
+
+	/**
+	 * Add runtime components to the given runtime. Components should be created by calling
+	 * RuntimeManager.createRuntimeComponent(IRuntimeComponentVersion, Map)
+	 * 
+	 * @param runtime a server runtime
+	 * @return a list of runtimes, or an empty list or null if there are no additional components
+	 */
+	public abstract List getRuntimeComponents(IRuntime runtime);
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeComponentProviderWrapper.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeComponentProviderWrapper.java
new file mode 100644
index 0000000..fd74dcc
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeComponentProviderWrapper.java
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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 java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IRuntimeType;
+/**
+ * 
+ */
+public class RuntimeComponentProviderWrapper {
+	private IConfigurationElement element;
+	private RuntimeComponentProviderDelegate delegate;
+
+	/**
+	 * Create a new runtime component handler.
+	 * 
+	 * @param element a configuration element
+	 */
+	public RuntimeComponentProviderWrapper(IConfigurationElement element) {
+		super();
+		this.element = element;
+	}
+	
+	protected IConfigurationElement getElement() {
+		return element;
+	}
+
+	/**
+	 * 
+	 * @return the id
+	 */
+	public String getId() {
+		return element.getAttribute("id");
+	}
+
+	public String[] getRuntimeTypeIds() {
+		try {
+			List list = new ArrayList();
+			StringTokenizer st = new StringTokenizer(element.getAttribute("runtimeTypeIds"), ",");
+			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;
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Could not parse runtime type ids: " + element);
+			return null;
+		}
+	}
+
+	/**
+	 * Returns true if the given server resource type (given by the
+	 * id) can be opened with this editor. This result is based on
+	 * the result of the getServerResources() method.
+	 *
+	 * @param runtimeType a runtime type
+	 * @return boolean
+	 */
+	public boolean supportsRuntimeType(IRuntimeType runtimeType) {
+		if (runtimeType == null)
+			return false;
+		String id = runtimeType.getId();
+		if (id == null || id.length() == 0)
+			return false;
+
+		String[] s = getRuntimeTypeIds();
+		if (s == null)
+			return false;
+		
+		int size = s.length;
+		for (int i = 0; i < size; i++) {
+			if (s[i].endsWith("*")) {
+				if (id.length() >= s[i].length() && id.startsWith(s[i].substring(0, s[i].length() - 1)))
+					return true;
+			} else if (id.equals(s[i]))
+				return true;
+		}
+		return false;
+	}
+
+	/*
+	 * Loads the delegate class.
+	 */
+	protected RuntimeComponentProviderDelegate getDelegate() {
+		if (delegate == null) {
+			try {
+				delegate = (RuntimeComponentProviderDelegate) element.createExecutableExtension("class");
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "Could not create delegate " + toString() + ": " + t.getMessage());
+			}
+		}
+		return delegate;
+	}
+
+	/*
+	 * @see RuntimeComponentProviderDelegate#getRuntimeComponents(IRuntime)
+	 */
+	public List getComponents(IRuntime runtime) {
+		if (runtime == null)
+			return null;
+		try {
+			return getDelegate().getRuntimeComponents(runtime);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
+		}
+		return null;
+	}
+
+	public String toString() {
+		return "RuntimeComponentProviderWrapper[" + getId() + "]";
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalDebugLaunchConfigurationDelegate.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalDebugLaunchConfigurationDelegate.java
new file mode 100644
index 0000000..91ba97f
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalDebugLaunchConfigurationDelegate.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.generic.core.internal;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.model.IDebugTarget;
+import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;
+import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
+import org.eclipse.jdt.launching.IVMConnector;
+import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * <p>Extension of <code>AbstractJavaLaunchConfigurationDelegate</code> that supports 
+ * the connection to remote JVMs for external servers. Used for debugging.</p>
+ * 
+ * <p>Based on JavaRemoteApplicationLaunchConfigurationDelegate</p>
+ */
+public class ExternalDebugLaunchConfigurationDelegate 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 {
+
+        if (monitor == null) {
+            monitor = new NullProgressMonitor();
+        }
+
+        monitor.beginTask(NLS.bind(GenericServerCoreMessages.attachingToExternalGenericServer,new String[]{configuration.getName()}), 3);
+        
+        // check for cancellation
+        if (monitor.isCanceled()) {
+            return;
+        }                       
+                    
+        monitor.subTask(GenericServerCoreMessages.verifyingExternalServerDebuggingLaunchAttributes);
+                        
+        String connectorId = getVMConnectorId(configuration);
+        IVMConnector connector = null;
+        if (connectorId == null) {
+            connector = JavaRuntime.getDefaultVMConnector();
+        } else {
+            connector = JavaRuntime.getVMConnector(connectorId);
+        }
+        if (connector == null) {
+            abort(GenericServerCoreMessages.externalServerDebugConnectorNotSpecified,
+                    null, IJavaLaunchConfigurationConstants.ERR_CONNECTOR_NOT_AVAILABLE); 
+        }
+        
+        Map argMap = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_CONNECT_MAP, (Map)null);
+        
+        int connectTimeout = JavaRuntime.getPreferences().getInt(JavaRuntime.PREF_CONNECT_TIMEOUT);
+        argMap.put("timeout", ""+connectTimeout);  //$NON-NLS-1$//$NON-NLS-2$
+
+        // check for cancellation
+        if (monitor.isCanceled()) {
+            return;
+        }
+        
+        monitor.worked(1);
+        
+        monitor.subTask(GenericServerCoreMessages.creatingExternalServerDebuggingSourceLocator);
+        // set the default source locator if required
+        setDefaultSourceLocator(launch, configuration);
+        monitor.worked(1);      
+        
+        // connect to remote VM
+        connector.connect(argMap, monitor, launch);
+        
+        // check for cancellation
+        if (monitor.isCanceled()) {
+            IDebugTarget[] debugTargets = launch.getDebugTargets();
+            for (int i = 0; i < debugTargets.length; i++) {
+                IDebugTarget target = debugTargets[i];
+                if (target.canDisconnect()) {
+                    target.disconnect();
+                }
+            }
+            return;
+        }
+        
+        monitor.done();
+    }
+}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalLaunchConfigurationDelegate.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalLaunchConfigurationDelegate.java
index e9612da..5832377 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalLaunchConfigurationDelegate.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalLaunchConfigurationDelegate.java
@@ -31,7 +31,6 @@
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.debug.core.model.IProcess;
 import org.eclipse.debug.core.model.RuntimeProcess;
-import org.eclipse.jdt.internal.launching.JavaRemoteApplicationLaunchConfigurationDelegate;
 import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;
 import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
 import org.eclipse.wst.server.core.IServer;
@@ -76,8 +75,8 @@
 	/**
 	 * Debugging launch configuration delegate.
 	 */
-	private static JavaRemoteApplicationLaunchConfigurationDelegate debuggingDelegate =
-        new JavaRemoteApplicationLaunchConfigurationDelegate();
+	private static ExternalDebugLaunchConfigurationDelegate debuggingDelegate =
+        new ExternalDebugLaunchConfigurationDelegate();
 	
 	/* (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)
@@ -167,7 +166,7 @@
 		Trace.trace(Trace.FINEST, "Starting debugging"); //$NON-NLS-1$
 		debuggingDelegate.launch(wc, mode, launch, monitor);
 	}
-	
+	  
     private void setDebugArgument(ILaunchConfigurationWorkingCopy config, String attribKey, String key, String arg) {
         try {
             Map args = config.getAttribute(attribKey, (Map)null);
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
index 93e72cb..0eb57c6 100644
--- 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
@@ -41,6 +41,11 @@
 	public static String unableToCreatePublisher;
 	public static String canNotPublishDeletedModule;
 	public static String antLauncherMissing;
+    public static String attachingToExternalGenericServer;
+    public static String verifyingExternalServerDebuggingLaunchAttributes;
+    public static String externalServerDebugConnectorNotSpecified;
+    public static String creatingExternalServerDebuggingSourceLocator;
+    
 	
 	static{
 		  NLS.initializeMessages(RESOURCE_BUNDLE, GenericServerCoreMessages.class);
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
index 763914e..befb747 100644
--- 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
@@ -29,3 +29,7 @@
 canNotPublishDeletedModule=Can not publish because module {0} is closed or deleted
 antLauncherMissing=Ant launcher is missing or disabled
 noProfiler=Could not launch in profiling mode because no profilers are configured.
+attachingToExternalGenericServer=Attaching to external generic server {0}.
+verifyingExternalServerDebuggingLaunchAttributes=Verifying debugging launch attributes.
+externalServerDebugConnectorNotSpecified=Debugging connector not specified.
+creatingExternalServerDebuggingSourceLocator=Creating debugging source locator.
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AbstractModuleAssembler.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AbstractModuleAssembler.java
index a1058a8..23855ae 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AbstractModuleAssembler.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AbstractModuleAssembler.java
@@ -11,6 +11,7 @@
 			
 import java.io.File;
 import java.io.IOException;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
@@ -136,9 +137,9 @@
 			if (resource instanceof IModuleFolder) {
 				IModuleFolder mFolder = (IModuleFolder)resource;
 				IModuleResource[] resources = mFolder.members();
-				if(resources==null || resources.length==0){
-					packager.writeFolder(resource.getModuleRelativePath().append(resource.getName()).toPortableString());
-				}
+
+				packager.writeFolder(resource.getModuleRelativePath().append(resource.getName()).toPortableString());
+
 				for (int i = 0; resources!= null && i < resources.length; i++) {
 					doPackModule(resources[i], packager);
 				}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AntPublisher.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AntPublisher.java
index cb01d57..36b2af6 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AntPublisher.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/AntPublisher.java
@@ -48,280 +48,302 @@
 import org.eclipse.wst.server.core.IModuleArtifact;
 import org.eclipse.wst.server.core.internal.ServerPlugin;
 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.
+ * 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>
- * <li>project.working.dir: the working dir of the project that deployed module is in</li>
+ * <li>project.working.dir: the working dir of the project that deployed module
+ * is in</li>
  * </ul>
- *
+ * 
  * @author Gorkem Ercan
  */
 
-public class AntPublisher extends GenericPublisher{
+public class AntPublisher extends GenericPublisher {
 	private static final String JAR_PROTOCOL_PREFIX = "jar"; //$NON-NLS-1$
 
 	/**
 	 * publisher id for ANT publisher.
 	 */
-	public static final String PUBLISHER_ID="org.eclipse.jst.server.generic.antpublisher"; //$NON-NLS-1$
-    
-	protected static final String PROP_SERVER_PUBLISH_DIR = "server.publish.dir";//$NON-NLS-1$
-	protected static final String PROP_PROJECT_WORKING_DIR= "project.working.dir";//$NON-NLS-1$
-	protected static final String PROP_MODULE_DIR = "module.dir";//$NON-NLS-1$
-	protected static final String PROP_MODULE_NAME = "module.name";//$NON-NLS-1$
-	protected static final String PROP_PROJECT_NAME = "project.name";//$NON-NLS-1$
-	protected static final String MODULE_PUBLISH_TARGET_PREFIX = "target.publish."; //$NON-NLS-1$
-	protected static final String MODULE_UNPUBLISH_TARGET_PREFIX = "target.unpublish.";//$NON-NLS-1$
-	protected static final String DATA_NAME_BUILD_FILE="build.file";//$NON-NLS-1$
-    protected static final String PROP_MODULE_ARCHIVE_NAME = "module.archive.name"; //$NON-NLS-1$
-	
+	public static final String PUBLISHER_ID = "org.eclipse.jst.server.generic.antpublisher"; //$NON-NLS-1$
 
-    /* (non-Javadoc)
-	 * @see org.eclipse.wtp.server.core.model.IPublisher#publish(org.eclipse.wtp.server.core.resources.IModuleResource[], org.eclipse.core.runtime.IProgressMonitor)
+	protected static final String PROP_SERVER_PUBLISH_DIR = "server.publish.dir";//$NON-NLS-1$
+
+	protected static final String PROP_PROJECT_WORKING_DIR = "project.working.dir";//$NON-NLS-1$
+
+	protected static final String PROP_MODULE_DIR = "module.dir";//$NON-NLS-1$
+
+	protected static final String PROP_MODULE_NAME = "module.name";//$NON-NLS-1$
+
+	protected static final String PROP_CONTEXT_ROOT = "contextRoot";//$NON-NLS-1$
+
+	protected static final String PROP_PROJECT_NAME = "project.name";//$NON-NLS-1$
+
+	protected static final String MODULE_PUBLISH_TARGET_PREFIX = "target.publish."; //$NON-NLS-1$
+
+	protected static final String MODULE_UNPUBLISH_TARGET_PREFIX = "target.unpublish.";//$NON-NLS-1$
+
+	protected static final String DATA_NAME_BUILD_FILE = "build.file";//$NON-NLS-1$
+
+	protected static final String PROP_MODULE_ARCHIVE_NAME = "module.archive.name"; //$NON-NLS-1$
+
+	/*
+	 * (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){
-		if(getModule().length>1)// only respond to root module calls. 
+	public IStatus[] publish(IModuleArtifact[] resource, IProgressMonitor monitor) {
+		if (getModule().length > 1)// only respond to root module calls.
 			return null;
-		try{
-			if(monitor.isCanceled())
+		try {
+			if (monitor.isCanceled())
 				return null;
 			assembleModule(monitor);
-        	File file = computeBuildFile();
-        	if(monitor.isCanceled())
-        		return null;
-        	runAnt(file.toString(),getPublishTargetsForModule(),getPublishProperties(),monitor);
-        }catch(CoreException e){
-            IStatus s = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0,GenericServerCoreMessages.errorPublishAntpublisher,e);
-            CorePlugin.getDefault().getLog().log(s);
-            return new IStatus[] {s};
-        }
+			File file = computeBuildFile();
+			if (monitor.isCanceled())
+				return null;
+			runAnt(file.toString(), getPublishTargetsForModule(), getPublishProperties(), monitor);
+		} catch (CoreException e) {
+			IStatus s = new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, GenericServerCoreMessages.errorPublishAntpublisher, e);
+			CorePlugin.getDefault().getLog().log(s);
+			return new IStatus[] { s };
+		}
 		return null;
 	}
 
-	protected void assembleModule(IProgressMonitor monitor)throws CoreException{
-		AbstractModuleAssembler assembler= AbstractModuleAssembler.Factory.getModuleAssembler(getModule()[0], getServer());
+	protected void assembleModule(IProgressMonitor monitor) throws CoreException {
+		AbstractModuleAssembler assembler = AbstractModuleAssembler.Factory.getModuleAssembler(getModule()[0], getServer());
 		assembler.assemble(monitor);
 	}
 
-    /**
-     * 
-     * @return file
-     * @throws CoreException
-     */
-    private File computeBuildFile() throws CoreException {
-        Bundle bundle = Platform.getBundle(getServerRuntime().getServerTypeDefinition().getConfigurationElementNamespace());
-        URL bundleUrl =bundle.getEntry(getBuildFile());
-        URL fileURL = FileUtil.resolveURL(bundleUrl);
-        if(fileURL.getProtocol().equals(JAR_PROTOCOL_PREFIX)){
-        	OutputStream os=null;
-        	InputStream is=null; 
-        	try{
-        		String filename =fileURL.getPath();
-        		String jarname= fileURL.getFile().substring(0,filename.indexOf('!'));
-        		
-        		File jarFile = new File(new URL(jarname).getFile());
-        		JarFile jar = new JarFile(jarFile);
-        		File tmpFile = FileUtil.createTempFile(getBuildFile(),CorePlugin.getDefault().getStateLocation().toOSString());
-        		os = new FileOutputStream(tmpFile);
-        		String entryname= getBuildFile();
-        		if (entryname.startsWith("/"))//$NON-NLS-1$
-        			entryname= entryname.substring(1);
-        		JarEntry entry = jar.getJarEntry(entryname);
-        		is =jar.getInputStream(entry);
-        		FileUtil.copy(is,os);
-        		return tmpFile;
-         	}
-        	catch (IOException e) {
-        		IStatus s = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0,"error creating temporary build file",e);//$NON-NLS-1$
-                CorePlugin.getDefault().getLog().log(s);
+	/**
+	 * 
+	 * @return file
+	 * @throws CoreException
+	 */
+	private File computeBuildFile() throws CoreException {
+		Bundle bundle = Platform.getBundle(getServerRuntime().getServerTypeDefinition().getConfigurationElementNamespace());
+		URL bundleUrl = bundle.getEntry(getBuildFile());
+		URL fileURL = FileUtil.resolveURL(bundleUrl);
+		if (fileURL.getProtocol().equals(JAR_PROTOCOL_PREFIX)) {
+			OutputStream os = null;
+			InputStream is = null;
+			try {
+				String filename = fileURL.getPath();
+				String jarname = fileURL.getFile().substring(0, filename.indexOf('!'));
+
+				File jarFile = new File(new URL(jarname).getFile());
+				JarFile jar = new JarFile(jarFile);
+				File tmpFile = FileUtil.createTempFile(getBuildFile(), CorePlugin.getDefault().getStateLocation().toOSString());
+				os = new FileOutputStream(tmpFile);
+				String entryname = getBuildFile();
+				if (entryname.startsWith("/"))//$NON-NLS-1$
+					entryname = entryname.substring(1);
+				JarEntry entry = jar.getJarEntry(entryname);
+				is = jar.getInputStream(entry);
+				FileUtil.copy(is, os);
+				return tmpFile;
+			} catch (IOException e) {
+				IStatus s = new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, "error creating temporary build file", e);//$NON-NLS-1$
+				CorePlugin.getDefault().getLog().log(s);
 				throw new CoreException(s);
-			}
-        	finally{
-        		try {
-        			if(is!=null)
-        				is.close();
-					if(os!=null)
+			} finally {
+				try {
+					if (is != null)
+						is.close();
+					if (os != null)
 						os.close();
 				} catch (IOException e) {
-					//ignore
+					// ignore
 				}
-        	}
-        }
-        else{
-        	return FileUtil.resolveFile(fileURL);
-        } 	
-    }
-   
+			}
+		} else {
+			return FileUtil.resolveFile(fileURL);
+		}
+	}
 
-    private String getPublishTargetsForModule() {
-    	return doGetTargets(MODULE_PUBLISH_TARGET_PREFIX+getModuleTypeId());
-    }
+	private String getPublishTargetsForModule() {
+		return doGetTargets(MODULE_PUBLISH_TARGET_PREFIX + getModuleTypeId());
+	}
 
-    private String getUnpublishTargetsForModule() {
-        return doGetTargets(MODULE_UNPUBLISH_TARGET_PREFIX+getModuleTypeId());
-    }
-    
-    private String doGetTargets(String dataname) {
-    	StringBuffer buffer = new StringBuffer();
-    	Iterator iterator = getServerRuntime().getServerTypeDefinition().getPublisher(PUBLISHER_ID).getPublisherdata().iterator();
-        while(iterator.hasNext()){
-            PublisherData data = (PublisherData)iterator.next();
-            if(dataname.equals(data.getDataname())) {
-                if(buffer.length()>0)
-                	buffer.append(",");//$NON-NLS-1$
-            	buffer.append(data.getDatavalue());
-            }   
-        }
-        return buffer.toString();
-    }
+	private String getUnpublishTargetsForModule() {
+		return doGetTargets(MODULE_UNPUBLISH_TARGET_PREFIX + getModuleTypeId());
+	}
 
-    private String getModuleTypeId(){
-        return getModule()[0].getModuleType().getId();
-    }
-    
-	private String getBuildFile()
-    {
-        Iterator iterator = getServerRuntime().getServerTypeDefinition().getPublisher(PUBLISHER_ID).getPublisherdata().iterator();
-        while(iterator.hasNext())
-        {
-            PublisherData data = (PublisherData)iterator.next();
-            if(DATA_NAME_BUILD_FILE.equals(data.getDataname()))
-                return getServerRuntime().getServerTypeDefinition().getResolver().resolveProperties(data.getDatavalue());
-        }
-        return null;
-    }
-	
-	private Map getPublishProperties()
-	{
-        Map props = new HashMap();
-        // pass all properties to build file.
-        Map serverProperties = getServer().getServerInstanceProperties();
-        Map properties = getServerRuntime().getServerInstanceProperties();
-        properties.putAll(serverProperties);
-        Iterator propertyIterator = properties.keySet().iterator();
-        while(propertyIterator.hasNext())
-        {
-            String property = (String)propertyIterator.next();
-            String value = (String)properties.get(property);
-            if(value!=null && value.trim().length()>0)
-            	props.put(property,properties.get(property));
-        }
-        Module module =  getServerRuntime().getServerTypeDefinition().getModule(getModuleTypeId());
+	private String doGetTargets(String dataname) {
+		StringBuffer buffer = new StringBuffer();
+		Iterator iterator = getServerRuntime().getServerTypeDefinition().getPublisher(PUBLISHER_ID).getPublisherdata().iterator();
+		while (iterator.hasNext()) {
+			PublisherData data = (PublisherData) iterator.next();
+			if (dataname.equals(data.getDataname())) {
+				if (buffer.length() > 0)
+					buffer.append(",");//$NON-NLS-1$
+				buffer.append(data.getDatavalue());
+			}
+		}
+		return buffer.toString();
+	}
+
+	private String getModuleTypeId() {
+		return getModule()[0].getModuleType().getId();
+	}
+
+	private String getBuildFile() {
+		Iterator iterator = getServerRuntime().getServerTypeDefinition().getPublisher(PUBLISHER_ID).getPublisherdata().iterator();
+		while (iterator.hasNext()) {
+			PublisherData data = (PublisherData) iterator.next();
+			if (DATA_NAME_BUILD_FILE.equals(data.getDataname()))
+				return getServerRuntime().getServerTypeDefinition().getResolver().resolveProperties(data.getDatavalue());
+		}
+		return null;
+	}
+
+	private Map getPublishProperties() {
+		Map props = new HashMap();
+		// pass all properties to build file.
+		Map serverProperties = getServer().getServerInstanceProperties();
+		Map properties = getServerRuntime().getServerInstanceProperties();
+		properties.putAll(serverProperties);
+		Iterator propertyIterator = properties.keySet().iterator();
+		while (propertyIterator.hasNext()) {
+			String property = (String) propertyIterator.next();
+			String value = (String) properties.get(property);
+			if (value != null && value.trim().length() > 0)
+				props.put(property, properties.get(property));
+		}
+		Module module = getServerRuntime().getServerTypeDefinition().getModule(getModuleTypeId());
 		String modDir = module.getPublishDir();
 		modDir = getServerRuntime().getServerTypeDefinition().getResolver().resolveProperties(modDir);
 		IModule webModule = getModule()[0];
-		
-        String moduleName=guessModuleName(webModule);
-        props.put(PROP_PROJECT_WORKING_DIR,getProjectWorkingLocation().toString());
-		props.put(PROP_MODULE_NAME,moduleName);
-         if (isModuleType(webModule, "jst.ear")) {//$NON-NLS-1$
-             props.put( PROP_MODULE_ARCHIVE_NAME, moduleName +".ear" ); //$NON-NLS-1$
-            } else if (isModuleType(webModule, "jst.web")) { //$NON-NLS-1$
-                props.put( PROP_MODULE_ARCHIVE_NAME, moduleName +".war" ); //$NON-NLS-1$
-                   } else if (isModuleType(webModule, "jst.ejb")) { //$NON-NLS-1$
-                       props.put( PROP_MODULE_ARCHIVE_NAME, moduleName +".jar" ); //$NON-NLS-1$
-                   }      
-		if(webModule.getProject()!=null){
-			props.put(PROP_MODULE_DIR,getModuleWorkingDir().toString());
-		    props.put(PROP_PROJECT_NAME,webModule.getProject().getName());
+
+		String moduleName = guessModuleName(webModule);
+		String contextRoot = guessContextRoot(webModule);
+		props.put(PROP_PROJECT_WORKING_DIR, getProjectWorkingLocation().toString());
+		props.put(PROP_MODULE_NAME, moduleName);
+		props.put(PROP_CONTEXT_ROOT, contextRoot);
+		if (isModuleType(webModule, "jst.ear")) {//$NON-NLS-1$
+			props.put(PROP_MODULE_ARCHIVE_NAME, moduleName + ".ear"); //$NON-NLS-1$
+		} else if (isModuleType(webModule, "jst.web")) { //$NON-NLS-1$
+			props.put(PROP_MODULE_ARCHIVE_NAME, moduleName + ".war"); //$NON-NLS-1$
+		} else if (isModuleType(webModule, "jst.ejb")) { //$NON-NLS-1$
+			props.put(PROP_MODULE_ARCHIVE_NAME, moduleName + ".jar"); //$NON-NLS-1$
 		}
-		props.put(PROP_SERVER_PUBLISH_DIR,modDir);
+		if (webModule.getProject() != null) {
+			props.put(PROP_MODULE_DIR, getModuleWorkingDir().toString());
+			props.put(PROP_PROJECT_NAME, webModule.getProject().getName());
+		}
+		props.put(PROP_SERVER_PUBLISH_DIR, modDir);
 		return props;
 	}
-	
-	private IPath getModuleWorkingDir(){
+
+	private IPath getModuleWorkingDir() {
 		return getProjectWorkingLocation().append(getModule()[0].getProject().getName());
 	}
 
-	private IPath getProjectWorkingLocation(){
+	private IPath getProjectWorkingLocation() {
 		return ServerPlugin.getInstance().getTempDirectory(getServer().getServer().getId());
 	}
-	
+
 	private String guessModuleName(IModule module) {
-		String moduleName = module.getName(); 
-		if("jst.web".equals(getModuleTypeId())){ //$NON-NLS-1$
-			IWebModule webModule = (IWebModule)getModule()[0].loadAdapter(IWebModule.class,null);
-			if(webModule==null)
-			{
+		String moduleName = module.getName();
+		if ("jst.web".equals(getModuleTypeId())) { //$NON-NLS-1$
+			IWebModule webModule = (IWebModule) getModule()[0].loadAdapter(IWebModule.class, null);
+			if (webModule == null) {
 				return module.getName();
 			}
 			String contextRoot = webModule.getURI(module);
-			moduleName = contextRoot.substring(0,contextRoot.lastIndexOf('.'));
-			}
-		return moduleName;
+			moduleName = contextRoot.substring(0, contextRoot.lastIndexOf('.'));
 		}
+		return moduleName;
+	}
 
+	private String guessContextRoot(IModule module) {
+		String moduleName = guessModuleName(module);
+		String contextRoot = moduleName;
+		if ("jst.web".equals(getModuleTypeId())) { //$NON-NLS-1$
+			IWebModule webModule = (IWebModule) getModule()[0].loadAdapter(IWebModule.class, null);
+			if (webModule != null) {
+				contextRoot = webModule.getContextRoot();
+				if (contextRoot == null || contextRoot.length() == 0) {
+					contextRoot = moduleName;
+				}
+			}
+		}
+		return contextRoot;
+	}
 
-
-	private void runAnt(String buildFile,String targets,Map properties ,IProgressMonitor monitor)throws CoreException{
+	private void runAnt(String buildFile, String targets, Map properties, IProgressMonitor monitor) throws CoreException {
 		ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
-		ILaunchConfigurationType type = launchManager.getLaunchConfigurationType(IAntLaunchConfigurationConstants.ID_ANT_LAUNCH_CONFIGURATION_TYPE);
-		if(type==null){
-			IStatus s = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0,GenericServerCoreMessages.antLauncherMissing,null);
+		ILaunchConfigurationType type = launchManager
+				.getLaunchConfigurationType(IAntLaunchConfigurationConstants.ID_ANT_LAUNCH_CONFIGURATION_TYPE);
+		if (type == null) {
+			IStatus s = new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, GenericServerCoreMessages.antLauncherMissing, null);
 			throw new CoreException(s);
 		}
-		ILaunchConfigurationWorkingCopy wc= type.newInstance(null,properties.get(PROP_MODULE_NAME)+" module publisher"); //$NON-NLS-1$
+		ILaunchConfigurationWorkingCopy wc = type.newInstance(null, properties.get(PROP_MODULE_NAME) + " module publisher"); //$NON-NLS-1$
 		wc.setContainer(null);
 		wc.setAttribute(IExternalToolConstants.ATTR_LOCATION, buildFile);
-		wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH_PROVIDER,"org.eclipse.ant.ui.AntClasspathProvider"); //$NON-NLS-1$
-		wc.setAttribute(IAntLaunchConfigurationConstants.ATTR_ANT_TARGETS,targets);
-		wc.setAttribute(IAntLaunchConfigurationConstants.ATTR_ANT_PROPERTIES,properties);
-		wc.setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND,false);
-		wc.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE,true);
-		wc.setAttribute(IDebugUIConstants.ATTR_PRIVATE,true);
-		
-		wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_SOURCE_PATH_PROVIDER, "org.eclipse.ant.ui.AntClasspathProvider");  //$NON-NLS-1$
-		wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_NAME,getServerRuntime().getVMInstall().getName());
-		wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE,getServerRuntime().getVMInstall().getVMInstallType().getId());
-		wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "org.eclipse.ant.internal.ui.antsupport.InternalAntRunner"); //$NON-NLS-1$
+		wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH_PROVIDER, "org.eclipse.ant.ui.AntClasspathProvider"); //$NON-NLS-1$
+		wc.setAttribute(IAntLaunchConfigurationConstants.ATTR_ANT_TARGETS, targets);
+		wc.setAttribute(IAntLaunchConfigurationConstants.ATTR_ANT_PROPERTIES, properties);
+		wc.setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, false);
+		wc.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE, true);
+		wc.setAttribute(IDebugUIConstants.ATTR_PRIVATE, true);
+
+		wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_SOURCE_PATH_PROVIDER, "org.eclipse.ant.ui.AntClasspathProvider"); //$NON-NLS-1$
+		wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_NAME, getServerRuntime().getVMInstall().getName());
+		wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE, getServerRuntime().getVMInstall().getVMInstallType()
+				.getId());
+		wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME,
+				"org.eclipse.ant.internal.ui.antsupport.InternalAntRunner"); //$NON-NLS-1$
 		wc.setAttribute(DebugPlugin.ATTR_PROCESS_FACTORY_ID, IAntUIConstants.REMOTE_ANT_PROCESS_FACTORY_ID);
-		
+
 		setupAntLaunchConfiguration(wc);
-		
-		
+
 		ILaunchConfiguration launchConfig = wc.doSave();
-        launchConfig.launch("run",monitor); //$NON-NLS-1$
+		launchConfig.launch("run", monitor); //$NON-NLS-1$
 	}
 
-
-
-  /**
-   * Hook method for subclasses.
-   * 
-   * @param wc
-   */
-    protected void setupAntLaunchConfiguration(ILaunchConfigurationWorkingCopy wc) {
-    	//nothing to do
+	/**
+	 * Hook method for subclasses.
+	 * 
+	 * @param wc
+	 */
+	protected void setupAntLaunchConfiguration(ILaunchConfigurationWorkingCopy wc) {
+		// nothing to do
 	}
 
-    private static boolean isModuleType(IModule module, String moduleTypeId){    
-        if(module.getModuleType()!=null && moduleTypeId.equals(module.getModuleType().getId()))
-            return true;
-        return false;
-    }
-    
-	/* (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) {
+	private static boolean isModuleType(IModule module, String moduleTypeId) {
+		if (module.getModuleType() != null && moduleTypeId.equals(module.getModuleType().getId()))
+			return true;
+		return false;
+	}
 
-    	if(getModule().length>1)// only respond to root module calls. 
+	/*
+	 * (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) {
+
+		if (getModule().length > 1)// only respond to root module calls.
 			return null;
-    	try {
-        	 File file = computeBuildFile();
-            runAnt(file.toString(),getUnpublishTargetsForModule(),getPublishProperties(),monitor);
-        } catch (CoreException e) {
-            IStatus s = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0,GenericServerCoreMessages.errorRemoveModuleAntpublisher,e);
-            return new IStatus[] {s};
-        }
-        return null;
-    }
+		try {
+			File file = computeBuildFile();
+			runAnt(file.toString(), getUnpublishTargetsForModule(), getPublishProperties(), monitor);
+		} catch (CoreException e) {
+			IStatus s = new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, GenericServerCoreMessages.errorRemoveModuleAntpublisher, 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/publishers/ModulePackager.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/ModulePackager.java
index b053568..78d05e7 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/ModulePackager.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/publishers/ModulePackager.java
@@ -27,6 +27,7 @@
  * Packages resources to a .zip file
  */
 public class ModulePackager {
+	private static final String JAR_FILE_SEPERATOR = "/";
 	private JarOutputStream outputStream;
 //	private StringBuffer manifestContents;
 
@@ -89,8 +90,8 @@
 	 * @throws IOException
 	 */
 	public void writeFolder(String destinationPath) throws IOException {
-//		if (!destinationPath.endsWith(File.separator )) 
-//			destinationPath = destinationPath + File.separator;
+		if (!destinationPath.endsWith(JAR_FILE_SEPERATOR )) 
+			destinationPath = destinationPath + JAR_FILE_SEPERATOR;
 		ZipEntry newEntry = new ZipEntry(destinationPath);
 		outputStream.putNextEntry(newEntry);
 		outputStream.closeEntry();
@@ -177,14 +178,17 @@
         File[] files = directory.listFiles();
         for( int i = 0; i < files.length; i++ )
         {
+        	String relativeFolder = makeRelative( files[i].getAbsolutePath(), root );
             if( files[i].isDirectory() )
             {
+            	if( relativeFolder != null )
+                {// should always be true
+                    writeFolder( relativeFolder );
+                }
                 pack( files[i], root );
             } else
             {
-                String relativeFolder = makeRelative( files[i]
-                        .getAbsolutePath(), root );
-                if( relativeFolder != null )
+            	if( relativeFolder != null )
                 {// should always be true
                     write( files[i], relativeFolder );
                 }
diff --git a/plugins/org.eclipse.jst.server.generic.jboss/.classpath b/plugins/org.eclipse.jst.server.generic.jboss/.classpath
index fb0f2c4..f457095 100644
--- a/plugins/org.eclipse.jst.server.generic.jboss/.classpath
+++ b/plugins/org.eclipse.jst.server.generic.jboss/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="servers/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.jst.server.generic.jboss/.cvsignore b/plugins/org.eclipse.jst.server.generic.jboss/.cvsignore
index 2d9835d..010b5b0 100644
--- a/plugins/org.eclipse.jst.server.generic.jboss/.cvsignore
+++ b/plugins/org.eclipse.jst.server.generic.jboss/.cvsignore
@@ -1,3 +1,5 @@
 bin
 build.xml
 javaCompiler.genericjboss.jar.args
+temp.folder
+genericjboss.jar
diff --git a/plugins/org.eclipse.jst.server.generic.jboss/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jst.server.generic.jboss/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..925eec7
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.generic.jboss/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Sun Jan 21 15:01:45 EET 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.jst.server.generic.jboss/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.generic.jboss/META-INF/MANIFEST.MF
index 1609c33..3acb7ba 100644
--- a/plugins/org.eclipse.jst.server.generic.jboss/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.generic.jboss/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.server.generic.jboss;singleton:=true
-Bundle-Version: 1.5.0.qualifier
+Bundle-Version: 1.5.2.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.jst.server.core;bundle-version="[1.0.102,1.1.0)",
@@ -14,3 +14,4 @@
  org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,1.2.0)"
 Eclipse-LazyStart: true
 Bundle-ClassPath: genericjboss.jar
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.jst.server.generic.jboss/buildfiles/jboss323.xml b/plugins/org.eclipse.jst.server.generic.jboss/buildfiles/jboss323.xml
index f720ca4..e4ff370 100644
--- a/plugins/org.eclipse.jst.server.generic.jboss/buildfiles/jboss323.xml
+++ b/plugins/org.eclipse.jst.server.generic.jboss/buildfiles/jboss323.xml
@@ -1,4 +1,7 @@
 <project name="deployextension"  default="deploy.j2ee.web"  basedir=".">
+	<property name="pause.deploy" value="10"/>
+	<property name="pause.undeploy" value="5"/>
+
 	<target name="deploy.j2ee.web">
 		<jar destfile="${project.working.dir}/${module.name}.war"> 
 			<zipfileset dir="${module.dir}">
@@ -7,6 +10,7 @@
 			</zipfileset>
 		</jar>
   		<move file="${project.working.dir}/${module.name}.war" todir="${server.publish.dir}"/>
+		<sleep seconds="${pause.deploy}"/>
 	</target>
 	
 	<target name="deploy.j2ee.ejb">
@@ -17,6 +21,7 @@
 			</zipfileset>
 		</jar>
   		<move file="${project.working.dir}/${module.name}.jar" todir="${server.publish.dir}"/>
+		<sleep seconds="${pause.deploy}"/>
 	</target>
 	<target name="deploy.j2ee.ear">
 		<jar destfile="${project.working.dir}/${module.name}.ear"> 
@@ -26,16 +31,20 @@
 			</zipfileset>
 		</jar>
   		<move file="${project.working.dir}/${module.name}.ear" todir="${server.publish.dir}"/>
+		<sleep seconds="${pause.deploy}"/>
 	</target>
 	
 	<target name="undeploy.j2ee.web">
 		<delete file="${server.publish.dir}/${module.name}.war"> </delete>
+		<sleep seconds="${pause.undeploy}"/>
 	</target>
 	<target name="undeploy.j2ee.ejb">
 		<delete file="${server.publish.dir}/${module.name}.jar"> </delete>
+		<sleep seconds="${pause.undeploy}"/>
 	</target>
 	<target name="undeploy.j2ee.ear">
 		<delete file="${server.publish.dir}/${module.name}.ear"> </delete>
+		<sleep seconds="${pause.undeploy}"/>
 	</target>	
 	
 </project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.generic.jboss/plugin.properties b/plugins/org.eclipse.jst.server.generic.jboss/plugin.properties
index 17b7e64..9568974 100644
--- a/plugins/org.eclipse.jst.server.generic.jboss/plugin.properties
+++ b/plugins/org.eclipse.jst.server.generic.jboss/plugin.properties
@@ -14,11 +14,11 @@
 
 # ============ jboss323 ====================
 jbossCategory=JBoss
-jboss323runtimeTypeName=JBoss v3.2.x
+jboss323runtimeTypeName=JBoss v3.2.3
 jboss323runtimeTypeDescription=Publishes and runs J2EE 1.3 modules on a local server. \
 Provides basic server functionality.
 
-jboss323serverTypeName=JBoss v3.2.x
+jboss323serverTypeName=JBoss v3.2.3
 jboss323serverTypeDescription=Publishes and runs J2EE 1.3 modules on a local server. \
 Provides basic server functionality.
 
diff --git a/plugins/org.eclipse.jst.server.generic.jboss/servers/jboss.serverdef b/plugins/org.eclipse.jst.server.generic.jboss/servers/jboss.serverdef
index 789bbb5..db590ee 100644
--- a/plugins/org.eclipse.jst.server.generic.jboss/servers/jboss.serverdef
+++ b/plugins/org.eclipse.jst.server.generic.jboss/servers/jboss.serverdef
@@ -61,7 +61,7 @@
 		<mainClass>org.jboss.Main</mainClass>
 		<workingDirectory>${serverRootDirectory}/bin</workingDirectory>
 		<programArguments>-c ${serverConfig}</programArguments>
-		<vmParameters>-Dprogram.name=run.bat -Djava.endorsed.dirs=${serverRootDirectory}/bin/../lib/endorsed -Xms128m -Xmx512m</vmParameters>
+		<vmParameters>-Dprogram.name=run.bat -Djava.endorsed.dirs="${serverRootDirectory}/bin/../lib/endorsed" -Xms128m -Xmx512m</vmParameters>
 		<classpathReference>jboss</classpathReference>
 	</start>
 
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.installable/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.installable/META-INF/MANIFEST.MF
index ef17dbe..499d7de 100644
--- a/plugins/org.eclipse.jst.server.installable/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.installable/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-SymbolicName: org.eclipse.jst.server.installable;singleton:=true
 Bundle-Name: %pluginName
-Bundle-Version: 1.5.1.qualifier
+Bundle-Version: 1.5.2.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle:  org.eclipse.core.runtime;bundle-version="[3.2.0,3.3.0)",
diff --git a/plugins/org.eclipse.jst.server.installable/plugin.properties b/plugins/org.eclipse.jst.server.installable/plugin.properties
index bb85ccb..1ffab03 100644
--- a/plugins/org.eclipse.jst.server.installable/plugin.properties
+++ b/plugins/org.eclipse.jst.server.installable/plugin.properties
@@ -19,8 +19,8 @@
 vendorApache=Apache
 
 # WebSphere CE download
-runtimeTypeWASCE10Label=WebSphere Application Server Community Edition v1.0
-runtimeTypeWASCE10Description=IBM WebSphere Application Server Community Edition v1.0 supports J2EE 1.4.
+runtimeTypeWASCE1xLabel=WebSphere Application Server Community Edition v1.x
+runtimeTypeWASCE1xDescription=IBM WebSphere Application Server Community Edition v1.x supports J2EE 1.4.
 vendorIBM=IBM
 
 # Pramati download
diff --git a/plugins/org.eclipse.jst.server.installable/plugin.xml b/plugins/org.eclipse.jst.server.installable/plugin.xml
index 4281ed8..8c824a0 100644
--- a/plugins/org.eclipse.jst.server.installable/plugin.xml
+++ b/plugins/org.eclipse.jst.server.installable/plugin.xml
@@ -23,13 +23,13 @@
       featureSite="http://www.apache.org/dist/geronimo/eclipse/updates/">
     </installableServer>
     <installableServer
-      id="org.apache.geronimo.generic.runtime.10"
-      name="%runtimeTypeWASCE10Label"
-      description="%runtimeTypeWASCE10Description"
+      id="org.apache.geronimo.generic.runtime.11"
+      name="%runtimeTypeWASCE1xLabel"
+      description="%runtimeTypeWASCE1xDescription"
       vendor="%vendorIBM"
-      version="1.0"
+      version="1.1"
       featureId="com.ibm.websphere.ce.feature"
-      featureVersion="1.0.0"
+      featureVersion="1.1.0"
       featureSite="http://download.boulder.ibm.com/ibmdl/pub/software/websphere/wasce/updates/">
     </installableServer>
     <installableServer
diff --git a/plugins/org.eclipse.jst.server.pde/.classpath b/plugins/org.eclipse.jst.server.pde/.classpath
deleted file mode 100644
index 751c8f2..0000000
--- a/plugins/org.eclipse.jst.server.pde/.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.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.pde/.cvsignore b/plugins/org.eclipse.jst.server.pde/.cvsignore
deleted file mode 100644
index ddb0a2d..0000000
--- a/plugins/org.eclipse.jst.server.pde/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-bin
-.settings
diff --git a/plugins/org.eclipse.jst.server.pde/.project b/plugins/org.eclipse.jst.server.pde/.project
deleted file mode 100644
index 7a788cc..0000000
--- a/plugins/org.eclipse.jst.server.pde/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.server.pde</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.pde/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.pde/META-INF/MANIFEST.MF
deleted file mode 100644
index 26945f9..0000000
--- a/plugins/org.eclipse.jst.server.pde/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,13 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Generic server PDE Template
-Bundle-SymbolicName: org.eclipse.jst.server.generic.pde; singleton:=true
-Bundle-Version: 1.0.0
-Bundle-Activator: org.eclipse.jst.server.generic.pde.ServerPdePlugin
-Bundle-Vendor: %providerName
-Bundle-Localization: plugin
-Require-Bundle: org.eclipse.ui,
- org.eclipse.core.runtime,
- org.eclipse.pde.ui,
- org.eclipse.pde.core
-Eclipse-AutoStart: true
diff --git a/plugins/org.eclipse.jst.server.pde/about.html b/plugins/org.eclipse.jst.server.pde/about.html
deleted file mode 100644
index 4ec5989..0000000
--- a/plugins/org.eclipse.jst.server.pde/about.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!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">
-
-<H3>About This Content</H3>
-
-<P>May 2, 2006</P>
-
-<H3>License</H3>
-
-<P>The Eclipse Foundation makes available all content in this plug-in 
-("Content"). Unless otherwise indicated below, the Content is provided to you 
-under the terms and conditions of the Eclipse Public License Version 1.0 
-("EPL"). A copy of the EPL is available at
-<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
-For purposes of the EPL, "Program" 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 ("Redistributor") 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 
-and such source code may be obtained at
-<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
-
-</BODY>
-</HTML>
diff --git a/plugins/org.eclipse.jst.server.pde/build.properties b/plugins/org.eclipse.jst.server.pde/build.properties
deleted file mode 100644
index 1393183..0000000
--- a/plugins/org.eclipse.jst.server.pde/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-##################################################################################################
-# Copyright (c) 2005 Eteration A.S. and Gorkem Ercan. 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: Gorkem Ercan - initial API and implementation
-#               
-###################################################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               plugin.xml,\
-               templates_3.0/,\
-               icons/,\
-               plugin.properties,\
-               about.html
-src.includes = src/
diff --git a/plugins/org.eclipse.jst.server.pde/build.xml b/plugins/org.eclipse.jst.server.pde/build.xml
deleted file mode 100644
index c17f101..0000000
--- a/plugins/org.eclipse.jst.server.pde/build.xml
+++ /dev/null
@@ -1,266 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="org.eclipse.jst.server.generic.pde" default="build.jars" basedir=".">
-
-	<property name="basews" value="${ws}"/>
-	<property name="baseos" value="${os}"/>
-	<property name="basearch" value="${arch}"/>
-	<property name="basenl" value="${nl}"/>
-
-	<!-- Compiler settings. -->
-	<property name="javacFailOnError" value="false"/>
-	<property name="javacDebugInfo" value="on"/>
-	<property name="javacVerbose" value="true"/>
-	<property name="javacSource" value="1.3"/>
-	<property name="javacTarget" value="1.2"/>
-	<property name="compilerArg" value=""/>
-	<path id="path_bootclasspath">
-		<fileset dir="${java.home}/lib">
-			<include name="*.jar"/>
-		</fileset>
-	</path>
-	<property name="bootclasspath" refid="path_bootclasspath"/>
-
-	<target name="init" depends="properties">
-		<condition property="pluginTemp" value="${buildTempFolder}/plugins">
-			<isset property="buildTempFolder"/>
-		</condition>
-		<property name="pluginTemp" value="${basedir}"/>
-		<condition property="build.result.folder" value="${pluginTemp}/org.eclipse.jst.server.generic.pde">
-			<isset property="buildTempFolder"/>
-		</condition>
-		<property name="build.result.folder" value="${basedir}"/>
-		<property name="temp.folder" value="${basedir}/temp.folder"/>
-		<property name="plugin.destination" value="${basedir}"/>
-	</target>
-
-	<target name="properties" if="eclipse.running">
-		<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
-
-	</target>
-
-	<target name="build.update.jar" depends="init" description="Build the plug-in: org.eclipse.jst.server.generic.pde for an update site.">
-		<delete dir="${temp.folder}"/>
-		<mkdir dir="${temp.folder}"/>
-		<antcall target="build.jars"/>
-		<antcall target="gather.bin.parts">
-			<param name="destination.temp.folder" value="${temp.folder}/"/>
-		</antcall>
-		<zip destfile="${plugin.destination}/org.eclipse.jst.server.generic.pde_1.0.0.jar" basedir="${temp.folder}/org.eclipse.jst.server.generic.pde_1.0.0" filesonly="false" whenempty="skip" update="false"/>
-		<delete dir="${temp.folder}"/>
-	</target>
-
-	<target name="@dot" depends="init" unless="@dot" description="Create jar: org.eclipse.jst.server.generic.pde @dot.">
-		<delete dir="${temp.folder}/@dot.bin"/>
-		<mkdir dir="${temp.folder}/@dot.bin"/>
-		<!-- compile the source code -->
-		<javac destdir="${temp.folder}/@dot.bin" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bootclasspath}" source="${javacSource}" target="${javacTarget}"		>
-			<compilerarg line="${compilerArg}"/>
-			<classpath>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.core.runtime_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.osgi_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.help_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.swt_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.jface_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.core.commands_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.workbench_3.1.0.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ui.workbench.compatibility_3.1.0/compatibility.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ui.workbench.compatibility_3.1.0/@dot"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.core.expressions_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.core.resources_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.core.resources.compatibility_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.core.resources.win32_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.core.runtime.compatibility_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.update.configurator_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ant.core_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.core.variables_3.1.0.jar"/>
-				<pathelement path="../org.eclipse.pde.ui/eclipse3/target-0.7/eclipse/plugins/org.eclipse.pde.ui_3.1.0.jar"/>
-				<pathelement path="../org.eclipse.pde.ui/org.eclipse.pde.ui_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.ide_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.win32_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.views_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.update.core_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.update.core.win32_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.update.ui_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.forms_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.jface.text_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.text_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.workbench.texteditor_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.editors_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.core.filebuffers_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.debug.core_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.debug.ui_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.console_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.jdt.core_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.team.core_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.jdt.debug.ui_3.1.0.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.jdt.debug_3.1.0/jdi.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.jdt.debug_3.1.0/jdimodel.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.jdt.debug_3.1.0/tools.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.jdt.launching_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.jdt.ui_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.search_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.compare_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ltk.core.refactoring_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ltk.ui.refactoring_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.pde_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.pde.core_3.1.0.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.pde.build_3.1.0/pdebuild.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-antlr.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-apache-bcel.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-apache-bsf.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-apache-log4j.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-apache-oro.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-apache-regexp.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-apache-resolver.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-commons-logging.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-commons-net.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-icontract.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-jai.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-javamail.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-jdepend.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-jmf.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-jsch.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-junit.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-launcher.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-netrexx.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-nodeps.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-starteam.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-stylebook.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-swing.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-trax.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-vaj.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-weblogic.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-xalan1.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.ant_1.6.5/lib/ant-xslp.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-antlr.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-apache-bcel.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-apache-bsf.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-apache-log4j.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-apache-oro.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-apache-regexp.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-apache-resolver.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-commons-logging.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-commons-net.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-icontract.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-jai.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-javamail.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-jdepend.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-jmf.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-jsch.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-junit.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-launcher.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-netrexx.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-nodeps.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-starteam.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-stylebook.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-swing.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-trax.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-vaj.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-weblogic.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-xalan1.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/lib/ant-xslp.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.ant.optional.junit_2.1.0/@dot"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.junit_3.8.1/junit.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ant.ui_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.externaltools_3.1.0.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.jdt.junit_3.1.0/junitsupport.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.eclipse.jdt.junit.runtime_3.1.0/junitruntime.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.intro_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.ui.cheatsheets_3.1.0.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.help.base_3.1.0.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.lucene_1.4.3/lucene-1.4.3.jar"/>
-				<pathelement path="../../../../eclipse3/target-0.7/eclipse/plugins/org.apache.lucene_1.4.3/parser.jar"/>
-				<pathelement path="..\..\..\..\eclipse3\target-0.7\eclipse\plugins\org.eclipse.help.appserver_3.1.0.jar"/>
-			</classpath>
-			<src path="src/"			/>
-			</javac>
-		<!-- Copy necessary resources -->
-		<copy todir="${temp.folder}/@dot.bin" failonerror="true" overwrite="false">
-			<fileset dir="src/" excludes="**/*.java, **/package.htm*,null"			/>
-		</copy>
-		<mkdir dir="${build.result.folder}"/>
-		<copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false">
-			<fileset dir="${temp.folder}/@dot.bin"			/>
-		</copy>
-		<delete dir="${temp.folder}/@dot.bin"/>
-	</target>
-
-	<target name="src.zip" depends="init" unless="src.zip">
-		<mkdir dir="${build.result.folder}"/>
-		<zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false">
-			<fileset dir="src/" includes="**/*.java"			/>
-		</zip>
-	</target>
-
-	<target name="build.jars" depends="init" description="Build all the jars for the plug-in: org.eclipse.jst.server.generic.pde.">
-		<available property="@dot" file="${build.result.folder}/@dot"/>
-		<antcall target="@dot"/>
-	</target>
-
-	<target name="build.sources" depends="init">
-		<available property="src.zip" file="${build.result.folder}/src.zip"/>
-		<antcall target="src.zip"/>
-	</target>
-
-	<target name="gather.bin.parts" depends="init" if="destination.temp.folder">
-		<mkdir dir="${destination.temp.folder}/org.eclipse.jst.server.generic.pde_1.0.0"/>
-		<copy todir="${destination.temp.folder}/org.eclipse.jst.server.generic.pde_1.0.0" failonerror="true" overwrite="false">
-			<fileset dir="${build.result.folder}/@dot" includes="**"			/>
-		</copy>
-		<copy todir="${destination.temp.folder}/org.eclipse.jst.server.generic.pde_1.0.0" failonerror="true" overwrite="false">
-			<fileset dir="${basedir}" includes="META-INF/,null,plugin.xml,templates_3.0/,icons/,plugin.properties,build.properties"			/>
-		</copy>
-	</target>
-
-	<target name="build.zips" depends="init">
-	</target>
-
-	<target name="gather.sources" depends="init" if="destination.temp.folder">
-		<mkdir dir="${destination.temp.folder}/org.eclipse.jst.server.generic.pde_1.0.0"/>
-		<copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/org.eclipse.jst.server.generic.pde_1.0.0" failonerror="false" overwrite="false"/>
-		<copy todir="${destination.temp.folder}/org.eclipse.jst.server.generic.pde_1.0.0" failonerror="false" overwrite="false">
-			<fileset dir="${basedir}" includes="src/"			/>
-		</copy>
-	</target>
-
-	<target name="gather.logs" depends="init" if="destination.temp.folder">
-		<mkdir dir="${destination.temp.folder}/org.eclipse.jst.server.generic.pde_1.0.0"/>
-		<copy file="${temp.folder}/@dot.bin.log" todir="${destination.temp.folder}/org.eclipse.jst.server.generic.pde_1.0.0" failonerror="false" overwrite="false"/>
-	</target>
-
-	<target name="clean" depends="init" description="Clean the plug-in: org.eclipse.jst.server.generic.pde of all the zips, jars and logs created.">
-		<delete dir="${build.result.folder}/@dot"/>
-		<delete file="${build.result.folder}/src.zip"/>
-		<delete file="${plugin.destination}/org.eclipse.jst.server.generic.pde_1.0.0.jar"/>
-		<delete file="${plugin.destination}/org.eclipse.jst.server.generic.pde_1.0.0.zip"/>
-		<delete dir="${temp.folder}"/>
-	</target>
-
-	<target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder.">
-		<eclipse.convertPath fileSystemPath="D:/_bge/workspaces/workspace/org.eclipse.jst.server.generic.pde" property="resourcePath"/>
-		<eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/>
-	</target>
-
-	<target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: org.eclipse.jst.server.generic.pde.">
-		<delete dir="${temp.folder}"/>
-		<mkdir dir="${temp.folder}"/>
-		<antcall target="build.jars"/>
-		<antcall target="build.sources"/>
-		<antcall target="gather.bin.parts">
-			<param name="destination.temp.folder" value="${temp.folder}/"/>
-		</antcall>
-		<antcall target="gather.sources">
-			<param name="destination.temp.folder" value="${temp.folder}/"/>
-		</antcall>
-		<delete>
-			<fileset dir="${temp.folder}" includes="**/*.bin.log"			/>
-		</delete>
-		<zip destfile="${plugin.destination}/org.eclipse.jst.server.generic.pde_1.0.0.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/>
-		<delete dir="${temp.folder}"/>
-	</target>
-
-</project>
diff --git a/plugins/org.eclipse.jst.server.pde/icons/obj16/wiz_new_server_plugin.gif b/plugins/org.eclipse.jst.server.pde/icons/obj16/wiz_new_server_plugin.gif
deleted file mode 100644
index 1cfd11a..0000000
--- a/plugins/org.eclipse.jst.server.pde/icons/obj16/wiz_new_server_plugin.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.pde/plugin.properties b/plugins/org.eclipse.jst.server.pde/plugin.properties
deleted file mode 100644
index 4959a56..0000000
--- a/plugins/org.eclipse.jst.server.pde/plugin.properties
+++ /dev/null
@@ -1,24 +0,0 @@
-##################################################################################################
-# Copyright (c) 2005 Eteration A.S. and Gorkem Ercan. 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: Gorkem Ercan - initial API and implementation
-#               
-###################################################################################################
-pluginName= Generic server PDE Template
-providerName=Eclipse.org
-template.genericServer.name=Generic Server Plugin Wizard
-template.genericServer.description=\
-<p>This wizard creates a simple generic server plug-in. \
-The .serverdef file and the build.xml file for ANT based publishing are created. \
-Created files are the same files used for JBoss 3.2.3 in Generic Examples. \
-</p>\
-<p><b>Extension Used</b></p>\
-<li>org.eclipse.jst.server.generic.core.serverdefinition</li> \
-<li>org.eclipse.wst.server.core.runtimeTargetHandlers</li> \
-<li>org.eclipse.wst.server.ui.serverImages</li> \
-<li>org.eclipse.wst.server.ui.wizardFragments</li> \
-<li>org.eclipse.wst.server.core.serverTypes</li> \
-<li>org.eclipse.wst.server.core.runtimeTypes</li>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.pde/plugin.xml b/plugins/org.eclipse.jst.server.pde/plugin.xml
deleted file mode 100644
index bd18a48..0000000
--- a/plugins/org.eclipse.jst.server.pde/plugin.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?eclipse version="3.0"?>
-<plugin>
-   <extension
-         point="org.eclipse.pde.ui.pluginContent">
-      <wizard
-            category="WTP"
-            class="org.eclipse.jst.server.generic.pde.internal.GenericServerPluginNewWizard"
-            icon="icons/obj16/wiz_new_server_plugin.gif"
-            id="org.eclipse.jst.server.generic.pde.genericServer"
-            java="true"
-            name="%template.genericServer.name"
-            rcp="false"
-            ui-content="true">
-         <description>
-            %template.genericServer.description
-         </description>
-            
-            </wizard>
-   </extension>
-
-</plugin>
diff --git a/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/ServerPdePlugin.java b/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/ServerPdePlugin.java
deleted file mode 100644
index c1d8770..0000000
--- a/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/ServerPdePlugin.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2005 Eteration A.S. and Gorkem Ercan. 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: Gorkem Ercan - initial API and implementation
- *               
- **************************************************************************************************/
-package org.eclipse.jst.server.generic.pde;
-
-import org.eclipse.ui.plugin.*;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.osgi.framework.BundleContext;
-
-/**
- * The main plugin class to be used in the desktop.
- */
-public class ServerPdePlugin extends AbstractUIPlugin {
-
-	//The shared instance.
-	private static ServerPdePlugin plugin;
-	
-	/**
-	 * The constructor.
-	 */
-	public ServerPdePlugin() {
-		plugin = this;
-	}
-
-	/**
-	 * 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);
-		plugin = null;
-	}
-
-	/**
-	 * Returns the shared instance.
-	 */
-	public static ServerPdePlugin getDefault() {
-		return plugin;
-	}
-
-	/**
-	 * Returns an image descriptor for the image file at the given
-	 * plug-in relative path.
-	 *
-	 * @param path the path
-	 * @return the image descriptor
-	 */
-	public static ImageDescriptor getImageDescriptor(String path) {
-		return AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.jst.server.generic.pde", path);
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/GenericServerPluginNewWizard.java b/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/GenericServerPluginNewWizard.java
deleted file mode 100644
index 0cda4ac..0000000
--- a/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/GenericServerPluginNewWizard.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2005 Eteration A.S. and Gorkem Ercan. 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: Gorkem Ercan - initial API and implementation
- *               
- **************************************************************************************************/
-package org.eclipse.jst.server.generic.pde.internal;
-
-
-import org.eclipse.pde.ui.IFieldData;
-import org.eclipse.pde.ui.templates.ITemplateSection;
-import org.eclipse.pde.ui.templates.NewPluginTemplateWizard;
-/**
- * New Generic server plug-in wizard. 
- * @author Gorkem Ercan
- *
- */
-public class GenericServerPluginNewWizard extends NewPluginTemplateWizard {
-
-	public ITemplateSection[] createTemplateSections(){
-		return new ITemplateSection[] {new GenericServerTemplate()};
-	}
-	
-	public void init(IFieldData data) {
-		super.init(data);
-		setWindowTitle(Messages.windowTitleWizard);
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/GenericServerTemplate.java b/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/GenericServerTemplate.java
deleted file mode 100644
index 922ac38..0000000
--- a/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/GenericServerTemplate.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2005 Eteration A.S. and Gorkem Ercan. 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: Gorkem Ercan - initial API and implementation
- *               
- **************************************************************************************************/
-package org.eclipse.jst.server.generic.pde.internal;
-
-import java.net.URL;
-import java.util.ResourceBundle;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.jst.server.generic.pde.ServerPdePlugin;
-import org.eclipse.pde.core.plugin.IPluginBase;
-import org.eclipse.pde.core.plugin.IPluginElement;
-import org.eclipse.pde.core.plugin.IPluginExtension;
-import org.eclipse.pde.core.plugin.IPluginModelFactory;
-import org.eclipse.pde.core.plugin.IPluginReference;
-import org.eclipse.pde.internal.ui.wizards.templates.PluginReference;
-import org.eclipse.pde.ui.templates.OptionTemplateSection;
-import org.eclipse.pde.ui.templates.TemplateOption;
-/**
- * Simple generic server plug-in template
- * 
- * @author Gorkem Ercan
- *
- */
-public class GenericServerTemplate extends OptionTemplateSection {
-
-	private static final String KEY_SERVER_VERSION = "server_version"; //$NON-NLS-1$
-	private static final String KEY_SERVER_START_BEFORE_PUBLISH = "server_start_before_publish"; //$NON-NLS-1$
-	private static final String KEY_SERVER_LAUNCHTYPE = "server_launchtype"; //$NON-NLS-1$
-	private static final String KEY_SERVER_VENDOR = "server_vendor"; //$NON-NLS-1$
-	private static final String KEY_SERVER_DESCRIPTION = "server_description"; //$NON-NLS-1$
-	private static final String KEY_SERVER_NAME = "server_name"; //$NON-NLS-1$
-	private static final String[][] launchOpts = {{"java",Messages.labelJavaLaunchConfiguration},{"external",Messages.labelExternalLaunchConfiguration}}; //$NON-NLS-1$ //$NON-NLS-3$
-	
-	private TemplateOption fServerNameOption;
-	private TemplateOption fServerDescriptionOption;
-	private TemplateOption fServerVendorOption;
-	private TemplateOption fServerVersionOption;
-	private TemplateOption fLaunchTypeOption;
-	private TemplateOption fStartBeforPublishOption;
-	
-	public GenericServerTemplate() {
-		setPageCount(1);
-		createOptions();
-	}
-	
-	
-	private void createOptions(){
-	
-		fServerNameOption= addOption(KEY_SERVER_NAME,Messages.labelServerName,"your server's name",0); //$NON-NLS-2$
-		fServerDescriptionOption = addOption(KEY_SERVER_DESCRIPTION,"Description","User description of your server",0); //$NON-NLS-1$ //$NON-NLS-2$
-		fServerVendorOption= addOption(KEY_SERVER_VENDOR,Messages.labelServerVendor,"Server vendor' s name",0); //$NON-NLS-2$
-		fServerVersionOption= addOption(KEY_SERVER_VERSION,Messages.labelServerVesion,"0",0); //$NON-NLS-2$
-		fLaunchTypeOption= addOption(KEY_SERVER_LAUNCHTYPE,Messages.labelLaunchType,launchOpts,"java",0); //$NON-NLS-2$
-		fStartBeforPublishOption= addOption(KEY_SERVER_START_BEFORE_PUBLISH,Messages.labelStartBeforePublish,false,0);
-		
-		fServerNameOption.setRequired(true);
-		fServerDescriptionOption.setRequired(true);
-		fServerVendorOption.setRequired(true);
-		fServerVersionOption.setRequired(true);
-	}
-	
-	public String getSectionId() {
-		return "genericserver"; //$NON-NLS-1$
-	}
-
-	protected void updateModel(IProgressMonitor monitor) throws CoreException{
-		IPluginBase plugin = model.getPluginBase();
-		IPluginModelFactory factory = model.getPluginFactory();		
-		addRuntimeType(plugin, factory);
-		addServerType(plugin, factory);
-		addWizardFragment(plugin, factory);
-		addServerImage(plugin, factory);
-		addRuntimeTargetHandler(plugin, factory);
-		addServerDefinition(plugin, factory);
-	}
-
-	private void addServerDefinition(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
-		IPluginExtension definitionExtension = createExtension("org.eclipse.jst.server.generic.core.serverdefinition",true); //$NON-NLS-1$
-		IPluginElement serverDef = factory.createElement(definitionExtension);
-		serverDef.setName("serverdefinition"); //$NON-NLS-1$
-		serverDef.setAttribute("id",getRuntimeId()); //$NON-NLS-1$
-		serverDef.setAttribute("definitionfile","/servers/"+getStringOption(KEY_SERVER_NAME)+".serverdef"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		definitionExtension.add(serverDef);
-		if(!definitionExtension.isInTheModel())
-			plugin.add(definitionExtension);
-	}
-
-
-	private void addRuntimeTargetHandler(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
-		IPluginExtension handlerExtension = createExtension("org.eclipse.wst.server.core.runtimeTargetHandlers",true); //$NON-NLS-1$
-		IPluginElement handler= factory.createElement(handlerExtension);
-		handler.setName("runtimeTargetHandler"); //$NON-NLS-1$
-		handler.setAttribute("id",getNamespace()+".runtimeTarget"); //$NON-NLS-1$ //$NON-NLS-2$
-		handler.setAttribute("runtimeTypeIds",getRuntimeId()); //$NON-NLS-1$
-		handler.setAttribute("class","org.eclipse.jst.server.generic.core.internal.GenericServerRuntimeTargetHandler"); //$NON-NLS-1$ //$NON-NLS-2$
-		handlerExtension.add(handler);
-		if(!handlerExtension.isInTheModel())
-			plugin.add(handlerExtension);
-	}
-
-
-	private void addServerImage(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
-		IPluginExtension imageExtension = createExtension("org.eclipse.wst.server.ui.serverImages",true); //$NON-NLS-1$
-		IPluginElement serverImage = factory.createElement(imageExtension);
-		serverImage.setName("image"); //$NON-NLS-1$
-		serverImage.setAttribute("id",getNamespace()+".serverImage"); //$NON-NLS-1$ //$NON-NLS-2$
-		serverImage.setAttribute("icon","icons/server.gif"); //$NON-NLS-1$ //$NON-NLS-2$
-		serverImage.setAttribute("typeIds",getServerId()); //$NON-NLS-1$
-		imageExtension.add(serverImage);
-		
-		IPluginElement runtimeImage = factory.createElement(imageExtension);
-		runtimeImage.setName("image"); //$NON-NLS-1$
-		runtimeImage.setAttribute("id",getNamespace()+".runtimeImage"); //$NON-NLS-1$ //$NON-NLS-2$
-		runtimeImage.setAttribute("icon","icons/server.gif"); //$NON-NLS-1$ //$NON-NLS-2$
-		runtimeImage.setAttribute("typeIds",getRuntimeId()); //$NON-NLS-1$
-		imageExtension.add(runtimeImage);
-		if(!imageExtension.isInTheModel())
-			plugin.add(imageExtension);
-	}
-
-
-	private void addWizardFragment(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
-		IPluginExtension wizardExtension = createExtension("org.eclipse.wst.server.ui.wizardFragments",true); //$NON-NLS-1$
-		IPluginElement runtimeWiz = factory.createElement(wizardExtension);
-		runtimeWiz.setName("fragment"); //$NON-NLS-1$
-		runtimeWiz.setAttribute("id",getNamespace()+".runtimeWizard"); //$NON-NLS-1$ //$NON-NLS-2$
-		runtimeWiz.setAttribute("class","org.eclipse.jst.server.generic.ui.internal.GenericServerRuntimeWizardFragment"); //$NON-NLS-1$ //$NON-NLS-2$
-		runtimeWiz.setAttribute("typeIds",getRuntimeId()); //$NON-NLS-1$
-		wizardExtension.add(runtimeWiz);
-		if(!wizardExtension.isInTheModel())
-			plugin.add(wizardExtension);
-		
-		IPluginElement serverWiz = factory.createElement(wizardExtension);
-		serverWiz.setName("fragment"); //$NON-NLS-1$
-		serverWiz.setAttribute("id",getNamespace()+".serverWizard"); //$NON-NLS-1$ //$NON-NLS-2$
-        serverWiz.setAttribute("class","org.eclipse.jst.server.generic.ui.internal.GenericServerWizardFragment");    //$NON-NLS-1$ //$NON-NLS-2$
-		serverWiz.setAttribute("typeIds",getServerId()); //$NON-NLS-1$
-		wizardExtension.add(serverWiz);
-	}
-
-
-	private void addServerType(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
-		IPluginExtension serverExtension =createExtension("org.eclipse.wst.server.core.serverTypes",true); //$NON-NLS-1$
-		IPluginElement serverType = factory.createElement(serverExtension);
-		serverType.setName("serverType"); //$NON-NLS-1$
-		serverType.setAttribute("runtime","true"); //$NON-NLS-1$ //$NON-NLS-2$
-		serverType.setAttribute("class","org.eclipse.jst.server.generic.core.internal.GenericServer"); //$NON-NLS-1$ //$NON-NLS-2$
-		serverType.setAttribute("id",getServerId()); //$NON-NLS-1$
-		serverType.setAttribute("initialState","stopped"); //$NON-NLS-1$ //$NON-NLS-2$
-		serverType.setAttribute("supportsRemoteHosts","false"); //$NON-NLS-1$ //$NON-NLS-2$
-		serverType.setAttribute("runtimeTypeId",getRuntimeId()); //$NON-NLS-1$
-		serverType.setAttribute("description",getStringOption(KEY_SERVER_DESCRIPTION)); //$NON-NLS-1$
-		serverType.setAttribute("launchConfigId",getSelectedConfigType()); //$NON-NLS-1$
-		serverType.setAttribute("behaviourClass",getSelectedBehaviourClass()); //$NON-NLS-1$
-		serverType.setAttribute("name",getStringOption(KEY_SERVER_NAME)); //$NON-NLS-1$
-		serverType.setAttribute("startTimeout","75000"); //$NON-NLS-1$ //$NON-NLS-2$
-		serverType.setAttribute("stopTimeout","30000"); //$NON-NLS-1$ //$NON-NLS-2$
-		serverType.setAttribute("hasConfiguration","false"); //$NON-NLS-1$ //$NON-NLS-2$
-		serverType.setAttribute("launchModes","run,debug"); //$NON-NLS-1$ //$NON-NLS-2$
-		serverType.setAttribute("startBeforePublish", Boolean.toString(getBooleanOption(KEY_SERVER_START_BEFORE_PUBLISH))); //$NON-NLS-1$
-		serverExtension.add(serverType);
-		if(!serverExtension.isInTheModel())
-			plugin.add(serverExtension);
-	}
-
-
-	private void addRuntimeType(IPluginBase plugin, IPluginModelFactory factory) throws CoreException {
-		IPluginExtension extension =createExtension("org.eclipse.wst.server.core.runtimeTypes",true); //$NON-NLS-1$
-		IPluginElement runtimeType = factory.createElement(extension);
-		runtimeType.setName("runtimeType"); //$NON-NLS-1$
-		runtimeType.setAttribute("id",getRuntimeId()); //$NON-NLS-1$
-		runtimeType.setAttribute("name",getStringOption(KEY_SERVER_NAME)); //$NON-NLS-1$
-		runtimeType.setAttribute("description",getStringOption(KEY_SERVER_DESCRIPTION)); //$NON-NLS-1$
-		runtimeType.setAttribute("vendor",getStringOption(KEY_SERVER_VENDOR)); //$NON-NLS-1$
-		runtimeType.setAttribute("version",getStringOption(KEY_SERVER_VERSION)); //$NON-NLS-1$
-		runtimeType.setAttribute("class","org.eclipse.jst.server.generic.core.internal.GenericServerRuntime"); //$NON-NLS-1$ //$NON-NLS-2$
-		
-		IPluginElement moduleType = factory.createElement(runtimeType);
-		moduleType.setName("moduleType"); //$NON-NLS-1$
-		moduleType.setAttribute("types","jst.web"); //$NON-NLS-1$ //$NON-NLS-2$
-        moduleType.setAttribute("versions","1.2, 1.3"); //$NON-NLS-1$ //$NON-NLS-2$
-        runtimeType.add(moduleType);
-        
-		extension.add(runtimeType);
-		if(!extension.isInTheModel())
-			plugin.add(extension);
-	}
-	
-	private String getRuntimeId(){
-		return getNamespace()+".runtime"; //$NON-NLS-1$
-	}
-	
-	private String getServerId(){
-		return getNamespace()+".server"; //$NON-NLS-1$
-	}
-	private String getNamespace()
-	{
-		return model.getPluginBase().getId();
-	}
-	private String getSelectedBehaviourClass() {
-		if(isExternalSelected())
-			return "org.eclipse.jst.server.generic.core.internal.ExternalServerBehaviour"; //$NON-NLS-1$
-		return "org.eclipse.jst.server.generic.core.internal.GenericServerBehaviour"; //$NON-NLS-1$
-	}
-
-	private boolean isExternalSelected(){
-		String selectedType = getStringOption(KEY_SERVER_LAUNCHTYPE);
-		return "external".equals(selectedType); //$NON-NLS-1$
-	}
-
-	private String getSelectedConfigType(){
-		if(isExternalSelected())
-			return "org.eclipse.jst.server.generic.core.ExternalLaunchConfigurationType"; //$NON-NLS-1$
-		return "org.eclipse.jst.server.generic.core.launchConfigurationType"; //$NON-NLS-1$
-	}
-	
-	protected ResourceBundle getPluginResourceBundle(){
-		return null;
-	}
-	
-	public String[] getNewFiles(){
-		return new String[]{"icons/", "server/","buildfiles/"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-	}
-
-	public String getUsedExtensionPoint(){
-		return null;
-	}
-	
-	public void validateOptions(TemplateOption changed){
-		if(changed.isRequired() && changed.isEmpty()){
-			flagMissingRequiredOption(changed);
-			return;
-		}
-		TemplateOption[] options = getOptions(0);
-		for (int i = 0; i < options.length; i++) {
-			if(options[i].isRequired() && options[i].isEmpty()){
-				flagMissingRequiredOption(options[i]);
-				return;
-			}
-		}
-		resetPageState();
-	}
-	
-	
-	
-	public void addPages(Wizard wizard) {
-		WizardPage page = createPage(0);
-		page.setTitle(Messages.pageTitle);
-		page.setDescription(Messages.pageDescription);
-		wizard.addPage(page);
-		markPagesAdded();
-	}
-	
-	
- 
-	protected URL getInstallURL() {
-		return ServerPdePlugin.getDefault().getBundle().getEntry("/"); //$NON-NLS-1$
-	}
-	/* (non-Javadoc)
-	 * @see org.eclipse.pde.ui.templates.AbstractTemplateSection#getDependencies(java.lang.String)
-	 */
-	public IPluginReference[] getDependencies(String schemaVersion) {
-		IPluginReference[] dep = new IPluginReference[4];
-		dep[0] = new PluginReference("org.eclipse.core.runtime", null, 0); //$NON-NLS-1$
-		dep[1] = new PluginReference("org.eclipse.ui", null, 0); //$NON-NLS-1$
-		dep[2] = new PluginReference("org.eclipse.jst.server.generic.core", null, 0); //$NON-NLS-1$
-		dep[3] = new PluginReference("org.eclipse.jst.server.generic.ui", null, 0); //$NON-NLS-1$
-		return dep;
-	}
-
-	public Object getValue(String variable) {
-		return super.getValue(variable);
-	}
-	
-}
diff --git a/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/Messages.java b/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/Messages.java
deleted file mode 100644
index 2f357ea..0000000
--- a/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/Messages.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/***************************************************************************************************
- * Copyright (c) 2005 Eteration A.S. and Gorkem Ercan. 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: Gorkem Ercan - initial API and implementation
- *               
- **************************************************************************************************/
-package org.eclipse.jst.server.generic.pde.internal;
-
-import org.eclipse.osgi.util.NLS;
-
-public class Messages extends NLS {
-	private static final String BUNDLE_NAME = "org.eclipse.jst.server.generic.pde.internal.messages"; //$NON-NLS-1$
-
-	private Messages() {
-	}
-
-	static {
-		// initialize resource bundle
-		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
-	}
-
-	public static String labelJavaLaunchConfiguration;
-
-	public static String labelExternalLaunchConfiguration;
-
-	public static String labelServerName;
-
-	public static String labelServerVendor;
-
-	public static String labelServerVesion;
-
-	public static String labelLaunchType;
-
-	public static String labelStartBeforePublish;
-
-	public static String pageTitle;
-
-	public static String pageDescription;
-
-	public static String windowTitleWizard;
-}
diff --git a/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/messages.properties b/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/messages.properties
deleted file mode 100644
index 5890ce9..0000000
--- a/plugins/org.eclipse.jst.server.pde/src/org/eclipse/jst/server/generic/pde/internal/messages.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-##################################################################################################
-# Copyright (c) 2005 Eteration A.S. and Gorkem Ercan. 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: Gorkem Ercan - initial API and implementation
-#               
-###################################################################################################
-labelJavaLaunchConfiguration=Java launch cofiguration
-labelExternalLaunchConfiguration=External launch configuration
-labelServerName=Server Name
-labelServerVendor=Server Vendor
-labelServerVesion=Server Version
-labelLaunchType=Launch type
-labelStartBeforePublish=Start Before publish
-pageTitle=Generic Server Plug-in
-pageDescription=Create a new Generic server plug-in
-windowTitleWizard=New Generic Server plug-in
diff --git a/plugins/org.eclipse.jst.server.pde/templates_3.0/genericserver/buildfiles/$server_name$.xml b/plugins/org.eclipse.jst.server.pde/templates_3.0/genericserver/buildfiles/$server_name$.xml
deleted file mode 100644
index f720ca4..0000000
--- a/plugins/org.eclipse.jst.server.pde/templates_3.0/genericserver/buildfiles/$server_name$.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<project name="deployextension"  default="deploy.j2ee.web"  basedir=".">
-	<target name="deploy.j2ee.web">
-		<jar destfile="${project.working.dir}/${module.name}.war"> 
-			<zipfileset dir="${module.dir}">
-	        	<include name="**/*.*"/>
-				<exclude name="**/*.war"/>
-			</zipfileset>
-		</jar>
-  		<move file="${project.working.dir}/${module.name}.war" todir="${server.publish.dir}"/>
-	</target>
-	
-	<target name="deploy.j2ee.ejb">
-		<jar destfile="${project.working.dir}/${module.name}.jar"> 
-			<zipfileset dir="${module.dir}">
-	        	<include name="**/*.*"/>
-	       		<exclude name="**/*.java"/>
-			</zipfileset>
-		</jar>
-  		<move file="${project.working.dir}/${module.name}.jar" todir="${server.publish.dir}"/>
-	</target>
-	<target name="deploy.j2ee.ear">
-		<jar destfile="${project.working.dir}/${module.name}.ear"> 
-			<zipfileset dir="${module.dir}">
-	        	<include name="**/*.*"/>
-	       		<exclude name="**/*.java"/>
-			</zipfileset>
-		</jar>
-  		<move file="${project.working.dir}/${module.name}.ear" todir="${server.publish.dir}"/>
-	</target>
-	
-	<target name="undeploy.j2ee.web">
-		<delete file="${server.publish.dir}/${module.name}.war"> </delete>
-	</target>
-	<target name="undeploy.j2ee.ejb">
-		<delete file="${server.publish.dir}/${module.name}.jar"> </delete>
-	</target>
-	<target name="undeploy.j2ee.ear">
-		<delete file="${server.publish.dir}/${module.name}.ear"> </delete>
-	</target>	
-	
-</project>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.pde/templates_3.0/genericserver/icons/server.gif b/plugins/org.eclipse.jst.server.pde/templates_3.0/genericserver/icons/server.gif
deleted file mode 100644
index b51ae39..0000000
--- a/plugins/org.eclipse.jst.server.pde/templates_3.0/genericserver/icons/server.gif
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.pde/templates_3.0/genericserver/servers/$server_name$.serverdef b/plugins/org.eclipse.jst.server.pde/templates_3.0/genericserver/servers/$server_name$.serverdef
deleted file mode 100644
index c22872a..0000000
--- a/plugins/org.eclipse.jst.server.pde/templates_3.0/genericserver/servers/$server_name$.serverdef
+++ /dev/null
@@ -1,142 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<tns:ServerRuntime
-	xmlns:tns="http://eclipse.org/jst/server/generic/ServerTypeDefinition"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://eclipse.org/jst/server/generic/ServerTypeDefinition ServerTypeDefinitionSchema.xsd "
-	name="JBOSS 3.2.3" version="v3.2.3">
-<property id="serverRootDirectory"
-	label="%ApplicationServerDirectory"
-	type="directory"
-	context="runtime"
-	default="/your_server_root/appservers/jboss-3.2.3" />
-<property id="serverAddress"
-	label="%serverAddress"
-	type="string"
-	context="server"
-	default="127.0.0.1" />
-<property id="port"
-	label="%serverPort"
-	type="string"
-	context="server"
-	default="8080" />
-<property id="serverConfig"
-	label="%jboss323serverConfig"
-	type="string"
-	context="server"
-	default="default" />
-<property id="classPath"
-	label="%serverclassPath"
-	type="directory"
-	context="runtime"
-	default="/your_server_root/appservers/jboss-3.2.3" />
-
-	<port>
-		<no>$${port}</no>
-		<name>Http</name>
-		<protocol>http</protocol>
-	</port>
-
-	<module>
-		<type>j2ee.web</type>
-		<publishDir>$${serverRootDirectory}/server/$${serverConfig}/deploy</publishDir>
-		<publisherReference>org.eclipse.jst.server.generic.antpublisher</publisherReference>
-	</module>
-	<module>
-		<type>j2ee.ejb</type>
-		<publishDir>$${serverRootDirectory}/server/$${serverConfig}/deploy</publishDir>
-		<publisherReference>org.eclipse.jst.server.generic.antpublisher</publisherReference>
-	</module>
-	<module>
-		<type>j2ee.ear</type>
-		<publishDir>$${serverRootDirectory}/server/$${serverConfig}/deploy</publishDir>
-		<publisherReference>org.eclipse.jst.server.generic.antpublisher</publisherReference>
-	</module>
-
-	<project>
-		<classpathReference>jboss.project</classpathReference>
-	</project>
-	
-	<start>
-		<mainClass>org.jboss.Main</mainClass>
-		<workingDirectory>$${serverRootDirectory}/bin</workingDirectory>
-		<programArguments>-c $${serverConfig}</programArguments>
-		<vmParameters></vmParameters>
-		<classpathReference>jboss</classpathReference>
-	</start>
-
-	<stop>
-		<mainClass>org.jboss.Shutdown</mainClass>
-		<workingDirectory>$${serverRootDirectory}/bin</workingDirectory>
-		<programArguments>-S</programArguments>
-		<vmParameters></vmParameters>
-		<classpathReference>jboss</classpathReference>
-	</stop>
-	<publisher id="org.eclipse.jst.server.generic.antpublisher">
-		<publisherdata>
-			<dataname>build.file</dataname>
-			<datavalue>/buildfiles/jboss323.xml</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.publish.j2ee.web</dataname>
-			<datavalue>deploy.j2ee.web</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.publish.j2ee.ejb</dataname>
-			<datavalue>deploy.j2ee.ejb</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.unpublish.j2ee.web</dataname>
-			<datavalue>undeploy.j2ee.web</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.unpublish.j2ee.ejb</dataname>
-			<datavalue>undeploy.j2ee.ejb</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.publish.j2ee.ear</dataname>
-			<datavalue>deploy.j2ee.ear</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.unpublish.j2ee.ear</dataname>
-			<datavalue>undeploy.j2ee.ear</datavalue>
-		</publisherdata>				
-	</publisher>
-
-	<classpath id="jboss" >
-		<archive path="$${classPath}/bin/run.jar" />
-		<archive path="$${classPath}/bin/shutdown.jar" />
-		<archive path="$${classPath}/client/jboss-j2ee.jar" />
-		<archive path="$${classPath}/server/$${serverConfig}/lib/javax.servlet.jar" />
-		<archive path="$${classPath}/lib/jboss-boot.jar" />
-		<archive path="$${classPath}/lib/jboss-system.jar" />
-		<archive path="$${classPath}/lib/jboss-jmx.jar" />
-		<archive path="$${classPath}/lib/jboss-common.jar" />
-		<archive path="$${classPath}/lib/concurrent.jar" />
-		<archive path="$${classPath}/server/$${serverConfig}/lib/jboss.jar" />
-		<archive path="$${classPath}/server/$${serverConfig}/lib/jnpserver.jar" />
-		<archive path="$${classPath}/server/$${serverConfig}/lib/jpl-pattern.jar" />
-		<archive path="$${classPath}/server/$${serverConfig}/lib/jpl-util.jar" />
-		<archive path="$${classPath}/server/$${serverConfig}/lib/jboss-transaction.jar" />
-		<archive path="$${classPath}/server/$${serverConfig}/lib/bcel.jar" />
-		<archive path="$${classPath}/lib/jdom.jar" />
-		<archive path="$${classPath}/lib/xercesImpl.jar" />
-		<archive path="$${classPath}/lib/xml-apis.jar" />
-		<archive path="$${classPath}/lib/gnu-regexp.jar" />
-		<archive path="$${classPath}/lib/getopt.jar" />
-	</classpath>
-
-	<classpath id="jboss.project" >
-		<archive path="$${classPath}/client/jboss-j2ee.jar" />
-		<archive path="$${classPath}/server/default/lib/javax.servlet.jar" />
-		<archive path="$${classPath}/server/default/lib/activation.jar" />
-		<archive path="$${classPath}/server/default/lib/mail.jar" />
-	</classpath>
-	<jndiConnection>
-		<providerUrl>jnp://$${serverAddress}:1099</providerUrl>
-		<initialContextFactory>org.jnp.interfaces.NamingContextFactory</initialContextFactory>
-		<jndiProperty>
-			<name></name>
-			<value></value>
-		</jndiProperty>
-	</jndiConnection>
-</tns:ServerRuntime>
\ No newline at end of file
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
index 5164fe9..3418803 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.tomcat.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.server.tomcat.core; singleton:=true
-Bundle-Version: 1.0.103.qualifier
+Bundle-Version: 1.0.104.qualifier
 Bundle-Activator: org.eclipse.jst.server.tomcat.core.internal.TomcatPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
index eeb23da..ee80d9f 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jst.server.tomcat.core.internal;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -59,8 +60,11 @@
 		path = path.append(module2.getName());
 		
 		if (kind == IServer.PUBLISH_CLEAN || deltaKind == ServerBehaviourDelegate.REMOVED) { // clean and republish from scratch
-			IStatus[] stat = PublishUtil.deleteDirectory(path.toFile(), monitor);
-			addArrayToList(status, stat);
+			File f = path.toFile();
+			if (f.exists()) {
+				IStatus[] stat = PublishUtil.deleteDirectory(f, monitor);
+				addArrayToList(status, stat);
+			}
 			
 			if (deltaKind == ServerBehaviourDelegate.REMOVED)
 				return;
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
index 36fe820..6d04557 100644
--- 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
@@ -278,8 +278,11 @@
 		if (deltaKind == REMOVED) {
 			try {
 				String publishPath = (String) p.get(module[0].getId());
-				IStatus[] stat = PublishUtil.deleteDirectory(new File(publishPath), monitor);
-				PublishOperation2.addArrayToList(status, stat);
+				File f = new File(publishPath);
+				if (f.exists()) {
+					IStatus[] stat = PublishUtil.deleteDirectory(f, monitor);
+					PublishOperation2.addArrayToList(status, stat);
+				}
 			} catch (Exception e) {
 				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, "Could not remove module", e));
 			}
@@ -453,6 +456,7 @@
 			
 			String args = renderCommandLine(getRuntimeProgramArguments(false), " ");
 			wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, args);
+			wc.setAttribute("org.eclipse.debug.ui.private", true);
 			wc.setAttribute(ATTR_STOP, "true");
 			wc.launch(ILaunchManager.RUN_MODE, new NullProgressMonitor());
 		} catch (Exception e) {
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/build.properties b/plugins/org.eclipse.jst.server.tomcat.ui/build.properties
index 9832134..5ba12ce 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/build.properties
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/build.properties
@@ -18,3 +18,5 @@
                @dot/**,\
                temp.folder/**
 source.. = tomcatui/
+
+
diff --git a/plugins/org.eclipse.jst.server.websphere.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.websphere.core/META-INF/MANIFEST.MF
index 9db8550..1ed7499 100644
--- a/plugins/org.eclipse.jst.server.websphere.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.websphere.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: WebSphere Generic Server Definition Core Plug-in
 Bundle-SymbolicName: org.eclipse.jst.server.websphere.core; singleton:=true
-Bundle-Version: 1.0.100.qualifier
+Bundle-Version: 1.0.101.qualifier
 Bundle-ClassPath: webspherecore.jar
 Bundle-Activator: org.eclipse.jst.server.websphere.core.CorePlugin
 Bundle-Vendor: Eclipse.org
diff --git a/plugins/org.eclipse.jst.server.websphere.core/serverdef/scripts/websphere.6.x.xml b/plugins/org.eclipse.jst.server.websphere.core/serverdef/scripts/websphere.6.x.xml
index 9d3ea42..2971cec 100644
--- a/plugins/org.eclipse.jst.server.websphere.core/serverdef/scripts/websphere.6.x.xml
+++ b/plugins/org.eclipse.jst.server.websphere.core/serverdef/scripts/websphere.6.x.xml
@@ -31,7 +31,7 @@
 	    <wsadmin  
 			washome="${was.home}" 				
 			properties="${wasProfile}/properties/wsadmin.properties" 
-			command="$AdminApp install ${project.working.dir}/${module.name}.war {-appname ${module.name} -contextroot  ${module.name} -usedefaultbindings}" 
+			command="$AdminApp install ${project.working.dir}/${module.name}.war {-appname ${module.name} -contextroot  ${contextRoot} -usedefaultbindings}" 
 			failonerror="true">
 		</wsadmin>
 	    <wsadmin  
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 20e22ea..23db556 100644
--- a/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.server.core; singleton:=true
-Bundle-Version: 1.0.103.qualifier
+Bundle-Version: 1.0.105.qualifier
 Bundle-Activator: org.eclipse.wst.server.core.internal.ServerPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.server.core/plugin.properties b/plugins/org.eclipse.wst.server.core/plugin.properties
index cf4ddf5..c81668e 100644
--- a/plugins/org.eclipse.wst.server.core/plugin.properties
+++ b/plugins/org.eclipse.wst.server.core/plugin.properties
@@ -29,3 +29,6 @@
 
 moduleTypeUnknown=Unknown module
 moduleTypeStaticWebName=Static Web project
+
+clientNoneName=Do nothing
+clientNoneDescription=Launch the module on the server but do not bring up a client application.
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/plugin.xml b/plugins/org.eclipse.wst.server.core/plugin.xml
index 0f905c9..3eb42a8 100644
--- a/plugins/org.eclipse.wst.server.core/plugin.xml
+++ b/plugins/org.eclipse.wst.server.core/plugin.xml
@@ -17,7 +17,7 @@
   <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
        id="*"
@@ -26,4 +26,19 @@
        id="wst.web"
        name="%moduleTypeStaticWebName"/>
   </extension>
+
+  <extension point="org.eclipse.wst.server.core.launchableAdapters">
+    <launchableAdapter
+      class="org.eclipse.wst.server.core.internal.NullLaunchableAdapterDelegate"
+      id="org.eclipse.wst.server.core.null"/>
+  </extension>
+
+  <extension point="org.eclipse.wst.server.core.clients">
+    <client
+      id="org.eclipse.wst.server.core.null"
+      name="%clientNoneLabel"
+      description="%clientNoneDescription"
+      launchable="org.eclipse.wst.server.core.util.NullModuleArtifact"
+      class="org.eclipse.wst.server.core.internal.NullClientDelegate"/>
+  </extension>
 </plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd b/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd
index 29e23f8..13f4961 100644
--- a/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd
@@ -7,6 +7,8 @@
       </appInfo>

       <documentation>

          This extension point is used to provide a new runtime target handler. Runtime target handlers are called whenever a runtime target is added or removed from a project. They can be used to switch Java classpaths, setup default resources, etc.

+

+This extension point as well as the classes required to implement it are deprecated due to the addition of facets in WTP 1.0. If you were using this extension point for classpath then you can use the org.eclipse.jst.server.core.runtimeClasspathProviders extension point instead.

       </documentation>

    </annotation>

 

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 b1c2c9d..a60ad70 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
@@ -41,9 +41,7 @@
 
 	private static IRegistryChangeListener registryListener;
 
-	static {
-		executeStartups();
-	}
+	private static boolean initialized = false;
 
 	private static class RegistryChangeListener implements IRegistryChangeListener {
 		public void registryChanged(IRegistryChangeEvent event) {
@@ -238,6 +236,14 @@
 		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .startup extension point -<-");
 	}
 
+	private static synchronized void initialize() {
+		if (initialized)
+			return;
+		
+		initialized = true;
+		executeStartups();
+	}
+
 	/**
 	 * Load the runtime types.
 	 */
@@ -314,6 +320,8 @@
 	 * with the given id
 	 */
 	public static IRuntime findRuntime(String id) {
+		if (!initialized)
+			initialize();
 		return getResourceManager().getRuntime(id);
 	}
 
@@ -327,6 +335,8 @@
 	 * @return a possibly-empty array of runtime instances {@link IRuntime}
 	 */
 	public static IRuntime[] getRuntimes() {
+		if (!initialized)
+			initialize();
 		return getResourceManager().getRuntimes();
 	}
 
@@ -341,6 +351,8 @@
 	 * with the given id
 	 */
 	public static IServer findServer(String id) {
+		if (!initialized)
+			initialize();
 		return getResourceManager().getServer(id);
 	}
 
@@ -354,6 +366,8 @@
 	 * @return a possibly-empty array of server instances {@link IServer}
 	 */
 	public static IServer[] getServers() {
+		if (!initialized)
+			initialize();
 		return getResourceManager().getServers();
 	}
 
@@ -412,6 +426,8 @@
 	 *    default server
 	 */
 	public static IServer getDefaultServer(IModule module) {
+		if (!initialized)
+			initialize();
 		return ModuleProperties.getInstance().getDefaultServer(module);
 	}
 
@@ -428,6 +444,8 @@
 	 * @throws CoreException if there is a problem setting the default server
 	 */
 	public static void setDefaultServer(IModule module, IServer server, IProgressMonitor monitor) throws CoreException {
+		if (!initialized)
+			initialize();
 		ModuleProperties.getInstance().setDefaultServer(module, server, monitor);
 	}
 
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
index 04c0b41..63e1c55 100644
--- 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
@@ -183,7 +183,7 @@
 		try {
 			ISiteFeatureReference[] features = site.getFeatureReferences();
 			for (int i = 0; i < features.length; i++) {
-				if (features[i].getName().equals(featureId)) {
+				if (features[i].getVersionedIdentifier().getIdentifier().equals(featureId)) {
 					Version nextCand = new Version(features[i].getVersionedIdentifier().getVersion().toString());
 					if (nextCand.compareTo(latestVersion) > 0) {
 						latestVersion = nextCand;
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 998e355..9df6522 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
@@ -39,7 +39,6 @@
 	public static String errorPublishNoRuntime;
 	public static String errorPublishNoConfiguration;
 	public static String errorNoConfiguration;
-	public static String canPublishOk;
 	public static String publishingStatusOk;
 	public static String publishingStatusInfo;
 	public static String publishingStatusWarning;
@@ -53,15 +52,11 @@
 	public static String errorModuleRestartFailed;
 	public static String errorInstallingServer;
 	public static String errorInstallingServerFeature;
-	public static String canRestartModuleOk;
 	public static String errorRestartModule;
 	public static String canStartErrorState;
 	public static String errorLaunchMode;
-	public static String canStartOk;
-	public static String canRestartOk;
 	public static String errorRestartNotStarted;
 	public static String errorStopAlreadyStopped;
-	public static String canStopOk;
 	public static String moduleTypeUnknown;
 	public static String jobStartingServer;
 	public static String jobRestartingServer;
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 5d9730a..4174737 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
@@ -39,7 +39,7 @@
 errorLoading=Error loading from {0}.
 errorSaving=Could not save to {0}.
 errorModuleRestartFailed=Could not restart the module.
-errorWorkingCopyTimestamp=Could not save because the file has been modified since the start of editting.
+errorWorkingCopyTimestamp=Could not save because the file has been modified since the start of editing.
 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. 
@@ -63,11 +63,6 @@
 defaultVersion=Basic
 moduleTypeUnknown=Unknown module
 
-canStartOk=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.
 canStartErrorState=The server cannot be started because it is current starting or stopping.
 errorLaunchMode=The server does not support the given launch mode.
 errorRestartNotStarted=Cannot restart the server because it is not currently running.
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 b5e4586..7ee216f 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
@@ -27,6 +27,7 @@
 	protected String version;
 	protected IProject project;
 	protected ModuleDelegate delegate;
+	protected String id2;
 
 	/**
 	 * Module constructor.
@@ -46,6 +47,11 @@
 		this.version = version;
 		this.id = id;
 		this.name = name;
+		if (factory != null)
+			id2 = factory.getId() + ":";
+		else
+			id2 = ":";
+		id2 += id;
 	}
 
 	/**
@@ -54,7 +60,7 @@
 	 * @return java.lang.String
 	 */
 	public String getId() {
-		return factory.getId() + ":" + id;
+		return id2;
 	}
 
 	/**
@@ -213,10 +219,10 @@
 			return false;
 		
 		IModule m = (IModule) obj;
-		if (!getId().equals(m.getId()))
+		if (!id2.equals(m.getId()))
 			return false;
-		//if (!project.equals(m.getProject()))
-		//	return false;
+		if (project != null && m.getProject() != null && !project.equals(m.getProject()))
+			return false;
 		//if (!getModuleType().equals(m.getModuleType()))
 		//	return false;
 		
@@ -224,7 +230,10 @@
 	}
 
 	public int hashCode() {
-		return getId().hashCode();
+		int result = id2.hashCode() + 17;
+		if (project != null)
+			result += project.hashCode() * 37;
+		return result;
 	}
 
 	/**
@@ -233,6 +242,6 @@
 	 * @return java.lang.String
 	 */
 	public String toString() {
-		return "Module[" + name + "," + getId() + "]";
+		return "Module[" + name + "," + id2 + "]";
 	}
 }
\ 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 c47d79b..0a368e9 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
@@ -101,18 +101,18 @@
 			String mv = memento.getString(MODULE_TYPE_VERSION);
 			if (mt != null && mt.length() > 0)
 				moduleType = new ModuleType(mt, mv);
-	
-			resources = loadResource(memento);
+			
+			resources = loadResource(memento, new Path(""));
 		} catch (Exception e) {
 			Trace.trace(Trace.WARNING, "Could not load module publish info information: " + e.getMessage());
 		}
 	}
 
-	protected IModuleResource[] loadResource(IMemento memento) {
+	protected IModuleResource[] loadResource(IMemento memento, IPath path) {
 		if (memento == null)
 			return new IModuleResource[0];
 		
-		List list = new ArrayList(5);
+		List list = new ArrayList(10);
 		
 		// load files
 		IMemento[] children = memento.getChildren(FILE);
@@ -120,7 +120,6 @@
 			int size = children.length;
 			for (int i = 0; i < size; i++) {
 				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(name2, path, stamp);
 				list.add(file);
@@ -133,9 +132,8 @@
 			int size = children.length;
 			for (int i = 0; i < size; i++) {
 				String name2 = children[i].getString(NAME);
-				IPath path = new Path(children[i].getString(PATH));
 				ModuleFolder folder = new ModuleFolder(null, name2, path);
-				folder.setMembers(loadResource(children[i]));
+				folder.setMembers(loadResource(children[i], path.append(name2)));
 				list.add(folder);
 			}
 		}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/NullClientDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/NullClientDelegate.java
new file mode 100644
index 0000000..dc71147
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/NullClientDelegate.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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.Status;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.ClientDelegate;
+/**
+ * A client delegate that does nothing. Application will be launched
+ * for the user, but no client application will open.
+ */
+public class NullClientDelegate extends ClientDelegate {
+	public boolean supports(IServer server, Object launchable, String launchMode) {
+		return launchable instanceof NullLaunchableAdapterDelegate.NullLaunchable;
+	}
+
+	public IStatus launch(IServer server, Object launchable, String launchMode, ILaunch launch) {
+		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/NullLaunchableAdapterDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/NullLaunchableAdapterDelegate.java
new file mode 100644
index 0000000..6c04f39
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/NullLaunchableAdapterDelegate.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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.wst.server.core.IModuleArtifact;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.LaunchableAdapterDelegate;
+import org.eclipse.wst.server.core.util.NullModuleArtifact;
+/**
+ * A client delegate that does nothing. Application will be launched
+ * for the user, but no client application will open.
+ */
+public class NullLaunchableAdapterDelegate extends LaunchableAdapterDelegate {
+	public class NullLaunchable {
+		// class is used just for tagging
+		public String toString() {
+			return "NullLaunchable";
+		}
+	}
+
+	public Object NULL_LAUNCHABLE = new NullLaunchable();
+
+	public Object getLaunchable(IServer server, IModuleArtifact moduleArtifact) throws CoreException {
+		if (moduleArtifact instanceof NullModuleArtifact)
+			return NULL_LAUNCHABLE;
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishInfo.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishInfo.java
index a8511bf..5499e73 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishInfo.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishInfo.java
@@ -121,7 +121,8 @@
 			serverIdToPublishInfo.remove(serverId);
 			save();
 		}
-		path.append(path2).toFile().delete();
+		if (path2 != null)
+			path.append(path2).toFile().delete();
 	}
 
 	/**
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 4e9ea38..7e9c643 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
@@ -14,6 +14,7 @@
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.core.runtime.jobs.MultiRule;
 import org.eclipse.osgi.util.NLS;
@@ -127,21 +128,17 @@
 	}
 
 	/**
-	 * @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)getServer()).shouldPublish();
-	}
-
-	/**
 	 * @see org.eclipse.core.runtime.jobs.Job#run(IProgressMonitor)
 	 */
 	protected IStatus run(IProgressMonitor monitor) {
+		if (check) {
+			// don't run if we're autopublishing and there is no need for a publish.
+			// can't execute this code in shouldRun() because it will cancel the job
+			// instead of returning immediately
+			if (!ServerPreferences.getInstance().isAutoPublishing() || !((Server)getServer()).shouldPublish())
+				return Status.OK_STATUS;
+		}
+		
 		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/Server.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
index 9298f95..9d05d71 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
@@ -302,6 +302,9 @@
 					behaviourDelegate = ((ServerType) serverType).createServerBehaviourDelegate();
 					InternalInitializer.initializeServerBehaviourDelegate(behaviourDelegate, Server.this, monitor);
 					Trace.trace(Trace.PERFORMANCE, "Server.getBehaviourDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
+					
+					if (getServerState() == IServer.STATE_STARTED)
+						autoPublish();
 				} catch (Throwable t) {
 					Trace.trace(Trace.SEVERE, "Could not create behaviour delegate " + toString(), t);
 				}
@@ -1154,10 +1157,34 @@
 				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()) {
+							final ILaunchConfiguration[] lc = new ILaunchConfiguration[1];
+							Job job = new Job("Saving launch configuration") {
+								protected IStatus run(IProgressMonitor monitor) {
+									try {
+										lc[0] = wc.doSave();
+									} catch (CoreException ce) {
+										Trace.trace(Trace.SEVERE, "Error configuring launch", ce);
+									}
+									return Status.OK_STATUS;
+								}
+							};
+							job.setSystem(true);
+							job.schedule();
+							try {
+								job.join();
+							} catch (Exception e) {
+								Trace.trace(Trace.SEVERE, "Error configuring launch", e);
+							}
+							if (job.getState() != Job.NONE) {
+								job.cancel();
+								lc[0] = wc.doSave();
+							}
+							
+							return lc[0];
+						}
 						return launchConfigs[i];
 					}
 				} catch (CoreException e) {
@@ -1194,6 +1221,9 @@
 	public void start(String mode2, IProgressMonitor monitor) throws CoreException {
 		Trace.trace(Trace.FINEST, "Starting server: " + toString() + ", launchMode: " + mode2);
 	
+		// make sure that the delegate is loaded and the server state is correct
+		loadAdapter(ServerBehaviourDelegate.class, monitor);
+		
 		try {
 			ILaunchConfiguration launchConfig = getLaunchConfiguration(true, monitor);
 			ILaunch launch = launchConfig.launch(mode2, monitor); // , true); - causes workspace lock
@@ -1359,7 +1389,10 @@
 	public IStatus canStop() {
 		if (getServerState() == STATE_STOPPED)
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorStopAlreadyStopped, null);
-
+		
+		if (getServerType() != null && !getServerType().supportsLaunchMode(getMode()))
+			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorLaunchMode, null);
+		
 		return Status.OK_STATUS;
 	}
 
@@ -1385,7 +1418,10 @@
 	public void start(String mode2, IOperationListener listener2) {
 		Trace.trace(Trace.FINEST, "synchronousStart 1");
 		final Object mutex = new Object();
-	
+		
+		// make sure that the delegate is loaded and the server state is correct
+		loadAdapter(ServerBehaviourDelegate.class, null);
+		
 		// add listener to the server
 		IServerListener listener = new IServerListener() {
 			public void serverChanged(ServerEvent event) {
@@ -1442,17 +1478,24 @@
 		Trace.trace(Trace.FINEST, "synchronousStart 2");
 		
 		// start the server
+		IProgressMonitor monitor = new NullProgressMonitor();
 		try {
-			start(mode2, (IProgressMonitor)null);
+			start(mode2, monitor);
 		} catch (CoreException e) {
 			removeServerListener(listener);
 			timer.alreadyDone = true;
 			listener2.done(e.getStatus());
 			return;
 		}
-	
+		if (monitor.isCanceled()) {
+			removeServerListener(listener);
+			timer.alreadyDone = true;
+			listener2.done(Status.CANCEL_STATUS);
+			return;
+		}
+		
 		Trace.trace(Trace.FINEST, "synchronousStart 3");
-	
+		
 		// wait for it! wait for it! ...
 		synchronized (mutex) {
 			try {
@@ -1483,6 +1526,9 @@
 	public void synchronousStart(String mode2, IProgressMonitor monitor) throws CoreException {
 		Trace.trace(Trace.FINEST, "synchronousStart 1");
 		
+		// make sure that the delegate is loaded and the server state is correct
+		loadAdapter(ServerBehaviourDelegate.class, monitor);
+		
 		final boolean[] notified = new boolean[1];
 		
 		monitor = ProgressUtil.getMonitorFor(monitor);
@@ -1543,11 +1589,11 @@
 							}
 						}
 					}
-					if (!userCancelled && !timer.alreadyDone) {
+					if (!userCancelled && !timer.alreadyDone && !notified[0]) {
 						// notify waiter
 						synchronized (notified) {
 							Trace.trace(Trace.FINEST, "synchronousStart notify timeout");
-							if (!timer.alreadyDone)
+							if (!timer.alreadyDone && totalTimeout < 0)
 								timer.timeout = true;
 							notified[0] = true;
 							notified.notifyAll();
@@ -1571,6 +1617,11 @@
 			timer.alreadyDone = true;
 			throw e;
 		}
+		if (monitor.isCanceled()) {
+			removeServerListener(listener);
+			timer.alreadyDone = true;
+			return;
+		}
 		
 		Trace.trace(Trace.FINEST, "synchronousStart 3");
 		
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 acab99c..ce4808f 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
@@ -795,8 +795,20 @@
 			for (int i = 0; i < size; i++) {
 				try {
 					if (adapters[i].isEnabled(obj)) {
-						Trace.trace(Trace.FINER, "Run On Server for " + obj + " is enabled by " + adapters[i].getId());
-						return true;
+						Trace.trace(Trace.FINER, "ServerPlugin.hasModuleArtifact() - " + adapters[i].getId());
+						if (adapters[i].isDelegateLoaded()) {
+							long time = System.currentTimeMillis();
+							IModuleArtifact ma = adapters[i].getModuleArtifact(obj);
+							Trace.trace(Trace.FINER, "Deep enabled time: " + (System.currentTimeMillis() - time));
+							if (ma != null) {
+								Trace.trace(Trace.FINER, "Deep enabled");
+								return true;
+							}
+							Trace.trace(Trace.FINER, "Not enabled");
+						} else {
+							Trace.trace(Trace.FINER, "Enabled");
+							return true;
+						}
 					}
 				} catch (CoreException ce) {
 					Trace.trace(Trace.WARNING, "Could not use moduleArtifactAdapter", ce);
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 73e2695..8d25264 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
@@ -32,6 +32,8 @@
  * were published and when) for a single server.
  */
 public class ServerPublishInfo {
+	private static final String VERSION = "version";
+
 	protected IPath path;
 
 	// map of module ids to ModulePublishInfo
@@ -222,6 +224,10 @@
 
 		try {
 			IMemento memento2 = XMLMemento.loadMemento(filename);
+			Float f = memento2.getFloat(VERSION);
+			if (f != null && f.floatValue() >= 3)
+				return;
+			
 			IMemento[] children = memento2.getChildren("module");
 	
 			int size = children.length;
@@ -243,7 +249,8 @@
 	
 		try {
 			XMLMemento memento = XMLMemento.createWriteRoot("server");
-
+			memento.putString(VERSION, "1.0");
+			
 			Iterator iterator = modulePublishInfo.keySet().iterator();
 			while (iterator.hasNext()) {
 				String controlRef = (String) iterator.next();
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 ff9d447..8c0dac2 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,14 +273,14 @@
 	 * @exception java.io.IOException
 	 */
 	public static IMemento loadMemento(String filename) throws IOException {
-		FileInputStream fin = null;
+		InputStream in = null;
 		try {
-			fin = new FileInputStream(filename);
-			return XMLMemento.createReadRoot(fin);
+			in = new BufferedInputStream(new FileInputStream(filename));
+			return XMLMemento.createReadRoot(in);
 		} finally {
 			try {
-				if (fin != null)
-					fin.close();
+				if (in != null)
+					in.close();
 			} catch (Exception e) {
 				// ignore
 			}
@@ -365,9 +365,9 @@
 	 * @exception java.io.IOException
 	 */
 	public void saveToFile(String filename) throws IOException {
-		FileOutputStream w = null;
+		BufferedOutputStream w = null;
 		try {
-			w = new FileOutputStream(filename);
+			w = new BufferedOutputStream(new FileOutputStream(filename));
 			save(w);
 		} catch (IOException e) {
 			throw e;
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 2f787c2..f2b7d9c 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
@@ -114,13 +114,29 @@
 	/**
 	 * Returns the child modules of this module.
 	 *
-	 * @return org.eclipse.wst.server.core.model.IModule[]
+	 * @return an array of child modules
 	 */
 	public IModule[] getChildModules() {
 		return null;
 	}
 
 	/**
+	 * Returns <code>true</code> if this module has a simple structure based on a
+	 * single root folder, and <code>false</code> otherwise.
+	 * <p>
+	 * In a single root structure, all files that are contained within the root folder
+	 * are part of the module, and are already in the correct module structure. No
+	 * module resources exist outside of this single folder.
+	 * </p>
+	 * 
+	 * @return <code>true</code> if this module has a single root structure, and
+	 *    <code>false</code> otherwise
+	 */
+	public boolean isSingleRootStructure() {
+		return false;
+	}
+
+	/**
 	 * Basic implementation of members() method. Assumes that the entire project should
 	 * be published to a server.
 	 * 
@@ -138,18 +154,17 @@
 	 * @return an array of module resources
 	 * @throws CoreException
 	 */
-	private IModuleResource[] getModuleResources(IPath path, IContainer container) throws CoreException {
-		List list = new ArrayList();
-
+	protected IModuleResource[] getModuleResources(IPath path, IContainer container) throws CoreException {
 		IResource[] resources = container.members();
 		if (resources != null) {
 			int size = resources.length;
+			List list = new ArrayList(size);
 			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);
+						ModuleFolder mf = new ModuleFolder(container2, container2.getName(), path);
 						mf.setMembers(getModuleResources(path.append(container2.getName()), container2));
 						list.add(mf);
 					}
@@ -159,10 +174,10 @@
 						list.add(new ModuleFile(file, file.getName(), path));
 				}
 			}
+			IModuleResource[] moduleResources = new IModuleResource[list.size()];
+			list.toArray(moduleResources);
+			return moduleResources;
 		}
-
-		IModuleResource[] moduleResources = new IModuleResource[list.size()];
-		list.toArray(moduleResources);
-		return moduleResources;
+		return new IModuleResource[0];
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..c8be432
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 10 17:11:35 HST 2006
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
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 8d7785d..7151a74 100644
--- a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.server.ui; singleton:=true
-Bundle-Version: 1.0.103.qualifier
+Bundle-Version: 1.0.105.qualifier
 Bundle-Activator: org.eclipse.wst.server.ui.internal.ServerUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.server.ui/plugin.xml b/plugins/org.eclipse.wst.server.ui/plugin.xml
index 6bc8d23..997fc95 100644
--- a/plugins/org.eclipse.wst.server.ui/plugin.xml
+++ b/plugins/org.eclipse.wst.server.ui/plugin.xml
@@ -57,7 +57,7 @@
       <keywordReference id="org.eclipse.wst.server.preferenceKeywords"/>
   </page>
   <page
-    id="org.eclipse.wst.server.ui.preferencePage"
+    id="org.eclipse.wst.server.ui.launching.preferencePage"
     name="%preferenceLaunchingTitle"
     category="org.eclipse.wst.server.ui.preferencePage"
     class="org.eclipse.wst.server.ui.internal.LaunchingPreferencePage">
@@ -350,4 +350,10 @@
      icon="icons/obj16/web_module.gif"/>
 </extension>
 
-</plugin>
\ No newline at end of file
+<extension point="org.eclipse.ui.ide.markerResolution">
+  <markerResolutionGenerator
+     class="org.eclipse.wst.server.ui.internal.MarkerResolutionGenerator"
+     markerType="org.eclipse.wst.common.project.facet.core.validation.marker"/>
+</extension>
+
+</plugin>
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 477733f..73b2448 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
@@ -176,7 +176,8 @@
 		} else
 			hostname.setText("");
 		
-		if (runtime != null)
+		// check if runtime property is true or false
+		if (runtime != null && server != null && server.getServerType() != null && server.getServerType().hasRuntime())
 			runtimeLabel.setText(runtime.getName());
 		else
 			runtimeLabel.setText("");
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 0de5140..6bfe78d 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
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2006 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
@@ -17,12 +17,16 @@
 import java.util.List;
 
 import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.CoreException;
+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.Status;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.jobs.MultiRule;
 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;
@@ -34,9 +38,9 @@
 import org.eclipse.swt.widgets.Control;
 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;
+import org.eclipse.wst.server.core.internal.ServerSchedulingRule;
 /**
  * Dialog that prompts a user to delete server(s) and/or server configuration(s).
  */
@@ -143,43 +147,45 @@
 		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[i].delete();
-						}
-						
-						if (checked) {
-							size = configs.length;
-							for (int i = 0; i < size; i++) {
-								configs[i].delete(true, true, monitor);
-							}
-						}
-					} catch (Exception e) {
-						Trace.trace(Trace.SEVERE, "Error while deleting resources", e);
-					}
+		Job job = new Job(Messages.deleteServerTask) {
+			protected IStatus run(IProgressMonitor monitor) {
+				if (runningServersList.size() > 0) {
+					// stop servers and/or updates servers' list
+					prepareForDeletion(deleteRunning, deleteRunningStop);
 				}
-			};
-			new ProgressMonitorDialog(getShell()).run(true, true, op);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error deleting resources", e);
-		}
+				
+				if (servers.length == 0) {
+					// all servers have been deleted from list
+					return Status.OK_STATUS;
+				}
+				try {
+					int size = servers.length;
+					for (int i = 0; i < size; i++)
+						servers[i].delete();
+					
+					if (checked) {
+						size = configs.length;
+						for (int i = 0; i < size; i++)
+							configs[i].delete(true, true, monitor);
+					}
+				} catch (Exception e) {
+					Trace.trace(Trace.SEVERE, "Error while deleting resources", e);
+				}
+						
+				return Status.OK_STATUS;
+			}
+		};
+		
+		// set rule for workspace and servers
+		int size = servers.length;
+		ISchedulingRule[] rules = new ISchedulingRule[size+1];
+		for (int i = 0; i < size; i++)
+			rules[i] = new ServerSchedulingRule(servers[i]);
+		IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
+		rules[size] = ruleFactory.createRule(ResourcesPlugin.getWorkspace().getRoot());
+		job.setRule(MultiRule.combine(rules));
+		
+		job.schedule();
 		
 		super.okPressed();
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/MarkerResolutionGenerator.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/MarkerResolutionGenerator.java
new file mode 100644
index 0000000..f45a073
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/MarkerResolutionGenerator.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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.IMarker;
+import org.eclipse.ui.IMarkerResolution;
+import org.eclipse.ui.IMarkerResolutionGenerator2;
+
+public class MarkerResolutionGenerator implements IMarkerResolutionGenerator2 {
+	public boolean hasResolutions(IMarker marker) {
+		return true;
+	}
+
+	public IMarkerResolution[] getResolutions(IMarker marker) {
+		return new IMarkerResolution[] { new RuntimeMarkerResolution() };
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimeMarkerResolution.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimeMarkerResolution.java
new file mode 100644
index 0000000..99252ad
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimeMarkerResolution.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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.IMarker;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IMarkerResolution2;
+import org.eclipse.ui.dialogs.PreferencesUtil;
+
+public class RuntimeMarkerResolution implements IMarkerResolution2 {
+	public String getDescription() {
+		return Messages.wizNewRuntimeDescription;
+	}
+
+	public Image getImage() {
+		return ImageResource.getImage(ImageResource.IMG_SERVER);
+	}
+
+	public String getLabel() {
+		return Messages.wizNewServerRuntimeCreate;
+	}
+
+	public void run(IMarker marker) {
+		showPreferencePage();
+	}
+
+	protected boolean showPreferencePage() {
+		String id = "org.eclipse.wst.server.ui.preferencePage";
+		String id2 = "org.eclipse.wst.server.ui.runtime.preferencePage";
+		final PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null, id2, new String[] { id, id2 }, null);
+		return (dialog.open() == Window.OK);
+	}
+}
\ No newline at end of file
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 49b88ca..2c20a30 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
@@ -926,8 +926,13 @@
 		// check for server changes
 		if (serverId != null) {
 			if (!commandManager.isDirty(serverId)) {
-				if (commandManager.hasChanged(serverId))
-					promptReloadServerFile(serverId, server);
+				if (commandManager.hasChanged(serverId)) {
+					IServer newServer = ServerCore.findServer(serverId);
+					if (newServer != null && ((Server)newServer).getTimestamp() > ((Server)server).getTimestamp())
+						commandManager.reload(serverId, new NullProgressMonitor());
+					else
+						promptReloadServerFile(serverId, server);
+				}
 			} else {
 				if (commandManager.hasChanged(serverId) && !commandManager.areFilesReadOnly(serverId))
 					promptReloadServerFile(serverId, server);
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 f5fd982..c4242ba 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,6 +10,10 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.view.servers;
 
+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.jface.action.Action;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.IModule;
@@ -37,6 +41,13 @@
 	 * Implementation of method defined on <code>IAction</code>.
 	 */
 	public void run() {
-		server.restartModule(module, null);
+		int size = module.length;
+		Job restartJob = new Job(NLS.bind(Messages.actionRestartModule, module[size-1].getName())) {
+			protected IStatus run(IProgressMonitor monitor) {
+				server.restartModule(module, null);
+				return Status.OK_STATUS;
+			}
+		};
+		restartJob.schedule();
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/SubTasksWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/SubTasksWizardFragment.java
new file mode 100644
index 0000000..85956f8
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/SubTasksWizardFragment.java
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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 java.util.List;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+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;
+/**
+ * 
+ */
+public class SubTasksWizardFragment extends WizardFragment {
+	protected TasksComposite comp;
+
+	protected List tasks;
+
+	public SubTasksWizardFragment() {
+		// do nothing
+	}
+
+	public void enter() {
+		updateTasks(tasks);
+		
+		if (comp != null)
+			comp.createControl();
+	}
+
+	public void updateTasks(List newTasks) {
+		tasks = newTasks;
+		if (comp != null)
+			Display.getDefault().syncExec(new Runnable() {
+				public void run() {
+					comp.setTasks(tasks);
+				}
+			});
+	}
+
+	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 TasksComposite(parent, wizard);
+		return comp;
+	}
+}
\ No newline at end of file
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 f9a3dab..b35b6b2 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
@@ -18,14 +18,10 @@
 
 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.model.PublishOperation;
 import org.eclipse.wst.server.ui.internal.editor.IOrdered;
-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;
 /**
  * 
@@ -70,26 +66,71 @@
 		protected String getId() {
 			return id;
 		}
+		
+		public boolean equals(Object obj) {
+			if (!(obj instanceof TaskInfo))
+				return false;
+			
+			TaskInfo ti = (TaskInfo) obj;
+			if (kind != ti.kind)
+				return false;
+			
+			if (id == null || !id.equals(ti.id))
+				return false;
+			
+			if (task2 == null && ti.task2 != null)
+				return false;
+			
+			if (task2 != null && ti.task2 == null)
+				return false;
+			
+			try {
+				if (task2 != null && ti.task2 != null) {
+					if (task2.getKind() != ti.task2.getKind())
+						return false;
+					if (task2.getOrder() != ti.task2.getOrder())
+						return false;
+					if (!task2.getLabel().equals(ti.task2.getLabel()))
+						return false;
+					if (!task2.getDescription().equals(ti.task2.getDescription()))
+						return false;
+				}
+			} catch (Exception e) {
+				// ignore
+			}
+			return true;
+		}
 	}
 
-	protected TasksComposite comp;
-
 	protected List tasks;
 	protected boolean hasOptionalTasks;
-	
+	protected boolean hasPreferredTasks;
+
 	protected Map selectedTaskMap = new HashMap();
-	
+
 	public TasksWizardFragment() {
 		// do nothing
 	}
-	
+
+	protected void createChildFragments(List list) {
+		if (tasks == null)
+			return;
+		
+		int TASKS_PER_PAGE = 5;
+		int size = tasks.size();
+		int pages = (size - 1) / TASKS_PER_PAGE + 1;
+		for (int i = 0; i < pages; i++) {
+			SubTasksWizardFragment fragment = new SubTasksWizardFragment();
+			List list2 = tasks.subList(TASKS_PER_PAGE * i, Math.min(size, TASKS_PER_PAGE * (i+1)));
+			fragment.updateTasks(list2);
+			list.add(fragment);
+		}
+	}
+
 	public void enter() {
 		updateTasks();
-		
-		if (comp != null)
-			comp.createControl();
 	}
-	
+
 	public List getChildFragments() {
 		updateTasks();
 		return super.getChildFragments();
@@ -101,9 +142,10 @@
 	}
 
 	public void updateTasks() {
-		tasks = null;
-		if (getTaskModel() == null)
+		if (getTaskModel() == null) {
+			tasks = null;
 			return;
+		}
 
 		IServerAttributes server = (IServerAttributes) getTaskModel().getObject(TaskModel.TASK_SERVER);
 		List modules = (List) getTaskModel().getObject(TaskModel.TASK_MODULES);
@@ -121,22 +163,20 @@
 		}
 		
 		if (server != null && modules != null) {
-			tasks = new ArrayList();
-			createTasks(server, modules);
+			List taskList = new ArrayList();
+			createTasks(taskList, server, modules);
+			
+			if (tasks == null || !tasks.equals(taskList)) {
+				tasks = taskList;
+				updateChildFragments();
+			}
 		}
-		
-		if (comp != null)
-			Display.getDefault().syncExec(new Runnable() {
-				public void run() {
-					comp.setTasks(tasks);
-				}
-			});
 	}
-	
-	protected void createTasks(IServerAttributes server, List modules) {
+
+	protected void createTasks(List taskList, IServerAttributes server, List modules) {
 		if (server == null)
 			return;
-
+		
 		List enabledTasks = ((Server)server).getEnabledOptionalPublishOperationIds();
 		List disabledTasks = ((Server)server).getDisabledPreferredPublishOperationIds();
 		PublishOperation[] tasks2 = ((Server)server).getAllTasks(modules);
@@ -145,6 +185,8 @@
 			String id = ((Server)server).getPublishOperationId(tasks2[j]);
 			if (kind == PublishOperation.OPTIONAL || kind == PublishOperation.PREFERRED)
 				hasOptionalTasks = true;
+			if (kind == PublishOperation.PREFERRED)
+				hasPreferredTasks = true;
 			tasks2[j].setTaskModel(getTaskModel());
 			
 			boolean selected = true;
@@ -155,30 +197,22 @@
 				if (disabledTasks.contains(id))
 					selected = false;
 			}
-			addServerTask(server, tasks2[j], selected);
+			taskList.add(getServerTask(server, tasks2[j], selected));
 		}
 	}
 
-	public void addServerTask(IServerAttributes server, PublishOperation task2, boolean selected) {
+	public TaskInfo getServerTask(IServerAttributes server, PublishOperation task2, boolean selected) {
 		TaskInfo sti = new TaskInfo();
 		sti.task2 = task2;
 		sti.kind = task2.getKind();
 		sti.id = ((Server)server).getPublishOperationId(task2);
 		sti.setDefaultSelected(selected);
 		
-		tasks.add(sti);
+		return sti;
 	}
 
 	public boolean hasComposite() {
-		return hasTasks();
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.wst.server.ui.internal.task.WizardTask#getWizardPage()
-	 */
-	public Composite createComposite(Composite parent, IWizardHandle wizard) {
-		comp = new TasksComposite(parent, wizard);
-		return comp;
+		return false;
 	}
 
 	/**
@@ -246,4 +280,14 @@
 	public boolean hasOptionalTasks() {
 		return hasOptionalTasks;
 	}
+
+	/**
+	 * Return <code>true</code> if this wizard has preferred tasks.
+	 * 
+	 * @return <code>true</code> if this wizard has preferred tasks, and
+	 *    <code>false</code> otherwise
+	 */
+	public boolean hasPreferredTasks() {
+		return hasPreferredTasks;
+	}
 }
\ 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 79fbd57..001ea66 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
@@ -75,8 +75,13 @@
 	protected Button remove, removeAll;
 
 	protected TaskModel taskModel;
-	protected IModule newModule;
-	protected IModule origNewModule;
+
+	// a module that must be kept on the server
+	protected IModule requiredModule;
+
+	// the parent modules of the above modules. at least one of these modules
+	// must be kept on the server
+	protected IModule[] requiredModules;
 
 	protected Map errorMap;
 
@@ -158,7 +163,7 @@
 	 * ChildMapModuleKey
 	 */
 	protected class ChildModuleMapKey {
-		private IModule[] moduleTree;
+		protected IModule[] moduleTree;
 		
 		protected ChildModuleMapKey(IModule curModule) {
 			if (curModule != null) {
@@ -210,15 +215,15 @@
 	public ModifyModulesComposite(Composite parent, IWizardHandle wizard, IModule module) {
 		super(parent, SWT.NONE);
 		this.wizard = wizard;
-		origNewModule = module;
-			
+		requiredModule = module;
+		
 		wizard.setTitle(Messages.wizModuleTitle);
 		wizard.setDescription(Messages.wizModuleDescription);
 		wizard.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_WIZBAN_SELECT_SERVER));
 		
 		createControl();
 	}
-	
+
 	public void setServer(IServerAttributes server) {
 		if (server == this.server)
 			return;
@@ -244,25 +249,24 @@
 		}
 		
 		// add new module
-		newModule = null;
+		requiredModules = null;
 		errorMap = new HashMap();
-		if (origNewModule != null) {
+		if (requiredModule != null) {
 			try {
-				IModule[] parents = server.getRootModules(origNewModule, null);
+				IModule[] parents = server.getRootModules(requiredModule, null);
 				if (parents != null && parents.length > 0)
-					newModule = parents[0];
+					requiredModules = parents;
 				else
-					newModule = origNewModule;
+					requiredModules = new IModule[] { requiredModule };
 			} catch (CoreException ce) {
-				errorMap.put(newModule, ce.getStatus());
-				newModule = null;
+				// ignore
+				//errorMap.put(newModule, ce.getStatus());
 			} catch (Exception e) {
 				Trace.trace(Trace.WARNING, "Could not find root module", e);
-				newModule = null;
 			}
 		}
-		if (newModule != null && !deployed.contains(newModule))
-			deployed.add(newModule);
+		if (requiredModules != null && !deployed.contains(requiredModules[0]))
+			deployed.add(requiredModules[0]);
 
 		// get remaining modules
 		IModule[] modules2 = ServerUtil.getModules(server.getServerType().getRuntimeType().getModuleTypes());
@@ -304,7 +308,7 @@
 				// ignore
 			}
 		}
-
+		
 		iterator = modules.iterator();
 		while (iterator.hasNext()) {
 			IModule module = (IModule) iterator.next();
@@ -317,6 +321,37 @@
 			}
 		}
 		
+		// get children recursively one level
+		// put child elements into a different list to avoid concurrent modifications
+		iterator = childModuleMap.keySet().iterator();
+		List list = new ArrayList();
+		while (iterator.hasNext()) {
+			list.add(iterator.next());
+		}
+		
+		iterator = list.iterator();
+		while (iterator.hasNext()) {
+			ChildModuleMapKey key = (ChildModuleMapKey) iterator.next();
+			IModule[] children0 = (IModule[]) childModuleMap.get(key);
+			if (children0 != null) {
+				int size = children0.length;
+				for (int i = 0; i < size; i++) {
+					int size2 = key.moduleTree.length;
+					IModule[] module2 = new IModule[size2 + 1];
+					System.arraycopy(key.moduleTree, 0, module2, 0, size2);
+					module2[size2] = children0[i];
+					
+					try {
+						IModule[] children = server.getChildModules(module2, null);
+						if (children != null && children.length > 0)
+							childModuleMap.put(new ChildModuleMapKey(module2), children);
+					} catch (Exception e) {
+						// ignore
+					}
+				}
+			}
+		}
+		
 		if (availableTreeViewer != null)
 			Display.getDefault().syncExec(new Runnable() {
 				public void run() {
@@ -534,21 +569,36 @@
 				// ignore
 			}
 		}
+		
 		add.setEnabled(enabled);
 		addAll.setEnabled(modules.size() > 0);
 		
 		enabled = false;
 		module = getDeployedSelection();
-		if (module != null) {
+		if (module != null && deployed.contains(module)) {
 			try {
-				if (deployed.contains(module) && !module.equals(newModule))
+				int count = 0;
+				boolean found = false;
+				if (requiredModules != null) {
+					// count how many of newModule are deployed
+					int size = requiredModules.length;
+					for (int i = 0; i < size; i++) {
+						if (deployed.contains(requiredModules[i]))
+							count++;
+						if (module.equals(requiredModules[i]))
+							found = true;
+					}
+					if (count > 1 || !found)
+						enabled = true;
+				} else {
 					enabled = true;
+				}
 			} catch (Exception e) {
 				// ignore
 			}
 		}
 		remove.setEnabled(enabled);
-		if (newModule == null)
+		if (requiredModules == null)
 			removeAll.setEnabled(deployed.size() > 0);
 		else
 			removeAll.setEnabled(deployed.size() > 1);
@@ -566,8 +616,23 @@
 
 	protected void remove(boolean all) {
 		if (all) {
-			IModule[] modules2 = new IModule[deployed.size()];
-			deployed.toArray(modules2);
+			// pick one of the required modules to keep
+			IModule keep = null;
+			if (requiredModules != null) {
+				int size2 = requiredModules.length;
+				for (int i = 0; i < size2; i++) {
+					if (keep == null && deployed.contains(requiredModules[i]))
+						keep = requiredModules[i];
+				}
+			}
+			
+			List list = new ArrayList();
+			list.addAll(deployed);
+			list.remove(keep);
+			
+			IModule[] modules2 = new IModule[list.size()];
+			list.toArray(modules2);
+			
 			moveAll(modules2, false);
 		} else
 			moveAll(new IModule[] { getDeployedSelection() }, false);
@@ -583,14 +648,14 @@
 			if (status == null && !list.contains(mods[i]))
 				list.add(mods[i]);
 		}
-
+		
 		Iterator iterator = list.iterator();
 		while (iterator.hasNext()) {
 			IModule module = (IModule) iterator.next();
 			if (add2) {
 				modules.remove(module);
 				deployed.add(module);
-			} else if (!module.equals(newModule)) {
+			} else {
 				modules.add(module);
 				deployed.remove(module);
 			}
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 fa4d7fb..234084f 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
@@ -324,9 +324,11 @@
 						wizard.setMessage(NLS.bind(Messages.errorVersionLevel, new Object[] { type, mt.getVersion() }), IMessageProvider.ERROR);
 						server = null;
 					}
+					
 					if (wizard.getMessage() == null) {
+						IModule[] rootModules = null;
 						try {
-							server.getRootModules(module, null);
+							rootModules = server.getRootModules(module, null);
 						} catch (CoreException ce) {
 							IStatus status = ce.getStatus();
 							if (status != null) {
@@ -335,11 +337,42 @@
 								else if (status.getSeverity() == IStatus.WARNING)
 									wizard.setMessage(status.getMessage(), IMessageProvider.WARNING);
 								else if (status.getSeverity() == IStatus.INFO)
-											wizard.setMessage(status.getMessage(), IMessageProvider.INFORMATION);
+									wizard.setMessage(status.getMessage(), IMessageProvider.INFORMATION);
+								server = null;
 							}
 						} catch (Exception e) {
 							Trace.trace(Trace.WARNING, "Could not find root module", e);
 						}
+						if (rootModules != null) {
+							if (rootModules.length == 0) {
+								wizard.setMessage("", IMessageProvider.ERROR);
+								server = null;
+							} else {
+								int size = rootModules.length;
+								IStatus status = null;
+								boolean found = false;
+								for (int i = 0; i < size; i++) {
+									try {
+										status = server.canModifyModules(new IModule[] {rootModules[i]}, null, null);
+										if (status != null && status.isOK())
+											found = true;
+									} catch (Exception e) {
+										Trace.trace(Trace.WARNING, "Could not find root module", e);
+									}
+								}
+								if (!found && status != null) {
+									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);
+										server = null;
+									}
+								}
+							}
+						}
 					}
 				}
 				
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 ea74164..db7f981 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
@@ -97,7 +97,6 @@
 				checkbox.setText(label);
 			else
 				checkbox.setText(Messages.elementUnknownName);
-			checkbox.setFocus();
 		
 			checkbox.addSelectionListener(new SelectionListener() {
 				public void widgetSelected(SelectionEvent event) {
@@ -118,8 +117,9 @@
 			if (sti.kind == PublishOperation.REQUIRED) {
 				checkbox.setSelection(true);
 				checkbox.setEnabled(false);
+				description.setEnabled(false);
 			} else
-				checkbox.setSelection(sti.getDefaultSelected());
+				checkbox.setSelection(sti.isSelected());
 		}
 		
 		if (size == 0) {