This commit was manufactured by cvs2svn to create tag 'R1_5_5'.
diff --git a/features/org.eclipse.jst.server_adapters.feature/feature.xml b/features/org.eclipse.jst.server_adapters.feature/feature.xml
index 4481cf0..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.6.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
@@ -21,6 +21,11 @@
       <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
    </url>
 
+   <requires>
+      <import feature="org.eclipse.jst.server_core.feature" version="1.0.0" match="greaterOrEqual"/>
+      <import feature="org.eclipse.jst.server_ui.feature" version="1.0.0" match="greaterOrEqual"/>
+   </requires>
+
    <plugin
          id="org.eclipse.jst.server.tomcat.core"
          download-size="0"
diff --git a/features/org.eclipse.jst.server_adapters.feature/sourceTemplateFeature/build.properties b/features/org.eclipse.jst.server_adapters.feature/sourceTemplateFeature/build.properties
index ec8ba07..62b51ef 100644
--- a/features/org.eclipse.jst.server_adapters.feature/sourceTemplateFeature/build.properties
+++ b/features/org.eclipse.jst.server_adapters.feature/sourceTemplateFeature/build.properties
@@ -15,3 +15,5 @@
 feature.properties,\
 license.html
 
+generate.feature@org.eclipse.jst.server_ui.feature.source = org.eclipse.jst.server_ui.feature
+
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 24974c1..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.6.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
@@ -22,7 +22,7 @@
    </url>
 
    <includes
-         id="org.eclipse.jst.server_adapters.feature"
+         id="org.eclipse.jst.server_ui.feature.source"
          version="0.0.0"/>
 
    <plugin
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/.cvsignore b/features/org.eclipse.jst.server_adapters.sdk.feature/.cvsignore
deleted file mode 100644
index 6eb0971..0000000
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/.cvsignore
+++ /dev/null
@@ -1,4 +0,0 @@
-features
-plugins
-build.xml
-org.eclipse.jst.server_sdk.feature_1.0.0.bin.dist.zip
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/.project b/features/org.eclipse.jst.server_adapters.sdk.feature/.project
deleted file mode 100644
index 51e683a..0000000
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.server_adapters.sdk.feature</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/build.properties b/features/org.eclipse.jst.server_adapters.sdk.feature/build.properties
deleted file mode 100644
index 63a2414..0000000
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/build.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-bin.includes = feature.xml,\
-               eclipse_update_120.jpg,\
-               epl-v10.html,\
-               license.html,\
-               feature.properties
-
-generate.feature@org.eclipse.jst.server_adapters.feature.source=org.eclipse.jst.server_adapters.feature
-
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/eclipse_update_120.jpg b/features/org.eclipse.jst.server_adapters.sdk.feature/eclipse_update_120.jpg
deleted file mode 100644
index bfdf708..0000000
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/eclipse_update_120.jpg
+++ /dev/null
Binary files differ
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/epl-v10.html b/features/org.eclipse.jst.server_adapters.sdk.feature/epl-v10.html
deleted file mode 100644
index ed4b196..0000000
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/epl-v10.html
+++ /dev/null
@@ -1,328 +0,0 @@
-<html xmlns:o="urn:schemas-microsoft-com:office:office"
-xmlns:w="urn:schemas-microsoft-com:office:word"
-xmlns="http://www.w3.org/TR/REC-html40">
-
-<head>
-<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
-<meta name=ProgId content=Word.Document>
-<meta name=Generator content="Microsoft Word 9">
-<meta name=Originator content="Microsoft Word 9">
-<link rel=File-List
-href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
-<title>Eclipse Public License - Version 1.0</title>
-<!--[if gte mso 9]><xml>
- <o:DocumentProperties>
-  <o:Revision>2</o:Revision>
-  <o:TotalTime>3</o:TotalTime>
-  <o:Created>2004-03-05T23:03:00Z</o:Created>
-  <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
-  <o:Pages>4</o:Pages>
-  <o:Words>1626</o:Words>
-  <o:Characters>9270</o:Characters>
-   <o:Lines>77</o:Lines>
-  <o:Paragraphs>18</o:Paragraphs>
-  <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
-  <o:Version>9.4402</o:Version>
- </o:DocumentProperties>
-</xml><![endif]--><!--[if gte mso 9]><xml>
- <w:WordDocument>
-  <w:TrackRevisions/>
- </w:WordDocument>
-</xml><![endif]-->
-<style>
-<!--
- /* Font Definitions */
-@font-face
-	{font-family:Tahoma;
-	panose-1:2 11 6 4 3 5 4 4 2 4;
-	mso-font-charset:0;
-	mso-generic-font-family:swiss;
-	mso-font-pitch:variable;
-	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
- /* Style Definitions */
-p.MsoNormal, li.MsoNormal, div.MsoNormal
-	{mso-style-parent:"";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p
-	{margin-right:0in;
-	mso-margin-top-alt:auto;
-	mso-margin-bottom-alt:auto;
-	margin-left:0in;
-	mso-pagination:widow-orphan;
-	font-size:12.0pt;
-	font-family:"Times New Roman";
-	mso-fareast-font-family:"Times New Roman";}
-p.BalloonText, li.BalloonText, div.BalloonText
-	{mso-style-name:"Balloon Text";
-	margin:0in;
-	margin-bottom:.0001pt;
-	mso-pagination:widow-orphan;
-	font-size:8.0pt;
-	font-family:Tahoma;
-	mso-fareast-font-family:"Times New Roman";}
-@page Section1
-	{size:8.5in 11.0in;
-	margin:1.0in 1.25in 1.0in 1.25in;
-	mso-header-margin:.5in;
-	mso-footer-margin:.5in;
-	mso-paper-source:0;}
-div.Section1
-	{page:Section1;}
--->
-</style>
-</head>
-
-<body lang=EN-US style='tab-interval:.5in'>
-
-<div class=Section1>
-
-<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
-</p>
-
-<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
-THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE,
-REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
-OF THIS AGREEMENT.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Contribution&quot; means:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-in the case of the initial Contributor, the initial code and documentation
-distributed under this Agreement, and<br clear=left>
-b) in the case of each subsequent Contributor:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-changes to the Program, and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-additions to the Program;</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
-such changes and/or additions to the Program originate from and are distributed
-by that particular Contributor. A Contribution 'originates' from a Contributor
-if it was added to the Program by such Contributor itself or anyone acting on
-such Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in conjunction
-with the Program under their own license agreement, and (ii) are not derivative
-works of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Contributor&quot; means any person or
-entity that distributes the Program.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Licensed Patents &quot; mean patent
-claims licensable by a Contributor which are necessarily infringed by the use
-or sale of its Contribution alone or when combined with the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>&quot;Program&quot; means the Contributions
-distributed in accordance with this Agreement.</span> </p>
-
-<p><span style='font-size:10.0pt'>&quot;Recipient&quot; means anyone who
-receives the Program under this Agreement, including all Contributors.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-Subject to the terms of this Agreement, each Contributor hereby grants Recipient
-a non-exclusive, worldwide, royalty-free copyright license to<span
-style='color:red'> </span>reproduce, prepare derivative works of, publicly
-display, publicly perform, distribute and sublicense the Contribution of such
-Contributor, if any, and such derivative works, in source code and object code
-form.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-Subject to the terms of this Agreement, each Contributor hereby grants
-Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
-patent license under Licensed Patents to make, use, sell, offer to sell, import
-and otherwise transfer the Contribution of such Contributor, if any, in source
-code and object code form. This patent license shall apply to the combination
-of the Contribution and the Program if, at the time the Contribution is added
-by the Contributor, such addition of the Contribution causes such combination
-to be covered by the Licensed Patents. The patent license shall not apply to
-any other combinations which include the Contribution. No hardware per se is
-licensed hereunder. </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
-Recipient understands that although each Contributor grants the licenses to its
-Contributions set forth herein, no assurances are provided by any Contributor
-that the Program does not infringe the patent or other intellectual property
-rights of any other entity. Each Contributor disclaims any liability to Recipient
-for claims brought by any other entity based on infringement of intellectual
-property rights or otherwise. As a condition to exercising the rights and
-licenses granted hereunder, each Recipient hereby assumes sole responsibility
-to secure any other intellectual property rights needed, if any. For example,
-if a third party patent license is required to allow Recipient to distribute
-the Program, it is Recipient's responsibility to acquire that license before
-distributing the Program.</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
-Each Contributor represents that to its knowledge it has sufficient copyright
-rights in its Contribution, if any, to grant the copyright license set forth in
-this Agreement. </span></p>
-
-<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
-
-<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
-Program in object code form under its own license agreement, provided that:</span>
-</p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it complies with the terms and conditions of this Agreement; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
-its license agreement:</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
-effectively disclaims on behalf of all Contributors all warranties and
-conditions, express and implied, including warranties or conditions of title
-and non-infringement, and implied warranties or conditions of merchantability
-and fitness for a particular purpose; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
-effectively excludes on behalf of all Contributors all liability for damages,
-including direct, indirect, special, incidental and consequential damages, such
-as lost profits; </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
-states that any provisions which differ from this Agreement are offered by that
-Contributor alone and not by any other party; and</span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
-states that source code for the Program is available from such Contributor, and
-informs licensees how to obtain it in a reasonable manner on or through a
-medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
-
-<p><span style='font-size:10.0pt'>When the Program is made available in source
-code form:</span> </p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
-it must be made available under this Agreement; and </span></p>
-
-<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
-copy of this Agreement must be included with each copy of the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
-copyright notices contained within the Program. </span></p>
-
-<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
-originator of its Contribution, if any, in a manner that reasonably allows
-subsequent Recipients to identify the originator of the Contribution. </span></p>
-
-<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
-
-<p><span style='font-size:10.0pt'>Commercial distributors of software may
-accept certain responsibilities with respect to end users, business partners
-and the like. While this license is intended to facilitate the commercial use
-of the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create potential
-liability for other Contributors. Therefore, if a Contributor includes the
-Program in a commercial product offering, such Contributor (&quot;Commercial
-Contributor&quot;) hereby agrees to defend and indemnify every other
-Contributor (&quot;Indemnified Contributor&quot;) against any losses, damages and
-costs (collectively &quot;Losses&quot;) arising from claims, lawsuits and other
-legal actions brought by a third party against the Indemnified Contributor to
-the extent caused by the acts or omissions of such Commercial Contributor in
-connection with its distribution of the Program in a commercial product
-offering. The obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In order
-to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
-Contributor in writing of such claim, and b) allow the Commercial Contributor
-to control, and cooperate with the Commercial Contributor in, the defense and
-any related settlement negotiations. The Indemnified Contributor may participate
-in any such claim at its own expense.</span> </p>
-
-<p><span style='font-size:10.0pt'>For example, a Contributor might include the
-Program in a commercial product offering, Product X. That Contributor is then a
-Commercial Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance claims and
-warranties are such Commercial Contributor's responsibility alone. Under this
-section, the Commercial Contributor would have to defend claims against the
-other Contributors related to those performance claims and warranties, and if a
-court requires any other Contributor to pay any damages as a result, the
-Commercial Contributor must pay those damages.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, THE PROGRAM IS PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT
-WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
-WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and distributing the
-Program and assumes all risks associated with its exercise of rights under this
-Agreement , including but not limited to the risks and costs of program errors,
-compliance with applicable laws, damage to or loss of data, programs or
-equipment, and unavailability or interruption of operations. </span></p>
-
-<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
-
-<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
-AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
-OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
-THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
-
-<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
-
-<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
-or unenforceable under applicable law, it shall not affect the validity or
-enforceability of the remainder of the terms of this Agreement, and without
-further action by the parties hereto, such provision shall be reformed to the
-minimum extent necessary to make such provision valid and enforceable.</span> </p>
-
-<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
-against any entity (including a cross-claim or counterclaim in a lawsuit)
-alleging that the Program itself (excluding combinations of the Program with
-other software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the date
-such litigation is filed. </span></p>
-
-<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
-shall terminate if it fails to comply with any of the material terms or
-conditions of this Agreement and does not cure such failure in a reasonable
-period of time after becoming aware of such noncompliance. If all Recipient's
-rights under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive. </span></p>
-
-<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
-copies of this Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The Agreement
-Steward reserves the right to publish new versions (including revisions) of
-this Agreement from time to time. No one other than the Agreement Steward has
-the right to modify this Agreement. The Eclipse Foundation is the initial
-Agreement Steward. The Eclipse Foundation may assign the responsibility to
-serve as the Agreement Steward to a suitable separate entity. Each new version
-of the Agreement will be given a distinguishing version number. The Program
-(including Contributions) may always be distributed subject to the version of
-the Agreement under which it was received. In addition, after a new version of
-the Agreement is published, Contributor may elect to distribute the Program
-(including its Contributions) under the new version. Except as expressly stated
-in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
-the intellectual property of any Contributor under this Agreement, whether
-expressly, by implication, estoppel or otherwise. All rights in the Program not
-expressly granted under this Agreement are reserved.</span> </p>
-
-<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
-State of New York and the intellectual property laws of the United States of
-America. No party to this Agreement will bring a legal action under this
-Agreement more than one year after the cause of action arose. Each party waives
-its rights to a jury trial in any resulting litigation.</span> </p>
-
-<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
-
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/feature.properties b/features/org.eclipse.jst.server_adapters.sdk.feature/feature.properties
deleted file mode 100644
index f71a3cb..0000000
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/feature.properties
+++ /dev/null
@@ -1,144 +0,0 @@
-###############################################################################
-# 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
-###############################################################################
-# feature.properties
-# contains externalized strings for feature.xml
-# "%foo" in feature.xml corresponds to the key "foo" in this file
-# java.io.Properties file (ISO 8859-1 with "\" escapes)
-# This file should be translated.
-
-# "featureName" property - name of the feature
-featureName=JST Server Adapter Plug-in Developer Resources
-
-# "providerName" property - name of the company that provides the feature
-providerName=Eclipse.org
-
-# "updateSiteName" property - label for the update site
-updateSiteName=The Eclipse Web Tools Platform (WTP) Project update site
-
-# "description" property - description of the feature
-description=Source code zips for JST server tools
-
-# "copyright" property - text of the "Feature Update Copyright"
-copyright=\
-Copyright (c) 2006 IBM Corporation and others.\n\
-All rights reserved. This program and the accompanying materials\n\
-are made available under the terms of the Eclipse Public License v1.0\n\
-which accompanies this distribution, and is available at\n\
-http://www.eclipse.org/legal/epl-v10.html\n\
-\n\
-Contributors:\n\
-    IBM Corporation - initial API and implementation\n
-################ end of copyright property ####################################
-
-# "licenseURL" property - URL of the "Feature License"
-# do not translate value - just change to point to a locale-specific HTML page
-licenseURL=license.html
-
-# "license" property - text of the "Feature Update License"
-# should be plain text version of license agreement pointed to be "licenseURL"
-license=\
-ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
-March 17, 2005\n\
-\n\
-Usage Of Content\n\
-\n\
-THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
-OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
-USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
-AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
-NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
-AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
-AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
-OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
-OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
-BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
-\n\
-Applicable Licenses\n\
-\n\
-Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
-is provided to you under the terms and conditions of the Eclipse Public\n\
-License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
-Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
-For purposes of the EPL, "Program" will mean the Content.\n\
-\n\
-Content includes, but is not limited to, source code, object code,\n\
-documentation and other files maintained in the Eclipse.org CVS\n\
-repository ("Repository") in CVS modules ("Modules") and made available\n\
-as downloadable archives ("Downloads").\n\
-\n\
-   - Content may be structured and packaged into modules to facilitate delivering,\n\
-     extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
-     plug-in fragments ("Fragments"), and features ("Features").\n\
-   - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java? ARchive)\n\
-     in a directory named "plugins".\n\
-   - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
-     Each Feature may be packaged as a sub-directory in a directory named "features".\n\
-     Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
-     numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
-   - Features may also include other Features ("Included Features"). Within a Feature, files\n\
-     named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
-\n\
-Features may also include other Features ("Included Features"). Files named\n\
-"feature.xml" may contain a list of the names and version numbers of\n\
-Included Features.\n\
-\n\
-The terms and conditions governing Plug-ins and Fragments should be\n\
-contained in files named "about.html" ("Abouts"). The terms and\n\
-conditions governing Features and Included Features should be contained\n\
-in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
-Licenses may be located in any directory of a Download or Module\n\
-including, but not limited to the following locations:\n\
-\n\
-   - The top-level (root) directory\n\
-   - Plug-in and Fragment directories\n\
-   - Inside Plug-ins and Fragments packaged as JARs\n\
-   - Sub-directories of the directory named "src" of certain Plug-ins\n\
-   - Feature directories\n\
-\n\
-Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
-Eclipse Update Manager, you must agree to a license ("Feature Update\n\
-License") during the installation process. If the Feature contains\n\
-Included Features, the Feature Update License should either provide you\n\
-with the terms and conditions governing the Included Features or inform\n\
-you where you can locate them. Feature Update Licenses may be found in\n\
-the "license" property of files named "feature.properties". Such Abouts,\n\
-Feature Licenses and Feature Update Licenses contain the terms and\n\
-conditions (or references to such terms and conditions) that govern your\n\
-use of the associated Content in that directory.\n\
-\n\
-THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
-TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
-SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
-\n\
-    - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
-    - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
-    - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
-    - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
-    - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
-    - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
-\n\
-IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
-is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
-govern that particular Content.\n\
-\n\
-Cryptography\n\
-\n\
-Content may contain encryption software. The country in which you are\n\
-currently may have restrictions on the import, possession, and use,\n\
-and/or re-export to another country, of encryption software. BEFORE\n\
-using any encryption software, please check the country's laws,\n\
-regulations and policies concerning the import, possession, or use,\n\
-and re-export of encryption software, to see if this is permitted.\n\
-\n\
-Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.\n
-########### end of license property ##########################################
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml b/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml
deleted file mode 100644
index f600e2d..0000000
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<feature
-      id="org.eclipse.jst.server_adapters.sdk.feature"
-      label="%featureName"
-      version="1.6.0.qualifier"
-      provider-name="%providerName">
-
-   <description>
-      %description
-   </description>
-
-   <copyright>
-      %copyright
-   </copyright>
-
-   <license url="%licenseURL">
-      %license
-   </license>
-
-   <url>
-      <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
-   </url>
-
-   <includes
-         id="org.eclipse.jst.server_adapters.feature"
-         version="0.0.0"/>
-
-   <includes
-         id="org.eclipse.jst.server_adapters.feature.source"
-         version="0.0.0"/>
- 
-</feature>
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/license.html b/features/org.eclipse.jst.server_adapters.sdk.feature/license.html
deleted file mode 100644
index 2347060..0000000
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/license.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
-<!-- saved from url=(0044)http://www.eclipse.org/legal/epl/notice.html -->
-<HTML><HEAD><TITLE>Eclipse.org Software User Agreement</TITLE>
-<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<META content="MSHTML 6.00.2800.1479" name=GENERATOR></HEAD>
-<BODY lang=EN-US vLink=purple link=blue>
-<H2>Eclipse Foundation Software User Agreement</H2>
-<P>January 28, 2005</P>
-<H3>Usage Of Content</H3>
-<P>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION 
-AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT"). USE OF 
-THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE 
-TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED 
-BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED 
-BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE 
-AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE 
-TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS OF ANY 
-APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU 
-MAY NOT USE THE CONTENT.</P>
-<H3>Applicable Licenses</H3>
-<P>Unless otherwise indicated, all Content made available by the Eclipse 
-Foundation is provided to you under the terms and conditions of the Eclipse 
-Public License Version 1.0 ("EPL"). A copy of the EPL is provided with this 
-Content and is also available at <A 
-href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</A>. 
-For purposes of the EPL, "Program" will mean the Content.</P>
-<P>Content includes, but is not limited to, source code, object code, 
-documentation and other files maintained in the Eclipse.org CVS repository 
-("Repository") in CVS modules ("Modules") and made available as downloadable 
-archives ("Downloads").</P>
-<P>Content may be apportioned into plug-ins ("Plug-ins"), plug-in fragments 
-("Fragments"), and features ("Features"). A Feature is a bundle of one or more 
-Plug-ins and/or Fragments and associated material. Files named "feature.xml" may 
-contain a list of the names and version numbers of the Plug-ins and/or Fragments 
-associated with a Feature. Plug-ins and Fragments are located in directories 
-named "plugins" and Features are located in directories named "features".</P>
-<P>Features may also include other Features ("Included Features"). Files named 
-"feature.xml" may contain a list of the names and version numbers of Included 
-Features.</P>
-<P>The terms and conditions governing Plug-ins and Fragments should be contained 
-in files named "about.html" ("Abouts"). The terms and conditions governing 
-Features and Included Features should be contained in files named "license.html" 
-("Feature Licenses"). Abouts and Feature Licenses may be located in any 
-directory of a Download or Module including, but not limited to the following 
-locations:</P>
-<UL>
-  <LI>The top-level (root) directory 
-  <LI>Plug-in and Fragment directories 
-  <LI>Subdirectories of the directory named "src" of certain Plug-ins 
-  <LI>Feature directories </LI></UL>
-<P>Note: if a Feature made available by the Eclipse Foundation is installed 
-using the Eclipse Update Manager, you must agree to a license ("Feature Update 
-License") during the installation process. If the Feature contains Included 
-Features, the Feature Update License should either provide you with the terms 
-and conditions governing the Included Features or inform you where you can 
-locate them. Feature Update Licenses may be found in the "license" property of 
-files named "feature.properties". Such Abouts, Feature Licenses and Feature 
-Update Licenses contain the terms and conditions (or references to such terms 
-and conditions) that govern your use of the associated Content in that 
-directory.</P>
-<P>THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL 
-OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE 
-OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</P>
-<UL>
-  <LI>Common Public License Version 1.0 (available at <A 
-  href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</A>) 
-
-  <LI>Apache Software License 1.1 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</A>) 
-
-  <LI>Apache Software License 2.0 (available at <A 
-  href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</A>) 
-
-  <LI>IBM Public License 1.0 (available at <A 
-  href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</A>) 
-
-  <LI>Metro Link Public License 1.00 (available at <A 
-  href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</A>) 
-
-  <LI>Mozilla Public License Version 1.1 (available at <A 
-  href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</A>) 
-  </LI></UL>
-<P>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR 
-TO USE OF THE CONTENT. If no About, Feature License or Feature Update License is 
-provided, please contact the Eclipse Foundation to determine what terms and 
-conditions govern that particular Content.</P>
-<H3>Cryptography</H3>
-<P>Content may contain encryption software. The country in which you are 
-currently may have restrictions on the import, possession, and use, and/or 
-re-export to another country, of encryption software. BEFORE using any 
-encryption software, please check the country's laws, regulations and policies 
-concerning the import, possession, or use, and re-export of encryption software, 
-to see if this is permitted.</P></BODY></HTML>
diff --git a/features/org.eclipse.jst.server_core.feature/feature.xml b/features/org.eclipse.jst.server_core.feature/feature.xml
index 05c2905..be2271d 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.6.0.qualifier"
+      version="1.5.4.qualifier"
       provider-name="%providerName">
 
    <description>
@@ -21,9 +21,13 @@
       <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
    </url>
 
-   <includes
-         id="org.eclipse.jst.common_core.feature"
-         version="0.0.0"/>
+   <requires>
+      <import feature="org.eclipse.platform" version="3.2" match="equivalent"/>
+      <import feature="org.eclipse.emf" version="2.2" match="equivalent"/>
+      <import feature="org.eclipse.rcp" version="3.2" match="equivalent"/>
+      <import feature="org.eclipse.jdt" version="3.2" match="equivalent"/>
+      <import feature="org.eclipse.wst.server_core.feature" version="1.0.0" match="greaterOrEqual"/>
+   </requires>
 
    <plugin
          id="org.eclipse.jst.server.core"
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 c9e4a32..bae2b4f 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.6.0.qualifier"
+      version="1.5.4.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.jst.server_sdk.feature/build.properties b/features/org.eclipse.jst.server_sdk.feature/build.properties
index e29acd8..63a2414 100644
--- a/features/org.eclipse.jst.server_sdk.feature/build.properties
+++ b/features/org.eclipse.jst.server_sdk.feature/build.properties
@@ -4,5 +4,5 @@
                license.html,\
                feature.properties
 
-generate.feature@org.eclipse.jst.server_ui.feature.source=org.eclipse.jst.server_ui.feature
+generate.feature@org.eclipse.jst.server_adapters.feature.source=org.eclipse.jst.server_adapters.feature
 
diff --git a/features/org.eclipse.jst.server_sdk.feature/feature.xml b/features/org.eclipse.jst.server_sdk.feature/feature.xml
index e85271a..7dd5d67 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.6.0.qualifier"
+      version="1.5.4.qualifier"
       provider-name="%providerName">
 
    <description>
@@ -22,11 +22,7 @@
    </url>
 
    <includes
-         id="org.eclipse.jst.server_ui.feature"
+         id="org.eclipse.jst.server_adapters.feature.source"
          version="0.0.0"/>
 
-   <includes
-         id="org.eclipse.jst.server_ui.feature.source"
-         version="0.0.0"/>
- 
 </feature>
diff --git a/features/org.eclipse.jst.server_tests.feature/feature.xml b/features/org.eclipse.jst.server_tests.feature/feature.xml
index c2db81b..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.6.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 c9be30a..29bfded 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.6.0.qualifier"
+      version="1.5.4.qualifier"
       provider-name="%providerName">
 
    <description>
@@ -25,9 +25,9 @@
          id="org.eclipse.jst.server_userdoc.feature"
          version="0.0.0"/>
 
-   <includes
-         id="org.eclipse.jst.server_core.feature"
-         version="0.0.0"/>
+   <requires>
+      <import feature="org.eclipse.jst.server_core.feature" version="1.0.0" match="greaterOrEqual"/>
+   </requires>
 
    <plugin
          id="org.eclipse.jst.server.ui"
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 6234abd..078d263 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.6.0.qualifier"
+      version="1.5.4.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 1b52d4e..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.6.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 aae2afb..3d0798a 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.6.0.qualifier"
+      version="1.5.5.qualifier"
       provider-name="%providerName">
 
    <description>
@@ -21,7 +21,12 @@
       <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
    </url>
 
-  <plugin
+   <requires>
+      <import feature="org.eclipse.rcp" version="3.2" match="equivalent"/>
+      <import feature="org.eclipse.platform" version="3.2" match="equivalent"/>
+   </requires>
+
+   <plugin
          id="org.eclipse.wst.server.core"
          download-size="0"
          install-size="0"
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 cd2ab76..13b160e 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.6.0.qualifier"
+      version="1.5.5.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 2c65af2..e8709ef 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.6.0.qualifier"
+      version="1.5.5.qualifier"
       provider-name="%providerName">
 
    <description>
@@ -22,10 +22,6 @@
    </url>
 
    <includes
-         id="org.eclipse.wst.server_ui.feature"
-         version="0.0.0"/>
-
-   <includes
          id="org.eclipse.wst.server_ui.feature.source"
          version="0.0.0"/>
 
diff --git a/features/org.eclipse.wst.server_tests.feature/feature.xml b/features/org.eclipse.wst.server_tests.feature/feature.xml
index da7c51a..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.6.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
@@ -21,6 +21,11 @@
       <update label="%updateSiteName" url="http://download.eclipse.org/webtools/updates/"/>
    </url>
 
+   <requires>
+      <import feature="org.eclipse.wst.server_core.feature"/>
+      <import feature="org.eclipse.wst.server_ui.feature"/>
+   </requires>
+
    <plugin
          id="org.eclipse.wst.internet.monitor.ui.tests"
          download-size="0"
diff --git a/features/org.eclipse.wst.server_ui.feature/feature.xml b/features/org.eclipse.wst.server_ui.feature/feature.xml
index ac4828b..29ce7ce 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.6.0.qualifier"
+      version="1.5.5.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 08b0a89..291a5d9 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.6.0.qualifier"
+      version="1.5.5.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 62b47c9..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.6.0.qualifier"
+      version="1.5.3.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/plugins/org.eclipse.jst.server.core/.classpath b/plugins/org.eclipse.jst.server.core/.classpath
index 3d1822d..8eae546 100644
--- a/plugins/org.eclipse.jst.server.core/.classpath
+++ b/plugins/org.eclipse.jst.server.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="sjavacore/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index c8be432..0000000
--- a/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Fri Nov 10 17:11:35 HST 2006
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index c6a69e9..0000000
--- a/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,74 +0,0 @@
-#Tue Jan 16 16:59:15 EST 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=error
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=error
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.incompatibleJDKLevel=warning
-org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 584bdff..0000000
--- a/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Nov 10 18:06:11 HST 2006
-eclipse.preferences.version=1
-internal.default.compliance=user
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.pde.prefs
deleted file mode 100644
index 08a60e5..0000000
--- a/plugins/org.eclipse.jst.server.core/.settings/org.eclipse.pde.prefs
+++ /dev/null
@@ -1,14 +0,0 @@
-#Sat Apr 22 18:36:14 EDT 2006
-compilers.incompatible-environment=0
-compilers.p.build=0
-compilers.p.deprecated=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=0
-compilers.p.unknown-class=0
-compilers.p.unknown-element=0
-compilers.p.unknown-resource=0
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.use-project=true
-eclipse.preferences.version=1
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 4f784ec..1d173ca 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.204.qualifier
+Bundle-Version: 1.0.106.qualifier
 Bundle-Activator: org.eclipse.jst.server.core.internal.JavaServerPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -19,4 +19,3 @@
  org.eclipse.wst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.jst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)"
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.jst.server.core/plugin.properties b/plugins/org.eclipse.jst.server.core/plugin.properties
index 3b5c2cd..3ac857b 100644
--- a/plugins/org.eclipse.jst.server.core/plugin.properties
+++ b/plugins/org.eclipse.jst.server.core/plugin.properties
@@ -23,7 +23,7 @@
 moduleTypeJ2EERARName=J2EE Connector module
 moduleTypeJ2EEClientName=J2EE Application Client module
 moduleTypeJ2EEEARName=J2EE Enterprise application
-moduleTypeJ2EEUtilityName=J2EE Utility jar
+moduleTypeJ2EEUtilityName=J2EE utility jar
 
 launchableJndi=JNDI Object
 launchableJndiDescription=Silently start an object locatable by JNDI.
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/plugin.xml b/plugins/org.eclipse.jst.server.core/plugin.xml
index 2485abf..cf23753 100644
--- a/plugins/org.eclipse.jst.server.core/plugin.xml
+++ b/plugins/org.eclipse.jst.server.core/plugin.xml
@@ -166,19 +166,19 @@
          version="1.0"/>
       <facet
          id="jst.web"
-         version="2.2,2.3,2.4,2.5"/>
+         version="2.2,2.3,2.4"/>
       <facet
          id="jst.ejb"
-         version="1.1,2.0,2.1,3.0"/>
+         version="1.1,2.0,2.1"/>
       <facet
          id="jst.ear"
-         version="1.2,1.3,1.4,5.0"/>
+         version="1.2,1.3,1.4"/>
       <facet
          id="jst.connector"
          version="1.0,1.5"/>
       <facet
          id="jst.appclient"
-         version="1.2,1.3,1.4,5.0"/>
+         version="1.2,1.3,1.4"/>
       <facet
          id="jst.utility"
          version="1.0"/>
diff --git a/plugins/org.eclipse.jst.server.core/schema/internalRuntimeComponentProviders.exsd b/plugins/org.eclipse.jst.server.core/schema/internalRuntimeComponentProviders.exsd
index cf481bd..bacc5c9 100644
--- a/plugins/org.eclipse.jst.server.core/schema/internalRuntimeComponentProviders.exsd
+++ b/plugins/org.eclipse.jst.server.core/schema/internalRuntimeComponentProviders.exsd
@@ -47,6 +47,8 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
diff --git a/plugins/org.eclipse.jst.server.core/schema/runtimeClasspathProviders.exsd b/plugins/org.eclipse.jst.server.core/schema/runtimeClasspathProviders.exsd
index 90de0c1..33ae4d4 100644
--- a/plugins/org.eclipse.jst.server.core/schema/runtimeClasspathProviders.exsd
+++ b/plugins/org.eclipse.jst.server.core/schema/runtimeClasspathProviders.exsd
@@ -13,7 +13,7 @@
    <element name="extension">
       <complexType>
          <sequence>
-            <element ref="runtimeClasspathProvider" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="runtimeClasspathProvider" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -46,6 +46,8 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
@@ -109,7 +111,7 @@
          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"/>
diff --git a/plugins/org.eclipse.jst.server.core/schema/runtimeFacetMappings.exsd b/plugins/org.eclipse.jst.server.core/schema/runtimeFacetMappings.exsd
index 94d332e..0367663 100644
--- a/plugins/org.eclipse.jst.server.core/schema/runtimeFacetMappings.exsd
+++ b/plugins/org.eclipse.jst.server.core/schema/runtimeFacetMappings.exsd
@@ -13,7 +13,7 @@
    <element name="extension">
       <complexType>
          <sequence>
-            <element ref="runtimeFacetMapping" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="runtimeFacetMapping" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -46,6 +46,8 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+         </sequence>
          <attribute name="id" type="string">
             <annotation>
                <documentation>
@@ -63,14 +65,14 @@
          <attribute name="runtime-component" type="string" use="required">
             <annotation>
                <documentation>
-                  a facet runtime component id
+                  
                </documentation>
             </annotation>
          </attribute>
          <attribute name="version" type="string" use="required">
             <annotation>
                <documentation>
-                  a facet runtime component version
+                  
                </documentation>
             </annotation>
          </attribute>
@@ -113,7 +115,7 @@
          
       </documentation>
    </annotation>
-
+   
    <annotation>
       <appInfo>
          <meta.section type="implementation"/>
diff --git a/plugins/org.eclipse.jst.server.core/schema/serverProfilers.exsd b/plugins/org.eclipse.jst.server.core/schema/serverProfilers.exsd
index b9cc401..3189d7b 100644
--- a/plugins/org.eclipse.jst.server.core/schema/serverProfilers.exsd
+++ b/plugins/org.eclipse.jst.server.core/schema/serverProfilers.exsd
@@ -13,7 +13,7 @@
    <element name="extension">
       <complexType>
          <sequence>
-            <element ref="serverProfiler" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="serverProfiler" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -46,6 +46,8 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+         </sequence>
          <attribute name="id" type="string">
             <annotation>
                <documentation>
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/FacetUtil.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/FacetUtil.java
index 7867aaf..5e21fe8 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/FacetUtil.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/FacetUtil.java
@@ -30,24 +30,13 @@
 /**
  * Utility class for converting between facet runtimes and server runtimes.
  * <p>
- * This class provides all its functionality through static members.
- * It is not intended to be subclassed or instantiated.
- * </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>
  */
-public final class FacetUtil {
-	/**
-	 * Static utility class - cannot create an instance.
-	 */
-	private FacetUtil() {
-		// can't create
-	}
-
+public class FacetUtil {
 	/**
 	 * Returns the server runtime that corresponds to a facet runtime, or null
 	 * if none could be found.
@@ -61,8 +50,6 @@
 			throw new IllegalArgumentException();
 		
 		String id = runtime.getProperty("id");
-		if (id == null)
-			return null;
 		
 		IRuntime[] runtimes = ServerCore.getRuntimes();
 		int size = runtimes.length;
@@ -87,8 +74,6 @@
 			throw new IllegalArgumentException();
 		
 		String id = runtime.getId();
-		if (id == null)
-			return null;
 		
 		Set runtimes = RuntimeManager.getRuntimes();
 		Iterator iterator = runtimes.iterator();
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java
index c39b43d..dd7067f 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/IJavaRuntime.java
@@ -28,13 +28,4 @@
 	 * @return the current VM install
 	 */
 	public IVMInstall getVMInstall();
-
-	/**
-	 * Returns <code>true</code> if the runtime is using the default JRE.
-	 * 
-	 * @return <code>true</code> if the runtime is using the default JRE,
-	 *    and <code>false</code> otherwise
-	 * @since 2.0
-	 */
-	public boolean isUsingDefaultJRE();
 }
\ No newline at end of file
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 c26d722..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
@@ -31,10 +31,7 @@
 import org.eclipse.wst.server.core.model.IModuleResourceDelta;
 /**
  * Utility class with an assortment of useful file methods.
- * <p>
- * This class provides all its functionality through static members.
- * It is not intended to be subclassed or instantiated.
- * </p>
+ * 
  * <p>
  * <b>Note:</b> This class/interface is part of an interim API that is still under development and expected to
  * change significantly before reaching stability. It is being made available at this early stage to solicit feedback
@@ -43,7 +40,7 @@
  * </p>
  * @plannedfor 2.0
  */
-public final class PublishUtil {
+public class PublishUtil {
 	// size of the buffer
 	private static final int BUFFER = 65536;
 
@@ -57,10 +54,10 @@
 	private static final String TEMPFILE_PREFIX = "tmp";
 
 	/**
-	 * PublishUtil cannot be created. Use static methods.
+	 * FileUtil cannot be created. Use static methods.
 	 */
 	private PublishUtil() {
-		// can't create
+		super();
 	}
 
 	/**
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
index c688304..eb9bfca 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
@@ -19,13 +19,18 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.jdt.core.IAccessRule;
 import org.eclipse.jdt.core.IClasspathAttribute;
+import org.eclipse.jdt.core.IClasspathContainer;
 import org.eclipse.jdt.core.IClasspathEntry;
+import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jst.server.core.internal.IMemento;
 import org.eclipse.jst.server.core.internal.JavaServerPlugin;
+import org.eclipse.jst.server.core.internal.RuntimeClasspathContainer;
 import org.eclipse.jst.server.core.internal.Trace;
 import org.eclipse.jst.server.core.internal.XMLMemento;
 import org.eclipse.wst.server.core.IRuntime;
@@ -61,6 +66,8 @@
 
 	private Map runtimePathMap = new HashMap();
 
+	private Map previousClasspath = new HashMap();
+
 	public RuntimeClasspathProviderDelegate() {
 		// default constructor
 	}
@@ -150,6 +157,30 @@
 			}
 		}
 		
+		String key = project.getName() + "/" + runtime.getId();
+		
+		if (!previousClasspath.containsKey(key))
+			previousClasspath.put(key, entries);
+		else {
+			IClasspathEntry[] previousEntries = (IClasspathEntry[]) previousClasspath.get(key);
+			
+			if ((previousEntries == null && entries != null) || (previousEntries != null && entries == null)
+					|| (previousEntries != null && entries != null && previousEntries.length != entries.length)) {
+				Trace.trace(Trace.FINEST, "Classpath update: " + key + " " + entries);
+				previousClasspath.put(key, entries);
+				
+				IPath path = new Path(RuntimeClasspathContainer.SERVER_CONTAINER);
+				path = path.append(extensionId).append(runtime.getId());
+				try {
+					IJavaProject javaProject = JavaCore.create(project);
+					JavaCore.setClasspathContainer(path, new IJavaProject[] { javaProject },
+							new IClasspathContainer[] { null }, new NullProgressMonitor());
+				} catch (JavaModelException jme) {
+					Trace.trace(Trace.WARNING, "Error updating classpath", jme);
+				}
+			}
+		}
+		
 		return entries;
 	}
 
@@ -251,8 +282,6 @@
 		
 		String id = extensionId;
 		String filename = JavaServerPlugin.getInstance().getStateLocation().append(id + ".xml").toOSString();
-		if (!(new File(filename)).exists())
-			return;
 		
 		try {
 			IMemento memento = XMLMemento.loadMemento(filename);
@@ -285,7 +314,7 @@
 					}
 					sourceAttachments.add(sau);
 				} catch (Exception e) {
-					Trace.trace(Trace.WARNING, "Could not load source attachment: " + e);
+					Trace.trace(Trace.WARNING, "Could not load monitor: " + e);
 				}
 			}
 		} catch (Exception e) {
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 b637c52..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
@@ -27,7 +27,7 @@
 import org.eclipse.wst.server.core.IRuntimeLifecycleListener;
 import org.eclipse.wst.server.core.IRuntimeType;
 import org.eclipse.wst.server.core.ServerCore;
-import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 /**
@@ -113,6 +113,16 @@
 	 * Handle a runtime change by potentially updating the classpath container.
 	 * 
 	 * @param runtime a runtime
+	 * @deprecated should not be called directly, will be removed
+	 */
+	protected void handleRuntimeChange(IRuntime runtime) {
+		handleRuntimeChange(runtime, 1);
+	}
+
+	/**
+	 * Handle a runtime change by potentially updating the classpath container.
+	 * 
+	 * @param runtime a runtime
 	 */
 	protected void handleRuntimeChange(final IRuntime runtime, final int act) {
 		if (runtime == null)
@@ -131,7 +141,7 @@
 				}
 
 				public boolean belongsTo(Object family) {
-					return ServerUtil.SERVER_JOB_FAMILY.equals(family);
+					return ServerPlugin.PLUGIN_ID.equals(family);
 				}
 
 				public IStatus run(IProgressMonitor monitor) {
@@ -144,7 +154,7 @@
 									if (!projects[i].isNatureEnabled(JavaCore.NATURE_ID))
 										continue;
 									
-									IJavaProject javaProject = JavaCore.create(projects[i]);
+									IJavaProject javaProject = JavaCore.create(projects[i]); // TODO is java project?
 									
 									boolean found = false;
 									IClasspathEntry[] ce = javaProject.getRawClasspath();
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 9c8c93c..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
@@ -12,6 +12,7 @@
  ******************************************************************************/
 package org.eclipse.jst.server.core.internal;
 
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -165,12 +166,12 @@
 				}
 				if (vmInstall == null)
 					vmInstall = javaRuntime.getVMInstall(); 
-				
 				if (jvmver == null) {
 					IVMInstall2 vmInstall2 = (IVMInstall2) vmInstall;
 					if (vmInstall2 != null)
 						jvmver = vmInstall2.getJavaVersion();
 				}
+				IRuntimeComponentVersion rcv;
 				
 				String vmInstallName;
 				if (vmInstall != null)
@@ -178,12 +179,8 @@
 				else
 					vmInstallName = "Unknown";
 				
-				IRuntimeComponentVersion rcv = null;
-				if (vmInstall == null) {
-					// JRE couldn't be found - assume 6.0 for now
-					rcv = RuntimeManager.getRuntimeComponentType("standard.jre").getVersion("6.0");
-				} else if (jvmver == null) {
-					Trace.trace(Trace.WARNING, "Could not determine VM version for: " + vmInstallName);
+				if (jvmver == null) {
+					JavaServerPlugin.logWarning("Could not determine VM version for: " + vmInstallName);
 					rcv = RuntimeManager.getRuntimeComponentType("standard.jre").getVersion("6.0");
 				} else if (jvmver.startsWith("1.3"))
 					rcv = RuntimeManager.getRuntimeComponentType("standard.jre").getVersion("1.3");
@@ -194,25 +191,21 @@
 				else if (jvmver.startsWith("1.6") || jvmver.startsWith("6.0"))
 					rcv = RuntimeManager.getRuntimeComponentType("standard.jre").getVersion("6.0");
 				else {
-					Trace.trace(Trace.WARNING, "Invalid Java version: " + vmInstallName + ", " + jvmver);
+					JavaServerPlugin.logWarning("Invalid Java version: " + vmInstallName + ", " + jvmver);
 					rcv = RuntimeManager.getRuntimeComponentType("standard.jre").getVersion("6.0");
 				}
 				
-				if (rcv != null) {
-					properties = new HashMap(3);
-					if (vmInstallName != null)
-						properties.put("name", vmInstallName);
-					else
-						properties.put("name", "-");
-					
-					if (vmInstall == null) {
-						// no classpath
-					} else if (vmInstall == null || javaRuntime.isUsingDefaultJRE())
-						properties.put(CLASSPATH, new Path(JavaRuntime.JRE_CONTAINER).toPortableString());
-					else
-						properties.put(CLASSPATH, JavaRuntime.newJREContainerPath(vmInstall).toPortableString());
-					components.add(RuntimeManager.createRuntimeComponent(rcv, properties));
-				}
+				properties = new HashMap(3);
+				if (vmInstallName != null)
+					properties.put("name", vmInstallName);
+				else
+					properties.put("name", "-");
+				
+				if (vmInstall == null || isUsingDefaultJRE(javaRuntime))
+					properties.put(CLASSPATH, new Path(JavaRuntime.JRE_CONTAINER).toPortableString());
+				else
+					properties.put(CLASSPATH, JavaRuntime.newJREContainerPath(vmInstall).toPortableString());
+				components.add(RuntimeManager.createRuntimeComponent(rcv, properties));
 			}
 			
 			RuntimeComponentProviderWrapper componentProvider = JavaServerPlugin.findRuntimeComponentProvider(runtime.getRuntimeType());
@@ -231,4 +224,16 @@
 			return Collections.singletonMap("id", runtime.getId());
 		}
 	}
+
+	protected static boolean isUsingDefaultJRE(IJavaRuntime javaRuntime) {
+		try {
+			Method m = javaRuntime.getClass().getMethod("isUsingDefaultJRE", null);
+			Object o = m.invoke(javaRuntime, null);
+			Boolean b = (Boolean) o;
+			return b.booleanValue();
+		} catch (Throwable t) {
+			// ignore - method not found
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java
index 1e409b7..d7b18f4 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java
@@ -83,9 +83,11 @@
 	 */
 	public String getDescription() {
 		if (runtime != null) {
-			IRuntimeType runtimeType = runtime.getRuntimeType();
-			if (runtimeType != null)
-				return NLS.bind(Messages.classpathContainer, runtimeType.getName(), runtime.getName());
+			if (runtime != null) {
+				IRuntimeType runtimeType = runtime.getRuntimeType();
+				if (runtimeType != null)
+					return NLS.bind(Messages.classpathContainer, runtimeType.getName(), runtime.getName());
+			}
 		}
 		return NLS.bind(Messages.classpathContainerUnbound, Messages.classpathContainerDescription, runtimeId);
 	}
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 6080a1c..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
@@ -21,7 +21,7 @@
 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.ServerUtil;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
 /**
  * 
  */
@@ -91,7 +91,7 @@
 			}
 
 			public boolean belongsTo(Object family) {
-				return ServerUtil.SERVER_JOB_FAMILY.equals(family);
+				return ServerPlugin.PLUGIN_ID.equals(family);
 			}
 
 			public IStatus run(IProgressMonitor monitor) {
@@ -105,7 +105,7 @@
 								if (!projects[i].isNatureEnabled(JavaCore.NATURE_ID))
 									continue;
 								
-								IJavaProject javaProject = JavaCore.create(projects[i]);
+								IJavaProject javaProject = JavaCore.create(projects[i]); // TODO is java project?
 								
 								boolean found = false;
 								IClasspathEntry[] ce = javaProject.getRawClasspath();
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/StandardJreClasspathProvider.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/StandardJreClasspathProvider.java
index a0eaa23..943fe1b 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/StandardJreClasspathProvider.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/StandardJreClasspathProvider.java
@@ -37,13 +37,10 @@
 
 	public List getClasspathEntries(final IProjectFacetVersion fv) {
 		if (fv.getProjectFacet() == JAVA_FACET) {
-			String path = rc.getProperty(RuntimeBridge.CLASSPATH);
-			if (path != null) {
-				IClasspathEntry cpentry = JavaCore.newContainerEntry(new Path(path));
-				return Collections.singletonList(cpentry);
-			}
+			IClasspathEntry cpentry = JavaCore.newContainerEntry(new Path(rc.getProperty(RuntimeBridge.CLASSPATH)));
+			return Collections.singletonList(cpentry);
 		}
-		
+
 		return null;
 	}
 
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Trace.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Trace.java
index 9bc8406..4454853 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Trace.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/Trace.java
@@ -16,21 +16,21 @@
 	/**
 	 * Config tracing
 	 */
-	public static final byte CONFIG = 0;
+	public static byte CONFIG = 0;
 	/**
 	 * Warning tracing
 	 */
-	public static final byte WARNING = 1;
+	public static byte WARNING = 1;
 	/**
 	 * Severe tracing
 	 */
-	public static final byte SEVERE = 2;
+	public static byte SEVERE = 2;
 	/**
 	 * Finest tracing
 	 */
-	public static final byte FINEST = 3;
+	public static byte FINEST = 3;
 
-	public static final byte PUBLISHING = 4;
+	public static byte PUBLISHING = 4;
 
 	/**
 	 * Trace constructor comment.
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/XMLMemento.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/XMLMemento.java
index 8cc47a3..01b81c9 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/XMLMemento.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/XMLMemento.java
@@ -12,7 +12,6 @@
 
 import java.io.*;
 import java.util.*;
-
 import org.w3c.dom.*;
 import org.xml.sax.*;
 
@@ -260,22 +259,11 @@
 	 * Loads a memento from the given filename.
 	 *
 	 * @param filename java.lang.String
+	 * @return org.eclipse.ui.IMemento
 	 * @exception java.io.IOException
-	 * @return a memento
 	 */
 	public static IMemento loadMemento(String filename) throws IOException {
-		InputStream in = null;
-		try {
-			in = new BufferedInputStream(new FileInputStream(filename));
-			return XMLMemento.createReadRoot(in);
-		} finally {
-			try {
-				if (in != null)
-					in.close();
-			} catch (Exception e) {
-				// ignore
-			}
-		}
+		return XMLMemento.createReadRoot(new FileInputStream(filename));
 	}
 
 	/*
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusModuleArtifactAdapterDelegate.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusModuleArtifactAdapterDelegate.java
index 162b341..7e8196f 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusModuleArtifactAdapterDelegate.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/CactusModuleArtifactAdapterDelegate.java
@@ -177,8 +177,8 @@
 	private static String getFullyQualifiedTypeForType(String type, IType declaringType)
 			throws JavaModelException {
 		String[][] resolvedTypes = declaringType.resolveType(type);
-		// Are there legit cases where this would not be the case? We might need to check
-		// for this and bomb out if the type cannot be unambigiously resolved
+		//TODO: Are there legit cases where this would not be the case? We might need to check
+		//for this and bomb out if the type cannot be unambigiously resolved
 		if (resolvedTypes.length != 1)
 			Trace.trace(Trace.WARNING, "The type cannot be unambigiously resolved. Need to handle this case");
 		String[] resolvedType = resolvedTypes[0];
diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/ServletTestCasePropertyTester.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/ServletTestCasePropertyTester.java
index d73704d..0d6f5c3 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/ServletTestCasePropertyTester.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/cactus/ServletTestCasePropertyTester.java
@@ -60,16 +60,19 @@
 			if (element instanceof ICompilationUnit) {
 				ICompilationUnit cu = (ICompilationUnit) element;
 				testType = cu.getType(Signature.getQualifier(cu.getElementName()));
-			} else if (element instanceof IClassFile)
+			} else if (element instanceof IClassFile) {
 				testType = ((IClassFile) element).getType();
-			else if (element instanceof IType)
+			} else if (element instanceof IType) {
 				testType = (IType) element;
-			else if (element instanceof IMember)
+			} else if (element instanceof IMember) {
 				testType = ((IMember) element).getDeclaringType();
-			
-			if (testType != null && testType.exists() && isTestOrSuite(testType))
+			}
+
+			if (testType != null && testType.exists() && isTestOrSuite(testType)) {
 				return true;
+			}
 		} catch (JavaModelException e) {
+			// TODO: what do we do here?
 			Trace.trace(Trace.SEVERE, "Error checking isServlet", e);
 		}
 		return false;
diff --git a/plugins/org.eclipse.jst.server.generic.core/.classpath b/plugins/org.eclipse.jst.server.generic.core/.classpath
index ce73933..751c8f2 100644
--- a/plugins/org.eclipse.jst.server.generic.core/.classpath
+++ b/plugins/org.eclipse.jst.server.generic.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<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.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.generic.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.generic.core/META-INF/MANIFEST.MF
index d8783be..18c18c9 100644
--- a/plugins/org.eclipse.jst.server.generic.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.generic.core/META-INF/MANIFEST.MF
@@ -8,7 +8,7 @@
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jst.server.generic.core.internal;x-internal:=true,
  org.eclipse.jst.server.generic.core.internal.publishers;x-internal:=true,
- org.eclipse.jst.server.generic.internal.core.util;x-friends:="org.eclipse.jst.server.generic.ui",
+ org.eclipse.jst.server.generic.internal.core.util;x-internal:=true,
  org.eclipse.jst.server.generic.internal.servertype.definition;x-internal:=true,
  org.eclipse.jst.server.generic.internal.servertype.definition.impl;x-internal:=true,
  org.eclipse.jst.server.generic.internal.servertype.definition.util;x-internal:=true,
@@ -18,16 +18,14 @@
  org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.debug.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)";visibility:=reexport,
+ org.eclipse.jdt.launching;visibility:="reexport";bundle-version="[3.2.0,4.0.0)",
  org.eclipse.wst.server.core;bundle-version="[1.0.102,1.2.0)",
  org.eclipse.jst.server.core;bundle-version="[1.0.102,1.2.0)",
- org.eclipse.ant.ui;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
- org.eclipse.emf.common;bundle-version="[2.2.0,2.4.0)";visibility:=reexport,
- org.eclipse.emf.ecore;bundle-version="[2.2.0,2.4.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.4.0)",
- org.eclipse.ui.externaltools;bundle-version="[3.1.100,3.3.0)";resolution:=optional,
+ org.eclipse.ant.ui;resolution:="optional";bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.emf.common;visibility:="reexport";bundle-version="[2.2.0,2.3.0)",
+ org.eclipse.emf.ecore;bundle-version="[2.2.0,2.3.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.3.0)",
+ org.eclipse.ui.externaltools;resolution:="optional";bundle-version="[3.1.100,3.3.0)",
  org.apache.ant;bundle-version="[1.6.5,1.7.0)",
- org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
- org.eclipse.core.variables;bundle-version="[3.1.0,4.0.0)"
+ org.eclipse.debug.ui;resolution:="optional";bundle-version="[3.2.0,4.0.0)"
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.jst.server.generic.core/plugin.properties b/plugins/org.eclipse.jst.server.generic.core/plugin.properties
index 71d7ea3..d4fcff6 100644
--- a/plugins/org.eclipse.jst.server.generic.core/plugin.properties
+++ b/plugins/org.eclipse.jst.server.generic.core/plugin.properties
@@ -14,7 +14,6 @@
 externalLaunchConfigurationTypeName=Generic Server(External Launch)
 launchConfigurationTypeName=Generic Server
 extensionPointServerdefinition=Server definition
-extensionPointRuntimedefinition=Runtime definition
 extensionPointGenericpublisher=Generic Publisher
 # ====================================================================
 
diff --git a/plugins/org.eclipse.jst.server.generic.core/plugin.xml b/plugins/org.eclipse.jst.server.generic.core/plugin.xml
index 7499e89..723f523 100644
--- a/plugins/org.eclipse.jst.server.generic.core/plugin.xml
+++ b/plugins/org.eclipse.jst.server.generic.core/plugin.xml
@@ -3,7 +3,6 @@
 <plugin>
 
  <extension-point id="serverdefinition" name="%extensionPointServerdefinition" schema="schema/serverdefinition.exsd"/>
- <extension-point id="runtimedefinition" name="%extensionPointRuntimedefinition" schema="schema/runtimedefinition.exsd"/>
  <extension-point id="genericpublisher" name="%extensionPointGenericpublisher" schema="schema/genericpublisher.exsd"/>
 	
  <extension point="org.eclipse.debug.core.launchConfigurationTypes">
diff --git a/plugins/org.eclipse.jst.server.generic.core/schema/runtimedefinition.exsd b/plugins/org.eclipse.jst.server.generic.core/schema/runtimedefinition.exsd
deleted file mode 100644
index 93ed0ef..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/schema/runtimedefinition.exsd
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.jst.server.generic.core">
-<annotation>
-      <appInfo>
-         <meta.schema plugin="org.eclipse.jst.server.generic.core" id="runtimedefinition" name="Runtime Definition"/>
-      </appInfo>
-      <documentation>
-         This extension point defines a new generic server runtime definition file.
-      </documentation>
-   </annotation>
-
-   <element name="extension">
-      <complexType>
-         <sequence>
-            <element ref="runtimedefinition" 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>
-               <appInfo>
-                  <meta.attribute translatable="true"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <element name="runtimedefinition">
-      <complexType>
-         <sequence>
-         </sequence>
-         <attribute name="id" type="string" use="required">
-            <annotation>
-               <documentation>
-                  runtime id
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="definitionfile" type="string" use="required">
-            <annotation>
-               <documentation>
-                  location of the generic server runtime definition file
-               </documentation>
-               <appInfo>
-                  <meta.attribute kind="resource"/>
-               </appInfo>
-            </annotation>
-         </attribute>
-      </complexType>
-   </element>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="since"/>
-      </appInfo>
-      <documentation>
-         2.0
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="examples"/>
-      </appInfo>
-      <documentation>
-         &lt;pre&gt;
-&lt;extension point=&quot;org.eclipse.jst.server.generic.core.runtimedefinition&quot;&gt;
-  &lt;runtimedefinition id=&quot;org.eclipse.jst.server.generic.runtime.jonas4&quot; definitionfile=&quot;/runtimes/jonas.runtimedef&quot;&gt;
-  &lt;/runtimedefinition&gt;
-&lt;/extension&gt;
-&lt;/pre&gt;
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="apiInfo"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
-
-   <annotation>
-      <appInfo>
-         <meta.section type="copyright"/>
-      </appInfo>
-      <documentation>
-         Copyright (c) 2006 Cape Clear Software. 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.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalServerBehaviour.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalServerBehaviour.java
index cad2cec..bd630bd 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalServerBehaviour.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ExternalServerBehaviour.java
@@ -96,7 +96,6 @@
 	protected synchronized void setServerStarted() {
 		if (fLaunchConfigurationWC != null) {
 			try {
-				setupSourceLocator( fLaunch );
 				ExternalLaunchConfigurationDelegate.startDebugging(fLaunchConfigurationWC, fMode, fLaunch, fProgressMonitor);
 			} catch (CoreException ce) {
 				// failed to start debugging, so set mode to run
@@ -112,15 +111,6 @@
 		setServerState(IServer.STATE_STARTED);
  	}
 	
-	/**
-	 * Subclasses may override this method to replace default source locator or add additional
-	 * sourceLookupParticipant, if necessary 
-	 * @param launch 	the ILaunch object of the debug session
-	 */
-	protected void setupSourceLocator(ILaunch launch) {
-        //nothing to do
-	}
-
 	/*
 	 * If the server state is unknown, reset the status to OK
 	 */
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericPublisher.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericPublisher.java
index faa8789..a5c4ea7 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericPublisher.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericPublisher.java
@@ -27,31 +27,7 @@
     private IModule[] fModule;
     private GenericServerRuntime fServerRuntime;
     private GenericServer fServer;
-    private int fKind;
-    private int fDeltaKind;
     
-    
-    /**
-     * Intizilazes publisher.
-     * 
-     * @param module
-     * @param server
-     */
-    protected void initialize( IModule[] module, IServer server, int kind, int deltaKind )
-    {
-        fModule = module;
-        fServer = (GenericServer)server.loadAdapter(GenericServer.class,null);
-        fServerRuntime = (GenericServerRuntime)server.getRuntime().loadAdapter(GenericServerRuntime.class,null);
-        fKind = kind;
-        fDeltaKind = deltaKind;
-    }
-    
-    /**
-     * Initializes publisher.
-     * @deprecated
-     * @param module
-     * @param server
-     */
     protected void initialize(IModule[] module, IServer server)
     {
         fModule = module;
@@ -84,7 +60,7 @@
      * Returns the module associated with this publisher instance
      * @return module
      */
-    protected IModule[] getModule() {
+    public IModule[] getModule() {
         return fModule;
     }
 
@@ -92,22 +68,14 @@
      * Generic server instance
      * @return server
      */
-    protected GenericServer getServer(){
+    public GenericServer getServer(){
     	return fServer;
     }
     /**
      * a handle to server definition.
      * @return serverdef
      */
-    protected GenericServerRuntime getServerRuntime() {
+    public GenericServerRuntime getServerRuntime() {
         return fServerRuntime;
     }
-
-    protected int getDeltaKind() {
-        return fDeltaKind;
-    }
-
-    protected int getKind() {
-        return fKind;
-    }
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServer.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServer.java
index 0323cf3..1560268 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServer.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServer.java
@@ -16,7 +16,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -31,7 +30,6 @@
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IModuleType;
-import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.ServerPort;
 import org.eclipse.wst.server.core.ServerUtil;
 import org.eclipse.wst.server.core.model.IURLProvider;
@@ -47,33 +45,33 @@
     private static final String ATTR_GENERIC_SERVER_MODULES = "Generic_Server_Modules_List"; //$NON-NLS-1$
 
 	public IStatus canModifyModules(IModule[] add, IModule[] remove) {
-		for ( int i = 0; i < add.length; i++ ) {         
-			if( !isSupportedModule( add[i] ) ){
-                return new Status( IStatus.ERROR, CorePlugin.PLUGIN_ID, 0,
-                        GenericServerCoreMessages.moduleNotCompatible, null );
-            }
-            if ( add[i].getProject() != null ) {
-                IStatus status = FacetUtil.verifyFacets(add[i].getProject(), getServer());
-                if (status != null && !status.isOK())
-                    return status;
-            }
+		List moduleTypes = getServerDefinition().getModule();
+        int found =0;
+		for (int i = 0; i < add.length; i++) {
+			for(int j=0;j<moduleTypes.size();j++){
+				 Module module = (Module)moduleTypes.get(j);
+				 if(add[i].getModuleType()!= null && add[i].getModuleType().getId().equals(module.getType())){
+					 found++;
+					 break;
+				  }
+			}
         }
-		return new Status(IStatus.OK, CorePlugin.PLUGIN_ID, 0, "CanModifyModules", null); //$NON-NLS-1$ 
+		
+		for (int i = 0; i < add.length; i++) {
+			IModule module = add[i];
+			if (module.getProject() != null) {
+				IStatus status = FacetUtil.verifyFacets(module.getProject(), getServer());
+				if (status != null && !status.isOK())
+					return status;
+			}
+		}
+		
+		if(found==add.length)
+			return new Status(IStatus.OK, CorePlugin.PLUGIN_ID, 0, "CanModifyModules", null); //$NON-NLS-1$
+		
+		return new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, GenericServerCoreMessages.moduleNotCompatible, null);
 	}
 	
-    private boolean isSupportedModule(IModule module){
-        if( module == null )
-            return false;
-        List moduleTypes = getServerDefinition().getModule();
-        for( int j=0; j<moduleTypes.size(); j++ ){
-             Module moduleDefinition = (Module)moduleTypes.get(j);
-             if( module.getModuleType() != null && module.getModuleType().getId().equals(moduleDefinition.getType()) ){
-                return true;
-              }
-        }
-         return false;
-    }
-    
     /* (non-Javadoc)
      * @see org.eclipse.wst.server.core.model.ServerDelegate#modifyModules(org.eclipse.wst.server.core.IModule[], org.eclipse.wst.server.core.IModule[], org.eclipse.core.runtime.IProgressMonitor)
      */
@@ -184,9 +182,9 @@
 			port = getHttpPort();
 			port =ServerUtil.getMonitoredPort(getServer(), port, "web"); //$NON-NLS-1$
 			if (port != 80)
-				url += ":" + port;
+				url += ":" + port; //$NON-NLS-1$
 
-			url += '/'+webModule.getContextRoot();
+			url += "/"+webModule.getContextRoot(); //$NON-NLS-1$
 
 			if (!url.endsWith("/")) //$NON-NLS-1$
 				url += "/"; //$NON-NLS-1$
@@ -224,15 +222,8 @@
 	 * @return server runtime
 	 */
     public ServerRuntime getServerDefinition(){
-        IServer server = getServer();
-		String rtTypeId = server.getRuntime().getRuntimeType().getId();
-        String serverTypeId = server.getServerType().getId();
-        /**
-         * Pass both the serverType id and runtimeType id and ServerTypeDefinitionManager 
-         * will figure out how to give us back the correct ServerRuntime.
-         */
-		return CorePlugin.getDefault().getServerTypeDefinitionManager().getServerRuntimeDefinition(
-                serverTypeId, rtTypeId, getInstanceProperties());
+		String rtTypeId = getServer().getRuntime().getRuntimeType().getId();
+		return CorePlugin.getDefault().getServerTypeDefinitionManager().getServerRuntimeDefinition(rtTypeId,getInstanceProperties());
 	}
 
     private GenericServerRuntime getRuntimeDelegate(){
@@ -246,14 +237,12 @@
      * @see org.eclipse.wst.server.core.model.ServerDelegate#getRootModules(org.eclipse.wst.server.core.IModule)
      */
     public IModule[] getRootModules(IModule module) throws CoreException {
-     	if ( !isSupportedModule( module ) )
-            return null;
-        IStatus status = canModifyModules(new IModule[] { module }, null);
+     	IStatus status = canModifyModules(new IModule[] { module }, null);
         if (status != null && !status.isOK())
             throw  new CoreException(status);;
-        IModule[] parents = doGetParentModules(module);
-        if(parents.length>0)
-        	return parents;
+        IModule[] childs = doGetParentModules(module);
+        if(childs.length>0)
+        	return childs;
         return new IModule[] { module };
     }
 
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java
index 3ec591b..046e674 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerBehaviour.java
@@ -58,7 +58,7 @@
 	private static final String ATTR_STOP = "stop-server"; //$NON-NLS-1$
     
 	// the thread used to ping the server to check for startup
-	protected transient PingThread ping;
+	protected transient PingThread ping = null;
     protected transient IDebugEventSetListener processListener;
     protected transient IProcess process;
     
@@ -74,26 +74,29 @@
      */
     public void publishModule(int kind, int deltaKind, IModule[] module,
             IProgressMonitor monitor) throws CoreException {
-        GenericPublisher publisher = initializePublisher( kind, deltaKind, module );
-        IStatus[] status = null;
-    	if(REMOVED == deltaKind ){//TODO: check if the removed module is published to server
-            status = publisher.unpublish(monitor);
+ 
+    	
+        if(REMOVED == deltaKind){
+            removeFromServer(module,monitor);
         }
         else{
         	checkClosed(module);
-            status= publisher.publish(null,monitor);
-        }
-        setModulePublishState( module, status );
-    }
-
-    private void setModulePublishState( IModule[] module, IStatus[] status ) throws CoreException {
-        if(status==null || status.length < 1 ){
-            setModulePublishState(module, IServer.PUBLISH_STATE_NONE);
-        }else {
-            for (int i=0; i < status.length; i++) {
-                if (IStatus.ERROR == status[i].getSeverity()){
-                	setModulePublishState(module, IServer.PUBLISH_STATE_UNKNOWN);
-                    throw new CoreException(status[i]);
+            String publisherId = ServerTypeDefinitionUtil.getPublisherID(module[0], getServerDefinition());
+            GenericPublisher publisher = PublishManager.getPublisher(publisherId);
+            if(publisher==null){
+                IStatus status = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0, NLS.bind(GenericServerCoreMessages.unableToCreatePublisher,publisherId),null);
+                throw new CoreException(status);
+            }
+            publisher.initialize(module,getServer());
+            IStatus[] status= publisher.publish(null,monitor);
+            if(status==null){
+                setModulePublishState(module, IServer.PUBLISH_STATE_NONE);
+            }else {
+                for (int i=0; i < status.length; i++) {
+                    if (IStatus.ERROR == status[i].getSeverity()){
+                    	setModulePublishState(module, IServer.PUBLISH_STATE_UNKNOWN);
+                        throw new CoreException(status[i]);
+                    }
                 }
             }
         }
@@ -101,23 +104,25 @@
 
     private void checkClosed(IModule[] module) throws CoreException
     {
-    	for( int i=0; i < module.length; i++ ){
-    		if( module[i] instanceof DeletedModule ){	
+    	for(int i=0;i<module.length;i++)
+    	{
+    		if(module[i] instanceof DeletedModule)
+    		{	
                 IStatus status = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0, NLS.bind(GenericServerCoreMessages.canNotPublishDeletedModule,module[i].getName()),null);
                 throw new CoreException(status);
     		}
     	}
     }
-
-    private GenericPublisher initializePublisher(int kind, int deltaKind, IModule[] module ) throws CoreException {
-        String publisherId = ServerTypeDefinitionUtil.getPublisherID(module[0], getServerDefinition());
+    private void removeFromServer(IModule[] module, IProgressMonitor monitor) throws CoreException
+    {
+    	String publisherId = ServerTypeDefinitionUtil.getPublisherID(module[0], getServerDefinition());
         GenericPublisher publisher = PublishManager.getPublisher(publisherId);  
         if(publisher==null){
             IStatus status = new Status(IStatus.ERROR,CorePlugin.PLUGIN_ID,0,NLS.bind(GenericServerCoreMessages.unableToCreatePublisher,publisherId),null);
             throw new CoreException(status);
         }
-        publisher.initialize( module,getServer(), kind, deltaKind );
-        return publisher;
+        publisher.initialize(module,getServer());
+        publisher.unpublish(monitor);
     }
     
     
@@ -382,12 +387,12 @@
         
         String existingProgArgs  = workingCopy.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, (String)null);
         String serverProgArgs =  getProgramArguments();
-        if( existingProgArgs==null ) {
+        if(existingProgArgs==null || existingProgArgs.indexOf(serverProgArgs)<0) {
             workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,serverProgArgs);
         }
         String existingVMArgs = workingCopy.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,(String)null);
         String serverVMArgs= getVmArguments();
-        if( existingVMArgs==null ) {
+        if(existingVMArgs==null || existingVMArgs.indexOf(serverVMArgs)<0) {
             workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,serverVMArgs);
         }
 	}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerLaunchConfigurationDelegate.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerLaunchConfigurationDelegate.java
index b61f488..f71a296 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerLaunchConfigurationDelegate.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/GenericServerLaunchConfigurationDelegate.java
@@ -83,8 +83,8 @@
 					genericServer.stopImpl();
 					throw new CoreException(new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 0, GenericServerCoreMessages.noProfiler, null));
 				}
-				String vmArgs2 = sp[0].getVMArgs();
-				vmArgs = vmArgs + ' ' + vmArgs2;
+				String vmArgs2 = sp[0].getVMArgs(); //$NON-NLS-1$
+				vmArgs = vmArgs + " " + vmArgs2; //$NON-NLS-1$
 			}
 			ExecutionArguments execArgs = new ExecutionArguments(vmArgs, pgmArgs);
 
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/PingThread.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/PingThread.java
index 1b9efa9..159f0b0 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/PingThread.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/PingThread.java
@@ -31,7 +31,7 @@
 	// maximum number of pings before giving up
 	private int maxPings = 56; // total: 16 seconds + connection time
 
-	private boolean stop;
+	private boolean stop = false;
 	private String fUrl;
 	private IServer fServer;
 	private GenericServerBehaviour fGenericServer;
@@ -117,7 +117,7 @@
 				if(!isRemote())
 					stop = true;
 			} catch (Exception e) {
-				Trace.trace(Trace.FINEST, "Ping: failed: "+ e); //$NON-NLS-1$
+				Trace.trace(Trace.FINEST, "Ping: failed"); //$NON-NLS-1$
 				// pinging failed
 				if (!stop) {
 					try {
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ServerTypeDefinitionManager.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ServerTypeDefinitionManager.java
index 7b535ec..7e378df 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ServerTypeDefinitionManager.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/ServerTypeDefinitionManager.java
@@ -17,7 +17,6 @@
 import org.eclipse.core.runtime.IRegistryChangeEvent;
 import org.eclipse.core.runtime.IRegistryChangeListener;
 import org.eclipse.jst.server.generic.internal.core.util.ExtensionPointUtil;
-import org.eclipse.jst.server.generic.internal.core.util.ServerRuntimeMergeUtil;
 import org.eclipse.jst.server.generic.internal.xml.XMLUtils;
 import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
 /**
@@ -30,23 +29,14 @@
 {
 	private XMLUtils fXmlUtils;
 	
-	/**
-	 * Watch for changes to serverdefinition and runtimedefinition extensions.
-	 */
-	private class RegistryChangeListener implements IRegistryChangeListener {
-        public void registryChanged(IRegistryChangeEvent event) {
-            IExtensionDelta[] deltas = event.getExtensionDeltas(CorePlugin.PLUGIN_ID, ExtensionPointUtil.SERVERDEFINITION_EXTENSION_ID);
-            if (deltas != null && deltas.length > 0) {
-                handleDefinitionsChanged();
-            }
-            else {
-                deltas = event.getExtensionDeltas(CorePlugin.PLUGIN_ID, ExtensionPointUtil.RUNTIMEDEFINITION_EXTENSION_ID);
-                if (deltas != null && deltas.length > 0) {
-                    handleDefinitionsChanged();
-                }
-            }
-        }
-    }
+	private class RegistryChangeListener implements IRegistryChangeListener{
+		public void registryChanged(IRegistryChangeEvent event) {
+			IExtensionDelta[] deltas = event.getExtensionDeltas(CorePlugin.PLUGIN_ID, ExtensionPointUtil.SERVERDEFINITION_EXTENSION_ID);
+			if(deltas!=null && deltas.length>0){
+				handleServerDefinitionsChanged();
+			}
+		}		
+	}
 	
 	protected ServerTypeDefinitionManager(URL serverDefinitionURL){
 		super();
@@ -54,66 +44,19 @@
 		ExtensionPointUtil.addRegistryListener(new RegistryChangeListener());
 	}
 
-    /**
-     * Returns either: 
-     * 
-     * 1. the ServerRuntime that represents the .serverdef file for a given 
-     *    runtime type, based on the runtimeTypeId.
-     *    
-     * 2. the ServerRuntime that represents both the .serverdef file for a
-     *    given server type, based on the serverTypeId, combined with the 
-     *    .runtimedef file for the runtime type, based on the runtimeTypeId.   
-     * 
-     * The implementation looks for (1) first, if that combination is not
-     * found, then (2) is returned.
-     * 
-     * @param serverTypeId server type id
-     * @param runtimeTypeId runtime type id
-     * @param properties user provided properties
-     * @return server runtime that is initialized with user properties 
-     */
-    public ServerRuntime getServerRuntimeDefinition(String serverTypeId, String runtimeTypeId, Map properties) {
-        
-        ServerRuntime serverdef = fXmlUtils.getServerTypeDefinition(serverTypeId);
-        
-        if (serverdef != null) {
-            ServerRuntime runtimedef = fXmlUtils.getRuntimeTypeDefinition(runtimeTypeId);
-            serverdef = ServerRuntimeMergeUtil.combine(serverdef, runtimedef);
-        }
-        else {
-            // Fall back to the original usage
-            serverdef = fXmlUtils.getServerTypeDefinition(runtimeTypeId);
-        }
-        
-        if (serverdef != null) {
-            serverdef.setPropertyValues(properties);
-        }
-        
-        return serverdef;
-    }
-    
-    /**
-     * Returns the ServerRuntime that represents the .serverdef file
-     * for a given runtime type.
-     * 
-     * @param runtimeTypeId runtime type id
-     * @param properties user provided properties
-     * @return server runtime that is initialized with user properties 
-     */
-    public ServerRuntime getServerRuntimeDefinition(String runtimeTypeId, Map properties) {
-        ServerRuntime definition = fXmlUtils.getRuntimeTypeDefinition(runtimeTypeId);
-        
-        if (definition == null) {
-            // Fall back to the original usage
-            definition = fXmlUtils.getServerTypeDefinition(runtimeTypeId);
-        }
-        
-        if (definition != null) {
+	/**
+	 * Returns the ServerRuntime that represents the .serverdef file
+	 * for a given runtime type.
+	 * @param id runtime type id
+	 * @param properties user provided properties
+	 * @return server runtime that is initialized with user properties 
+	 */
+	public ServerRuntime getServerRuntimeDefinition(String id, Map properties){
+		ServerRuntime definition =  fXmlUtils.getServerTypeDefinition(id);
+		if(definition !=null)
             definition.setPropertyValues(properties);
-        }
-        
-        return definition;
-    }
+		return definition;
+	}
 	
 	/**
 	 * Returns all the ServerRuntimes registered a .serverdef.
@@ -124,7 +67,7 @@
 		 return (ServerRuntime[])definitionList.toArray(new ServerRuntime[definitionList.size()]);
 	}
 	
-	private void handleDefinitionsChanged(){	
+	private void handleServerDefinitionsChanged(){	
 		XMLUtils utils = new XMLUtils();
 		fXmlUtils = utils;
 	}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/Trace.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/Trace.java
index 18e8c75..385cbac 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/Trace.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/core/internal/Trace.java
@@ -17,23 +17,23 @@
 	/**
 	 * Trace level CONFIG
 	 */
-	public static final byte CONFIG = 0;
+	public static byte CONFIG = 0;
 	/**
 	 * Trace level WARNING
 	 */
-	public static final byte WARNING = 1;
+	public static byte WARNING = 1;
 	/**
 	 * Trace level SEVERE
 	 */
-	public static final byte SEVERE = 2;
+	public static byte SEVERE = 2;
 	/**
 	 * Trace level FINEST
 	 */
-	public static final byte FINEST = 3;
+	public static byte FINEST = 3;
 	/**
 	 * Trace level FINER
 	 */
-	public static final byte FINER = 4;
+	public static byte FINER = 4;
 	
 	/**
 	 * Trace constructor comment.
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 be521a5..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
@@ -20,6 +20,7 @@
 import java.util.Map;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
+
 import org.eclipse.ant.internal.ui.IAntUIConstants;
 import org.eclipse.ant.internal.ui.launchConfigurations.IAntLaunchConfigurationConstants;
 import org.eclipse.core.runtime.CoreException;
@@ -29,7 +30,6 @@
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.DebugPlugin;
-import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationType;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
@@ -108,6 +108,8 @@
 				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);
@@ -306,11 +308,8 @@
 
 		setupAntLaunchConfiguration(wc);
 
-        if ( !monitor.isCanceled() )
-        {
-            ILaunchConfiguration launchConfig = wc.doSave();          
-            launchConfig.launch(ILaunchManager.RUN_MODE, monitor, false, true);
-        }    
+		ILaunchConfiguration launchConfig = wc.doSave();
+		launchConfig.launch("run", monitor); //$NON-NLS-1$
 	}
 
 	/**
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 8703fab..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,7 +27,7 @@
  * Packages resources to a .zip file
  */
 public class ModulePackager {
-	private static final String JAR_FILE_SEPERATOR = "/"; //$NON-NLS-1$
+	private static final String JAR_FILE_SEPERATOR = "/";
 	private JarOutputStream outputStream;
 //	private StringBuffer manifestContents;
 
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/ExtensionPointUtil.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/ExtensionPointUtil.java
index f96bb96..cedf0ed 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/ExtensionPointUtil.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/ExtensionPointUtil.java
@@ -27,24 +27,15 @@
      * serverdefinition extension id
      */
     public static final String SERVERDEFINITION_EXTENSION_ID = "serverdefinition"; //$NON-NLS-1$
-    public static final String RUNTIMEDEFINITION_EXTENSION_ID = "runtimedefinition"; //$NON-NLS-1$
     private static final String GENERICPUBLISHER_EXTENSION_ID = "genericpublisher"; //$NON-NLS-1$
 
     /**
      * Returns serverdefinition extensions
-     * @return serverdefinition Extensions
+     * @return serverdefinitionExtensions
      */
     public static IExtension[] getGenericServerDefinitionExtensions(){
         return getExtensions(CorePlugin.PLUGIN_ID+"."+SERVERDEFINITION_EXTENSION_ID); //$NON-NLS-1$
     }
-
-    /**
-     * Returns runtimedefinition extensions
-     * @return runtimedefinition Extensions
-     */
-    public static IExtension[] getGenericServerRuntimeDefinitionExtensions(){
-        return getExtensions(CorePlugin.PLUGIN_ID+"."+RUNTIMEDEFINITION_EXTENSION_ID); //$NON-NLS-1$
-    }
     
     /**
      * Returns publisher extensions
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/ServerRuntimeMergeUtil.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/ServerRuntimeMergeUtil.java
deleted file mode 100644
index ad24b6d..0000000
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/core/util/ServerRuntimeMergeUtil.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * Copyright (c) 2006 Cape Clear Software. 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
- */
-package org.eclipse.jst.server.generic.internal.core.util;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jst.server.generic.servertype.definition.Classpath;
-import org.eclipse.jst.server.generic.servertype.definition.Property;
-import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
-
-/**
- * Combines a runtimedef files
- * 
- * - properties
- * - classpaths
- * 
- * entries with a serverdef, if the serverdef does not already have 
- * them - contains check is done by id.
- * 
- * @author <a href="mailto:david.black@capeclear.com">David Black</a>
- */
-public class ServerRuntimeMergeUtil {
-
-    /**
-     * Combines a runtime definition and a server definition 
-     * into a single logical <code>ServerRuntime</code>.
-     * 
-     * @param serverdef
-     * @param runtimedef
-     * @return serverdef
-     */
-    public static ServerRuntime combine(ServerRuntime serverdef, ServerRuntime runtimedef) {
-        /** 
-         * Add properties from runtimedef to serverdef if not already present,
-         * this ensures that:
-         * 
-         * (1) while we are affecting the cached copy of serverdef, it is always
-         *     required to be combined with its runtimedef (if there is one), and
-         *     we check that the property has not already been added
-         *     
-         * (2) serverdef properties can override runtimedef properties    
-         */
-        List properties = runtimedef.getProperty();
-        if (properties != null) {
-            Iterator iter = properties.iterator();
-            while (iter.hasNext()) {
-                Property prop = (Property) iter.next();
-                addPropertyIfNotPresent(serverdef.getProperty(), prop);
-            }
-        }
-        
-        /** 
-         * Add classpaths from runtimedef to serverdef if not already present,
-         * this ensures that:
-         * 
-         * (1) while we are affecting the cached copy of serverdef, it is always
-         *     required to be combined with its runtimedef (if there is one), and
-         *     we check that the classpath has not already been added (by id)
-         *     
-         * (2) serverdef classpath can override runtimedef classpath by id    
-         */
-        List classpaths = runtimedef.getClasspath();
-        if (classpaths != null) {
-            Iterator iter = classpaths.iterator();
-            while (iter.hasNext()) {
-                Classpath classpath = (Classpath)iter.next();
-                addClasspathIfNotPresent(serverdef.getClasspath(), classpath);
-            }
-        }
-        
-        return serverdef;
-    }
-
-    private static void addClasspathIfNotPresent(List classpaths, Classpath classpath) {
-        if (!containsClasspath(classpaths, classpath.getId())) {
-            classpaths.add(classpath);
-        }
-    }
-
-    private static boolean containsClasspath(List properties, String id) {
-        boolean found = false;
-        Iterator iter = properties.iterator();
-        while (iter.hasNext()) {
-            Classpath classpath = (Classpath) iter.next();
-            if (classpath.getId().equals(id)) {
-                found = true;
-                break;
-            }
-        }
-        return found;
-    }
-    
-    private static void addPropertyIfNotPresent(List properties, Property prop) {
-        if (!containsProperty(properties, prop.getId())) {
-            properties.add(prop);
-        }
-    }
-
-    private static boolean containsProperty(List properties, String id) {
-        boolean found = false;
-        Iterator iter = properties.iterator();
-        while (iter.hasNext()) {
-            Property prop = (Property) iter.next();
-            if (prop.getId().equals(id)) {
-                found = true;
-                break;
-            }
-        }
-        return found;
-    }
-
-}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/LaunchConfigurationImpl.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/LaunchConfigurationImpl.java
index b2713a4..dd4089f 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/LaunchConfigurationImpl.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/servertype/definition/impl/LaunchConfigurationImpl.java
@@ -624,15 +624,12 @@
 		return concatList(getVmParameters());
 	}
 	
-    /**
-     * @generated NOT
-     */
 	private String concatList(List list){
 		StringBuffer concatString = new StringBuffer();
 		Iterator iterator = list.iterator();
 		while(iterator.hasNext()){
 			concatString.append(iterator.next());
-			concatString.append(' ');
+			concatString.append(" ");
 		}
 		return concatString.toString();
 	}
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/Resolver.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/Resolver.java
index 6dc89cb..1beb060 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/Resolver.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/Resolver.java
@@ -10,24 +10,20 @@
 
 package org.eclipse.jst.server.generic.internal.xml;
 
+import java.io.File;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.variables.IDynamicVariable;
-import org.eclipse.core.variables.VariablesPlugin;
-import org.eclipse.jst.server.generic.core.internal.CorePlugin;
+
+import org.eclipse.jst.server.generic.servertype.definition.ArchiveType;
 import org.eclipse.jst.server.generic.servertype.definition.Property;
 import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
 
 /**
- * Utility to resolve serverdef/runtimedef properties with the user provided data.
- * Resolver also looks through eclipse platform provided dynamic variables to 
- * resolve a property. 
- *
+ * Utility to resolve serverdef properties with the user provided data.
+ * 
  * @author Gorkem Ercan
  */
 public class Resolver {
@@ -37,8 +33,8 @@
 	private static final String PROP_START = "${"; //$NON-NLS-1$
 	private Map fPropertyValues = new HashMap();
 	private ServerRuntime server;
-	
-    /**
+
+	/**
 	 * @param runtime 
 	 */
 	public Resolver(ServerRuntime runtime) {
@@ -46,8 +42,23 @@
 	}
 	
 	/**
+	 * Resolves a classpath element.
+	 * 
+	 * @param cpList
+	 * @return list
+	 */
+	public List resolveClasspathProperties(List cpList)
+	{
+		ArrayList list = new ArrayList(cpList.size());
+		for (int i = 0; i < cpList.size(); i++) {
+			ArchiveType item = (ArchiveType) cpList.get(i);
+			String cpath = resolveProperties(item.getPath());
+			list.add(cpath);
+		}
+		return list;
+	}	
+	/**
 	 * Returns a resolved string.
-     * 
 	 * @param proppedString
 	 * @return resolved string
 	 */
@@ -63,6 +74,11 @@
 				value = value.replace('\\','/');
 			 cache.put(element.getId(), value);
 		}
+		//String vmPath = install.getInstallLocation().getCanonicalPath();
+		//vmPath = vmPath.replace('\\', '/');
+		cache.put("jrePath", "JRE"); //$NON-NLS-1$ //$NON-NLS-2$
+		cache.put("pathChar", File.pathSeparator); //$NON-NLS-1$
+
 		String str = resolvePropertiesFromCache(proppedString, cache);
 		str = fixPassthroughProperties(str);
 		return str;
@@ -85,9 +101,9 @@
 		String proppedString,
 		HashMap cache) {
 		String resolvedString = proppedString;
-		int start = skipToProperty(resolvedString, cache);// see if there are properties to be resolved.
+		int start = skipToProperty(resolvedString,cache);
 		if (start >= 0) {
-			resolvedString = resolveProperty(resolvedString, cache);
+			resolvedString = resolveProperty(resolvedString, start, cache);
 			resolvedString = resolvePropertiesFromCache(resolvedString, cache);
 		}
 		return resolvedString;
@@ -96,15 +112,17 @@
 	private int skipToProperty(String str,HashMap cache) {
 		int start = -1; 
 		int end =  0;
-		String key=""; //$NON-NLS-1$
+		String value = null;
 		do {
 			start =  str.indexOf(PROP_START,end);
 			if( start < 0)
 				return start;
 			end = str.indexOf(PROP_END, start);
-			key = str.substring(start + 2, end);
+			
+			String key = str.substring(start + 2, end);
+			value = (String)cache.get(key);
 		}
-		while( !cache.containsKey( key ) && VariablesPlugin.getDefault().getStringVariableManager().getDynamicVariable( key ) == null );
+		while(value == null);
 		return start;
 	}
 	
@@ -112,28 +130,17 @@
 		return str.indexOf(PROP_START2) >= 0;
 	}
 
-	private String resolveProperty(String proppedString, HashMap cache) {
-		StringBuffer str = new StringBuffer(proppedString);
-		int start = str.indexOf(PROP_START);
+	private String resolveProperty(String proppedString, int start, HashMap cache) {
+		String str = proppedString;
+		start = str.indexOf(PROP_START);
 		int end = str.indexOf(PROP_END, start);
 		String key = str.substring(start + 2, end);
-        String value = (String)cache.get(key);
-        if(value == null ){// look in eclipse variables
-            IDynamicVariable dv =  VariablesPlugin.getDefault().getStringVariableManager().getDynamicVariable( key );
-            if (dv != null ){
-                try {
-                    value = dv.getValue( null );
-                } 
-                catch( CoreException e ){
-                    CorePlugin.getDefault().getLog().log(
-                    new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID, 1,
-                            "Can not resolve eclipse variable", e)); //$NON-NLS-1$
-                }
-            }
-        }
+		String value = (String)cache.get(key);
 		if(value == null )
-			return str.toString();
-		return str.replace( start, end+1, value ).toString();
+			return str;
+		return str.substring(0, start)
+			+ value
+			+ str.substring(end + 1);
 	}
 	
 	private String fixParam(String proppedString) {
@@ -143,11 +150,14 @@
 			+ PROP_START
 			+ str.substring(start+2);
 	}
-    
+	
 	/**
-     * Set the name value pairs that the receiver resolver instance
-     * uses to resolve serverdef/runtimedef properties.
-     * 
+	 * @return Returns the fPropertyValues.
+	 */
+	public Map getPropertyValues() {
+		return fPropertyValues;
+	}
+	/**
 	 * @param propertyValues The fPropertyValues to set.
 	 */
 	public void setPropertyValues(Map propertyValues) {
diff --git a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/XMLUtils.java b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/XMLUtils.java
index 70da90b..247d777 100644
--- a/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/XMLUtils.java
+++ b/plugins/org.eclipse.jst.server.generic.core/src/org/eclipse/jst/server/generic/internal/xml/XMLUtils.java
@@ -14,8 +14,6 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.List;
-
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtension;
 import org.eclipse.core.runtime.IStatus;
@@ -35,15 +33,14 @@
 import org.osgi.framework.Bundle;
 
 /**
- * Utility for handling the xml data from .serverdef and .runtimedef files.
+ * Utility for handling the xml data from .serverdef files
  * 
  * @author Gorkem Ercan
  */
 public class XMLUtils {
 
 	
-    private ArrayList serverDefinitions;
-    private ArrayList runtimeDefinitions;
+    private ArrayList definitions;
 
 
 	/**
@@ -53,52 +50,28 @@
 		refresh();
 	}
 
-	/**
-	 * Load all the serverdefinition and runtimedefinition extensions.
-	 */
 	private void refresh() {
-        serverDefinitions = new ArrayList();
-        
-        IExtension[] serverDefExtensions = ExtensionPointUtil.getGenericServerDefinitionExtensions();
-        
-        for (int i = 0; serverDefExtensions != null && i < serverDefExtensions.length; i++) {
-            java.net.URI definitionFile = null;
-            IExtension extension = serverDefExtensions[i];
+		definitions= new ArrayList();
+         IExtension[] extensions = ExtensionPointUtil.getGenericServerDefinitionExtensions();
+        for (int i = 0; extensions!=null && i < extensions.length; i++) {
+            java.net.URI definitionFile=null;
+            IExtension extension = extensions[i];
             IConfigurationElement[] elements = ExtensionPointUtil.getConfigurationElements(extension);
-            
             for (int j = 0; j < elements.length; j++) {
                 IConfigurationElement element = elements[j];
                 definitionFile = getDefinitionFile(element);
-                ServerRuntime runtime = readFile(definitionFile);
-                if (runtime != null) {
-                    runtime.setId(element.getAttribute("id")); //$NON-NLS-1$
-                    runtime.setConfigurationElementNamespace(element.getNamespace());
-                    serverDefinitions.add(runtime);
+                ServerRuntime runtime =readFile(definitionFile);
+                    if(runtime!=null){
+                        runtime.setId(element.getAttribute("id")); //$NON-NLS-1$
+                        runtime.setConfigurationElementNamespace(element.getNamespace());
+                        definitions.add(runtime);
+                    }
                 }
             }
-        }
 
-        runtimeDefinitions = new ArrayList();
-        
-        IExtension[] runtimeDefExtensions = ExtensionPointUtil.getGenericServerRuntimeDefinitionExtensions();
-        
-        for (int i = 0; runtimeDefExtensions != null && i < runtimeDefExtensions.length; i++) {
-            java.net.URI definitionFile = null;
-            IExtension extension = runtimeDefExtensions[i];
-            IConfigurationElement[] elements = ExtensionPointUtil.getConfigurationElements(extension);
-            
-            for (int j = 0; j < elements.length; j++) {
-                IConfigurationElement element = elements[j];
-                definitionFile = getDefinitionFile(element);
-                ServerRuntime runtime = readFile(definitionFile);
-                if (runtime != null) {
-                    runtime.setId(element.getAttribute("id")); //$NON-NLS-1$
-                    runtime.setConfigurationElementNamespace(element.getNamespace());
-                    runtimeDefinitions.add(runtime);
-                }
-            }
-        }
-    }
+       }
+
+
 
     private java.net.URI getDefinitionFile(IConfigurationElement element) {
         
@@ -107,12 +80,6 @@
         Trace.trace(Trace.FINEST,"Loading serverdef file "+definitionFile+" from bundle "+bundle.getSymbolicName()); //$NON-NLS-1$ //$NON-NLS-2$
         
         URL url = bundle.getEntry(definitionFile);
-        if (url == null )
-        {
-            CorePlugin.getDefault().getLog().log( new Status(IStatus.ERROR, CorePlugin.PLUGIN_ID,1,
-                    "Definition file "+definitionFile+" can not be resolved in bundle "+ bundle.getSymbolicName() ,null) ); //$NON-NLS-1$ //$NON-NLS-2$
-            return null;
-        }
 		try {
 			java.net.URI uri = new java.net.URI(url.getProtocol(), url.getHost(),url.getPath(), url.getQuery());
 		    return uri;
@@ -159,11 +126,12 @@
 
     }
 
+
 	/**
-	 * @return <code>java.util.List</code> of <code>ServerRuntime</code>s.
+	 * @return ArrayList
 	 */
-	public List getServerTypeDefinitions() {
-		return serverDefinitions;
+	public ArrayList getServerTypeDefinitions() {
+		return definitions;
 	}
 
     /**
@@ -173,28 +141,6 @@
      */
     public ServerRuntime getServerTypeDefinition(String id) {
     	Iterator defs = getServerTypeDefinitions().iterator();
-        while (id != null && defs.hasNext()) {
-            ServerRuntime elem = (ServerRuntime) defs.next();
-            if (id.equals(elem.getId()))
-                return elem;
-        }
-        return null;
-    }
-
-    /**
-     * @return <code>java.util.List</code> of <code>ServerRuntime</code>s.
-     */
-    public List getRuntimeTypeDefinitions() {
-        return runtimeDefinitions;
-    }
-
-    /**
-     * Get the memory presentation for the .runtimedef file
-     * @param id
-     * @return runtime 
-     */
-    public ServerRuntime getRuntimeTypeDefinition(String id) {
-        Iterator defs = getRuntimeTypeDefinitions().iterator();
         while (defs.hasNext()) {
             ServerRuntime elem = (ServerRuntime) defs.next();
             if (id.equals(elem.getId()))
diff --git a/plugins/org.eclipse.jst.server.generic.jonas/.classpath b/plugins/org.eclipse.jst.server.generic.jonas/.classpath
index f457095..fb0f2c4 100644
--- a/plugins/org.eclipse.jst.server.generic.jonas/.classpath
+++ b/plugins/org.eclipse.jst.server.generic.jonas/.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/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<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.generic.jonas/.cvsignore b/plugins/org.eclipse.jst.server.generic.jonas/.cvsignore
index 41dcae0..f09c674 100644
--- a/plugins/org.eclipse.jst.server.generic.jonas/.cvsignore
+++ b/plugins/org.eclipse.jst.server.generic.jonas/.cvsignore
@@ -1,5 +1,3 @@
 bin
 build.xml
 javaCompiler.genericjonas.jar.args
-genericjonas.jar
-temp.folder
diff --git a/plugins/org.eclipse.jst.server.generic.jonas/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jst.server.generic.jonas/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 9166fdf..0000000
--- a/plugins/org.eclipse.jst.server.generic.jonas/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun Jan 21 14:43:48 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.jonas/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.generic.jonas/META-INF/MANIFEST.MF
index 68cb12f..6458bf8 100644
--- a/plugins/org.eclipse.jst.server.generic.jonas/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.generic.jonas/META-INF/MANIFEST.MF
@@ -14,4 +14,3 @@
  org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,1.2.0)"
 Eclipse-LazyStart: true
 Bundle-ClassPath: genericjonas.jar
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.jst.server.generic.modules/.cvsignore b/plugins/org.eclipse.jst.server.generic.modules/.cvsignore
deleted file mode 100644
index 42654c1..0000000
--- a/plugins/org.eclipse.jst.server.generic.modules/.cvsignore
+++ /dev/null
@@ -1,5 +0,0 @@
-bin
-build.xml
-commonmodules.jar
-org.eclipse.jst.server.generic.modules_1.0.0.jar
-temp.folder
diff --git a/plugins/org.eclipse.jst.server.generic.modules/.project b/plugins/org.eclipse.jst.server.generic.modules/.project
deleted file mode 100644
index af14ba8..0000000
--- a/plugins/org.eclipse.jst.server.generic.modules/.project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.jst.server.generic.ui</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/plugins/org.eclipse.jst.server.generic.oc4j/.classpath b/plugins/org.eclipse.jst.server.generic.oc4j/.classpath
index ac1904b..fb0f2c4 100644
--- a/plugins/org.eclipse.jst.server.generic.oc4j/.classpath
+++ b/plugins/org.eclipse.jst.server.generic.oc4j/.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/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="src" path="servers/"/>
+	<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.generic.oc4j/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jst.server.generic.oc4j/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 85b9bd8..0000000
--- a/plugins/org.eclipse.jst.server.generic.oc4j/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun Jan 21 14:42:58 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.oc4j/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.generic.oc4j/META-INF/MANIFEST.MF
index dd9d50d..56a49f2 100644
--- a/plugins/org.eclipse.jst.server.generic.oc4j/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.generic.oc4j/META-INF/MANIFEST.MF
@@ -14,4 +14,3 @@
  org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,1.2.0)"
 Eclipse-LazyStart: true
 Bundle-ClassPath: genericoc4j.jar
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.jst.server.generic.oc4j/plugin.properties b/plugins/org.eclipse.jst.server.generic.oc4j/plugin.properties
index 733b19c..d79f6e9 100644
--- a/plugins/org.eclipse.jst.server.generic.oc4j/plugin.properties
+++ b/plugins/org.eclipse.jst.server.generic.oc4j/plugin.properties
@@ -35,17 +35,6 @@
 oracle.10_1_3.server.description=Oracle OC4J Standalone Server for v10.1.3 \
 on the localhost using the default instance
 
-# ============ OC4J 10.1.3.1 ====================
-oc4j10131.pluginName= Oracle OC4J v10.1.3.1 Generic Server Definition Core Plug-in
-oc4j10131.pluginDescription=Provides server definition for Oracle OC4J Standalone 10.1.3.1.\
-Provides basic server functionality
-
-oracle.10_1_3_1.runtime.name=Oracle OC4J Standalone 10.1.3.1
-oracle.10_1_3_1.runtime.description=Oracle OC4J 10.1.3.1 runtime
-oracle.10_1_3_1.server.name=Oracle OC4J Standalone Server 10.1.3.1
-oracle.10_1_3_1.server.description=Oracle OC4J Standalone Server for v10.1.3.1 \
-on the localhost using the default instance
-
 # UI Labels
 label.j2ee.home=Oracle J2EE Home:
 label.admin.user=User: 
diff --git a/plugins/org.eclipse.jst.server.generic.oc4j/plugin.xml b/plugins/org.eclipse.jst.server.generic.oc4j/plugin.xml
index b2595c5..c16c8a2 100644
--- a/plugins/org.eclipse.jst.server.generic.oc4j/plugin.xml
+++ b/plugins/org.eclipse.jst.server.generic.oc4j/plugin.xml
@@ -25,29 +25,6 @@
          types="jst.utility"
          versions="1.0"/> 
      </runtimeType>
-     <runtimeType
-       id="org.eclipse.jst.server.generic.runtime.oracle10131"
-       name="%oracle.10_1_3_1.runtime.name"
-       description="%oracle.10_1_3_1.runtime.description"
-       vendor="%oracleCategory"
-       version="10.1.3.1"
-       class="org.eclipse.jst.server.generic.core.internal.GenericServerRuntime">
-      <moduleType
-         types="jst.web"
-         versions="2.2, 2.3, 2.4"/>
-      <moduleType
-         types="jst.ejb"
-         versions="1.1, 2.0, 2.1, 3.0"/>
-      <moduleType
-         types="jst.ear"
-         versions="1.2, 1.3, 1.4"/>
-      <moduleType
-         types="jst.connector"
-         versions="1.0, 1.5"/>
-       <moduleType
-         types="jst.utility"
-         versions="1.0"/> 
-     </runtimeType>     
    </extension>
    
    <extension point="org.eclipse.wst.server.core.serverTypes">
@@ -66,21 +43,6 @@
            startBeforePublish="true"
            supportsRemoteHosts="false">           
       </serverType> 
-     <serverType
-           behaviourClass="org.eclipse.jst.server.generic.core.internal.GenericServerBehaviour"
-           class="org.eclipse.jst.server.generic.core.internal.GenericServer"
-           description="%oracle.10_1_3_1.server.description"
-           hasConfiguration="false"
-           id="org.eclipse.jst.server.generic.oracle10131"
-           initialState="stopped"
-           launchConfigId="org.eclipse.jst.server.generic.core.launchConfigurationType"
-           launchModes="run,debug"
-           name="%oracle.10_1_3_1.server.name"
-           runtime="true"
-           runtimeTypeId="org.eclipse.jst.server.generic.runtime.oracle10131"
-           startBeforePublish="true"
-           supportsRemoteHosts="false">           
-      </serverType>       
    </extension>
    
    <extension point="org.eclipse.wst.server.ui.wizardFragments">
@@ -91,15 +53,7 @@
      <fragment
         id="org.eclipse.jst.server.generic.server"
         typeIds="org.eclipse.jst.server.generic.oracle1013"
-        class="org.eclipse.jst.server.generic.ui.internal.GenericServerWizardFragment"/>
-     <fragment
-        id="org.eclipse.jst.server.generic.runtime"
-        typeIds="org.eclipse.jst.server.generic.runtime.oracle10131"
-        class="org.eclipse.jst.server.generic.ui.internal.GenericServerRuntimeWizardFragment"/>
-     <fragment
-        id="org.eclipse.jst.server.generic.server"
-        typeIds="org.eclipse.jst.server.generic.oracle10131"
-        class="org.eclipse.jst.server.generic.ui.internal.GenericServerWizardFragment"/>                 
+        class="org.eclipse.jst.server.generic.ui.internal.GenericServerWizardFragment"/>         
    </extension>
    
    <extension point="org.eclipse.wst.server.ui.serverImages">   
@@ -110,33 +64,19 @@
      <image
          id="org.eclipse.jst.server.generic.image"
          icon="icons/obj16/oracle.gif"
-         typeIds="org.eclipse.jst.server.generic.runtime.oracle1013"/>
-     <image
-         id="org.eclipse.jst.server.generic.image"
-         icon="icons/obj16/oracle.gif"
-         typeIds="org.eclipse.jst.server.generic.oracle10131" />
-     <image
-         id="org.eclipse.jst.server.generic.image"
-         icon="icons/obj16/oracle.gif"
-         typeIds="org.eclipse.jst.server.generic.runtime.oracle10131"/>            
+         typeIds="org.eclipse.jst.server.generic.runtime.oracle1013"/>   
    </extension>   
    
    <extension point="org.eclipse.jst.server.core.runtimeClasspathProviders">   
      <runtimeClasspathProvider
         id="org.eclipse.jst.server.generic.runtimeTarget"
         runtimeTypeIds="org.eclipse.jst.server.generic.runtime.oracle1013"
-        class="org.eclipse.jst.server.generic.core.internal.GenericServerRuntimeTargetHandler"/>           
-     <runtimeClasspathProvider
-        id="org.eclipse.jst.server.generic.runtimeTarget"
-        runtimeTypeIds="org.eclipse.jst.server.generic.runtime.oracle10131"
-        class="org.eclipse.jst.server.generic.core.internal.GenericServerRuntimeTargetHandler"/>        
+        class="org.eclipse.jst.server.generic.core.internal.GenericServerRuntimeTargetHandler"/>   
    </extension>
    
    <extension point="org.eclipse.jst.server.generic.core.serverdefinition">
 		<serverdefinition id="org.eclipse.jst.server.generic.runtime.oracle1013" definitionfile="/servers/oracle.10.1.3.serverdef">
-		</serverdefinition>
-		<serverdefinition id="org.eclipse.jst.server.generic.runtime.oracle10131" definitionfile="/servers/oracle.10.1.3.1.serverdef">
-		</serverdefinition>				
+		</serverdefinition>		
    </extension>
    
    <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
@@ -147,14 +87,9 @@
        type="org.eclipse.jst.server.generic.runtime.oracle"
        version="10.1.3"/>
 
-    <runtime-component-version
-       type="org.eclipse.jst.server.generic.runtime.oracle"
-       version="10.1.3.1"/>
-
     <adapter>
       <runtime-component
-            id="org.eclipse.jst.server.generic.runtime.oracle"
-            />
+         id="org.eclipse.jst.server.generic.runtime.oracle"/>
       <factory
          class="org.eclipse.jst.server.core.internal.RuntimeClasspathProvider$Factory"/>
       <type
@@ -177,23 +112,6 @@
          version="1.0"/>
       <facet id="jst.connector"
          version="1.5"/>
-    </supported>
-    <supported>    
-      <runtime-component
-         id="org.eclipse.jst.server.generic.runtime.oracle"
-         version="10.1.3.1"/>
-      <facet id="jst.web"
-         version="2.2,2.3,2.4"/>
-      <facet id="jst.ejb"
-         version="1.1,2.0,2.1"/>
-      <facet id="jst.ear"
-         version="1.2,1.3,1.4"/>
-      <facet id="jst.appclient"
-         version="1.2,1.3,1.4"/>
-      <facet id="jst.utility"
-         version="1.0"/>
-      <facet id="jst.connector"
-         version="1.5"/>
     </supported>    
    </extension>
    
@@ -204,23 +122,17 @@
    
    <extension point="org.eclipse.wst.common.project.facet.core.runtimes">
     <adapter>
-      <runtime-component
-            id="org.eclipse.jst.server.generic.runtime.oracle"
-            />
+      <runtime-component id="org.eclipse.jst.server.generic.runtime.oracle"/>
       <factory class="org.eclipse.jst.server.ui.internal.RuntimeLabelProvider$Factory"/>
       <type class="org.eclipse.wst.common.project.facet.ui.IRuntimeComponentLabelProvider"/>
     </adapter>   
-   </extension>   
+   </extension>
    
    <extension point="org.eclipse.jst.server.core.runtimeFacetMappings">
     <runtimeFacetMapping
       runtimeTypeId="org.eclipse.jst.server.generic.runtime.oracle1013"
       runtime-component="org.eclipse.jst.server.generic.runtime.oracle"
       version="10.1.3"/>
-    <runtimeFacetMapping
-      runtimeTypeId="org.eclipse.jst.server.generic.runtime.oracle10131"
-      runtime-component="org.eclipse.jst.server.generic.runtime.oracle"
-      version="10.1.3.1"/>      
     </extension>
    
 </plugin>
diff --git a/plugins/org.eclipse.jst.server.generic.oc4j/servers/oracle.10.1.3.1.serverdef b/plugins/org.eclipse.jst.server.generic.oc4j/servers/oracle.10.1.3.1.serverdef
deleted file mode 100644
index 21d800c..0000000
--- a/plugins/org.eclipse.jst.server.generic.oc4j/servers/oracle.10.1.3.1.serverdef
+++ /dev/null
@@ -1,164 +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="Oracle OC4J Standalone Server v10.1.3.1" version="v10.1.3.1">
-	
-	<property id="OC4J_HOME"
-		label = "%label.j2ee.home"
-		type="directory"
-		context="runtime"
-		default="C:/oracle/OC4J10.1.3.1/j2ee/home"/>
-		
-	<property id="oc4j.admin.user"
-		label="%label.admin.user"
-		type="string"
-		context="server"
-		default="oc4jadmin" />
-		
-	<property id="oc4j.admin.password"
-		label="%label.admin.pw"
-		type="string"
-		context="server"
-		default="welcome" />
-		
-	<property id="oc4j.admin.port"
-		label="%label.host.port"
-		type="string"
-		context="server"
-		default="23791" />
-		
-	<property id="oc4j.http.port"
-		label="%label.http.port"
-		type="string"
-		context="server"
-		default="8888" />	
-			
-	<property id="oc4j.bind.website"
-		label="%label.web.site"
-		type="string"
-		context="server"
-		default="default-web-site" />
-		
-	<port>
-		<no>${oc4j.http.port}</no>
-		<name>Http</name>
-		<protocol>http</protocol>
-	</port>
-	
-	<module>
-		<type>jst.web</type>
-		<publishDir>${OC4J_HOME}/applications</publishDir>
-		<publisherReference>org.eclipse.jst.server.generic.antpublisher</publisherReference>
-	</module>
-
-	<module>
-		<type>jst.ejb</type>
-		<publishDir>${OC4J_HOME}/applications</publishDir>
-		<publisherReference>org.eclipse.jst.server.generic.antpublisher</publisherReference>
-	</module>
-
-	<module>
-		<type>jst.ear</type>
-		<publishDir>${OC4J_HOME}/applications</publishDir>
-		<publisherReference>org.eclipse.jst.server.generic.antpublisher</publisherReference>
-	</module>	
-	
-	<project>
-		<classpathReference>oracle_oc4j</classpathReference>
-	</project>
-	
-	<start >
-		<mainClass>oracle.oc4j.loader.boot.BootStrap</mainClass>
-		<workingDirectory>${OC4J_HOME}</workingDirectory>
-		<programArguments></programArguments>
-		<vmParameters></vmParameters>
-		<classpathReference>oracle_boot</classpathReference>
-	</start>
-
-	<stop>
-	    <mainClass>com.evermind.client.orion.Oc4jAdminConsole</mainClass> 
-	    <workingDirectory>${OC4J_HOME}</workingDirectory>  
-	    <programArguments>ormi://localhost:${oc4j.admin.port} ${oc4j.admin.user} ${oc4j.admin.password} -shutdown </programArguments>
-	    <vmParameters></vmParameters>
-	    <classpathReference>oracle_admin</classpathReference>
-	</stop>
-	
-	<publisher id="org.eclipse.jst.server.generic.antpublisher">
-		<publisherdata>
-			<dataname>build.file</dataname>
-			<datavalue>/buildfiles/oracle.10.1.3.xml</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.publish.jst.web</dataname>
-			<datavalue>deploy.j2ee.web</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.publish.jst.ejb</dataname>
-			<datavalue>deploy.j2ee.ejb</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.publish.jst.ear</dataname>
-			<datavalue>deploy.j2ee.ear</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.unpublish.jst.web</dataname>
-			<datavalue>undeploy.j2ee.module</datavalue>
-		</publisherdata>
-		<publisherdata>
-			<dataname>target.unpublish.jst.ejb</dataname>
-			<datavalue>undeploy.j2ee.module</datavalue>
-		</publisherdata>	
-		<publisherdata>
-			<dataname>target.unpublish.jst.ear</dataname>
-			<datavalue>undeploy.j2ee.module</datavalue>
-		</publisherdata>		
-	</publisher>
-
-	<classpath id="oracle_admin">
-		<archive path="${OC4J_HOME}/admin.jar"/>
-	</classpath>
-	
-	<classpath id="oracle_boot">
-		<archive path="${OC4J_HOME}/oc4j.jar"/>
-	</classpath>
-	
-	<classpath id="oracle_oc4j">
-		<archive path="${OC4J_HOME}/oc4j.jar"/>
-		<archive path="${OC4J_HOME}/oc4jclient.jar"/>    		
-		<archive path="${OC4J_HOME}/lib/activation.jar"/>
-		<archive path="${OC4J_HOME}/lib/asm.jar"/>
-		<archive path="${OC4J_HOME}/lib/asm-attrs.jar"/>
-		<archive path="${OC4J_HOME}/lib/connector.jar"/>
-		<archive path="${OC4J_HOME}/lib/ejb.jar"/>
-		<archive path="${OC4J_HOME}/lib/ejb30.jar"/>
-		<archive path="${OC4J_HOME}/lib/jacc-api.jar"/>	
-		<archive path="${OC4J_HOME}/lib/javax77.jar"/>
-		<archive path="${OC4J_HOME}/lib/javax88.jar"/>		
-		<archive path="${OC4J_HOME}/lib/jax-qname-namespace.jar"/> 		
-		<archive path="${OC4J_HOME}/lib/jms.jar"/>
-		<archive path="${OC4J_HOME}/lib/jmx_remote_api.jar"/>		
-		<archive path="${OC4J_HOME}/lib/jta.jar"/>
-		<archive path="${OC4J_HOME}/lib/mail.jar"/>
-		<archive path="${OC4J_HOME}/lib/oc4j-unsupported-api.jar"/>
-		<archive path="${OC4J_HOME}/lib/servlet.jar"/>
-		<archive path="${OC4J_HOME}/../../lib/xmlparserv2.jar"/>
-		<archive path="${OC4J_HOME}/../../toplink/jlib/antlr.jar"/>
-		<archive path="${OC4J_HOME}/../../toplink/jlib/toplink.jar"/>		  		
-		<archive path="${OC4J_HOME}/../../toplink/jlib/toplink-essentials.jar"/>		  				
-		<archive path="${OC4J_HOME}/../../webservices/lib/soap.jar"/>
-		<archive path="${OC4J_HOME}/../../webservices/lib/wsdl.jar"/>		
-	</classpath>
-	
-	<jndiConnection>
-		<providerUrl>ormi://localhost:${oc4j.admin.port}</providerUrl>
-		<initialContextFactory>com.evermind.server.rmi.RMIInitialContextFactory</initialContextFactory>
-		<jndiProperty>
-			<name></name>
-			<value></value>
-		</jndiProperty>
-	</jndiConnection>
-
-</tns:ServerRuntime>
-
diff --git a/plugins/org.eclipse.jst.server.generic.ui/.classpath b/plugins/org.eclipse.jst.server.generic.ui/.classpath
index ce73933..751c8f2 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/.classpath
+++ b/plugins/org.eclipse.jst.server.generic.ui/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<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.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.generic.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jst.server.generic.ui/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 82a8388..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun Jan 21 14:33:06 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.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.generic.ui/META-INF/MANIFEST.MF
index 77aa114..0d32ba0 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.generic.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.server.generic.ui; singleton:=true
-Bundle-Version: 1.0.102.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-Activator: org.eclipse.jst.server.generic.ui.internal.GenericUiPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -13,8 +13,6 @@
  org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.debug.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jst.server.core;bundle-version="[1.0.102,1.2.0)",
- org.eclipse.jst.server.generic.core;bundle-version="[1.0.1,1.2.0)",
- org.eclipse.wst.server.core;bundle-version="[1.0.102,1.2.0)",
- org.eclipse.ui.forms;bundle-version="[3.2.0,4.0.0)"
+ org.eclipse.jst.server.generic.core;bundle-version="[1.0.100,1.2.0)",
+ org.eclipse.wst.server.core;bundle-version="[1.0.102,1.2.0)"
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.jst.server.generic.ui/icons/wizban/new_server_wiz.gif b/plugins/org.eclipse.jst.server.generic.ui/icons/wizban/new_server_wiz.gif
new file mode 100644
index 0000000..30de91f
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.generic.ui/icons/wizban/new_server_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.generic.ui/icons/wizban/new_server_wiz.png b/plugins/org.eclipse.jst.server.generic.ui/icons/wizban/new_server_wiz.png
deleted file mode 100644
index 577567c..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/icons/wizban/new_server_wiz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.generic.ui/plugin.xml b/plugins/org.eclipse.jst.server.generic.ui/plugin.xml
index bf8b19f..ba8f5f9 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/plugin.xml
+++ b/plugins/org.eclipse.jst.server.generic.ui/plugin.xml
@@ -26,13 +26,5 @@
       class="org.eclipse.jst.server.generic.ui.internal.GenericLaunchConfigurationTabGroup">
     </launchConfigurationTabGroup>
   </extension>
-  <extension point="org.eclipse.wst.server.ui.editorPageSections">
-      <section
-         id="org.eclipse.jst.server.generic.ui.internal.editor.serverProperties"
-         order="10"
-         insertionId="org.eclipse.wst.server.editor.overview.left"
-         typeIds="org.eclipse.jst.server.generic.*"
-         class="org.eclipse.jst.server.generic.ui.internal.editor.ServerPropertiesEditorSection">
-      </section>
-   </extension>   
+
 </plugin>
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericLaunchConfigurationTabGroup.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericLaunchConfigurationTabGroup.java
index 62a5547..5ec5c55 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericLaunchConfigurationTabGroup.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericLaunchConfigurationTabGroup.java
@@ -59,7 +59,7 @@
 	         IConfigurationElement[] elements = ExtensionPointUtil.getConfigurationElements(extension);
 	         for (int j = 0; j < elements.length; j++) {
 	        	 IConfigurationElement element = elements[j];
-	        	 String genericRuntimeID = element.getAttribute("id"); //$NON-NLS-1$
+	        	 String genericRuntimeID = element.getAttribute("id");
 	        	 IServerType[] serverTypes = ServerCore.getServerTypes();
 	        	 for (int k = 0; k < serverTypes.length; k++) {
 					if(serverTypes[k].hasRuntime() && serverTypes[k].getRuntimeType().getId().equals(genericRuntimeID))
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerRuntimeWizardFragment.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerRuntimeWizardFragment.java
index 2522a49..ba97604 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerRuntimeWizardFragment.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerRuntimeWizardFragment.java
@@ -30,161 +30,137 @@
  * 
  * @author Gorkem Ercan
  */
-public class GenericServerRuntimeWizardFragment extends
-        ServerDefinitionTypeAwareWizardFragment {
-
-    private GenericServerCompositeDecorator[] fDecorators;
-
-    /**
-     * Constructor
-     */
-    public GenericServerRuntimeWizardFragment() {
-        super();
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.wst.server.ui.wizard.IWizardFragment#isComplete()
-     */
-    public boolean isComplete() {
-        RuntimeDelegate runtime = getRuntimeDelegate();
-        if( runtime == null )
-            return false;
-        IStatus status = runtime.validate();
-        return (status != null && status.isOK());
-    }
-
-    public void createContent( Composite parent, IWizardHandle handle ) {
-        Map properties = null;
-        ServerRuntime definition = null;
-        if( getRuntimeDelegate() != null )
-        {
-            properties = getRuntimeDelegate().getServerInstanceProperties();
-            definition = getServerTypeDefinition( getServerDefinitionId(),
-                    properties );
+public class GenericServerRuntimeWizardFragment extends ServerDefinitionTypeAwareWizardFragment {
+	
+	private GenericServerCompositeDecorator[] fDecorators;
+	
+	
+	/**
+	 * Constructor
+	 */
+	public GenericServerRuntimeWizardFragment() {
+		super();
+	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.server.ui.wizard.IWizardFragment#isComplete()
+	 */
+	public boolean isComplete() {
+	  	RuntimeDelegate runtime = getRuntimeDelegate();
+		if (runtime == null)
+			return false;
+		IStatus status = runtime.validate();
+		return (status != null && status.isOK());
+	}
+	
+	public void createContent(Composite parent, IWizardHandle handle) {		
+		Map properties= null;
+		ServerRuntime definition=null;
+        if(getRuntimeDelegate()!=null){
+ 			properties = getRuntimeDelegate().getServerInstanceProperties();
+			definition = getServerTypeDefinition(getServerDefinitionId(),properties);
+		}       
+        IInstallableRuntime ir = ServerPlugin.findInstallableRuntime(getRuntimeDelegate().getRuntime().getRuntimeType().getId());
+        if (ir!= null){	
+        	fDecorators= new GenericServerCompositeDecorator[3]; 
+        	fDecorators[0]= new JRESelectDecorator(getRuntimeDelegate());
+        	fDecorators[1]= new ServerTypeDefinitionRuntimeDecorator(definition,properties,getWizard(),getRuntimeDelegate());
+        	fDecorators[2]= new InstallableRuntimeDecorator(getWizard(), getRuntimeDelegate());
         }
-        IInstallableRuntime ir = ServerPlugin
-                .findInstallableRuntime( getRuntimeDelegate().getRuntime()
-                        .getRuntimeType().getId() );
-        if( ir != null )
-        {
-            fDecorators = new GenericServerCompositeDecorator[3];
-            fDecorators[0] = new JRESelectDecorator( getRuntimeDelegate() );
-            fDecorators[1] = new ServerTypeDefinitionRuntimeDecorator(
-                    definition, properties, getWizard(), getRuntimeDelegate() );
-            fDecorators[2] = new InstallableRuntimeDecorator( getWizard(),
-                    getRuntimeDelegate() );
-        } else
-        {
-            fDecorators = new GenericServerCompositeDecorator[2];
-            fDecorators[0] = new JRESelectDecorator( getRuntimeDelegate() );
-            fDecorators[1] = new ServerTypeDefinitionRuntimeDecorator(
-                    definition, properties, getWizard(), getRuntimeDelegate() );
+        else{
+        	fDecorators= new GenericServerCompositeDecorator[2]; 
+        	fDecorators[0]= new JRESelectDecorator(getRuntimeDelegate());
+        	fDecorators[1]= new ServerTypeDefinitionRuntimeDecorator(definition,properties,getWizard(),getRuntimeDelegate());
         }
+		
+		new GenericServerComposite(parent,fDecorators);
+	}
 
-        new GenericServerComposite( parent, fDecorators );
-    }
+	
+	private String getServerDefinitionId(){
+		String currentDefinition= null;
+		if(getRuntimeDelegate()!=null)
+			currentDefinition =  getRuntimeDelegate().getRuntime().getRuntimeType().getId();
+		if(currentDefinition!= null && currentDefinition.length()>0)
+		{	
+			return currentDefinition;
+		}
+		return null;
+	}
+	
+	
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.server.ui.wizard.IWizardFragment#enter()
+	 */
+	public void enter() {
+	    if(getRuntimeDelegate()!=null)
+			getRuntimeDelegate().getRuntimeWorkingCopy().setName(createName());
+	    
+	    for (int i = 0; i < fDecorators.length; i++) {
+			if(fDecorators[i].validate())
+				return;
+		}
+	}
+	
+	public void exit() {
+		//validate to save latest values
+	    for (int i = 0; i < fDecorators.length; i++) {
+			if(fDecorators[i].validate())
+				return;
+		}
+	}
 
-    private String getServerDefinitionId() {
-        String currentDefinition = null;
-        if( getRuntimeDelegate() != null )
-            currentDefinition = getRuntimeDelegate().getRuntime()
-                    .getRuntimeType().getId();
-        if( currentDefinition != null && currentDefinition.length() > 0 )
-        {
-            return currentDefinition;
-        }
-        return null;
-    }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.wst.server.ui.wizard.IWizardFragment#enter()
-     */
-    public void enter() {
-        if( getRuntimeDelegate() != null )
-            getRuntimeDelegate().getRuntimeWorkingCopy().setName( createName() );
-
-        for( int i = 0; i < fDecorators.length; i++ )
-        {
-            if( fDecorators[i].validate() )
-                return;
-        }
-    }
-
-    public void exit() {
-        // validate to save latest values
-        for( int i = 0; i < fDecorators.length; i++ )
-        {
-            if( fDecorators[i].validate() )
-                return;
-        }
-    }
-
-    private String createName() {
-        RuntimeDelegate dl = getRuntimeDelegate();
-        IRuntimeType runtimeType = dl.getRuntime().getRuntimeType();
-        String name = GenericServerUIMessages.bind(
-                GenericServerUIMessages.runtimeName, runtimeType.getName() );
-        IRuntime[] list = ServerCore.getRuntimes();
-        int suffix = 1;
-        String suffixName = name;
-        for( int i = 0; i < list.length; i++ )
-        {
-            if( (list[i].getName().equals( name ) || list[i].getName().equals(
-                    suffixName ))
-                    && !list[i].equals( dl.getRuntime() ) )
-                suffix++;
-            suffixName = name + ' ' + suffix;
-        }
-
-        if( suffix > 1 )
-            return suffixName;
-        return name;
-    }
-
-    private GenericServerRuntime getRuntimeDelegate() {
-        IRuntimeWorkingCopy wc = (IRuntimeWorkingCopy) getTaskModel()
-                .getObject( TaskModel.TASK_RUNTIME );
-        if( wc == null )
-            return null;
-        return (GenericServerRuntime) wc.loadAdapter(
-                GenericServerRuntime.class, new NullProgressMonitor() );
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
+	private String createName()
+	{
+	    RuntimeDelegate dl = getRuntimeDelegate();
+	    IRuntimeType runtimeType = dl.getRuntime().getRuntimeType();
+	    String name = GenericServerUIMessages.bind(GenericServerUIMessages.runtimeName,runtimeType.getName());
+		IRuntime[] list = ServerCore.getRuntimes();
+		int suffix = 1;
+		String suffixName=name;
+		for(int i=0;i<list.length;i++)
+	    {
+	        if((list[i].getName().equals(name)|| list[i].getName().equals(suffixName))&& !list[i].equals(dl.getRuntime()))
+	            suffix++;
+	        suffixName= name+" "+suffix;
+	    }
+	    
+		if(suffix>1)
+		    return suffixName;
+	    return name;
+	}
+	
+	private GenericServerRuntime getRuntimeDelegate(){
+		IRuntimeWorkingCopy wc = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
+		if (wc == null)
+			return null;
+		return (GenericServerRuntime) wc.loadAdapter(GenericServerRuntime.class, new NullProgressMonitor());
+	}
+    /* (non-Javadoc)
      * @see org.eclipse.jst.server.generic.internal.ui.ServerDefinitionTypeAwareWizardFragment#description()
      */
     public String description() {
         String rName = getRuntimeName();
-        if( rName == null || rName.length() < 1 )
-            rName = "Generic"; //$NON-NLS-1$
-        return GenericServerUIMessages.bind(
-                GenericServerUIMessages.runtimeWizardDescription, rName );
+        if(rName == null || rName.length()<1)
+            rName="Generic";      
+        return  GenericServerUIMessages.bind(GenericServerUIMessages.runtimeWizardDescription,rName);
     }
-
-    /*
-     * (non-Javadoc)
-     * 
+    /* (non-Javadoc)
      * @see org.eclipse.jst.server.generic.internal.ui.ServerDefinitionTypeAwareWizardFragment#title()
      */
     public String title() {
         String rName = getRuntimeName();
-        if( rName == null || rName.length() < 1 )
-            rName = "Generic"; //$NON-NLS-1$
-        return GenericServerUIMessages.bind(
-                GenericServerUIMessages.runtimeWizardTitle, rName );
+        if(rName == null || rName.length()<1)
+            rName="Generic";
+       return GenericServerUIMessages.bind(GenericServerUIMessages.runtimeWizardTitle,rName);
     }
-
-    private String getRuntimeName() {
-        if( getRuntimeDelegate() != null
-                && getRuntimeDelegate().getRuntime() != null )
+    
+    private String getRuntimeName()
+    {
+       if(getRuntimeDelegate()!=null && getRuntimeDelegate().getRuntime()!=null)
             return getRuntimeDelegate().getRuntime().getName();
         return null;
     }
-
+    
 }
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.java
index 5f467c3..e238062 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.java
@@ -19,9 +19,7 @@
 public class GenericServerUIMessages extends NLS{
 
 	private static final String RESOURCE_BUNDLE= "org.eclipse.jst.server.generic.ui.internal.GenericServerUIMessages";//$NON-NLS-1$
-	public static String ServerEditorSectionDescription;
-    public static String ServerEditorSectionTitle;
-    public static String serverTypeGroup_label_browse;
+	public static String serverTypeGroup_label_browse;
 	public static String runtimeName;
 	public static String runtimeWizardDescription;
 	public static String runtimeWizardTitle;
@@ -40,7 +38,6 @@
 	}
 
 	public static String emptyPath;
-    public static String UpdateOperationDescription;
 
 
 }
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.properties b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.properties
index 3ea918e..6a7c681 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.properties
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerUIMessages.properties
@@ -21,6 +21,3 @@
 defaultJRE = Default JRE
 invalidPath = {0} is not valid
 emptyPath=Specify a valid path
-ServerEditorSectionTitle=Server Properties
-ServerEditorSectionDescription=Modify settings for the server.
-UpdateOperationDescription=Update generic server property
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerWizardFragment.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerWizardFragment.java
index 00ca40e..91003b2 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerWizardFragment.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericServerWizardFragment.java
@@ -23,72 +23,59 @@
 import org.eclipse.wst.server.core.ServerCore;
 import org.eclipse.wst.server.core.TaskModel;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
-
 /**
  * 
- * 
+ *
  * @author Gorkem Ercan
  */
-public class GenericServerWizardFragment extends
-        ServerDefinitionTypeAwareWizardFragment {
-    private GenericServerCompositeDecorator[] fDecorators;
+public class GenericServerWizardFragment extends ServerDefinitionTypeAwareWizardFragment 
+{
+	private GenericServerCompositeDecorator[] fDecorators;
 
-    /**
-     * 
-     */
-    public boolean isComplete() {
+	/**
+	 * 
+	 */
+	public boolean isComplete() {
 
-        ServerRuntime serverRuntime = getServerTypeDefinitionFor( getServer() );
-        if( serverRuntime == null )
-            return false;
+		ServerRuntime serverRuntime = getServerTypeDefinitionFor(getServer());
+		if(serverRuntime==null)
+		    return false;
 
-        IServerWorkingCopy server = getServer();
-        GenericServer dl = (GenericServer) server.loadAdapter(
-                GenericServer.class, null );
+		IServerWorkingCopy server = getServer();
+		GenericServer dl= (GenericServer)server.loadAdapter(GenericServer.class,null);
 
-        IStatus status = dl.validate();
-        return (status != null && status.isOK());
+		IStatus status = dl.validate();
+		return (status != null && status.isOK());
+		
+	}
 
-    }
-
-    public void createContent( Composite parent, IWizardHandle handle ) {
-        IServerWorkingCopy server = getServer();
-        GenericServer dl = (GenericServer) server.loadAdapter(
-                GenericServer.class, null );
-        ServerRuntime definition = getServerTypeDefinitionFor( server );
-        fDecorators = new GenericServerCompositeDecorator[1];
-        fDecorators[0] = new ServerTypeDefinitionServerDecorator( definition,
-                null, getWizard(), dl );
-        new GenericServerComposite( parent, fDecorators );
-
-    }
-
-    /**
+	public void createContent(Composite parent, IWizardHandle handle){
+		IServerWorkingCopy server = getServer();
+		GenericServer dl= (GenericServer)server.loadAdapter(GenericServer.class,null);
+		ServerRuntime definition = getServerTypeDefinitionFor(server);
+		fDecorators = new GenericServerCompositeDecorator[1];
+		fDecorators[0]=new ServerTypeDefinitionServerDecorator(definition,null,getWizard(),dl);
+		new GenericServerComposite(parent,fDecorators);
+		
+	}
+	/**
      * @param server
      * @return
      */
-    private ServerRuntime getServerTypeDefinitionFor( IServerWorkingCopy server ) {
-        GenericServerRuntime runtime = (GenericServerRuntime) server
-                .getRuntime().getAdapter( GenericServerRuntime.class );
-        if( runtime == null )
-        {
-            IRuntime wc = (IRuntime) getTaskModel().getObject(
-                    TaskModel.TASK_RUNTIME );
-            runtime = (GenericServerRuntime) wc
-                    .getAdapter( GenericServerRuntime.class );
-            if( runtime == null )
-                runtime = (GenericServerRuntime) wc.loadAdapter(
-                        GenericServerRuntime.class, new NullProgressMonitor() );
-        }
-        String serverTyepId = server.getServerType().getId();
-        String runtimeTypeId = runtime.getRuntime().getRuntimeType().getId();
-        if( runtimeTypeId == null )
-        {
+    private ServerRuntime getServerTypeDefinitionFor(IServerWorkingCopy server) {        
+        GenericServerRuntime runtime = (GenericServerRuntime)server.getRuntime().getAdapter(GenericServerRuntime.class);
+        if(runtime==null){
+            IRuntime wc = (IRuntime)getTaskModel().getObject(TaskModel.TASK_RUNTIME);
+            runtime= (GenericServerRuntime)wc.getAdapter(GenericServerRuntime.class);
+            if(runtime==null)
+            	runtime= (GenericServerRuntime)wc.loadAdapter(GenericServerRuntime.class,new NullProgressMonitor());
+        }        
+        String id = runtime.getRuntime().getRuntimeType().getId();
+        if(id==null){   
             return null;
         }
         Map runtimeProperties = runtime.getServerInstanceProperties();
-        ServerRuntime definition = getServerTypeDefinition( serverTyepId,
-                runtimeTypeId, runtimeProperties );
+		ServerRuntime definition = getServerTypeDefinition(id,runtimeProperties);
         return definition;
     }
 
@@ -96,83 +83,66 @@
      * @return
      */
     private IServerWorkingCopy getServer() {
-        IServerWorkingCopy server = (IServerWorkingCopy) getTaskModel()
-                .getObject( TaskModel.TASK_SERVER );
+        IServerWorkingCopy server = (IServerWorkingCopy)getTaskModel().getObject(TaskModel.TASK_SERVER);
         return server;
     }
 
-    private boolean isNameInUse( String name ) {
-        IServer[] servers = ServerCore.getServers();
-        for( int i = 0; i < servers.length; i++ )
-        {
-            if( !servers[i].equals( getServer().getOriginal() )
-                    && (servers[i].getName().equals( name )) )
-                return true;
-        }
-        return false;
+    private boolean isNameInUse(String name){
+       	IServer[] servers =ServerCore.getServers();   	
+    	for (int i = 0; i < servers.length; i++) {
+			if(!servers[i].equals(getServer().getOriginal()) && (servers[i].getName().equals(name) ))
+				return true;
+		}
+    	return false;
     }
-
-    private String createName() {
-        String name = GenericServerUIMessages.bind(
-                GenericServerUIMessages.serverName, getServerTypeDefinitionFor(
-                        getServer() ).getName() );
-        int suffix = 1;
-        String suffixName = name;
-        while( isNameInUse( suffixName ) )
-        {
-            suffixName = name + ' ' + suffix;
-            suffix++;
-        }
-        return suffixName;
+    
+    private String createName(){
+    	String name = GenericServerUIMessages.bind(GenericServerUIMessages.serverName,getServerTypeDefinitionFor(getServer()).getName());
+    	int suffix=1;
+    	String suffixName =name;
+    	while(isNameInUse(suffixName)){
+    		suffixName = name+" "+suffix;
+    		suffix++;
+    	}
+    	return suffixName;
     }
-
     public void enter() {
-        getServer().setName( createName() );
-        for( int i = 0; i < fDecorators.length; i++ )
-        {
-            if( fDecorators[i].validate() )
-                return;
-        }
-    }
-
-    public void exit() {
-        // validate needed to save the latest values.
-        for( int i = 0; i < fDecorators.length; i++ )
-        {
-            if( fDecorators[i].validate() )
-                return;
-        }
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
+    	getServer().setName(createName());
+	    for (int i = 0; i < fDecorators.length; i++) {
+			if(fDecorators[i].validate())
+				return;
+		}
+     }
+	public void exit() {
+	    //validate needed to save the latest values.
+		for (int i = 0; i < fDecorators.length; i++) {
+			if(fDecorators[i].validate())
+				return;
+		}
+	}	
+    /* (non-Javadoc)
      * @see org.eclipse.jst.server.generic.internal.ui.ServerDefinitionTypeAwareWizardFragment#description()
      */
     public String description() {
         String sName = getServerName();
-        if( sName == null || sName.length() < 1 )
-            sName = "Generic"; //$NON-NLS-1$
-        return GenericServerUIMessages.bind(
-                GenericServerUIMessages.serverWizardDescription, sName );
+        if(sName==null || sName.length()<1)
+            sName="Generic";
+        return  GenericServerUIMessages.bind(GenericServerUIMessages.serverWizardDescription,sName);
     }
 
-    private String getServerName() {
-        if( getServer() != null && getServer().getRuntime() != null )
-            return getServer().getRuntime().getRuntimeType().getName();
+    private String getServerName()
+    {
+        if(getServer()!=null && getServer().getRuntime()!=null)
+           return getServer().getRuntime().getRuntimeType().getName();
         return null;
     }
-
-    /*
-     * (non-Javadoc)
-     * 
+    /* (non-Javadoc)
      * @see org.eclipse.jst.server.generic.internal.ui.ServerDefinitionTypeAwareWizardFragment#title()
      */
     public String title() {
-        String sName = getServerName();
-        if( sName == null || sName.length() < 1 )
-            sName = "Generic"; //$NON-NLS-1$
-        return GenericServerUIMessages.bind(
-                GenericServerUIMessages.serverWizardTitle, sName );
+        String sName= getServerName();
+        if(sName==null || sName.length()<1)
+            sName="Generic";
+        return  GenericServerUIMessages.bind(GenericServerUIMessages.serverWizardTitle,sName);
     }
 }
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericUiPlugin.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericUiPlugin.java
index d56c219..fff5a81 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericUiPlugin.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/GenericUiPlugin.java
@@ -22,12 +22,7 @@
  */
 public class GenericUiPlugin extends AbstractUIPlugin {
 	
-	/**
-	 * Plug-in ID
-	 */
-	public static final String PLUGIN_ID = "org.eclipse.jst.server.generic.ui"; //$NON-NLS-1$
-	
-    public static final String WIZBAN_IMAGE = "genericlogo"; //$NON-NLS-1$
+    public static final String WIZBAN_IMAGE = "genericlogo";
     //The shared instance.
 	private static GenericUiPlugin plugin;
 	//Resource bundle.
@@ -40,7 +35,7 @@
 		super();
 		plugin = this;
 		try {
-			resourceBundle = ResourceBundle.getBundle("org.eclipse.jst.server.generic.ui.GenericUiPluginResources"); //$NON-NLS-1$
+			resourceBundle = ResourceBundle.getBundle("org.eclipse.jst.server.generic.ui.GenericUiPluginResources");
 		} catch (MissingResourceException x) {
 			resourceBundle = null;
 		}
@@ -82,8 +77,8 @@
 
     protected ImageRegistry createImageRegistry() {
         ImageRegistry registry = new ImageRegistry();
-        ImageDescriptor desc = ImageDescriptor.createFromURL(getDefault().getBundle().getEntry("/icons/wizban/new_server_wiz.png")); //$NON-NLS-1$
-        registry.put(WIZBAN_IMAGE, desc);
+        ImageDescriptor desc = ImageDescriptor.createFromURL(getDefault().getBundle().getEntry("/icons/wizban/new_server_wiz.gif"));
+        registry.put(WIZBAN_IMAGE,desc);
         return registry;
     }
   	public ImageDescriptor imageDescriptor(String key){
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/InstallableRuntimeDecorator.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/InstallableRuntimeDecorator.java
index 1a4ccd5..f5dbad3 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/InstallableRuntimeDecorator.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/InstallableRuntimeDecorator.java
@@ -51,17 +51,20 @@
 										new NullProgressMonitor());
 							} catch (CoreException e) {
 								Trace.trace(Trace.SEVERE,
-										"Error installing runtime", e); //$NON-NLS-1$
+										"Error installing runtime", e);
 							}
 						}
 					};
 					
 					try {
 						fWizard.run(true, false, runnable);
-					
+					} catch (InterruptedException e) {
+						e.printStackTrace();
+					} catch (InvocationTargetException e) {
+						e.printStackTrace();
 					} catch (Exception e) {
 						Trace.trace(Trace.SEVERE,
-								"Error installing runtime", e); //$NON-NLS-1$
+								"Error installing runtime", e);
 					}
 
 				}
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/JRESelectDecorator.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/JRESelectDecorator.java
index 5b0173d..e54bbf1 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/JRESelectDecorator.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/JRESelectDecorator.java
@@ -96,7 +96,7 @@
 	
 	protected boolean showPreferencePage(GenericServerComposite composite) {
 		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
-		IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage");  //$NON-NLS-1$//$NON-NLS-2$
+		IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage");
 		PreferenceManager manager2 = new PreferenceManager();
 		manager2.addToRoot(node);
 		final PreferenceDialog dialog = new PreferenceDialog(composite.getShell(), manager2);
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/SWTUtil.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/SWTUtil.java
index d29ee93..4964138 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/SWTUtil.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/SWTUtil.java
@@ -13,26 +13,15 @@
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.FontMetrics;
 import org.eclipse.swt.graphics.GC;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.forms.FormColors;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-
 /**
- * SWT Utilities.
- * 
- * @author Gorkem Ercan
+ * SWT Utility class.
+ * Copied from org.eclipse.wst.server.ui.internal.
  */
 public class SWTUtil {
 	private static FontMetrics fontMetrics;
@@ -49,19 +38,15 @@
 	 * Returns a width hint for a button control.
 	 */
 	protected static int getButtonWidthHint(Button button) {
-		int widthHint = Dialog.convertHorizontalDLUsToPixels(fontMetrics,
-				IDialogConstants.BUTTON_WIDTH);
-		return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT,
-				true).x);
+		int widthHint = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.BUTTON_WIDTH);
+		return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
 	}
 
 	/**
 	 * Create a new button with the standard size.
 	 * 
-	 * @param comp
-	 *            the component to add the button to
-	 * @param label
-	 *            the button label
+	 * @param comp the component to add the button to
+	 * @param label the button label
 	 * @return a button
 	 */
 	public static Button createButton(Composite comp, String label) {
@@ -69,20 +54,17 @@
 		b.setText(label);
 		if (fontMetrics == null)
 			initializeDialogUnits(comp);
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL
-				| GridData.VERTICAL_ALIGN_BEGINNING);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
 		data.widthHint = getButtonWidthHint(b);
 		b.setLayoutData(data);
 		return b;
 	}
-
+	
 	/**
 	 * Convert DLUs to pixels.
 	 * 
-	 * @param comp
-	 *            a component
-	 * @param x
-	 *            pixels
+	 * @param comp a component
+	 * @param x pixels
 	 * @return dlus
 	 */
 	public static int convertHorizontalDLUsToPixels(Composite comp, int x) {
@@ -94,10 +76,8 @@
 	/**
 	 * Convert DLUs to pixels.
 	 * 
-	 * @param comp
-	 *            a component
-	 * @param y
-	 *            pixels
+	 * @param comp a component
+	 * @param y pixels
 	 * @return dlus
 	 */
 	public static int convertVerticalDLUsToPixels(Composite comp, int y) {
@@ -105,277 +85,4 @@
 			initializeDialogUnits(comp);
 		return Dialog.convertVerticalDLUsToPixels(fontMetrics, y);
 	}
-
-	/**
-	 * Creates a label, text and a button to open a directory dialog.
-	 * 
-	 * @param title
-	 * @param value
-	 * @param parent
-	 * @return Text that holds value
-	 * 
-	 */
-	public static Text createLabeledPath(String title, String value, final Composite parent) {
-		return SWTUtil.createLabeledPath(title, value, parent, null);
-	}
-
-	/**
-	 * Creates a label, text and a button to open a directoty dialog. This
-	 * method creates Forum UI compatible widgets.
-	 * 
-	 * @param title
-	 * @param value
-	 * @param parent
-	 * @param toolkit
-	 * @return Text that holds value
-	 */
-	public static Text createLabeledPath(String title, String value, final Composite parent, FormToolkit toolkit) {
-		Label label = null;
-		Text cText = null;
-		Button button = null;
-
-		if (toolkit == null) {
-            label = new Label(parent, SWT.WRAP);
-            label.setText(title);
-			cText = new Text(parent, SWT.SHADOW_IN | SWT.BORDER);
-			button = SWTUtil.createButton(parent,
-					GenericServerUIMessages.serverTypeGroup_label_browse);
-		} else {
-			createFormLabel(title, parent, toolkit);
-			cText = toolkit.createText(parent, value);
-			button = toolkit.createButton(parent,
-					GenericServerUIMessages.serverTypeGroup_label_browse,
-					SWT.PUSH);
-		}
-
-		GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
-		gridData.horizontalSpan = 1;
-
-		final Text text = cText;
-		text.setLayoutData(gridData);
-		text.setText(value);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				DirectoryDialog dlg = new DirectoryDialog(parent.getShell());
-				dlg.setFilterPath(text.getText().replace('\\', '/'));
-				String res = dlg.open();
-				if (res != null) {
-					text.setText(res.replace('\\', '/'));
-				}
-			}
-
-			public void widgetDefaultSelected(SelectionEvent e) {
-				widgetSelected(e);
-			}
-
-		});
-
-		return text;
-	}
-
-	/**
-	 * Creates a label, text and a button thats opens a file dialog
-	 * 
-	 * @param title
-	 * @param value
-	 * @param parent
-	 * @return Text that holds the value
-	 */
-	public static Text createLabeledFile(String title, String value, final Composite parent) {
-		return SWTUtil.createLabeledFile(title, value, parent, null);
-	}
-
-	/**
-	 * Creates a label, text and a button thats opens a file dialog. This method
-	 * is used for creating Form UI compatible widgets
-	 * 
-	 * @param title
-	 * @param value
-	 * @param parent
-	 * @param toolkit
-	 * @return
-	 */
-	public static Text createLabeledFile(String title, String value, final Composite parent, FormToolkit toolkit) {
-
-		Label label;
-		Text cText;
-		Button button;
-		if (toolkit == null) {
-			label = new Label(parent, SWT.WRAP);
-			label.setText(title);
-			cText = new Text(parent, SWT.SHADOW_IN | SWT.BORDER);
-			button = SWTUtil.createButton(parent,
-					GenericServerUIMessages.serverTypeGroup_label_browse);
-		} else {
-			createFormLabel(title, parent, toolkit);
-			cText = toolkit.createText(parent, value);
-			button = toolkit.createButton(parent,
-					GenericServerUIMessages.serverTypeGroup_label_browse,
-					SWT.PUSH);
-		}
-		final Text text = cText;
-		GridData gridData = new GridData(GridData.FILL_HORIZONTAL
-				| GridData.GRAB_HORIZONTAL);
-		gridData.horizontalSpan = 1;
-		text.setLayoutData(gridData);
-		text.setText(value);
-		button.addSelectionListener(new SelectionListener() {
-			public void widgetSelected(SelectionEvent e) {
-				FileDialog dlg = new FileDialog(parent.getShell());
-				dlg.setFileName(text.getText().replace('\\', '/'));
-				String res = dlg.open();
-				if (res != null) {
-					text.setText(res.replace('\\', '/'));
-				}
-			}
-
-			public void widgetDefaultSelected(SelectionEvent e) {
-				widgetSelected(e);
-			}
-
-		});
-
-		return text;
-	}
-
-	/**
-	 * Creates a label and a text
-	 * 
-	 * @param title
-	 * @param value
-	 * @param parent
-	 * @return Text object that holds the value
-	 */
-	public static Text createLabeledText(String title, String value, Composite parent) {
-		return SWTUtil.createLabeledText( title, value, parent, null );
-	}
-
-	/**
-	 * Creates a label and a text. This method created form ui compatible
-	 * widgets
-	 * 
-	 * @param title
-	 * @param value
-	 * @param parent
-	 * @param toolkit
-	 * @return Text control that holds the value
-	 */
-	public static Text createLabeledText(String title, String value, Composite parent, FormToolkit toolkit) {
-
-		Label label;
-		Text text;
-		if (toolkit == null) {
-			label = new Label(parent, SWT.WRAP);
-			label.setText(title);
-			text = new Text(parent, SWT.SHADOW_IN | SWT.BORDER);
-		} else {
-			createFormLabel(title, parent, toolkit);
-			text = toolkit.createText(parent, value);
-		}
-
-		GridData gridData = new GridData(GridData.FILL_HORIZONTAL
-				| GridData.GRAB_HORIZONTAL);
-		gridData.horizontalSpan = 2;
-		text.setLayoutData(gridData);
-		text.setText(value);
-
-		return text;
-	}
-
-	/**
-	 * Creates a CHECK style button and label
-	 * 
-	 * @param title
-	 * @param value
-	 * @param parent
-	 * @return Check Button
-	 */
-	public static Button createLabeledCheck(String title, boolean value, Composite parent) {
-		return SWTUtil.createLabeledCheck(title, value, parent, null);
-	}
-
-	/**
-	 * Creates a CHECK style button and label. This method is form ui compatible
-	 * 
-	 * @param title
-	 * @param value
-	 * @param parent
-	 * @param toolkit
-	 * @return
-	 */
-	public static Button createLabeledCheck(String title, boolean value, Composite parent, FormToolkit toolkit) {
-		Label label;
-		Button button;
-		if (toolkit == null) {
-			label = new Label(parent, SWT.WRAP);
-			label.setText(title);
-			button = new Button(parent, SWT.CHECK);
-		} else {
-			createFormLabel(title, parent, toolkit);
-			button = toolkit.createButton(parent, null, SWT.CHECK);
-		}
-
-		GridData gridData = new GridData(GridData.FILL_HORIZONTAL
-				| GridData.GRAB_HORIZONTAL);
-		gridData.horizontalSpan = 2;
-		button.setLayoutData(gridData);
-		button.setSelection(value);
-		return button;
-	}
-
-	/**
-	 * Creates a label and an editable Combo.
-	 * 
-	 * @param title
-	 * @param values
-	 * @param parent
-	 * @return Combo
-	 */
-	public static Combo createLabeledCombo(String title, String[] values,Composite parent) {
-		return SWTUtil.createLabeledCombo(title, values, parent, null);
-	}
-
-	/**
-	 * Creates a label and an editable Combo
-	 * 
-	 * @param title
-	 * @param values
-	 * @param parent
-	 * @param toolkit
-	 * @return Combo
-	 */
-	public static Combo createLabeledCombo(String title, String[] values, Composite parent, FormToolkit toolkit) {
-
-		Label label;
-
-		if (toolkit == null) {
-			label = new Label(parent, SWT.WRAP);
-			label.setText(title);
-		} else {
-			createFormLabel(title, parent, toolkit);
-		}
-		Combo combo = new Combo(parent, SWT.READ_ONLY);
-		if (toolkit != null) {
-			toolkit.adapt(combo, true, true);
-		}
-
-		GridData gridData = new GridData(GridData.FILL_HORIZONTAL
-				| GridData.GRAB_HORIZONTAL);
-		gridData.horizontalSpan = 2;
-		combo.setLayoutData(gridData);
-
-		for (int i = 0; i < values.length; i++) {
-			combo.add(values[i]);
-		}
-		if (combo.getItemCount() > 0)
-			combo.select(0);
-		return combo;
-	}
-
-	private static Label createFormLabel(String title, Composite parent, FormToolkit toolkit) {
-		Label label;
-		label = toolkit.createLabel(parent, title);
-		label.setForeground(toolkit.getColors().getColor(FormColors.TITLE));
-		return label;
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerDefinitionTypeAwareWizardFragment.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerDefinitionTypeAwareWizardFragment.java
index 1132884..1a910d1 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerDefinitionTypeAwareWizardFragment.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerDefinitionTypeAwareWizardFragment.java
@@ -77,18 +77,4 @@
 	{
 	    return CorePlugin.getDefault().getServerTypeDefinitionManager().getServerRuntimeDefinition(definitionID,properties);
 	}
-
-    /**
-     * Retuns the ServerRuntime.
-     * @param serverTypeId
-     * @param runtimeTypeId
-     * @param properties
-     * @return
-     */ 
-    protected ServerRuntime getServerTypeDefinition(String serverTypeId, String runtimeTypeId, Map properties)
-    {
-        return CorePlugin.getDefault().getServerTypeDefinitionManager().getServerRuntimeDefinition(serverTypeId, runtimeTypeId, properties);
-    }
-
 }
-
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionDecorator.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionDecorator.java
index 3e43573..9ea43f8 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionDecorator.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionDecorator.java
@@ -15,18 +15,27 @@
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
+
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jst.server.generic.servertype.definition.Property;
 import org.eclipse.jst.server.generic.servertype.definition.ServerRuntime;
 import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
+import org.eclipse.jst.server.generic.ui.internal.SWTUtil;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 /**
  * Provides the UI objects for gathering user information
@@ -41,7 +50,7 @@
 	private ServerRuntime fDefinition;
     private Map fProperties;
 	private String fContext;
-	private String fLastMessage;
+	private String fLastMessage = null;
 	protected IWizardHandle fWizard;
 	private List fPropertyControls= new ArrayList();
 
@@ -110,50 +119,179 @@
 	
     private void createPropertyControl(Composite parent, Property property){
     	if( Property.TYPE_DIRECTORY.equals(property.getType())) {
-    		Text path = SWTUtil.createLabeledPath(property.getLabel(),getPropertyValue(property),parent);
+    		Text path = createLabeledPath(property.getLabel(),getPropertyValue(property),parent);
     		path.setData(property);
-    		path.addModifyListener(new PathModifyListener());
     		registerControl(path);
      	} else if( Property.TYPE_FILE.equals(property.getType())) {
-    	    Text file = SWTUtil.createLabeledFile(property.getLabel(),getPropertyValue(property),parent);
+    	    Text file = createLabeledFile(property.getLabel(),getPropertyValue(property),parent);
     		file.setData(property);
-    		file.addModifyListener(new PathModifyListener());
     		registerControl(file);
+       	} else if( Property.TYPE_TEXT.equals(property.getType())) {
+    	    Text str = createLabeledText(property.getLabel(),getPropertyValue(property),parent);
+    		str.setData(property);
+    		registerControl(str);
        	} else if( Property.TYPE_BOOLEAN.equals(property.getType())) {
-    	    Button bool =SWTUtil.createLabeledCheck(property.getLabel(),("true".equals( getPropertyValue(property))),	parent); //$NON-NLS-1$
+    	    Button bool =createLabeledCheck(property.getLabel(),("true".equals( getPropertyValue(property))),	parent); //$NON-NLS-1$
     		bool.setData(property);
     		registerControl(bool);
        	}else if(Property.TYPE_SELECT.equals(property.getType())) {
-    		StringTokenizer tokenizer = new StringTokenizer(property.getDefault(),","); //$NON-NLS-1$
-    		int tokenCount = tokenizer.countTokens();
-    		String[] values = new String[tokenCount];
-    		int i =0;
-    		while(tokenizer.hasMoreTokens() && i<tokenCount){
-    			values[i]=tokenizer.nextToken();
-    			i++;
-    		}
-       		Combo combo = SWTUtil.createLabeledCombo(property.getLabel(),values, parent);
+       		Combo combo = createLabeledCombo(parent, property);
        		combo.setData(property);
        		registerControl(combo);
        	}
-       	else {//default is TEXT
-    	    Text defaultText= SWTUtil.createLabeledText(property.getLabel(),getPropertyValue(property),parent);
+       	else  {
+    	    Text defaultText= createLabeledText(property.getLabel(),getPropertyValue(property),parent);
     		defaultText.setData(property);
     		registerControl(defaultText);
     	}
     }
 
-	private void registerControl(Control control)
+	private Combo createLabeledCombo(Composite defPanel, Property property) {
+		
+	   	GridData gridData;
+    	Label label = new Label(defPanel, SWT.WRAP);
+    	gridData = new GridData();
+    	label.setLayoutData(gridData);
+    	label.setText(property.getLabel());
+
+		Combo combo = new Combo(defPanel,SWT.READ_ONLY);
+    	gridData = new GridData(GridData.FILL_HORIZONTAL
+    			| GridData.GRAB_HORIZONTAL);
+    	gridData.horizontalSpan = 2;
+    	combo.setLayoutData(gridData);
+    	
+		StringTokenizer tokenizer = new StringTokenizer(property.getDefault(),","); //$NON-NLS-1$
+		while(tokenizer.hasMoreTokens()){
+			combo.add(tokenizer.nextToken());
+		}
+		if(combo.getItemCount()>0)
+			combo.select(0);
+		return combo;
+	}
+    private void registerControl(Control control)
     {
     	fPropertyControls.add(control);
     }
+    private Button createLabeledCheck(String title, boolean value, Composite defPanel) {
+    	GridData gridData;
+    	Label label = new Label(defPanel, SWT.WRAP);
+    	gridData = new GridData();
+    	label.setLayoutData(gridData);
+    	label.setText(title);
+
+    	Button fButton = new Button(defPanel, SWT.CHECK);
+    	
+    	gridData = new GridData(GridData.FILL_HORIZONTAL
+    			| GridData.GRAB_HORIZONTAL);
+    	gridData.horizontalSpan = 2;
+    	fButton.setLayoutData(gridData);
+    	fButton.setSelection(value);
+    	fButton.addSelectionListener(new SelectionListener() {
+            public void widgetSelected(SelectionEvent e) {
+             //nothing to do 
+            }
+
+            public void widgetDefaultSelected(SelectionEvent e) {
+            // nothing to do
+            }
+        });
+    	
+    	return fButton;
+    }
+    private Text createLabeledFile(String title, String value,final Composite defPanel) {
+    	GridData gridData;
+    	Label label = new Label(defPanel, SWT.WRAP);
+    	gridData = new GridData();
+    	label.setLayoutData(gridData);
+    	label.setText(title);
+    
+    	final Text text = new Text(defPanel, SWT.SHADOW_IN | SWT.BORDER);
+    	gridData = new GridData(GridData.FILL_HORIZONTAL
+    			| GridData.GRAB_HORIZONTAL);
+    	gridData.horizontalSpan = 1;
+    	text.setLayoutData(gridData);
+    	text.setText(value);
+    	text.addModifyListener(new PathModifyListener());
+    	Button fButton = SWTUtil.createButton(defPanel,GenericServerUIMessages.serverTypeGroup_label_browse);
+    	
+    	fButton.addSelectionListener(new SelectionListener() {
+    		public void widgetSelected(SelectionEvent e) {
+    			FileDialog dlg = new FileDialog(defPanel.getShell());
+    			dlg.setFileName(text.getText().replace('\\','/'));
+    			String res = dlg.open();
+    			if (res != null) {
+    				text.setText(res.replace('\\','/'));
+
+    			}
+    		}
+    
+    		public void widgetDefaultSelected(SelectionEvent e) {
+    			widgetSelected(e);
+    		}
+    
+    	});
+    
+    	return text;
+    }
 	
-    private String getPropertyValue(Property property){	
+    private Text createLabeledPath(String title, String value,
+    		final Composite parent) {
+    	GridData gridData;
+    	Label label = new Label(parent, SWT.WRAP);
+    	gridData = new GridData();
+    	label.setLayoutData(gridData);
+    	label.setText(title);
+    
+    	final Text text = new Text(parent, SWT.SHADOW_IN | SWT.BORDER);
+    	gridData = new GridData(GridData.FILL_HORIZONTAL);
+    	gridData.horizontalSpan = 1;
+    	text.setLayoutData(gridData);
+    	text.setText(value);
+    	text.addModifyListener(new PathModifyListener());
+    	Button fButton = SWTUtil.createButton(parent,GenericServerUIMessages.serverTypeGroup_label_browse);
+    	fButton.addSelectionListener(new SelectionListener() {
+    		public void widgetSelected(SelectionEvent e) {
+    			DirectoryDialog dlg = new DirectoryDialog(parent.getShell());
+    			dlg.setFilterPath(text.getText().replace('\\','/'));
+    			String res = dlg.open();
+    			if (res != null) {
+    				text.setText(res.replace('\\','/'));
+
+    			}
+    		}
+    
+    		public void widgetDefaultSelected(SelectionEvent e) {
+    			widgetSelected(e);
+    		}
+    
+    	});
+    	return text;
+    }
+    private Text createLabeledText(String title, String value,
+    		Composite defPanel) {
+    	GridData gridData;
+    	Label label = new Label(defPanel, SWT.WRAP);
+    	gridData = new GridData();
+    	label.setLayoutData(gridData);
+    	label.setText(title);
+    
+    	Text text = new Text(defPanel, SWT.SHADOW_IN | SWT.BORDER);
+    	gridData = new GridData(GridData.FILL_HORIZONTAL
+    			| GridData.GRAB_HORIZONTAL);
+    	gridData.horizontalSpan = 2;
+    	text.setLayoutData(gridData);
+    	text.setText(value);
+
+    	return text;
+    }
+	private String getPropertyValue(Property property){	
 		if(fProperties!=null && fProperties.isEmpty()==false){
 		//user properties exist use those
-			return fDefinition.getResolver().resolveProperties((String)fProperties.get(property.getId()));
+			return(String)fProperties.get(property.getId()); 
 		}	
-		return fDefinition.getResolver().resolveProperties(property.getDefault());
+		if(Property.CONTEXT_SERVER.equals(property.getContext()))
+			return fDefinition.getResolver().resolveProperties(property.getDefault());
+		return property.getDefault();
 	}	
 
    /**
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionServerDecorator.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionServerDecorator.java
index 71a8ca9..727c258 100644
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionServerDecorator.java
+++ b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/ServerTypeDefinitionServerDecorator.java
@@ -30,12 +30,9 @@
 	}
 
 	public boolean validate() {
-        IStatus status = null;
-        if(fServer!=null)
-        {
+		if(fServer!=null)
 			fServer.setServerInstanceProperties(getValues());
-			status = fServer.validate();
-        }
+		IStatus status = fServer.validate();
 		if(status==null || status.isOK())
 		{
 			fWizard.setMessage(null, IMessageProvider.NONE);
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/editor/ServerPropertiesEditorSection.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/editor/ServerPropertiesEditorSection.java
deleted file mode 100644
index c9e989c..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/editor/ServerPropertiesEditorSection.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package org.eclipse.jst.server.generic.ui.internal.editor;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jst.server.generic.core.internal.GenericServer;
-import org.eclipse.jst.server.generic.core.internal.GenericServerRuntime;
-import org.eclipse.jst.server.generic.servertype.definition.Property;
-import org.eclipse.jst.server.generic.ui.internal.GenericServerUIMessages;
-import org.eclipse.jst.server.generic.ui.internal.SWTUtil;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorSite;
-import org.eclipse.ui.forms.widgets.ExpandableComposite;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.wst.server.ui.editor.ServerEditorSection;
-
-public class ServerPropertiesEditorSection extends ServerEditorSection{
-	private GenericServer fServer;
-	private PropertyChangeListener fPropertyChangeListener;
-	private Map fControls = new HashMap();
-    private boolean fUpdating;
-    
-	public void init(IEditorSite site, IEditorInput input) {
-		super.init(site, input);
-		if(server!=null){
-			fServer = (GenericServer)server.loadAdapter(GenericServer.class, new NullProgressMonitor());
-		}
-		fPropertyChangeListener = new PropertyChangeListener(){
-
-			public void propertyChange( PropertyChangeEvent evt ) {
-				if(evt.getPropertyName().equals( GenericServerRuntime.SERVER_INSTANCE_PROPERTIES )) 
-                {
-                    if ( !fUpdating ){
-                        fUpdating = true;
-                        updateControls();
-                        fUpdating = false;
-                    }
-                }
-			}
-		};
-		server.addPropertyChangeListener( fPropertyChangeListener );
-	}
-    
-	protected void updateControls() {
-        List props = fServer.getServerDefinition().getProperty(); 
-        for (Iterator iter = props.iterator(); iter.hasNext();) {
-            Property property = (Property) iter.next();
-            if(property.getContext().equals(Property.CONTEXT_SERVER))
-            {
-                if( Property.TYPE_BOOLEAN.equals(property.getType()) ){
-                    Button b = (Button)fControls.get( property.getId() );
-                    b.setSelection( "true".equals(  getPropertyValue( property ) ) ); //$NON-NLS-1$
-                }
-                else if( Property.TYPE_SELECT.equals( property.getType() )){
-                    Combo c = (Combo)fControls.get( property.getId() );
-                    String value = getPropertyValue( property )==null ? "": getPropertyValue( property ); //$NON-NLS-1$
-                    //c.setText( getPropertyValue( property ) );
-                    // responding to "value not used" msg, I'm assuming value
-                    // should be used as in following block.
-                    c.setText( value );
-                }
-                else{
-                    Text t = (Text)fControls.get( property.getId() );
-                    String value = getPropertyValue( property )==null ? "": getPropertyValue( property ); //$NON-NLS-1$
-                    t.setText( value );
-                }
-            }
-        }  
-    }
-
-    public void createSection(Composite parent) {
-		super.createSection(parent);
-		FormToolkit formToolkit = getFormToolkit(parent.getDisplay());
-		Section section = formToolkit.createSection(parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED
-				| ExpandableComposite.TITLE_BAR | Section.DESCRIPTION | ExpandableComposite.FOCUS_TITLE);
-			section.setText(GenericServerUIMessages.ServerEditorSectionTitle);
-			section.setDescription(GenericServerUIMessages.ServerEditorSectionDescription);
-			section.setLayoutData(new GridData(SWT.FILL,SWT.NONE,true,false));
-			
-		Composite composite = formToolkit.createComposite(section);
-		GridLayout layout = new GridLayout();
-		layout.numColumns=3;
-		layout.marginHeight = 5;
-		layout.marginWidth = 10;
-		layout.verticalSpacing = 5;
-		layout.horizontalSpacing = 15;
-		composite.setLayout(layout);
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.NONE,true,false));
-		
-		List props = fServer.getServerDefinition().getProperty();
-		for (Iterator iter = props.iterator(); iter.hasNext();) {
-			Property property = (Property) iter.next();
-			if(property.getContext().equals(Property.CONTEXT_SERVER))
-				createPropertyControl(composite, property,formToolkit);
-		}
-
-		formToolkit.paintBordersFor(composite);
-		section.setClient(composite);
-	}
-	
-	private void executeUpdateOperation(String propertyName, String propertyValue)
-	{
-        if( !fUpdating )
-        {
-            fUpdating = true;
-            execute( new UpdateServerPropertyOperation( server,
-                    GenericServerUIMessages.UpdateOperationDescription, propertyName,
-                    propertyValue ) );
-            fUpdating = false;
-        }
-	}
-    
-    private void createPropertyControl(Composite parent, final Property property, FormToolkit toolkit){
-    	
-    	if( Property.TYPE_DIRECTORY.equals(property.getType())) {
-    		final Text path = SWTUtil.createLabeledPath(property.getLabel(),getPropertyValue(property),parent,toolkit);
-            fControls.put( property.getId(), path );
-    		path.addModifyListener(new ModifyListener() {			
-				public void modifyText(ModifyEvent e) {
-					executeUpdateOperation(property.getId(),path.getText());
-				}
-			});
-     	} else if( Property.TYPE_FILE.equals(property.getType())) {
-            
-    	    final Text file = SWTUtil.createLabeledFile(property.getLabel(),getPropertyValue(property),parent,toolkit);
-    		fControls.put( property.getId(), file );
-            file.addModifyListener(new ModifyListener() {
-				public void modifyText(ModifyEvent e) {
-					executeUpdateOperation(property.getId(),file.getText());
-				}
-			});	
-       	}else if( Property.TYPE_BOOLEAN.equals(property.getType())) {
-    	    final Button bool = SWTUtil.createLabeledCheck(property.getLabel(),("true".equals( getPropertyValue(property))),parent,toolkit); //$NON-NLS-1$
-    	    fControls.put( property.getId(), bool );
-            bool.addSelectionListener(new SelectionListener() {			
-				public void widgetSelected(SelectionEvent e) {
-					executeUpdateOperation(property.getId(),  Boolean.toString(bool.getSelection()));
-				}
-				public void widgetDefaultSelected(SelectionEvent e) {
-					// Do Nothing
-				}
-			});	
-       	}else if(Property.TYPE_SELECT.equals(property.getType())) {
-    		StringTokenizer tokenizer = new StringTokenizer(property.getDefault(),","); //$NON-NLS-1$
-    		int tokenCount = tokenizer.countTokens();
-    		String[] values = new String[tokenCount];
-    		int i =0;
-    		while(tokenizer.hasMoreTokens() && i<tokenCount){
-    			values[i]=tokenizer.nextToken();
-    			i++;
-    		}
-       		final Combo combo = SWTUtil.createLabeledCombo(property.getLabel(), values, parent,toolkit);
-       		fControls.put( property.getId(), combo );
-            combo.addModifyListener(new ModifyListener() {
-				public void modifyText(ModifyEvent e) {
-					executeUpdateOperation(property.getId(),combo.getText());
-				}
-			});
-       		combo.addSelectionListener(new SelectionListener() {		
-				public void widgetSelected(SelectionEvent e) {
-					executeUpdateOperation(property.getId(),combo.getText());
-				}			
-				public void widgetDefaultSelected(SelectionEvent e) {
-					// nothing to do
-				}			
-			});	
-       	}
-       	else  {// Property.TYPE_TEXT
-    	    final Text defaultText= SWTUtil.createLabeledText(property.getLabel(),getPropertyValue(property),parent,toolkit);
-            fControls.put( property.getId(), defaultText );
-    		defaultText.addModifyListener(new ModifyListener() {
-				public void modifyText(ModifyEvent e) {
-					executeUpdateOperation(property.getId(), defaultText.getText());
-				}
-			});
-    	}
-    }
-
-	private String getPropertyValue(Property property) {
-		 return(String) fServer.getServerInstanceProperties().get(property.getId());
-	}
-
-	public void dispose() {
-	    super.dispose();
-        if( server!= null )
-            server.removePropertyChangeListener( fPropertyChangeListener );
-	}
-	
-}
diff --git a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/editor/UpdateServerPropertyOperation.java b/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/editor/UpdateServerPropertyOperation.java
deleted file mode 100644
index fae82b1..0000000
--- a/plugins/org.eclipse.jst.server.generic.ui/src/org/eclipse/jst/server/generic/ui/internal/editor/UpdateServerPropertyOperation.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * 
- */
-package org.eclipse.jst.server.generic.ui.internal.editor;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.operations.AbstractOperation;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.server.generic.core.internal.GenericServer;
-import org.eclipse.jst.server.generic.ui.internal.GenericUiPlugin;
-import org.eclipse.wst.server.core.IServerWorkingCopy;
-
-public class UpdateServerPropertyOperation extends AbstractOperation {
-	private GenericServer fGenericServer;
-	private String  fPropertyName;
-	private String fPRopertyValue;
-	private String fOldValue;
-	
-	public UpdateServerPropertyOperation(IServerWorkingCopy server, String name, String propertyName, String propertyValue) {
-		super(name);
-		if(server!=null){
-			fGenericServer = (GenericServer)server.loadAdapter(GenericServer.class, new NullProgressMonitor());
-		}
-		fPropertyName=propertyName;
-		fPRopertyValue=propertyValue;	
-	}
-	
-	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		Map map = new HashMap( fGenericServer.getServerInstanceProperties() );
-		if(map.containsKey(fPropertyName))
-		{
-            fOldValue = ( String )map.get( fPropertyName );
-			map.put(fPropertyName, fPRopertyValue);
-            fGenericServer.setServerInstanceProperties( map );
-			return null;
-		}
-		return new Status(IStatus.ERROR,GenericUiPlugin.PLUGIN_ID,0,"Property does not exist",null);
-	}
-
-	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		return execute(monitor,info);
-	}
-
-	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
-		Map map = new HashMap(fGenericServer.getServerInstanceProperties());
-		if(map.containsKey(fPropertyName))
-		{
-			map.put(fPropertyName, fOldValue);
-            fGenericServer.setServerInstanceProperties(map);
-			return null;
-		}
-		return new Status(IStatus.ERROR,GenericUiPlugin.PLUGIN_ID,0,"Property does not exist",null);
-	}
-}
\ No newline at end of file
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 3d8058a..499d7de 100644
--- a/plugins/org.eclipse.jst.server.installable/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.installable/META-INF/MANIFEST.MF
@@ -5,5 +5,5 @@
 Bundle-Version: 1.5.2.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Require-Bundle:  org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+Require-Bundle:  org.eclipse.core.runtime;bundle-version="[3.2.0,3.3.0)",
  org.eclipse.wst.server.core;bundle-version="[1.0.102,1.1.0)"
diff --git a/plugins/org.eclipse.jst.server.installable/plugin.properties b/plugins/org.eclipse.jst.server.installable/plugin.properties
index c18370b..1ffab03 100644
--- a/plugins/org.eclipse.jst.server.installable/plugin.properties
+++ b/plugins/org.eclipse.jst.server.installable/plugin.properties
@@ -5,7 +5,25 @@
 # http://www.eclipse.org/legal/epl-v10.html
 # 
 # Contributors: Gorkem Ercan - initial API and implementation
+#               
 ###################################################################################################
-pluginName=Installable server adapters
+pluginName=Installable servers
 providerName=Eclipse.org
-pluginDescription=Provides installable server adapters
+pluginDescription=Provides installable servers
+
+# Geronimo download
+runtimeTypeGeronimo10Label=Geronimo v1.0
+runtimeTypeGeronimo10Description=Apache Geronimo v1.0 supports J2EE 1.2, 1.3 and 1.4.
+runtimeTypeGeronimo11Label=Geronimo v1.1
+runtimeTypeGeronimo11Description=Apache Geronimo v1.1 supports J2EE 1.2, 1.3 and 1.4.
+vendorApache=Apache
+
+# WebSphere CE download
+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
+runtimeTypePramatiLabel=Pramati 4.1.x
+runtimeTypePramatiDescription=Pramati 4.1.x Server
+vendorPramati=Pramati
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.installable/plugin.xml b/plugins/org.eclipse.jst.server.installable/plugin.xml
index 581a39e..8c824a0 100644
--- a/plugins/org.eclipse.jst.server.installable/plugin.xml
+++ b/plugins/org.eclipse.jst.server.installable/plugin.xml
@@ -4,18 +4,43 @@
   <extension point="org.eclipse.wst.server.core.installableServers">
     <installableServer
       id="org.apache.geronimo.generic.runtime.10"
+      name="%runtimeTypeGeronimo10Label"
+      description="%runtimeTypeGeronimo10Description"
+      vendor="%vendorApache"
+      version="1.0"
       featureId="org.apache.geronimo.feature"
-      featureVersion="1.2.0"
-      featureSite="http://www.apache.org/dist/geronimo/eclipse/updates/"/>
+      featureVersion="1.1.0"
+      featureSite="http://www.apache.org/dist/geronimo/eclipse/updates/">
+    </installableServer>
     <installableServer
-      id="org.apache.geronimo.generic.runtime.10"
+      id="org.apache.geronimo.generic.runtime.11"
+      name="%runtimeTypeGeronimo11Label"
+      description="%runtimeTypeGeronimo11Description"
+      vendor="%vendorApache"
+      version="1.1"
+      featureId="org.apache.geronimo.feature"
+      featureVersion="1.1.0"
+      featureSite="http://www.apache.org/dist/geronimo/eclipse/updates/">
+    </installableServer>
+    <installableServer
+      id="org.apache.geronimo.generic.runtime.11"
+      name="%runtimeTypeWASCE1xLabel"
+      description="%runtimeTypeWASCE1xDescription"
+      vendor="%vendorIBM"
+      version="1.1"
       featureId="com.ibm.websphere.ce.feature"
       featureVersion="1.1.0"
-      featureSite="http://download.boulder.ibm.com/ibmdl/pub/software/websphere/wasce/updates/"/>
+      featureSite="http://download.boulder.ibm.com/ibmdl/pub/software/websphere/wasce/updates/">
+    </installableServer>
     <installableServer
-      id="com.pramati"
+      id="xxx"
+      name="%runtimeTypePramatiLabel"
+      description="%runtimeTypePramatiDescription"
+      vendor="%vendorPramati"
+      version="4.1"
       featureId="com.pramati.eclipse.feature"
       featureVersion="1.0.0"
-      featureSite="http://www.pramati.com/downloads/eclipse/updates/"/>
+      featureSite="http://www.pramati.com/downloads/eclipse/updates/">
+    </installableServer>
   </extension>
-</plugin>
\ No newline at end of file
+</plugin>
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/.classpath b/plugins/org.eclipse.jst.server.tomcat.core/.classpath
index 69b412b..216cb81 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/.classpath
+++ b/plugins/org.eclipse.jst.server.tomcat.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="tomcatcore/"/>
-	<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.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.core.resources.prefs
index c8be432..3cc81c3 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.core.resources.prefs
+++ b/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,3 @@
-#Fri Nov 10 17:11:35 HST 2006
+#Sun Apr 16 23:22:14 EDT 2006
 eclipse.preferences.version=1
 encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index abc401a..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,74 +0,0 @@
-#Wed Jan 17 14:12:02 EST 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=error
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=error
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.incompatibleJDKLevel=warning
-org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 584bdff..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Nov 10 18:06:11 HST 2006
-eclipse.preferences.version=1
-internal.default.compliance=user
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.pde.prefs
index 08a60e5..556ca8a 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.pde.prefs
+++ b/plugins/org.eclipse.jst.server.tomcat.core/.settings/org.eclipse.pde.prefs
@@ -1,12 +1,11 @@
-#Sat Apr 22 18:36:14 EDT 2006
-compilers.incompatible-environment=0
-compilers.p.build=0
+#Sun Apr 16 23:22:00 EDT 2006
+compilers.p.build=1
 compilers.p.deprecated=1
 compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=0
+compilers.p.not-externalized-att=1
+compilers.p.unknown-attribute=1
 compilers.p.unknown-class=0
-compilers.p.unknown-element=0
+compilers.p.unknown-element=1
 compilers.p.unknown-resource=0
 compilers.p.unresolved-ex-points=0
 compilers.p.unresolved-import=0
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 8cd9b0f..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.1.000.qualifier
+Bundle-Version: 1.0.104.qualifier
 Bundle-Activator: org.eclipse.jst.server.tomcat.core.internal.TomcatPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -17,8 +17,7 @@
  org.eclipse.debug.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.server.core;bundle-version="[1.0.204,1.1.0)",
+ org.eclipse.wst.server.core;bundle-version="[1.0.103,1.1.0)",
  org.eclipse.jst.server.core;bundle-version="[1.0.103,1.1.0)",
  org.eclipse.jst.common.project.facet.core;bundle-version="[1.1.0,1.2.0)"
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/plugin.properties b/plugins/org.eclipse.jst.server.tomcat.core/plugin.properties
index 306b378..af99fd7 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/plugin.properties
+++ b/plugins/org.eclipse.jst.server.tomcat.core/plugin.properties
@@ -23,8 +23,6 @@
 runtimeTypeTomcat50Description=Apache Tomcat v5.0 supports J2EE 1.2, 1.3, and 1.4 Web modules.
 runtimeTypeTomcat55Label=Apache Tomcat v5.5
 runtimeTypeTomcat55Description=Apache Tomcat v5.5 supports J2EE 1.2, 1.3, and 1.4 Web modules.
-runtimeTypeTomcat60Label=Apache Tomcat v6.0
-runtimeTypeTomcat60Description=Apache Tomcat v6.0 supports J2EE 1.2, 1.3, 1.4, and Java EE 5 (under development) Web modules.
 
 # --------------- Servers ---------------
 tomcat32ServerType=Tomcat v3.2 Server
@@ -42,9 +40,6 @@
 tomcat55ServerType=Tomcat v5.5 Server
 tomcat55ServerDescription=Publishes and runs J2EE Web projects and server configurations to a local Tomcat server.
 
-tomcat60ServerType=Tomcat v6.0 Server
-tomcat60ServerDescription=Publishes and runs J2EE and Java EE Web projects and server configurations to a local Tomcat server.
-
 tomcatLaunchConfigurationType=Apache Tomcat
 
 # --------------- General ---------------
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/plugin.xml b/plugins/org.eclipse.jst.server.tomcat.core/plugin.xml
index a6b00fb..3d0b684 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/plugin.xml
+++ b/plugins/org.eclipse.jst.server.tomcat.core/plugin.xml
@@ -77,21 +77,6 @@
          types="jst.utility"
          versions="1.0"/>
     </runtimeType>
-
-    <runtimeType
-       id="org.eclipse.jst.server.tomcat.runtime.60"
-       name="%runtimeTypeTomcat60Label"
-       description="%runtimeTypeTomcat60Description"
-       vendor="%apache"
-       version="6.0"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatRuntime">
-       <moduleType
-         types="jst.web"
-         versions="2.2, 2.3, 2.4"/>
-       <moduleType
-         types="jst.utility"
-         versions="1.0"/>
-    </runtimeType>
   </extension>
 
   <extension point="org.eclipse.wst.server.core.runtimeLocators">
@@ -184,21 +169,6 @@
        class="org.eclipse.jst.server.tomcat.core.internal.TomcatServer"
        behaviourClass="org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour">
      </serverType>
-     <serverType
-       id="org.eclipse.jst.server.tomcat.60"
-       name="%tomcat60ServerType"
-       description="%tomcat60ServerDescription"
-       supportsRemoteHosts="false"
-       runtime="true"
-       startTimeout="45000"
-       stopTimeout="15000"
-       initialState="stopped"
-       hasConfiguration="true"
-       launchConfigId="org.eclipse.jst.server.tomcat.core.launchConfigurationType"
-       runtimeTypeId="org.eclipse.jst.server.tomcat.runtime.60"
-       class="org.eclipse.jst.server.tomcat.core.internal.TomcatServer"
-       behaviourClass="org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour">
-     </serverType>
   </extension>
 
   <extension point="org.eclipse.wst.server.core.serverLocators">
@@ -266,10 +236,6 @@
        type="org.eclipse.jst.server.tomcat"
        version="5.5"/>
 
-    <runtime-component-version
-       type="org.eclipse.jst.server.tomcat"
-       version="6.0"/>
-
     <adapter>
       <runtime-component
          id="org.eclipse.jst.server.tomcat"/>
@@ -338,18 +304,6 @@
          id="jst.utility"
          version="1.0"/>
     </supported>
-
-    <supported>
-      <runtime-component
-         id="org.eclipse.jst.server.tomcat"
-         version="6.0"/>
-      <facet
-         id="jst.web"
-         version="2.2,2.3,2.4"/>
-      <facet
-         id="jst.utility"
-         version="1.0"/>
-    </supported>
   </extension>
   
   <extension point="org.eclipse.jst.server.core.runtimeFacetMappings">
@@ -373,9 +327,5 @@
       runtimeTypeId="org.eclipse.jst.server.tomcat.runtime.55"
       runtime-component="org.eclipse.jst.server.tomcat"
       version="5.5"/>
-    <runtimeFacetMapping
-      runtimeTypeId="org.eclipse.jst.server.tomcat.runtime.60"
-      runtime-component="org.eclipse.jst.server.tomcat"
-      version="6.0"/>
   </extension>
 </plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServer.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServer.java
index 8de7627..59c8886 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServer.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServer.java
@@ -15,18 +15,7 @@
  *
  */
 public interface ITomcatServer extends IURLProvider {
-	/**
-	 * Property which specifies whether this server is configured
-	 * for testing environment.
-	 */
 	public static final String PROPERTY_TEST_ENVIRONMENT = "testEnvironment";
-
-	/**
-	 * Property which specifies the directory where web applications
-	 * are published.
-	 */
-	public static final String PROPERTY_DEPLOYDIR = "deployDir";
-
 	/**
 	 * Returns true if this is a test (publish and run code out of the
 	 * workbench) environment server.
@@ -34,13 +23,4 @@
 	 * @return boolean
 	 */
 	public boolean isTestEnvironment();
-
-	/**
-	 * Gets the directory to which web applications are to be deployed.
-	 * If relative, it is relative to the runtime base directory for the
-	 * server.
-	 * 
-	 * @return directory where web applications are deployed
-	 */
-	public String getDeployDirectory();
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServerWorkingCopy.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServerWorkingCopy.java
index 3459ada..0d431e3 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServerWorkingCopy.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatServerWorkingCopy.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,28 +14,9 @@
  */
 public interface ITomcatServerWorkingCopy extends ITomcatServer {
 	/**
-	 * The default deployment directory.  Avoid "webapps" due to
-	 * side effects.
-	 */
-	public static final String DEFAULT_DEPLOYDIR = "wtpwebapps";
-
-	/**
-	 * The deployment directory used by default in prior versions.
-	 */
-	public static final String LEGACY_DEPLOYDIR = "webapps";
-
-	/**
 	 * Sets this server to test environment mode.
 	 * 
 	 * @param b boolean
 	 */
 	public void setTestEnvironment(boolean b);
-
-	/**
-	 * Set the deployment directory for the server.  May be absolute
-	 * or relative to runtime base directory.
-	 * 
-	 * @param deployDir deployment directory for the server
-	 */
-	public void setDeployDirectory(String deployDir);
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java
index ce82ac7..897a284 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/ITomcatVersionHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,7 @@
  * 
  */
 public interface ITomcatVersionHandler {
-	public IStatus verifyInstallPath(IPath installPath);
+	public boolean verifyInstallPath(IPath installPath);
 	
 	public String getRuntimeClass();
 	
@@ -35,16 +35,6 @@
 	 */
 	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting);
 
-	/**
-	 * Arguments that should not appear in the runtime arguments based on
-	 * the specified configuration.
-	 * 
-	 * @param debug <code>true</code> if debug mode is on
-	 * @param starting <code>true</code> if the server is starting
-	 * @return array of excluded arguments
-	 */
-	public String[] getExcludedRuntimeProgramArguments(boolean debug, boolean starting);
-	
 	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv);
 
 	public String getRuntimePolicyFile(IPath configPath);
@@ -67,22 +57,4 @@
 	 * @return the base path
 	 */
 	public IPath getRuntimeBaseDirectory(TomcatServerBehaviour serverBehaviour);
-
-	/**
-	 * Prepare server runtime directory. Create catalina instance set of
-	 * directories.
-	 * 
-	 * @param baseDir directory at which to prepare the runtime directory.
-	 * @return result of creation operation 
-	 */
-	public IStatus prepareRuntimeDirectory(IPath baseDir);
-	
-	/**
-	 * Prepares the specified directory by making sure it exists and is
-	 * initialized appropriately.
-	 * 
-	 * @param deployPath path to the deployment directory
-	 * @return status result of the operation
-	 */
-	public IStatus prepareDeployDirectory(IPath deployPath);
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.java
index 73c560c..90cbf46 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.java
@@ -18,17 +18,9 @@
 	public static String copyingTask;
 	public static String errorCopyingFile;
 	public static String deletingTask;
-	public static String errorVersionEmpty;
-	public static String errorUnknownVersion;
-	public static String errorInstallDirEmpty;
-	public static String errorInstallDirWrongVersion;
-	public static String errorInstallDirDoesNotExist;
-	public static String errorInstallDirMissingFile;
-	public static String errorInstallDirMissingFile2;
-	public static String errorInstallDirMissingFile3;
+	public static String errorInstallDir;
 	public static String errorInstallDirTrailingSlash;
 	public static String errorJRE;
-	public static String errorJRETomcat60;
 	public static String warningJRE;
 	public static String warningCantReadConfig;
 	public static String target32runtime;
@@ -49,7 +41,6 @@
 	public static String errorSpec41;
 	public static String errorSpec50;
 	public static String errorSpec55;
-	public static String errorSpec60;
 	public static String portServer;
 	public static String runtimeDirPrepared;
 	public static String publishConfigurationTask;
@@ -76,13 +67,6 @@
 	public static String errorDuplicateContextRoot;
 	public static String errorCouldNotLoadContextXml;
 	public static String errorNoProfiler;
-	public static String errorXMLServiceNotFound;
-	public static String errorXMLNoService;
-	public static String errorXMLEngineNotFound;
-	public static String errorXMLHostNotFound;
-	public static String errorXMLContextNotFoundPath;
-	public static String errorXMLContextMangerNotFound;
-	public static String errorXMLContextNotFoundPath32;
 	public static String configurationEditorActionModifyPortDescription;
 	public static String configurationEditorActionModifyPort;
 	public static String configurationEditorActionModifyMimeMappingDescription;
@@ -103,8 +87,6 @@
 	public static String serverEditorActionSetSecure;
 	public static String serverEditorActionSetTestEnvironmentDescription;
 	public static String serverEditorActionSetTestEnvironment;
-	public static String serverEditorActionSetDeployDirectory;
-	public static String serverEditorActionSetDeployDirectoryDescription;
 	public static String configurationEditorActionEditWebModuleDescription;
 	public static String configurationEditorActionEditWebModulePath;
 	public static String fixModuleContextRootDescription;
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.properties b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.properties
index 660efe4..c283b39 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.properties
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Messages.properties
@@ -66,17 +66,9 @@
 portUnknown=unknown port
 
 # --------------- Errors and Info ---------------
-errorVersionEmpty=The Tomcat version must be specified.
-errorUnknownVersion=Unknown version of Tomcat was specified.
-errorInstallDirEmpty=The Tomcat installation directory may not be empty.
-errorInstallDirWrongVersion=The name of the Tomcat installation directory indicates it is for different version of Tomcat.
-errorInstallDirDoesNotExist=The specified Tomcat installation directory does not exist.
-errorInstallDirMissingFile=The Tomcat installation directory is not valid. It is missing expected file or folder {0}.
-errorInstallDirMissingFile2=The Tomcat installation directory is not valid. It is missing expected file or folder {0} (alternate name {1}).
-errorInstallDirMissingFile3=The Tomcat installation directory is not valid. It is missing expected file or folder {0} (alternate names {1}).
+errorInstallDir=The Tomcat installation directory is not correct. It does not point to a valid Tomcat installation.
 errorInstallDirTrailingSlash=The Tomcat installation directory should not have a trailing slash.
 errorJRE=The JRE could not be found. Edit the server and change the JRE location.
-errorJRETomcat60=Tomcat version 6.0 requires J2SE 5.0 or later.  Change the JRE to one that meets this requirement.
 errorPortInvalid=The server cannot be started because one or more of the ports are invalid. Open the server editor and correct the invalid ports.
 errorPortInUse=Port {0} required by {1} is already in use. The server may already be running in another process, or a system process may be using the port. \
   To start this server you will need to stop the other process or change the port number(s).
@@ -96,18 +88,10 @@
 errorSpec41=Tomcat version 4.1 only supports J2EE 1.2 and 1.3 Web modules
 errorSpec50=Tomcat version 5.0 only supports J2EE 1.2, 1.3, and 1.4 Web modules
 errorSpec55=Tomcat version 5.5 only supports J2EE 1.2, 1.3, and 1.4 Web modules
-errorSpec60=Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules
 errorDuplicateContextRoot=Two or more Web modules defined in the configuration have the same context root ({0}). \
   To start this server you will need to remove the duplicate(s).
 errorCouldNotLoadContextXml=Could not load the context configuration for the {0} context due to a syntax error or other exception.
 errorNoProfiler=Could not launch in profiling mode because no profilers are configured.
-errorXMLServiceNotFound=Service \"{0}\" was not found.
-errorXMLNoService=No Service was found.
-errorXMLEngineNotFound=Engine element not found under Service \"{0}\".
-errorXMLHostNotFound=Host \"{0}\" was not found under Engine \"{1}\" and Service \"{2}\".
-errorXMLContextNotFoundPath=Context with path \"{0}\" was not found under Service \"{1}\", Engine \"{2}\", and Host \"{3}\".
-errorXMLContextMangerNotFound=ContextManager element was not found.
-errorXMLContextNotFoundPath32=Context with path \"{0}\" was not found under ContextManager.
 
 warningJRE=Tomcat requires a Java SDK in order to compile JSP files. Ensure that the JRE preference settings point to an SDK install location.
 warningCantReadConfig=Cannot read the Tomcat configuration.
@@ -119,5 +103,3 @@
 serverEditorActionSetDebugModeDescription=Set Tomcat in debug mode
 serverEditorActionSetTestEnvironment=run modules from workspace
 serverEditorActionSetTestEnvironmentDescription=Run modules from the workspace
-serverEditorActionSetDeployDirectory=set deploy directory
-serverEditorActionSetDeployDirectoryDescription=Set the Tomcat deploy directory.
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 3b285a7..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
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 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
@@ -56,7 +56,8 @@
 	}
 
 	private void publishDir(IModule module2, List status, IProgressMonitor monitor) throws CoreException {
-		IPath path = server.getModuleDeployDirectory(module2);
+		IPath path = server.getTempDirectory().append("webapps");
+		path = path.append(module2.getName());
 		
 		if (kind == IServer.PUBLISH_CLEAN || deltaKind == ServerBehaviourDelegate.REMOVED) { // clean and republish from scratch
 			File f = path.toFile();
@@ -86,8 +87,8 @@
 	}
 
 	private void publishJar(List status, IProgressMonitor monitor) throws CoreException {
-		IPath path = server.getModuleDeployDirectory(module[0]);
-		path = path.append("WEB-INF").append("lib");
+		IPath path = server.getTempDirectory().append("webapps");
+		path = path.append(module[0].getName()).append("WEB-INF").append("lib");
 		IPath jarPath = path.append(module[1].getName() + ".jar");
 		
 		if (kind == IServer.PUBLISH_CLEAN || deltaKind == ServerBehaviourDelegate.REMOVED) { // clean and republish from scratch
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java
index 6d1e958..188cc6c 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,15 +12,12 @@
 
 import java.io.*;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Set;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.*;
-import org.eclipse.jst.server.core.PublishUtil;
 import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
 import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
 import org.eclipse.jst.server.tomcat.core.internal.xml.server32.*;
@@ -38,7 +35,6 @@
 	protected static final String SSL_SOCKET_FACTORY = "org.apache.tomcat.net.SSLSocketFactory";
 
 	protected Server server;
-	protected ServerInstance serverInstance;
 	protected Factory serverFactory;
 	protected boolean isServerDirty;
 
@@ -109,46 +105,44 @@
 		List ports = new ArrayList();
 	
 		try {
-			Connector [] connectors = serverInstance.getConnectors();
-			if (connectors != null) {
-				for (int i = 0; i < connectors.length; i++) {
-					Connector connector = connectors[i];
-					int paramCount = connector.getParameterCount();
-					String handler = null;
-					String name = Messages.portUnknown;
-					String socketFactory = null;
-					String protocol = "TCPIP";
-					boolean advanced = true;
-					String[] contentTypes = null;
-					int port = -1;
-					for (int j = 0; j < paramCount; j++) {
-						Parameter p = connector.getParameter(j);
-						if ("port".equals(p.getName())) {
-							try {
-								port = Integer.parseInt(p.getValue());
-							} catch (Exception e) {
-								// ignore
-							}
-						} else if ("handler".equals(p.getName()))
-							handler = p.getValue();
-						else if ("socketFactory".equals(p.getName()))
-							socketFactory = p.getValue();
-					}
-					if (HTTP_HANDLER.equals(handler)) {
-						protocol = "HTTP";
-						contentTypes = new String[] { "web", "webservices" };
-						if (SSL_SOCKET_FACTORY.equals(socketFactory)) {
-							protocol = "SSL";
-							name = "SSL Connector";
-						} else {
-							name = "HTTP Connector";
-							advanced = false;
+			int count = server.getContextManager().getConnectorCount();
+			for (int i = 0; i < count; i++) {
+				Connector connector = server.getContextManager().getConnector(i);
+				int paramCount = connector.getParameterCount();
+				String handler = null;
+				String name = Messages.portUnknown;
+				String socketFactory = null;
+				String protocol = "TCPIP";
+				boolean advanced = true;
+				String[] contentTypes = null;
+				int port = -1;
+				for (int j = 0; j < paramCount; j++) {
+					Parameter p = connector.getParameter(j);
+					if ("port".equals(p.getName())) {
+						try {
+							port = Integer.parseInt(p.getValue());
+						} catch (Exception e) {
+							// ignore
 						}
-					} else if (APACHE_HANDLER.equals(handler))
-						name = "Apache Connector";
-					if (handler != null)
-						ports.add(new ServerPort(i + "", name, port, protocol, contentTypes, advanced));
+					} else if ("handler".equals(p.getName()))
+						handler = p.getValue();
+					else if ("socketFactory".equals(p.getName()))
+						socketFactory = p.getValue();
 				}
+				if (HTTP_HANDLER.equals(handler)) {
+					protocol = "HTTP";
+					contentTypes = new String[] { "web", "webservices" };
+					if (SSL_SOCKET_FACTORY.equals(socketFactory)) {
+						protocol = "SSL";
+						name = "SSL Connector";
+					} else {
+						name = "HTTP Connector";
+						advanced = false;
+					}
+				} else if (APACHE_HANDLER.equals(handler))
+					name = "Apache Connector";
+				if (handler != null)
+					ports.add(new ServerPort(i + "", name, port, protocol, contentTypes, advanced));
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error getting server ports", e);
@@ -174,18 +168,18 @@
 		List list = new ArrayList();
 	
 		try {
-			Context [] contexts = serverInstance.getContexts();
-			if (contexts != null) {
-				for (int i = 0; i < contexts.length; i++) {
-					Context context = contexts[i];
-					String reload = context.getReloadable();
-					if (reload == null)
-						reload = "false";
-					WebModule module = new WebModule(context.getPath(), 
-						context.getDocBase(), context.getSource(),
-						reload.equalsIgnoreCase("true") ? true : false);
-					list.add(module);
-				}
+			ContextManager contextManager = server.getContextManager();
+	
+			int size = contextManager.getContextCount();
+			for (int i = 0; i < size; i++) {
+				Context context = contextManager.getContext(i);
+				String reload = context.getReloadable();
+				if (reload == null)
+					reload = "false";
+				WebModule module = new WebModule(context.getPath(), 
+					context.getDocBase(), context.getSource(),
+					reload.equalsIgnoreCase("true") ? true : false);
+				list.add(module);
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error getting project refs", e);
@@ -195,24 +189,6 @@
 	}
 	
 	/**
-	 * @see TomcatConfiguration#getServerWorkDirectory(IPath)
-	 */
-	public IPath getServerWorkDirectory(IPath basePath) {
-		return serverInstance.getServerWorkDirectory(basePath);
-	}
-
-	/**
-	 * @see TomcatConfiguration#getContextWorkDirectory(IPath, ITomcatWebModule)
-	 */
-	public IPath getContextWorkDirectory(IPath basePath, ITomcatWebModule module) {
-		Context context = serverInstance.getContext(module.getPath());
-		if (context != null)
-			return serverInstance.getContextWorkDirectory(basePath, context);
-		
-		return null;
-	}
-
-	/**
 	 * @see TomcatConfiguration#load(IPath, IProgressMonitor)
 	 */
 	public void load(IPath path, IProgressMonitor monitor) throws CoreException {
@@ -230,7 +206,6 @@
 			serverFactory = new Factory();
 			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server32");
 			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			serverInstance = new ServerInstance(server);
 			monitor.worked(1);
 	
 			webAppDocument = new WebAppDocument(path.append("web.xml"));
@@ -240,7 +215,22 @@
 			monitor.worked(1);
 	
 			// load policy file
-			policyFile = TomcatVersionHelper.getFileContents(new FileInputStream(path.append("tomcat.policy").toFile()));
+			BufferedReader br = null;
+			try {
+				br = new BufferedReader(new InputStreamReader(new FileInputStream(path.append("tomcat.policy").toFile())));
+				String temp = br.readLine();
+				policyFile = "";
+				while (temp != null) {
+					policyFile += temp + "\n";
+					temp = br.readLine();
+				}
+				br.close();
+			} catch (Exception e) {
+				Trace.trace(Trace.SEVERE, "Could not load policy file", e);
+			} finally {
+				if (br != null)
+					br.close();
+			}
 			monitor.worked(1);
 	
 			if (monitor.isCanceled())
@@ -254,21 +244,6 @@
 	}
 	
 	/**
-	 * @see TomcatConfiguration#importFromPath(IPath, boolean, IProgressMonitor)
-	 */
-	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
-		load(path, monitor);
-		
-		// for test environment, remove existing contexts since an instance
-		// directory relative to server.xml will be used
-		if (isTestEnv) {
-			while (serverInstance.removeContext(0)) {
-				// no-op
-			}
-		}
-	}
-
-	/**
 	 * @see TomcatConfiguration#load(IFolder, IProgressMonitor)
 	 */
 	public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
@@ -287,7 +262,6 @@
 			serverFactory = new Factory();
 			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server32");
 			server = (Server) serverFactory.loadDocument(in);
-			serverInstance = new ServerInstance(server);
 			monitor.worked(200);
 	
 			// load web.xml
@@ -305,7 +279,22 @@
 			// load tomcat.policy
 			file = folder.getFile("tomcat.policy");
 			in = file.getContents();
-			policyFile = TomcatVersionHelper.getFileContents(in);
+			BufferedReader br = null;
+			try {
+				br = new BufferedReader(new InputStreamReader(in));
+				String temp = br.readLine();
+				policyFile = "";
+				while (temp != null) {
+					policyFile += temp + "\n";
+					temp = br.readLine();
+				}
+				br.close();
+			} catch (Exception e) {
+				Trace.trace(Trace.SEVERE, "Could not load policy file", e);
+			} finally {
+				if (br != null)
+					br.close();
+			}
 			monitor.worked(200);
 	
 			if (monitor.isCanceled())
@@ -331,26 +320,26 @@
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(Messages.savingTask, 5);
-			
+	
 			// make sure directory exists
 			if (!path.toFile().exists()) {
 				forceDirty = true;
 				path.toFile().mkdir();
 			}
 			monitor.worked(1);
-			
+	
 			// save files
 			if (forceDirty || isServerDirty)
 				serverFactory.save(path.append("server.xml").toOSString());
 			monitor.worked(1);
-			
+	
 			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
 			monitor.worked(1);
-			
+	
 			if (forceDirty)
 				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
 			monitor.worked(1);
-			
+	
 			if (forceDirty) {
 				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("tomcat.policy").toFile()));
 				bw.write(policyFile);
@@ -358,7 +347,7 @@
 			}
 			monitor.worked(1);
 			isServerDirty = false;
-			
+	
 			if (monitor.isCanceled())
 				return;
 			monitor.done();
@@ -367,19 +356,11 @@
 			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
 		}
 	}
-
-	/**
-	 * Save the information held by this object to the given directory.
-	 * All files are forced to be saved.
-	 * 
-	 * @param path desination path for the files
-	 * @param monitor a progress monitor
-	 * @exception CoreException
-	 */
+	
 	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
 		save(path, true, monitor);
 	}
-
+	
 	/**
 	 * Save the information held by this object to the given directory.
 	 * 
@@ -391,12 +372,12 @@
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(Messages.savingTask, 900);
-			
+	
 			if (!folder.exists())
 				folder.create(true, true, ProgressUtil.getSubMonitorFor(monitor, 100));
 			else
 				monitor.worked(100);
-			
+	
 			// save server.xml
 			byte[] data = serverFactory.getContents();
 			InputStream in = new ByteArrayInputStream(data);
@@ -408,12 +389,11 @@
 					monitor.worked(200);
 			} else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			isServerDirty = false;
-			
+	
 			// save web.xml
 			file = folder.getFile("web.xml");
 			webAppDocument.save(file, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			// save tomcat-users.xml
 			data = XMLUtil.getContents(tomcatUsersDocument);
 			in = new ByteArrayInputStream(data);
@@ -423,7 +403,7 @@
 				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			// save tomcat.policy
 			in = new ByteArrayInputStream(policyFile.getBytes());
 			file = folder.getFile("tomcat.policy");
@@ -432,7 +412,7 @@
 				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			if (monitor.isCanceled())
 				return;
 			monitor.done();
@@ -441,7 +421,8 @@
 			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
 		}
 	}
-
+	
+	
 	/**
 	 * @see ITomcatConfigurationWorkingCopy#addMimeMapping(int, IMimeMapping)
 	 */
@@ -455,8 +436,9 @@
 	 */
 	public void addWebModule(int index, ITomcatWebModule module) {
 		try {
-			Context context = serverInstance.createContext(index);
-
+			ContextManager contextManager = server.getContextManager();
+			Context context = (Context) contextManager.createElement(index, "Context");
+	
 			context.setPath(module.getPath());
 			context.setDocBase(module.getDocumentBase());
 			context.setReloadable(module.isReloadable() ? "true" : "false");
@@ -472,81 +454,38 @@
 	/**
 	 * Localize the web projects in this configuration.
 	 *
-	 * @param baseDir runtime base directory for the server
-	 * @param deployDir deployment directory for the server
+	 * @param path a path
 	 * @param server2 a server type
 	 * @param monitor a progress monitor
-	 * @return result of operation
 	 */
-	public IStatus localizeConfiguration(IPath baseDir, IPath deployDir, TomcatServer server2, IProgressMonitor monitor) {
+	public void localizeConfiguration(IPath path, TomcatServer server2, IProgressMonitor monitor) {
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(Messages.updatingConfigurationTask, 100);
-			IPath confDir = baseDir.append("conf");
 			
 			Tomcat32Configuration config = new Tomcat32Configuration(null);
-			config.load(confDir, ProgressUtil.getSubMonitorFor(monitor, 300));
+			config.load(path, ProgressUtil.getSubMonitorFor(monitor, 30));
 			
 			if (monitor.isCanceled())
-				return Status.CANCEL_STATUS;
+				return;
 			
 			if (server2.isTestEnvironment()) {
-				config.server.getContextManager().setHome(baseDir.toOSString());
+				IPath tomcatPath = path.removeLastSegments(1);
+				config.server.getContextManager().setHome(tomcatPath.toOSString());
 				config.isServerDirty = true;
 			}
-
-			// Only add root module if running in a test env (i.e. not on the installation)
-			boolean addRootWebapp = server2.isTestEnvironment();
+			monitor.worked(40);
 			
-			// If not deploying to "webapps", context docBase attributes need updating
-			if (!"webapps".equals(server2.getDeployDirectory())) {
-				Context [] contexts = config.serverInstance.getContexts();
-				if (contexts != null) {
-					for (int i = 0; i < contexts.length; i++) {
-						Context context = contexts[i];
-						String source = context.getSource();
-						if (source != null && source.length() > 0 )	{
-							String name = context.getDocBase();
-							// Update docBase only if name begins with the expected prefix
-							if (name.startsWith(getDocBasePrefix())) {
-								name = name.substring(getDocBasePrefix().length());
-								context.setDocBase(deployDir.append(name).toOSString());
-								config.isServerDirty = true;
-							}
-						}
-						// If default webapp has not been found, check this one
-						if (addRootWebapp && "".equals(context.getPath())) {
-							// A default webapp is being deployed, don't add one
-							addRootWebapp = false;
-						}
-						
-					}
-				}
-			}
-
-			if (addRootWebapp) {
-				// Add a context for the default webapp
-				Context rootContext = config.serverInstance.createContext(0);
-				rootContext.setPath("");
-				rootContext.setDocBase(deployDir.append("ROOT").toOSString());
-				rootContext.setReloadable("false");
-				config.isServerDirty = true;
-			}
-			monitor.worked(100);
-
 			if (monitor.isCanceled())
-				return Status.CANCEL_STATUS;
+				return;
 			
-			config.save(confDir, false, ProgressUtil.getSubMonitorFor(monitor, 30));
-			monitor.worked(100);
+			config.save(path, false, ProgressUtil.getSubMonitorFor(monitor, 30));
 			
+			if (!monitor.isCanceled())
+				monitor.done();
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error localizing configuration", e);
-			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e);
-		} finally {
-			monitor.done();
 		}
-		return Status.OK_STATUS;
 	}
 
 	/**
@@ -569,7 +508,7 @@
 	public void modifyServerPort(String id, int port) {
 		try {
 			int con = Integer.parseInt(id);
-			Connector connector = serverInstance.getConnector(con);
+			Connector connector = server.getContextManager().getConnector(con);
 	
 			int size = connector.getParameterCount();
 			for (int i = 0; i < size; i++) {
@@ -595,7 +534,8 @@
 	 */
 	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
 		try {
-			Context context = serverInstance.getContext(index);
+			ContextManager contextManager = server.getContextManager();
+			Context context = contextManager.getContext(index);
 			context.setPath(path);
 			context.setDocBase(docBase);
 			context.setReloadable(reloadable ? "true" : "false");
@@ -622,100 +562,12 @@
 	 */
 	public void removeWebModule(int index) {
 		try {
-			serverInstance.removeContext(index);
+			ContextManager contextManager = server.getContextManager();
+			contextManager.removeElement("Context", index);
 			isServerDirty = true;
 			firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error removing web module " + index, e);
 		}
 	}
-
-	protected IStatus cleanupServer(IPath confDir, IPath installDir, IProgressMonitor monitor) {
-		MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.cleanupServerTask, null);
-		monitor = ProgressUtil.getMonitorFor(monitor);
-		monitor.beginTask(Messages.cleanupServerTask, 200);
-
-		try {
-			monitor.subTask(Messages.detectingRemovedProjects);
-
-			// Try to read old server configuration
-			Factory factory = new Factory();
-			factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server32");
-			File serverFile = confDir.append("conf").append("server.xml").toFile();
-			if (serverFile.exists()) {
-				Server oldServer = (Server) factory.loadDocument(new FileInputStream(serverFile));
-				ServerInstance oldInstance = new ServerInstance(oldServer);
-				
-				// Collect paths of old web modules managed by WTP
-				Set oldPaths = new HashSet();
-				Context [] contexts = oldInstance.getContexts();
-				if (contexts != null) {
-					for (int i = 0; i < contexts.length; i++) {
-						String source = contexts[i].getSource();
-						if (source != null && source.length() > 0 )	{
-							oldPaths.add(contexts[i].getPath());
-						}
-					}
-				}
-
-				// Remove paths for web modules that are staying around
-				List modules = getWebModules();
-				int size = modules.size();
-				for (int i = 0; i < size; i++) {
-					WebModule module = (WebModule) modules.get(i);
-					oldPaths.remove(module.getPath());
-				}
-				monitor.worked(100);
-
-				// Delete work directories for managed web modules that have gone away
-				if (oldPaths.size() > 0 ) {
-					IProgressMonitor subMonitor = ProgressUtil.getSubMonitorFor(monitor, 100);
-					subMonitor.beginTask(Messages.deletingContextFilesTask, oldPaths.size() * 100);
-					
-					Iterator iter = oldPaths.iterator();
-					while (iter.hasNext()) {
-						String oldPath = (String)iter.next();
-						
-						// Delete work directory associated with the removed context if it is within confDir.
-						// If it is outside of confDir, assume user is going to manage it.
-						Context ctx = oldInstance.getContext(oldPath);
-						IPath ctxWorkPath = oldInstance.getContextWorkDirectory(confDir, ctx);
-						if (confDir.isPrefixOf(ctxWorkPath)) {
-							File ctxWorkDir = ctxWorkPath.toFile();
-							if (ctxWorkDir.exists() && ctxWorkDir.isDirectory()) {
-								IStatus [] results = PublishUtil.deleteDirectory(ctxWorkDir, ProgressUtil.getSubMonitorFor(monitor, 100));
-								if (results.length > 0) {
-									Trace.trace(Trace.SEVERE, "Could not delete work directory " + ctxWorkDir.getPath() + " for removed context " + oldPath);
-									for (int i = 0; i < results.length; i++) {
-										ms.add(results[i]);
-									}
-								}
-							}
-							else
-								monitor.worked(100);
-						}
-						else
-							monitor.worked(100);
-					}
-					subMonitor.done();
-				} else {
-					monitor.worked(100);
-				}
-			}
-			// Else no server.xml.  Assume first publish to new temp directory
-			else {
-				monitor.worked(200);
-			}
-			if (Trace.isTraceEnabled())
-				Trace.trace(Trace.FINER, "Server cleaned");
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not cleanup server at " + confDir.toOSString() + ": " + e.getMessage());
-			ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
-					NLS.bind(Messages.errorCleanupServer, new String[] {e.getLocalizedMessage()}), e));
-		}
-		
-		monitor.done();
-		return ms;
-	}
-	
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
index 5f4f2f2..a8d250d 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,7 @@
 	/**
 	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
 	 */
-	public IStatus verifyInstallPath(IPath installPath) {
+	public boolean verifyInstallPath(IPath installPath) {
 		return TomcatPlugin.verifyInstallPath(installPath, TomcatPlugin.TOMCAT_32);
 	}
 	
@@ -75,13 +75,6 @@
 	}
 
 	/**
-	 * @see ITomcatVersionHandler#getExcludedRuntimeProgramArguments(boolean, boolean)
-	 */
-	public String[] getExcludedRuntimeProgramArguments(boolean debug, boolean starting) {
-		return null;
-	}
-	
-	/**
 	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean)
 	 */
 	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv) {
@@ -93,9 +86,6 @@
 		return s;
 	}
 
-	/**
-	 * @see ITomcatVersionHandler#getRuntimePolicyFile(IPath)
-	 */
 	public String getRuntimePolicyFile(IPath configPath) {
 		return configPath.append("conf").append("tomcat.policy").toOSString();
 	}
@@ -114,36 +104,6 @@
 	 * @see ITomcatVersionHandler#getRuntimeBaseDirectory(TomcatServerBehaviour)
 	 */
 	public IPath getRuntimeBaseDirectory(TomcatServerBehaviour serverBehaviour) {
-		if (serverBehaviour.getTomcatServer().isTestEnvironment())
-			return serverBehaviour.getTempDirectory();
 		return serverBehaviour.getServer().getRuntime().getLocation();
 	}
-
-	/**
-	 * @see ITomcatVersionHandler#prepareRuntimeDirectory(IPath)
-	 */
-	public IStatus prepareRuntimeDirectory(IPath confDir) {
-		if (Trace.isTraceEnabled())
-			Trace.trace(Trace.FINER, "Preparing runtime directory");
-		// Prepare instance directory structure that is relative to server.xml
-		File temp = confDir.append("conf").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("webapps").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = confDir.append("work").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-
-		return Status.OK_STATUS;		
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#prepareDeployDirectory(IPath)
-	 */
-	public IStatus prepareDeployDirectory(IPath deployPath) {
-		return TomcatVersionHelper.createDeploymentDirectory(deployPath,
-				TomcatVersionHelper.DEFAULT_WEBXML_SERVLET22);
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java
index 5508438..172ff40 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,34 +10,23 @@
  **********************************************************************/
 package org.eclipse.jst.server.tomcat.core.internal;
 
-import java.io.BufferedWriter;
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.InputStream;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.*;
 import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
 import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Connector;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Server;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Service;
+import org.eclipse.jst.server.tomcat.core.internal.xml.server40.*;
 import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.server.core.ServerPort;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.InputSource;
+
+import org.eclipse.wst.server.core.ServerPort;
 /**
  * Tomcat v4.0 server configuration.
  */
@@ -49,7 +38,6 @@
 	protected static final String APACHE_CONNECTOR = "org.apache.catalina.connector.warp.WarpConnector";
 
 	protected Server server;
-	protected ServerInstance serverInstance;
 	protected Factory serverFactory;
 	protected boolean isServerDirty;
 
@@ -58,6 +46,7 @@
 	protected Document tomcatUsersDocument;
 
 	protected String policyFile;
+	protected boolean isPolicyDirty;
 
 	/**
 	 * Tomcat40Configuration constructor.
@@ -76,8 +65,7 @@
 		Iterator iterator = getServerPorts().iterator();
 		while (iterator.hasNext()) {
 			ServerPort port = (ServerPort) iterator.next();
-			// Return only an HTTP port from the selected Service
-			if (port.getName().equals("HTTP Connector") && port.getId().indexOf('/') < 0)
+			if (port.getName().equals("HTTP Connector"))
 				return port;
 		}
 		return null;
@@ -109,7 +97,6 @@
 	
 		// add connectors
 		try {
-			String instanceServiceName = serverInstance.getService().getName();
 			int size = server.getServiceCount();
 			for (int i = 0; i < size; i++) {
 				Service service = server.getService(i);
@@ -145,13 +132,8 @@
 							advanced = false;
 					} else if (APACHE_CONNECTOR.equals(className))
 						name = "Apache Connector";
-					String portId;
-					if (instanceServiceName != null && instanceServiceName.equals(service.getName()))
-						portId = Integer.toString(i);
-					else
-						portId = i +"/" + j;
 					if (className != null && className.length() > 0)
-						ports.add(new ServerPort(portId, name, port, protocol, contentTypes, advanced));
+						ports.add(new ServerPort(i + "/" + j, name, port, protocol, contentTypes, advanced));
 				}
 			}
 		} catch (Exception e) {
@@ -168,17 +150,23 @@
 		List list = new ArrayList();
 	
 		try {
-			Context [] contexts = serverInstance.getContexts();
-			if (contexts != null) {
-				for (int i = 0; i < contexts.length; i++) {
-					Context context = contexts[i];
-					String reload = context.getReloadable();
-					if (reload == null)
-						reload = "false";
-					WebModule module = new WebModule(context.getPath(), 
-						context.getDocBase(), context.getSource(),
-						reload.equalsIgnoreCase("true") ? true : false);
-					list.add(module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						Context context = host.getContext(j);
+						String reload = context.getReloadable();
+						if (reload == null)
+							reload = "false";
+						WebModule module = new WebModule(context.getPath(), 
+							context.getDocBase(), context.getSource(),
+							reload.equalsIgnoreCase("true") ? true : false);
+						list.add(module);
+					}
 				}
 			}
 		} catch (Exception e) {
@@ -187,35 +175,22 @@
 		return list;
 	}
 	
-	/**
-	 * @see TomcatConfiguration#getServerWorkDirectory(IPath)
-	 */
-	public IPath getServerWorkDirectory(IPath basePath) {
-		return serverInstance.getHostWorkDirectory(basePath);
-	}
-
-	/**
-	 * @see TomcatConfiguration#getContextWorkDirectory(IPath, ITomcatWebModule)
-	 */
-	public IPath getContextWorkDirectory(IPath basePath, ITomcatWebModule module) {
-		Context context = serverInstance.getContext(module.getPath());
-		if (context != null)
-			return serverInstance.getContextWorkDirectory(basePath, context);
-		
-		return null;
-	}
-
-	/**
-	 * @see TomcatConfiguration#importFromPath(IPath, boolean, IProgressMonitor)
-	 */
 	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
 		load(path, monitor);
 		
 		// for test environment, remove existing contexts since a separate
 		// catalina.base will be used
 		if (isTestEnv) {
-			while (serverInstance.removeContext(0)) {
-				// no-op
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Host host = service.getEngine().getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						host.removeElement("Context", 0);
+					}
+				}
 			}
 		}
 	}
@@ -237,7 +212,6 @@
 			serverFactory = new Factory();
 			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
 			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			serverInstance = new ServerInstance(server, null, null);
 			monitor.worked(1);
 
 			webAppDocument = new WebAppDocument(path.append("web.xml"));
@@ -247,7 +221,21 @@
 			monitor.worked(1);
 		
 			// load policy file
-			policyFile = TomcatVersionHelper.getFileContents(new FileInputStream(path.append("catalina.policy").toFile()));
+			BufferedReader br = null;
+			try {
+				br = new BufferedReader(new InputStreamReader(new FileInputStream(path.append("catalina.policy").toFile())));
+				String temp = br.readLine();
+				policyFile = "";
+				while (temp != null) {
+					policyFile += temp + "\n";
+					temp = br.readLine();
+				}
+			} catch (Exception e) {
+				Trace.trace(Trace.WARNING, "Could not load policy file", e);
+			} finally {
+				if (br != null)
+					br.close();
+			}
 			monitor.worked(1);
 	
 			if (monitor.isCanceled())
@@ -278,7 +266,6 @@
 			serverFactory = new Factory();
 			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
 			server = (Server) serverFactory.loadDocument(in);
-			serverInstance = new ServerInstance(server, null, null);
 			monitor.worked(200);
 	
 			// load web.xml
@@ -296,7 +283,21 @@
 			// load catalina.policy
 			file = folder.getFile("catalina.policy");
 			in = file.getContents();
-			policyFile = TomcatVersionHelper.getFileContents(in);
+			BufferedReader br = null;
+			try {
+				br = new BufferedReader(new InputStreamReader(in));
+				String temp = br.readLine();
+				policyFile = "";
+				while (temp != null) {
+					policyFile += temp + "\n";
+					temp = br.readLine();
+				}
+			} catch (Exception e) {
+				Trace.trace(Trace.WARNING, "Could not load policy file", e);
+			} finally {
+				if (br != null)
+					br.close();
+			}
 			monitor.worked(200);
 	
 			if (monitor.isCanceled())
@@ -320,35 +321,38 @@
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(Messages.savingTask, 3);
-			
+	
 			// make sure directory exists
 			if (!path.toFile().exists()) {
 				forceDirty = true;
 				path.toFile().mkdir();
 			}
 			monitor.worked(1);
-			
+	
 			// save files
-			if (forceDirty || isServerDirty) {
+			if (forceDirty || isServerDirty)
 				serverFactory.save(path.append("server.xml").toOSString());
-				isServerDirty = false;
-			}
 			monitor.worked(1);
-			
+	
+			//if (forceDirty || isWebAppDirty)
+			//	webAppFactory.save(dirPath + "web.xml");
+			//webAppDocument.save(path.toOSString(), forceDirty || isPolicyDirty);
 			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
 			monitor.worked(1);
-			
+	
 			if (forceDirty)
 				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
 			monitor.worked(1);
-			
-			if (forceDirty) {
+	
+			if (forceDirty || isPolicyDirty) {
 				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.policy").toFile()));
 				bw.write(policyFile);
 				bw.close();
 			}
 			monitor.worked(1);
-			
+			isServerDirty = false;
+			isPolicyDirty = false;
+	
 			if (monitor.isCanceled())
 				return;
 			monitor.done();
@@ -357,14 +361,7 @@
 			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
 		}
 	}
-
-	/**
-	 * Save to the given directory.  All files are forced to be saved.
-	 * 
-	 * @param path desination path for the files
-	 * @param monitor a progress monitor
-	 * @exception CoreException
-	 */
+	
 	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
 		save(path, true, monitor);
 	}
@@ -380,7 +377,7 @@
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(Messages.savingTask, 900);
-			
+	
 			// save server.xml
 			byte[] data = serverFactory.getContents();
 			InputStream in = new ByteArrayInputStream(data);
@@ -392,11 +389,10 @@
 					monitor.worked(200);
 			} else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			isServerDirty = false;
-			
+	
 			// save web.xml
 			webAppDocument.save(folder.getFile("web.xml"), ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			// save tomcat-users.xml
 			data = XMLUtil.getContents(tomcatUsersDocument);
 			in = new ByteArrayInputStream(data);
@@ -406,7 +402,7 @@
 				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			// save catalina.policy
 			in = new ByteArrayInputStream(policyFile.getBytes());
 			file = folder.getFile("catalina.policy");
@@ -415,7 +411,7 @@
 				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			if (monitor.isCanceled())
 				return;
 			monitor.done();
@@ -424,7 +420,7 @@
 			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
 		}
 	}
-
+	
 	/**
 	 * @see ITomcatConfigurationWorkingCopy#addMimeMapping(int, IMimeMapping)
 	 */
@@ -438,15 +434,22 @@
 	 */
 	public void addWebModule(int index, ITomcatWebModule module) {
 		try {
-			Context context = serverInstance.createContext(index);
-			if (context != null) {
-				context.setDocBase(module.getDocumentBase());
-				context.setPath(module.getPath());
-				context.setReloadable(module.isReloadable() ? "true" : "false");
-				if (module.getMemento() != null && module.getMemento().length() > 0)
-					context.setSource(module.getMemento());
-				isServerDirty = true;
-				firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					Context context = (Context) host.createElement(index, "Context");
+					context.setDocBase(module.getDocumentBase());
+					context.setPath(module.getPath());
+					context.setReloadable(module.isReloadable() ? "true" : "false");
+					if (module.getMemento() != null && module.getMemento().length() > 0)
+						context.setSource(module.getMemento());
+					isServerDirty = true;
+					firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
+					return;
+				}
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error adding web module " + module.getPath(), e);
@@ -480,27 +483,14 @@
 			}
 	
 			int i = id.indexOf("/");
-			// If a connector in the instance Service
-			if (i < 0) {
-				int connNum = Integer.parseInt(id);
-				Connector connector = serverInstance.getConnector(connNum);
-				if (connector != null) {
-					connector.setPort(port + "");
-					isServerDirty = true;
-					firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-				}
-			}
-			// Else a connector in another Service
-			else {
-				int servNum = Integer.parseInt(id.substring(0, i));
-				int connNum = Integer.parseInt(id.substring(i + 1));
-				
-				Service service = server.getService(servNum);
-				Connector connector = service.getConnector(connNum);
-				connector.setPort(port + "");
-				isServerDirty = true;
-				firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-			}
+			int servNum = Integer.parseInt(id.substring(0, i));
+			int connNum = Integer.parseInt(id.substring(i + 1));
+			
+			Service service = server.getService(servNum);
+			Connector connector = service.getConnector(connNum);
+			connector.setPort(port + "");
+			isServerDirty = true;
+			firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error modifying server port " + id, e);
 		}
@@ -514,14 +504,21 @@
 	 */
 	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
 		try {
-			Context context = serverInstance.getContext(index);
-			if (context != null) {
-				context.setPath(path);
-				context.setDocBase(docBase);
-				context.setReloadable(reloadable ? "true" : "false");
-				isServerDirty = true;
-				WebModule module = new WebModule(path, docBase, null, reloadable);
-				firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					Context context = host.getContext(index);
+					context.setPath(path);
+					context.setDocBase(docBase);
+					context.setReloadable(reloadable ? "true" : "false");
+					isServerDirty = true;
+					WebModule module = new WebModule(path, docBase, null, reloadable);
+					firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
+					return;
+				}
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
@@ -543,33 +540,54 @@
 	 */
 	public void removeWebModule(int index) {
 		try {
-			serverInstance.removeContext(index);
-			isServerDirty = true;
-			firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					host.removeElement("Context", index);
+					isServerDirty = true;
+					firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
+					return;
+				}
+			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error removing module ref " + index, e);
 		}
 	}
 
-	/**
-	 * Cleanup the server instance.  This consists of deleting the work
-	 * directory associated with Contexts that are going away in the
-	 * up coming publish.
-	 * 
-	 * @param baseDir path to server instance directory, i.e. catalina.base
-	 * @param installDir path to server installation directory (not currently used)
-	 * @param monitor a progress monitor or null
-	 * @return MultiStatus containing results of the cleanup operation
-	 */
-	protected IStatus cleanupServer(IPath baseDir, IPath installDir, IProgressMonitor monitor) {
-		List modules = getWebModules();
-		return TomcatVersionHelper.cleanupCatalinaServer(baseDir, installDir, modules, monitor);
-	}
-
-	/**
-	 * @see TomcatConfiguration#localizeConfiguration(IPath, IPath, TomcatServer, IProgressMonitor)
-	 */
-	public IStatus localizeConfiguration(IPath baseDir, IPath deployDir, TomcatServer tomcatServer, IProgressMonitor monitor) {
-		return TomcatVersionHelper.localizeConfiguration(baseDir, deployDir, tomcatServer, monitor);
+	protected IStatus prepareRuntimeDirectory(IPath confDir) {
+		Trace.trace(Trace.FINER, "Preparing runtime directory");
+		// Prepare a catalina.base directory structure
+		File temp = confDir.append("conf").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = confDir.append("logs").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = confDir.append("temp").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		IPath tempPath = confDir.append("webapps/ROOT/WEB-INF");
+		temp = tempPath.toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = tempPath.append("web.xml").toFile();
+		if (!temp.exists()) {
+			FileWriter fw;
+			try {
+				fw = new FileWriter(temp);
+				fw.write(DEFAULT_WEBXML_SERVLET23);
+				fw.close();
+			} catch (IOException e) {
+				Trace.trace(Trace.WARNING, "Unable to create web.xml for ROOT context.", e);
+			}
+		}
+		temp = confDir.append("work").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		
+		return Status.OK_STATUS;		
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
index 3700556..13470f2 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,13 @@
 	/**
 	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
 	 */
-	public IStatus verifyInstallPath(IPath installPath) {
-		return TomcatPlugin.verifyInstallPathWithFolderCheck(installPath, TomcatPlugin.TOMCAT_40);
+	public boolean verifyInstallPath(IPath installPath) {
+		if (installPath == null)
+			return false;
+
+		if (!TomcatPlugin.verifyTomcatVersionFromPath(installPath, TomcatPlugin.TOMCAT_40))
+			return false;
+		return TomcatPlugin.verifyInstallPath(installPath, TomcatPlugin.TOMCAT_40);
 	}
 	
 	/**
@@ -72,16 +77,6 @@
 	}
 
 	/**
-	 * @see ITomcatVersionHandler#getExcludedRuntimeProgramArguments(boolean, boolean)
-	 */
-	public String[] getExcludedRuntimeProgramArguments(boolean debug, boolean starting) {
-		if (!debug) {
-			return new String [] { "-debug" };
-		}
-		return null;
-	}
-	
-	/**
 	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean)
 	 */
 	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv) {
@@ -100,9 +95,6 @@
 		return s;
 	}
 
-	/**
-	 * @see ITomcatVersionHandler#getRuntimePolicyFile(IPath)
-	 */
 	public String getRuntimePolicyFile(IPath configPath) {
 		return configPath.append("conf").append("catalina.policy").toOSString();
 	}
@@ -126,20 +118,4 @@
 			return serverBehaviour.getTempDirectory();
 		return serverBehaviour.getServer().getRuntime().getLocation();
 	}
-
-	/**
-	 * @see ITomcatVersionHandler#prepareRuntimeDirectory(IPath)
-	 */
-	public IStatus prepareRuntimeDirectory(IPath baseDir) {
-		return TomcatVersionHelper.createCatalinaInstanceDirectory(baseDir,
-				TomcatVersionHelper.DEFAULT_WEBXML_SERVLET23);
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#prepareDeployDirectory(IPath)
-	 */
-	public IStatus prepareDeployDirectory(IPath deployPath) {
-		return TomcatVersionHelper.createDeploymentDirectory(deployPath,
-				TomcatVersionHelper.DEFAULT_WEBXML_SERVLET23);
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java
index 3c3481d..90fff44 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,35 +10,25 @@
  **********************************************************************/
 package org.eclipse.jst.server.tomcat.core.internal;
 
-import java.io.BufferedWriter;
-import java.io.ByteArrayInputStream;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.InputStream;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.*;
 import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
 import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Connector;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Listener;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Server;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Service;
+import org.eclipse.jst.server.tomcat.core.internal.xml.server40.*;
 import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.server.core.ServerPort;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import org.eclipse.wst.server.core.ServerPort;
 /**
  * Tomcat v4.1 server configuration.
  */
@@ -52,7 +42,6 @@
 	protected static final String APACHE_CONNECTOR = "org.apache.catalina.connector.warp.WarpConnector";
 
 	protected Server server;
-	protected ServerInstance serverInstance;
 	protected Factory serverFactory;
 	protected boolean isServerDirty;
 
@@ -61,6 +50,7 @@
 	protected Document tomcatUsersDocument;
 
 	protected String policyFile;
+	protected boolean isPolicyDirty;
 
 	/**
 	 * Tomcat41Configuration constructor.
@@ -79,8 +69,7 @@
 		Iterator iterator = getServerPorts().iterator();
 		while (iterator.hasNext()) {
 			ServerPort port = (ServerPort) iterator.next();
-			// Return only an HTTP port from the selected Service
-			if (port.getName().equals("HTTP Connector") && port.getId().indexOf('/') < 0)
+			if (port.getName().equals("HTTP Connector"))
 				return port;
 		}
 		return null;
@@ -112,7 +101,6 @@
 	
 		// add connectors
 		try {
-			String instanceServiceName = serverInstance.getService().getName();
 			int size = server.getServiceCount();
 			for (int i = 0; i < size; i++) {
 				Service service = server.getService(i);
@@ -155,13 +143,8 @@
 							advanced = false;
 					} else if (APACHE_CONNECTOR.equals(className))
 						name = "Apache Connector";
-					String portId;
-					if (instanceServiceName != null && instanceServiceName.equals(service.getName()))
-						portId = Integer.toString(i);
-					else
-						portId = i +"/" + j;
 					if (className != null && className.length() > 0)
-						ports.add(new ServerPort(portId, name, port, protocol, contentTypes, advanced));
+						ports.add(new ServerPort(i + "/" + j, name, port, protocol, contentTypes, advanced));
 				}
 			}
 		} catch (Exception e) {
@@ -178,17 +161,23 @@
 		List list = new ArrayList();
 	
 		try {
-			Context [] contexts = serverInstance.getContexts();
-			if (contexts != null) {
-				for (int i = 0; i < contexts.length; i++) {
-					Context context = contexts[i];
-					String reload = context.getReloadable();
-					if (reload == null)
-						reload = "false";
-					WebModule module = new WebModule(context.getPath(), 
-						context.getDocBase(), context.getSource(),
-						reload.equalsIgnoreCase("true") ? true : false);
-					list.add(module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						Context context = host.getContext(j);
+						String reload = context.getReloadable();
+						if (reload == null)
+							reload = "false";
+						WebModule module = new WebModule(context.getPath(), 
+							context.getDocBase(), context.getSource(),
+							reload.equalsIgnoreCase("true") ? true : false);
+						list.add(module);
+					}
 				}
 			}
 		} catch (Exception e) {
@@ -197,35 +186,22 @@
 		return list;
 	}
 	
-	/**
-	 * @see TomcatConfiguration#getServerWorkDirectory(IPath)
-	 */
-	public IPath getServerWorkDirectory(IPath basePath) {
-		return serverInstance.getHostWorkDirectory(basePath);
-	}
-
-	/**
-	 * @see TomcatConfiguration#getContextWorkDirectory(IPath, ITomcatWebModule)
-	 */
-	public IPath getContextWorkDirectory(IPath basePath, ITomcatWebModule module) {
-		Context context = serverInstance.getContext(module.getPath());
-		if (context != null)
-			return serverInstance.getContextWorkDirectory(basePath, context);
-		
-		return null;
-	}
-
-	/**
-	 * @see TomcatConfiguration#importFromPath(IPath, boolean, IProgressMonitor)
-	 */
 	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
 		load(path, monitor);
 		
 		// for test environment, remove existing contexts since a separate
 		// catalina.base will be used
 		if (isTestEnv) {
-			while (serverInstance.removeContext(0)) {
-				// no-op
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Host host = service.getEngine().getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						host.removeElement("Context", 0);
+					}
+				}
 			}
 		}
 	}
@@ -247,7 +223,6 @@
 			serverFactory = new Factory();
 			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
 			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			serverInstance = new ServerInstance(server, null, null);
 			monitor.worked(1);
 
 			webAppDocument = new WebAppDocument(path.append("web.xml"));
@@ -257,7 +232,21 @@
 			monitor.worked(1);
 		
 			// load policy file
-			policyFile = TomcatVersionHelper.getFileContents(new FileInputStream(path.append("catalina.policy").toFile()));
+			BufferedReader br = null;
+			try {
+				br = new BufferedReader(new InputStreamReader(new FileInputStream(path.append("catalina.policy").toFile())));
+				String temp = br.readLine();
+				policyFile = "";
+				while (temp != null) {
+					policyFile += temp + "\n";
+					temp = br.readLine();
+				}
+			} catch (Exception e) {
+				Trace.trace(Trace.WARNING, "Could not load policy file", e);
+			} finally {
+				if (br != null)
+					br.close();
+			}
 			monitor.worked(1);
 	
 			if (monitor.isCanceled())
@@ -288,7 +277,6 @@
 			serverFactory = new Factory();
 			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
 			server = (Server) serverFactory.loadDocument(in);
-			serverInstance = new ServerInstance(server, null, null);
 			monitor.worked(200);
 	
 			// load web.xml
@@ -306,7 +294,21 @@
 			// load catalina.policy
 			file = folder.getFile("catalina.policy");
 			in = file.getContents();
-			policyFile = TomcatVersionHelper.getFileContents(in);
+			BufferedReader br = null;
+			try {
+				br = new BufferedReader(new InputStreamReader(in));
+				String temp = br.readLine();
+				policyFile = "";
+				while (temp != null) {
+					policyFile += temp + "\n";
+					temp = br.readLine();
+				}
+			} catch (Exception e) {
+				Trace.trace(Trace.WARNING, "Could not load policy file", e);
+			} finally {
+				if (br != null)
+					br.close();
+			}
 			monitor.worked(200);
 	
 			if (monitor.isCanceled())
@@ -339,26 +341,29 @@
 			monitor.worked(1);
 	
 			// save files
-			if (forceDirty || isServerDirty) {
+			if (forceDirty || isServerDirty)
 				serverFactory.save(path.append("server.xml").toOSString());
-				isServerDirty = false;
-			}
 			monitor.worked(1);
-			
+	
+			//if (forceDirty || isWebAppDirty)
+			//	webAppFactory.save(dirPath + "web.xml");
+			//webAppDocument.save(path.toOSString(), forceDirty || isPolicyDirty);
 			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
 			monitor.worked(1);
-			
+	
 			if (forceDirty)
 				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
 			monitor.worked(1);
-			
-			if (forceDirty) {
+	
+			if (forceDirty || isPolicyDirty) {
 				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.policy").toFile()));
 				bw.write(policyFile);
 				bw.close();
 			}
 			monitor.worked(1);
-			
+			isServerDirty = false;
+			isPolicyDirty = false;
+	
 			if (monitor.isCanceled())
 				return;
 			monitor.done();
@@ -367,14 +372,7 @@
 			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
 		}
 	}
-
-	/**
-	 * Save to the given directory.  All files are forced to be saved.
-	 * 
-	 * @param path desination path for the files
-	 * @param monitor a progress monitor
-	 * @exception CoreException
-	 */
+	
 	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
 		save(path, true, monitor);
 	}
@@ -390,7 +388,7 @@
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
 			monitor.beginTask(Messages.savingTask, 900);
-			
+	
 			// save server.xml
 			byte[] data = serverFactory.getContents();
 			InputStream in = new ByteArrayInputStream(data);
@@ -402,11 +400,10 @@
 					monitor.worked(200);
 			} else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			isServerDirty = false;
-			
+	
 			// save web.xml
 			webAppDocument.save(folder.getFile("web.xml"), ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			// save tomcat-users.xml
 			data = XMLUtil.getContents(tomcatUsersDocument);
 			in = new ByteArrayInputStream(data);
@@ -416,7 +413,7 @@
 				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			// save catalina.policy
 			in = new ByteArrayInputStream(policyFile.getBytes());
 			file = folder.getFile("catalina.policy");
@@ -425,7 +422,7 @@
 				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			if (monitor.isCanceled())
 				return;
 			monitor.done();
@@ -464,15 +461,22 @@
 	 */
 	public void addWebModule(int index, ITomcatWebModule module) {
 		try {
-			Context context = serverInstance.createContext(index);
-			if (context != null) {
-				context.setDocBase(module.getDocumentBase());
-				context.setPath(module.getPath());
-				context.setReloadable(module.isReloadable() ? "true" : "false");
-				if (module.getMemento() != null && module.getMemento().length() > 0)
-					context.setSource(module.getMemento());
-				isServerDirty = true;
-				firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					Context context = (Context) host.createElement(index, "Context");
+					context.setDocBase(module.getDocumentBase());
+					context.setPath(module.getPath());
+					context.setReloadable(module.isReloadable() ? "true" : "false");
+					if (module.getMemento() != null && module.getMemento().length() > 0)
+						context.setSource(module.getMemento());
+					isServerDirty = true;
+					firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
+					return;
+				}
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error adding web module " + module.getPath(), e);
@@ -506,27 +510,14 @@
 			}
 	
 			int i = id.indexOf("/");
-			// If a connector in the instance Service
-			if (i < 0) {
-				int connNum = Integer.parseInt(id);
-				Connector connector = serverInstance.getConnector(connNum);
-				if (connector != null) {
-					connector.setPort(port + "");
-					isServerDirty = true;
-					firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-				}
-			}
-			// Else a connector in another Service
-			else {
-				int servNum = Integer.parseInt(id.substring(0, i));
-				int connNum = Integer.parseInt(id.substring(i + 1));
-				
-				Service service = server.getService(servNum);
-				Connector connector = service.getConnector(connNum);
-				connector.setPort(port + "");
-				isServerDirty = true;
-				firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-			}
+			int servNum = Integer.parseInt(id.substring(0, i));
+			int connNum = Integer.parseInt(id.substring(i + 1));
+			
+			Service service = server.getService(servNum);
+			Connector connector = service.getConnector(connNum);
+			connector.setPort(port + "");
+			isServerDirty = true;
+			firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error modifying server port " + id, e);
 		}
@@ -540,14 +531,21 @@
 	 */
 	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
 		try {
-			Context context = serverInstance.getContext(index);
-			if (context != null) {
-				context.setPath(path);
-				context.setDocBase(docBase);
-				context.setReloadable(reloadable ? "true" : "false");
-				isServerDirty = true;
-				WebModule module = new WebModule(path, docBase, null, reloadable);
-				firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					Context context = host.getContext(index);
+					context.setPath(path);
+					context.setDocBase(docBase);
+					context.setReloadable(reloadable ? "true" : "false");
+					isServerDirty = true;
+					WebModule module = new WebModule(path, docBase, null, reloadable);
+					firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
+					return;
+				}
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
@@ -569,46 +567,181 @@
 	 */
 	public void removeWebModule(int index) {
 		try {
-			serverInstance.removeContext(index);
-			isServerDirty = true;
-			firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					host.removeElement("Context", index);
+					isServerDirty = true;
+					firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
+					return;
+				}
+			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error removing module ref " + index, e);
 		}
 	}
 
-	/**
-	 * Add context configuration found in META-INF/context.xml files
-	 * present in projects to published server.xml.
-	 * 
-	 * @param baseDir path to catalina instance directory
-	 * @param deployDir path to deployment directory
-	 * @param monitor a progress monitor or null
-	 * @return result of operation
-	 */
-	protected IStatus publishContextConfig(IPath baseDir, IPath deployDir, IProgressMonitor monitor) {
-		return TomcatVersionHelper.publishCatalinaContextConfig(baseDir, deployDir, monitor);
+	protected IStatus publishContextConfig(IPath baseDir, IProgressMonitor monitor) {
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		monitor.beginTask(Messages.publishConfigurationTask, 300);
+
+		Trace.trace(Trace.FINER, "Apply context configurations");
+		IPath confDir = baseDir.append("conf");
+		IPath webappsDir = baseDir.append("webapps");
+		try {
+			monitor.subTask(Messages.publishContextConfigTask);
+			Factory factory = new Factory();
+			factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
+			Server publishedServer = (Server) factory.loadDocument(new FileInputStream(confDir.append("server.xml").toFile()));
+			monitor.worked(100);
+			
+			boolean modified = false;
+
+			MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.publishContextConfigTask, null);
+			int size = publishedServer.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = publishedServer.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						Context context = host.getContext(j);
+						monitor.subTask(NLS.bind(Messages.checkingContextTask,
+								new String[] {context.getPath()}));
+						if (addContextConfig(webappsDir, context, ms)) {
+							modified = true;
+						}
+					}
+				}
+			}
+			monitor.worked(100);
+			if (modified) {
+				monitor.subTask(Messages.savingContextConfigTask);
+				factory.save(confDir.append("server.xml").toOSString());
+			}
+			monitor.done();
+			
+			// If problem(s) occurred adding context configurations, return error status
+			if (ms.getChildren().length > 0) {
+				return ms;
+			}
+			Trace.trace(Trace.FINER, "Server.xml updated with context.xml configurations");
+			return Status.OK_STATUS;
+		} catch (Exception e) {
+			Trace.trace(Trace.WARNING, "Could not apply context configurations to published Tomcat v5.0 configuration from " + confDir.toOSString() + ": " + e.getMessage());
+			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e);
+		}
 	}
 	
 	/**
-	 * Cleanup the server instance.  This consists of deleting the work
-	 * directory associated with Contexts that are going away in the
-	 * up coming publish.
-	 * 
-	 * @param baseDir path to server instance directory, i.e. catalina.base
-	 * @param installDir path to server installation directory (not currently used)
-	 * @param monitor a progress monitor or null
-	 * @return MultiStatus containing results of the cleanup operation
+	 * If the specified Context is linked to a project, try to
+	 * update it with any configuration from a META-INF/context.xml found
+	 * relative to the specified web applications directory and context docBase.
+	 * @param webappsDir Path to server's web applications directory.
+	 * @param context Context object to receive context.xml contents.
+	 * @param ms MultiStatus object to receive error status.
+	 * @return Returns true if context is modified.
 	 */
-	protected IStatus cleanupServer(IPath baseDir, IPath installDir, IProgressMonitor monitor) {
-		List modules = getWebModules();
-		return TomcatVersionHelper.cleanupCatalinaServer(baseDir, installDir, modules, monitor);
+	protected boolean addContextConfig(IPath webappsDir, Context context, MultiStatus ms) {
+		boolean modified = false;
+		String source = context.getSource();
+		if (source != null && source.length() > 0 )
+		{
+			String docBase = context.getDocBase();
+			try {
+				Context contextConfig = loadContextConfig(webappsDir.append(docBase));
+				if (null != contextConfig) {
+					if (context.hasChildNodes())
+						context.removeChildren();
+					contextConfig.copyChildrenTo(context);
+					Map attrs = contextConfig.getAttributes();
+					Iterator iter = attrs.keySet().iterator();
+					while (iter.hasNext()) {
+						String name = (String) iter.next();
+						if (!name.equalsIgnoreCase("path")
+								&& !name.equalsIgnoreCase("docBase")
+								&& !name.equalsIgnoreCase("source")) {
+							String value = (String)attrs.get(name);
+							context.setAttributeValue(name, value);
+						}
+					}
+					modified = true;
+				}
+			} catch (Exception e) {
+				String contextPath = context.getPath();
+				if (contextPath.startsWith("/")) {
+					contextPath = contextPath.substring(1);
+				}
+				Trace.trace(Trace.SEVERE, "Error reading context.xml file for " + contextPath, e);
+				IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
+						NLS.bind(Messages.errorCouldNotLoadContextXml, contextPath), e);
+				ms.add(s);
+			}
+		}
+		return modified;
 	}
-
+	
 	/**
-	 * @see TomcatConfiguration#localizeConfiguration(IPath, IPath, TomcatServer, IProgressMonitor)
+	 * Tries to read a META-INF/context.xml file relative to the
+	 * specified web application path.  If found, it creates a Context object
+	 * containing the contexts of that file.
+	 * @param webappDir Path to the web application
+	 * @return Context element created from context.xml, or null if not found.
+	 * @throws SAXException If there is a error parsing the XML. 
+	 * @throws IOException If there is an error reading the file.
 	 */
-	public IStatus localizeConfiguration(IPath baseDir, IPath deployDir, TomcatServer tomcatServer, IProgressMonitor monitor) {
-		return TomcatVersionHelper.localizeConfiguration(baseDir, deployDir, tomcatServer, monitor);
+	protected Context loadContextConfig(IPath webappDir) throws IOException, SAXException {
+		File contextXML = new File(webappDir.toOSString()+ File.separator + "META-INF" + File.separator + "context.xml");
+		if (contextXML.exists()) {
+			try {
+				InputStream is = new FileInputStream(contextXML);
+				Factory ctxFactory = new Factory();
+				ctxFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
+				Context ctx = (Context)ctxFactory.loadDocument(is);
+				is.close();
+				return ctx;
+			} catch (FileNotFoundException e) {
+				// Ignore, should never occur
+			}
+		}
+		return null;
+ 	}
+	
+	protected IStatus prepareRuntimeDirectory(IPath confDir) {
+		Trace.trace(Trace.FINER, "Preparing runtime directory");
+		// Prepare a catalina.base directory structure
+		File temp = confDir.append("conf").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = confDir.append("logs").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = confDir.append("temp").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		IPath tempPath = confDir.append("webapps/ROOT/WEB-INF");
+		temp = tempPath.toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = tempPath.append("web.xml").toFile();
+		if (!temp.exists()) {
+			FileWriter fw;
+			try {
+				fw = new FileWriter(temp);
+				fw.write(DEFAULT_WEBXML_SERVLET23);
+				fw.close();
+			} catch (IOException e) {
+				Trace.trace(Trace.WARNING, "Unable to create web.xml for ROOT context.", e);
+			}
+		}
+		temp = confDir.append("work").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		
+		return Status.OK_STATUS;		
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
index de10133..b3ce465 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,13 @@
 	/**
 	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
 	 */
-	public IStatus verifyInstallPath(IPath installPath) {
-		return TomcatPlugin.verifyInstallPathWithFolderCheck(installPath, TomcatPlugin.TOMCAT_41);
+	public boolean verifyInstallPath(IPath installPath) {
+		if (installPath == null)
+			return false;
+
+		if (!TomcatPlugin.verifyTomcatVersionFromPath(installPath, TomcatPlugin.TOMCAT_41))
+			return false;
+		return TomcatPlugin.verifyInstallPath(installPath, TomcatPlugin.TOMCAT_41);
 	}
 	
 	/**
@@ -72,16 +77,6 @@
 	}
 
 	/**
-	 * @see ITomcatVersionHandler#getExcludedRuntimeProgramArguments(boolean, boolean)
-	 */
-	public String[] getExcludedRuntimeProgramArguments(boolean debug, boolean starting) {
-		if (!debug) {
-			return new String [] { "-debug" };
-		}
-		return null;
-	}
-	
-	/**
 	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean)
 	 */
 	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv) {
@@ -98,9 +93,6 @@
 		return s;
 	}
 
-	/**
-	 * @see ITomcatVersionHandler#getRuntimePolicyFile(IPath)
-	 */
 	public String getRuntimePolicyFile(IPath configPath) {
 		return configPath.append("conf").append("catalina.policy").toOSString();
 	}
@@ -124,20 +116,4 @@
 			return serverBehaviour.getTempDirectory();
 		return serverBehaviour.getServer().getRuntime().getLocation();
 	}
-
-	/**
-	 * @see ITomcatVersionHandler#prepareRuntimeDirectory(IPath)
-	 */
-	public IStatus prepareRuntimeDirectory(IPath baseDir) {
-		return TomcatVersionHelper.createCatalinaInstanceDirectory(baseDir,
-				TomcatVersionHelper.DEFAULT_WEBXML_SERVLET23);
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#prepareDeployDirectory(IPath)
-	 */
-	public IStatus prepareDeployDirectory(IPath deployPath) {
-		return TomcatVersionHelper.createDeploymentDirectory(deployPath,
-				TomcatVersionHelper.DEFAULT_WEBXML_SERVLET23);
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
index 6d608de..d291af0 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,45 +10,32 @@
  **********************************************************************/
 package org.eclipse.jst.server.tomcat.core.internal;
 
-import java.io.BufferedWriter;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.InputStream;
+import java.io.*;
 import java.util.ArrayList;
-import java.util.Collection;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.server.core.PublishUtil;
+import org.eclipse.core.runtime.*;
 import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
 import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Connector;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Listener;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Server;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Service;
+import org.eclipse.jst.server.tomcat.core.internal.xml.server40.*;
 import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.server.core.ServerPort;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import org.eclipse.wst.server.core.ServerPort;
 /**
  * Tomcat v5.0 server configuration.
  */
 public class Tomcat50Configuration extends TomcatConfiguration {
 	protected static final String DEFAULT_SERVICE = "Catalina";
 	protected Server server;
-	protected ServerInstance serverInstance;
 	protected Factory serverFactory;
 	protected boolean isServerDirty;
 
@@ -57,9 +44,8 @@
 	protected Document tomcatUsersDocument;
 
 	protected String policyFile;
+	protected boolean isPolicyDirty;
 
-	protected String propertiesFile;
-	
 	/**
 	 * Tomcat50Configuration constructor.
 	 * 
@@ -77,8 +63,7 @@
 		Iterator iterator = getServerPorts().iterator();
 		while (iterator.hasNext()) {
 			ServerPort port = (ServerPort) iterator.next();
-			// Return only an HTTP port from the selected Service
-			if (port.getName().equals("HTTP") && port.getId().indexOf('/') < 0)
+			if (port.getName().equals("HTTP"))
 				return port;
 		}
 		return null;
@@ -110,7 +95,6 @@
 	
 		// add connectors
 		try {
-			String instanceServiceName = serverInstance.getService().getName();
 			int size = server.getServiceCount();
 			for (int i = 0; i < size; i++) {
 				Service service = server.getService(i);
@@ -140,12 +124,7 @@
 						protocol2 = "SSL";
 					} else
 						advanced = false;
-					String portId;
-					if (instanceServiceName != null && instanceServiceName.equals(service.getName()))
-						portId = Integer.toString(i);
-					else
-						portId = i +"/" + j;
-					ports.add(new ServerPort(portId, name, port, protocol2, contentTypes, advanced));
+					ports.add(new ServerPort(i +"/" + j, name, port, protocol2, contentTypes, advanced));
 				}
 			}
 		} catch (Exception e) {
@@ -162,17 +141,23 @@
 		List list = new ArrayList();
 	
 		try {
-			Context [] contexts = serverInstance.getContexts();
-			if (contexts != null) {
-				for (int i = 0; i < contexts.length; i++) {
-					Context context = contexts[i];
-					String reload = context.getReloadable();
-					if (reload == null)
-						reload = "false";
-					WebModule module = new WebModule(context.getPath(), 
-						context.getDocBase(), context.getSource(),
-						reload.equalsIgnoreCase("true") ? true : false);
-					list.add(module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						Context context = host.getContext(j);
+						String reload = context.getReloadable();
+						if (reload == null)
+							reload = "false";
+						WebModule module = new WebModule(context.getPath(), 
+							context.getDocBase(), context.getSource(),
+							reload.equalsIgnoreCase("true") ? true : false);
+						list.add(module);
+					}
 				}
 			}
 		} catch (Exception e) {
@@ -182,30 +167,12 @@
 	}
 
 	/**
-	 * @see TomcatConfiguration#getServerWorkDirectory(IPath)
-	 */
-	public IPath getServerWorkDirectory(IPath basePath) {
-		return serverInstance.getHostWorkDirectory(basePath);
-	}
-
-	/**
-	 * @see TomcatConfiguration#getContextWorkDirectory(IPath, ITomcatWebModule)
-	 */
-	public IPath getContextWorkDirectory(IPath basePath, ITomcatWebModule module) {
-		Context context = serverInstance.getContext(module.getPath());
-		if (context != null)
-			return serverInstance.getContextWorkDirectory(basePath, context);
-		
-		return null;
-	}
-
-	/**
 	 * @see TomcatConfiguration#load(IPath, IProgressMonitor)
 	 */
 	public void load(IPath path, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 6);
+			monitor.beginTask(Messages.loadingTask, 5);
 			
 			// check for catalina.policy to verify that this is a v5.0 config
 			InputStream in = new FileInputStream(path.append("catalina.policy").toFile());
@@ -216,7 +183,6 @@
 			serverFactory = new Factory();
 			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
 			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			serverInstance = new ServerInstance(server, null, null);
 			monitor.worked(1);
 
 			webAppDocument = new WebAppDocument(path.append("web.xml"));
@@ -226,15 +192,21 @@
 			monitor.worked(1);
 			
 			// load policy file
-			policyFile = TomcatVersionHelper.getFileContents(new FileInputStream(path.append("catalina.policy").toFile()));
-			monitor.worked(1);
-
-			// load properties file
-			File file = path.append("catalina.properties").toFile();
-			if (file.exists())
-				propertiesFile = TomcatVersionHelper.getFileContents(new FileInputStream(file));
-			else
-				propertiesFile = null;
+			BufferedReader br = null;
+			try {
+				br = new BufferedReader(new InputStreamReader(new FileInputStream(path.append("catalina.policy").toFile())));
+				String temp = br.readLine();
+				policyFile = "";
+				while (temp != null) {
+					policyFile += temp + "\n";
+					temp = br.readLine();
+				}
+			} catch (Exception e) {
+				Trace.trace(Trace.WARNING, "Could not load policy file", e);
+			} finally {
+				if (br != null)
+					br.close();
+			}
 			monitor.worked(1);
 			
 			if (monitor.isCanceled())
@@ -246,17 +218,22 @@
 		}
 	}
 
-	/**
-	 * @see TomcatConfiguration#importFromPath(IPath, boolean, IProgressMonitor)
-	 */
 	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
 		load(path, monitor);
 		
 		// for test environment, remove existing contexts since a separate
 		// catalina.base will be used
 		if (isTestEnv) {
-			while (serverInstance.removeContext(0)) {
-				// no-op
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Host host = service.getEngine().getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						host.removeElement("Context", 0);
+					}
+				}
 			}
 		}
 	}
@@ -267,7 +244,7 @@
 	public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 1000);
+			monitor.beginTask(Messages.loadingTask, 800);
 	
 			// check for catalina.policy to verify that this is a v4.0 config
 			IFile file = folder.getFile("catalina.policy");
@@ -280,7 +257,6 @@
 			serverFactory = new Factory();
 			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
 			server = (Server) serverFactory.loadDocument(in);
-			serverInstance = new ServerInstance(server, null, null);
 			monitor.worked(200);
 	
 			// load web.xml
@@ -298,19 +274,23 @@
 			// load catalina.policy
 			file = folder.getFile("catalina.policy");
 			in = file.getContents();
-			policyFile = TomcatVersionHelper.getFileContents(in);
-			monitor.worked(200);
-
-			// load catalina.properties
-			file = folder.getFile("catalina.properties");
-			if (file.exists()) {
-				in = file.getContents();
-				propertiesFile = TomcatVersionHelper.getFileContents(in);
+			BufferedReader br = null;
+			try {
+				br = new BufferedReader(new InputStreamReader(in));
+				String temp = br.readLine();
+				policyFile = "";
+				while (temp != null) {
+					policyFile += temp + "\n";
+					temp = br.readLine();
+				}
+			} catch (Exception e) {
+				Trace.trace(Trace.WARNING, "Could not load policy file", e);
+			} finally {
+				if (br != null)
+					br.close();
 			}
-			else
-				propertiesFile = null;
 			monitor.worked(200);
-			
+	
 			if (monitor.isCanceled())
 				throw new Exception("Cancelled");
 			monitor.done();
@@ -330,7 +310,7 @@
 	protected void save(IPath path, boolean forceDirty, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 4);
+			monitor.beginTask(Messages.savingTask, 3);
 	
 			// make sure directory exists
 			if (!path.toFile().exists()) {
@@ -338,34 +318,31 @@
 				path.toFile().mkdir();
 			}
 			monitor.worked(1);
-			
+	
 			// save files
-			if (forceDirty || isServerDirty) {
+			if (forceDirty || isServerDirty)
 				serverFactory.save(path.append("server.xml").toOSString());
-				isServerDirty = false;
-			}
 			monitor.worked(1);
-			
+	
+			//if (forceDirty || isWebAppDirty)
+			//	webAppFactory.save(dirPath + "web.xml");
+			//webAppDocument.save(path.toOSString(), forceDirty || isPolicyDirty);
 			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
 			monitor.worked(1);
-			
+	
 			if (forceDirty)
 				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
 			monitor.worked(1);
-			
-			if (forceDirty) {
+	
+			if (forceDirty || isPolicyDirty) {
 				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.policy").toFile()));
 				bw.write(policyFile);
 				bw.close();
 			}
 			monitor.worked(1);
-			if (propertiesFile != null && forceDirty) {
-				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.properties").toFile()));
-				bw.write(propertiesFile);
-				bw.close();
-			}
-			monitor.worked(1);
-			
+			isServerDirty = false;
+			isPolicyDirty = false;
+	
 			if (monitor.isCanceled())
 				return;
 			monitor.done();
@@ -374,14 +351,7 @@
 			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
 		}
 	}
-
-	/**
-	 * Save to the given directory.  All files are forced to be saved.
-	 * 
-	 * @param path desination path for the files
-	 * @param monitor a progress monitor
-	 * @exception CoreException
-	 */
+	
 	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
 		save(path, true, monitor);
 	}
@@ -396,8 +366,8 @@
 	public void save(IFolder folder, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 1100);
-			
+			monitor.beginTask(Messages.savingTask, 900);
+	
 			// save server.xml
 			byte[] data = serverFactory.getContents();
 			InputStream in = new ByteArrayInputStream(data);
@@ -409,11 +379,10 @@
 					monitor.worked(200);
 			} else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			isServerDirty = false;
-			
+	
 			// save web.xml
 			webAppDocument.save(folder.getFile("web.xml"), ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			// save tomcat-users.xml
 			data = XMLUtil.getContents(tomcatUsersDocument);
 			in = new ByteArrayInputStream(data);
@@ -423,7 +392,7 @@
 				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			// save catalina.policy
 			in = new ByteArrayInputStream(policyFile.getBytes());
 			file = folder.getFile("catalina.policy");
@@ -432,19 +401,7 @@
 				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
-			// save catalina.properties
-			if (propertiesFile != null) {
-				in = new ByteArrayInputStream(propertiesFile.getBytes());
-				file = folder.getFile("catalina.properties");
-				if (file.exists())
-					monitor.worked(200);
-					//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-				else
-					file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			} else
-				monitor.worked(200);
-			
+	
 			if (monitor.isCanceled())
 				return;
 			monitor.done();
@@ -483,15 +440,22 @@
 	 */
 	public void addWebModule(int index, ITomcatWebModule module) {
 		try {
-			Context context = serverInstance.createContext(index);
-			if (context != null) {
-				context.setDocBase(module.getDocumentBase());
-				context.setPath(module.getPath());
-				context.setReloadable(module.isReloadable() ? "true" : "false");
-				if (module.getMemento() != null && module.getMemento().length() > 0)
-					context.setSource(module.getMemento());
-				isServerDirty = true;
-				firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					Context context = (Context) host.createElement(index, "Context");
+					context.setDocBase(module.getDocumentBase());
+					context.setPath(module.getPath());
+					context.setReloadable(module.isReloadable() ? "true" : "false");
+					if (module.getMemento() != null && module.getMemento().length() > 0)
+						context.setSource(module.getMemento());
+					isServerDirty = true;
+					firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
+					return;
+				}
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error adding web module " + module.getPath(), e);
@@ -525,28 +489,14 @@
 			}
 	
 			int i = id.indexOf("/");
-			// If a connector in the instance Service
-			if (i < 0) {
-				int connNum = Integer.parseInt(id);
-				Connector connector = serverInstance.getConnector(connNum);
-				if (connector != null) {
-					connector.setPort(port + "");
-					isServerDirty = true;
-					firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-				}
-			}
-			// Else a connector in another Service
-			else {
-				int servNum = Integer.parseInt(id.substring(0, i));
-				int connNum = Integer.parseInt(id.substring(i + 1));
-				
-				Service service = server.getService(servNum);
-				Connector connector = service.getConnector(connNum);
-				connector.setPort(port + "");
-				isServerDirty = true;
-				firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-			}
+			int servNum = Integer.parseInt(id.substring(0, i));
+			int connNum = Integer.parseInt(id.substring(i + 1));
 			
+			Service service = server.getService(servNum);
+			Connector connector = service.getConnector(connNum);
+			connector.setPort(port + "");
+			isServerDirty = true;
+			firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error modifying server port " + id, e);
 		}
@@ -560,14 +510,21 @@
 	 */
 	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
 		try {
-			Context context = serverInstance.getContext(index);
-			if (context != null) {
-				context.setPath(path);
-				context.setDocBase(docBase);
-				context.setReloadable(reloadable ? "true" : "false");
-				isServerDirty = true;
-				WebModule module = new WebModule(path, docBase, null, reloadable);
-				firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					Context context = host.getContext(index);
+					context.setPath(path);
+					context.setDocBase(docBase);
+					context.setReloadable(reloadable ? "true" : "false");
+					isServerDirty = true;
+					WebModule module = new WebModule(path, docBase, null, reloadable);
+					firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
+					return;
+				}
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
@@ -589,39 +546,151 @@
 	 */
 	public void removeWebModule(int index) {
 		try {
-			serverInstance.removeContext(index);
-			isServerDirty = true;
-			firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					host.removeElement("Context", index);
+					isServerDirty = true;
+					firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
+					return;
+				}
+			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error removing module ref " + index, e);
 		}
 	}
 
-	/**
-	 * Add context configuration found in META-INF/context.xml files
-	 * present in projects to published server.xml.
-	 * 
-	 * @param baseDir path to catalina instance directory
-	 * @param deployDir path to deployment directory
-	 * @param monitor a progress monitor or null
-	 * @return result of operation
-	 */
-	protected IStatus publishContextConfig(IPath baseDir, IPath deployDir, IProgressMonitor monitor) {
-		return TomcatVersionHelper.publishCatalinaContextConfig(baseDir, deployDir, monitor);
+	protected IStatus publishContextConfig(IPath baseDir, IProgressMonitor monitor) {
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		monitor.beginTask(Messages.publishConfigurationTask, 300);
+
+		Trace.trace(Trace.FINER, "Apply context configurations");
+		IPath confDir = baseDir.append("conf");
+		IPath webappsDir = baseDir.append("webapps");
+		try {
+			monitor.subTask(Messages.publishContextConfigTask);
+			Factory factory = new Factory();
+			factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
+			Server publishedServer = (Server) factory.loadDocument(new FileInputStream(confDir.append("server.xml").toFile()));
+			monitor.worked(100);
+
+			boolean modified = false;
+
+			MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.publishContextConfigTask, null);
+			int size = publishedServer.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = publishedServer.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						Context context = host.getContext(j);
+						monitor.subTask(NLS.bind(Messages.checkingContextTask,
+								new String[] {context.getPath()}));
+						if (addContextConfig(webappsDir, context, ms)) {
+							modified = true;
+						}
+					}
+				}
+			}
+			monitor.worked(100);
+			if (modified) {
+				monitor.subTask(Messages.savingContextConfigTask);
+				factory.save(confDir.append("server.xml").toOSString());
+			}
+			monitor.done();
+			
+			// If problem(s) occurred adding context configurations, return error status
+			if (ms.getChildren().length > 0) {
+				return ms;
+			}
+			Trace.trace(Trace.FINER, "Server.xml updated with context.xml configurations");
+			return Status.OK_STATUS;
+		} catch (Exception e) {
+			Trace.trace(Trace.WARNING, "Could not apply context configurations to published Tomcat v5.0 configuration from " + confDir.toOSString() + ": " + e.getMessage());
+			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e);
+		}
 	}
 	
 	/**
-	 * Cleanup the server instance.  This consists of deleting the work
-	 * directory associated with Contexts that are going away in the
-	 * up coming publish.  Also, Context XML files which may have been
-	 * created for these Contexts are also deleted.
-	 * 
-	 * @param baseDir path to server instance directory, i.e. catalina.base
-	 * @param installDir path to server installation directory (not currently used)
-	 * @param monitor a progress monitor or null
-	 * @return MultiStatus containing results of the cleanup operation
+	 * If the specified Context is linked to a project, try to
+	 * update it with any configuration from a META-INF/context.xml found
+	 * relative to the specified web applications directory and context docBase.
+	 * @param webappsDir Path to server's web applications directory.
+	 * @param context Context object to receive context.xml contents.
+	 * @param ms MultiStatus object to receive error status.
+	 * @return Returns true if context is modified.
 	 */
-	protected IStatus cleanupServer(IPath baseDir, IPath installDir, IProgressMonitor monitor) {
+	protected boolean addContextConfig(IPath webappsDir, Context context, MultiStatus ms) {
+		boolean modified = false;
+		String source = context.getSource();
+		if (source != null && source.length() > 0 )
+		{
+			String docBase = context.getDocBase();
+			try {
+				Context contextConfig = loadContextConfig(webappsDir.append(docBase));
+				if (null != contextConfig) {
+					if (context.hasChildNodes())
+						context.removeChildren();
+					contextConfig.copyChildrenTo(context);
+					Map attrs = contextConfig.getAttributes();
+					Iterator iter = attrs.keySet().iterator();
+					while (iter.hasNext()) {
+						String name = (String) iter.next();
+						if (!name.equalsIgnoreCase("path")
+								&& !name.equalsIgnoreCase("docBase")
+								&& !name.equalsIgnoreCase("source")) {
+							String value = (String)attrs.get(name);
+							context.setAttributeValue(name, value);
+						}
+					}
+					modified = true;
+				}
+			} catch (Exception e) {
+				String contextPath = context.getPath();
+				if (contextPath.startsWith("/")) {
+					contextPath = contextPath.substring(1);
+				}
+				Trace.trace(Trace.SEVERE, "Error reading context.xml file for " + contextPath, e);
+				IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
+						NLS.bind(Messages.errorCouldNotLoadContextXml, contextPath), e);
+				ms.add(s);
+			}
+		}
+		return modified;
+	}
+	
+	/**
+	 * Tries to read a META-INF/context.xml file relative to the
+	 * specified web application path.  If found, it creates a Context object
+	 * containing the contexts of that file.
+	 * @param webappDir Path to the web application
+	 * @return Context element created from context.xml, or null if not found.
+	 * @throws SAXException If there is a error parsing the XML. 
+	 * @throws IOException If there is an error reading the file.
+	 */
+	protected Context loadContextConfig(IPath webappDir) throws IOException, SAXException {
+		File contextXML = new File(webappDir.toOSString()+ File.separator + "META-INF" + File.separator + "context.xml");
+		if (contextXML.exists()) {
+			try {
+				InputStream is = new FileInputStream(contextXML);
+				Factory ctxFactory = new Factory();
+				ctxFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
+				Context ctx = (Context)ctxFactory.loadDocument(is);
+				is.close();
+				return ctx;
+			} catch (FileNotFoundException e) {
+				// Ignore, should never occur
+			}
+		}
+		return null;
+ 	}
+
+	protected IStatus cleanupServer(IPath confDir, IPath installDir, IProgressMonitor monitor) {
 		MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.cleanupServerTask, null);
 		monitor = ProgressUtil.getMonitorFor(monitor);
 		monitor.beginTask(Messages.cleanupServerTask, 200);
@@ -629,82 +698,87 @@
 		try {
 			monitor.subTask(Messages.detectingRemovedProjects);
 
-			IPath serverXml = baseDir.append("conf").append("server.xml");
-			ServerInstance oldInstance = TomcatVersionHelper.getCatalinaServerInstance(serverXml, null, null);
-			if (oldInstance != null) {
-				List modules = getWebModules();
-				Collection oldPaths = TomcatVersionHelper.getRemovedCatalinaContexts(oldInstance, modules);
-				monitor.worked(100);
-				if (oldPaths != null && oldPaths.size() > 0) {
-					// Begin building path to context directory
-					IPath contextXmlDir = oldInstance.getContextXmlDirectory(baseDir.append("conf"));
+			// Try to read old server configuration
+			Factory factory = new Factory();
+			factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
+			File serverFile = confDir.append("conf").append("server.xml").toFile();
+			if (serverFile.exists()) {
+				Server oldServer = (Server) factory.loadDocument(new FileInputStream(serverFile));
+				
+				// Begin building path to context directory
+				IPath contextDir = confDir.append("conf");
 
-					// Delete context files and work directories for managed web modules that have gone away
-					if (oldPaths.size() > 0 ) {
-						IProgressMonitor subMonitor = ProgressUtil.getSubMonitorFor(monitor, 100);
-						subMonitor.beginTask(Messages.deletingContextFilesTask, oldPaths.size() * 200);
-						
-						Iterator iter = oldPaths.iterator();
-						while (iter.hasNext()) {
-							String oldPath = (String)iter.next();
-							// Derive the context file name from the path + ".xml", minus the leading '/'
-							String fileName;
-							if (oldPath.length() > 0)
-								fileName = oldPath.substring(1) + ".xml";
-							else
-								fileName = "ROOT.xml";
-							IPath contextPath = contextXmlDir.append(fileName);
-							File contextFile = contextPath.toFile();
-							if (contextFile.exists()) {
-								subMonitor.subTask(NLS.bind(Messages.deletingContextFile, fileName));
-								if (contextFile.delete()) {
-									if (Trace.isTraceEnabled())
-										Trace.trace(Trace.FINER, "Leftover context file " + fileName + " deleted.");
-									ms.add(new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0,
-											NLS.bind(Messages.deletedContextFile, fileName), null));
-								} else {
-									Trace.trace(Trace.SEVERE, "Could not delete obsolete context file " + contextPath.toOSString());
-									ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
-											NLS.bind(Messages.errorCouldNotDeleteContextFile, contextPath.toOSString()), null));
-								}
-								subMonitor.worked(100);
+				// Collect paths of old web modules managed by WTP
+				Set oldPaths = new HashSet();
+				int size = oldServer.getServiceCount();
+				for (int i = 0; i < size; i++) {
+					Service service = oldServer.getService(i);
+					if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+						Engine engine = service.getEngine();
+						Host host = engine.getHost();
+						// Finish path to context directory
+						contextDir = contextDir.append(engine.getName()).append(host.getName());
+						int size2 = host.getContextCount();
+						for (int j = 0; j < size2; j++) {
+							Context context = host.getContext(j);
+							String source = context.getSource();
+							if (source != null && source.length() > 0 )	{
+								oldPaths.add(context.getPath());
 							}
-							
-							// Delete work directory associated with the removed context if it is within confDir.
-							// If it is outside of confDir, assume user is going to manage it.
-							Context ctx = oldInstance.getContext(oldPath);
-							IPath ctxWorkPath = oldInstance.getContextWorkDirectory(baseDir, ctx);
-							if (baseDir.isPrefixOf(ctxWorkPath)) {
-								File ctxWorkDir = ctxWorkPath.toFile();
-								if (ctxWorkDir.exists() && ctxWorkDir.isDirectory()) {
-									IStatus [] results = PublishUtil.deleteDirectory(ctxWorkDir, ProgressUtil.getSubMonitorFor(monitor, 100));
-									if (results.length > 0) {
-										Trace.trace(Trace.SEVERE, "Could not delete work directory " + ctxWorkDir.getPath() + " for removed context " + oldPath);
-										for (int i = 0; i < results.length; i++) {
-											ms.add(results[i]);
-										}
-									}
-								}
-								else
-									monitor.worked(100);
-							}
-							else
-								monitor.worked(100);
 						}
-						subMonitor.done();
-					} else {
-						monitor.worked(100);
 					}
 				}
+
+				// Remove paths for web modules that are staying around
+				List modules = getWebModules();
+				size = modules.size();
+				for (int i = 0; i < size; i++) {
+					WebModule module = (WebModule) modules.get(i);
+					oldPaths.remove(module.getPath());
+				}
+				monitor.worked(100);
+
+				// Delete context files for managed web modules that have gone away
+				if (oldPaths.size() > 0 ) {
+					IProgressMonitor subMonitor = ProgressUtil.getSubMonitorFor(monitor, 100);
+					subMonitor.beginTask(Messages.deletingContextFilesTask, oldPaths.size() * 100);
+					
+					Iterator iter = oldPaths.iterator();
+					while (iter.hasNext()) {
+						// Derive the context file name from the path + ".xml", minus the leading '/'
+						String fileName = (String)iter.next();
+						if (fileName.length() > 0)
+							fileName = fileName.substring(1) + ".xml";
+						else
+							fileName = "ROOT.xml";
+						IPath contextPath = contextDir.append(fileName);
+						File contextFile = contextPath.toFile();
+						if (contextFile.exists()) {
+							subMonitor.subTask(NLS.bind(Messages.deletingContextFile, fileName));
+							if (contextFile.delete()) {
+								Trace.trace(Trace.FINER, "Leftover context file " + fileName + " deleted.");
+								ms.add(new Status(IStatus.OK, TomcatPlugin.PLUGIN_ID, 0,
+										NLS.bind(Messages.deletedContextFile, fileName), null));
+							} else {
+								Trace.trace(Trace.SEVERE, "Could not delete obsolete context file " + contextPath.toOSString());
+								ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
+										NLS.bind(Messages.errorCouldNotDeleteContextFile, contextPath.toOSString()), null));
+							}
+							subMonitor.worked(100);
+						}
+					}
+					subMonitor.done();
+				} else {
+					monitor.worked(100);
+				}
 			}
 			// Else no server.xml.  Assume first publish to new temp directory
 			else {
 				monitor.worked(200);
 			}
-			if (Trace.isTraceEnabled())
-				Trace.trace(Trace.FINER, "Server cleaned");
+			Trace.trace(Trace.FINER, "Server cleaned");
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not cleanup server at " + baseDir.toOSString() + ": " + e.getMessage());
+			Trace.trace(Trace.SEVERE, "Could not cleanup server at " + confDir.toOSString() + ": " + e.getMessage());
 			ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
 					NLS.bind(Messages.errorCleanupServer, new String[] {e.getLocalizedMessage()}), e));
 		}
@@ -713,10 +787,37 @@
 		return ms;
 	}
 
-	/**
-	 * @see TomcatConfiguration#localizeConfiguration(IPath, IPath, TomcatServer, IProgressMonitor)
-	 */
-	public IStatus localizeConfiguration(IPath baseDir, IPath deployDir, TomcatServer tomcatServer, IProgressMonitor monitor) {
-		return TomcatVersionHelper.localizeConfiguration(baseDir, deployDir, tomcatServer, monitor);
+	protected IStatus prepareRuntimeDirectory(IPath confDir) {
+		Trace.trace(Trace.FINER, "Preparing runtime directory");
+		// Prepare a catalina.base directory structure
+		File temp = confDir.append("conf").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = confDir.append("logs").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = confDir.append("temp").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		IPath tempPath = confDir.append("webapps/ROOT/WEB-INF");
+		temp = tempPath.toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = tempPath.append("web.xml").toFile();
+		if (!temp.exists()) {
+			FileWriter fw;
+			try {
+				fw = new FileWriter(temp);
+				fw.write(DEFAULT_WEBXML_SERVLET24);
+				fw.close();
+			} catch (IOException e) {
+				Trace.trace(Trace.WARNING, "Unable to create web.xml for ROOT context.", e);
+			}
+		}
+		temp = confDir.append("work").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+
+		return Status.OK_STATUS;		
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java
index 1309ee4..f3a303c 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,8 +25,13 @@
 	/**
 	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
 	 */
-	public IStatus verifyInstallPath(IPath installPath) {
-		return TomcatPlugin.verifyInstallPathWithFolderCheck(installPath, TomcatPlugin.TOMCAT_50);
+	public boolean verifyInstallPath(IPath installPath) {
+		if (installPath == null)
+			return false;
+
+if (!TomcatPlugin.verifyTomcatVersionFromPath(installPath, TomcatPlugin.TOMCAT_50))
+			return false;
+		return TomcatPlugin.verifyInstallPath(installPath, TomcatPlugin.TOMCAT_50);
 	}
 	
 	/**
@@ -72,16 +77,6 @@
 	}
 
 	/**
-	 * @see ITomcatVersionHandler#getExcludedRuntimeProgramArguments(boolean, boolean)
-	 */
-	public String[] getExcludedRuntimeProgramArguments(boolean debug, boolean starting) {
-		if (!debug) {
-			return new String [] { "-debug" };
-		}
-		return null;
-	}
-	
-	/**
 	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean)
 	 */
 	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv) {
@@ -98,9 +93,6 @@
 		return s;
 	}
 
-	/**
-	 * @see ITomcatVersionHandler#getRuntimePolicyFile(IPath)
-	 */
 	public String getRuntimePolicyFile(IPath configPath) {
 		return configPath.append("conf").append("catalina.policy").toOSString();
 	}
@@ -124,20 +116,4 @@
 			return serverBehaviour.getTempDirectory();
 		return serverBehaviour.getServer().getRuntime().getLocation();
 	}
-
-	/**
-	 * @see ITomcatVersionHandler#prepareRuntimeDirectory(IPath)
-	 */
-	public IStatus prepareRuntimeDirectory(IPath baseDir) {
-		return TomcatVersionHelper.createCatalinaInstanceDirectory(baseDir,
-				TomcatVersionHelper.DEFAULT_WEBXML_SERVLET24);
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#prepareDeployDirectory(IPath)
-	 */
-	public IStatus prepareDeployDirectory(IPath deployPath) {
-		return TomcatVersionHelper.createDeploymentDirectory(deployPath,
-				TomcatVersionHelper.DEFAULT_WEBXML_SERVLET24);
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
index c19938e..2fa2f18 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,42 +10,30 @@
  **********************************************************************/
 package org.eclipse.jst.server.tomcat.core.internal;
 
-import java.io.BufferedWriter;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.InputStream;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.*;
 import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
 import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Connector;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Listener;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Server;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Service;
+import org.eclipse.jst.server.tomcat.core.internal.xml.server40.*;
 import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.server.core.ServerPort;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import org.eclipse.wst.server.core.ServerPort;
 /**
  * Tomcat v5.5 server configuration.
  */
 public class Tomcat55Configuration extends TomcatConfiguration {
 	protected static final String DEFAULT_SERVICE = "Catalina";
 	protected Server server;
-	protected ServerInstance serverInstance;
 	protected Factory serverFactory;
 	protected boolean isServerDirty;
 
@@ -54,9 +42,8 @@
 	protected Document tomcatUsersDocument;
 
 	protected String policyFile;
+	protected boolean isPolicyDirty;
 
-	protected String propertiesFile;
-	
 	/**
 	 * Tomcat55Configuration constructor.
 	 * 
@@ -74,8 +61,7 @@
 		Iterator iterator = getServerPorts().iterator();
 		while (iterator.hasNext()) {
 			ServerPort port = (ServerPort) iterator.next();
-			// Return only an HTTP port from the selected Service
-			if (port.getName().equals("HTTP") && port.getId().indexOf('/') < 0)
+			if (port.getName().equals("HTTP"))
 				return port;
 		}
 		return null;
@@ -107,7 +93,6 @@
 	
 		// add connectors
 		try {
-			String instanceServiceName = serverInstance.getService().getName();
 			int size = server.getServiceCount();
 			for (int i = 0; i < size; i++) {
 				Service service = server.getService(i);
@@ -137,12 +122,7 @@
 						protocol2 = "SSL";
 					} else
 						advanced = false;
-					String portId;
-					if (instanceServiceName != null && instanceServiceName.equals(service.getName()))
-						portId = Integer.toString(i);
-					else
-						portId = i +"/" + j;
-					ports.add(new ServerPort(portId, name, port, protocol2, contentTypes, advanced));
+					ports.add(new ServerPort(i +"/" + j, name, port, protocol2, contentTypes, advanced));
 				}
 			}
 		} catch (Exception e) {
@@ -159,17 +139,23 @@
 		List list = new ArrayList();
 	
 		try {
-			Context [] contexts = serverInstance.getContexts();
-			if (contexts != null) {
-				for (int i = 0; i < contexts.length; i++) {
-					Context context = contexts[i];
-					String reload = context.getReloadable();
-					if (reload == null)
-						reload = "false";
-					WebModule module = new WebModule(context.getPath(), 
-						context.getDocBase(), context.getSource(),
-						reload.equalsIgnoreCase("true") ? true : false);
-					list.add(module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						Context context = host.getContext(j);
+						String reload = context.getReloadable();
+						if (reload == null)
+							reload = "false";
+						WebModule module = new WebModule(context.getPath(), 
+							context.getDocBase(), context.getSource(),
+							reload.equalsIgnoreCase("true") ? true : false);
+						list.add(module);
+					}
 				}
 			}
 		} catch (Exception e) {
@@ -177,32 +163,14 @@
 		}
 		return list;
 	}
-
-	/**
-	 * @see TomcatConfiguration#getServerWorkDirectory(IPath)
-	 */
-	public IPath getServerWorkDirectory(IPath basePath) {
-		return serverInstance.getHostWorkDirectory(basePath);
-	}
-
-	/**
-	 * @see TomcatConfiguration#getContextWorkDirectory(IPath, ITomcatWebModule)
-	 */
-	public IPath getContextWorkDirectory(IPath basePath, ITomcatWebModule module) {
-		Context context = serverInstance.getContext(module.getPath());
-		if (context != null)
-			return serverInstance.getContextWorkDirectory(basePath, context);
-		
-		return null;
-	}
-
+	
 	/**
 	 * @see TomcatConfiguration#load(IPath, IProgressMonitor)
 	 */
 	public void load(IPath path, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 6);
+			monitor.beginTask(Messages.loadingTask, 5);
 			
 			// check for catalina.policy to verify that this is a v5.5 config
 			InputStream in = new FileInputStream(path.append("catalina.policy").toFile());
@@ -213,7 +181,6 @@
 			serverFactory = new Factory();
 			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
 			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			serverInstance = new ServerInstance(server, null, null);
 			monitor.worked(1);
 
 			webAppDocument = new WebAppDocument(path.append("web.xml"));
@@ -223,15 +190,21 @@
 			monitor.worked(1);
 			
 			// load policy file
-			policyFile = TomcatVersionHelper.getFileContents(new FileInputStream(path.append("catalina.policy").toFile()));
-			monitor.worked(1);
-
-			// load properties file
-			File file = path.append("catalina.properties").toFile();
-			if (file.exists())
-				propertiesFile = TomcatVersionHelper.getFileContents(new FileInputStream(file));
-			else
-				propertiesFile = null;
+			BufferedReader br = null;
+			try {
+				br = new BufferedReader(new InputStreamReader(new FileInputStream(path.append("catalina.policy").toFile())));
+				String temp = br.readLine();
+				policyFile = "";
+				while (temp != null) {
+					policyFile += temp + "\n";
+					temp = br.readLine();
+				}
+			} catch (Exception e) {
+				Trace.trace(Trace.WARNING, "Could not load policy file", e);
+			} finally {
+				if (br != null)
+					br.close();
+			}
 			monitor.worked(1);
 			
 			if (monitor.isCanceled())
@@ -243,17 +216,22 @@
 		}
 	}
 
-	/**
-	 * @see TomcatConfiguration#importFromPath(IPath, boolean, IProgressMonitor)
-	 */
 	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
 		load(path, monitor);
 		
 		// for test environment, remove existing contexts since a separate
 		// catalina.base will be used
 		if (isTestEnv) {
-			while (serverInstance.removeContext(0)) {
-				// no-op
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Host host = service.getEngine().getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						host.removeElement("Context", 0);
+					}
+				}
 			}
 		}
 	}
@@ -264,7 +242,7 @@
 	public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 1000);
+			monitor.beginTask(Messages.loadingTask, 800);
 	
 			// check for catalina.policy to verify that this is a v4.0 config
 			IFile file = folder.getFile("catalina.policy");
@@ -277,7 +255,6 @@
 			serverFactory = new Factory();
 			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
 			server = (Server) serverFactory.loadDocument(in);
-			serverInstance = new ServerInstance(server, null, null);
 			monitor.worked(200);
 	
 			// load web.xml
@@ -295,19 +272,23 @@
 			// load catalina.policy
 			file = folder.getFile("catalina.policy");
 			in = file.getContents();
-			policyFile = TomcatVersionHelper.getFileContents(in);
+			BufferedReader br = null;
+			try {
+				br = new BufferedReader(new InputStreamReader(in));
+				String temp = br.readLine();
+				policyFile = "";
+				while (temp != null) {
+					policyFile += temp + "\n";
+					temp = br.readLine();
+				}
+			} catch (Exception e) {
+				Trace.trace(Trace.WARNING, "Could not load policy file", e);
+			} finally {
+				if (br != null)
+					br.close();
+			}
 			monitor.worked(200);
 	
-			// load catalina.properties
-			file = folder.getFile("catalina.properties");
-			if (file.exists()) {
-				in = file.getContents();
-				propertiesFile = TomcatVersionHelper.getFileContents(in);
-			}
-			else
-				propertiesFile = null;
-			monitor.worked(200);
-			
 			if (monitor.isCanceled())
 				throw new Exception("Cancelled");
 			monitor.done();
@@ -327,42 +308,39 @@
 	protected void save(IPath path, boolean forceDirty, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 4);
-			
+			monitor.beginTask(Messages.savingTask, 3);
+	
 			// make sure directory exists
 			if (!path.toFile().exists()) {
 				forceDirty = true;
 				path.toFile().mkdir();
 			}
 			monitor.worked(1);
-			
+	
 			// save files
-			if (forceDirty || isServerDirty) {
+			if (forceDirty || isServerDirty)
 				serverFactory.save(path.append("server.xml").toOSString());
-				isServerDirty = false;
-			}
 			monitor.worked(1);
-			
+	
+			//if (forceDirty || isWebAppDirty)
+			//	webAppFactory.save(dirPath + "web.xml");
+			//webAppDocument.save(path.toOSString(), forceDirty || isPolicyDirty);
 			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
 			monitor.worked(1);
-			
+	
 			if (forceDirty)
 				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
 			monitor.worked(1);
-			
-			if (forceDirty) {
+	
+			if (forceDirty || isPolicyDirty) {
 				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.policy").toFile()));
 				bw.write(policyFile);
 				bw.close();
 			}
 			monitor.worked(1);
-			if (propertiesFile != null && forceDirty) {
-				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.properties").toFile()));
-				bw.write(propertiesFile);
-				bw.close();
-			}
-			monitor.worked(1);
-			
+			isServerDirty = false;
+			isPolicyDirty = false;
+	
 			if (monitor.isCanceled())
 				return;
 			monitor.done();
@@ -371,14 +349,7 @@
 			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
 		}
 	}
-
-	/**
-	 * Save to the given directory.  All files are forced to be saved.
-	 * 
-	 * @param path desination path for the files
-	 * @param monitor a progress monitor
-	 * @exception CoreException
-	 */
+	
 	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
 		save(path, true, monitor);
 	}
@@ -393,8 +364,8 @@
 	public void save(IFolder folder, IProgressMonitor monitor) throws CoreException {
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 1100);
-			
+			monitor.beginTask(Messages.savingTask, 900);
+	
 			// save server.xml
 			byte[] data = serverFactory.getContents();
 			InputStream in = new ByteArrayInputStream(data);
@@ -406,11 +377,10 @@
 					monitor.worked(200);
 			} else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			isServerDirty = false;
-			
+	
 			// save web.xml
 			webAppDocument.save(folder.getFile("web.xml"), ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			// save tomcat-users.xml
 			data = XMLUtil.getContents(tomcatUsersDocument);
 			in = new ByteArrayInputStream(data);
@@ -420,7 +390,7 @@
 				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
+	
 			// save catalina.policy
 			in = new ByteArrayInputStream(policyFile.getBytes());
 			file = folder.getFile("catalina.policy");
@@ -429,19 +399,7 @@
 				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
-			// save catalina.properties
-			if (propertiesFile != null) {
-				in = new ByteArrayInputStream(propertiesFile.getBytes());
-				file = folder.getFile("catalina.properties");
-				if (file.exists())
-					monitor.worked(200);
-					//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-				else
-					file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			} else
-				monitor.worked(200);
-			
+	
 			if (monitor.isCanceled())
 				return;
 			monitor.done();
@@ -480,15 +438,22 @@
 	 */
 	public void addWebModule(int index, ITomcatWebModule module) {
 		try {
-			Context context = serverInstance.createContext(index);
-			if (context != null) {
-				context.setDocBase(module.getDocumentBase());
-				context.setPath(module.getPath());
-				context.setReloadable(module.isReloadable() ? "true" : "false");
-				if (module.getMemento() != null && module.getMemento().length() > 0)
-					context.setSource(module.getMemento());
-				isServerDirty = true;
-				firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					Context context = (Context) host.createElement(index, "Context");
+					context.setDocBase(module.getDocumentBase());
+					context.setPath(module.getPath());
+					context.setReloadable(module.isReloadable() ? "true" : "false");
+					if (module.getMemento() != null && module.getMemento().length() > 0)
+						context.setSource(module.getMemento());
+					isServerDirty = true;
+					firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
+					return;
+				}
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error adding web module " + module.getPath(), e);
@@ -522,27 +487,14 @@
 			}
 	
 			int i = id.indexOf("/");
-			// If a connector in the instance Service
-			if (i < 0) {
-				int connNum = Integer.parseInt(id);
-				Connector connector = serverInstance.getConnector(connNum);
-				if (connector != null) {
-					connector.setPort(port + "");
-					isServerDirty = true;
-					firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-				}
-			}
-			// Else a connector in another Service
-			else {
-				int servNum = Integer.parseInt(id.substring(0, i));
-				int connNum = Integer.parseInt(id.substring(i + 1));
-				
-				Service service = server.getService(servNum);
-				Connector connector = service.getConnector(connNum);
-				connector.setPort(port + "");
-				isServerDirty = true;
-				firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-			}
+			int servNum = Integer.parseInt(id.substring(0, i));
+			int connNum = Integer.parseInt(id.substring(i + 1));
+			
+			Service service = server.getService(servNum);
+			Connector connector = service.getConnector(connNum);
+			connector.setPort(port + "");
+			isServerDirty = true;
+			firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error modifying server port " + id, e);
 		}
@@ -556,14 +508,21 @@
 	 */
 	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
 		try {
-			Context context = serverInstance.getContext(index);
-			if (context != null) {
-				context.setPath(path);
-				context.setDocBase(docBase);
-				context.setReloadable(reloadable ? "true" : "false");
-				isServerDirty = true;
-				WebModule module = new WebModule(path, docBase, null, reloadable);
-				firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					Context context = host.getContext(index);
+					context.setPath(path);
+					context.setDocBase(docBase);
+					context.setReloadable(reloadable ? "true" : "false");
+					isServerDirty = true;
+					WebModule module = new WebModule(path, docBase, null, reloadable);
+					firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
+					return;
+				}
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
@@ -585,46 +544,181 @@
 	 */
 	public void removeWebModule(int index) {
 		try {
-			serverInstance.removeContext(index);
-			isServerDirty = true;
-			firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
+			int size = server.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = server.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					host.removeElement("Context", index);
+					isServerDirty = true;
+					firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
+					return;
+				}
+			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error removing module ref " + index, e);
 		}
 	}
 
-	/**
-	 * Add context configuration found in META-INF/context.xml files
-	 * present in projects to published server.xml.
-	 * 
-	 * @param baseDir path to catalina instance directory
-	 * @param deployDir path to deployment directory
-	 * @param monitor a progress monitor or null
-	 * @return result of operation
-	 */
-	protected IStatus publishContextConfig(IPath baseDir, IPath deployDir, IProgressMonitor monitor) {
-		return TomcatVersionHelper.publishCatalinaContextConfig(baseDir, deployDir, monitor);
+	protected IStatus publishContextConfig(IPath baseDir, IProgressMonitor monitor) {
+		monitor = ProgressUtil.getMonitorFor(monitor);
+		monitor.beginTask(Messages.publishConfigurationTask, 300);
+
+		Trace.trace(Trace.FINER, "Apply context configurations");
+		IPath confDir = baseDir.append("conf");
+		IPath webappsDir = baseDir.append("webapps");
+		try {
+			monitor.subTask(Messages.publishContextConfigTask);
+			Factory factory = new Factory();
+			factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
+			Server publishedServer = (Server) factory.loadDocument(new FileInputStream(confDir.append("server.xml").toFile()));
+			monitor.worked(100);
+			
+			boolean modified = false;
+
+			MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.publishContextConfigTask, null);
+			int size = publishedServer.getServiceCount();
+			for (int i = 0; i < size; i++) {
+				Service service = publishedServer.getService(i);
+				if (service.getName().equalsIgnoreCase(DEFAULT_SERVICE)) {
+					Engine engine = service.getEngine();
+					Host host = engine.getHost();
+					int size2 = host.getContextCount();
+					for (int j = 0; j < size2; j++) {
+						Context context = host.getContext(j);
+						monitor.subTask(NLS.bind(Messages.checkingContextTask,
+								new String[] {context.getPath()}));
+						if (addContextConfig(webappsDir, context, ms)) {
+							modified = true;
+						}
+					}
+				}
+			}
+			monitor.worked(100);
+			if (modified) {
+				monitor.subTask(Messages.savingContextConfigTask);
+				factory.save(confDir.append("server.xml").toOSString());
+			}
+			monitor.done();
+			
+			// If problem(s) occurred adding context configurations, return error status
+			if (ms.getChildren().length > 0) {
+				return ms;
+			}
+			Trace.trace(Trace.FINER, "Server.xml updated with context.xml configurations");
+			return Status.OK_STATUS;
+		} catch (Exception e) {
+			Trace.trace(Trace.WARNING, "Could not apply context configurations to published Tomcat v5.5 configuration from " + confDir.toOSString() + ": " + e.getMessage());
+			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e);
+		}
 	}
 	
 	/**
-	 * Cleanup the server instance.  This consists of deleting the work
-	 * directory associated with Contexts that are going away in the
-	 * up coming publish.
-	 * 
-	 * @param baseDir path to server instance directory, i.e. catalina.base
-	 * @param installDir path to server installation directory (not currently used)
-	 * @param monitor a progress monitor or null
-	 * @return MultiStatus containing results of the cleanup operation
+	 * If the specified Context is linked to a project, try to
+	 * update it with any configuration from a META-INF/context.xml found
+	 * relative to the specified web applications directory and context docBase.
+	 * @param webappsDir Path to server's web applications directory.
+	 * @param context Context object to receive context.xml contents.
+	 * @param ms MultiStatus object to receive error status.
+	 * @return Returns true if context is modified.
 	 */
-	protected IStatus cleanupServer(IPath baseDir, IPath installDir, IProgressMonitor monitor) {
-		List modules = getWebModules();
-		return TomcatVersionHelper.cleanupCatalinaServer(baseDir, installDir, modules, monitor);
+	protected boolean addContextConfig(IPath webappsDir, Context context, MultiStatus ms) {
+		boolean modified = false;
+		String source = context.getSource();
+		if (source != null && source.length() > 0 )
+		{
+			String docBase = context.getDocBase();
+			try {
+				Context contextConfig = loadContextConfig(webappsDir.append(docBase));
+				if (null != contextConfig) {
+					if (context.hasChildNodes())
+						context.removeChildren();
+					contextConfig.copyChildrenTo(context);
+					Map attrs = contextConfig.getAttributes();
+					Iterator iter = attrs.keySet().iterator();
+					while (iter.hasNext()) {
+						String name = (String) iter.next();
+						if (!name.equalsIgnoreCase("path")
+								&& !name.equalsIgnoreCase("docBase")
+								&& !name.equalsIgnoreCase("source")) {
+							String value = (String)attrs.get(name);
+							context.setAttributeValue(name, value);
+						}
+					}
+					modified = true;
+				}
+			} catch (Exception e) {
+				String contextPath = context.getPath();
+				if (contextPath.startsWith("/")) {
+					contextPath = contextPath.substring(1);
+				}
+				Trace.trace(Trace.SEVERE, "Error reading context.xml file for " + contextPath, e);
+				IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
+						NLS.bind(Messages.errorCouldNotLoadContextXml, contextPath), e);
+				ms.add(s);
+			}
+		}
+		return modified;
 	}
-
+	
 	/**
-	 * @see TomcatConfiguration#localizeConfiguration(IPath, IPath, TomcatServer, IProgressMonitor)
+	 * Tries to read a META-INF/context.xml file relative to the
+	 * specified web application path.  If found, it creates a Context object
+	 * containing the contexts of that file.
+	 * @param webappDir Path to the web application
+	 * @return Context element created from context.xml, or null if not found.
+	 * @throws SAXException If there is a error parsing the XML. 
+	 * @throws IOException If there is an error reading the file.
 	 */
-	public IStatus localizeConfiguration(IPath baseDir, IPath deployDir, TomcatServer tomcatServer, IProgressMonitor monitor) {
-		return TomcatVersionHelper.localizeConfiguration(baseDir, deployDir, tomcatServer, monitor);
+	protected Context loadContextConfig(IPath webappDir) throws IOException, SAXException {
+		File contextXML = new File(webappDir.toOSString()+ File.separator + "META-INF" + File.separator + "context.xml");
+		if (contextXML.exists()) {
+			try {
+				InputStream is = new FileInputStream(contextXML);
+				Factory ctxFactory = new Factory();
+				ctxFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
+				Context ctx = (Context)ctxFactory.loadDocument(is);
+				is.close();
+				return ctx;
+			} catch (FileNotFoundException e) {
+				// Ignore, should never occur
+			}
+		}
+		return null;
+ 	}
+
+	protected IStatus prepareRuntimeDirectory(IPath confDir) {
+		Trace.trace(Trace.FINER, "Preparing runtime directory");
+		// Prepare a catalina.base directory structure
+		File temp = confDir.append("conf").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = confDir.append("logs").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = confDir.append("temp").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		IPath tempPath = confDir.append("webapps/ROOT/WEB-INF");
+		temp = tempPath.toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+		temp = tempPath.append("web.xml").toFile();
+		if (!temp.exists()) {
+			FileWriter fw;
+			try {
+				fw = new FileWriter(temp);
+				fw.write(DEFAULT_WEBXML_SERVLET24);
+				fw.close();
+			} catch (IOException e) {
+				Trace.trace(Trace.WARNING, "Unable to create web.xml for ROOT context.", e);
+			}
+		}
+		temp = confDir.append("work").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+
+		return Status.OK_STATUS;		
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Handler.java
index 98d32e8..8589209 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Handler.java
@@ -21,8 +21,13 @@
 	/**
 	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
 	 */
-	public IStatus verifyInstallPath(IPath installPath) {
-		return TomcatPlugin.verifyInstallPathWithFolderCheck(installPath, TomcatPlugin.TOMCAT_55);
+	public boolean verifyInstallPath(IPath installPath) {
+		if (installPath == null)
+			return false;
+
+		if (!TomcatPlugin.verifyTomcatVersionFromPath(installPath, TomcatPlugin.TOMCAT_55))
+			return false;
+		return TomcatPlugin.verifyInstallPath(installPath, TomcatPlugin.TOMCAT_55);
 	}
 	
 	/**
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Configuration.java
deleted file mode 100644
index 24fd5d4..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Configuration.java
+++ /dev/null
@@ -1,632 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *    IBM Corporation - Initial API and implementation
- **********************************************************************/
-package org.eclipse.jst.server.tomcat.core.internal;
-
-import java.io.BufferedWriter;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
-import org.eclipse.jst.server.tomcat.core.internal.xml.XMLUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Connector;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Listener;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Server;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Service;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.wst.server.core.ServerPort;
-import org.w3c.dom.Document;
-import org.xml.sax.InputSource;
-/**
- * Tomcat v6.0 server configuration.
- */
-public class Tomcat60Configuration extends TomcatConfiguration {
-	protected static final String DEFAULT_SERVICE = "Catalina";
-	protected static final String EOL = System.getProperty("line.separator");
-	protected Server server;
-	protected ServerInstance serverInstance;
-	protected Factory serverFactory;
-	protected boolean isServerDirty;
-
-	protected WebAppDocument webAppDocument;
-
-	protected Document tomcatUsersDocument;
-
-	protected String policyFile;
-
-	protected String propertiesFile;
-	
-	/**
-	 * Tomcat60Configuration constructor.
-	 * 
-	 * @param path a path
-	 */
-	public Tomcat60Configuration(IFolder path) {
-		super(path);
-	}
-
-	/**
-	 * Return the port number.
-	 * @return int
-	 */
-	public ServerPort getMainPort() {
-		Iterator iterator = getServerPorts().iterator();
-		while (iterator.hasNext()) {
-			ServerPort port = (ServerPort) iterator.next();
-			// Return only an HTTP port from the selected Service
-			if (port.getName().equals("HTTP/1.1") && port.getId().indexOf('/') < 0)
-				return port;
-		}
-		return null;
-	}
-	
-	/**
-	 * Returns the mime mappings.
-	 * @return java.util.List
-	 */
-	public List getMimeMappings() {
-		return webAppDocument.getMimeMappings();
-	}
-
-	/**
-	 * Returns a list of ServerPorts that this configuration uses.
-	 *
-	 * @return java.util.List
-	 */
-	public List getServerPorts() {
-		List ports = new ArrayList();
-	
-		// first add server port
-		try {
-			int port = Integer.parseInt(server.getPort());
-			ports.add(new ServerPort("server", Messages.portServer, port, "TCPIP"));
-		} catch (Exception e) {
-			// ignore
-		}
-	
-		// add connectors
-		try {
-			String instanceServiceName = serverInstance.getService().getName();
-			int size = server.getServiceCount();
-			for (int i = 0; i < size; i++) {
-				Service service = server.getService(i);
-				int size2 = service.getConnectorCount();
-				for (int j = 0; j < size2; j++) {
-					Connector connector = service.getConnector(j);
-					String name = "HTTP";
-					String protocol2 = "HTTP";
-					boolean advanced = true;
-					String[] contentTypes = null;
-					int port = -1;
-					try {
-						port = Integer.parseInt(connector.getPort());
-					} catch (Exception e) {
-						// ignore
-					}
-					String protocol = connector.getProtocol();
-					if (protocol != null && protocol.length() > 0) {
-						name = protocol;
-						protocol2 = protocol; 
-					}
-					if ("HTTP/1.1".equals(protocol))
-						contentTypes = new String[] { "web", "webservices" };
-					String secure = connector.getSecure();
-					if (secure != null && secure.length() > 0) {
-						name = "SSL";
-						protocol2 = "SSL";
-					} else
-						advanced = false;
-					String portId;
-					if (instanceServiceName != null && instanceServiceName.equals(service.getName()))
-						portId = Integer.toString(i);
-					else
-						portId = i +"/" + j;
-					ports.add(new ServerPort(portId, name, port, protocol2, contentTypes, advanced));
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting server ports", e);
-		}
-		return ports;
-	}
-	
-	/**
-	 * Return a list of the web modules in this server.
-	 * @return java.util.List
-	 */
-	public List getWebModules() {
-		List list = new ArrayList();
-	
-		try {
-			Context [] contexts = serverInstance.getContexts();
-			if (contexts != null) {
-				for (int i = 0; i < contexts.length; i++) {
-					Context context = contexts[i];
-					String reload = context.getReloadable();
-					if (reload == null)
-						reload = "false";
-					WebModule module = new WebModule(context.getPath(), 
-						context.getDocBase(), context.getSource(),
-						reload.equalsIgnoreCase("true") ? true : false);
-					list.add(module);
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting project refs", e);
-		}
-		return list;
-	}
-	
-	/**
-	 * @see TomcatConfiguration#getServerWorkDirectory(IPath)
-	 */
-	public IPath getServerWorkDirectory(IPath basePath) {
-		return serverInstance.getHostWorkDirectory(basePath);
-	}
-
-	/**
-	 * @see TomcatConfiguration#getContextWorkDirectory(IPath, ITomcatWebModule)
-	 */
-	public IPath getContextWorkDirectory(IPath basePath, ITomcatWebModule module) {
-		Context context = serverInstance.getContext(module.getPath());
-		if (context != null)
-			return serverInstance.getContextWorkDirectory(basePath, context);
-		
-		return null;
-	}
-
-	/**
-	 * @see TomcatConfiguration#load(IPath, IProgressMonitor)
-	 */
-	public void load(IPath path, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 6);
-			
-			// check for catalina.policy to verify that this is a v5.5 config
-			InputStream in = new FileInputStream(path.append("catalina.policy").toFile());
-			in.read();
-			in.close();
-			monitor.worked(1);
-
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			server = (Server) serverFactory.loadDocument(new FileInputStream(path.append("server.xml").toFile()));
-			serverInstance = new ServerInstance(server, null, null);
-			monitor.worked(1);
-
-			webAppDocument = new WebAppDocument(path.append("web.xml"));
-			monitor.worked(1);
-			
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(new FileInputStream(path.append("tomcat-users.xml").toFile())));
-			monitor.worked(1);
-			
-			// load policy file
-			policyFile = TomcatVersionHelper.getFileContents(new FileInputStream(path.append("catalina.policy").toFile()));
-			monitor.worked(1);
-
-			// load properties file
-			File file = path.append("catalina.properties").toFile();
-			if (file.exists())
-				propertiesFile = TomcatVersionHelper.getFileContents(new FileInputStream(file));
-			else
-				propertiesFile = null;
-			monitor.worked(1);
-			
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load Tomcat v5.5 configuration from " + path.toOSString() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, path.toOSString()), e));
-		}
-	}
-
-	/**
-	 * @see TomcatConfiguration#importFromPath(IPath, boolean, IProgressMonitor)
-	 */
-	public void importFromPath(IPath path, boolean isTestEnv, IProgressMonitor monitor) throws CoreException {
-		load(path, monitor);
-		
-		// for test environment, remove existing contexts since a separate
-		// catalina.base will be used
-		if (isTestEnv) {
-			while (serverInstance.removeContext(0)) {
-				// no-op
-			}
-		}
-	}
-
-	/**
-	 * @see TomcatConfiguration#load(IFolder, IProgressMonitor)
-	 */
-	public void load(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.loadingTask, 1000);
-	
-			// check for catalina.policy to verify that this is a v4.0 config
-			IFile file = folder.getFile("catalina.policy");
-			if (!file.exists())
-				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), null));
-	
-			// load server.xml
-			file = folder.getFile("server.xml");
-			InputStream in = file.getContents();
-			serverFactory = new Factory();
-			serverFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			server = (Server) serverFactory.loadDocument(in);
-			serverInstance = new ServerInstance(server, null, null);
-			monitor.worked(200);
-	
-			// load web.xml
-			file = folder.getFile("web.xml");
-			webAppDocument = new WebAppDocument(file);
-			monitor.worked(200);
-	
-			// load tomcat-users.xml
-			file = folder.getFile("tomcat-users.xml");
-			in = file.getContents();
-			
-			tomcatUsersDocument = XMLUtil.getDocumentBuilder().parse(new InputSource(in));
-			monitor.worked(200);
-		
-			// load catalina.policy
-			file = folder.getFile("catalina.policy");
-			in = file.getContents();
-			policyFile = TomcatVersionHelper.getFileContents(in);
-			monitor.worked(200);
-	
-			// load catalina.properties
-			file = folder.getFile("catalina.properties");
-			if (file.exists()) {
-				in = file.getContents();
-				propertiesFile = TomcatVersionHelper.getFileContents(in);
-			}
-			else
-				propertiesFile = null;
-			monitor.worked(200);
-			
-			if (monitor.isCanceled())
-				throw new Exception("Cancelled");
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not reload Tomcat v5.5 configuration from: " + folder.getFullPath() + ": " + e.getMessage());
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotLoadConfiguration, folder.getFullPath().toOSString()), e));
-		}
-	}
-
-	/**
-	 * Save to the given directory.
-	 * @param path a path
-	 * @param forceDirty boolean
-	 * @param monitor a progress monitor
-	 * @exception CoreException
-	 */
-	protected void save(IPath path, boolean forceDirty, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 4);
-			
-			// make sure directory exists
-			if (!path.toFile().exists()) {
-				forceDirty = true;
-				path.toFile().mkdir();
-			}
-			monitor.worked(1);
-			
-			// save files
-			if (forceDirty || isServerDirty) {
-				serverFactory.save(path.append("server.xml").toOSString());
-				isServerDirty = false;
-			}
-			monitor.worked(1);
-			
-			webAppDocument.save(path.append("web.xml").toOSString(), forceDirty);
-			monitor.worked(1);
-			
-			if (forceDirty)
-				XMLUtil.save(path.append("tomcat-users.xml").toOSString(), tomcatUsersDocument);
-			monitor.worked(1);
-			
-			if (forceDirty) {
-				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.policy").toFile()));
-				bw.write(policyFile);
-				bw.close();
-			}
-			monitor.worked(1);
-			if (propertiesFile != null && forceDirty) {
-				BufferedWriter bw = new BufferedWriter(new FileWriter(path.append("catalina.properties").toFile()));
-				bw.write(propertiesFile);
-				bw.close();
-			}
-			monitor.worked(1);
-			
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v5.5 configuration to " + path, e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-
-	/**
-	 * Save to the given directory.  All configuration files
-	 * are forced to be saved.
-	 * 
-	 * @param path Desination path for the configuration files.
-	 * @param monitor A progress monitor
-	 * @exception CoreException
-	 */
-	public void save(IPath path, IProgressMonitor monitor) throws CoreException {
-		save(path, true, monitor);
-	}
-
-	/**
-	 * Save the information held by this object to the given directory.
-	 *
-	 * @param folder a folder
-	 * @param monitor a progress monitor
-	 * @throws CoreException
-	 */
-	public void save(IFolder folder, IProgressMonitor monitor) throws CoreException {
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.savingTask, 1000);
-	
-			// save server.xml
-			byte[] data = serverFactory.getContents();
-			InputStream in = new ByteArrayInputStream(data);
-			IFile file = folder.getFile("server.xml");
-			if (file.exists()) {
-				if (isServerDirty)
-					file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-				else
-					monitor.worked(200);
-			} else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			isServerDirty = false;
-			
-			// save web.xml
-			webAppDocument.save(folder.getFile("web.xml"), ProgressUtil.getSubMonitorFor(monitor, 200));
-			
-			// save tomcat-users.xml
-			data = XMLUtil.getContents(tomcatUsersDocument);
-			in = new ByteArrayInputStream(data);
-			file = folder.getFile("tomcat-users.xml");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
-			// save catalina.policy
-			in = new ByteArrayInputStream(policyFile.getBytes());
-			file = folder.getFile("catalina.policy");
-			if (file.exists())
-				monitor.worked(200);
-				//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			else
-				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			
-			// save catalina.properties
-			if (propertiesFile != null) {
-				in = new ByteArrayInputStream(propertiesFile.getBytes());
-				file = folder.getFile("catalina.properties");
-				if (file.exists())
-					monitor.worked(200);
-					//file.setContents(in, true, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-				else
-					file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 200));
-			} else
-				monitor.worked(200);
-			
-			if (monitor.isCanceled())
-				return;
-			monitor.done();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save Tomcat v5.5 configuration to " + folder.toString(), e);
-			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotSaveConfiguration, new String[] {e.getLocalizedMessage()}), e));
-		}
-	}
-
-	protected static boolean hasMDBListener(Server server) {
-		if (server == null)
-			return false;
-		
-		int count = server.getListenerCount();
-		if (count == 0)
-			return false;
-			
-		for (int i = 0; i < count; i++) {
-			Listener listener = server.getListener(i);
-			if (listener != null && listener.getClassName() != null && listener.getClassName().indexOf("mbean") >= 0)
-				return true;
-		}
-		return false;
-	}
-	
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addMimeMapping(int, IMimeMapping)
-	 */
-	public void addMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.addMimeMapping(index, map);
-		firePropertyChangeEvent(ADD_MAPPING_PROPERTY, new Integer(index), map);
-	}
-
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addWebModule(int, ITomcatWebModule)
-	 */
-	public void addWebModule(int index, ITomcatWebModule module) {
-		try {
-			Context context = serverInstance.createContext(index);
-			if (context != null) {
-				context.setDocBase(module.getDocumentBase());
-				context.setPath(module.getPath());
-				context.setReloadable(module.isReloadable() ? "true" : "false");
-				if (module.getMemento() != null && module.getMemento().length() > 0)
-					context.setSource(module.getMemento());
-				isServerDirty = true;
-				firePropertyChangeEvent(ADD_WEB_MODULE_PROPERTY, null, module);
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error adding web module " + module.getPath(), e);
-		}
-	}
-
-	/**
-	 * Change the extension of a mime mapping.
-	 * 
-	 * @param index
-	 * @param map
-	 */
-	public void modifyMimeMapping(int index, IMimeMapping map) {
-		webAppDocument.modifyMimeMapping(index, map);
-		firePropertyChangeEvent(MODIFY_MAPPING_PROPERTY, new Integer(index), map);
-	}
-
-	/**
-	 * Modify the port with the given id.
-	 *
-	 * @param id java.lang.String
-	 * @param port int
-	 */
-	public void modifyServerPort(String id, int port) {
-		try {
-			if ("server".equals(id)) {
-				server.setPort(port + "");
-				isServerDirty = true;
-				firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-				return;
-			}
-	
-			int i = id.indexOf("/");
-			// If a connector in the instance Service
-			if (i < 0) {
-				int connNum = Integer.parseInt(id);
-				Connector connector = serverInstance.getConnector(connNum);
-				if (connector != null) {
-					connector.setPort(port + "");
-					isServerDirty = true;
-					firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-				}
-			}
-			// Else a connector in another Service
-			else {
-				int servNum = Integer.parseInt(id.substring(0, i));
-				int connNum = Integer.parseInt(id.substring(i + 1));
-				
-				Service service = server.getService(servNum);
-				Connector connector = service.getConnector(connNum);
-				connector.setPort(port + "");
-				isServerDirty = true;
-				firePropertyChangeEvent(MODIFY_PORT_PROPERTY, id, new Integer(port));
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying server port " + id, e);
-		}
-	}
-	/**
-	 * Change a web module.
-	 * @param index int
-	 * @param docBase java.lang.String
-	 * @param path java.lang.String
-	 * @param reloadable boolean
-	 */
-	public void modifyWebModule(int index, String docBase, String path, boolean reloadable) {
-		try {
-			Context context = serverInstance.getContext(index);
-			if (context != null) {
-				context.setPath(path);
-				context.setDocBase(docBase);
-				context.setReloadable(reloadable ? "true" : "false");
-				isServerDirty = true;
-				WebModule module = new WebModule(path, docBase, null, reloadable);
-				firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, new Integer(index), module);
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error modifying web module " + index, e);
-		}
-	}
-
-	/**
-	 * Removes a mime mapping.
-	 * @param index int
-	 */
-	public void removeMimeMapping(int index) {
-		webAppDocument.removeMimeMapping(index);
-		firePropertyChangeEvent(REMOVE_MAPPING_PROPERTY, null, new Integer(index));
-	}
-
-	/**
-	 * Removes a web module.
-	 * @param index int
-	 */
-	public void removeWebModule(int index) {
-		try {
-			serverInstance.removeContext(index);
-			isServerDirty = true;
-			firePropertyChangeEvent(REMOVE_WEB_MODULE_PROPERTY, null, new Integer(index));
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error removing module ref " + index, e);
-		}
-	}
-
-	/**
-	 * Add context configuration found in META-INF/context.xml files
-	 * present in projects to published server.xml.
-	 * 
-	 * @param baseDir path to catalina instance directory
-	 * @param deployDir path to deployment directory
-	 * @param monitor a progress monitor or null
-	 * @return result of operation
-	 */
-	protected IStatus publishContextConfig(IPath baseDir, IPath deployDir, IProgressMonitor monitor) {
-		return TomcatVersionHelper.publishCatalinaContextConfig(baseDir, deployDir, monitor);
-	}
-	
-	/**
-	 * Cleanup the server instance.  This consists of deleting the work
-	 * directory associated with Contexts that are going away in the
-	 * up coming publish.
-	 * 
-	 * @param baseDir path to server instance directory, i.e. catalina.base
-	 * @param installDir path to server installation directory (not currently used)
-	 * @param monitor a progress monitor or null
-	 * @return MultiStatus containing results of the cleanup operation
-	 */
-	protected IStatus cleanupServer(IPath baseDir, IPath installDir, IProgressMonitor monitor) {
-		List modules = getWebModules();
-		return TomcatVersionHelper.cleanupCatalinaServer(baseDir, installDir, modules, monitor);
-	}
-
-	/**
-	 * @see TomcatConfiguration#localizeConfiguration(IPath, IPath, TomcatServer, IProgressMonitor)
-	 */
-	public IStatus localizeConfiguration(IPath baseDir, IPath deployDir, TomcatServer tomcatServer, IProgressMonitor monitor) {
-		return TomcatVersionHelper.localizeConfiguration(baseDir, deployDir, tomcatServer, monitor);
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java
deleted file mode 100644
index d94b335..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *    IBM Corporation - Initial API and implementation
- **********************************************************************/
-package org.eclipse.jst.server.tomcat.core.internal;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jdt.launching.JavaRuntime;
-import org.eclipse.wst.server.core.IModule;
-/**
- * Tomcat 60 handler.
- */
-public class Tomcat60Handler implements ITomcatVersionHandler {
-	/**
-	 * @see ITomcatVersionHandler#verifyInstallPath(IPath)
-	 */
-	public IStatus verifyInstallPath(IPath installPath) {
-		return TomcatPlugin.verifyInstallPathWithFolderCheck(installPath, TomcatPlugin.TOMCAT_60);
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeClass()
-	 */
-	public String getRuntimeClass() {
-		return "org.apache.catalina.startup.Bootstrap";
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath)
-	 */
-	public List getRuntimeClasspath(IPath installPath) {
-		List cp = new ArrayList();
-		
-		// 6.0 - add bootstrap.jar from the Tomcat bin directory
-		IPath binPath = installPath.append("bin");
-		if (binPath.toFile().exists()) {
-			IPath path = binPath.append("bootstrap.jar");
-			cp.add(JavaRuntime.newArchiveRuntimeClasspathEntry(path));
-		}
-		
-		return cp;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
-	 */
-	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
-
-		if (starting)
-			list.add("start");
-		else
-			list.add("stop");
-		
-		String[] temp = new String[list.size()];
-		list.toArray(temp);
-		return temp;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getExcludedRuntimeProgramArguments(boolean, boolean)
-	 */
-	public String[] getExcludedRuntimeProgramArguments(boolean debug, boolean starting) {
-		return null;
-	}
-	
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, boolean)
-	 */
-	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, boolean isTestEnv) {
-		List list = new ArrayList();
-		if (isTestEnv)
-			list.add("-Dcatalina.base=\"" + configPath.toOSString() + "\"");
-		else 
-			list.add("-Dcatalina.base=\"" + installPath.toOSString() + "\"");
-		list.add("-Dcatalina.home=\"" + installPath.toOSString() + "\"");
-		list.add("-Djava.endorsed.dirs=\"" + installPath.append("endorsed").toOSString() + "\"");
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimePolicyFile(IPath)
-	 */
-	public String getRuntimePolicyFile(IPath configPath) {
-		return configPath.append("conf").append("catalina.policy").toOSString();
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#canAddModule(IModule)
-	 */
-	public IStatus canAddModule(IModule module) {
-		String version = module.getModuleType().getVersion();
-		if ("2.2".equals(version) || "2.3".equals(version) || "2.4".equals(version)|| "2.5".equals(version))
-			return Status.OK_STATUS;
-		
-		return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorSpec60, null);
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#getRuntimeBaseDirectory(TomcatServerBehaviour)
-	 */
-	public IPath getRuntimeBaseDirectory(TomcatServerBehaviour serverBehaviour) {
-		if (serverBehaviour.getTomcatServer().isTestEnvironment())
-			return serverBehaviour.getTempDirectory();
-		return serverBehaviour.getServer().getRuntime().getLocation();
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#prepareRuntimeDirectory(IPath)
-	 */
-	public IStatus prepareRuntimeDirectory(IPath baseDir) {
-		// TODO Update to Servlet 2.5 when supported
-		return TomcatVersionHelper.createCatalinaInstanceDirectory(baseDir,
-				TomcatVersionHelper.DEFAULT_WEBXML_SERVLET24);
-	}
-
-	/**
-	 * @see ITomcatVersionHandler#prepareDeployDirectory(IPath)
-	 */
-	public IStatus prepareDeployDirectory(IPath deployPath) {
-		// TODO Update to Servlet 2.5 when available
-		return TomcatVersionHelper.createDeploymentDirectory(deployPath,
-				TomcatVersionHelper.DEFAULT_WEBXML_SERVLET24);
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
index ef9637c..3fce997 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,16 @@
 	public static final String ADD_WEB_MODULE_PROPERTY = "addWebModule";
 	public static final String REMOVE_WEB_MODULE_PROPERTY = "removeWebModule";
 	
+	public static final String DEFAULT_WEBXML_SERVLET23 = 
+		"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+		"<!DOCTYPE web-app PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\" \"http://java.sun.com/dtd/web-app_2_3.dtd\">\n" +
+		"<web-app>\n</web-app>";
+	
+	public static final String DEFAULT_WEBXML_SERVLET24 = 
+	"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+	"<web-app id=\"WebApp_ID\" version=\"2.4\" xmlns=\"http://java.sun.com/xml/ns/j2ee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">\n" +
+	"</web-app>";
+	
 	protected IFolder configPath;
 
 	// property change listeners
@@ -75,12 +85,11 @@
 	 *                  for Tomcat 4.x and up.
 	 * @param doBackup Backup existing configuration files (true if not test mode).
 	 * @param monitor Progress monitor to use
-	 * @return result of operation
+	 * @return org.eclipse.core.runtime.IStatus
 	 */
 	protected IStatus backupAndPublish(IPath tomcatDir, boolean doBackup, IProgressMonitor monitor) {
 		MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.publishConfigurationTask, null);
-		if (Trace.isTraceEnabled())
-			Trace.trace(Trace.FINER, "Backup and publish");
+		Trace.trace(Trace.FINER, "Backup and publish");
 		monitor = ProgressUtil.getMonitorFor(monitor);
 
 		try {
@@ -115,8 +124,7 @@
 					IFile file = (IFile) children[i];
 					String name = file.getName();
 					monitor.subTask(NLS.bind(Messages.publisherPublishTask, new String[] {name}));
-					if (Trace.isTraceEnabled())
-						Trace.trace(Trace.FINEST, "Publishing " + name);
+					Trace.trace(Trace.FINEST, "Publishing " + name);
 
 					// backup and copy file
 					boolean copy = true;
@@ -152,8 +160,7 @@
 				File file = files[i];
 				String name = file.getName();
 				monitor.subTask(NLS.bind(Messages.publisherPublishTask, new String[] {name}));
-				if (Trace.isTraceEnabled())
-					Trace.trace(Trace.FINEST, "Publishing " + name);
+				Trace.trace(Trace.FINEST, "Publishing " + name);
 
 				// backup and copy file
 				boolean copy = true;
@@ -174,7 +181,7 @@
 		}
 	}
 	
-	protected IStatus publishContextConfig(IPath baseDir, IPath deployDir, IProgressMonitor monitor) {
+	protected IStatus publishContextConfig(IPath baseDir, IProgressMonitor monitor) {
 		// Default implementation assumes nothing to do
 		return Status.OK_STATUS;
 	}
@@ -185,17 +192,17 @@
 		return Status.OK_STATUS;
 	}
 	
-	/**
-	 * Make any local changes to the server configuration at the specified runtime
-	 * base directory needed to complete publishing the server.
-	 * 
-	 * @param baseDir runtime base directory for the server
-	 * @param deployDir deployment directory for the server
-	 * @param server server being localized
-	 * @param monitor a progress monitor
-	 * @return result of operation
-	 */
-	public abstract IStatus localizeConfiguration(IPath baseDir, IPath deployDir, TomcatServer server, IProgressMonitor monitor);
+	protected IStatus prepareRuntimeDirectory(IPath confDir) {
+		File temp = confDir.append("conf").toFile();
+		if (!temp.exists())
+			temp.mkdirs();
+
+		return Status.OK_STATUS;		
+	}
+	
+	public void localizeConfiguration(IPath path, TomcatServer server, IProgressMonitor monitor) {
+		// do nothing
+	}
 
 	/**
 	 * Returns the main server port.
@@ -252,7 +259,7 @@
 	}
 
 	protected abstract void save(IFolder folder, IProgressMonitor monitor) throws CoreException;
-
+	
 	protected void firePropertyChangeEvent(String propertyName, Object oldValue, Object newValue) {
 		if (propertyListeners == null)
 			return;
@@ -306,39 +313,15 @@
 	
 	protected abstract void load(IFolder folder, IProgressMonitor monitor) throws CoreException;
 	
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#addWebModule(int, ITomcatWebModule)
-	 */
 	public abstract void addWebModule(int index, ITomcatWebModule module);
 	
-	/**
-	 * @see ITomcatConfigurationWorkingCopy#removeWebModule(int)
-	 */
 	public abstract void removeWebModule(int index);
 
 	/**
-	 * Gets the work directory for the server.
-	 * 
-	 * @param basePath path to server runtime directory
-	 * @return path for the server's work directory
-	 */
-	public abstract IPath getServerWorkDirectory(IPath basePath);
-
-	/**
-	 * Gets the work directory for the specified module on the
-	 * server.
-	 * 
-	 * @param basePath path to server runtime directory
-	 * @param module a Tomcat web module
-	 * @return path for the module's work directory on the server
-	 */
-	public abstract IPath getContextWorkDirectory(IPath basePath, ITomcatWebModule module);
-
-	/**
 	 * Return a string representation of this object.
 	 * @return java.lang.String
 	 */
 	public String toString() {
-		return "TomcatConfiguration[" + getFolder() + "]";
+		return "TomcatConfiguration[" + this + "]";
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatLaunchableAdapterDelegate.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatLaunchableAdapterDelegate.java
index 23b33c2..dbcb384 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatLaunchableAdapterDelegate.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatLaunchableAdapterDelegate.java
@@ -35,12 +35,12 @@
 			return null;
 		if (moduleObject.getModule().loadAdapter(IWebModule.class, null) == null)
 			return null;
-		
+
 		try {
-			URL url = ((IURLProvider) server.loadAdapter(IURLProvider.class, null)).getModuleRootURL(moduleObject.getModule());
+			URL url = ((IURLProvider) server.getAdapter(IURLProvider.class)).getModuleRootURL(moduleObject.getModule());
 			
 			Trace.trace(Trace.FINER, "root: " + url);
-			
+
 			if (moduleObject instanceof Servlet) {
 				Servlet servlet = (Servlet) moduleObject;
 				if (servlet.getAlias() != null) {
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java
index c7cd090..3208fea 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java
@@ -36,19 +36,13 @@
 	public static final String TOMCAT_41 = "org.eclipse.jst.server.tomcat.41";
 	public static final String TOMCAT_50 = "org.eclipse.jst.server.tomcat.50";
 	public static final String TOMCAT_55 = "org.eclipse.jst.server.tomcat.55";
-	public static final String TOMCAT_60 = "org.eclipse.jst.server.tomcat.60";
 
 	protected static final String VERIFY_INSTALL_FILE = "verifyInstall.properties";
-	protected static VerifyResourceSpec[] verify32;
-	protected static VerifyResourceSpec[] verify40;
-	protected static VerifyResourceSpec[] verify41;
-	protected static VerifyResourceSpec[] verify50;
-	protected static VerifyResourceSpec[] verify55;
-	protected static VerifyResourceSpec[] verify60;
-	
-	protected static final IStatus emptyInstallDirStatus = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorInstallDirEmpty, null);
-	protected static final IStatus wrongDirVersionStatus = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorInstallDirWrongVersion, null);
-	protected static final IStatus installDirDoesNotExist = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorInstallDirDoesNotExist, null);
+	protected static String[] verify32;
+	protected static String[] verify40;
+	protected static String[] verify41;
+	protected static String[] verify50;
+	protected static String[] verify55;
 
 	/**
 	 * TomcatPlugin constructor comment.
@@ -128,8 +122,6 @@
 			return new Tomcat50Handler();
 		else if (TOMCAT_55.equals(id))
 			return new Tomcat55Handler();
-		else if (TOMCAT_60.equals(id))
-			return new Tomcat60Handler();
 		else
 			return null;
 	}
@@ -142,12 +134,11 @@
 			return;
 	
 		// backup (empty) values
-		verify32 = new VerifyResourceSpec[0];
-		verify40 = new VerifyResourceSpec[0];
-		verify41 = new VerifyResourceSpec[0];
-		verify50 = new VerifyResourceSpec[0];
-		verify55 = new VerifyResourceSpec[0];
-		verify60 = new VerifyResourceSpec[0];
+		verify32 = new String[0];
+		verify40 = new String[0];
+		verify41 = new String[0];
+		verify50 = new String[0];
+		verify55 = new String[0];
 		
 		try {
 			URL url = getInstance().getBundle().getEntry(VERIFY_INSTALL_FILE);
@@ -155,199 +146,127 @@
 			Properties p = new Properties();
 			p.load(url.openStream());
 
-			// Check backdoor system property, use internal spec if not found
-			String verify = System.getProperty(PLUGIN_ID + ".verify32install");
-			if (verify == null) {
-				verify = p.getProperty("verify32install");
-			}
+			String verify = p.getProperty("verify32install");
 			verify.replace('/', File.separatorChar);
 
 			StringTokenizer st = new StringTokenizer(verify, ",");
 			List list = new ArrayList();
 			while (st.hasMoreTokens())
-				list.add(new VerifyResourceSpec(st.nextToken()));
+				list.add(st.nextToken());
 			Trace.trace(Trace.FINEST, "Verify32: " + list.toString());
-			verify32 = new VerifyResourceSpec[list.size()];
+			verify32 = new String[list.size()];
 			list.toArray(verify32);
 
 			// v4.0
-			// Check backdoor system property, use internal spec if not found
-			verify = System.getProperty(PLUGIN_ID + ".verify40install");
-			if (verify == null) {
-				verify = p.getProperty("verify40install");
-			}
+			verify = p.getProperty("verify40install");
 			verify.replace('/', File.separatorChar);
 
 			st = new StringTokenizer(verify, ",");
 			list = new ArrayList();
 			while (st.hasMoreTokens())
-				list.add(new VerifyResourceSpec(st.nextToken()));
+				list.add(st.nextToken());
 			Trace.trace(Trace.FINEST, "Verify40: " + list.toString());
-			verify40 = new VerifyResourceSpec[list.size()];
+			verify40 = new String[list.size()];
 			list.toArray(verify40);
 			
 			// v4.1
-			// Check backdoor system property, use internal spec if not found
-			verify = System.getProperty(PLUGIN_ID + ".verify41install");
-			if (verify == null) {
-				verify = p.getProperty("verify41install");
-			}
+			verify = p.getProperty("verify41install");
 			verify.replace('/', File.separatorChar);
 
 			st = new StringTokenizer(verify, ",");
 			list = new ArrayList();
 			while (st.hasMoreTokens())
-				list.add(new VerifyResourceSpec(st.nextToken()));
+				list.add(st.nextToken());
 			Trace.trace(Trace.FINEST, "Verify41: " + list.toString());
-			verify41 = new VerifyResourceSpec[list.size()];
+			verify41 = new String[list.size()];
 			list.toArray(verify41);
 			
 			// v5.0
-			// Check backdoor system property, use internal spec if not found
-			verify = System.getProperty(PLUGIN_ID + ".verify50install");
-			if (verify == null) {
-				verify = p.getProperty("verify50install");
-			}
+			verify = p.getProperty("verify50install");
 			verify.replace('/', File.separatorChar);
 
 			st = new StringTokenizer(verify, ",");
 			list = new ArrayList();
 			while (st.hasMoreTokens())
-				list.add(new VerifyResourceSpec(st.nextToken()));
+				list.add(st.nextToken());
 			Trace.trace(Trace.FINEST, "Verify50: " + list.toString());
-			verify50 = new VerifyResourceSpec[list.size()];
+			verify50 = new String[list.size()];
 			list.toArray(verify50);
 
 			// v5.5
-			// Check backdoor system property, use internal spec if not found
-			verify = System.getProperty(PLUGIN_ID + ".verify55install");
-			if (verify == null) {
-				verify = p.getProperty("verify55install");
-			}
+			verify = p.getProperty("verify55install");
 			verify.replace('/', File.separatorChar);
 
 			st = new StringTokenizer(verify, ",");
 			list = new ArrayList();
 			while (st.hasMoreTokens())
-				list.add(new VerifyResourceSpec(st.nextToken()));
+				list.add(st.nextToken());
 			Trace.trace(Trace.FINEST, "Verify55: " + list.toString());
-			verify55 = new VerifyResourceSpec[list.size()];
+			verify55 = new String[list.size()];
 			list.toArray(verify55);
-
-			// v6.0
-			// Check backdoor system property, use internal spec if not found
-			verify = System.getProperty(PLUGIN_ID + ".verify60install");
-			if (verify == null) {
-				verify = p.getProperty("verify60install");
-			}
-			verify.replace('/', File.separatorChar);
-
-			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
-			while (st.hasMoreTokens())
-				list.add(new VerifyResourceSpec(st.nextToken()));
-			Trace.trace(Trace.FINEST, "Verify60: " + list.toString());
-			verify60 = new VerifyResourceSpec[list.size()];
-			list.toArray(verify60);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Could not load installation verification properties", e);
 		}
 	}
 
 	/**
-	 * Utility method to verify an installation directory according to the
-	 * specified server ID.  The verification includes checking the installation
-	 * directory name to see if it indicates a different version of Tomcat.
-	 * 
-	 * @param installPath Path to verify
-	 * @param id Type ID of the server
-	 * @return Status of the verification.  Will be Status.OK_STATUS, if verification
-	 *    was successful, or error status if not.
-	 */
-	public static IStatus verifyInstallPathWithFolderCheck(IPath installPath, String id) {
-		IStatus status = verifyTomcatVersionFromPath(installPath, id);
-		if (status.isOK()) {
-			status = verifyInstallPath(installPath, id);
-		}
-		return status;
-	}
-
-	/**
 	 * Verify the Tomcat installation directory.
 	 * 
-	 * @param installPath Path to verify
-	 * @param id Type ID of the server
-	 * @return Status of the verification.  Will be Status.OK_STATUS, if verification
-	 *    was successful, or error status if not.
+	 * @param installPath
+	 * @param id
+	 * @return <code>true</code> if the directory may be a Tomcat installation,
+	 *    and <code>false</code> otherwise
 	 */
-	public static IStatus verifyInstallPath(IPath installPath, String id) {
+	public static boolean verifyInstallPath(IPath installPath, String id) {
 		if (installPath == null)
-			return emptyInstallDirStatus;
+			return false;
 		
 		String dir = installPath.toOSString();
-		if (dir.trim().length() == 0)
-			return emptyInstallDirStatus;
-
-		File file = new File(dir);
-		if (!file.exists())
-			return installDirDoesNotExist;
-
 		if (!dir.endsWith(File.separator))
 			dir += File.separator;
-		
+
 		// look for the following files and directories
 		TomcatPlugin.loadVerifyFiles();
 		
-		VerifyResourceSpec[] specs = null;
+		String[] paths = null;
 		if (TOMCAT_32.equals(id))
-			specs = verify32;
+			paths = verify32;
 		else if (TOMCAT_40.equals(id))
-			specs = verify40;
+			paths = verify40;
 		else if (TOMCAT_41.equals(id))
-			specs = verify41;
+			paths = verify41;
 		else if (TOMCAT_50.equals(id))
-			specs = verify50;
-		else if (TOMCAT_55.equals(id)) {
-			specs = verify55;
-		}
-		else if (TOMCAT_60.equals(id)) {
-			specs = verify60;
-		}
+			paths = verify50;
+		else if (TOMCAT_55.equals(id))
+			paths = verify55;
 		else
-			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorUnknownVersion, null);
+			return false;
 		
-		for (int i = 0; i < specs.length; i++) {
-			VerifyResourceSpec fs = specs[i];
-			IStatus status = fs.checkResource(dir);
-			if (!status.isOK()) {
-				return status;
-			}
+		for (int i = 0; i < paths.length; i++) {
+			File temp = new File(dir + paths[i]);
+			if (!temp.exists())
+				return false;
 		}
-		return Status.OK_STATUS;
+		return true;
 	}
 
-	public static IStatus verifyTomcatVersionFromPath(IPath installPath, String version) {
-		if (version == null) 
-			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorVersionEmpty, null);
-		if (installPath == null)
-			return emptyInstallDirStatus;
-
+	public static boolean verifyTomcatVersionFromPath(IPath installPath, String version) {
+		if (installPath == null || version == null)
+			return false;
 		String s = installPath.lastSegment();
 		if (s == null)
-			return Status.OK_STATUS;
+			return false;
 		if (s.indexOf("-3.2") > 0 || s.indexOf(" 3.2") > 0)
-			return TOMCAT_32.equals(version) ? Status.OK_STATUS : wrongDirVersionStatus;
+			return TOMCAT_32.equals(version);
 		if (s.indexOf("-4.0") > 0 || s.indexOf(" 4.0") > 0)
-			return TOMCAT_40.equals(version) ? Status.OK_STATUS : wrongDirVersionStatus;
+			return TOMCAT_40.equals(version);
 		if (s.indexOf("-4.1") > 0 || s.indexOf(" 4.1") > 0)
-			return TOMCAT_41.equals(version) ? Status.OK_STATUS : wrongDirVersionStatus;
+			return TOMCAT_41.equals(version);
 		if (s.indexOf("-5.0") > 0 || s.indexOf(" 5.0") > 0)
-			return TOMCAT_50.equals(version) ? Status.OK_STATUS : wrongDirVersionStatus;
+			return TOMCAT_50.equals(version);
 		if (s.indexOf("-5.5") > 0 || s.indexOf(" 5.5") > 0)
-			return TOMCAT_55.equals(version) ? Status.OK_STATUS : wrongDirVersionStatus;
-		if (s.indexOf("-6.0") > 0 || s.indexOf(" 6.0") > 0)
-			return TOMCAT_60.equals(version) ? Status.OK_STATUS : wrongDirVersionStatus;
-		return Status.OK_STATUS;
+			return TOMCAT_55.equals(version);
+		return true;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java
index 918c53a..f6f5ba8 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java
@@ -87,7 +87,7 @@
 	 * and false is returned.
 	 * @return boolean
 	 */
-	public IStatus verifyLocation() {
+	public boolean verifyLocation() {
 		return getVersionHandler().verifyInstallPath(getRuntime().getLocation());
 	}
 	
@@ -99,10 +99,8 @@
 		if (!status.isOK())
 			return status;
 	
-		status = verifyLocation();
-		if (!status.isOK())
-			return status;
-//			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorInstallDir, null);
+		if (!verifyLocation())
+			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorInstallDir, null);
 		// don't accept trailing space since that can cause startup problems
 		if (getRuntime().getLocation().hasTrailingSeparator())
 			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorInstallDirTrailingSlash, null);
@@ -119,10 +117,10 @@
 				found = true;
 		}
 		
-		// on Tomcat 5.5 and 6.0, the Eclipse JDT compiler is used for JSP's
-		String id = getRuntime().getRuntimeType().getId();
+		// on Tomcat 5.5, the Eclipse JDT compiler is used for JSP's
 		if (!found) {
-			if (id != null && (id.indexOf("55") > 0 || id.indexOf("60") > 0))
+			String id = getRuntime().getRuntimeType().getId();
+			if (id != null && id.indexOf("55") > 0)
 				found = true;
 		}
 		
@@ -147,17 +145,6 @@
 			}
 		}
 		
-		// For Tomcat 6.0, ensure we have J2SE 5.0
-		if (id != null && id.indexOf("60") > 0) {
-			IVMInstall vmInstall = getVMInstall();
-			if (vmInstall instanceof IVMInstall2) {
-				String javaVersion = ((IVMInstall2)vmInstall).getJavaVersion();
-				if (javaVersion != null && javaVersion.compareTo("1.5") < 0) {
-					return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, Messages.errorJRETomcat60, null);
-				}
-			}
-		}
-		
 		return Status.OK_STATUS;
 	}
 
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeClasspathProvider.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeClasspathProvider.java
index db3df67..b589573 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeClasspathProvider.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeClasspathProvider.java
@@ -33,14 +33,7 @@
 			return new IClasspathEntry[0];
 		
 		List list = new ArrayList();
-		String runtimeId = runtime.getRuntimeType().getId();
-		if (runtimeId.indexOf("32") > 0) {
-			IPath path = installPath.append("lib");
-			addLibraryEntries(list, path.toFile(), true);
-		} else if (runtimeId.indexOf("60") > 0) {
-			// TODO May need some flexibility in case the installation has been configured differently
-			// This lib "simplification" may cause issues for some.
-			// Not known yet whether packaged Linux installs will go along.
+		if (runtime.getRuntimeType().getId().indexOf("32") > 0) {
 			IPath path = installPath.append("lib");
 			addLibraryEntries(list, path.toFile(), true);
 		} else {
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeLocator.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeLocator.java
index 72b12cb..a2f564a 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeLocator.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeLocator.java
@@ -29,8 +29,7 @@
 		"org.eclipse.jst.server.tomcat.runtime.40",
 		"org.eclipse.jst.server.tomcat.runtime.41",
 		"org.eclipse.jst.server.tomcat.runtime.50",
-		"org.eclipse.jst.server.tomcat.runtime.55",
-		"org.eclipse.jst.server.tomcat.runtime.60"};
+		"org.eclipse.jst.server.tomcat.runtime.55"};
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.wst.server.core.model.IRuntimeFactoryDelegate#getKnownRuntimes()
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
index b84f70a..857c8b2 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,9 +29,7 @@
 	public static final String PROPERTY_SECURE = "secure";
 	public static final String PROPERTY_DEBUG = "debug";
 
-
 	protected transient TomcatConfiguration configuration;
-	protected transient ITomcatVersionHandler versionHandler;
 
 	/**
 	 * TomcatServer.
@@ -40,11 +38,6 @@
 		super();
 	}
 
-	/**
-	 * Get the Tomcat runtime for this server.
-	 * 
-	 * @return Tomcat runtime for this server
-	 */
 	public TomcatRuntime getTomcatRuntime() {
 		if (getServer().getRuntime() == null)
 			return null;
@@ -52,19 +45,11 @@
 		return (TomcatRuntime) getServer().getRuntime().loadAdapter(TomcatRuntime.class, null);
 	}
 
-	/**
-	 * Gets the Tomcat version handler for this server.
-	 * 
-	 * @return version handler for this server
-	 */
 	public ITomcatVersionHandler getTomcatVersionHandler() {
-		if (versionHandler == null) {
-			if (getServer().getRuntime() == null || getTomcatRuntime() == null)
-				return null;
+		if (getServer().getRuntime() == null || getTomcatRuntime() == null)
+			return null;
 
-			versionHandler = getTomcatRuntime().getVersionHandler();
-		}
-		return versionHandler;
+		return getTomcatRuntime().getVersionHandler();
 	}
 
 	public ITomcatConfiguration getServerConfiguration() throws CoreException {
@@ -92,8 +77,6 @@
 				configuration = new Tomcat50Configuration(folder);
 			else if (id.indexOf("55") > 0)
 				configuration = new Tomcat55Configuration(folder);
-			else if (id.indexOf("60") > 0)
-				configuration = new Tomcat60Configuration(folder);
 			try {
 				configuration.load(folder, null);
 			} catch (CoreException ce) {
@@ -124,8 +107,6 @@
 			configuration = new Tomcat50Configuration(folder);
 		else if (id.indexOf("55") > 0)
 			configuration = new Tomcat55Configuration(folder);
-		else if (id.indexOf("60") > 0)
-			configuration = new Tomcat60Configuration(folder);
 		try {
 			configuration.importFromPath(path, isTestEnvironment(), monitor);
 		} catch (CoreException ce) {
@@ -205,14 +186,6 @@
 		return getAttribute(PROPERTY_SECURE, false);
 	}
 	
-	/**
-	 * @see ITomcatServer#getDeployDirectory()
-	 */
-	public String getDeployDirectory() {
-		// Default to value used by prior WTP versions
-		return getAttribute(PROPERTY_DEPLOYDIR, LEGACY_DEPLOYDIR);
-	}
-	
 	protected static String renderCommandLine(String[] commandLine, String separator) {
 		if (commandLine == null || commandLine.length < 1)
 			return "";
@@ -311,7 +284,6 @@
 		setTestEnvironment(true);
 		setAttribute("auto-publish-setting", 2);
 		setAttribute("auto-publish-time", 1);
-		setDeployDirectory(DEFAULT_DEPLOYDIR);
 	}
 
 	/**
@@ -342,21 +314,6 @@
 	}
 	
 	/**
-	 * Set the deployment directory for this server.  May be absolute
-	 * or relative to runtime base directory.
-	 * 
-	 * @param deployDir deployment directory for the server
-	 */
-	public void setDeployDirectory(String deployDir) {
-		// Remove attribute if setting to legacy value assumed in prior versions of WTP.
-		// Allowing values that differ only in case is asking for more trouble that it is worth.
-		if (LEGACY_DEPLOYDIR.equalsIgnoreCase(deployDir))
-			setAttribute(PROPERTY_DEPLOYDIR, (String)null);
-		else
-			setAttribute(PROPERTY_DEPLOYDIR, deployDir);
-	}
-
-	/**
 	 * @see ServerDelegate#modifyModules(IModule[], IModule[], IProgressMonitor)
 	 */
 	public void modifyModules(IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException {
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 1eb0f48..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
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,13 +38,6 @@
  */
 public class TomcatServerBehaviour extends ServerBehaviourDelegate implements ITomcatServerBehaviour, IModulePublishHelper {
 	private static final String ATTR_STOP = "stop-server";
-	
-	private static final String[] JMX_EXCLUDE_ARGS = new String [] {
-		"-Dcom.sun.management.jmxremote",
-		"-Dcom.sun.management.jmxremote.port=",
-		"-Dcom.sun.management.jmxremote.ssl=",
-		"-Dcom.sun.management.jmxremote.authenticate="
-	};
 
 	// the thread used to ping the server to check for startup
 	protected transient PingThread ping = null;
@@ -70,7 +63,10 @@
 	}
 
 	public ITomcatVersionHandler getTomcatVersionHandler() {
-		return getTomcatServer().getTomcatVersionHandler();
+		if (getServer().getRuntime() == null || getTomcatRuntime() == null)
+			return null;
+
+		return getTomcatRuntime().getVersionHandler();
 	}
 
 	public TomcatConfiguration getTomcatConfiguration() throws CoreException {
@@ -113,10 +109,6 @@
 		return getTomcatVersionHandler().getRuntimeProgramArguments(configPath, getTomcatServer().isDebug(), starting);
 	}
 
-	protected String[] getExcludedRuntimeProgramArguments(boolean starting) {
-		return getTomcatVersionHandler().getExcludedRuntimeProgramArguments(getTomcatServer().isDebug(), starting);
-	}
-
 	/**
 	 * Return the runtime (VM) arguments.
 	 *
@@ -204,19 +196,19 @@
 		IPath confDir = null;
 		if (getTomcatServer().isTestEnvironment()) {
 			confDir = getTempDirectory();
-			IStatus status = getTomcatVersionHandler().prepareRuntimeDirectory(confDir);
+			IStatus status = getTomcatConfiguration().prepareRuntimeDirectory(confDir);
 			if (status != null && !status.isOK())
 				throw new CoreException(status);
+/*			File temp = confDir.append("conf").toFile();
+			if (!temp.exists())
+				temp.mkdirs();*/
 		} else
 			confDir = installDir;
-		IStatus status = getTomcatVersionHandler().prepareDeployDirectory(getServerDeployDirectory());
-		if (status != null && !status.isOK())
-			throw new CoreException(status);
 
 		monitor = ProgressUtil.getMonitorFor(monitor);
 		monitor.beginTask(Messages.publishServerTask, 600);
 		
-		status = getTomcatConfiguration().cleanupServer(confDir, installDir, ProgressUtil.getSubMonitorFor(monitor, 100));
+		IStatus status = getTomcatConfiguration().cleanupServer(confDir, installDir, ProgressUtil.getSubMonitorFor(monitor, 100));
 		if (status != null && !status.isOK())
 			throw new CoreException(status);
 		
@@ -224,8 +216,7 @@
 		if (status != null && !status.isOK())
 			throw new CoreException(status);
 		
-		getTomcatConfiguration().localizeConfiguration(confDir, getServerDeployDirectory(),
-				getTomcatServer(), ProgressUtil.getSubMonitorFor(monitor, 100));
+		getTomcatConfiguration().localizeConfiguration(confDir.append("conf"), getTomcatServer(), ProgressUtil.getSubMonitorFor(monitor, 100));
 		
 		monitor.done();
 		
@@ -296,11 +287,11 @@
 				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, "Could not remove module", e));
 			}
 		} else {
-			IPath path = getModuleDeployDirectory(module[0]);
+			IPath to = getServer().getRuntime().getLocation().append("webapps").append(module[0].getName());
 			IModuleResource[] mr = getResources(module);
-			IStatus[] stat = PublishUtil.publishSmart(mr, path, monitor);
+			IStatus[] stat = PublishUtil.publishSmart(mr, to, monitor);
 			PublishOperation2.addArrayToList(status, stat);
-			p.put(module[0].getId(), path.toOSString());
+			p.put(module[0].getId(), to.toOSString());
 		}
 		PublishOperation2.throwException(status);
 	}
@@ -323,7 +314,7 @@
 				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, "Could not remove module", e));
 			}
 		} else {
-			IPath path = getModuleDeployDirectory(module[0]);
+			IPath path = getServer().getRuntime().getLocation().append("webapps").append(module[0].getName());
 			path = path.append("WEB-INF").append("lib");
 			IPath jarPath = path.append(module[1].getName() + ".jar");
 			if (!path.toFile().exists()) {
@@ -355,7 +346,7 @@
 			baseDir = getServer().getRuntime().getLocation();
 		
 		// Publish context configuration for servers that support META-INF/context.xml
-		IStatus status = getTomcatConfiguration().publishContextConfig(baseDir, getServerDeployDirectory(), monitor);
+		IStatus status = getTomcatConfiguration().publishContextConfig(baseDir, monitor);
 		if (!status.isOK())
 			throw new CoreException(status);
 	}
@@ -377,10 +368,10 @@
 		IStatus status = getTomcatRuntime().validate();
 		if (status != null && status.getSeverity() == IStatus.ERROR)
 			throw new CoreException(status);
-		
+
 		//setRestartNeeded(false);
 		TomcatConfiguration configuration = getTomcatConfiguration();
-		
+	
 		// check that ports are free
 		Iterator iterator = configuration.getServerPorts().iterator();
 		List usedPorts = new ArrayList();
@@ -456,8 +447,7 @@
 		}
 		
 		try {
-			if (Trace.isTraceEnabled())
-				Trace.trace(Trace.FINER, "Stopping Tomcat");
+			Trace.trace(Trace.FINER, "Stopping Tomcat");
 			if (state != IServer.STATE_STOPPED)
 				setServerState(IServer.STATE_STOPPING);
 	
@@ -465,12 +455,6 @@
 			ILaunchConfigurationWorkingCopy wc = launchConfig.getWorkingCopy();
 			
 			String args = renderCommandLine(getRuntimeProgramArguments(false), " ");
-			// Remove JMX arguments if present
-			String existingVMArgs = wc.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, (String)null);
-			if (existingVMArgs.indexOf(JMX_EXCLUDE_ARGS[0]) >= 0) {
-				wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, 
-						mergeArguments(existingVMArgs, new String [] {}, JMX_EXCLUDE_ARGS, false));
-			}
 			wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, args);
 			wc.setAttribute("org.eclipse.debug.ui.private", true);
 			wc.setAttribute(ATTR_STOP, "true");
@@ -489,8 +473,7 @@
 
 		try {
 			setServerState(IServer.STATE_STOPPING);
-			if (Trace.isTraceEnabled())
-				Trace.trace(Trace.FINER, "Killing the Tomcat process");
+			Trace.trace(Trace.FINER, "Killing the Tomcat process");
 			if (process != null && !process.isTerminated()) {
 				process.terminate();
 				stopImpl();
@@ -533,20 +516,13 @@
 	
 	/**
 	 * Merge the given arguments into the original argument string, replacing
-	 * invalid values if they have been changed.  Special handling is provided
-	 * if the keepActionLast argument is true and the last vmArg is a simple
-	 * string.  The vmArgs will be merged such that the last vmArg is guaranteed
-	 * to be the last argument in the merged string.
+	 * invalid values if they have been changed.
 	 * 
-	 * @param originalArg String of original arguments.
-	 * @param vmArgs Arguments to merge into the original arguments string
-	 * @param keepActionLast If <b>true</b> the vmArguments are assumed to be Tomcat
-	 * program arguments, the last of which is the action to perform which must
-	 * remain the last argument.  This only has an impact if the last vmArg is
-	 * a simple string argument, like &quot;start&quot;.
+	 * @param originalArg
+	 * @param vmArgs
 	 * @return merged argument string
 	 */
-	public static String mergeArguments(String originalArg, String[] vmArgs, String[] excludeArgs, boolean keepActionLast) {
+	public static String mergeArguments(String originalArg, String[] vmArgs) {
 		if (vmArgs == null)
 			return originalArg;
 		
@@ -588,79 +564,15 @@
 					// replace
 					String s = originalArg.substring(0, index);
 					int index2 = getNextToken(originalArg, index);
-					if (!keepActionLast || i < (size - 1)) {
-						if (index2 >= 0)
-							originalArg = s + vmArgs[i] + originalArg.substring(index2);
-						else
-							originalArg = s + vmArgs[i];
-						vmArgs[i] = null;
-					}
-					else {
-						// The last VM argument needs to remain last,
-						// remove original arg and append the vmArg later
-						if (index2 >= 0)
-							originalArg = s + originalArg.substring(index2);
-						else
-							originalArg = s;
-					}
+					if (index2 >= 0)
+						originalArg = s + vmArgs[i] + originalArg.substring(index2);
+					else
+						originalArg = s + vmArgs[i];
+					vmArgs[i] = null;
 				}
 			}
 		}
-
-		// remove excluded arguments
-		if (excludeArgs != null && excludeArgs.length > 0) {
-			for (int i = 0; i < excludeArgs.length; i++) {
-				int ind = excludeArgs[i].indexOf(" ");
-				int ind2 = excludeArgs[i].indexOf("=");
-				if (ind >= 0 && (ind2 == -1 || ind < ind2)) { // -a bc style
-					int index = originalArg.indexOf(excludeArgs[i].substring(0, ind + 1));
-					if (index == 0 || (index > 0 && originalArg.charAt(index - 1) == ' ')) {
-						// remove
-						String s = originalArg.substring(0, index);
-						int index2 = getNextToken(originalArg, index + ind + 1);
-						if (index2 >= 0) {
-							// If remainder will become the first argument, remove leading blanks
-							while (index2 < originalArg.length() && originalArg.charAt(index2) == ' ')
-								index2 += 1;
-							originalArg = s + originalArg.substring(index2);
-						}
-						else
-							originalArg = s;
-					}
-				} else if (ind2 >= 0) { // a=b style
-					int index = originalArg.indexOf(excludeArgs[i].substring(0, ind2 + 1));
-					if (index == 0 || (index > 0 && originalArg.charAt(index - 1) == ' ')) {
-						// remove
-						String s = originalArg.substring(0, index);
-						int index2 = getNextToken(originalArg, index);
-						if (index2 >= 0) {
-							// If remainder will become the first argument, remove leading blanks
-							while (index2 < originalArg.length() && originalArg.charAt(index2) == ' ')
-								index2 += 1;
-							originalArg = s + originalArg.substring(index2);
-						}
-						else
-							originalArg = s;
-					}
-				} else { // abc style
-					int index = originalArg.indexOf(excludeArgs[i]);
-					if (index == 0 || (index > 0 && originalArg.charAt(index-1) == ' ')) {
-						// remove
-						String s = originalArg.substring(0, index);
-						int index2 = getNextToken(originalArg, index);
-						if (index2 >= 0) {
-							// Remove leading blanks
-							while (index2 < originalArg.length() && originalArg.charAt(index2) == ' ')
-								index2 += 1;
-							originalArg = s + originalArg.substring(index2);
-						}
-						else
-							originalArg = s;
-					}
-				}
-			}
-		}
-
+		
 		// add remaining vmargs to the end
 		for (int i = 0; i < size; i++) {
 			if (vmArgs[i] != null) {
@@ -712,9 +624,8 @@
 
 	public void setupLaunchConfiguration(ILaunchConfigurationWorkingCopy workingCopy, IProgressMonitor monitor) throws CoreException {
 		String existingProgArgs = workingCopy.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, (String)null);
-		workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS,
-				mergeArguments(existingProgArgs, getRuntimeProgramArguments(true), getExcludedRuntimeProgramArguments(true), true));
-		
+		workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, mergeArguments(existingProgArgs, getRuntimeProgramArguments(true)));
+
 		String existingVMArgs = workingCopy.getAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, (String)null);
 		String[] parsedVMArgs = null;
 		if (null != existingVMArgs) {
@@ -765,8 +676,7 @@
 				existingVMArgs = filteredVMArgs.toString();
 			}
 		}
-		workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS,
-				mergeArguments(existingVMArgs, configVMArgs, null, false));
+		workingCopy.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, mergeArguments(existingVMArgs, configVMArgs));
 		
 		ITomcatRuntime runtime = getTomcatRuntime();
 		IVMInstall vmInstall = runtime.getVMInstall();
@@ -899,121 +809,20 @@
 		}
 		return false;
 	}
-	
-	/**
-	 * Cleans the entire work directory for this server.  This involves
-	 * deleting all subdirectories of the server's work directory.
-	 * 
-	 * @param monitor a progress monitor
-	 * @return results of the clean operation
-	 * @throws CoreException
-	 */
-	public IStatus cleanServerWorkDir(IProgressMonitor monitor) throws CoreException {
-		IStatus result;
-		IPath basePath = getTomcatVersionHandler().getRuntimeBaseDirectory(this);
-		IPath workPath = getTomcatConfiguration().getServerWorkDirectory(basePath);
-		if (workPath != null) {
-			File workDir = workPath.toFile();
-			result = Status.OK_STATUS;
-			if (workDir.exists() && workDir.isDirectory()) {
-				// Delete subdirectories of the server's work dir
-				File[] files = workDir.listFiles();
-				if (files != null && files.length > 0) {
-					MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, "Problem occurred deleting work directory for module.", null);
-					int size = files.length;
-					monitor = ProgressUtil.getMonitorFor(monitor);
-					monitor.beginTask(NLS.bind("Cleaning Server Work Directory", new String[] { workDir.getAbsolutePath() }), size * 10);
 
-					for (int i = 0; i < size; i++) {
-						File current = files[i];
-						if (current.isDirectory()) {
-							IStatus [] results = PublishUtil.deleteDirectory(current, ProgressUtil.getSubMonitorFor(monitor, 10));
-							if (results != null && results.length > 0) {
-								for (int j = 0; j < results.length; j++) {
-									ms.add(results[j]);
-								}
-							}
-						}
-					}
-					monitor.done();
-					result = ms;
-				}
-			}
-		}
-		else {
-			result = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, "Could not determine work directory for module", null);
-		}
-		return result;
-	}
-	
-	/**
-	 * Cleans the work directory associated with the specified module on this
-	 * server.
-	 * 
-	 * @param module module whose work directory should be cleaned
-	 * @param monitor a progress monitor
-	 * @return result of the clean operation
-	 * @throws CoreException
-	 */
-	public IStatus cleanContextWorkDir(ITomcatWebModule module, IProgressMonitor monitor) throws CoreException {
-		IStatus result;
-		IPath basePath = getTomcatVersionHandler().getRuntimeBaseDirectory(this);
-		IPath workPath = getTomcatConfiguration().getContextWorkDirectory(basePath, module);
-		if (workPath != null) {
-			IStatus [] results = PublishUtil.deleteDirectory(workPath.toFile(), monitor);
-			MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, "Problem occurred deleting work directory for module.", null);
-			if (results != null && results.length > 0) {
-				for (int i = 0; i < results.length; i++) {
-					ms.add(results[i]);
-				}
-			}
-			result = ms;
-		}
-		else {
-			result = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, "Could not determine work directory for module", null);
-		}
-		return result;
-	}
-	
-	/**
-	 * Gets the directory to which modules should be deployed for
-	 * this server.
-	 * 
-	 * @return full path to deployment directory for the server
-	 */
-	public IPath getServerDeployDirectory() {
-		String deployDir = getTomcatServer().getDeployDirectory();
-		IPath deployPath = new Path(deployDir);
-		if (!deployPath.isAbsolute()) {
-			IPath base = getRuntimeBaseDirectory();
-			deployPath = base.append(deployPath);
-		}
-		return deployPath;
-	}
-	
-	/**
-	 * Gets the directory to which to deploy a module's web application.
-	 * 
-	 * @param module a module
-	 * @return full path to deployment directory for the module
-	 */
-	public IPath getModuleDeployDirectory(IModule module) {
-		return getServerDeployDirectory().append(module.getName());
-	}
-	
 	/**
 	 * Temporary method to help web services team. Returns the path that the module is
-	 * published to.
+	 * published to when in test environment mode.
 	 * 
 	 * @param module a module on the server 
 	 * @return the path that the module is published to when in test environment mode,
-	 *    or null if the module is not a web module
+	 *    or null if not running as a test environment or the module is not a web module
 	 */
 	public IPath getPublishDirectory(IModule[] module) {
-		if (module == null || module.length != 1)
+		if (!getTomcatServer().isTestEnvironment() || module == null || module.length != 1)
 			return null;
 		
-		return getModuleDeployDirectory(module[0]);
+		return getTempDirectory().append("webapps").append(module[0].getName());
 	}
 
 	public void setModulePublishState2(IModule[] module, int state) {
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java
deleted file mode 100644
index 864728e..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java
+++ /dev/null
@@ -1,537 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2007 SAS Institute, Inc and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *    SAS Institute, Inc - Initial API and implementation
- **********************************************************************/
-package org.eclipse.jst.server.tomcat.core.internal;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.server.core.PublishUtil;
-import org.eclipse.jst.server.tomcat.core.internal.xml.Factory;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Context;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.Server;
-import org.eclipse.jst.server.tomcat.core.internal.xml.server40.ServerInstance;
-import org.eclipse.osgi.util.NLS;
-import org.xml.sax.SAXException;
-
-/**
- * Utility class for methods that are used by more that one version
- * of Tomcat.  Use of these methods makes it clear that more than
- * one version will be impacted by changes.
- *
- */
-public class TomcatVersionHelper {
-
-	/**
-	 * Sting containing contents for a default web.xml for Servlet 2.2.
-	 */
-	public static final String DEFAULT_WEBXML_SERVLET22 = 
-		"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n" +
-		"<!DOCTYPE web-app PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN\" \"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd\">\n" +
-		"<web-app>\n</web-app>";
-
-	/**
-	 * Default web.xml contents for a Servlet 2.3 web application.
-	 */
-	public static final String DEFAULT_WEBXML_SERVLET23 = 
-		"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
-		"<!DOCTYPE web-app PUBLIC \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\" \"http://java.sun.com/dtd/web-app_2_3.dtd\">\n" +
-		"<web-app>\n</web-app>";
-
-	/**
-	 * Default web.xml contents for a Servlet 2.4 web application.
-	 */
-	public static final String DEFAULT_WEBXML_SERVLET24 = 
-	"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
-	"<web-app id=\"WebApp_ID\" version=\"2.4\" xmlns=\"http://java.sun.com/xml/ns/j2ee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">\n" +
-	"</web-app>";
-
-	/**
-	 * Reads the from the specified InputStream and returns
-	 * the result as a String. Each line is terminated by
-	 * &quot;\n&quot;.  Returns whatever is read regardless
-	 * of any errors that occurs while reading.
-	 * 
-	 * @param stream InputStream for the contents to be read
-	 * @return contents read
-	 * @throws IOException if error occurs closing the stream
-	 */
-	public static String getFileContents(InputStream stream) throws IOException {
-		BufferedReader br = null;
-		StringBuffer sb = new StringBuffer();
-		try {
-			br = new BufferedReader(new InputStreamReader(stream));
-			String temp = br.readLine();
-			while (temp != null) {
-				sb.append(temp).append("\n");
-				temp = br.readLine();
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load file contents.", e);
-		} finally {
-			if (br != null)
-				br.close();
-		}
-		return sb.toString();
-	}
-	
-	/**
-	 * Gets a ServerInstance for the specified server.xml, Service name,
-	 * and Host name.  Returns null if server.xml does not exist
-	 * or an error occurs.
-	 * 
-	 * @param serverXml path to previously published server.xml 
-	 * @param serviceName name of Service to be used by this instance or null
-	 * @param hostName name of Host to be used by this instance or null
-	 * @return ServerInstance for specified server.xml using specified
-	 * Service and Host names.  null if server.xml does not exist.
-	 * @throws FileNotFoundException should not occur since existence is tested
-	 * @throws IOException if there is an error reading server.xml
-	 * @throws SAXException if there is a syntax error in server.xml
-	 */
-	public static ServerInstance getCatalinaServerInstance(IPath serverXml, String serviceName, String hostName) throws FileNotFoundException, IOException, SAXException {
-		ServerInstance serverInstance = null;
-		Factory factory = new Factory();
-		factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-		File serverFile = serverXml.toFile();
-		if (serverFile.exists()) {
-			Server server = (Server) factory.loadDocument(new FileInputStream(serverFile));
-			serverInstance = new ServerInstance(server, serviceName, hostName);
-		}
-		return serverInstance;
-	}
-
-	/**
-	 * Gets the paths for Contexts that are being removed in the
-	 * next server publish. Reads the old server.xml to determine
-	 * what Contexts were previously servered and returns those
-	 * that are not included in the specified list of modules.
-	 * 
-	 * @param oldServerInstance for server.xml from previous server publish
-	 * @param modules list of currently added modules
-	 * @return collection of Context paths that are not present in current modules
-	 */
-	public static Collection getRemovedCatalinaContexts(ServerInstance oldServerInstance, List modules) {
-		// Determine which contexts are going away
-		Set removedContextPaths = new HashSet();
-		// Collect paths of old web modules managed by WTP
-		Context [] contexts = oldServerInstance.getContexts();
-		if (contexts != null) {
-			for (int i = 0; i < contexts.length; i++) {
-				String source = contexts[i].getSource();
-				if (source != null && source.length() > 0 )	{
-					removedContextPaths.add(contexts[i].getPath());
-				}
-			}
-		}
-
-		// Remove paths for web modules that are staying around
-		int size = modules.size();
-		for (int i = 0; i < size; i++) {
-			WebModule module = (WebModule) modules.get(i);
-			removedContextPaths.remove(module.getPath());
-		}
-		return removedContextPaths;
-	}
-
-	/**
-	 * Cleanup server instance location in preparation for next server publish.
-	 * This currently involves deleting work directories for currently
-	 * existing Contexts which will not be included in the next publish.<br>
-	 * <br>
-	 * Note: This method is not used by Tomcat 5.0, because it may create
-	 * Context XML files under &quot;conf/Catalina/localhost&quot; for Contexts
-	 * in server.xml which requires additional cleanup.
-	 * 
-	 * @param baseDir path to server instance directory, i.e. catalina.base
-	 * @param installDir path to server installation directory (not currently used)
-	 * @param modules list of currently added modules
-	 * @param monitor a progress monitor or null
-	 * @return MultiStatus containing results of the cleanup operation
-	 */
-	public static IStatus cleanupCatalinaServer(IPath baseDir, IPath installDir, List modules, IProgressMonitor monitor) {
-		MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.cleanupServerTask, null);
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.cleanupServerTask, 200);
-			monitor.subTask(Messages.detectingRemovedProjects);
-
-			IPath serverXml = baseDir.append("conf").append("server.xml");
-			ServerInstance oldInstance = TomcatVersionHelper.getCatalinaServerInstance(serverXml, null, null);
-			if (oldInstance != null) {
-				Collection oldPaths = TomcatVersionHelper.getRemovedCatalinaContexts(oldInstance, modules);
-				monitor.worked(100);
-				if (oldPaths != null && oldPaths.size() > 0) {
-					// Delete work directories for managed web modules that have gone away
-					if (oldPaths.size() > 0 ) {
-						IProgressMonitor subMonitor = ProgressUtil.getSubMonitorFor(monitor, 100);
-						subMonitor.beginTask(Messages.deletingContextFilesTask, oldPaths.size() * 100);
-						
-						Iterator iter = oldPaths.iterator();
-						while (iter.hasNext()) {
-							String oldPath = (String)iter.next();
-							
-							// Delete work directory associated with the removed context if it is within confDir.
-							// If it is outside of confDir, assume user is going to manage it.
-							Context ctx = oldInstance.getContext(oldPath);
-							IPath ctxWorkPath = oldInstance.getContextWorkDirectory(baseDir, ctx);
-							if (baseDir.isPrefixOf(ctxWorkPath)) {
-								File ctxWorkDir = ctxWorkPath.toFile();
-								if (ctxWorkDir.exists() && ctxWorkDir.isDirectory()) {
-									IStatus [] results = PublishUtil.deleteDirectory(ctxWorkDir, ProgressUtil.getSubMonitorFor(monitor, 100));
-									if (results.length > 0) {
-										Trace.trace(Trace.SEVERE, "Could not delete work directory " + ctxWorkDir.getPath() + " for removed context " + oldPath);
-										for (int i = 0; i < results.length; i++) {
-											ms.add(results[i]);
-										}
-									}
-								}
-								else
-									subMonitor.worked(100);
-							}
-							else
-								subMonitor.worked(100);
-						}
-						subMonitor.done();
-					}
-				}
-				monitor.worked(100);
-			}
-			// Else no server.xml.  Assume first publish to new temp directory
-			else {
-				monitor.worked(200);
-			}
-			if (Trace.isTraceEnabled())
-				Trace.trace(Trace.FINER, "Server cleaned");
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not cleanup server at " + baseDir.toOSString() + ": " + e.getMessage());
-			ms.add(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
-					NLS.bind(Messages.errorCleanupServer, new String[] {e.getLocalizedMessage()}), e));
-		}
-		finally {
-			monitor.done();
-		}
-		
-		return ms;
-	}
-
-	/**
-	 * Creates a Catalina instance directory at the specified
-	 * path.  This involves creating the set of subdirectories
-	 * uses by a Catalina instance.
-	 * 
-	 * @param baseDir directory at which to create Catalina instance
-	 * directories.
-	 * @param webxml web.xml content for ROOT web application
-	 * @return result status of the operation
-	 */
-	public static IStatus createCatalinaInstanceDirectory(IPath baseDir, String webxml) {
-		if (Trace.isTraceEnabled())
-			Trace.trace(Trace.FINER, "Creating runtime directory at " + baseDir.toOSString());
-		// TODO Add more error handling.
-		// Prepare a catalina.base directory structure
-		File temp = baseDir.append("conf").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = baseDir.append("logs").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = baseDir.append("temp").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = baseDir.append("webapps").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = baseDir.append("work").toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-
-		return Status.OK_STATUS;		
-	}
-	
-	/**
-	 * Creates the specified deployment directory if it does not already exist.
-	 * It will include a default ROOT web application using the specified web.xml.
-	 * 
-	 * @param deployDir path to deployment directory to create
-	 * @param webxml web.xml context to use for the ROOT web application.
-	 * @return result status of the operation
-	 */
-	public static IStatus createDeploymentDirectory(IPath deployDir, String webxml) {
-		if (Trace.isTraceEnabled())
-			Trace.trace(Trace.FINER, "Creating deployment directory at " + deployDir.toOSString());
-
-		// TODO Add more error handling.
-		File temp = deployDir.toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-
-		IPath tempPath = deployDir.append("ROOT/WEB-INF");
-		temp = tempPath.toFile();
-		if (!temp.exists())
-			temp.mkdirs();
-		temp = tempPath.append("web.xml").toFile();
-		if (!temp.exists()) {
-			FileWriter fw;
-			try {
-				fw = new FileWriter(temp);
-				fw.write(webxml);
-				fw.close();
-			} catch (IOException e) {
-				Trace.trace(Trace.WARNING, "Unable to create web.xml for ROOT context.", e);
-			}
-		}
-		
-		return Status.OK_STATUS;		
-	}
-
-	/**
-	 * Add context configuration found in META-INF/context.xml files
-	 * present in projects to published server.xml.  Used by
-	 * Tomcat 4.1, 5.0, and 5.5 which support use of META-INF/context.xml
-	 * in some form.
-	 * 
-	 * @param baseDir absolute path to catalina instance directory
-	 * @param webappsDir absolute path to deployment directory
-	 * @param monitor a progress monitor or null
-	 * @return result of operation
-	 */
-	public static IStatus publishCatalinaContextConfig(IPath baseDir, IPath webappsDir, IProgressMonitor monitor) {
-		if (Trace.isTraceEnabled())
-			Trace.trace(Trace.FINER, "Apply context configurations");
-		IPath confDir = baseDir.append("conf");
-		try {
-			monitor = ProgressUtil.getMonitorFor(monitor);
-			monitor.beginTask(Messages.publishConfigurationTask, 300);
-
-			monitor.subTask(Messages.publishContextConfigTask);
-			Factory factory = new Factory();
-			factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-			Server publishedServer = (Server) factory.loadDocument(new FileInputStream(confDir.append("server.xml").toFile()));
-			ServerInstance publishedInstance = new ServerInstance(publishedServer, null, null);
-			monitor.worked(100);
-			
-			boolean modified = false;
-
-			MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, Messages.publishContextConfigTask, null);
-			Context [] contexts = publishedInstance.getContexts();
-			if (contexts != null) {
-				for (int i = 0; i < contexts.length; i++) {
-					Context context = contexts[i];
-					monitor.subTask(NLS.bind(Messages.checkingContextTask,
-							new String[] {context.getPath()}));
-					if (addCatalinaContextConfig(webappsDir, context, ms)) {
-						modified = true;
-					}
-				}
-			}
-			monitor.worked(100);
-			if (modified) {
-				monitor.subTask(Messages.savingContextConfigTask);
-				factory.save(confDir.append("server.xml").toOSString());
-			}
-			
-			// If problem(s) occurred adding context configurations, return error status
-			if (ms.getChildren().length > 0) {
-				return ms;
-			}
-			if (Trace.isTraceEnabled())
-				Trace.trace(Trace.FINER, "Server.xml updated with context.xml configurations");
-			return Status.OK_STATUS;
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not apply context configurations to published Tomcat configuration from " + confDir.toOSString() + ": " + e.getMessage());
-			return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e);
-		}
-		finally {
-			monitor.done();
-		}
-	}
-
-	/**
-	 * If the specified Context is linked to a project, try to
-	 * update it with any configuration from a META-INF/context.xml found
-	 * relative to the specified web applications directory and context docBase.
-	 * 
-	 * @param webappsDir Path to server's web applications directory.
-	 * @param context Context object to receive context.xml contents.
-	 * @param ms MultiStatus object to receive error status.
-	 * @return Returns true if context is modified.
-	 */
-	private static boolean addCatalinaContextConfig(IPath webappsDir, Context context, MultiStatus ms) {
-		boolean modified = false;
-		String source = context.getSource();
-		if (source != null && source.length() > 0 )
-		{
-			File docBase = new File(context.getDocBase());
-			if (!docBase.isAbsolute())
-				docBase = new File(webappsDir.toOSString(), docBase.getPath());
-			try {
-				Context contextConfig = loadCatalinaContextConfig(docBase);
-				if (null != contextConfig) {
-					if (context.hasChildNodes())
-						context.removeChildren();
-					contextConfig.copyChildrenTo(context);
-					Map attrs = contextConfig.getAttributes();
-					Iterator iter = attrs.keySet().iterator();
-					while (iter.hasNext()) {
-						String name = (String) iter.next();
-						if (!name.equalsIgnoreCase("path")
-								&& !name.equalsIgnoreCase("docBase")
-								&& !name.equalsIgnoreCase("source")) {
-							String value = (String)attrs.get(name);
-							context.setAttributeValue(name, value);
-						}
-					}
-					modified = true;
-				}
-			} catch (Exception e) {
-				String contextPath = context.getPath();
-				if (contextPath.startsWith("/")) {
-					contextPath = contextPath.substring(1);
-				}
-				Trace.trace(Trace.SEVERE, "Error reading context.xml file for " + contextPath, e);
-				IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0,
-						NLS.bind(Messages.errorCouldNotLoadContextXml, contextPath), e);
-				ms.add(s);
-			}
-		}
-		return modified;
-	}
-	
-	/**
-	 * Tries to read a META-INF/context.xml file relative to the
-	 * specified web application path.  If found, it creates a Context object
-	 * containing the contexts of that file.
-	 * 
-	 * @param docBase File with absolute path to the web application
-	 * @return Context element created from context.xml, or null if not found.
-	 * @throws SAXException If there is a error parsing the XML. 
-	 * @throws IOException If there is an error reading the file.
-	 */
-	private static Context loadCatalinaContextConfig(File docBase) throws IOException, SAXException {
-		File contextXML = new File(docBase, "META-INF" + File.separator + "context.xml");
-		if (contextXML.exists()) {
-			try {
-				InputStream is = new FileInputStream(contextXML);
-				Factory ctxFactory = new Factory();
-				ctxFactory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-				Context ctx = (Context)ctxFactory.loadDocument(is);
-				is.close();
-				return ctx;
-			} catch (FileNotFoundException e) {
-				// Ignore, should never occur
-			}
-		}
-		return null;
- 	}
-	
-	/**
-	 * If modules are not being deployed to the "webapps" directory, the
-	 * context for the published modules is updated to contain the
-	 * corrected docBase.
-	 * 
-	 * @param baseDir runtime base directory for the server
-	 * @param deployDir deployment directory for the server
-	 * @param server server being localized
-	 * @param monitor a progress monitor
-	 * @return result of operation
-	 */
-	public static IStatus localizeConfiguration(IPath baseDir, IPath deployDir, TomcatServer server, IProgressMonitor monitor) {
-		// If not deploying to "webapps", context docBase attributes need updating
-		// TODO Improve to compare with appBase value instead of hardcoded "webapps"
-		// TODO Need to add a root context if deploying to webapps but with auto-deploy off
-		if (!"webapps".equals(server.getDeployDirectory())) {
-			try {
-				if (Trace.isTraceEnabled())
-					Trace.trace(Trace.FINER, "Localizing configuration at " + baseDir);
-				monitor = ProgressUtil.getMonitorFor(monitor);
-				monitor.beginTask(Messages.publishConfigurationTask, 300);
-
-				IPath serverXml = baseDir.append("conf/server.xml");
-				Factory factory = new Factory();
-				factory.setPackageName("org.eclipse.jst.server.tomcat.core.internal.xml.server40");
-				Server publishedServer = (Server)factory.loadDocument(
-						new FileInputStream(serverXml.toFile()));
-				ServerInstance publishedInstance = new ServerInstance(publishedServer, null, null);
-				monitor.worked(100);
-
-				if (monitor.isCanceled())
-					return Status.CANCEL_STATUS;
-				
-				boolean modified = false;
-
-				// Only add root module if running in a test env (i.e. not on the installation)
-				boolean addRootWebapp = server.isTestEnvironment();
-				
-				Context [] contexts = publishedInstance.getContexts();
-				if (contexts != null) {
-					for (int i = 0; i < contexts.length; i++) {
-						Context context = contexts[i];
-						String source = context.getSource();
-						if (source != null && source.length() > 0 )	{
-							context.setDocBase(deployDir.append(context.getDocBase()).toOSString());
-							modified = true;
-						}
-						// If default webapp has not been found, check this one
-						if (addRootWebapp && "".equals(context.getPath())) {
-							// A default webapp is being deployed, don't add one
-							addRootWebapp = false;
-						}
-					}
-				}
-				if (addRootWebapp) {
-					// Add a context for the default webapp
-					Context rootContext = publishedInstance.createContext(0);
-					rootContext.setPath("");
-					rootContext.setDocBase(deployDir.append("ROOT").toOSString());
-					rootContext.setReloadable("false");
-					modified = true;
-				}
-				monitor.worked(100);
-
-				if (monitor.isCanceled())
-					return Status.CANCEL_STATUS;
-				
-				if (modified) {
-					monitor.subTask(Messages.savingContextConfigTask);
-					factory.save(serverXml.toOSString());
-				}
-				monitor.worked(100);
-				if (Trace.isTraceEnabled())
-					Trace.trace(Trace.FINER, "Context docBase settings updated in server.xml.");
-			}
-			catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not localize server configuration published to " + baseDir.toOSString() + ": " + e.getMessage());
-				return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPublishConfiguration, new String[] {e.getLocalizedMessage()}), e);
-			}
-			finally {
-				monitor.done();
-			}
-		}
-		return Status.OK_STATUS;
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Trace.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Trace.java
index e4006bb..b7afff6 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Trace.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Trace.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005, 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,11 +16,11 @@
  * Helper class to route trace output.
  */
 public class Trace {
-	public static final byte CONFIG = 0;
-	public static final byte WARNING = 1;
-	public static final byte SEVERE = 2;
-	public static final byte FINEST = 3;
-	public static final byte FINER = 4;
+	public static byte CONFIG = 0;
+	public static byte WARNING = 1;
+	public static byte SEVERE = 2;
+	public static byte FINEST = 3;
+	public static byte FINER = 4;
 	
 	private static final String[] levelNames = new String[] {
 		"CONFIG   ", "WARNING  ", "SEVERE   ", "FINER    ", "FINEST   "};
@@ -95,13 +95,4 @@
 		if (t != null)
 			t.printStackTrace();
 	}
-	
-	/**
-	 * Gets state of debug flag for the plug-in.
-	 * 
-	 * @return true if tracing is enabled
-	 */
-	public static boolean isTraceEnabled() {
-		return TomcatPlugin.getInstance().isDebugging();
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/VerifyResourceSpec.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/VerifyResourceSpec.java
deleted file mode 100644
index 1665747..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/VerifyResourceSpec.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.eclipse.jst.server.tomcat.core.internal;
-
-import java.io.File;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-
-public class VerifyResourceSpec {
-	private String spec;
-	private String [] paths;
-	private String otherNames;
-	private int lastSuccess = -1;
-	private IStatus errorStatus;
-	
-	public VerifyResourceSpec(String spec) {
-		this.spec = spec;
-		int altIndex = spec.indexOf('|');
-		if (altIndex < 0) {
-			paths = new String[1];
-			paths[0] = spec.trim();
-		}
-		else {
-			String file1 = spec.substring(0, altIndex).trim();
-			String altSpec = spec.substring(altIndex + 1);
-			if (altSpec.length() > 0) {
-				int index = file1.lastIndexOf(File.separatorChar);
-				String dir = index >= 0 ? file1.substring(0, index + 1) : "";
-				String [] altNames = altSpec.split("\\|");
-				paths = new String[altNames.length + 1];
-				paths[0] = file1;
-				for (int i = 0; i < altNames.length; i++) {
-					paths[i + 1] = dir + altNames[i].trim();
-				}
-				otherNames = altSpec.replace('|', ',');
-			}
-			else {
-				paths = new String[1];
-				paths[0] = file1;
-			}
-		}
-	}
-	
-	public String [] getPaths() {
-		return paths;
-	}
-	
-	public IStatus checkResource(String installDir) {
-		if (lastSuccess >= 0 ) {
-			File file = new File(installDir, paths[lastSuccess]);
-			if (file.exists())
-				return Status.OK_STATUS;
-		}
-		for (int i = 0; i < paths.length; i++) {
-			if (i != lastSuccess) {
-				File file = new File(installDir, paths[i]);
-				if (file.exists()) {
-					lastSuccess = i;
-					return Status.OK_STATUS;
-				}
-			}
-		}
-		// Resource was not found, return error status
-		if (errorStatus == null) {
-			// Construct error status on first use
-			if (paths.length == 1 || otherNames == null) {
-				errorStatus = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorInstallDirMissingFile, paths[0]), null);
-			}
-			else if (paths.length == 2) {
-				errorStatus = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorInstallDirMissingFile2, paths[0],  otherNames), null);
-			}
-			else {
-				errorStatus = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorInstallDirMissingFile3, paths[0],  otherNames), null);
-			}
-		}
-		return errorStatus;
-	}
-	
-	public String toString() {
-		return spec;
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.java
index 4326b1c..b9c0751 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.java
@@ -69,7 +69,7 @@
 		XMLUtil.insertText(webAppDocument, mapping, "\n\t");
 		XMLUtil.createTextChildElement(webAppDocument, mapping, "mime-type", map.getMimeType());
 		XMLUtil.insertText(webAppDocument, mapping, "\n");
-		
+	
 		isWebAppDirty = true;
 	}
 
@@ -80,7 +80,7 @@
 	 */
 	public List getMimeMappings() {
 		List map = new ArrayList();
-		
+	
 		Element root = webAppDocument.getDocumentElement();
 		Iterator iterator = XMLUtil.getNodeIterator(root, "mime-mapping");
 		while (iterator.hasNext()) {
@@ -90,7 +90,7 @@
 			MimeMapping mm = new MimeMapping(extension, mimeType);
 			map.add(mm);
 		}
-		
+	
 		return map;
 	}
 
@@ -106,7 +106,7 @@
 		Element element2 = (Element) list.item(index);
 		XMLUtil.setNodeValue(element2.getElementsByTagName("extension").item(0), "extension", map.getExtension());
 		XMLUtil.setNodeValue(element2.getElementsByTagName("mime-type").item(0), "mime-type", map.getMimeType());
-		
+			
 		isWebAppDirty = true;
 	}
 
@@ -122,7 +122,7 @@
 		element.removeChild(node);
 		isWebAppDirty = true;
 	}
-
+	
 	/**
 	 * Saves the Web app document.
 	 *
@@ -134,7 +134,7 @@
 		if (forceDirty || isWebAppDirty)
 			XMLUtil.save(path, webAppDocument);
 	}
-
+	
 	/**
 	 * Saves the Web app document.
 	 *
@@ -143,9 +143,6 @@
 	 * @throws Exception if anything goes wrong 
 	 */
 	public void save(IFile file, IProgressMonitor monitor) throws Exception {
-		if (file.exists() && !isWebAppDirty)
-			return;
-		
 		byte[] data = XMLUtil.getContents(webAppDocument);
 		InputStream in = null;
 		try {
@@ -163,6 +160,5 @@
 				// ignore
 			}
 		}
-		isWebAppDirty = false;
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetDeployDirectoryCommand.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetDeployDirectoryCommand.java
deleted file mode 100644
index 0d10e14..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/command/SetDeployDirectoryCommand.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 SAS Institute, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Larry Isaacs - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.server.tomcat.core.internal.command;
-
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatServerWorkingCopy;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-
-/**
- * Command to change the deploy directory
- */
-public class SetDeployDirectoryCommand extends ServerCommand {
-	protected String deployDir;
-	protected String oldDeployDir;
-
-	/**
-	 * Constructs command to set the deploy directory.
-	 * 
-	 * @param server a Tomcat server
-	 * @param deployDir deployment directory to set
-	 */
-	public SetDeployDirectoryCommand(ITomcatServerWorkingCopy server,
-			String deployDir) {
-		super(server, Messages.serverEditorActionSetDeployDirectory);
-		this.deployDir = deployDir;
-	}
-
-	/**
-	 * Execute setting the deploy directory
-	 */
-	public void execute() {
-		oldDeployDir = server.getDeployDirectory();
-		server.setDeployDirectory(deployDir);
-	}
-
-	/**
-	 * Restore prior deploy directory
-	 */
-	public void undo() {
-		server.setDeployDirectory(oldDeployDir);
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/Factory.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/Factory.java
index 6a67c89..36bdbaa 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/Factory.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/Factory.java
@@ -41,20 +41,10 @@
 		Element element = document.createElement(s);
 		try {
 			Node child = node.getFirstChild();
-			while (child != null && !s.equals(child.getNodeName())) {
+			for (int i = 0; i < index; i++)
 				child = child.getNextSibling();
-			}
-			for (int i = 0; child != null && i < index; i++) {
-				child = child.getNextSibling();
-				while (child != null && !s.equals(child.getNodeName())) {
-					child = child.getNextSibling();
-				}
-			}
-			// TODO Try to improve formating, maybe dup an appropriate text node
-			if (child != null)
-				node.insertBefore(element, child);
-			else
-				node.appendChild(element);
+	
+			node.insertBefore(element, child);
 		} catch (Exception e) {
 			node.appendChild(element);
 		}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/ServerInstance.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/ServerInstance.java
deleted file mode 100644
index 73eac7e..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server32/ServerInstance.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 SAS Institute, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Larry Isaacs - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.server.tomcat.core.internal.xml.server32;
-
-import java.net.URLEncoder;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.TomcatPlugin;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * This class represents an instance of a Tomcat 3.2, or later, server as
- * defined a server.xml configuration file.
- */
-public class ServerInstance {
-
-	protected Server server;
-	protected ContextManager contextManager;
-	
-	protected IStatus status = Status.OK_STATUS;
-	
-	/**
-	 * Constructs a ServerInstance using the specified Server configuration.
-	 * The ServerInstance provides access to Connectors and Contexts. It does
-	 * not support interacting with Host elements under the ContextManager
-	 * element.
-	 * 
-	 * @param server Server configuration on which to base this instance.
-	 */
-	public ServerInstance(Server server) {
-		if (server == null)
-			throw new IllegalArgumentException("Server argument may not be null.");
-		this.server = server;
-	}
-
-	/**
-	 * This method is used to get the problem status following
-	 * a method call that returned <b>null</b> due to an error.
-	 * @return Status of last method call.
-	 */
-	public IStatus getStatus() {
-		return status;
-	}
-
-	/**
-	 * Gets the ContextManager element if one exists or will
-	 * create a new one if it does not currently exist.
-	 * @return Returns an existing or new ContextManger.
-	 */
-	public ContextManager getContextManager() {
-		status = Status.OK_STATUS;
-		if (contextManager == null)
-			contextManager = server.getContextManager();
-		return contextManager;
-	}
-	
-	/**
-	 * Gets the connector at the specified index. If a Connector
-	 * does not exist at that index a new Connector is appended
-	 * and returned.
-	 * 
-	 * @param index Index of the Connector to return.
-	 * @return Returns the Connecter at the specified index or
-	 * a new Connector if one at that index doesn't exist.
-	 */
-	public Connector getConnector(int index) {
-		status = Status.OK_STATUS;
-		if (contextManager == null && getContextManager() == null)
-			return null;	// Note: Can't currently occur
-		
-		return contextManager.getConnector(index);
-	}
-
-	/**
-	 * Gets the Connectors found in the ContextManager in the
-	 * server configuration.
-	 *    
-	 * @return Array of Connectors found in the ContextManger in the
-	 * server configuration.
-	 */
-	public Connector [] getConnectors() {
-		status = Status.OK_STATUS;
-		if (contextManager == null && getContextManager() == null)
-			return null;	// Note: Can't currently occur
-		
-		int size = contextManager.getConnectorCount();
-		Connector [] connectors = new Connector [size];
-		for (int i = 0; i < size; i++) {
-			connectors[i] = contextManager.getConnector(i);
-		}
-		return connectors;
-	}
-	
-	/**
-	 * Gets the Context that has the specified path within the selected
-	 * Host. This method will return <b>null</b> if the Context with the
-	 * required path is not found in the server configuration.
-	 * 
-	 * @param contextPath Path of the Context to be returned.  A leading '/' is optional.
-	 * @return Returns the Context whose <b>path</b> attribute matches
-	 * the specified contextPath. Returns <b>null</b> if the Context with
-	 * the required path is not found.
-	 */
-	public Context getContext(String contextPath) {
-		status = Status.OK_STATUS;
-		if (contextManager == null && getContextManager() == null)
-			return null;	// Note: Can't currently occur
-		
-		if (contextPath != null && contextPath.length() > 0 && !contextPath.startsWith("/"))
-			contextPath = "/" + contextPath;
-		
-		int size = contextManager.getContextCount();
-		for (int i = 0; i < size; i++) {
-			Context ctx = contextManager.getContext(i);
-			if (ctx.getPath().equals(contextPath)) {
-				return ctx;
-			}
-		}
-		status = new Status(IStatus.ERROR,TomcatPlugin.PLUGIN_ID,
-				NLS.bind(Messages.errorXMLContextNotFoundPath32, contextPath));
-		return null;
-	}
-	
-	/**
-	 * Gets the Context at the specified index. If a Connector does not
-	 * exist at the specified index, a new Context will be appended and
-	 * returned.
-	 * 
-	 * @param index Index of the Context to return.
-	 * @return Returns the Context at the specified index, or
-	 * a new appended Context if the index is beyond any existing
-	 * Contexts.
-	 */
-	public Context getContext(int index) {
-		status = Status.OK_STATUS;
-		if (contextManager == null && getContextManager() == null)
-			return null;	// Note: Can't currently occur
-		
-		return contextManager.getContext(index);
-	}
-	
-	/**
-	 * Gets the Contexts contained in the ContextManager.
-	 * 
-	 * @return Array of Contexts contained in the ContextManager.
-	 */
-	public Context [] getContexts() {
-		status = Status.OK_STATUS;
-		if (contextManager == null && getContextManager() == null)
-			return null;	// Note: Can't currently occur
-		
-		int size = contextManager.getContextCount();
-		Context [] contexts = new Context [size];
-		for (int i = 0; i < size; i++) {
-			contexts[i] = contextManager.getContext(i);
-		}
-		return contexts;
-	}
-	
-	/**
-	 * Creates a new Context and inserts it before the specifed index
-	 * or appends it if the index is beyond any existing Contexts in the
-	 * ContextManager.
-	 * 
-	 * @param index Index prior to which to insert the new Contexts.
-	 * @return Returns the created Context.
-	 */
-	public Context createContext(int index) {
-		status = Status.OK_STATUS;
-		if (contextManager == null && getContextManager() == null)
-			return null;	// Note: Can't currently occur
-
-		return (Context)contextManager.createElement(index, "Context");
-	}
-	
-	/**
-	 * Removes the Context with the specified path, if it can be found.
-	 * 
-	 * @param contextPath Path of the Context to be removed.  A leading '/' is optional.
-	 * @return Returns <b>true</b> if the Context was removed.  Returns <b>false</b>
-	 * if the Context is not found.
-	 */
-	public boolean removeContext(String contextPath) {
-		status = Status.OK_STATUS;
-		if (contextManager == null && getContextManager() == null)
-			return false;	// Note: Can't currently occur
-		
-		if (contextPath != null && contextPath.length() > 0 && !contextPath.startsWith("/"))
-			contextPath = "/" + contextPath;
-		
-		int size = contextManager.getContextCount();
-		for (int i = 0; i < size; i++) {
-			Context ctx = contextManager.getContext(i);
-			if (ctx.getPath().equals(contextPath)) {
-				contextManager.removeElement("Context", i);
-				return true;
-			}
-		}
-		status = new Status(IStatus.ERROR,TomcatPlugin.PLUGIN_ID,
-				NLS.bind(Messages.errorXMLContextNotFoundPath32, contextPath));
-		return false;
-	}
-	
-	/**
-	 * @param index Index of the Context to remove.
-	 * @return Returns <b>true</b> if a Context is removed at the specified
-	 * index.  Returns <b>false</b> no Context exists at that index.
-	 */
-	public boolean removeContext(int index) {
-		status = Status.OK_STATUS;
-		if (contextManager == null && getContextManager() == null)
-			return false;	// Note: Can't currently occur
-
-		return contextManager.removeElement("Context", index);
-	}
-
-	/**
-	 * Gets the work directory associated with the specified 
-	 * Context. If the work directory obtained is relative,
-	 * it is appended to the specified base path. This method does
-	 * not verify if the specified Context currently exists. 
-	 * 
-	 * @param basePath Path to the base directory for the server.
-	 * @param context Context whose work directory to return.
-	 * @return Returns the path to the work directory for the specifed
-	 * Context.
-	 */
-	public IPath getContextWorkDirectory(IPath basePath, Context context) {
-		if (context == null)
-			throw new IllegalArgumentException("Context argument may not be null.");
-		status = Status.OK_STATUS;
-		if (contextManager == null && getContextManager() == null)
-			return null;	// Note: Can't currently occur
-
-		StringBuffer sb=new StringBuffer();
-		String workDir = contextManager.getWorkDir();
-		if (workDir == null)
-			workDir = "work";
-		sb.append(workDir);
-		sb.append("/");
-		String hostName = contextManager.getAttributeValue("hostName");
-		if (hostName == null)
-			hostName = "localhost";
-		sb.append(hostName);
-		sb.append("_");
-		String legacyPort = contextManager.getAttributeValue("port");
-		if (legacyPort == null)
-			legacyPort = "8080";
-		sb.append(legacyPort);
-		// Duplicate URLEncoder.encode() used in Tomcat 3.2
-		sb.append(URLEncoder.encode(context.getPath()));
-
-		IPath workPath = new Path(sb.toString());
-		if (!workPath.isAbsolute()) {
-			if (basePath == null)
-				basePath = new Path("");
-			workPath = basePath.append(workPath);
-		}
-		return workPath;
-	}
-	
-	/**
-	 * Gets the work directory associated with the server. 
-	 * If the work directory obtained is relative,
-	 * it is appended to the specified base path.
-	 * 
-	 * @param basePath Path to the base directory for the server.
-	 * @return Returns the path to the work directory for the server.
-	 */
-	public IPath getServerWorkDirectory(IPath basePath) {
-		status = Status.OK_STATUS;
-		if (contextManager == null && getContextManager() == null)
-			return null;	// Note: Can't currently occur
-
-		String workDir = contextManager.getWorkDir();
-		if (workDir == null)
-			workDir = "work";
-		IPath workPath = new Path(workDir);
-		if (!workPath.isAbsolute()) {
-			if (basePath == null)
-				basePath = new Path("");
-			workPath = basePath.append(workPath);
-		}
-		return workPath;
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Engine.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Engine.java
index e76b880..166ce0b 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Engine.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/Engine.java
@@ -39,14 +39,6 @@
 		return (Host) findElement("Host");
 	}
 	
-	public Host getHost(int index) {
-		return (Host) findElement("Host", index);
-	}
-	
-	public int getHostCount() {
-		return sizeOfElement("Host");
-	}
-	
 	public String getName() {
 		return getAttributeValue("name");
 	}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/ServerInstance.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/ServerInstance.java
deleted file mode 100644
index efe9a27..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/server40/ServerInstance.java
+++ /dev/null
@@ -1,497 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 SAS Institute, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Larry Isaacs - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.server.tomcat.core.internal.xml.server40;
-
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.server.tomcat.core.internal.Messages;
-import org.eclipse.jst.server.tomcat.core.internal.TomcatPlugin;
-import org.eclipse.osgi.util.NLS;
-
-/**
- * This class represents an instance of a Tomcat 4.0, or later, server as
- * defined by a specific Service, Engine, and Host defined in a server.xml
- * configuration file.
- */
-public class ServerInstance {
-	protected static final String DEFAULT_SERVICE = "Catalina";
-	protected static final String DEFAULT_SERVICE2 = "Tomcat-Standalone";
-	protected static final String DEFAULT_HOST = "localhost";
-
-	protected Server server;
-	protected Service service;
-	protected Engine engine;
-	protected Host host;
-
-	protected String serviceName;
-	protected String engineName;
-	protected String hostName;
-	
-	protected String hostWorkDir;
-
-	protected IStatus status = Status.OK_STATUS;
-
-	/**
-	 * Constructs a ServerInstance using the specified Server configuration.
-	 * The ServerInstance provides access to a selected Service, Engine, and Host
-	 * as determined by the supplied service and host name or their defaults.
-	 * 
-	 * @param server Server configuration on which to base this instance.
-	 * @param serviceName Name of the service the instance should use.  Defaults
-	 *  to &quot;Catalina&quot; if <b>null</b> or any empty string is specified.
-	 * @param hostName Name of the host the instance should use. Defaults to
-	 *  the defaultHost setting on the Engine element found under the service.
-	 *  If the defaultHost is not set, defaults to &quot;localhost&quot;.
-	 */
-	public ServerInstance(Server server, String serviceName, String hostName) {
-		if (server == null)
-			throw new IllegalArgumentException("Server argument may not be null.");
-		this.server = server;
-		this.serviceName = serviceName;
-		this.hostName = hostName;
-	}
-	
-	/**
-	 * This method is used to get the problem status following
-	 * a method call that returned <b>null</b> due to an error.
-	 * @return Status of last method call.
-	 */
-	public IStatus getStatus() {
-		return status;
-	}
-
-	/**
-	 * Gets the array of Listeners found in the Server configuration
-	 * of this ServerInstance.
-	 * 
-	 * @return Array of Listeners found in the Server configuration. 
-	 */
-	public Listener [] getListeners() {
-		status = Status.OK_STATUS;
-		int size = server.getListenerCount();
-		Listener [] listeners = new Listener [size];
-		for (int i = 0; i < size; i++) {
-			listeners[i] = server.getListener(i);
-		}
-		return listeners;
-	}
-
-	/**
-	 * Gets the selected Service in the server configuration of
-	 * this ServerInstance. The method will return <b>null</b> if the
-	 * server configuration does not contain a Service with the name
-	 * selected in this ServerInstance. If no name is selected, then
-	 * a service is chosen as follows.  If there is only one Service,
-	 * it is returned.  If there are multiple Services, the first one
-	 * with the name &quot;Catalina&quot; or &quot;Tomcat-Standalone&quot;
-	 * is returned.  If none is found with either name, the first
-	 * Service is returned.
-	 * 
-	 * @return Returns the selected Service for this ServerInstance. Returns <b>null</b>
-	 * if the server configuration does not contain a Service with the selected name
-	 * or does not contain a Service.
-	 */
-	public Service getService() {
-		status = Status.OK_STATUS;
-		if (service != null)
-			return service;
-		
-		int serviceCount = server.getServiceCount();
-		// If service name is specified, require that name
-		if (serviceName != null) {
-			for (int i = 0; i < serviceCount; i++) {
-				Service svc = server.getService(i);
-				if (serviceName.equalsIgnoreCase(svc.getName())) {
-					service = svc;
-					return service;
-				}
-			}
-			status = new Status(IStatus.ERROR,TomcatPlugin.PLUGIN_ID,
-					NLS.bind(Messages.errorXMLServiceNotFound, serviceName));
-			return null;
-		}
-		// If there is only one service, return that one
-		if (serviceCount == 1) {
-			service = server.getService(0);
-			serviceName = service.getName();
-			return service;
-		}
-		// If there are multiple services, try to find a default name
-		if (serviceCount > 1) {
-			for (int i = 0; i < serviceCount; i++) {
-				Service svc = server.getService(i);
-				String svcName = svc.getName();
-				if (DEFAULT_SERVICE.equalsIgnoreCase(svc.getName())) {
-					service = svc;
-					serviceName = svcName;
-					return service;
-				}
-				if (DEFAULT_SERVICE2.equalsIgnoreCase(svc.getName())) {
-					service = svc;
-					serviceName = svcName;
-					return service;
-				}
-			}
-			// If not found, use the first service
-			service = server.getService(0);
-			serviceName = service.getName();
-			return service;
-		}
-		status = new Status(IStatus.ERROR,TomcatPlugin.PLUGIN_ID,
-				Messages.errorXMLNoService);
-		return null;
-	}
-
-	/**
-	 * Gets the connector at the specified index. If a Connector
-	 * does not exist at that index a new Connector is appended
-	 * and returned.  This method call will return <b>null</b>
-	 * if the selected Service does not exist in the server
-	 * configuration.
-	 * 
-	 * @param index Index of the Connector to return.
-	 * @return Returns the Connecter at the specified index or
-	 * a new Connector if one at that index doesn't exist.
-	 * Returns <b>null</b> if the selected Service is not found.
-	 */
-	public Connector getConnector(int index) {
-		status = Status.OK_STATUS;
-		if (service == null && getService() == null)
-			return null;
-		
-		return service.getConnector(index);
-	}
-
-	/**
-	 * Gets the Connectors found in the selected Service in the
-	 * server configuration.
-	 *    
-	 * @return Array of Connectors found in the selected Service in the
-	 * server configuration.  Returns <b>null</b> if the selected
-	 * Service can not be found.
-	 */
-	public Connector [] getConnectors() {
-		status = Status.OK_STATUS;
-		if (service == null && getService() == null)
-			return null;
-		
-		int size = service.getConnectorCount();
-		Connector [] connectors = new Connector [size];
-		for (int i = 0; i < size; i++) {
-			connectors[i] = service.getConnector(i);
-		}
-		return connectors;
-	}
-	
-	/**
-	 * Gets the selected Engine in the server configuration of
-	 * this ServerInstance. The Engine is selected by being the
-	 * one child Engine of the selected Service. The method will
-	 * return <b>null</b> if the selected Service is not found
-	 * in the server configuration or the selected Service
-	 * does not contain a child Engine.
-	 * 
-	 * @return Returns the one Engine that is a child of the
-	 * selected Service. Returns <b>null</b> if the selected
-	 * Service is not found or it contains no child Engine.
-	 */
-	public Engine getEngine() {
-		status = Status.OK_STATUS;
-		if (engine != null)
-			return engine;
-
-		if (service == null && getService() == null)
-			return null;
-		
-		engine = service.getEngine();
-		if (engine == null || engine.getName() == null) {
-			status = new Status(IStatus.ERROR,TomcatPlugin.PLUGIN_ID,
-					NLS.bind(Messages.errorXMLEngineNotFound, serviceName));
-			return null;
-		}
-		engineName = engine.getName();
-		if (hostName == null || hostName.length() == 0) {
-			hostName = engine.getDefaultHost();
-			if (hostName == null)
-				hostName = DEFAULT_HOST;
-		}
-		return engine;
-	}
-	
-	/**
-	 * Gets the selected Host in the server configuration of
-	 * this ServerInstance. This method will return <b>null</b>
-	 * if selected Engine is not found or the selected Engine
-	 * does not contain a Host with the name specified in this
-	 * ServerInstance.
-	 * 
-	 * @return Returns the selected Host for this ServerInstance.
-	 * Returns <b>null</b> if the selected Engine is not found
-	 * or it does not contain a Host with the expected name.
-	 */
-	public Host getHost() {
-		status = Status.OK_STATUS;
-		if (host != null)
-			return host;
-		
-		if (engine == null && getEngine() == null)
-			return null;
-		
-		int size = engine.getHostCount();
-		for (int i = 0; i < size; i++) {
-			Host h = engine.getHost(i);
-			if (hostName.equals(h.getName())) {
-				host = h;
-				return host;
-			}
-		}
-		status = new Status(IStatus.ERROR,TomcatPlugin.PLUGIN_ID,
-				NLS.bind(Messages.errorXMLHostNotFound, new String [] { hostName, engineName, serviceName }));
-		return null;
-	}
-	
-	/**
-	 * Gets the Context that has the specified path within the selected
-	 * Host. This method will return <b>null</b> if the selected Host or
-	 * Context with the required path is not found in the server configuration.
-	 * 
-	 * @param contextPath Path of the Context to be returned.  A leading '/' is optional.
-	 * @return Returns the Context whose <b>path</b> attribute matches
-	 * the specified contextPath. Returns <b>null</b> if the selected
-	 * Host or a Context with the required path is not found.
-	 */
-	public Context getContext(String contextPath) {
-		status = Status.OK_STATUS;
-		if (host == null && getHost() == null)
-			return null;
-		
-		if (contextPath != null && contextPath.length() > 0 && !contextPath.startsWith("/"))
-			contextPath = "/" + contextPath;
-		
-		int size = host.getContextCount();
-		for (int i = 0; i < size; i++) {
-			Context ctx = host.getContext(i);
-			if (ctx.getPath().equals(contextPath)) {
-				return ctx;
-			}
-		}
-		status = new Status(IStatus.ERROR,TomcatPlugin.PLUGIN_ID,
-				NLS.bind(Messages.errorXMLContextNotFoundPath,
-						new String [] { contextPath, serviceName, engineName, hostName }));
-		return null;
-	}
-	
-	/**
-	 * Gets the Context at the specified index within the selected
-	 * Host. If a Connector does not exist at the specified index,
-	 * a new Context will be appended and returned. This method will
-	 * return <b>null</b> if the selected Host can not be found in the
-	 * server configuration.
-	 * 
-	 * @param index Index of the Context to return.
-	 * @return Returns the Context at the specified index, or
-	 * a new appended Context if the index is beyond any existing
-	 * Contexts. Returns <b>null</b> if the selected Host can not
-	 * be found.
-	 */
-	public Context getContext(int index) {
-		status = Status.OK_STATUS;
-		if (host == null && getHost() == null)
-			return null;
-		
-		return host.getContext(index);
-	}
-	
-	/**
-	 * Gets the Contexts contained in the selected Host.  This
-	 * method will return <b>null</b> if the selected Host can
-	 * not be found in the server configuration.
-	 * 
-	 * @return Array of Contexts contained in the selected Host.
-	 * Returns <b>null</b> if the selected Host is not found.
-	 */
-	public Context [] getContexts() {
-		status = Status.OK_STATUS;
-		if (host == null && getHost() == null)
-			return null;
-		
-		int size = host.getContextCount();
-		Context [] contexts = new Context [size];
-		for (int i = 0; i < size; i++) {
-			contexts[i] = host.getContext(i);
-		}
-		return contexts;
-	}
-	
-	/**
-	 * Creates a new Context and inserts it before the specifed index
-	 * or appends it if the index is beyond any existing Contexts in the
-	 * selected Host. This method will return <b>null</b> if the selected
-	 * Host is not found in the server configuration.
-	 * 
-	 * @param index Index prior to which to insert the new Contexts.
-	 * @return Returns the created Context. Returns <b>null</b> if the
-	 * selected Host is not found.
-	 */
-	public Context createContext(int index) {
-		status = Status.OK_STATUS;
-		if (host == null && getHost() == null)
-			return null;
-
-		return (Context)host.createElement(index, "Context");
-	}
-	
-	/**
-	 * Removes the Context with the specified path, if it can be found.
-	 * 
-	 * @param contextPath Path of the Context to be removed.  A leading '/' is optional.
-	 * @return Returns <b>true</b> if the Context was removed.  Returns <b>false</b>
-	 * if the Context or the selected Host is not found.
-	 */
-	public boolean removeContext(String contextPath) {
-		status = Status.OK_STATUS;
-		if (host == null && getHost() == null)
-			return false;
-		
-		if (contextPath != null && contextPath.length() > 0 && !contextPath.startsWith("/"))
-			contextPath = "/" + contextPath;
-		
-		int size = host.getContextCount();
-		for (int i = 0; i < size; i++) {
-			Context ctx = host.getContext(i);
-			if (ctx.getPath().equals(contextPath)) {
-				host.removeElement("Context", i);
-				return true;
-			}
-		}
-		status = new Status(IStatus.ERROR,TomcatPlugin.PLUGIN_ID,
-				NLS.bind(Messages.errorXMLContextNotFoundPath,
-						new String [] { contextPath, serviceName, engineName, hostName }));
-		return false;
-	}
-	
-	/**
-	 * @param index Index of the Context to remove.
-	 * @return Returns <b>true</b> if a Context is removed at the specified
-	 * index.  Returns <b>false</b> no Context exists at that index or
-	 * the selected Host is not found.
-	 */
-	public boolean removeContext(int index) {
-		status = Status.OK_STATUS;
-		if (host == null && getHost() == null)
-			return false;
-
-		return host.removeElement("Context", index);
-	}
-	
-	/**
-	 * Gets the directory where the context XML files are stored
-	 * for the selected Service, Engine, and Host found in the
-	 * server configuration. This method will return <b>null</b>
-	 * if the selected Host is not found in the server configuration.
-	 * 
-	 * @param confDir Path to the &quot;conf&quot; directory for
-	 * the server.
-	 * @return Returns the path to the context XML directory.
-	 * Returns <b>null</b> if the selected Host can not be found.
-	 */
-	public IPath getContextXmlDirectory(IPath confDir) {
-		status = Status.OK_STATUS;
-		if (host == null && getHost() == null)
-			return null;
-		
-		return confDir.append(engineName).append(hostName);
-	}
-	
-	/**
-	 * Gets the work directory associated with the specified 
-	 * Context. If the work directory obtained is relative,
-	 * it is appended to the specified base path. This method
-	 * will return <b>null</b> if the selected Host is not
-	 * found in the server configuration.  This method does
-	 * not verify if the specified Context currently exists
-	 * within the selected Host. 
-	 * 
-	 * @param basePath Path to the base directory for the server.
-	 * @param context Context whose work directory to return.
-	 * @return Returns the path to the work directory for the specifed
-	 * Context. Returns <b>null</b> if the selected Host can not be
-	 * found.
-	 */
-	public IPath getContextWorkDirectory(IPath basePath, Context context) {
-		if (context == null)
-			throw new IllegalArgumentException("Context argument may not be null.");
-		status = Status.OK_STATUS;
-		if (host == null && getHost() == null)
-			return null;
-
-		// If the work directory is specified on the context, use that one
-		String workDir = context.getAttributeValue("workDir");
-		if (workDir == null) {
-			// If context doesn't specify the work directory, check the host
-			if (hostWorkDir == null) {
-				hostWorkDir = host.getAttributeValue("workDir");
-				if (hostWorkDir == null || hostWorkDir.length() == 0)
-					// If host doesn't specify the work directory, build the default
-					hostWorkDir = "work/" + engineName + "/" + hostName;
-			}
-			String ctxName = context.getPath();
-			if (ctxName.startsWith("/"))
-				ctxName = ctxName.substring(1);
-			ctxName = ctxName.replace('/', '_');
-			ctxName = ctxName.replace('\\', '_');
-			if (ctxName.length() == 0)
-				ctxName = "_";
-			workDir = hostWorkDir + "/" + ctxName;
-		}
-		IPath workPath = new Path(workDir);
-		if (!workPath.isAbsolute()) {
-			if (basePath == null)
-				basePath = new Path("");
-			workPath = basePath.append(workPath);
-		}
-		return workPath;
-	}
-
-	/**
-	 * Gets the work directory associated with the selected 
-	 * Host. If the work directory obtained is relative,
-	 * it is appended to the specified base path. This method
-	 * will return <b>null</b> if the selected Host is not
-	 * found in the server configuration.
-	 * 
-	 * @param basePath Path to the base directory for the server.
-	 * @return Returns the path to the work directory for the selected
-	 * Host. Returns <b>null</b> if the selected Host can not be
-	 * found.
-	 */
-	public IPath getHostWorkDirectory(IPath basePath) {
-		status = Status.OK_STATUS;
-		if (host == null && getHost() == null)
-			return null;
-		// If context doesn't specify the work directory, check the host
-		if (hostWorkDir == null) {
-			hostWorkDir = host.getAttributeValue("workDir");
-			if (hostWorkDir == null || hostWorkDir.length() == 0)
-				// If host doesn't specify the work directory, build the default
-				hostWorkDir = "work/" + engineName + "/" + hostName;
-		}
-		IPath workPath = new Path(hostWorkDir);
-		if (!workPath.isAbsolute()) {
-			if (basePath == null)
-				basePath = new Path("");
-			workPath = basePath.append(workPath);
-		}
-		return workPath;
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/verifyInstall.properties b/plugins/org.eclipse.jst.server.tomcat.core/verifyInstall.properties
index 0ab73c4..a70106a 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/verifyInstall.properties
+++ b/plugins/org.eclipse.jst.server.tomcat.core/verifyInstall.properties
@@ -11,9 +11,8 @@
 
 # this file must not be translated
 
-verify32install=lib/jasper.jar,lib/servlet.jar|[servletapi3].jar,bin,conf,webapps
+verify32install=lib/jasper.jar,lib/servlet.jar,bin,conf,webapps
 verify40install=lib/naming-factory.jar,bin/bootstrap.jar,conf,webapps
-verify41install=common/lib/naming-factory.jar,common/lib/servlet.jar|[servletapi4].jar,bin/bootstrap.jar,conf,webapps
-verify50install=common/lib/servlet-api.jar|[servletapi5].jar,common/lib/naming-common.jar,bin/bootstrap.jar,conf,webapps
+verify41install=common/lib/naming-factory.jar,common/lib/servlet.jar,bin/bootstrap.jar,conf,webapps
+verify50install=common/lib/servlet-api.jar,common/lib/naming-common.jar,bin/bootstrap.jar,conf,webapps
 verify55install=common/i18n,bin/bootstrap.jar,conf,webapps
-verify60install=lib/jasper-el.jar,lib/servlet-api.jar|[servletapi6].jar,bin/bootstrap.jar,conf,webapps
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/.classpath b/plugins/org.eclipse.jst.server.tomcat.ui/.classpath
index 16beb84..0dfed31 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/.classpath
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="tomcatui/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.core.resources.prefs
index c8be432..3cc81c3 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.core.resources.prefs
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,3 @@
-#Fri Nov 10 17:11:35 HST 2006
+#Sun Apr 16 23:22:14 EDT 2006
 eclipse.preferences.version=1
 encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 2a1f082..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,74 +0,0 @@
-#Tue Jan 16 17:01:56 EST 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=error
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=error
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.incompatibleJDKLevel=warning
-org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 584bdff..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Nov 10 18:06:11 HST 2006
-eclipse.preferences.version=1
-internal.default.compliance=user
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.pde.prefs
index 0e06e96..556ca8a 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.pde.prefs
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/.settings/org.eclipse.pde.prefs
@@ -1,11 +1,9 @@
-#Mon Jan 15 21:56:48 EST 2007
-compilers.incompatible-environment=0
-compilers.p.build=0
+#Sun Apr 16 23:22:00 EDT 2006
+compilers.p.build=1
 compilers.p.deprecated=1
-compilers.p.missing-packages=2
 compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=0
+compilers.p.not-externalized-att=1
+compilers.p.unknown-attribute=1
 compilers.p.unknown-class=0
 compilers.p.unknown-element=1
 compilers.p.unknown-resource=0
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF
index b25d0fe..69bb9f3 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.server.tomcat.ui; singleton:=true
-Bundle-Version: 1.1.000.qualifier
+Bundle-Version: 1.0.103.qualifier
 Bundle-Activator: org.eclipse.jst.server.tomcat.ui.internal.TomcatUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -17,11 +17,10 @@
  org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.debug.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.server.core;bundle-version="[1.0.204,1.1.0)",
- org.eclipse.wst.server.ui;bundle-version="[1.0.204,1.1.0)",
+ org.eclipse.wst.server.core;bundle-version="[1.0.103,1.1.0)",
+ org.eclipse.wst.server.ui;bundle-version="[1.0.103,1.1.0)",
  org.eclipse.jst.server.core;bundle-version="[1.0.103,1.1.0)",
  org.eclipse.jst.server.ui;bundle-version="[1.0.103,1.1.0)",
- org.eclipse.jst.server.tomcat.core;bundle-version="[1.1.0,1.2.0)",
+ org.eclipse.jst.server.tomcat.core;bundle-version="[1.0.103,1.1.0)",
  org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,1.2.0)"
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/icons/wizban/tomcat_wiz.gif b/plugins/org.eclipse.jst.server.tomcat.ui/icons/wizban/tomcat_wiz.gif
new file mode 100644
index 0000000..30de91f
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/icons/wizban/tomcat_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/icons/wizban/tomcat_wiz.png b/plugins/org.eclipse.jst.server.tomcat.ui/icons/wizban/tomcat_wiz.png
deleted file mode 100644
index 577567c..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/icons/wizban/tomcat_wiz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/plugin.properties b/plugins/org.eclipse.jst.server.tomcat.ui/plugin.properties
index c57fb31..3718472 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/plugin.properties
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/plugin.properties
@@ -12,6 +12,3 @@
 providerName=Eclipse.org
 
 configurationEditorWebModulesPage=Modules
-
-cleanTomcatWorkDir=Clean Tomcat Work Directory...
-cleanTomcatModuleWorkDir=Clean Module Work Directory...
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/plugin.xml b/plugins/org.eclipse.jst.server.tomcat.ui/plugin.xml
index 1679129..a4b40a7 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/plugin.xml
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/plugin.xml
@@ -23,10 +23,6 @@
          id="org.eclipse.jst.server.tomcat.55"
          icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.runtime.55"/>
-      <image
-         id="org.eclipse.jst.server.tomcat.60"
-         icon="icons/obj16/tomcat.gif"
-         typeIds="org.eclipse.jst.server.tomcat.runtime.60"/>
 
       <image
          id="org.eclipse.jst.server.tomcat.32"
@@ -48,10 +44,6 @@
          id="org.eclipse.jst.server.tomcat.55"
          icon="icons/obj16/tomcat.gif"
          typeIds="org.eclipse.jst.server.tomcat.55"/>
-      <image
-         id="org.eclipse.jst.server.tomcat.60"
-         icon="icons/obj16/tomcat.gif"
-         typeIds="org.eclipse.jst.server.tomcat.60"/>
    </extension>
    
    <extension point="org.eclipse.core.expressions.propertyTesters">
@@ -127,10 +119,6 @@
          id="org.eclipse.jst.server.tomcat.runtime.55"
          typeIds="org.eclipse.jst.server.tomcat.runtime.55"
          class="org.eclipse.jst.server.tomcat.ui.internal.TomcatRuntimeWizardFragment"/>
-      <fragment
-         id="org.eclipse.jst.server.tomcat.runtime.60"
-         typeIds="org.eclipse.jst.server.tomcat.runtime.60"
-         class="org.eclipse.jst.server.tomcat.ui.internal.TomcatRuntimeWizardFragment"/>
    </extension>
 
   <extension point="org.eclipse.debug.ui.launchConfigurationTypeImages">
@@ -161,44 +149,4 @@
       <type class="org.eclipse.wst.common.project.facet.ui.IRuntimeComponentLabelProvider"/>
     </adapter>
   </extension>
-
-  <extension point="org.eclipse.ui.popupMenus">
-    <objectContribution
-      adaptable="true"
-      id="org.eclipse.jst.server.tomcat.ui.serveractions"
-      objectClass="org.eclipse.wst.server.core.IServer">
-      <enablement>
-        <test forcePluginActivation="true"
-          property="org.eclipse.wst.server.ui.serverType"
-          value="org.eclipse.jst.server.tomcat.*" />
-      </enablement>
-      <action 
-        class="org.eclipse.jst.server.tomcat.ui.internal.actions.CleanWorkDirAction"
-        enablesFor="1"
-        id="org.eclipse.jst.server.tomcat.ui.clearworkdir"
-        label="%cleanTomcatWorkDir">
-      </action>
-    </objectContribution>
-    <objectContribution
-      adaptable="true"
-      id="org.eclipse.jst.server.tomcat.ui.serveractions"
-      objectClass="org.eclipse.wst.server.ui.internal.view.servers.ModuleServer">
-      <enablement>
-        <and>
-          <test forcePluginActivation="true"
-            property="org.eclipse.wst.server.ui.moduleType"
-            value="jst.web"/>
-          <test forcePluginActivation="true"
-            property="org.eclipse.wst.server.ui.serverType"
-            value="org.eclipse.jst.server.tomcat.*"/>
-        </and>
-      </enablement>
-      <action
-        class="org.eclipse.jst.server.tomcat.ui.internal.actions.CleanWorkDirAction"
-        enablesFor="1"
-        id="org.eclipse.jst.server.tomcat.ui.clearworkdir"
-        label="%cleanTomcatModuleWorkDir">
-      </action>
-    </objectContribution>
-  </extension>
 </plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/CleanWorkDirDialog.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/CleanWorkDirDialog.java
deleted file mode 100644
index 1febe9c..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/CleanWorkDirDialog.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 SAS Institute, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Larry Isaacs - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.server.tomcat.ui.internal;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.IJobChangeEvent;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jst.server.core.IWebModule;
-import org.eclipse.jst.server.tomcat.core.internal.ITomcatWebModule;
-import org.eclipse.jst.server.tomcat.core.internal.TomcatServerBehaviour;
-import org.eclipse.jst.server.tomcat.core.internal.WebModule;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.ServerUtil;
-import org.eclipse.wst.server.core.IServer.IOperationListener;
-
-/**
- * Dialog to confirm deletion of the work directory for a module on a
- * server, or the work directory for the entire server.  Handling
- * includes stopping and restarting the server if it is running at
- * the time of the deletion. 
- *
- */
-public class CleanWorkDirDialog extends Dialog {
-	/**
-	 * Error code when error occurs prior to deletion
-	 */
-	public static final int ERROR_PREDELETE = 0;
-	
-	/**
-	 * Error code when error occurs during the deletion
-	 */
-	public static final int ERROR_DURINGDELETE = 1;
-
-	/**
-	 * Error code when error occurs after deletion
-	 */
-	public static final int ERROR_POSTDELETE = 2;
-	
-	protected IServer server;
-	protected IModule module;
-	protected int state;
-	protected String mode;
-	protected IStatus completionStatus = Status.OK_STATUS;
-	
-	/**
-	 * Creates a dialog instance confirm deletion of the work directory for a
-	 * module on a server, or the work directory for the entire server.
-	 * 
-	 * @param parentShell the parent shell, or <code>null</code> to create a
-	 *  top-level shell
-	 * @param server server on which to delete the work directory
-	 * @param module module whose work directory is to be deleted, or <code>null</code> if
-	 *  if these server's entire work directory is to be deleted.
-	 */
-	public CleanWorkDirDialog(Shell parentShell, IServer server, IModule module) {
-		super(parentShell);
-		
-		if (server == null)
-			throw new IllegalArgumentException();
-
-		this.server = server;
-		this.module = module;
-		
-	}
-	
-	protected void configureShell(Shell newShell) {
-		super.configureShell(newShell);
-		newShell.setText(Messages.confirmCleanWorkDirTitle);
-	}
-
-	protected Control createDialogArea(Composite parent) {
-		if (state < 0 || state == IServer.STATE_UNKNOWN) 
-			captureServerState();
-
-		// create a composite with standard margins and spacing
-		Composite composite = (Composite)super.createDialogArea(parent);
-		// Since there are only label widgets on this page, set the help on the parent
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ContextIds.SERVER_CLEAN_WORK_DIR);
-
-		Label label = new Label(composite, SWT.WRAP);
-		if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING || state == IServer.STATE_UNKNOWN) {
-			label.setText(NLS.bind(Messages.cleanServerStateChanging, server.getName()));
-		}
-		else {
-			if (module != null)
-				label.setText(NLS.bind(Messages.cleanModuleWorkDir, module.getName(), server.getName()));
-			else
-				label.setText(NLS.bind(Messages.cleanServerWorkDir, server.getName()));
-			GridData data = new GridData();
-			data.widthHint = 300;
-			label.setLayoutData(data);
-			
-			if (state == IServer.STATE_STARTED) {
-				label = new Label(composite, SWT.WRAP);
-				label.setText(Messages.cleanServerRunning);
-				data = new GridData();
-				data.widthHint = 300;
-				label.setLayoutData(data);
-			}
-		}
-		
-		applyDialogFont(composite);
-		return composite;
-	}
-	
-	protected void createButtonsForButtonBar(Composite parent) {
-		super.createButtonsForButtonBar(parent);
-
-		if (state < 0 || state == IServer.STATE_UNKNOWN) 
-			captureServerState();
-
-		// If server is transitioning, only allow Cancel
-		if (state == IServer.STATE_STARTING || state == IServer.STATE_STOPPING) {
-			Button button = getButton(IDialogConstants.OK_ID);
-			if (button != null)
-				button.setEnabled(false);
-		}
-	}
-
-	protected void okPressed() {
-		// Create job to perform the deletion
-		DeleteWorkDirJob job = new DeleteWorkDirJob(Messages.cleanServerTask);
-		job.setRule(ServerUtil.getServerSchedulingRule(server));
-		
-		job.addJobChangeListener(new JobChangeAdapter() {
-			public void done(IJobChangeEvent event) {
-				IStatus status = event.getResult();
-				if (!status.isOK()) {
-					String title = module != null ? Messages.errorCleanModuleTitle : Messages.errorCleanServerTitle;
-					String message = "Message unset";
-					switch (status.getCode()) {
-					case CleanWorkDirDialog.ERROR_PREDELETE:
-						message = module != null ?
-								NLS.bind(Messages.errorCouldNotCleanModule, module.getName(), server.getName()) :
-									NLS.bind(Messages.errorCouldNotCleanServer, server.getName());
-						break;
-					case CleanWorkDirDialog.ERROR_DURINGDELETE:
-						message = module != null ?
-								NLS.bind(Messages.errorCleanFailedModule, module.getName(), server.getName()) :
-									NLS.bind(Messages.errorCleanFailedServer, server.getName());
-						break;
-					default:
-						message = module != null ?
-								NLS.bind(Messages.errorCleanNoRestartModule, module.getName()) :
-									NLS.bind(Messages.errorCleanNoRestartServer, server.getName());
-						break;
-					}
-					TomcatUIPlugin.openError(title, message, status);
-				}
-			}
-		});
-		
-		job.schedule();
-		
-		super.okPressed();
-	}
-	
-	class DeleteWorkDirJob extends Job {
-		/**
-		 * @param name name for job
-		 */
-		public DeleteWorkDirJob(String name) {
-			super(name);
-		}
-
-		protected IStatus run(IProgressMonitor monitor) {
-			// If state has changed since dialog was open, abort
-			if (server.getServerState() != state) {
-				return newErrorStatus(ERROR_PREDELETE, Messages.errorCouldNotCleanStateChange, null);
-			}
-
-			IOperationListener listener = new IOperationListener() {
-				public void done(IStatus result) {
-					completionStatus = result;
-				}
-			};
-			boolean restart = false;
-			IStatus status = Status.OK_STATUS;
-			// If server isn't stopped, try to stop, clean, and restart
-			if (state != IServer.STATE_STOPPED) {
-				status = server.canStop();
-				if (!status.isOK()) {
-					return wrapErrorStatus(status, ERROR_PREDELETE, Messages.errorCouldNotCleanCantStop);
-				}
-
-				server.stop(false, listener);
-
-				if (!completionStatus.isOK()) {
-					return wrapErrorStatus(completionStatus, ERROR_PREDELETE, Messages.errorCouldNotCleanStopFailed);
-				}
-				if (server.getServerState() != IServer.STATE_STOPPED) {
-					return newErrorStatus(ERROR_PREDELETE, Messages.errorCouldNotCleanStopFailed, null);
-				}
-				restart = true;
-			}
-				
-			// Delete the work directory
-			TomcatServerBehaviour tsb = (TomcatServerBehaviour)server.loadAdapter(
-					TomcatServerBehaviour.class, monitor);
-			try {
-				if (module != null) {
-					IWebModule webModule = (IWebModule)module.loadAdapter(IWebModule.class, null);
-					if (webModule != null) {
-						ITomcatWebModule tcWebModule = new WebModule(webModule.getContextRoot(), "", "", true);
-						status = tsb.cleanContextWorkDir(tcWebModule, null);
-					}
-					else {
-						return newErrorStatus(ERROR_DURINGDELETE, 
-								restart ? Messages.errorCantIdentifyWebAppWasRunning : Messages.errorCantIdentifyWebApp, null);
-					}
-				}
-				else {
-					status = tsb.cleanServerWorkDir(null);
-				}
-			} catch (CoreException ce) {
-				status = ce.getStatus();
-			}
-			if (!status.isOK()) {
-				return wrapErrorStatus(status, ERROR_DURINGDELETE,
-						restart ? Messages.errorErrorDuringCleanWasRunning : Messages.errorErrorDuringClean);
-			}
-				
-			if (restart) {
-				status = server.canStart(mode);
-				if (!status.isOK()) {
-					return wrapErrorStatus(status, ERROR_POSTDELETE, Messages.errorCleanCantRestart);
-				}
-				server.start(mode, listener);
-				if (!completionStatus.isOK()) {
-					return wrapErrorStatus(completionStatus, ERROR_POSTDELETE, Messages.errorCleanRestartFailed);
-				}
-			}
-			return status;
-		}
-	}
-	
-	private void captureServerState() {
-		state = server.getServerState();
-		if (state != IServer.STATE_STOPPED) {
-			mode = server.getMode();
-		}
-	}
-
-	protected IStatus newErrorStatus(int errorCode, String message, Throwable throwable) {
-		return new Status(IStatus.ERROR, TomcatUIPlugin.PLUGIN_ID, errorCode,
-				message, throwable);
-	}
-	
-	protected IStatus wrapErrorStatus(IStatus status, int errorCode, String message) {
-		MultiStatus ms = new MultiStatus(TomcatUIPlugin.PLUGIN_ID, errorCode, message, null);
-		ms.add(status);
-		return ms;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ContextIds.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ContextIds.java
index 28b8237..7957cc1 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ContextIds.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/ContextIds.java
@@ -45,6 +45,4 @@
 	public static final String CONFIGURATION_EDITOR_PORTS_LIST = TomcatUIPlugin.PLUGIN_ID + ".tecp0002";
 		
 	public static final String RUNTIME_COMPOSITE = TomcatUIPlugin.PLUGIN_ID + ".twnr0000";
-
-	public static final String SERVER_CLEAN_WORK_DIR = TomcatUIPlugin.PLUGIN_ID + ".tvcp0000";
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.java
index 4271bec..e48909c 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.java
@@ -51,17 +51,11 @@
 	public static String configurationEditorMimeMapppingDialogTitleAdd;
 	public static String configurationEditorMimeMapppingDialogMimeType;
 	public static String configurationEditorMimeMapppingDialogMimeExtension;
-	public static String configurationEditorBrowseDeploy;
-	public static String configurationEditorBrowseDeployMessage;
 	public static String serverEditorGeneralSection;
 	public static String serverEditorGeneralDescription;
 	public static String serverEditorTestEnvironment;
 	public static String serverEditorSecure;
 	public static String serverEditorDebugMode;
-	public static String serverEditorDeployDir;
-	public static String serverEditorBrowse;
-	public static String serverEditorSpecialFieldsLabel;
-	public static String errorDeployDirNotSpecified;
 	public static String configurationEditorWebModuleDialogTitleEdit;
 	public static String configurationEditorWebModuleDialogTitleAdd;
 	public static String configurationEditorWebModuleDialogProjects;
@@ -69,30 +63,6 @@
 	public static String configurationEditorWebModuleDialogSelectDirectory;
 	public static String configurationEditorWebModuleDialogPath;
 	public static String configurationEditorWebModuleDialogReloadEnabled;
-	public static String errorDefaultDialogTitle;
-	public static String confirmCleanWorkDirTitle;
-	public static String cleanServerStateChanging;
-	public static String cleanModuleWorkDir;
-	public static String cleanServerWorkDir;
-	public static String cleanServerRunning;
-	public static String cleanServerTask;
-	public static String errorCleanModuleTitle;
-	public static String errorCleanServerTitle;
-	public static String errorCouldNotCleanModule;
-	public static String errorCouldNotCleanServer;
-	public static String errorCouldNotCleanStateChange;
-	public static String errorCouldNotCleanCantStop;
-	public static String errorCouldNotCleanStopFailed;
-	public static String errorCleanFailedModule;
-	public static String errorCleanFailedServer;
-	public static String errorCantIdentifyWebApp;
-	public static String errorCantIdentifyWebAppWasRunning;
-	public static String errorErrorDuringClean;
-	public static String errorErrorDuringCleanWasRunning;
-	public static String errorCleanNoRestartModule;
-	public static String errorCleanNoRestartServer;
-	public static String errorCleanCantRestart;
-	public static String errorCleanRestartFailed;
 
 	static {
 		NLS.initializeMessages(TomcatUIPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.properties b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.properties
index 65fe7b5..2541b79 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Messages.properties
@@ -69,10 +69,6 @@
 configurationEditorWebModuleDialogSelectDirectory=Select the Web module directory.
 errorMissingWebModule=The Web module at the following location cannot be found: {0}.
 
-# Browse for Deploy dialog
-configurationEditorBrowseDeploy=Browse
-configurationEditorBrowseDeployMessage=Select a deploy directory.
-
 # --- Server Editor ---
 serverEditorGeneralSection=Server
 serverEditorGeneralDescription=Enter settings for the server.
@@ -81,38 +77,3 @@
 serverEditorSecure=Enable security
 serverEditorDebugMode=Enable Tomcat debug mode (v4.x and above only)
 serverEditorTestEnvironment=Run modules directly from the workspace (do not modify the Tomcat installation)
-serverEditorDeployDir=Deploy directory:
-serverEditorSpecialFieldsLabel=The field above may be changed only when the server is synchronized with no modules added.
-errorDeployDirNotSpecified=A Deploy directory must be specified.
-
-# --- Clean Work Directory ---
-confirmCleanWorkDirTitle=Confirm Clean
-cleanServerStateChanging=The state of {0} is in transition or unknown.  Try again when the server has reached a stable state.
-cleanModuleWorkDir=Clean work directory for module {0} on {1}.
-cleanServerWorkDir=Clean work directories for all Web applications on {0}.
-cleanServerRunning=The server must be stopped to clean the work directory.  Clicking OK will include stopping and restaring the server.
-cleanServerTask=Cleaning server work directory...
-
-# --- Error Strings ---
-errorDefaultDialogTitle=Tomcat Server Error
-
-# --- Clean Work Directory Errors ---
-errorCleanModuleTitle=Clean Module Work Directory Error
-errorCleanServerTitle=Clean Server Work Directory Error
-errorCouldNotCleanModule=Could not clean {0} work directory on {1}.
-errorCouldNotCleanServer=Could not clean work directory on {0}.
-errorCouldNotCleanStateChange=Clean aborted because the server changed state after confirmation dialog was displayed.
-errorCouldNotCleanCantStop="Server can not be stopped at this time.  Try again when the server is stopped or can be stopped.
-errorCouldNotCleanStopFailed=Server failed to stop.  Try again when the server is stopped or can be stopped.
-
-errorCleanFailedModule=Clean failed for {0} work directory on {1}.
-errorCleanFailedServer=Clean failed for work directory on {0}.
-errorCantIdentifyWebApp=Selected module could not be associated with a Web application on the server.
-errorCantIdentifyWebAppWasRunning=Selected module could not be associated with a Web application on the server.  Server will not be restarted.
-errorErrorDuringClean=An error occurred while cleaning the work directory.
-errorErrorDuringCleanWasRunning=An error occurred while cleaning the work directory.  Server will not be restarted.
-
-errorCleanNoRestartModule=Module {0} was successfully cleaned, but server is unable to restart.
-errorCleanNoRestartServer=Server {0} was successfully cleaned, but is unable to restart.
-errorCleanCantRestart=Server is unable to restart at this time.
-errorCleanRestartFailed=Server restart was not successful or did not complete in the expected amount of time.
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeComposite.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeComposite.java
index 37b79c6..020a75a 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeComposite.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatRuntimeComposite.java
@@ -26,6 +26,7 @@
 import org.eclipse.jface.window.Window;
 import org.eclipse.jst.server.tomcat.core.internal.ITomcatRuntimeWorkingCopy;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -203,16 +204,15 @@
 					combo.setText(currentVM);
 					if (combo.getSelectionIndex() == -1)
 						combo.select(0);
-					validate();
 				}
 			}
 		});
 		
 		init();
 		validate();
-		
+
 		Dialog.applyDialogFont(this);
-		
+
 		name.forceFocus();
 	}
 
@@ -240,22 +240,22 @@
 	}
 
 	protected boolean showPreferencePage() {
-		String id = "org.eclipse.jdt.debug.ui.preferences.VMPreferencePage";
-		
-		// should be using the following API, but it only allows a single preference page instance.
-		// see bug 168211 for details
-		//PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[] { id }, null);
-		//return (dialog.open() == Window.OK);		
-		
 		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
-		IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode(id);
+		IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage");
 		PreferenceManager manager2 = new PreferenceManager();
 		manager2.addToRoot(node);
-		PreferenceDialog dialog = new PreferenceDialog(getShell(), manager2);
-		dialog.create();
-		return (dialog.open() == Window.OK);
+		final PreferenceDialog dialog = new PreferenceDialog(getShell(), manager2);
+		final boolean[] result = new boolean[] { false };
+		BusyIndicator.showWhile(getDisplay(), new Runnable() {
+			public void run() {
+				dialog.create();
+				if (dialog.open() == Window.OK)
+					result[0] = true;
+			}
+		});
+		return result[0];
 	}
-
+	
 	protected void init() {
 		if (name == null || runtime == null)
 			return;
@@ -264,7 +264,7 @@
 			name.setText(runtimeWC.getName());
 		else
 			name.setText("");
-		
+	
 		if (runtimeWC.getLocation() != null)
 			installDir.setText(runtimeWC.getLocation().toOSString());
 		else
@@ -293,7 +293,7 @@
 			wizard.setMessage("", IMessageProvider.ERROR);
 			return;
 		}
-		
+
 		IStatus status = runtimeWC.validate(null);
 		if (status == null || status.isOK())
 			wizard.setMessage(null, IMessageProvider.NONE);
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatUIPlugin.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatUIPlugin.java
index 7fcb557..eb8b6c4 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatUIPlugin.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/TomcatUIPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,12 +15,9 @@
 import java.util.Map;
 
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.ImageRegistry;
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 /**
  * The actual Tomcat plugin. It allows the rest of the classes
@@ -63,9 +60,9 @@
 
 	protected ImageRegistry createImageRegistry() {
 		ImageRegistry registry = new ImageRegistry();
-		
-		registerImage(registry, IMG_WIZ_TOMCAT, URL_WIZBAN + "tomcat_wiz.png");
-		
+	
+		registerImage(registry, IMG_WIZ_TOMCAT, URL_WIZBAN + "tomcat_wiz.gif");
+	
 		registerImage(registry, IMG_WEB_MODULE, URL_OBJ + "web_module.gif");
 		registerImage(registry, IMG_MIME_MAPPING, URL_OBJ + "mime_mapping.gif");
 		registerImage(registry, IMG_MIME_EXTENSION, URL_OBJ + "mime_extension.gif");
@@ -116,46 +113,6 @@
 	}
 
 	/**
-	 * Convenience method to get a Display. The method first checks, if
-	 * the thread calling this method has an associated display. If so, this
-	 * display is returned. Otherwise the method returns the default display.
-	 * 
-	 * @return the display
-	 */
-	public static Display getStandardDisplay() {
-		Display display = Display.getCurrent();
-		if (display == null)
-			display = Display.getDefault();
-		return display;		
-	}	
-	
-	/**
-	 * Convenience method to display an error dialog.
-	 * 
-	 * @param title title for the dialog or null for default title
-	 * @param message primary message to display
-	 * @param status reason for the error
-	 */
-	public static void openError(final String title, final String message, final IStatus status) {
-		Display.getDefault().asyncExec(new Runnable() {
-			public void run() {
-				Shell shell = getShell();
-				ErrorDialog.openError(shell,
-						title != null ? title : Messages.errorDefaultDialogTitle,
-						message, status);
-			}
-		});
-	}
-	/**
-	 * Convenience method to get a shell
-	 *
-	 * @return Shell
-	 */
-	public static Shell getShell() {
-		return getStandardDisplay().getActiveShell();
-	}
-	
-	/**
 	 * Register an image with the registry.
 	 * @param key java.lang.String
 	 * @param partialURL java.lang.String
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Trace.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Trace.java
index 047e373..2a15958 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Trace.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/Trace.java
@@ -13,11 +13,11 @@
  * Helper class to route trace output.
  */
 public class Trace {
-	public static final byte CONFIG = 0;
-	public static final byte WARNING = 1;
-	public static final byte SEVERE = 2;
-	public static final byte FINEST = 3;
-	public static final byte FINER = 4;
+	public static byte CONFIG = 0;
+	public static byte WARNING = 1;
+	public static byte SEVERE = 2;
+	public static byte FINEST = 3;
+	public static byte FINER = 4;
 
 	/**
 	 * Trace constructor comment.
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/actions/CleanWorkDirAction.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/actions/CleanWorkDirAction.java
deleted file mode 100644
index b0f612b..0000000
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/actions/CleanWorkDirAction.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 SAS Institute, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Larry Isaacs - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.server.tomcat.ui.internal.actions;
-
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jst.server.tomcat.ui.internal.CleanWorkDirDialog;
-import org.eclipse.ui.IObjectActionDelegate;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer;
-
-/**
- * @author larry
- *
- */
-public class CleanWorkDirAction implements IObjectActionDelegate {
-	private IWorkbenchPart targetPart;
-	private IServer selectedServer;
-	private IModule selectedModule;
-
-	/**
-	 * Constructor for Action1.
-	 */
-	public CleanWorkDirAction() {
-		super();
-	}
-
-	/**
-	 * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
-	 */
-	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
-		this.targetPart = targetPart;
-	}
-
-	/**
-	 * @see org.eclipse.ui.IActionDelegate#run(IAction)
-	 */
-	public void run(IAction action) {
-		CleanWorkDirDialog dlg = new CleanWorkDirDialog(targetPart.getSite().getShell(), selectedServer, selectedModule);
-		dlg.open();
-	}
-
-	/**
-	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)
-	 */
-	public void selectionChanged(IAction action, ISelection selection) {
-		selectedServer = null;
-		selectedModule = null;
-		if (!selection.isEmpty()) {
-			if (selection instanceof IStructuredSelection) {
-				Object obj = ((IStructuredSelection)selection).getFirstElement();
-				if (obj instanceof IServer) {
-					selectedServer = (IServer)obj;
-				}
-				else if (obj instanceof ModuleServer) {
-					ModuleServer ms = (ModuleServer)obj;
-					selectedModule = ms.module[ms.module.length - 1];
-					if (selectedModule != null)
-						selectedServer = ms.server;
-				}
-			}
-		}
-	}
-}
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java
index d94227d..20637f8 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ConfigurationWebModuleEditorPart.java
@@ -400,16 +400,6 @@
 			// bad path
 		}
 		
-		if (s.startsWith(configuration.getDocBasePrefix())) {
-			try {
-				String t = s.substring(configuration.getDocBasePrefix().length());
-				if (ResourcesPlugin.getWorkspace().getRoot().getProject(t).exists())
-					return true;
-			} catch (Exception e) {
-				// bad path
-			}
-		}
-		
 		// check server relative path
 		try {
 			f = server.getRuntime().getLocation().append(s).toFile();
diff --git a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ServerGeneralEditorSection.java b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ServerGeneralEditorSection.java
index 4b5a3e8..32ab13c 100644
--- a/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ServerGeneralEditorSection.java
+++ b/plugins/org.eclipse.jst.server.tomcat.ui/tomcatui/org/eclipse/jst/server/tomcat/ui/internal/editor/ServerGeneralEditorSection.java
@@ -13,29 +13,20 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.jst.server.tomcat.core.internal.ITomcatServer;
 import org.eclipse.jst.server.tomcat.core.internal.TomcatServer;
 import org.eclipse.jst.server.tomcat.core.internal.command.SetDebugModeCommand;
-import org.eclipse.jst.server.tomcat.core.internal.command.SetDeployDirectoryCommand;
 import org.eclipse.jst.server.tomcat.core.internal.command.SetSecureCommand;
 import org.eclipse.jst.server.tomcat.core.internal.command.SetTestEnvironmentCommand;
 import org.eclipse.jst.server.tomcat.ui.internal.ContextIds;
 import org.eclipse.jst.server.tomcat.ui.internal.Messages;
-import org.eclipse.jst.server.tomcat.ui.internal.TomcatUIPlugin;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.PlatformUI;
@@ -43,10 +34,8 @@
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.Section;
 import org.eclipse.ui.help.IWorkbenchHelpSystem;
-import org.eclipse.wst.server.core.IPublishListener;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.util.PublishAdapter;
-import org.eclipse.wst.server.ui.editor.ServerEditorSection;
+
+import org.eclipse.wst.server.ui.editor.*;
 /**
  * Tomcat server general editor page.
  */
@@ -56,14 +45,9 @@
 	protected Button secure;
 	protected Button debug;
 	protected Button testEnvironment;
-	protected Text deployDir;
-	protected Button deployDirBrowse;
 	protected boolean updating;
 
 	protected PropertyChangeListener listener;
-	protected IPublishListener publishListener;
-	
-	boolean allowRestrictedEditing;
 
 	/**
 	 * ServerGeneralEditorPart constructor comment.
@@ -75,7 +59,7 @@
 	/**
 	 * 
 	 */
-	protected void addChangeListeners() {
+	protected void addChangeListener() {
 		listener = new PropertyChangeListener() {
 			public void propertyChange(PropertyChangeEvent event) {
 				if (updating)
@@ -90,36 +74,11 @@
 				} else if (ITomcatServer.PROPERTY_TEST_ENVIRONMENT.equals(event.getPropertyName())) {
 					Boolean b = (Boolean) event.getNewValue();
 					ServerGeneralEditorSection.this.testEnvironment.setSelection(b.booleanValue());
-				} else if (ITomcatServer.PROPERTY_DEPLOYDIR.equals(event.getPropertyName())) {
-					String s = (String) event.getNewValue();
-					ServerGeneralEditorSection.this.deployDir.setText(s);
-					validate();
 				}
 				updating = false;
 			}
 		};
 		server.addPropertyChangeListener(listener);
-		
-		publishListener = new PublishAdapter() {
-			public void publishFinished(IServer server2, IStatus status) {
-				boolean flag = false;
-				if (status.isOK() && server2.getModules().length == 0)
-					flag = true;
-				if (flag != allowRestrictedEditing) {
-					allowRestrictedEditing = flag;
-					// Update the state of the fields
-					PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
-						public void run() {
-							if (!ServerGeneralEditorSection.this.deployDir.isDisposed())
-								ServerGeneralEditorSection.this.deployDir.setEnabled(allowRestrictedEditing);
-							if (!ServerGeneralEditorSection.this.deployDirBrowse.isDisposed())
-								ServerGeneralEditorSection.this.deployDirBrowse.setEnabled(allowRestrictedEditing);
-						}
-					});
-				}
-			}
-		};
-		server.getOriginal().addPublishListener(publishListener);
 	}
 	
 	/**
@@ -151,56 +110,9 @@
 		toolkit.paintBordersFor(composite);
 		section.setClient(composite);
 		
-		// deployment directory
-		Label label = toolkit.createLabel(composite, Messages.serverEditorDeployDir);
-		GridData data = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
-		label.setLayoutData(data);
-		
-		deployDir = toolkit.createText(composite, null);
-		data = new GridData(SWT.FILL, SWT.CENTER, true, false);
-		deployDir.setLayoutData(data);
-		deployDir.addModifyListener(new ModifyListener() {
-			public void modifyText(ModifyEvent e) {
-				if (updating)
-					return;
-				updating = true;
-				execute(new SetDeployDirectoryCommand(tomcatServer, deployDir.getText()));
-				updating = false;
-				validate();
-			}
-		});
-		
-		deployDirBrowse = toolkit.createButton(composite, Messages.configurationEditorBrowseDeploy, SWT.PUSH);
-		deployDirBrowse.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent se) {
-				DirectoryDialog dialog = new DirectoryDialog(deployDir.getShell());
-				dialog.setMessage(Messages.configurationEditorBrowseDeployMessage);
-				dialog.setFilterPath(deployDir.getText());
-				String selectedDirectory = dialog.open();
-				if (selectedDirectory != null && !selectedDirectory.equals(deployDir.getText())) {
-					updating = true;
-					execute(new SetDeployDirectoryCommand(tomcatServer, selectedDirectory));
-					deployDir.setText(selectedDirectory);
-					updating = false;
-					validate();
-				}
-			}
-		});
-		deployDirBrowse.setLayoutData(new GridData(SWT.END, SWT.CENTER, false, false));
-		
-		label = toolkit.createLabel(composite, Messages.serverEditorSpecialFieldsLabel);
-		data = new GridData(SWT.BEGINNING, SWT.CENTER, true, false);
-		data.horizontalSpan = 3;
-		label.setLayoutData(data);
-
-		Label separator = toolkit.createSeparator(composite, SWT.HORIZONTAL);
-		data = new GridData(SWT.FILL, SWT.CENTER, true, false);
-		data.horizontalSpan = 3;
-		separator.setLayoutData(data);
-		
 		// test environment
 		testEnvironment = toolkit.createButton(composite, Messages.serverEditorTestEnvironment, SWT.CHECK);
-		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
 		data.horizontalSpan = 3;
 		testEnvironment.setLayoutData(data);
 		testEnvironment.addSelectionListener(new SelectionAdapter() {
@@ -248,27 +160,18 @@
 	
 		initialize();
 	}
-	
-	/**
-	 * @see ServerEditorSection#dispose()
-	 */
+
 	public void dispose() {
-		if (server != null) {
+		if (server != null)
 			server.removePropertyChangeListener(listener);
-			if (server.getOriginal() != null)
-				server.getOriginal().removePublishListener(publishListener);
-		}
 	}
 
-	/**
-	 * @see ServerEditorSection#init(IEditorSite, IEditorInput)
-	 */
 	public void init(IEditorSite site, IEditorInput input) {
 		super.init(site, input);
 		
 		if (server != null) {
 			tomcatServer = (TomcatServer) server.loadAdapter(TomcatServer.class, null);
-			addChangeListeners();
+			addChangeListener();
 		}
 		initialize();
 	}
@@ -280,17 +183,6 @@
 		if (secure == null || tomcatServer == null)
 			return;
 		updating = true;
-		
-		allowRestrictedEditing = false;
-		if (server.getOriginal().getServerPublishState() == IServer.PUBLISH_STATE_NONE
-				&& server.getOriginal().getModules().length == 0) {
-			allowRestrictedEditing = true;
-		}
-		
-		deployDir.setText(tomcatServer.getDeployDirectory());
-		deployDir.setEnabled(allowRestrictedEditing);
-		
-		deployDirBrowse.setEnabled(allowRestrictedEditing);
 
 		testEnvironment.setSelection(tomcatServer.isTestEnvironment());
 		secure.setSelection(tomcatServer.isSecure());
@@ -307,32 +199,5 @@
 			secure.setEnabled(true);
 		
 		updating = false;
-		validate();
-	}
-	
-	/**
-	 * @see ServerEditorSection#getSaveStatus()
-	 */
-	public IStatus[] getSaveStatus() {
-		if (tomcatServer != null) {
-			String dir = tomcatServer.getDeployDirectory();
-			if (dir == null || dir.length() == 0) {
-				return new IStatus [] {
-						new Status(IStatus.ERROR, TomcatUIPlugin.PLUGIN_ID, Messages.errorDeployDirNotSpecified)};
-			}
-		}
-		// use default implementation to return success
-		return super.getSaveStatus();
-	}
-	
-	protected void validate() {
-		if (tomcatServer != null) {
-			String dir = tomcatServer.getDeployDirectory();
-			if (dir == null || dir.length() == 0) {
-				setErrorMessage(Messages.errorDeployDirNotSpecified);
-				return;
-			}
-		}
-		setErrorMessage(null);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/.classpath b/plugins/org.eclipse.jst.server.ui/.classpath
index d2acb1f..c41a03c 100644
--- a/plugins/org.eclipse.jst.server.ui/.classpath
+++ b/plugins/org.eclipse.jst.server.ui/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="sjavaui/"/>
-	<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.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.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.core.resources.prefs
index c8be432..831c035 100644
--- a/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.core.resources.prefs
+++ b/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,3 @@
-#Fri Nov 10 17:11:35 HST 2006
+#Mon Apr 17 01:58:09 EDT 2006
 eclipse.preferences.version=1
 encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.jdt.core.prefs
index 87e623a..6a89069 100644
--- a/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,74 +1,12 @@
-#Tue Jan 16 16:59:37 EST 2007
+#Fri May 05 17:39:17 EDT 2006
 eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=error
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.4
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=1.4
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=error
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.incompatibleJDKLevel=warning
-org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.jdt.ui.prefs
index 584bdff..4766097 100644
--- a/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.jdt.ui.prefs
+++ b/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -1,4 +1,3 @@
-#Fri Nov 10 18:06:11 HST 2006
+#Wed Mar 22 09:05:22 PST 2006
 eclipse.preferences.version=1
-internal.default.compliance=user
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
+internal.default.compliance=default
diff --git a/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.pde.prefs
index 08a60e5..8d8bb95 100644
--- a/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.pde.prefs
+++ b/plugins/org.eclipse.jst.server.ui/.settings/org.eclipse.pde.prefs
@@ -1,9 +1,9 @@
-#Sat Apr 22 18:36:14 EDT 2006
+#Mon Apr 17 01:57:48 EDT 2006
 compilers.incompatible-environment=0
 compilers.p.build=0
 compilers.p.deprecated=1
 compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
+compilers.p.not-externalized-att=0
 compilers.p.unknown-attribute=0
 compilers.p.unknown-class=0
 compilers.p.unknown-element=0
diff --git a/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
index affdb1d..976b55b 100644
--- a/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.server.ui; singleton:=true
-Bundle-Version: 1.0.203.qualifier
+Bundle-Version: 1.0.104.qualifier
 Bundle-Activator: org.eclipse.jst.server.ui.internal.JavaServerUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -26,4 +26,3 @@
  org.eclipse.wst.common.modulecore;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.jface.text;bundle-version="[3.2.0,4.0.0)"
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.jst.server.ui/icons/wizban/new_runtime_wiz.gif b/plugins/org.eclipse.jst.server.ui/icons/wizban/new_runtime_wiz.gif
new file mode 100644
index 0000000..30de91f
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.ui/icons/wizban/new_runtime_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/icons/wizban/new_runtime_wiz.png b/plugins/org.eclipse.jst.server.ui/icons/wizban/new_runtime_wiz.png
deleted file mode 100644
index 577567c..0000000
--- a/plugins/org.eclipse.jst.server.ui/icons/wizban/new_runtime_wiz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/icons/wizban/new_test_wiz.gif b/plugins/org.eclipse.jst.server.ui/icons/wizban/new_test_wiz.gif
new file mode 100644
index 0000000..4a71e95
--- /dev/null
+++ b/plugins/org.eclipse.jst.server.ui/icons/wizban/new_test_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/icons/wizban/new_test_wiz.png b/plugins/org.eclipse.jst.server.ui/icons/wizban/new_test_wiz.png
deleted file mode 100644
index 78c8755..0000000
--- a/plugins/org.eclipse.jst.server.ui/icons/wizban/new_test_wiz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java
index e526373..da85fff 100644
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java
+++ b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/GenericRuntimeComposite.java
@@ -18,6 +18,7 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.*;
 import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.events.*;
 import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.IVMInstallType;
@@ -206,22 +207,22 @@
 	}
 
 	protected boolean showPreferencePage() {
-		String id = "org.eclipse.jdt.debug.ui.preferences.VMPreferencePage";
-		
-		// should be using the following API, but it only allows a single preference page instance.
-		// see bug 168211 for details
-		//PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(getShell(), id, new String[] { id }, null);
-		//return (dialog.open() == Window.OK);		
-		
 		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
-		IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode(id);
+		IPreferenceNode node = manager.find("org.eclipse.jdt.ui.preferences.JavaBasePreferencePage").findSubNode("org.eclipse.jdt.debug.ui.preferences.VMPreferencePage");
 		PreferenceManager manager2 = new PreferenceManager();
 		manager2.addToRoot(node);
-		PreferenceDialog dialog = new PreferenceDialog(getShell(), manager2);
-		dialog.create();
-		return (dialog.open() == Window.OK);
+		final PreferenceDialog dialog = new PreferenceDialog(getShell(), manager2);
+		final boolean[] result = new boolean[] { false };
+		BusyIndicator.showWhile(getDisplay(), new Runnable() {
+			public void run() {
+				dialog.create();
+				if (dialog.open() == Window.OK)
+					result[0] = true;
+			}
+		});
+		return result[0];
 	}
-
+	
 	protected void init() {
 		if (installDir == null || runtime == null)
 			return;
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java
index 55bde80..7403446 100644
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java
+++ b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ImageResource.java
@@ -101,9 +101,9 @@
 	protected static void initializeImageRegistry() {
 		imageRegistry = new ImageRegistry();
 		imageDescriptors = new HashMap();
-		
-		registerImage(IMG_WIZ_RUNTIME_TYPE, URL_WIZBAN + "new_runtime_wiz.png");
-		registerImage(IMG_WIZ_CACTUS_TEST, URL_WIZBAN + "new_test_wiz.png");
+	
+		registerImage(IMG_WIZ_RUNTIME_TYPE, URL_WIZBAN + "new_runtime_wiz.gif");
+		registerImage(IMG_WIZ_CACTUS_TEST, URL_WIZBAN + "new_test_wiz.gif");
 	}
 
 	/**
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ServerClasspathContainerPage.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ServerClasspathContainerPage.java
index 63e4dc3..cabc05b 100644
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ServerClasspathContainerPage.java
+++ b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/ServerClasspathContainerPage.java
@@ -53,11 +53,13 @@
 		IRuntime[] runtimes = ServerCore.getRuntimes();
 		int size = runtimes.length;
 		for (int i = 0; i < size; i++) {
-			RuntimeClasspathProviderWrapper rcpw = JavaServerPlugin.findRuntimeClasspathProvider(runtimes[i].getRuntimeType());
-			if (rcpw != null) {
-				IPath serverContainerPath = new Path(RuntimeClasspathContainer.SERVER_CONTAINER)
-						.append(rcpw.getId()).append(runtimes[i].getId());
-				runtimeMap.put(runtimes[i], JavaCore.newContainerEntry(serverContainerPath));
+			if (runtimes[i].getRuntimeType() != null) {
+				RuntimeClasspathProviderWrapper rcpw = JavaServerPlugin.findRuntimeClasspathProvider(runtimes[i].getRuntimeType());
+				if (rcpw != null) {
+					IPath serverContainerPath = new Path(RuntimeClasspathContainer.SERVER_CONTAINER)
+							.append(rcpw.getId()).append(runtimes[i].getId());
+					runtimeMap.put(runtimes[i], JavaCore.newContainerEntry(serverContainerPath));
+				}
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Trace.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Trace.java
index ae9c193..25d6791 100644
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Trace.java
+++ b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/Trace.java
@@ -13,10 +13,10 @@
  * Helper class to route trace output.
  */
 public class Trace {
-	public static final byte CONFIG = 0;
-	public static final byte WARNING = 1;
-	public static final byte SEVERE = 2;
-	public static final byte FINEST = 3;
+	public static byte CONFIG = 0;
+	public static byte WARNING = 1;
+	public static byte SEVERE = 2;
+	public static byte FINEST = 3;
 
 	/**
 	 * Trace constructor comment.
diff --git a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/cactus/JUnitClientDelegate.java b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/cactus/JUnitClientDelegate.java
index 11470aa..c591e29 100644
--- a/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/cactus/JUnitClientDelegate.java
+++ b/plugins/org.eclipse.jst.server.ui/sjavaui/org/eclipse/jst/server/ui/internal/cactus/JUnitClientDelegate.java
@@ -102,8 +102,8 @@
 			candidateConfigs = new ArrayList(configs.length);
 			for (int i = 0; i < configs.length; i++) {
 				ILaunchConfiguration config = configs[i];
-				// we should probably extract the JUnit internal stuff and
-				// create a new CactusLaunchConfiguration instead
+				// TODO: we should probably extract the JUnit internal stuff and
+				// create a new CactusLaunchConfiguration
 				if ((config.getAttribute(
 						JUnitBaseLaunchConfiguration.LAUNCH_CONTAINER_ATTR, "").equals(container)) && //$NON-NLS-1$
 						(config.getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME,
@@ -121,7 +121,8 @@
 		// If there are no existing configs associated with the IType, create one.
 		// If there is exactly one config associated with the IType, return it.
 		// Otherwise, if there is more than one config associated with the IType,
-		// prompt the user to choose one.
+		// prompt the
+		// user to choose one.
 		int candidateCount = candidateConfigs.size();
 		if (candidateCount < 1)
 			return null;
@@ -160,7 +161,7 @@
 	}
 
 	protected ILaunchConfigurationType getJUnitLaunchConfigType() {
-		// might want to replace this with a custom launch configuration instead
+		// TODO: might want to replace this with a custom launch configuration
 		ILaunchManager lm = DebugPlugin.getDefault().getLaunchManager();
 		return lm.getLaunchConfigurationType("org.eclipse.jdt.junit.launchconfig");
 	}
diff --git a/plugins/org.eclipse.jst.server.websphere.core/.classpath b/plugins/org.eclipse.jst.server.websphere.core/.classpath
index ce73933..751c8f2 100644
--- a/plugins/org.eclipse.jst.server.websphere.core/.classpath
+++ b/plugins/org.eclipse.jst.server.websphere.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<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.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.websphere.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jst.server.websphere.core/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 779d70e..0000000
--- a/plugins/org.eclipse.jst.server.websphere.core/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-#Sun Jan 21 14:51:17 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.websphere.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.websphere.core/META-INF/MANIFEST.MF
index 43fc95c..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
@@ -20,7 +20,7 @@
  org.eclipse.jst.j2ee.web;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.jst.server.generic.core;bundle-version="[1.0.100,1.2.0)",
  org.eclipse.jst.server.generic.ui;bundle-version="[1.0.100,1.2.0)",
- org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.4.0)",
+ org.eclipse.emf.ecore.xmi;bundle-version="[2.2.0,2.3.0)",
  org.eclipse.wst.common.modulecore;bundle-version="[1.1.0,1.2.0)",
  org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
@@ -30,4 +30,3 @@
  org.eclipse.wst.common.project.facet.ui;bundle-version="[1.0.0,1.2.0)"
 Eclipse-LazyStart: true
 Export-Package: org.eclipse.jst.server.websphere.core
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/.classpath b/plugins/org.eclipse.wst.internet.monitor.core/.classpath
index bf4b258..1149812 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/.classpath
+++ b/plugins/org.eclipse.wst.internet.monitor.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="monitorcore/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index c8be432..0000000
--- a/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Fri Nov 10 17:11:35 HST 2006
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 99eec13..0000000
--- a/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,74 +0,0 @@
-#Tue Jan 16 16:53:34 EST 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=error
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=error
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.incompatibleJDKLevel=warning
-org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 584bdff..0000000
--- a/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Nov 10 18:06:11 HST 2006
-eclipse.preferences.version=1
-internal.default.compliance=user
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.pde.prefs
deleted file mode 100644
index 08a60e5..0000000
--- a/plugins/org.eclipse.wst.internet.monitor.core/.settings/org.eclipse.pde.prefs
+++ /dev/null
@@ -1,14 +0,0 @@
-#Sat Apr 22 18:36:14 EDT 2006
-compilers.incompatible-environment=0
-compilers.p.build=0
-compilers.p.deprecated=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=0
-compilers.p.unknown-class=0
-compilers.p.unknown-element=0
-compilers.p.unknown-resource=0
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.use-project=true
-eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF
index 635c7d9..19877e0 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF
@@ -11,4 +11,3 @@
  org.eclipse.wst.internet.monitor.core.internal.provisional;x-friends:="org.eclipse.wst.internet.monitor.ui"
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)"
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ContentFilter.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ContentFilter.java
index 76568db..c9451fe 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ContentFilter.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ContentFilter.java
@@ -63,7 +63,7 @@
 	 * @param isRequest true if request, false if response
 	 * @param content the content
 	 * @return the filtered content
-	 * @throws IOException if there is a connection problem
+	 * @throws IOException if there is a connection issue
 	 */
 	public byte[] filter(Request request, boolean isRequest, byte[] content) throws IOException {
 		if (delegate == null) {
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Trace.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Trace.java
index 48b722a..f0fec76 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Trace.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Trace.java
@@ -16,27 +16,27 @@
 	/**
 	 * Config trace event.
 	 */
-	public static final byte CONFIG = 0;
+	public static byte CONFIG = 0;
 	
 	/**
 	 * Warning trace event.
 	 */
-	public static final byte WARNING = 1;
+	public static byte WARNING = 1;
 	
 	/**
 	 * Severe trace event.
 	 */
-	public static final byte SEVERE = 2;
+	public static byte SEVERE = 2;
 	
 	/**
 	 * Finest trace event.
 	 */
-	public static final byte FINEST = 3;
+	public static byte FINEST = 3;
 	
 	/**
 	 * Parsing trace event.
 	 */
-	public static final byte PARSING = 4;
+	public static byte PARSING = 4;
 
 	/**
 	 * Trace constructor comment.
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
index a0391e2..cde0415 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
@@ -194,7 +194,7 @@
 			setHTTPBody(new byte[0]);
 			return;
 		}
-		
+	
 		if (isRequest) {
 			if (contentLength != -1) {
 				byte[] b = readBytes(contentLength);
@@ -208,7 +208,7 @@
 			Trace.trace(Trace.PARSING, "Done parsing request body for: " + this);
 			return;
 		}
-		
+	
 		// just return body for HTTP 1.0 responses
 		if (!isRequest && !connectionKeepAlive && contentLength == -1 && transferEncoding == -1) {
 			Trace.trace(Trace.PARSING, "Assuming HTTP 1.0 for: " + this);
@@ -242,19 +242,19 @@
 			setHTTPBody(body);
 			return;
 		}
-		
+	
 		// spec 4.4.1
 		if (responseType != null && responseType.startsWith("1")) {
 			setHTTPBody(new byte[0]);
 			return;
 		}
-		
+	
 		// spec 4.4.2
 		if (transferEncoding != -1 && transferEncoding != ENCODING_IDENTITY) {
 			parseChunk();
 			return;
 		}
-		
+	
 		// spec 4.4.3
 		if (contentLength != -1) {
 			byte[] b = readBytes(contentLength);
@@ -467,7 +467,7 @@
 					transferEncoding = -1;
 					connectionKeepAlive = false;
 					connectionClose = false;
-					
+
 					parseHeader();
 					parseBody();
 					
@@ -476,7 +476,7 @@
 					
 					//Request r = conn.getRequestResponse(true);
 					//r.fireChangedEvent();
-					
+
 					Trace.trace(Trace.PARSING, "Done HTTP request for " + this + " " + connectionKeepAlive);
 					if (!isRequest && (!request.connectionKeepAlive || connectionClose)) {
 						conn2.close();
@@ -493,18 +493,9 @@
 				}
 			} catch (IOException e) {
 				// reached end of input
-				Trace.trace(Trace.PARSING, "End of buffer for: " + this, e);
-				if (!isRequest) {
-					try {
-						request.connectionKeepAlive = false;
-						request.conn2.close();
-						notifyRequest();
-					} catch (Exception ex) {
-						Trace.trace(Trace.PARSING, "Error closing request in response to error: " + this, e);
-					}
-				}
+				Trace.trace(Trace.PARSING, "End of buffer for: " + this + " " + e.getMessage());
 			}
-			
+
 			// send rest of buffer
 			out.write(buffer, bufferIndex, buffer.length - bufferIndex);
 			out.flush();
@@ -513,7 +504,7 @@
 		}
 		//if (!isRequest)
 		//	conn2.close();
-		
+
 		Trace.trace(Trace.PARSING, "Closing thread " + this);
 	}
 
@@ -626,7 +617,7 @@
 			try {
 				request.notify();
 			} catch (Exception e) {
-				Trace.trace(Trace.PARSING, "Error in notifyRequest() " + this, e);
+				Trace.trace(Trace.PARSING, "Error in notifyRequest() " + this + " " + e.getMessage());
 			}
 		}
 		Trace.trace(Trace.PARSING, "Done notifying request " + this);
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/MonitorCore.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/MonitorCore.java
index 626968f..7913161 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/MonitorCore.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/MonitorCore.java
@@ -23,14 +23,14 @@
  */
 public final class MonitorCore {
 	private static MonitorManager manager;
-
+	
 	/**
 	 * Cannot create MonitorCore - use static methods.
 	 */
 	private MonitorCore() {
 		// can't create
 	}
-
+	
 	/**
 	 * Returns a monitor manager instance.
 	 * 
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/schema/internalContentFilters.exsd b/plugins/org.eclipse.wst.internet.monitor.core/schema/internalContentFilters.exsd
index 992dd36..6fc6daf 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/schema/internalContentFilters.exsd
+++ b/plugins/org.eclipse.wst.internet.monitor.core/schema/internalContentFilters.exsd
@@ -13,7 +13,7 @@
    <element name="extension">
       <complexType>
          <sequence>
-            <element ref="filter" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="filter" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -46,6 +46,8 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
@@ -120,7 +122,7 @@
          Value of the attribute &lt;b&gt;class&lt;/b&gt; must be a fully qualified name of a Java class that extends the abstract class &lt;code&gt;org.eclipse.wst.internet.monitor.core.internal.provisional.ContentFilterDelegate&lt;/code&gt;.
       </documentation>
    </annotation>
-
+   
    <annotation>
       <appInfo>
          <meta.section type="implementation"/>
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/schema/protocolAdapters.exsd b/plugins/org.eclipse.wst.internet.monitor.core/schema/protocolAdapters.exsd
index d3b83b5..13081d1 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/schema/protocolAdapters.exsd
+++ b/plugins/org.eclipse.wst.internet.monitor.core/schema/protocolAdapters.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="protocolAdapter" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="protocolAdapter" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -46,6 +46,8 @@
          </appInfo>

       </annotation>

       <complexType>

+         <sequence>

+         </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

@@ -110,7 +112,7 @@
          Value of the attribute &lt;b&gt;class&lt;/b&gt; must be a fully qualified name of a Java class that extends the abstract class &lt;code&gt;org.eclipse.wst.internet.monitor.core.internal.ProtocolAdapterDelegate&lt;/code&gt;.

       </documentation>

    </annotation>

-

+   

    <annotation>

       <appInfo>

          <meta.section type="implementation"/>

diff --git a/plugins/org.eclipse.wst.internet.monitor.core/schema/startup.exsd b/plugins/org.eclipse.wst.internet.monitor.core/schema/startup.exsd
index 1992e48..4e3ef17 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/schema/startup.exsd
+++ b/plugins/org.eclipse.wst.internet.monitor.core/schema/startup.exsd
@@ -13,7 +13,7 @@
    <element name="extension">
       <complexType>
          <sequence>
-            <element ref="startup" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="startup" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -46,6 +46,8 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
@@ -101,7 +103,7 @@
          This extension point is internal and should not be used by any other plugins.
       </documentation>
    </annotation>
-
+   
    <annotation>
       <appInfo>
          <meta.section type="implementation"/>
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.classpath b/plugins/org.eclipse.wst.internet.monitor.ui/.classpath
index 01b6b92..3590fb5 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/.classpath
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="monitorui/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index c8be432..0000000
--- a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Fri Nov 10 17:11:35 HST 2006
-eclipse.preferences.version=1
-encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 6e8577e..0000000
--- a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,74 +0,0 @@
-#Tue Jan 16 16:54:01 EST 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=error
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.4
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=error
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.incompatibleJDKLevel=warning
-org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 584bdff..0000000
--- a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Fri Nov 10 18:06:11 HST 2006
-eclipse.preferences.version=1
-internal.default.compliance=user
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.pde.prefs
deleted file mode 100644
index 08a60e5..0000000
--- a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.pde.prefs
+++ /dev/null
@@ -1,14 +0,0 @@
-#Sat Apr 22 18:36:14 EDT 2006
-compilers.incompatible-environment=0
-compilers.p.build=0
-compilers.p.deprecated=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=0
-compilers.p.unknown-class=0
-compilers.p.unknown-element=0
-compilers.p.unknown-resource=0
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.use-project=true
-eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
index 3f8ac8e..107a3bf 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
@@ -15,4 +15,3 @@
  org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.103,1.1.0)"
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java
index 35499f4..19e0e9b 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java
@@ -21,6 +21,7 @@
 import org.eclipse.jface.resource.ImageRegistry;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.wst.internet.monitor.core.internal.Trace;
 import org.eclipse.wst.internet.monitor.core.internal.provisional.*;
 import org.eclipse.wst.internet.monitor.ui.internal.view.MonitorView;
 import org.osgi.framework.BundleContext;
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java
index 88d916c..c4d230a 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java
@@ -13,10 +13,10 @@
  * Helper class to route trace output.
  */
 public class Trace {
-	public static final byte CONFIG = 0;
-	public static final byte WARNING = 1;
-	public static final byte SEVERE = 2;
-	public static final byte FINEST = 3;
+	public static byte CONFIG = 0;
+	public static byte WARNING = 1;
+	public static byte SEVERE = 2;
+	public static byte FINEST = 3;
 
 	/**
 	 * Trace constructor comment.
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/schema/viewers.exsd b/plugins/org.eclipse.wst.internet.monitor.ui/schema/viewers.exsd
index 6d76378..c64ce10 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/schema/viewers.exsd
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/schema/viewers.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="viewer" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="viewer" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -46,6 +46,8 @@
          </appInfo>

       </annotation>

       <complexType>

+         <sequence>

+         </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

@@ -126,7 +128,7 @@
          

       </documentation>

    </annotation>

-

+   

    <annotation>

       <appInfo>

          <meta.section type="copyright"/>

diff --git a/plugins/org.eclipse.wst.server.core/.classpath b/plugins/org.eclipse.wst.server.core/.classpath
index a6eb998..f29ae05 100644
--- a/plugins/org.eclipse.wst.server.core/.classpath
+++ b/plugins/org.eclipse.wst.server.core/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="servercore/"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.core.resources.prefs
index c8be432..11d988c 100644
--- a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.core.resources.prefs
+++ b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,3 @@
-#Fri Nov 10 17:11:35 HST 2006
+#Sun May 07 20:50:54 EDT 2006
 eclipse.preferences.version=1
 encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.core.prefs
index 60ad2b1..f94b0ac 100644
--- a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,4 +1,4 @@
-#Tue Jan 16 16:49:16 EST 2007
+#Sun May 07 20:56:17 EDT 2006
 eclipse.preferences.version=1
 org.eclipse.jdt.core.builder.cleanOutputFolder=clean
 org.eclipse.jdt.core.builder.duplicateResourceTask=error
@@ -6,8 +6,8 @@
 org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
 org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
 org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
+org.eclipse.jdt.core.classpath.exclusionPatterns=enabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
@@ -17,44 +17,44 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=ignore
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=error
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=ignore
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=ignore
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=ignore
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=enabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
@@ -70,5 +70,5 @@
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.3
-org.eclipse.jdt.core.incompatibleJDKLevel=warning
+org.eclipse.jdt.core.incompatibleJDKLevel=ignore
 org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.ui.prefs
index 584bdff..56711e0 100644
--- a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.ui.prefs
+++ b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.ui.prefs
@@ -1,4 +1,3 @@
-#Fri Nov 10 18:06:11 HST 2006
+#Sun May 07 20:56:13 EDT 2006
 eclipse.preferences.version=1
-internal.default.compliance=user
 org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.pde.prefs
deleted file mode 100644
index 08a60e5..0000000
--- a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.pde.prefs
+++ /dev/null
@@ -1,14 +0,0 @@
-#Sat Apr 22 18:36:14 EDT 2006
-compilers.incompatible-environment=0
-compilers.p.build=0
-compilers.p.deprecated=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=0
-compilers.p.unknown-class=0
-compilers.p.unknown-element=0
-compilers.p.unknown-resource=0
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.use-project=true
-eclipse.preferences.version=1
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 fb52e02..b90d229 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.204.qualifier
+Bundle-Version: 1.0.108.qualifier
 Bundle-Activator: org.eclipse.wst.server.core.internal.ServerPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -17,4 +17,3 @@
  org.eclipse.debug.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.update.core;resolution:=optional;bundle-version="[3.2.0,4.0.0)"
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/plugins/org.eclipse.wst.server.core/plugin.properties b/plugins/org.eclipse.wst.server.core/plugin.properties
index 55a1843..c81668e 100644
--- a/plugins/org.eclipse.wst.server.core/plugin.properties
+++ b/plugins/org.eclipse.wst.server.core/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004, 2006 IBM Corporation and others.
+# Copyright (c) 2004, 2005 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -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 b5800d0..3eb42a8 100644
--- a/plugins/org.eclipse.wst.server.core/plugin.xml
+++ b/plugins/org.eclipse.wst.server.core/plugin.xml
@@ -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/clients.exsd b/plugins/org.eclipse.wst.server.core/schema/clients.exsd
index 17a3014..99517fc 100644
--- a/plugins/org.eclipse.wst.server.core/schema/clients.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/clients.exsd
@@ -15,7 +15,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="client" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="client" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -49,7 +49,7 @@
       </annotation>

       <complexType>

          <sequence>

-            <element ref="enablement" minOccurs="0" maxOccurs="1"/>

+            <element ref="enablement"/>

          </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

@@ -137,7 +137,7 @@
          Value of the attribute &lt;b&gt;class&lt;/b&gt; must be a fully qualified name of a Java class that extends &lt;code&gt;org.eclipse.wst.server.core.model.ClientDelegate&lt;/code&gt; and contains a public 0-arg constructor.

       </documentation>

    </annotation>

-

+   

    <annotation>

       <appInfo>

          <meta.section type="implementation"/>

diff --git a/plugins/org.eclipse.wst.server.core/schema/installableRuntimes.exsd b/plugins/org.eclipse.wst.server.core/schema/installableRuntimes.exsd
index faa16ea..20802b3 100644
--- a/plugins/org.eclipse.wst.server.core/schema/installableRuntimes.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/installableRuntimes.exsd
@@ -13,7 +13,7 @@
    <element name="extension">
       <complexType>
          <sequence>
-            <element ref="installableRuntime" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="installableRuntime" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -46,6 +46,9 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+            <element ref="installableRuntime"/>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
diff --git a/plugins/org.eclipse.wst.server.core/schema/installableServers.exsd b/plugins/org.eclipse.wst.server.core/schema/installableServers.exsd
index f7e2708..aa48b2f 100644
--- a/plugins/org.eclipse.wst.server.core/schema/installableServers.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/installableServers.exsd
@@ -13,7 +13,7 @@
    <element name="extension">
       <complexType>
          <sequence>
-            <element ref="installableServer" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="installableServer" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -42,10 +42,13 @@
    <element name="installableServer">
       <annotation>
          <appInfo>
-            <meta.element labelAttribute="name" deprecated="true"/>
+            <meta.element labelAttribute="name"/>
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+            <element ref="installableServer"/>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
@@ -53,23 +56,23 @@
                </documentation>
             </annotation>
          </attribute>
-         <attribute name="name" type="string">
+         <attribute name="name" type="string" use="required">
             <annotation>
                <documentation>
                   a translatable name used to identify the runtime type
                </documentation>
                <appInfo>
-                  <meta.attribute translatable="true" deprecated="true"/>
+                  <meta.attribute translatable="true"/>
                </appInfo>
             </annotation>
          </attribute>
-         <attribute name="description" type="string">
+         <attribute name="description" type="string" use="required">
             <annotation>
                <documentation>
                   a translatable description of the runtime type
                </documentation>
                <appInfo>
-                  <meta.attribute translatable="true" deprecated="true"/>
+                  <meta.attribute translatable="true"/>
                </appInfo>
             </annotation>
          </attribute>
@@ -78,9 +81,6 @@
                <documentation>
                   a translatable vendor name
                </documentation>
-               <appInfo>
-                  <meta.attribute deprecated="true"/>
-               </appInfo>
             </annotation>
          </attribute>
          <attribute name="version" type="string">
@@ -88,9 +88,6 @@
                <documentation>
                   a translatable version number
                </documentation>
-               <appInfo>
-                  <meta.attribute deprecated="true"/>
-               </appInfo>
             </annotation>
          </attribute>
          <attribute name="featureId" type="string" use="required">
diff --git a/plugins/org.eclipse.wst.server.core/schema/internalServerLocators.exsd b/plugins/org.eclipse.wst.server.core/schema/internalServerLocators.exsd
index 86db1cb..8ef14c3 100644
--- a/plugins/org.eclipse.wst.server.core/schema/internalServerLocators.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/internalServerLocators.exsd
@@ -13,7 +13,7 @@
    <element name="extension">
       <complexType>
          <sequence>
-            <element ref="serverLocator" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="serverLocator" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
diff --git a/plugins/org.eclipse.wst.server.core/schema/launchableAdapters.exsd b/plugins/org.eclipse.wst.server.core/schema/launchableAdapters.exsd
index 598f48e..8ee715b 100644
--- a/plugins/org.eclipse.wst.server.core/schema/launchableAdapters.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/launchableAdapters.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="launchableAdapter" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="launchableAdapter" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -46,6 +46,8 @@
          </appInfo>

       </annotation>

       <complexType>

+         <sequence>

+         </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/moduleArtifactAdapters.exsd b/plugins/org.eclipse.wst.server.core/schema/moduleArtifactAdapters.exsd
index 5c50289..0a63f1d 100644
--- a/plugins/org.eclipse.wst.server.core/schema/moduleArtifactAdapters.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/moduleArtifactAdapters.exsd
@@ -15,7 +15,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="moduleArtifactAdapter" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="moduleArtifactAdapter" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -49,7 +49,7 @@
       </annotation>

       <complexType>

          <sequence>

-            <element ref="enablement" minOccurs="0" maxOccurs="1"/>

+            <element ref="enablement"/>

          </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd b/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd
index d08d4d3..e04bfdc 100644
--- a/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="moduleFactory" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="moduleFactory" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/moduleTypes.exsd b/plugins/org.eclipse.wst.server.core/schema/moduleTypes.exsd
index b928348..d1659de 100644
--- a/plugins/org.eclipse.wst.server.core/schema/moduleTypes.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/moduleTypes.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="moduleType" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="moduleType" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -46,6 +46,8 @@
          </appInfo>

       </annotation>

       <complexType>

+         <sequence>

+         </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

@@ -102,7 +104,7 @@
          

       </documentation>

    </annotation>

-

+   

    <annotation>

       <appInfo>

          <meta.section type="implementation"/>

diff --git a/plugins/org.eclipse.wst.server.core/schema/publishTasks.exsd b/plugins/org.eclipse.wst.server.core/schema/publishTasks.exsd
index 8e091cd..1730958 100644
--- a/plugins/org.eclipse.wst.server.core/schema/publishTasks.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/publishTasks.exsd
@@ -13,7 +13,7 @@
    <element name="extension">
       <complexType>
          <sequence>
-            <element ref="publishTask" minOccurs="1" maxOccurs="unbounded"/>
+            <element ref="publishTask" minOccurs="0" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="point" type="string" use="required">
             <annotation>
@@ -46,6 +46,8 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
diff --git a/plugins/org.eclipse.wst.server.core/schema/runtimeLocators.exsd b/plugins/org.eclipse.wst.server.core/schema/runtimeLocators.exsd
index 6032d95..5fc095d 100644
--- a/plugins/org.eclipse.wst.server.core/schema/runtimeLocators.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/runtimeLocators.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="runtimeLocator" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="runtimeLocator" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd b/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd
index 788fa89..13f4961 100644
--- a/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/runtimeTargetHandlers.exsd
@@ -15,7 +15,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="runtimeTargetHandler" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="runtimeTargetHandler" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -48,6 +48,8 @@
          </appInfo>

       </annotation>

       <complexType>

+         <sequence>

+         </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/runtimeTypes.exsd b/plugins/org.eclipse.wst.server.core/schema/runtimeTypes.exsd
index 9ac37bf..d10ed02 100644
--- a/plugins/org.eclipse.wst.server.core/schema/runtimeTypes.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/runtimeTypes.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="runtimeType" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="runtimeType" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -173,7 +173,7 @@
          Value of the attribute &lt;b&gt;class&lt;/b&gt; must be a fully qualified name of a Java class that extends &lt;code&gt;org.eclipse.wst.server.core.model.RuntimeDelegate&lt;/code&gt; and contains a public 0-arg constructor.

       </documentation>

    </annotation>

-

+   

    <annotation>

       <appInfo>

          <meta.section type="implementation"/>

diff --git a/plugins/org.eclipse.wst.server.core/schema/serverMonitors.exsd b/plugins/org.eclipse.wst.server.core/schema/serverMonitors.exsd
index 7b930ac..f0f49b4 100644
--- a/plugins/org.eclipse.wst.server.core/schema/serverMonitors.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/serverMonitors.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="monitor" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="monitor" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -46,6 +46,8 @@
          </appInfo>

       </annotation>

       <complexType>

+         <sequence>

+         </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/serverTypes.exsd b/plugins/org.eclipse.wst.server.core/schema/serverTypes.exsd
index faec219..39b0ee9 100644
--- a/plugins/org.eclipse.wst.server.core/schema/serverTypes.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/serverTypes.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="serverType" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="serverType"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -41,6 +41,8 @@
 

    <element name="serverType">

       <complexType>

+         <sequence>

+         </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

diff --git a/plugins/org.eclipse.wst.server.core/schema/startup.exsd b/plugins/org.eclipse.wst.server.core/schema/startup.exsd
index 6eb69f4..25bbd3c 100644
--- a/plugins/org.eclipse.wst.server.core/schema/startup.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/startup.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="startup" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="startup" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -46,6 +46,8 @@
          </appInfo>

       </annotation>

       <complexType>

+         <sequence>

+         </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

@@ -103,7 +105,7 @@
          Value of the attribute &lt;b&gt;class&lt;/b&gt; must be a fully qualified name of a Java class that extends &lt;code&gt;org.eclipse.wst.server.core.model.IStartup&lt;/code&gt; and contains a public 0-arg constructor.

       </documentation>

    </annotation>

-

+   

    <annotation>

       <appInfo>

          <meta.section type="implementation"/>

diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
index 3b4a6bf..9e21ba0 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
@@ -286,16 +286,6 @@
 	public IStatus canPublish();
 
 	/**
-	 * Returns true if the server should be published to. This is <code>true</code> when the server
-	 * can be published to and the server's publish state or any module's publish state is not
-	 * PUBLISH_STATE_NONE. 
-	 * 
-	 * @return boolean
-	 * @since 2.0
-	 */
-	public boolean shouldPublish();
-
-	/**
 	 * Publish to the server using the progress monitor. The result of the
 	 * publish operation is returned as an IStatus.
 	 * <p>
@@ -410,16 +400,6 @@
 	public IStatus canRestart(String mode);
 
 	/**
-	 * Returns true if the server should be restarted. This is <code>true</code> when the server
-	 * can be restarted and the server's restart state or any module's restart states is not
-	 * false. 
-	 * 
-	 * @return boolean
-	 * @since 2.0
-	 */
-	public boolean shouldRestart();
-
-	/**
 	 * Returns whether this server is out of sync and needs to be
 	 * restarted. This method will return false when the
 	 * server is not running.
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
index f1d06e9..ce68672 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
@@ -160,7 +160,7 @@
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
 	 * @return a new server instance
-	 * @throws CoreException if there is an error saving the server
+	 * @throws CoreException [missing]
 	 * @see #SAVE_CONFLICT
 	 */
 	public IServer save(boolean force, IProgressMonitor monitor) throws CoreException;
@@ -196,8 +196,7 @@
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
 	 * @return a new server instance
-	 * @throws CoreException if there is an error saving the server, runtime, or
-	 *    server configuration
+	 * @throws CoreException [missing]
 	 * @see #SAVE_CONFLICT
 	 */
 	public IServer saveAll(boolean force, IProgressMonitor monitor) throws CoreException;
@@ -247,16 +246,11 @@
 	 * The modules included in the <code>remove</code> list
 	 * must be associated with the server, but may or may not exist
 	 * in the workspace.
-	 * Entries in the add or remove lists may not be null.
 	 * <p>
 	 * This method will not communicate with the server. After saving,
 	 * publish() can be used to sync up with the server.
 	 * </p>
 	 * <p>
-	 * This method is guaranteed to fail with the same status exception
-	 * if the result of canModifyModules() is an error status.
-	 * </p>
-	 * <p>
 	 * [issue: How to formulate what it means
 	 * to say "the module must exist in the workspace"?]
 	 * </p>
@@ -269,18 +263,21 @@
 	 * lists.]
 	 * </p>
 	 * <p>
+	 * [issue: The spec had also said: "...canModifyModules()
+	 * should have returned true. The configuration must assume
+	 * any default settings and add the module without any UI."]
+	 * </p>
+	 * <p>
 	 * [issue: What error checking should be performed by this
 	 * operation, and what needs to be performed by save() if
 	 * the client tries to commit these hypothetisized changes?]
 	 * </p>
-	 * 
+	 *
 	 * @param add a possibly-empty list of modules to add
 	 * @param remove a possibly-empty list of modules to remove
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
-	 * @throws CoreException if the changes are not allowed or could not
-	 *    be processed
-	 * @see IServerAttributes#canModifyModules(IModule[], IModule[], IProgressMonitor)
+	 * @throws CoreException [missing]
 	 */
 	public void modifyModules(IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException;
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
index fcf4333..971ad57 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
@@ -19,7 +19,7 @@
  * Main class for server core API.
  * <p>
  * This class provides API to access most of the types in the server
- * framework, including server runtimes and servers.
+ * framework, including server runtimes and servers. Methods **
  * The methods on this class are thread safe.
  * </p>
  * <p>
@@ -29,7 +29,7 @@
  * 
  * @since 1.0
  */
-public final class ServerCore {
+public class ServerCore {
 	private static final String EXTENSION_SERVER_TYPE = "serverTypes";
 	private static final String EXTENSION_RUNTIME_TYPE = "runtimeTypes";
 
@@ -41,7 +41,9 @@
 
 	private static IRegistryChangeListener registryListener;
 
-	protected static class RegistryChangeListener implements IRegistryChangeListener {
+	private static boolean initialized = false;
+
+	private static class RegistryChangeListener implements IRegistryChangeListener {
 		public void registryChanged(IRegistryChangeEvent event) {
 			IExtensionDelta[] deltas = event.getExtensionDeltas(ServerPlugin.PLUGIN_ID, EXTENSION_RUNTIME_TYPE);
 			if (deltas != null) {
@@ -60,7 +62,7 @@
 	}
 
 	/**
-	 * Cannot instantiate ServerCore - use static methods.
+	 * Cannot create ServerCore - use static methods.
 	 */
 	private ServerCore() {
 		// can't create
@@ -72,6 +74,8 @@
 	 * @return org.eclipse.wst.server.core.internal.ResourceManager
 	 */
 	private final static ResourceManager getResourceManager() {
+		if (!initialized)
+			initialize();
 		return ResourceManager.getInstance();
 	}
 
@@ -138,6 +142,34 @@
 	}
 
 	/**
+	 * Returns an array of all known runtime target handler instances.
+	 * <p>
+	 * A new array is returned on each call, so clients may store or modify the result.
+	 * </p>
+	 * 
+	 * @return a possibly-empty array of runtime target handler instances
+	 *    {@link IRuntimeTargetHandler}
+	 */
+	public static IRuntimeTargetHandler[] getRuntimeTargetHandlers() {
+		throw new RuntimeException("Attempt to use deprecated code");
+	}
+
+	/**
+	 * Returns the runtime target handler with the given id, or <code>null</code>
+	 * if none. This convenience method searches the list of known runtime
+	 * target handlers ({@link #getRuntimeTargetHandlers()}) for the one with
+	 * a matching runtime target handler id ({@link IRuntimeTargetHandler#getId()}).
+	 * The id may not be null.
+	 *
+	 * @param id the runtime target handler id
+	 * @return the runtime target handler instance, or <code>null</code> if
+	 *   there is no runtime target handler with the given id
+	 */
+	public static IRuntimeTargetHandler findRuntimeTargetHandler(String id) {
+		throw new RuntimeException("Attempt to use deprecated code");
+	}
+
+	/**
 	 * Returns an array of all known server types.
 	 * <p>
 	 * A new array is returned on each call, so clients may store or modify the result.
@@ -181,6 +213,40 @@
 	}
 
 	/**
+	 * Execute the server startup extension points.
+	 */
+	private static synchronized void executeStartups() {
+		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .startup extension point ->-");
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "internalStartup");
+
+		int size = cf.length;
+		for (int i = 0; i < size; i++) {
+			try {
+				IStartup startup = (IStartup) cf[i].createExecutableExtension("class");
+				try {
+					startup.startup();
+				} catch (Exception ex) {
+					Trace.trace(Trace.SEVERE, "Startup failed" + startup.toString(), ex);
+				}
+				Trace.trace(Trace.EXTENSION_POINT, "  Loaded startup: " + cf[i].getAttribute("id"));
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "  Could not load startup: " + cf[i].getAttribute("id"), t);
+			}
+		}
+		
+		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.
 	 */
 	private static synchronized void loadRuntimeTypes() {
@@ -256,6 +322,8 @@
 	 * with the given id
 	 */
 	public static IRuntime findRuntime(String id) {
+		if (!initialized)
+			initialize();
 		return getResourceManager().getRuntime(id);
 	}
 
@@ -269,6 +337,8 @@
 	 * @return a possibly-empty array of runtime instances {@link IRuntime}
 	 */
 	public static IRuntime[] getRuntimes() {
+		if (!initialized)
+			initialize();
 		return getResourceManager().getRuntimes();
 	}
 
@@ -283,6 +353,8 @@
 	 * with the given id
 	 */
 	public static IServer findServer(String id) {
+		if (!initialized)
+			initialize();
 		return getResourceManager().getServer(id);
 	}
 
@@ -296,6 +368,8 @@
 	 * @return a possibly-empty array of server instances {@link IServer}
 	 */
 	public static IServer[] getServers() {
+		if (!initialized)
+			initialize();
 		return getResourceManager().getServers();
 	}
 
@@ -354,6 +428,8 @@
 	 *    default server
 	 */
 	public static IServer getDefaultServer(IModule module) {
+		if (!initialized)
+			initialize();
 		return ModuleProperties.getInstance().getDefaultServer(module);
 	}
 
@@ -370,6 +446,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/ServerUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
index b75b321..1887624 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,8 +16,6 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.jobs.IJobManager;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.debug.core.ILaunchConfiguration;
 
 import org.eclipse.osgi.util.NLS;
@@ -25,26 +23,15 @@
 /**
  * Server utility methods. These static methods can be used to perform
  * common operations on server artifacts.
- * <p>
- * This class provides all its functionality through static members.
- * It is not intended to be subclassed or instantiated.
- * </p>
+ * 
  * @since 1.0
  */
 public class ServerUtil {
 	/**
-	 * Constant identifying the job family identifier for server operations.
-	 * 
-	 * @see IJobManager#join(Object, IProgressMonitor)
-	 * @since 2.0
-	 */
-	public static final Object SERVER_JOB_FAMILY = ServerPlugin.PLUGIN_ID;
-
-	/**
 	 * Static utility class - cannot create an instance.
 	 */
 	private ServerUtil() {
-		// can't create
+		// do nothing
 	}
 
 	/**
@@ -52,10 +39,6 @@
 	 * is contained with the project, this method will return an arbitrary module
 	 * unless the module factory defines an ordering. If there might be multiple
 	 * modules in a project, users should typically use getModules(IProject) instead.
-	 * <p>
-	 * This method may trigger bundle loading and is not suitable for
-	 * short/UI operations.
-	 * </p>
 	 * 
 	 * @param project a project
 	 * @return a module that is contained with the project, or null if no
@@ -66,19 +49,27 @@
 		if (project == null)
 			throw new IllegalArgumentException();
 		
-		IModule[] modules = getModules(project);
-		if (modules != null && modules.length > 0)
-			return modules[0];
+		ModuleFactory[] factories = ServerPlugin.getModuleFactories();
+		if (factories != null) {
+			int size = factories.length;
+			for (int i = 0; i < size; i++) {
+				IModule[] modules = factories[i].getModules();
+				if (modules != null) {
+					int size2 = modules.length;
+					for (int j = 0; j < size2; j++) {
+						if (project.equals(modules[j].getProject()) && isSupportedModule(factories[i].getModuleTypes(), modules[j].getModuleType())) {
+							return modules[j];
+						}
+					}
+				}
+			}
+		}
 		
 		return null;
 	}
 
 	/**
 	 * Returns the modules contained within the given project.
-	 * <p>
-	 * This method may trigger bundle loading and is not suitable for
-	 * short/UI operations.
-	 * </p>
 	 * 
 	 * @param project a project
 	 * @return a possibly-empty array of modules
@@ -88,39 +79,22 @@
 		if (project == null)
 			throw new IllegalArgumentException();
 		
-		// use a set for better contains() performance
-		Set set = new HashSet();
-		
-		ModuleFactory[] factories = ServerPlugin.getModuleFactories();
-		if (factories != null) {
-			int size = factories.length;
+		IModule[] modules = getModules();
+		List list = new ArrayList();
+		if (modules != null) {
+			int size = modules.length;
 			for (int i = 0; i < size; i++) {
-				IModule[] modules = factories[i].getModules(project, null);
-				if (modules != null) {
-					int size2 = modules.length;
-					for (int j = 0; j < size2; j++) {
-						if (!set.contains(modules[j])) {
-							if (isSupportedModule(factories[i].getModuleTypes(), modules[j].getModuleType()))
-								set.add(modules[j]);
-							else
-								Trace.trace(Trace.WARNING, "Invalid module returned from factory, ignored: " + modules[j]);
-						}
-					}
-				}
+				if (modules[i] != null && project.equals(modules[i].getProject()))
+					list.add(modules[i]);
 			}
 		}
-		IModule[] modules = new IModule[set.size()];
-		set.toArray(modules);
-		return modules;
+		IModule[] modules2 = new IModule[list.size()];
+		list.toArray(modules2);
+		return modules2;
 	}
 
 	/**
-	 * Returns the module with the given moduleId, if one exists. The moduleId
-	 * must not be null.
-	 * <p>
-	 * This method may trigger bundle loading and is not suitable for
-	 * short/UI operations.
-	 * </p>
+	 * Returns a module from the given moduleId. The moduleId must not be null.
 	 * 
 	 * @param moduleId a module id
 	 * @return the module, or <code>null</code> if the module could not be found
@@ -137,33 +111,30 @@
 		ModuleFactory moduleFactory = ServerPlugin.findModuleFactory(factoryId);
 		if (moduleFactory == null)
 			return null;
-		
+
 		String moduleSubId = moduleId.substring(index+1);
-		return moduleFactory.findModule(moduleSubId, null);
+		IModule module = moduleFactory.getModule(moduleSubId);
+		if (module != null)
+			return module;
+		return null;
 	}
 
 	/**
 	 * Return all the available modules from all factories whose
 	 * type matches the given module types.
-	 * <p>
-	 * This method may trigger bundle loading and is not suitable for
-	 * short/UI operations. It also performs a search of all available
-	 * modules of the given types, and due to performance reasons should
-	 * not be used unless absolutely required.
-	 * </p>
 	 * 
 	 * @param moduleTypes an array of module types
 	 * @return a possibly empty array of modules
 	 */
 	public static IModule[] getModules(IModuleType[] moduleTypes) {
 		List list = new ArrayList();
-		
+
 		ModuleFactory[] factories = ServerPlugin.getModuleFactories();
 		if (factories != null) {
 			int size = factories.length;
 			for (int i = 0; i < size; i++) {
 				if (isSupportedModule(factories[i].getModuleTypes(), moduleTypes)) {
-					IModule[] modules = factories[i].getModules(null);
+					IModule[] modules = factories[i].getModules();
 					if (modules != null) {
 						int size2 = modules.length;
 						for (int j = 0; j < size2; j++)
@@ -180,25 +151,19 @@
 	/**
 	 * Return all the available modules from all factories whose
 	 * type matches the given module type id.
-	 * <p>
-	 * This method may trigger bundle loading and is not suitable for
-	 * short/UI operations. It also performs a search of all available
-	 * modules of this type, and due to performance reasons should not
-	 * be used unless absolutely required.
-	 * </p>
 	 * 
 	 * @param type a module type
 	 * @return a possibly empty array of modules
 	 */
 	public static IModule[] getModules(String type) {
 		List list = new ArrayList();
-		
+
 		ModuleFactory[] factories = ServerPlugin.getModuleFactories();
 		if (factories != null) {
 			int size = factories.length;
 			for (int i = 0; i < size; i++) {
 				if (isSupportedModule(factories[i].getModuleTypes(), type, null)) {
-					IModule[] modules = factories[i].getModules(null);
+					IModule[] modules = factories[i].getModules();
 					if (modules != null) {
 						int size2 = modules.length;
 						for (int j = 0; j < size2; j++)
@@ -217,24 +182,18 @@
 	 * Returns <code>true</code> if any of the given moduleTypes have the given
 	 * module type id and version id.
 	 * 
-	 * @param moduleTypes an array of module types, may not be null
+	 * @param moduleTypes an array of module types
 	 * @param typeId a module type id, or null for any module type
 	 * @param versionId a module version, or null for any version
 	 * @return <code>true</code> if the module type is supported, and
 	 *    <code>false</code> otherwise
 	 */
 	public static boolean isSupportedModule(IModuleType[] moduleTypes, String typeId, String versionId) {
-		if (moduleTypes == null)
-			throw new IllegalArgumentException();
-		
 		if ("".equals(typeId))
 			typeId = null;
 		if ("".equals(versionId))
 			versionId = null;
 		
-		if (typeId == null && versionId == null)
-			return true;
-		
 		if (moduleTypes != null) {
 			int size = moduleTypes.length;
 			for (int i = 0; i < size; i++) {
@@ -260,23 +219,25 @@
 	 * Returns <code>true</code> if any of the given moduleTypes match the given
 	 * module type.
 	 * 
-	 * @param moduleTypes an array of modules types, may not be null
+	 * @param moduleTypes an array of modules types
 	 * @param mt a module type, may not be null
 	 * @return <code>true</code> if the module type is supported, and
 	 *    <code>false</code> otherwise
 	 */
 	public static boolean isSupportedModule(IModuleType[] moduleTypes, IModuleType mt) {
-		if (moduleTypes == null || mt == null)
+		if (mt == null)
 			throw new IllegalArgumentException();
 		
-		int size = moduleTypes.length;
-		for (int i = 0; i < size; i++) {
-			if (isSupportedModule(moduleTypes[i], mt))
-				return true;
+		if (moduleTypes != null) {
+			int size = moduleTypes.length;
+			for (int i = 0; i < size; i++) {
+				if (isSupportedModule(moduleTypes[i], mt))
+					return true;
+			}
 		}
 		return false;
 	}
-
+	
 	private static boolean isSupportedModule(IModuleType moduleType, String type, String version) {
 		String type2 = moduleType.getId();
 		if (matches(type, type2)) {
@@ -288,10 +249,11 @@
 	}
 
 	/**
-	 * Returns true if the two given module types are compatible.
+	 * Returns true if the two given module types are compatible. The moduleTypes may not
+	 * be null.
 	 * 
-	 * @param moduleType a module type, may not be null
-	 * @param mt a module type, may not be null
+	 * @param moduleType a module type
+	 * @param mt a module type
 	 * @return <code>true</code> if the module type is supported, and
 	 *    <code>false</code> otherwise
 	 */
@@ -299,10 +261,12 @@
 		if (moduleType == null || mt == null)
 			throw new IllegalArgumentException();
 		
-		if (matches(mt.getId(), moduleType.getId()) &&
-				matches(mt.getVersion(), moduleType.getVersion()))
-			return true;
-		
+		String type2 = moduleType.getId();
+		if (matches(mt.getId(), type2)) {
+			String version2 = moduleType.getVersion();
+			if (matches(mt.getVersion(), version2))
+				return true;
+		}
 		return false;
 	}
 
@@ -315,11 +279,41 @@
 	}
 
 	/**
+	 * Return all the available modules from all factories.
+	 * 
+	 * @return a possibly empty array of modules
+	 */
+	private static IModule[] getModules() {
+		Set set = new HashSet();
+		
+		ModuleFactory[] factories = ServerPlugin.getModuleFactories();
+		if (factories != null) {
+			int size = factories.length;
+			for (int i = 0; i < size; i++) {
+				IModule[] modules = factories[i].getModules();
+				if (modules != null) {
+					int size2 = modules.length;
+					for (int j = 0; j < size2; j++) {
+						if (!set.contains(modules[j])) {
+							if (isSupportedModule(factories[i].getModuleTypes(), modules[j].getModuleType()))
+								set.add(modules[j]);
+							else
+								Trace.trace(Trace.WARNING, "Invalid module returned from factory, ignored: " + modules[j]);
+						}
+					}
+				}
+			}
+		}
+		IModule[] modules = new IModule[set.size()];
+		set.toArray(modules);
+		return modules;
+	}
+
+	/**
 	 * Adds or removes modules from a server. Will search for the first parent module
 	 * of each module and add it to the server instead. This method will handle multiple
 	 * modules having the same parent (the parent will only be added once), but may not
 	 * handle the case where the same module or parent is being both added and removed.
-	 * Entries in the add or remove arrays may not be null.
 	 * 
 	 * @param server a server
 	 * @param add an array of modules to add, or <code>null</code> to not add any
@@ -330,7 +324,7 @@
 	 */
 	public static void modifyModules(IServerWorkingCopy server, IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException {
 		if (server == null)
-			throw new IllegalArgumentException("Server cannot be null");
+			throw new IllegalArgumentException();
 		
 		if (add == null)
 			add = new IModule[0];
@@ -338,11 +332,6 @@
 			remove = new IModule[0];
 		
 		int size = add.length;
-		for (int i = 0; i < size; i++) {
-			if (add[i] == null)
-				throw new IllegalArgumentException("Cannot add null entries");
-		}
-		
 		List addParentModules = new ArrayList();
 		for (int i = 0; i < size; i++) {
 			boolean found = false;
@@ -363,11 +352,6 @@
 		}
 		
 		size = remove.length;
-		for (int i = 0; i < size; i++) {
-			if (remove[i] == null)
-				throw new IllegalArgumentException("Cannot remove null entries");
-		}
-		
 		List removeParentModules = new ArrayList();
 		for (int i = 0; i < size; i++) {
 			boolean found = false;
@@ -744,9 +728,8 @@
 	 *    or <code>false</code> otherwise
 	 */
 	public static boolean containsModule(IServer server, final IModule module, IProgressMonitor monitor) {
-		if (server == null || module == null)
-			throw new IllegalArgumentException("Arguments cannot be null");
-		
+		if (server == null)
+			return false;
 		Trace.trace(Trace.FINEST, "containsModule() " + server + " " + module);
 		
 		final boolean[] b = new boolean[1];
@@ -815,16 +798,4 @@
 	public static int getMonitoredPort(IServer server, int port, String contentType) {
 		return ServerMonitorManager.getInstance().getMonitoredPort(server, port, contentType);
 	}
-
-	/**
-	 * Returns a scheduling rule to prevent jobs from simultaneously starting,
-	 * publishing, or stopping the same server.
-	 * 
-	 * @param server a server
-	 * @return a scheduling rule for this server
-	 * @since 2.0
-	 */
-	public static ISchedulingRule getServerSchedulingRule(IServer server) {
-		return new ServerSchedulingRule(server);
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Base.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Base.java
index 517278b..8591ed7 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Base.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Base.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 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,7 +10,6 @@
  **********************************************************************/
 package org.eclipse.wst.server.core.internal;
 
-import java.io.BufferedInputStream;
 import java.io.FileInputStream;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -82,25 +81,6 @@
 		return file;
 	}
 
-	/**
-	 * Returns <code>true</code> if the attribute is currently set, and <code>false</code>
-	 * otherwise.
-	 * 
-	 * @param attributeName
-	 * @return <code>true</code> if the attribute is currently set, and <code>false</code>
-	 *    otherwise
-	 */
-	public boolean isAttributeSet(String attributeName) {
-		try {
-			Object obj = map.get(attributeName);
-			if (obj != null)
-				return true;
-		} catch (Exception e) {
-			// ignore
-		}
-		return false;
-	}
-
 	public String getAttribute(String attributeName, String defaultValue) {
 		try {
 			Object obj = map.get(attributeName);
@@ -150,7 +130,7 @@
 		}
 		return defaultValue;
 	}
-
+	
 	public Map getAttribute(String attributeName, Map defaultValue) {
 		try {
 			Object obj = map.get(attributeName);
@@ -256,7 +236,7 @@
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorSaving, getFile().toString()), e));
 		}
 	}
-
+	
 	protected void doSave(IProgressMonitor monitor) throws CoreException {
 		if (file != null)
 			saveToFile(monitor);
@@ -264,11 +244,11 @@
 			saveToMetadata(monitor);
 		ResourceManager.getInstance().resolveServers();
 	}
-
+	
 	protected void saveToMetadata(IProgressMonitor monitor) {
 		// do nothing
 	}
-
+	
 	protected abstract void saveState(IMemento memento);
 
 	protected void load(IMemento memento) {
@@ -334,11 +314,15 @@
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, "Cannot delete a working copy", null));
 		
 		if (file != null)
-			file.delete(true, true, new NullProgressMonitor());
+			deleteFromFile();
 		else
 			deleteFromMetadata();
 	}
 
+	protected void deleteFromFile() throws CoreException {
+		file.delete(true, true, new NullProgressMonitor());
+	}
+
 	protected void deleteFromMetadata() {
 		// do nothing
 	}
@@ -382,17 +366,17 @@
 	 * 
 	 */
 	protected void loadFromPath(IPath path, IProgressMonitor monitor) throws CoreException {
-		InputStream in = null;
+		FileInputStream fin = null;
 		try {
-			in = new BufferedInputStream(new FileInputStream(path.toFile()));
-			IMemento memento = XMLMemento.loadMemento(in);
+			fin = new FileInputStream(path.toFile());
+			IMemento memento = XMLMemento.loadMemento(fin);
 			load(memento);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Could not load from path: " + e.getMessage(), e);
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorLoading, path.toString()), e));
 		} finally {
 			try {
-				in.close();
+				fin.close();
 			} catch (Exception e) {
 				// ignore
 			}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java
index c2cadfd..93763b8 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java
@@ -16,7 +16,6 @@
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.ServerUtil;
 /**
  * A Job that can start another job upon successful completion.
  */
@@ -40,7 +39,7 @@
 	 * @see Job#belongsTo(java.lang.Object)
 	 */
 	public boolean belongsTo(Object family) {
-		return ServerUtil.SERVER_JOB_FAMILY.equals(family);
+		return ServerPlugin.PLUGIN_ID.equals(family);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java
index 70563e7..ececf5b 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java
@@ -59,7 +59,7 @@
 	public String getDescription() {
 		return element.getAttribute("description");
 	}
-
+	
 	protected String getLaunchable() {
 		return element.getAttribute("launchable");
 	}
@@ -117,7 +117,7 @@
 		}
 		return null;
 	}
-
+	
 	/**
 	 * Return a string representation of this object.
 	 * 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java
index 82b5794..36ec2a7 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java
@@ -13,9 +13,7 @@
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.InputStream;
-import java.net.ConnectException;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.zip.ZipEntry;
@@ -118,7 +116,7 @@
 		ISite site = InstallableRuntime.getSite(fromSite, monitor);
 		ISiteFeatureReference[] featureRefs = site.getFeatureReferences();
 		for (int i = 0; i < featureRefs.length; i++) {
-			if (featureId.equals(featureRefs[i].getVersionedIdentifier().getIdentifier()) && featureVersion.equals(featureRefs[i].getVersionedIdentifier().getVersion().toString())) {
+			if (featureId.equals(featureRefs[i].getName()) && featureVersion.equals(featureRefs[i].getVersionedIdentifier().getVersion().toString())) {
 				IFeature feature = featureRefs[i].getFeature(monitor);
 				IURLEntry license = feature.getLicense();
 				if (license != null)
@@ -174,27 +172,24 @@
 		return null;
 	}
 
-	protected static String getMirror(String fromSite, ISite site, int mirror) {
+	public static String getMirror(String fromSite, ISite site) {
 		if (site != null) {
-			String mirrorSite = getMirror(site, mirror);
-			if (mirrorSite != null)
+			String mirrorSite = getMirror(site);
+			if (mirrorSite != null) 
 				return mirrorSite;
 		}
-		// only return fromSite if this is the 0th mirror
-		if (mirror > 0)
-			return null;
 		return fromSite;
 	}
 
-	protected static String getMirror(ISite site, int mirror) {
+	public static String getMirror(ISite site) {
 		// if the site is a site containing mirrors, set the fromSite to the
-		// mirrors in order site since many mirror list generators will sort the mirrors
+		// first mirror site since many mirror list generators will sort the mirrors
 		// to closest geographic location
 		if (site != null && site instanceof ISiteWithMirrors) {
 			try {
 				IURLEntry[] urlEntries = ((ISiteWithMirrors) site).getMirrorSiteEntries();
-				if (urlEntries.length > mirror)
-					return urlEntries[mirror].getURL().toExternalForm();
+				if (urlEntries.length > 0)
+					return urlEntries[0].getURL().toExternalForm();
 			} catch (CoreException e) {
 				Trace.trace(Trace.WARNING, "Could not find mirror site", e);
 			}
@@ -213,9 +208,8 @@
 		if (featureId == null || featureVersion == null || fromSite == null)
 			return;
 		
-		int mirror = 0;
 		ISite site = getSite(fromSite, monitor);
-		fromSite = getMirror(fromSite, site, mirror);
+		fromSite = getMirror(fromSite, site);
 		
 		boolean install = false;
 		if (getBundleId() != null) {
@@ -226,27 +220,18 @@
 		
 		// download and install plugins
 		if (install) {
-			boolean complete = false;
-			while (!complete) {
-				try {
-					monitor.setTaskName("Installing feature");
-					InstallCommand command = new InstallCommand(featureId, featureVersion, fromSite, null, "false");
-					boolean b = command.run(monitor);
-					if (!b)
-						throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
-								Messages.errorInstallingServerFeature, null));
-					command.applyChangesNow();
-					complete = true;
-				} catch (ConnectException ce) {
-					mirror++;
-					fromSite = getMirror(fromSite, site, mirror);
-					if (fromSite == null)
-						complete = true;
-				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error installing feature", e);
+			try {
+				monitor.setTaskName("Installing feature");
+				InstallCommand command = new InstallCommand(featureId, featureVersion, fromSite, null, "false");
+				boolean b = command.run(monitor);
+				if (!b)
 					throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
-							NLS.bind(Messages.errorInstallingServer, e.getLocalizedMessage()), e));
-				}
+							Messages.errorInstallingServerFeature, null));
+				command.applyChangesNow();
+			} catch (Exception e) {
+				Trace.trace(Trace.SEVERE, "Error installing feature", e);
+				throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
+						NLS.bind(Messages.errorInstallingServer, e.getLocalizedMessage()), e));
 			}
 		}
 		
@@ -264,7 +249,28 @@
 			
 			// unzip from bundle into path
 			InputStream in = url.openStream();
-			unzip(in, path, monitor);
+			BufferedInputStream bin = new BufferedInputStream(in);
+			ZipInputStream zin = new ZipInputStream(bin);
+			ZipEntry entry = zin.getNextEntry();
+			byte[] buf = new byte[8192];
+			while (entry != null) {
+				String name = entry.getName();
+				monitor.setTaskName("Unzipping: " + name);
+				
+				if (entry.isDirectory()) {
+					path.append(name).toFile().mkdirs();
+				} else {
+					FileOutputStream fout = new FileOutputStream(path.append(name).toFile());
+					int r = zin.read(buf);
+					while (r >= 0) {
+						fout.write(buf, 0, r);
+						r = zin.read(buf);
+					}
+				}
+				zin.closeEntry();
+				entry = zin.getNextEntry();
+			}
+			zin.close();
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error unzipping runtime", e);
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
@@ -272,32 +278,6 @@
 		} 
 	}
 
-	private void unzip(InputStream in, IPath path, IProgressMonitor monitor) throws IOException {
-		// unzip from bundle into path
-		BufferedInputStream bin = new BufferedInputStream(in);
-		ZipInputStream zin = new ZipInputStream(bin);
-		ZipEntry entry = zin.getNextEntry();
-		byte[] buf = new byte[8192];
-		while (entry != null) {
-			String name = entry.getName();
-			monitor.setTaskName("Unzipping: " + name);
-			
-			if (entry.isDirectory()) {
-				path.append(name).toFile().mkdirs();
-			} else {
-				FileOutputStream fout = new FileOutputStream(path.append(name).toFile());
-				int r = zin.read(buf);
-				while (r >= 0) {
-					fout.write(buf, 0, r);
-					r = zin.read(buf);
-				}
-			}
-			zin.closeEntry();
-			entry = zin.getNextEntry();
-		}
-		zin.close();
-	}
-
 	private String getFeatureArchivePath() {
 		String feature = getFeatureId() + "_" + getFeatureVersion();
 		String platformLoc = Platform.getInstallLocation().getURL().getFile();
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 3b274b5..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
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.wst.server.core.internal;
 
-import java.net.ConnectException;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -127,7 +125,7 @@
 		String featureId = getFeatureId();
 		String featureVersion = getFeatureVersion();
 		String fromSite = getFromSite();
-		
+
 		if (featureId == null || featureVersion == null || fromSite == null)
 			return null;
 		
@@ -145,44 +143,6 @@
 		return null;
 	}
 
-	public IFeature getFeature(IProgressMonitor monitor) {
-		String featureId = getFeatureId();
-		String featureVersion = getFeatureVersion();
-		String fromSite = getFromSite();
-		
-		if (featureId == null || featureVersion == null || fromSite == null)
-			return null;
-		
-		monitor.beginTask("Searching " + fromSite, 100);
-		int mirror = 0;
-		ISite site = InstallableRuntime.getSite(fromSite, ProgressUtil.getSubMonitorFor(monitor, 50));
-		if (site == null)
-			return null;
-		fromSite = InstallableRuntime.getMirror(fromSite, site, mirror);
-		
-		Version latestVersion = new Version(featureVersion);
-		ISiteFeatureReference last = null;
-		try {
-			ISiteFeatureReference[] features = site.getFeatureReferences();
-			for (int i = 0; i < features.length; i++) {
-				if (features[i].getVersionedIdentifier().getIdentifier().equals(featureId)) {
-					Version nextCand = new Version(features[i].getVersionedIdentifier().getVersion().toString());
-					if (nextCand.compareTo(latestVersion) >= 0) {
-						latestVersion = nextCand;
-						last = features[i];
-					}
-				}
-			}
-			if (last != null)
-				return last.getFeature(ProgressUtil.getSubMonitorFor(monitor, 50));
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error searching for latest feature version", e);
-		} finally {
-			monitor.done();
-		}
-		return null;
-	}
-
 	/*
 	 * @see IInstallableServer#install(IProgressMonitor)
 	 */
@@ -194,30 +154,21 @@
 		if (featureId == null || featureVersion == null || fromSite == null)
 			return;
 		
-		int mirror = 0;
 		ISite site = InstallableRuntime.getSite(fromSite, monitor);
-		fromSite = InstallableRuntime.getMirror(fromSite, site, mirror);
+		fromSite = InstallableRuntime.getMirror(fromSite, site);
 		featureVersion = getLatestVersion(site, featureVersion, featureId);
 		
-		boolean complete = false;
-		while (!complete) {
-			try {
-				InstallCommand command = new InstallCommand(featureId, featureVersion, fromSite, null, "false");
-				boolean b = command.run(monitor);
-				if (!b)
-					throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
-							Messages.errorInstallingServerFeature, null));
-				//command.applyChangesNow();
-			} catch (ConnectException ce) {
-				mirror++;
-				fromSite = InstallableRuntime.getMirror(fromSite, site, mirror);
-				if (fromSite == null)
-					complete = true;
-			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error installing feature", e);
+		try {
+			InstallCommand command = new InstallCommand(featureId, featureVersion, fromSite, null, "false");
+			boolean b = command.run(monitor);
+			if (!b)
 				throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
-						NLS.bind(Messages.errorInstallingServer, e.getLocalizedMessage()), e));
-			}
+						Messages.errorInstallingServerFeature, null));
+			//command.applyChangesNow();
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error installing feature", e);
+			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
+					NLS.bind(Messages.errorInstallingServer, e.getLocalizedMessage()), e));
 		}
 		
 		try {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/LaunchableAdapter.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/LaunchableAdapter.java
index 377199a..6af7ca1 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/LaunchableAdapter.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/LaunchableAdapter.java
@@ -10,7 +10,6 @@
  **********************************************************************/
 package org.eclipse.wst.server.core.internal;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 
 import org.eclipse.wst.server.core.IModuleArtifact;
@@ -56,11 +55,9 @@
 	/**
 	 * @see ILaunchableAdapter#getLaunchable(IServer, IModuleArtifact)
 	 */
-	public Object getLaunchable(IServer server, IModuleArtifact object) throws CoreException {
+	public Object getLaunchable(IServer server, IModuleArtifact object) {
 		try {
 			return getDelegate().getLaunchable(server, object);
-		} catch (CoreException ce) {
-			throw ce;
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + e.getMessage());
 			return null;
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 1a71d4b..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
@@ -62,8 +62,7 @@
 	public static String jobRestartingServer;
 	public static String jobUpdateServer;
 	public static String jobInstallingRuntime;
-	public static String errorMissingAdapter;
-
+	
 	static {
 		NLS.initializeMessages(ServerPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Messages.properties b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Messages.properties
index c345d4e..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
@@ -53,8 +53,8 @@
 defaultServerProjectName=Servers{0}
 defaultRuntimeName={0}
 defaultRuntimeName2={0} ({1})
-defaultServerName={0} at {1}
-defaultServerName2={0} at {1} ({2})
+defaultServerName={0} @ {1}
+defaultServerName2={0} @ {1} ({2})
 defaultServerName3={0}
 defaultServerName4={0} ({1})
 
@@ -71,4 +71,3 @@
 errorPublishNoConfiguration=Cannot publish to the server because the configuration is missing.
 errorStopAlreadyStopped=The server cannot be stopped because it is already stopped.
 errorRestartModule=The module cannot be restarted.
-errorMissingAdapter=Could not load server adapter. Check to make sure that the installation is complete.
\ No newline at end of file
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 da6c864..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
@@ -57,7 +57,7 @@
 	/**
 	 * Returns the id of this module.
 	 *
-	 * @return the id
+	 * @return java.lang.String
 	 */
 	public String getId() {
 		return id2;
@@ -66,7 +66,7 @@
 	/**
 	 * Returns the internal (partial) id of this module.
 	 *
-	 * @return the partial id
+	 * @return the id
 	 */
 	public String getInternalId() {
 		return id;
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
index 3d41df8..8eaaf83 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,9 +10,9 @@
  *******************************************************************************/
 package org.eclipse.wst.server.core.internal;
 
+import java.util.ArrayList;
 import java.util.List;
 
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProgressMonitor;
 
@@ -27,6 +27,8 @@
 	private IConfigurationElement element;
 	public ModuleFactoryDelegate delegate;
 	private List moduleTypes;
+	
+	private List modules;
 
 	/**
 	 * ModuleFactory constructor comment.
@@ -46,7 +48,7 @@
 	public String getId() {
 		return element.getAttribute("id");
 	}
-
+	
 	/**
 	 * Returns the index (ordering) of this task.
 	 *
@@ -59,7 +61,7 @@
 			return -1;
 		}
 	}
-
+	
 	/**
 	 * Return the supported module types.
 	 * 
@@ -68,12 +70,12 @@
 	public IModuleType[] getModuleTypes() {
 		if (moduleTypes == null)
 			moduleTypes = ServerPlugin.getModuleTypes(element.getChildren("moduleType"));
-		
+
 		IModuleType[] mt = new IModuleType[moduleTypes.size()];
 		moduleTypes.toArray(mt);
 		return mt;
 	}
-
+	
 	/**
 	 * Returns true if this modules factory produces project modules.
 	 *
@@ -89,10 +91,10 @@
 	public ModuleFactoryDelegate getDelegate(IProgressMonitor monitor) {
 		if (delegate == null) {
 			try {
-				long time = System.currentTimeMillis();
 				delegate = (ModuleFactoryDelegate) element.createExecutableExtension("class");
+				//delegate.initialize(this);
 				InternalInitializer.initializeModuleFactoryDelegate(delegate, this, monitor);
-				Trace.trace(Trace.PERFORMANCE, "ModuleFactory.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getId());
+				//ResourceManager.getInstance().addModuleFactoryListener(delegate);
 			} catch (Throwable t) {
 				Trace.trace(Trace.SEVERE, "Could not create delegate " + toString() + ": " + t.getMessage());
 			}
@@ -101,46 +103,50 @@
 	}
 
 	/*
-	 * @see ModuleFactoryDelegate#getModules()
+	 * @see
+	 */
+	public IModule getModule(String id) {
+		IModule[] modules2 = getModules();
+		if (modules2 != null) {
+			int size = modules2.length;
+			for (int i = 0; i < size; i++) {
+				Module module = (Module) modules2[i];
+				if (id.equals(module.getInternalId()))
+					return module;
+			}
+		}
+		return null;
+	}
+
+	public void clearModuleCache() {
+		modules = null;
+	}
+
+	/*
+	 * @see
 	 */
 	public IModule[] getModules() {
-		return getModules(null);
-	}
-
-	/*
-	 * @see ModuleFactoryDelegate#getModules()
-	 */
-	public IModule[] getModules(IProgressMonitor monitor) {
-		try {
-			return getDelegate(monitor).getModules();
-		} catch (Throwable t) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), t);
-			return new IModule[0];
+		//Trace.trace(Trace.FINER, "getModules() > " + this);
+		if (modules == null) {
+			try {
+				modules = new ArrayList();
+				IModule[] modules2 = getDelegate(null).getModules();
+				if (modules2 != null) {
+					int size = modules2.length;
+					for (int i = 0; i < size; i++)
+						modules.add(modules2[i]);
+				}
+			} catch (Throwable t) {
+				Trace.trace(Trace.SEVERE, "Error calling delegate " + toString() + ": " + t.getMessage());
+				return null;
+			}
 		}
-	}
-
-	/*
-	 * @see ModuleFactoryDelegate#getModules(IProject)
-	 */
-	public IModule[] getModules(IProject project, IProgressMonitor monitor) {
-		try {
-			return getDelegate(monitor).getModules(project);
-		} catch (Throwable t) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), t);
-			return new IModule[0];
-		}
-	}
-
-	/*
-	 * @see ModuleFactoryDelegate#findModule(String)
-	 */
-	public IModule findModule(String id, IProgressMonitor monitor) {
-		try {
-			return getDelegate(monitor).findModule(id);
-		} catch (Throwable t) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), t);
-			return null;
-		}
+		
+		//Trace.trace(Trace.FINER, "getModules() < " + this);
+		
+		IModule[] m = new IModule[modules.size()];
+		modules.toArray(m);
+		return m;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java
index ea09a4d..5555635 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.wst.server.core.internal;
 
-import java.io.File;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -46,7 +45,7 @@
 			new ModuleProperties();
 		return instance;
 	}
-
+	
 	/**
 	 * Load the data.
 	 */
@@ -54,8 +53,6 @@
 		Trace.trace(Trace.FINEST, "Loading module info");
 		String filename = ServerPlugin.getInstance().getStateLocation().append(MODULE_DATA_FILE).toOSString();
 		modules = new HashMap();
-		if (!(new File(filename).exists()))
-			return;
 		
 		try {
 			IMemento memento = XMLMemento.loadMemento(filename);
@@ -72,23 +69,23 @@
 			Trace.trace(Trace.WARNING, "Could not load servers: " + e.getMessage());
 		}
 	}
-
+	
 	private void save(IProgressMonitor monitor) throws CoreException {
 		String filename = ServerPlugin.getInstance().getStateLocation().append(MODULE_DATA_FILE).toOSString();
 		
 		try {
 			XMLMemento memento = XMLMemento.createWriteRoot("modules");
-			
+
 			Iterator iterator = modules.keySet().iterator();
 			while (iterator.hasNext()) {
 				String moduleId = (String) iterator.next();
 				String serverId = (String) modules.get(moduleId);
-				
+
 				IMemento child = memento.createChild("module");
 				child.putString("moduleId", moduleId);
 				child.putString("serverId", serverId);
 			}
-			
+
 			memento.saveToFile(filename);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Could not save servers", e);
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 c3d4afc..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
@@ -10,9 +10,6 @@
  **********************************************************************/
 package org.eclipse.wst.server.core.internal;
 
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
 import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.wst.server.core.IModule;
@@ -30,6 +27,7 @@
 	private static final String NAME = "name";
 	private static final String MODULE_TYPE_ID = "module-type-id";
 	private static final String MODULE_TYPE_VERSION = "module-type-version";
+	private static final String PATH = "path";
 	private static final String STAMP = "stamp";
 	private static final String FILE = "file";
 	private static final String FOLDER = "folder";
@@ -70,18 +68,6 @@
 		load(memento);
 	}
 
-	/**
-	 * ModulePublishInfo constructor.
-	 * 
-	 * @param in an input stream
-	 * @throws IOException if the load fails
-	 */
-	public ModulePublishInfo(DataInput in) throws IOException {
-		super();
-		
-		load(in);
-	}
-
 	public String getModuleId() {
 		return moduleId;
 	}
@@ -103,11 +89,11 @@
 	}
 
 	/**
-	 * Used only for reading from WTP 1.x workspaces.
+	 * 
 	 */
 	protected void load(IMemento memento) {
 		Trace.trace(Trace.FINEST, "Loading module publish info for: " + memento);
-		
+	
 		try {
 			moduleId = memento.getString(MODULE_ID);
 			name = memento.getString(NAME);
@@ -122,9 +108,6 @@
 		}
 	}
 
-	/**
-	 * Used only for reading from WTP 1.x workspaces.
-	 */
 	protected IModuleResource[] loadResource(IMemento memento, IPath path) {
 		if (memento == null)
 			return new IModuleResource[0];
@@ -160,89 +143,44 @@
 		return resources2;
 	}
 
-	protected void load(DataInput in) throws IOException {
-		Trace.trace(Trace.FINEST, "Loading module publish info");
-		
-		moduleId = in.readUTF();
-		byte b = in.readByte();
-		
-		if ((b & 1) != 0)
-			name = in.readUTF();
-		else
-			name = null;
-		
-		if ((b & 2) != 0) {
-			String mt = in.readUTF();
-			String mv = in.readUTF();
-			if (mt != null && mt.length() > 0)
-				moduleType = new ModuleType(mt, mv);
-		} else
-			moduleType = null;
-		
-		resources = loadResource(in, new Path(""));
-	}
-
-	private IModuleResource[] loadResource(DataInput in, IPath path) throws IOException {
-		int size = in.readInt();
-		IModuleResource[] resources2 = new IModuleResource[size];
-		
-		for (int i = 0; i < size; i++) {
-			byte b = in.readByte();
-			if (b == 0) {
-				String name2 = in.readUTF();
-				long stamp = in.readLong();
-				resources2[i] = new ModuleFile(name2, path, stamp);
-			} else if (b == 1) {
-				String name2 = in.readUTF();
-				ModuleFolder folder = new ModuleFolder(null, name2, path);
-				folder.setMembers(loadResource(in, path.append(name2)));
-				resources2[i] = folder;
-			}
-		}
-		
-		return resources2;
-	}
-
-	protected void save(DataOutput out) {
+	/**
+	 * 
+	 */
+	protected void save(IMemento memento) {
 		try {
-			out.writeUTF(moduleId);
-			byte b = 0;
+			memento.putString(MODULE_ID, moduleId);
 			if (name != null)
-				b &= 1;
-			if (moduleType != null)
-				b &= 2;
-			out.writeByte(b);
-			
-			if (name != null)
-				out.writeUTF(name);
+				memento.putString(NAME, name);
 			
 			if (moduleType != null) {
-				out.writeUTF(moduleType.getId());
-				out.writeUTF(moduleType.getVersion());
+				memento.putString(MODULE_TYPE_ID, moduleType.getId());
+				memento.putString(MODULE_TYPE_VERSION, moduleType.getVersion());
 			}
-			saveResource(out, resources);
+			
+			saveResource(memento, resources);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Could not save module publish info", e);
 		}
 	}
 
-	protected void saveResource(DataOutput out, IModuleResource[] resources2) throws IOException {
+	protected void saveResource(IMemento memento, IModuleResource[] resources2) {
 		if (resources2 == null)
 			return;
 		int size = resources2.length;
-		out.writeInt(0);
 		for (int i = 0; i < size; i++) {
 			if (resources2[i] instanceof IModuleFile) {
 				IModuleFile file = (IModuleFile) resources2[i];
-				out.writeByte(0);
-				out.writeUTF(file.getName());
-				out.writeLong(file.getModificationStamp());
+				IMemento child = memento.createChild(FILE);
+				child.putString(NAME, file.getName());
+				child.putString(PATH, file.getModuleRelativePath().toPortableString());
+				child.putString(STAMP, "" + file.getModificationStamp());
 			} else {
 				IModuleFolder folder = (IModuleFolder) resources2[i];
-				out.writeByte(1);
-				out.writeUTF(folder.getName());
+				IMemento child = memento.createChild(FOLDER);
+				child.putString(NAME, folder.getName());
+				child.putString(PATH, folder.getModuleRelativePath().toPortableString());
 				IModuleResource[] resources3 = folder.members();
-				saveResource(out, resources3);
+				saveResource(child, resources3);
 			}
 		}
 	}
@@ -253,8 +191,6 @@
 	protected void startCaching() {
 		useCache = true;
 		currentResources = null;
-		delta = null;
-		hasDelta = false;
 	}
 
 	/**
@@ -263,9 +199,6 @@
 	 * @param module
 	 */
 	private void fillCache(IModule[] module) {
-		if (!useCache)
-			return;
-		
 		if (currentResources != null)
 			return;
 		
@@ -292,7 +225,6 @@
 		useCache = false;
 		currentResources = null;
 		delta = null;
-		hasDelta = false;
 	}
 
 	protected IModuleResource[] getModuleResources(IModule[] module) {
@@ -385,19 +317,6 @@
 		}
 	}
 
-	/**
-	 * Return a deleted module that represents this module.
-	 * 
-	 * @return a module
-	 */
-	protected IModule getDeletedModule() {
-		String id = moduleId;
-		int index = id.lastIndexOf("#");
-		if (index > 0)
-			id = id.substring(index+1);
-		return new DeletedModule(id, name, moduleType);
-	}
-
 	public String toString() {
 		return "ModulePublishInfo [" + moduleId + "]";
 	}
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/ProjectProperties.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java
index 0900f7f..d8310b4 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java
@@ -27,7 +27,7 @@
 /**
  * Helper class that stores preference information for the server tools.
  * 
- * This class currently always reads from disk. It should cache the file
+ * TODO: Currently this class always reads from disk. It should cache the file
  * and have a resource listener.
  */
 public class ProjectProperties {
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 f489a33..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
@@ -65,16 +65,15 @@
 		// have we tried loading yet?
 		String serverId = server.getId();
 		if (serverIdToPath.containsKey(serverId)) {
-			if (serverIdToPublishInfo.containsKey(serverId))
-				return (ServerPublishInfo) serverIdToPublishInfo.get(serverId);
-			
-			// force .dat extension
-			String partialPath = (String) serverIdToPath.get(serverId);
-			partialPath = partialPath.substring(0, partialPath.length() - 3) + "dat";
-			IPath path = ServerPlugin.getInstance().getStateLocation().append(PUBLISH_DIR).append(partialPath);
-			ServerPublishInfo spi = new ServerPublishInfo(path);
-			serverIdToPublishInfo.put(serverId, spi);
-			return spi;
+			if (!serverIdToPublishInfo.containsKey(serverId)) {
+				String partialPath = (String) serverIdToPath.get(serverId);
+				IPath path = ServerPlugin.getInstance().getStateLocation().append(PUBLISH_DIR).append(partialPath);
+				ServerPublishInfo spi = new ServerPublishInfo(path);
+				serverIdToPublishInfo.put(serverId, spi);
+				return spi;
+			}
+			// already loaded
+			return (ServerPublishInfo) serverIdToPublishInfo.get(serverId); 
 		}
 		
 		// first time server is being used
@@ -89,7 +88,7 @@
 		ServerPublishInfo spi = null;
 		synchronized (PUBLISH_DIR) {
 			while (file == null || file.exists()) {
-				partialPath = "publish" + i + ".dat";
+				partialPath = "publish" + i + ".xml";
 				path = ServerPlugin.getInstance().getStateLocation().append(PUBLISH_DIR).append(partialPath);
 				if (serverIdToPath.get(partialPath) == null)
 					file = new File(path.toOSString());
@@ -122,13 +121,8 @@
 			serverIdToPublishInfo.remove(serverId);
 			save();
 		}
-		if (path2 != null) {
+		if (path2 != null)
 			path.append(path2).toFile().delete();
-			path2 = path2.substring(0, path2.length() - 3) + "xml";
-			path.append(path2).toFile().delete();
-			path2 = path2.substring(0, path2.length() - 3) + "dat";
-			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 9cd95f6..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
@@ -31,7 +31,7 @@
 	 * 
 	 * @param server the server to publish to
 	 * @param kind the kind of publish
-	 * @param check to check if autopublishing is already covering the publish
+	 * @param check
 	 */
 	public PublishServerJob(IServer server, int kind, boolean check) {
 		super(NLS.bind(Messages.publishing, server.getName()), server);
@@ -40,7 +40,77 @@
 		
 		IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
 		
-		// 102227 - lock entire workspace during publish		
+		// 102227 - lock entire workspace during publish
+		// TODO will have to revisit post 0.7 to determine if there is a better way to
+		// do this, since it would be preferrable not to lock the entire workspace, and
+		// therefore allow multiple servers to publish at once
+		
+		// find all projects that modules are in
+		/*List projectList = new ArrayList();
+		Iterator iterator = ((Server)server).getAllModules().iterator();
+		while (iterator.hasNext()) {
+			IModule[] modules = (IModule[]) iterator.next();
+			IProject project = modules[modules.length - 1].getProject();
+			if (project != null && !projectList.contains(project))
+				projectList.add(project);
+		}
+		
+		// add dependant projects
+		iterator = projectList.iterator();
+		List depProjectList = new ArrayList(); // use to avoid concurrent modification
+		while (iterator.hasNext()) {
+			IProject project = (IProject) iterator.next();
+			try {
+				IProject[] refs = project.getDescription().getReferencedProjects();
+				if (refs != null) {
+					int size = refs.length;
+					for (int i = 0; i < size; i++)
+						if (refs[i] != null && !projectList.contains(refs[i]) && !depProjectList.contains(refs[i]))
+							depProjectList.add(refs[i]);
+				}
+			} catch (CoreException ce) {
+				Trace.trace(Trace.WARNING, "Could not compute referenced projects", ce);
+			}
+		}
+		
+		iterator = depProjectList.iterator();
+		while (iterator.hasNext()) {
+			projectList.add(iterator.next());
+		}
+		
+		// combine and build all the rules
+		List list = new ArrayList();
+		iterator = projectList.iterator();
+		while (iterator.hasNext()) {
+			IProject project = (IProject) iterator.next();
+			ISchedulingRule rule = ruleFactory.createRule(project);
+			if (rule != null && !list.contains(rule))
+				list.add(rule);
+			
+			rule = ruleFactory.modifyRule(project);
+			if (rule != null && !list.contains(rule))
+				list.add(rule);
+			
+			rule = ruleFactory.validateEditRule(new IResource[] { project });
+			if (rule != null && !list.contains(rule))
+				list.add(rule);
+			
+			rule = ruleFactory.markerRule(project);
+			if (rule != null && !list.contains(rule))
+				list.add(rule);
+			
+			rule = ruleFactory.refreshRule(project);
+			if (rule != null && !list.contains(rule))
+				list.add(rule);
+		}
+		
+		int size = list.size();
+		ISchedulingRule[] rules = new ISchedulingRule[size + 1];
+		for (int i = 0; i < size; i++)
+			rules[i] = (ISchedulingRule) list.get(i);
+		
+		rules[size] = new ServerSchedulingRule(server);*/
+		
 		ISchedulingRule[] rules = new ISchedulingRule[2];
 		rules[0] = ruleFactory.createRule(ResourcesPlugin.getWorkspace().getRoot());
 		rules[1] = new ServerSchedulingRule(server);
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
index ed09e77..ec9fbd5 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
@@ -64,16 +64,14 @@
 	public PublishTaskDelegate getDelegate() {
 		if (delegate == null) {
 			try {
-				long time = System.currentTimeMillis();
 				delegate = (PublishTaskDelegate) element.createExecutableExtension("class");
-				Trace.trace(Trace.PERFORMANCE, "PublishTask.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getId());
 			} catch (Throwable t) {
 				Trace.trace(Trace.SEVERE, "Could not create delegate" + toString() + ": " + t.getMessage());
 			}
 		}
 		return delegate;
 	}
-
+	
 	/*
 	 * @see
 	 */
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
index fc2c734..f47347c 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,7 +46,7 @@
 	// lifecycle listeners
 	protected transient List runtimeListeners;
 	protected transient List serverListeners;
-
+	
 	// cache for disposing servers & runtimes
 	protected List activeBundles;
 
@@ -55,12 +55,6 @@
 	private Preferences.IPropertyChangeListener pcl;
 	protected boolean ignorePreferenceChanges = false;
 
-	protected List moduleServerEventHandlers;
-	protected List moduleServerEventHandlerIndexes;
-
-	private static boolean initialized;
-	private static boolean initializing;
-
 	/**
 	 * Server resource change listener.
 	 * 
@@ -75,7 +69,7 @@
 	 *    attached to the project at this point - OTI defect)
 	 * 2. Projects being deleted.
 	 */
-	protected class ServerResourceChangeListener implements IResourceChangeListener {
+	public class ServerResourceChangeListener implements IResourceChangeListener {
 		/**
 		 * Create a new ServerResourceChangeListener.
 		 */
@@ -160,6 +154,9 @@
 			}
 		}
 	}
+	
+	protected List moduleServerEventHandlers;
+	protected List moduleServerEventHandlerIndexes;
 
 	/**
 	 * Cannot directly create a ResourceManager. Use
@@ -168,49 +165,11 @@
 	private ResourceManager() {
 		super();
 		instance = this;
+		
+		init();
 	}
 
-	/**
-	 * Execute the server startup extension points.
-	 */
-	private static synchronized void executeStartups() {
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .startup extension point ->-");
-		IExtensionRegistry registry = Platform.getExtensionRegistry();
-		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "internalStartup");
-		
-		int size = cf.length;
-		for (int i = 0; i < size; i++) {
-			try {
-				IStartup startup = (IStartup) cf[i].createExecutableExtension("class");
-				try {
-					startup.startup();
-				} catch (Exception ex) {
-					Trace.trace(Trace.SEVERE, "Startup failed" + startup.toString(), ex);
-				}
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded startup: " + cf[i].getAttribute("id"));
-			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load startup: " + cf[i].getAttribute("id"), t);
-			}
-		}
-		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .startup extension point -<-");
-	}
-
-	protected synchronized void init() {
-		if (initialized || initializing)
-			return;
-		
-		initializing = true;
-		
-		// see who's triggering API startup
-		/*try {
-			throw new NumberFormatException();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}*/
-		
-		executeStartups();
-		
+	protected void init() {
 		servers = new ArrayList();
 		activeBundles = new ArrayList();
 		loadRuntimesList();
@@ -247,17 +206,15 @@
 		}
 		
 		addServerLifecycleListener(ServerListener.getInstance());
-		
-		initialized = true;
 	}
-
+	
 	/**
 	 * Load all of the servers and server configurations from the given project.
 	 */
 	protected static void loadFromProject(IProject project) {
 		Trace.trace(Trace.FINER, "Initial server resource load for " + project.getName(), null);
 		final ResourceManager rm = ResourceManager.getInstance();
-		
+	
 		try {
 			project.accept(new IResourceProxyVisitor() {
 				public boolean visit(IResourceProxy proxy) {
@@ -311,9 +268,6 @@
 	}
 
 	protected void shutdownBundle(String id) {
-		if (!initialized)
-			return;
-		
 		// dispose servers
 		Iterator iterator = servers.iterator();
 		while (iterator.hasNext()) {
@@ -410,9 +364,6 @@
 		if (runtime == null)
 			return;
 		
-		if (!initialized)
-			init();
-		
 		Trace.trace(Trace.RESOURCES, "Deregistering runtime: " + runtime.getName());
 		
 		runtimes.remove(runtime);
@@ -429,9 +380,6 @@
 		if (server == null)
 			return;
 		
-		if (!initialized)
-			init();
-		
 		Trace.trace(Trace.RESOURCES, "Deregistering server: " + server.getName());
 		
 		((Server) server).deleteMetadata();
@@ -507,11 +455,11 @@
 			Iterator iterator = runtimes.iterator();
 			while (iterator.hasNext()) {
 				Runtime runtime = (Runtime) iterator.next();
-				
+
 				IMemento child = memento.createChild("runtime");
 				runtime.save(child);
 			}
-			
+
 			String xmlString = memento.saveToString();
 			Preferences prefs = ServerPlugin.getInstance().getPluginPreferences();
 			prefs.setValue("runtimes", xmlString);
@@ -521,27 +469,27 @@
 		}
 		ignorePreferenceChanges = false;
 	}
-
+	
 	protected void saveServersList() {
 		String filename = ServerPlugin.getInstance().getStateLocation().append(SERVER_DATA_FILE).toOSString();
 		
 		try {
 			XMLMemento memento = XMLMemento.createWriteRoot("servers");
-			
+
 			Iterator iterator = servers.iterator();
 			while (iterator.hasNext()) {
 				Server server = (Server) iterator.next();
-				
+
 				IMemento child = memento.createChild("server");
 				server.save(child);
 			}
-			
+
 			memento.saveToFile(filename);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Could not save servers", e);
 		}
 	}
-
+	
 	protected void loadRuntimesList() {
 		Trace.trace(Trace.FINEST, "Loading runtime info");
 		Preferences prefs = ServerPlugin.getInstance().getPluginPreferences();
@@ -552,7 +500,7 @@
 			try {
 				ByteArrayInputStream in = new ByteArrayInputStream(xmlString.getBytes("UTF-8"));
 				IMemento memento = XMLMemento.loadMemento(in);
-				
+		
 				IMemento[] children = memento.getChildren("runtime");
 				int size = children.length;
 				
@@ -566,7 +514,7 @@
 			}
 		}
 	}
-
+	
 	protected void loadServersList() {
 		Trace.trace(Trace.FINEST, "Loading server info");
 		String filename = ServerPlugin.getInstance().getStateLocation().append(SERVER_DATA_FILE).toOSString();
@@ -595,14 +543,10 @@
 			}
 		}
 	}
-
+	
 	protected void addRuntime(IRuntime runtime) {
 		if (runtime == null)
 			return;
-		
-		if (!initialized)
-			init();
-		
 		if (!runtimes.contains(runtime))
 			registerRuntime(runtime);
 		else
@@ -612,9 +556,6 @@
 	}
 
 	protected void removeRuntime(IRuntime runtime) {
-		if (!initialized)
-			init();
-		
 		if (runtimes.contains(runtime)) {
 			deregisterRuntime(runtime);
 			saveRuntimesList();
@@ -623,12 +564,6 @@
 	}
 
 	protected void addServer(IServer server) {
-		if (server == null)
-			return;
-		
-		if (!initialized)
-			init();
-		
 		if (!servers.contains(server))
 			registerServer(server);
 		else
@@ -638,9 +573,6 @@
 	}
 
 	protected void removeServer(IServer server) {
-		if (!initialized)
-			init();
-		
 		if (servers.contains(server)) {
 			deregisterServer(server);
 			saveServersList();
@@ -654,9 +586,6 @@
 	 * @return an array of runtimes
 	 */
 	public IRuntime[] getRuntimes() {
-		if (!initialized)
-			init();
-		
 		List list = new ArrayList(runtimes);
 		
 		IRuntime[] r = new IRuntime[list.size()];
@@ -673,10 +602,7 @@
 	public IRuntime getRuntime(String id) {
 		if (id == null)
 			throw new IllegalArgumentException();
-		
-		if (!initialized)
-			init();
-		
+
 		Iterator iterator = runtimes.iterator();
 		while (iterator.hasNext()) {
 			IRuntime runtime = (IRuntime) iterator.next();
@@ -686,10 +612,27 @@
 		return null;
 	}
 
+	/**
+	 * Returns the default runtime. Test API - do not use.
+	 * 
+	 * @deprecated will be removed
+	 * @return java.util.List
+	 */
+	public IRuntime getDefaultRuntime() {
+		return null;
+	}
+
+	/**
+	 * Sets the default runtime. Test API - do not use.
+	 * 
+	 * @deprecated will be removed
+	 * @param runtime a runtime
+	 */
+	public void setDefaultRuntime(IRuntime runtime) {
+		// ignore
+	}
+
 	public void resolveRuntimes() {
-		if (!initialized)
-			init();
-		
 		Iterator iterator = runtimes.iterator();
 		while (iterator.hasNext()) {
 			Runtime runtime = (Runtime) iterator.next();
@@ -698,9 +641,6 @@
 	}
 
 	public void resolveServers() {
-		if (!initialized)
-			init();
-		
 		Iterator iterator = servers.iterator();
 		while (iterator.hasNext()) {
 			Server server = (Server) iterator.next();
@@ -714,12 +654,17 @@
 	 * @return an array containing all servers
 	 */
 	public IServer[] getServers() {
-		if (!initialized)
-			init();
-		
 		IServer[] servers2 = new IServer[servers.size()];
 		servers.toArray(servers2);
 		
+		Arrays.sort(servers2, new Comparator() {
+			public int compare(Object o1, Object o2) {
+				IServer a = (IServer) o1;
+				IServer b = (IServer) o2;
+				return a.getName().compareToIgnoreCase(b.getName());
+			}
+		});
+		
 		return servers2;
 	}
 
@@ -730,9 +675,6 @@
 	 * @return a server
 	 */
 	public IServer getServer(String id) {
-		if (!initialized)
-			init();
-		
 		if (id == null)
 			throw new IllegalArgumentException();
 	
@@ -968,19 +910,18 @@
 		// process module changes
 		ProjectModuleFactoryDelegate.handleGlobalProjectChange(project, delta);
 		
-		IModule[] modules = ServerUtil.getModules(project);
-		if (modules == null)
+		final IModule module = ServerUtil.getModule(project);
+		if (module == null)
 			return;
 		
 		Trace.trace(Trace.FINEST, "- publishHandleProjectChange");
 		
 		IServer[] servers2 = getServers();
-		int size = modules.length;
-		int size2 = servers2.length;
-		for (int i = 0; i < size; i++) {
-			for (int j = 0; j < size2; j++) {
-				if (servers2[j].getAdapter(ServerDelegate.class) != null)
-					((Server) servers2[j]).handleModuleProjectChange(modules[i]);
+		if (servers2 != null) {
+			int size = servers2.length;
+			for (int i = 0; i < size; i++) {
+			if (servers2[i].getAdapter(ServerDelegate.class) != null)
+				((Server) servers2[i]).handleModuleProjectChange(module);
 			}
 		}
 		Trace.trace(Trace.FINEST, "< publishHandleProjectChange");
@@ -1034,12 +975,9 @@
 	protected void registerRuntime(IRuntime runtime) {
 		if (runtime == null)
 			return;
-		
-		if (!initialized)
-			init();
-		
+	
 		Trace.trace(Trace.RESOURCES, "Registering runtime: " + runtime.getName());
-		
+	
 		runtimes.add(runtime);
 		fireRuntimeEvent(runtime, EVENT_ADDED);
 		
@@ -1057,12 +995,9 @@
 	protected void registerServer(IServer server) {
 		if (server == null)
 			return;
-		
-		if (!initialized)
-			init();
-		
+	
 		Trace.trace(Trace.RESOURCES, "Registering server: " + server.getName());
-		
+	
 		servers.add(server);
 		fireServerEvent(server, EVENT_ADDED);
 		
@@ -1075,8 +1010,4 @@
 	protected void fireModuleServerEvent(ModuleFactoryEvent[] factoryEvents, ModuleEvent[] events) {
 		// do nothing
 	}
-
-	public String toString() {
-		return "Server resource manager";
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java
index db2d88f..5aa34b0 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java
@@ -174,6 +174,7 @@
 		int timestamp = getTimestamp();
 		map.put(PROP_TIMESTAMP, Integer.toString(timestamp+1));
 		
+		IRuntime origRuntime = runtime;
 		if (runtime == null)
 			runtime = new Runtime(file);
 		
@@ -189,9 +190,63 @@
 		runtime.saveToMetadata(monitor);
 		wch.setDirty(false);
 		
+		if (oldId != null)
+			updateRuntimeReferences(oldId, name, origRuntime);
+		
 		return runtime;
 	}
 
+	protected void updateRuntimeReferences(final String oldId, final String newId, final IRuntime origRuntime) {
+		// TODO fix me
+		/*class UpdateRuntimeReferencesJob extends Job {
+			public UpdateRuntimeReferencesJob() {
+				super(NLS.bind(Messages.savingTask, newId));
+			}
+
+			public IStatus run(IProgressMonitor monitor) {
+				// fix .runtime files
+				IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+				if (projects != null) {
+					int size = projects.length;
+					for (int i = 0; i < size; i++) {
+						ProjectProperties props = (ProjectProperties) ServerCore.getProjectProperties(projects[i]);
+						if (oldId.equals(props.getRuntimeTargetId())) {
+							try {
+								props.setRuntimeTargetId(newId, monitor);
+							} catch (Exception e) {
+								Trace.trace(Trace.SEVERE, "Error setting runtime target", e);
+							}
+						}
+					}
+				}
+				
+				// save servers
+				if (runtime != null) {
+					ResourceManager rm = ResourceManager.getInstance();
+					IServer[] servers = rm.getServers();
+					if (servers != null) {
+						int size = servers.length;
+						for (int i = 0; i < size; i++) {
+							if (oldId.equals(((Server)servers[i]).getRuntimeId())) {
+								try {
+									ServerWorkingCopy wc = (ServerWorkingCopy) servers[i].createWorkingCopy();
+									wc.setRuntimeId(newId);
+									wc.save(false, monitor);
+								} catch (Exception e) {
+									// ignore
+								}
+							}
+						}
+					}
+				}
+				
+				return new Status(IStatus.OK, ServerPlugin.PLUGIN_ID, 0, "", null);
+			}
+		}
+		UpdateRuntimeReferencesJob job = new UpdateRuntimeReferencesJob();
+		job.schedule();*/
+	}
+
 	protected RuntimeDelegate getWorkingCopyDelegate(IProgressMonitor monitor) {
 		if (workingCopyDelegate != null)
 			return workingCopyDelegate;
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 c8c4671..c7ea71a 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
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2007 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
@@ -172,7 +172,7 @@
 					if (m.getProject() == null)
 						return true;
 					
-					if (getModule().equals(m)) {
+					if (module.equals(m)) {
 						if (hasPublishedResourceDelta(module2)) {
 							changed[0] = true;
 							setModulePublishState(module2, IServer.PUBLISH_STATE_INCREMENTAL);
@@ -188,6 +188,7 @@
 				setServerPublishState(IServer.PUBLISH_STATE_INCREMENTAL);
 			
 			if (!changed[0])
+				//return;
 				return Status.OK_STATUS;
 			
 			if (getServerState() != IServer.STATE_STOPPED && behaviourDelegate != null)
@@ -198,7 +199,7 @@
 			
 			return Status.OK_STATUS;
 		}
-	}
+	};
 	
 	private static final Comparator PUBLISH_OPERATION_COMPARTOR = new Comparator() {
       public int compare(Object leftOp, Object rightOp) {
@@ -243,11 +244,21 @@
 	public boolean isWorkingCopy() {
 		return false;
 	}
+	
+    protected void deleteFromFile() throws CoreException {
+        super.deleteFromFile();
+        ResourceManager.getInstance().deregisterServer(this);
+    }
 
-	protected void deleteFromMetadata() {
+    protected void deleteFromMetadata() {
 		ResourceManager.getInstance().removeServer(this);
 	}
 
+	protected void saveToFile(IProgressMonitor monitor) throws CoreException {
+		super.saveToFile(monitor);
+		ResourceManager.getInstance().registerServer(this);
+	}
+
 	protected void saveToMetadata(IProgressMonitor monitor) {
 		super.saveToMetadata(monitor);
 		ResourceManager.getInstance().addServer(this);
@@ -425,6 +436,14 @@
 		notificationManager.broadcastChange(
 			new ServerEvent(ServerEvent.SERVER_CHANGE | ServerEvent.RESTART_STATE_CHANGE, this, getServerState(), 
 				getServerPublishState(), getServerRestartState()));
+		
+		if (getServerState() == IServer.STATE_STARTED && getServerRestartState() && ServerPreferences.getInstance().isAutoRestarting()) {
+			String mode = getMode();
+			if (canRestart(mode).isOK()) {
+				RestartServerJob job = new RestartServerJob(this, mode);
+				job.schedule();
+			}
+		}
 	}
 
 	/**
@@ -492,8 +511,8 @@
 	}
 
 	public void setModuleState(IModule[] module, int state) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		int oldState = getModuleState(module);
 		if (oldState == state)
 			return;
@@ -504,8 +523,8 @@
 	}
 
 	public void setModulePublishState(IModule[] module, int state) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		int oldState = getModulePublishState(module);
 		if (oldState == state)
 			return;
@@ -518,8 +537,8 @@
 	}
 
 	public void setModuleRestartState(IModule[] module, boolean r) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		boolean oldState = getModuleRestartState(module);
 		if (oldState == r)
 			return;
@@ -533,7 +552,7 @@
 		Trace.trace(Trace.FINEST, "> handleDeployableProjectChange() " + this + " " + module);
 		
 		// check for duplicate jobs already waiting and don't create a new one
-		Job[] jobs = Job.getJobManager().find(ServerUtil.SERVER_JOB_FAMILY);
+		Job[] jobs = Platform.getJobManager().find(ServerPlugin.PLUGIN_ID);
 		if (jobs != null) {
 			int size = jobs.length;
 			for (int i = 0; i < size; i++) {
@@ -739,16 +758,13 @@
 	 * @return boolean
 	 */
 	public IStatus canPublish() {
-		if (getServerType() == null)
-			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorMissingAdapter, null);
-		
 		// can't publish if the server is starting or stopping
 		int state = getServerState();
 		if (state == STATE_STARTING || state == STATE_STOPPING)
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishStarting, null);
 		
 		// can't publish if there is no configuration
-		if (getServerType().hasServerConfiguration() && configuration == null)
+		if (getServerType() == null || getServerType().hasServerConfiguration() && configuration == null)
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishNoConfiguration, null);
 		
 		return Status.OK_STATUS;
@@ -825,7 +841,7 @@
 	 */
 	public IStatus publish(final int kind, IProgressMonitor monitor) {
 		if (getServerType() == null)
-			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorMissingAdapter, null);
+			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, null);
 
 		// check what is out of sync and publish
 		if (getServerType().hasServerConfiguration() && configuration == null)
@@ -843,11 +859,9 @@
 			}
 		}
 		
-		long time = System.currentTimeMillis();
 		firePublishStarted();
 		IStatus status = doPublish(kind, monitor);
 		firePublishFinished(status);
-		Trace.trace(Trace.PERFORMANCE, "Server.publish(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
 		return status;
 	}
 
@@ -970,11 +984,11 @@
 		
 		return (PublishOperation[])tasks.toArray(new PublishOperation[tasks.size()]);
 	}
-
+	
 	public String getPublishOperationId(PublishOperation op) {
 		return getId()+"|"+op.getLabel();
 	}
-
+	
 	public List getAllModules() {
 		final List moduleList = new ArrayList();
 		
@@ -985,7 +999,7 @@
 				return true;
 			}
 		};
-		
+
 		visit(visitor, null);
 		
 		return moduleList;
@@ -997,8 +1011,8 @@
 	 * @see ServerBehaviourDelegate.getPublishedResources(IModule[])
 	 */
 	public IModuleResource[] getResources(IModule[] module) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		return getServerPublishInfo().getResources(module);
 	}
 
@@ -1008,8 +1022,8 @@
 	 * @see ServerBehaviourDelegate.getPublishedResources(IModule[])
 	 */
 	public IModuleResource[] getPublishedResources(IModule[] module) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		return getServerPublishInfo().getModulePublishInfo(module).getResources();
 	}
 
@@ -1020,8 +1034,8 @@
 	 * @see ServerBehaviourDelegate.getPublishedResourceDelta(IModule[])
 	 */
 	public IModuleResourceDelta[] getPublishedResourceDelta(IModule[] module) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		return getServerPublishInfo().getDelta(module);
 	}
 
@@ -1032,8 +1046,8 @@
 	 * @see ServerBehaviourDelegate.getPublishedResourceDelta(IModule[])
 	 */
 	public boolean hasPublishedResourceDelta(IModule[] module) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		return getServerPublishInfo().hasDelta(module);
 	}
 
@@ -1079,14 +1093,11 @@
 	 * @return status
 	 */
 	public IStatus canStart(String mode2) {
-		if (getServerType() == null)
-			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorMissingAdapter, null);
-		
 		int state = getServerState();
 		if (state != STATE_STOPPED && state != STATE_UNKNOWN)
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.canStartErrorState, null);
 		
-		if (!getServerType().supportsLaunchMode(mode2))
+		if (getServerType() == null || !getServerType().supportsLaunchMode(mode2))
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorLaunchMode, null);
 		
 		return Status.OK_STATUS;
@@ -1138,9 +1149,6 @@
 	 * @throws CoreException
 	 */
 	public ILaunchConfiguration getLaunchConfiguration(boolean create, IProgressMonitor monitor) throws CoreException {
-		if (getServerType() == null)
-			return null;
-		
 		ILaunchConfigurationType launchConfigType = ((ServerType) getServerType()).getLaunchConfigurationType();
 		if (launchConfigType == null)
 			return null;
@@ -1164,7 +1172,7 @@
 						if (wc.isDirty()) {
 							final ILaunchConfiguration[] lc = new ILaunchConfiguration[1];
 							Job job = new Job("Saving launch configuration") {
-								protected IStatus run(IProgressMonitor monitor2) {
+								protected IStatus run(IProgressMonitor monitor) {
 									try {
 										lc[0] = wc.doSave();
 									} catch (CoreException ce) {
@@ -1252,7 +1260,6 @@
 	protected void deleteLaunchConfigurations() {
 		if (getServerType() == null)
 			return;
-		
 		ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager();
 		ILaunchConfigurationType launchConfigType = ((ServerType) getServerType()).getLaunchConfigurationType();
 		
@@ -1277,9 +1284,6 @@
 	 * @see IServer#canRestart(String)
 	 */
 	public IStatus canRestart(String mode2) {
-		if (getServerType() == null)
-			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorMissingAdapter, null);
-		
 		if (!getServerType().supportsLaunchMode(mode2))
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorLaunchMode, null);
 
@@ -1319,7 +1323,7 @@
 	 * @see IServer#restart(String, IProgressMonitor)
 	 */
 	public void restart(final String mode2, final IProgressMonitor monitor) {
-		if (getServerType() == null || getServerState() == STATE_STOPPED)
+		if (getServerState() == STATE_STOPPED)
 			return;
 	
 		Trace.trace(Trace.FINEST, "Restarting server: " + getName());
@@ -1375,9 +1379,10 @@
 							t.start();
 						}
 					}
+					
 				}
 			});
-			
+	
 			// stop the server
 			stop(false);
 		} catch (Exception e) {
@@ -1392,13 +1397,10 @@
 	 * @return boolean
 	 */
 	public IStatus canStop() {
-		if (getServerType() == null)
-			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorMissingAdapter, null);
-		
 		if (getServerState() == STATE_STOPPED)
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorStopAlreadyStopped, null);
 		
-		if (!getServerType().supportsLaunchMode(getMode()))
+		if (getServerType() != null && !getServerType().supportsLaunchMode(getMode()))
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorLaunchMode, null);
 		
 		return Status.OK_STATUS;
@@ -1410,9 +1412,9 @@
 	public void stop(boolean force) {
 		if (getServerState() == STATE_STOPPED)
 			return;
-		
+
 		Trace.trace(Trace.FINEST, "Stopping server: " + toString());
-		
+
 		try {
 			getBehaviourDelegate(null).stop(force);
 		} catch (Throwable t) {
@@ -1424,9 +1426,6 @@
 	 * @see IServer#start(String, IOperationListener)
 	 */
 	public void start(String mode2, IOperationListener listener2) {
-		if (getServerType() == null)
-			return;
-		
 		Trace.trace(Trace.FINEST, "synchronousStart 1");
 		final Object mutex = new Object();
 		
@@ -1535,9 +1534,6 @@
 	}
 
 	public void synchronousStart(String mode2, IProgressMonitor monitor) throws CoreException {
-		if (getServerType() == null)
-			return;
-		
 		Trace.trace(Trace.FINEST, "synchronousStart 1");
 		
 		// make sure that the delegate is loaded and the server state is correct
@@ -1607,7 +1603,7 @@
 						// notify waiter
 						synchronized (notified) {
 							Trace.trace(Trace.FINEST, "synchronousStart notify timeout");
-							if (!timer.alreadyDone && totalTimeout < 0)
+							if (!timer.alreadyDone && totalTimeout <= 0)
 								timer.timeout = true;
 							notified[0] = true;
 							notified.notifyAll();
@@ -1671,19 +1667,16 @@
 		synchronousStop(true);
 		synchronousStart(mode2, monitor);
 	}
-
+	
 	/*
 	 * @see IServer#restart(String, IOperationListener)
 	 */
 	public void restart(String mode2, IOperationListener listener) {
-		if (getServerType() == null)
-			return;
-		
 		if (getServerState() == STATE_STOPPED)
 			return;
-		
+	
 		Trace.trace(Trace.FINEST, "Restarting server: " + getName());
-		
+	
 		try {
 			final IOperationListener listener2 = listener;
 			IServerListener curListener = new IServerListener() {
@@ -1767,9 +1760,6 @@
 	 * @see IServer#stop(boolean, IOperationListener)
 	 */
 	public void stop(boolean force, IOperationListener listener2) {
-		if (getServerType() == null)
-			return;
-		
 		if (getServerState() == IServer.STATE_STOPPED)
 			return;
 		
@@ -1856,9 +1846,6 @@
 	 * @see IServer#synchronousStop()
 	 */
 	public void synchronousStop(boolean force) {
-		if (getServerType() == null)
-			return;
-		
 		if (getServerState() == IServer.STATE_STOPPED)
 			return;
 		
@@ -2113,23 +2100,6 @@
 		if ((add == null || add.length == 0) && (remove == null || remove.length == 0))
 			throw new IllegalArgumentException("Add and remove cannot both be null/empty");
 		
-		if (add != null) {
-			int size = add.length;
-			for (int i = 0; i < size; i++)
-				if (add[i] == null)
-					throw new IllegalArgumentException("Cannot add null entries");
-		}
-		
-		if (remove != null) {
-			int size = remove.length;
-			for (int i = 0; i < size; i++)
-				if (remove[i] == null)
-					throw new IllegalArgumentException("Cannot remove null entries");
-		}
-		
-		if (getServerType() == null)
-			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorMissingAdapter, null);
-		
 		if (add != null && add.length > 0) {
 			int size = add.length;
 			for (int i = 0; i < size; i++) {
@@ -2144,7 +2114,7 @@
 			return getDelegate(monitor).canModifyModules(add, remove);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error calling delegate canModifyModules() " + toString(), e);
-			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, e.getMessage(), null);
+			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, "", null);
 		}
 	}
 
@@ -2186,7 +2156,8 @@
 						moduleType = new ModuleType(moduleTypeId, moduleTypeVersion);
 					module = new DeletedModule(moduleId, name, moduleType);
 				}
-				modules.add(module);
+				if (module != null)
+					modules.add(module);
 			}
 		}
 		
@@ -2199,8 +2170,8 @@
 	 * @see org.eclipse.wst.server.core.IServer#getModuleState()
 	 */
 	public int getModuleState(IModule[] module) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			Integer in = (Integer) moduleState.get(getKey(module));
 			if (in != null)
@@ -2215,8 +2186,8 @@
 	 * @see org.eclipse.wst.server.core.IServer#getModuleState()
 	 */
 	public int getModulePublishState(IModule[] module) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			Integer in = (Integer) modulePublishState.get(getKey(module));
 			if (in != null)
@@ -2231,13 +2202,9 @@
 	 * @see IServer#getChildModule(IModule[])
 	 */
 	public IModule[] getChildModules(IModule[] module, IProgressMonitor monitor) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
-			int i = module.length - 1;
-			if (module[i].getProject() == null || !module[i].getProject().isAccessible())
-				return null;
-			
 			ServerDelegate sd = getDelegate(monitor);
 			if (sd == null)
 				return null;
@@ -2277,8 +2244,8 @@
 	 *    restarted, and <code>false</code> otherwise
 	 */
 	public IStatus canControlModule(IModule[] module, IProgressMonitor monitor) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			ServerBehaviourDelegate bd = getBehaviourDelegate(monitor);
 			if (bd == null)
@@ -2301,8 +2268,8 @@
 	 * @return boolean
 	 */
 	public boolean getModuleRestartState(IModule[] module) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			Boolean b = (Boolean) moduleRestartState.get(getKey(module));
 			if (b != null)
@@ -2317,8 +2284,8 @@
 	 * @see IServer#startModule(IModule[], IOperationListener)
 	 */
 	public void startModule(IModule[] module, IOperationListener listener) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			getBehaviourDelegate(null).startModule(module, null);
 		} catch (Exception e) {
@@ -2330,8 +2297,8 @@
 	 * @see IServer#stopModule(IModule[], IOperationListener)
 	 */
 	public void stopModule(IModule[] module, IOperationListener listener) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			getBehaviourDelegate(null).stopModule(module, null);
 		} catch (Exception e) {
@@ -2343,8 +2310,8 @@
 	 * @see IServer#restartModule(IModule[], IOperationListener, IProgressMonitor)
 	 */
 	public void restartModule(IModule[] module, IOperationListener listener) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			getBehaviourDelegate(null).stopModule(module, null);
 			getBehaviourDelegate(null).startModule(module, null);
@@ -2433,15 +2400,15 @@
 	}
 
 	public void setModuleStatus(IModule[] module, IStatus status) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		moduleStatus.put(getKey(module), status);
 		//fireServerModuleStateChangeEvent(module);
 	}
 
 	public IStatus getModuleStatus(IModule[] module) {
-		if (module == null || module.length == 0)
-			throw new IllegalArgumentException("Module cannot be null or empty");
+		if (module == null)
+			throw new IllegalArgumentException("Module cannot be null");
 		try {
 			return (IStatus) moduleStatus.get(getKey(module));
 		} catch (Exception e) {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java
index 2d9cd3a..e2456cd 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java
@@ -21,25 +21,25 @@
  */
 public class ServerNotificationManager {
 	private List listenerList = new ArrayList();
-
+	
 	/**
 	 * For masking event on all changes.
 	 */
 	public static final int ALL_EVENTS = 0xFFFF;
-
+	
 	private class ListenerEntry {
 		private IServerListener listener;
 		private int eventMask;
-
-		protected ListenerEntry(IServerListener curListener, int curEventMask) {
+		
+		private ListenerEntry(IServerListener curListener, int curEventMask) {
 			listener = curListener;
 			eventMask = curEventMask;
 		}
-
+		
 		protected IServerListener getListener() {
 			return listener;
 		}
-
+		
 		protected int getEventMask() {
 			return eventMask;
 		}
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 ce86752..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
@@ -273,6 +273,7 @@
 			public void bundleChanged(BundleEvent event) {
 				String bundleId = event.getBundle().getSymbolicName();
 				//Trace.trace(Trace.INFO, event.getType() + " " + bundleId);
+				// TODO should also look for UNINSTALLED and UNRESOLVED
 				if (BundleEvent.STOPPED == event.getType() && ResourceManager.getInstance().isActiveBundle(bundleId))
 					stopBundle(bundleId);
 			}
@@ -285,7 +286,7 @@
 			public StopJob() {
 				super("Disposing servers");
 			}
-
+			
 			public boolean belongsTo(Object family) {
 				return SHUTDOWN_JOB_FAMILY.equals(family);
 			}
@@ -296,13 +297,9 @@
 			}
 		}
 		
-		try {
-			StopJob job = new StopJob();
-			job.setUser(false);
-			job.schedule();
-		} catch (Throwable t) {
-			// ignore errors
-		}
+		StopJob job = new StopJob();
+		job.setUser(false);
+		job.schedule();
 	}
 
 	/**
@@ -319,33 +316,26 @@
 		ServerMonitorManager.shutdown();
 		
 		try {
-			Job.getJobManager().join(SHUTDOWN_JOB_FAMILY, null);
+			Platform.getJobManager().join(SHUTDOWN_JOB_FAMILY, null);
 		} catch (Exception e) {
 			Trace.trace(Trace.WARNING, "Error waiting for shutdown job", e);
 		}
 		context.removeBundleListener(bundleListener);
 	}
 
-	/**
-	 * Utility method to tokenize a string into an array.
-	 * 
-	 * @param str a string to be parsed
-	 * @param delim the delimiters
-	 * @return an array containing the tokenized string
-	 */
-	public static String[] tokenize(String str, String delim) {
-		if (str == null)
+	public static String[] tokenize(String param, String delim) {
+		if (param == null)
 			return new String[0];
 		
 		List list = new ArrayList();
 		
-		StringTokenizer st = new StringTokenizer(str, delim);
+		StringTokenizer st = new StringTokenizer(param, delim);
 		while (st.hasMoreTokens()) {
-			String s = st.nextToken();
-			if (s != null && s.length() > 0)
-				list.add(s.trim());
+			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;
@@ -506,7 +496,7 @@
 		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .clients extension point ->-");
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "clients");
-		
+
 		int size = cf.length;
 		List list = new ArrayList(size);
 		for (int i = 0; i < size; i++) {
@@ -534,7 +524,7 @@
 		
 		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .clients extension point -<-");
 	}
-
+	
 	/**
 	 * Returns an array of all known publish tasks.
 	 * <p>
@@ -550,7 +540,7 @@
 		publishTasks.toArray(st);
 		return st;
 	}
-
+	
 	/**
 	 * Load the publish task extension point.
 	 */
@@ -560,7 +550,7 @@
 		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .publishTasks extension point ->-");
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "publishTasks");
-		
+
 		int size = cf.length;
 		List list = new ArrayList(size);
 		for (int i = 0; i < size; i++) {
@@ -606,7 +596,7 @@
 	public static ModuleFactory findModuleFactory(String id) {
 		if (id == null)
 			throw new IllegalArgumentException();
-		
+
 		if (moduleFactories == null)
 			loadModuleFactories();
 		
@@ -628,7 +618,7 @@
 		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .moduleFactories extension point ->-");
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "moduleFactories");
-		
+
 		int size = cf.length;
 		List list = new ArrayList(size);
 		for (int i = 0; i < size; i++) {
@@ -789,7 +779,7 @@
 		
 		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .moduleArtifactAdapters extension point -<-");
 	}
-
+	
 	/**
 	 * Returns <code>true</code> if a module artifact may be available for the given object,
 	 * and <code>false</code> otherwise.
@@ -860,6 +850,36 @@
 	}
 
 	/**
+	 * Returns a module artifact if possible, loading any plugins required.
+	 * 
+	 * @param obj
+	 * @return a module artifact, or null
+	 */
+	public static IModuleArtifact loadModuleArtifact(Object obj) {
+		Trace.trace(Trace.FINEST, "ServerPlugin.loadModuleArtifact() " + obj);
+		ModuleArtifactAdapter[] adapters = getModuleArtifactAdapters();
+		if (adapters != null) {
+			int size = adapters.length;
+			for (int i = 0; i < size; i++) {
+				try {
+					if (adapters[i].isEnabled(obj)) {
+						IModuleArtifact ma = adapters[i].getModuleArtifact(obj);
+						if (ma != null)
+							return ma;
+						/*if (Platform.getAdapterManager().hasAdapter(obj, MODULE_ARTIFACT_CLASS)) {
+							return (IModuleArtifact) Platform.getAdapterManager().loadAdapter(obj, MODULE_ARTIFACT_CLASS);
+						}*/
+					}
+				} catch (Exception e) {
+					Trace.trace(Trace.WARNING, "Could not use moduleArtifactAdapter " + adapters[i], e);
+				}
+			}
+		}
+		
+		return null;
+	}
+	
+	/**
 	 * Returns an array of all known installable servers.
 	 * <p>
 	 * A new array is returned on each call, so clients may store or modify the result.
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java
index ca3f2a2..ba8e1e1 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java
@@ -15,6 +15,7 @@
  * Helper class that stores preference information for server tools.
  */
 public class ServerPreferences {
+	private static final String PREF_AUTO_RESTART = "auto-restart";
 	private static final String PREF_AUTO_PUBLISH = "auto-publish";
 	private static final String PREF_MODULE_START_TIMEOUT = "module-start-timeout";
 	
@@ -51,6 +52,26 @@
 	}
 
 	/**
+	 * Returns whether servers will be automatically restarted when
+	 * required.
+	 *
+	 * @return boolean
+	 */
+	public boolean isAutoRestarting() {
+		return preferences.getBoolean(PREF_AUTO_RESTART);
+	}
+
+	/**
+	 * Returns whether servers will be automatically restarted when
+	 * required.
+	 *
+	 * @return boolean
+	 */
+	public boolean isDefaultAutoRestarting() {
+		return false;
+	}
+
+	/**
 	 * Returns whether publishing should occur before starting the
 	 * server.
 	 *
@@ -77,7 +98,8 @@
 	 * @param value
 	 */
 	public void setAutoRestarting(boolean value) {
-		// ignore
+		preferences.setValue(PREF_AUTO_RESTART, value);
+		ServerPlugin.getInstance().savePluginPreferences();
 	}
 
 	/**
@@ -275,6 +297,7 @@
 	 */
 	public void setDefaults() {
 		preferences.setDefault(PREF_AUTO_PUBLISH, isDefaultAutoPublishing());
+		preferences.setDefault(PREF_AUTO_RESTART, isDefaultAutoRestarting());
 		preferences.setDefault(PREF_MACHINE_SPEED, getDefaultMachineSpeed());
 		
 		preferences.setDefault(PREF_AUTO_PUBLISH_LOCAL, getDefaultAutoPublishLocal());
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 5ab0d29..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
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,13 +10,7 @@
  **********************************************************************/
 package org.eclipse.wst.server.core.internal;
 
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -64,10 +58,7 @@
 			for (int i = 0; i < size; i++) {
 				if (i != 0)
 					sb.append("#");
-				if (module[i] != null)
-					sb.append(module[i].getId());
-				else
-					sb.append("null");
+				sb.append(module[i].getId());
 			}
 		}
 		
@@ -77,7 +68,7 @@
 	private String getKey(String moduleId) {
 		return moduleId;
 	}
-
+	
 	private IModule[] getModule(String moduleId) {
 		if (moduleId == null || moduleId.length() == 0)
 			return new IModule[0];
@@ -210,22 +201,8 @@
 			if (module2 == null || module2.length == 0) {
 				String moduleId = mpi.getModuleId();
 				if (moduleId != null) {
-					String[] ids = getModuleIds(moduleId);
-					int depth = ids.length;
-					
-					module2 = new IModule[depth];
-					String s = "";
-					for (int i = 0; i < depth; i++) {
-						s += ids[i];
-						if (i == depth - 1)
-							module2[i] = mpi.getDeletedModule();
-						else {
-							ModulePublishInfo mpi2 = (ModulePublishInfo) modulePublishInfo.get(s);
-							if (mpi2 != null)
-								module2[i] = mpi2.getDeletedModule();
-						}
-						s += "#";
-					}
+					int index = moduleId.lastIndexOf("#");
+					module2 = new IModule[] { new DeletedModule(moduleId.substring(index + 1), mpi.getName(), mpi.getModuleType()) };
 				}
 			}
 			if (module2 != null && module2.length > 0) {
@@ -236,71 +213,30 @@
 	}
 
 	/**
-	 * Parse a combined module id string into the individual module ids
-	 * @param moduleId
-	 * @return an array of module ids
-	 */
-	private String[] getModuleIds(String moduleId) {
-		StringTokenizer st = new StringTokenizer(moduleId, "#");
-		List list = new ArrayList(2);
-		while (st.hasMoreTokens()) {
-			list.add(st.nextToken());
-		}
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
-	}
-
-	/**
 	 * 
 	 */
 	public void load() {
 		String filename = path.toOSString();
-		
-		if (new File(filename).exists()) {
-			Trace.trace(Trace.FINEST, "Loading publish info from " + filename);
+		if (!(new File(filename).exists()))
+			return;
+	
+		Trace.trace(Trace.FINEST, "Loading publish info from " + filename);
+
+		try {
+			IMemento memento2 = XMLMemento.loadMemento(filename);
+			Float f = memento2.getFloat(VERSION);
+			if (f != null && f.floatValue() >= 3)
+				return;
 			
-			DataInputStream in = null;
-			try {
-				in = new DataInputStream(new BufferedInputStream(new FileInputStream(filename)));
-				in.readByte();
-				in.readByte();
-				// version
-				int ver = in.readByte();
-				if (ver <= 1) {
-					int size = in.readInt();	
-					for (int i = 0; i < size; i++) {
-						ModulePublishInfo mpi = new ModulePublishInfo(in);
-						modulePublishInfo.put(getKey(mpi.getModuleId()), mpi);
-					}
-					return;
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load publish information: " + e.getMessage());
+			IMemento[] children = memento2.getChildren("module");
+	
+			int size = children.length;
+			for (int i = 0; i < size; i++) {
+				ModulePublishInfo mpi = new ModulePublishInfo(children[i]);
+				modulePublishInfo.put(getKey(mpi.getModuleId()), mpi);
 			}
-		}
-		
-		filename = filename.substring(0, filename.length() - 3) + "xml";
-		if (new File(filename).exists()) {
-			Trace.trace(Trace.FINEST, "Loading publish info from old format " + filename);
-			
-			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;
-				for (int i = 0; i < size; i++) {
-					ModulePublishInfo mpi = new ModulePublishInfo(children[i]);
-					modulePublishInfo.put(getKey(mpi.getModuleId()), mpi);
-				}
-			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load publish information: " + e.getMessage());
-			}
+		} catch (Exception e) {
+			Trace.trace(Trace.WARNING, "Could not load publish information: " + e.getMessage());
 		}
 	}
 
@@ -310,37 +246,22 @@
 	public void save() {
 		String filename = path.toOSString();
 		Trace.trace(Trace.FINEST, "Saving publish info to " + filename);
-		
-		DataOutputStream out = null;
+	
 		try {
-			out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(filename)));
-			out.writeByte(14);
-			out.writeByte(14);
-			// version
-			out.writeByte(1);
+			XMLMemento memento = XMLMemento.createWriteRoot("server");
+			memento.putString(VERSION, "1.0");
 			
-			out.writeInt(modulePublishInfo.keySet().size());
 			Iterator iterator = modulePublishInfo.keySet().iterator();
 			while (iterator.hasNext()) {
 				String controlRef = (String) iterator.next();
 				ModulePublishInfo mpi = (ModulePublishInfo) modulePublishInfo.get(controlRef);
-				mpi.save(out);
+				IMemento child = memento.createChild("module");
+				mpi.save(child);
 			}
+			memento.saveToFile(filename);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Could not save publish information", e);
-		} finally {
-			try {
-				out.close();
-			} catch (Exception e) {
-				// ignore
-			}
 		}
-		
-		// remove old file
-		filename = filename.substring(0, filename.length() - 3) + "xml";
-		File f = new File(filename);
-		if (f.exists())
-			f.delete();
 	}
 
 	/**
@@ -499,7 +420,7 @@
 	 * Returns true if the list of modules being published does not match the previous
 	 * list of published modules.
 	 * 
-	 * This method should compare the modules. For now, comparing the size is fine.
+	 * TODO: This method should compare the modules. For now, comparing the size is fine.
 	 * 
 	 * @param modules a list of modules
 	 * @return <code>true</code> if the structure of published modules has changed, or
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerSchedulingRule.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerSchedulingRule.java
index caf491a..f4a953f 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerSchedulingRule.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerSchedulingRule.java
@@ -18,11 +18,11 @@
  */
 public class ServerSchedulingRule implements ISchedulingRule {
 	protected IServer server;
-
+	
 	public ServerSchedulingRule(IServer server) {
 		this.server = server;
 	}
-
+	
 	public boolean contains(ISchedulingRule rule) {
 		if (!(rule instanceof ServerSchedulingRule))
 			return false;
@@ -37,7 +37,7 @@
 		ServerSchedulingRule ssrule = (ServerSchedulingRule) rule;
 		return ssrule.server.equals(server);
 	}
-
+	
 	public String toString() {
 		return "Server scheduling rule for " + server;
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
index 60bc80d..7edbdee 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
@@ -190,16 +190,16 @@
 		if (id == null || id.length() == 0)
 			id = ServerPlugin.generateId();
 		ServerWorkingCopy swc = new ServerWorkingCopy(id, file, runtime, this);
-		if (hasRuntime())
-			swc.setRuntime(runtime);
+		swc.setRuntime(runtime);
 		swc.setDefaults(monitor);
 		
-		if (hasServerConfiguration() && runtime != null && !runtime.getLocation().isEmpty())
+		// TODO
+		if (swc.getServerType().hasServerConfiguration())
 			swc.importRuntimeConfiguration(runtime, null);
 		
 		return swc;
 	}
-
+	
 	/**
 	 * Returns an array of all known runtime instances of
 	 * the given runtime type. This convenience method filters the list of known
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
index fd07c81..249c6bd 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
@@ -371,7 +371,7 @@
 			server.notificationManager = notificationManager;
 		}
 		
-		if (getServerType() != null && getServerType().hasServerConfiguration()) {
+		if (getServerType().hasServerConfiguration()) {
 			IFolder folder = getServerConfiguration();
 			if (folder == null) {
 				folder = ServerType.getServerProject().getFolder(getName() + "-config");
@@ -383,7 +383,7 @@
 		
 		server.setInternal(this);
 		server.doSave(monitor);
-		if (getServerType() != null && getServerType().hasServerConfiguration()) {
+		if (getServerType().hasServerConfiguration()) {
 			IFolder folder = getServerConfiguration();
 			if (folder != null) {
 				IProject project = folder.getProject();
@@ -396,8 +396,7 @@
 					folder.create(IResource.FORCE, true, null);
 			}
 		}
-		if (getWorkingCopyDelegate(monitor) != null)
-			getWorkingCopyDelegate(monitor).saveConfiguration(monitor);
+		getWorkingCopyDelegate(monitor).saveConfiguration(monitor);
 		wch.setDirty(false);
 		
 		return server;
@@ -465,7 +464,7 @@
 		else
 			super.addPublishListener(listener);
 	}
-
+	
 	public void removePublishListener(IPublishListener listener) {
 		if (server != null)
 			server.removePublishListener(listener);
@@ -490,10 +489,8 @@
 	 * @see org.eclipse.wst.server.core.IServer#modifyModule(org.eclipse.wst.server.core.model.IModule)
 	 */
 	public void modifyModules(IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException {
-		// null checks are in canModifyModules
-		IStatus status = canModifyModules(add, remove, monitor);
-		if (status != null && status.getSeverity() == IStatus.ERROR)
-			throw new CoreException(status);
+		if ((add == null || add.length == 0) && (remove == null || remove.length == 0))
+			throw new IllegalArgumentException("Add and remove cannot both be null/empty");
 		
 		try {
 			monitor = ProgressUtil.getMonitorFor(monitor);
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Trace.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Trace.java
index 907de74..66eda62 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Trace.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Trace.java
@@ -16,18 +16,18 @@
  * Helper class to route trace output.
  */
 public class Trace {
-	public static final byte CONFIG = 0;
-	public static final byte INFO = 1;
-	public static final byte WARNING = 2;
-	public static final byte SEVERE = 3;
-	public static final byte FINER = 4;
-	public static final byte FINEST = 5;
+	public static int CONFIG = 0;
+	public static int INFO = 1;
+	public static int WARNING = 2;
+	public static int SEVERE = 3;
+	public static int FINER = 4;
+	public static int FINEST = 5;
 	
-	public static final byte RESOURCES = 6;
-	public static final byte EXTENSION_POINT = 7;
-	public static final byte LISTENERS = 8;
-	public static final byte RUNTIME_TARGET = 9;
-	public static final byte PERFORMANCE = 10;
+	public static int RESOURCES = 6;
+	public static int EXTENSION_POINT = 7;
+	public static int LISTENERS = 8;
+	public static int RUNTIME_TARGET = 9;
+	public static int PERFORMANCE = 10;
 
 	private static final String[] levelNames = new String[] {
 		"CONFIG   ", "INFO     ", "WARNING  ", "SEVERE   ", "FINER    ", "FINEST   ",
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/WorkingCopyHelper.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/WorkingCopyHelper.java
index eb4ce56..bd513a2 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/WorkingCopyHelper.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/WorkingCopyHelper.java
@@ -37,7 +37,7 @@
 
 	public void setAttribute(String attributeName, int value) {
 		int current = base.getAttribute(attributeName, 0);
-		if (base.isAttributeSet(attributeName) && current == value)
+		if (current != 0 && current == value)
 			return;
 		
 		isDirty = true;
@@ -47,9 +47,7 @@
 
 	public void setAttribute(String attributeName, boolean value) {
 		boolean current = base.getAttribute(attributeName, false);
-		if (base.isAttributeSet(attributeName) && current == value)
-			return;
-		
+
 		isDirty = true;
 		base.map.put(attributeName, Boolean.toString(value));
 		firePropertyChangeEvent(attributeName, new Boolean(current), new Boolean(value));
@@ -57,9 +55,9 @@
 
 	public void setAttribute(String attributeName, String value) {
 		String current = base.getAttribute(attributeName, (String)null);
-		if (base.isAttributeSet(attributeName) && current != null && current.equals(value))
+		if (current != null && current.equals(value))
 			return;
-		
+
 		isDirty = true;
 		if (value == null)
 			base.map.remove(attributeName);
@@ -70,9 +68,9 @@
 
 	public void setAttribute(String attributeName, List value) {
 		List current = base.getAttribute(attributeName, (List)null);
-		if (base.isAttributeSet(attributeName) && current != null && current.equals(value))
+		if (current != null && current.equals(value))
 			return;
-		
+
 		isDirty = true;
 		if (value == null)
 			base.map.remove(attributeName);
@@ -83,9 +81,9 @@
 
 	public void setAttribute(String attributeName, Map value) {
 		Map current = base.getAttribute(attributeName, (Map)null);
-		if (base.isAttributeSet(attributeName) && current != null && current.equals(value))
+		if (current != null && current.equals(value))
 			return;
-		
+
 		isDirty = true;
 		if (value == null)
 			base.map.remove(attributeName);
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java
index bd6c363..461d813 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java
@@ -10,9 +10,6 @@
  *******************************************************************************/
 package org.eclipse.wst.server.core.model;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.wst.server.core.IModule;
@@ -42,7 +39,7 @@
  */
 public abstract class ModuleFactoryDelegate {
 	private ModuleFactory factory;
-
+	
 	/**
 	 * Delegates must have a public 0-arg constructor.
 	 */
@@ -92,22 +89,19 @@
 
 	/**
 	 * Clears the cache of modules returned by getModules(). Delegates can call this
-	 * method if they know that the results of getModules() is invalid and should be
-	 * refreshed.
+	 * method if they know that the results of the last call to getModules() is
+	 * invalid and should be refreshed.
 	 * 
-	 * @deprecated This method is implementation specific and never called by the
-	 *    framework. It shouldn't be part of the public API, but subclasses are still
-	 *    welcome to provide their own method to clear the cache.
 	 * @see #getModules()
 	 */
 	public void clearModuleCache() {
-		// ignore
+		factory.clearModuleCache();
 	}
 
 	/**
 	 * Creates a module instance with the given static information. This method is used
 	 * by module factory delegates to create module instances.
-	 * 
+	 *  
 	 * @param id the module id
 	 * @param name the module name
 	 * @param type the module type id
@@ -142,77 +136,4 @@
 	 * @return a possibly-empty array of modules {@link IModule}
 	 */
 	public abstract IModule[] getModules();
-
-	/**
-	 * Return all modules created by this factory that are contained within the
-	 * given project. Subclasses should override this method if they do not need
-	 * to filter through the entire project list.
-	 * <p>
-	 * This method is normally called by the web server core framework.
-	 * Clients (other than the delegate) should never call this method.
-	 * </p>
-	 * <p>
-	 * A new array is returned on each call, so clients may store or modify the result.
-	 * </p>
-	 * 
-	 * @param project a project
-	 * @return a possibly-empty array of modules {@link IModule}
-	 * @since 2.0
-	 */
-	public IModule[] getModules(IProject project) {
-		IModule[] modules = getModules();
-		if (project != null && modules != null) {
-			List list = new ArrayList(modules.length);
-			int size = modules.length;
-			for (int i = 0; i < size; i++) {
-				if (project.equals(modules[i].getProject()))
-					list.add(modules[i]);
-			}
-			
-			IModule[] m = new IModule[list.size()];
-			list.toArray(m);
-			return m;
-		}
-		
-		return new IModule[0];
-	}
-
-	/**
-	 * Returns the module created by this factory that has the given id, or
-	 * <code>null</code> if there is no module with the given id. The id must
-	 * not be null.
-	 * <p>
-	 * Subclasses should override this method if they do not need to search
-	 * through the entire project list.
-	 * </p>
-	 * <p>
-	 * This method is normally called by the web server core framework.
-	 * Clients (other than the delegate) should never call this method.
-	 * </p>
-	 * 
-	 * @param id a module id
-	 * @return the module with the given id, or <code>null</code> if no module
-	 *    could be found {@link IModule}
-	 * @since 2.0
-	 */
-	public IModule findModule(String id) {
-		if (id == null)
-			return null;
-		
-		IModule[] modules = getModules();
-		if (id != null && modules != null) {
-			int size = modules.length;
-			for (int i = 0; i < size; i++) {
-				String id2 = modules[i].getId();
-				int index = id2.indexOf(":");
-				if (index >= 0)
-					id2 = id2.substring(index+1);
-				
-				if (id.equals(id2))
-					return modules[i];
-			}
-		}
-		
-		return null;
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
index cfeeb9d..0b284ba 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -254,9 +254,9 @@
 	 * 
 	 * @param kind one of the IServer.PUBLISH_XX constants. Valid values are
 	 *    <ul>
-	 *    <li><code>PUBLISH_FULL</code>- indicates a full publish.</li>
+	 *    <li><code>PUBLSIH_FULL</code>- indicates a full publish.</li>
 	 *    <li><code>PUBLISH_INCREMENTAL</code>- indicates a incremental publish.
-	 *    <li><code>PUBLISH_AUTO</code>- indicates an automatic incremental publish.</li>
+	 *    <li><code>PUBLSIH_AUTO</code>- indicates an automatic incremental publish.</li>
 	 *    <li><code>PUBLISH_CLEAN</code>- indicates a clean request. Clean throws
 	 *      out all state and cleans up the module on the server before doing a
 	 *      full publish.
@@ -288,9 +288,9 @@
 	 * 
 	 * @param kind one of the IServer.PUBLISH_XX constants. Valid values are:
 	 *    <ul>
-	 *    <li><code>PUBLISH_FULL</code>- indicates a full publish.</li>
+	 *    <li><code>PUBLSIH_FULL</code>- indicates a full publish.</li>
 	 *    <li><code>PUBLISH_INCREMENTAL</code>- indicates a incremental publish.
-	 *    <li><code>PUBLISH_AUTO</code>- indicates an automatic incremental publish.</li>
+	 *    <li><code>PUBLSIH_AUTO</code>- indicates an automatic incremental publish.</li>
 	 *    <li><code>PUBLISH_CLEAN</code>- indicates a clean request. Clean throws
 	 *      out all state and cleans up the module on the server before doing a
 	 *      full publish.
@@ -313,9 +313,7 @@
 	 * @throws CoreException if there is a problem publishing the module
 	 */
 	protected void publishModule(int kind, int deltaKind, IModule[] module, IProgressMonitor monitor) throws CoreException {
-		// by default, assume the module has published successfully.
-		// this will update the publish state and delta correctly
-		setModulePublishState(module, IServer.PUBLISH_STATE_NONE);
+		// do nothing
 	}
 
 	/**
@@ -750,11 +748,11 @@
 		if (size == 0)
 			return;
 		
+		if (monitor.isCanceled())
+			return;
+		
 		// publish modules
 		for (int i = 0; i < size; i++) {
-			if (monitor.isCanceled())
-				return;
-			
 			IStatus status = publishModule(kind, (IModule[]) modules.get(i), ((Integer)deltaKind.get(i)).intValue(), ProgressUtil.getSubMonitorFor(monitor, 3000));
 			if (status != null && !status.isOK())
 				multi.add(status);
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
index da39e62..1e0510c 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
@@ -190,16 +190,19 @@
 	 * {@link IServerAttributes#canModifyModules(IModule[], IModule[], IProgressMonitor)}
 	 * for further details. 
 	 * <p>
-	 * This method is called by the web server core framework in response to
-	 * a call to <code>IServer.canModifyModules</code>. It should return quickly
-	 * without connection to the server. Clients should never call this method.
+	 * This method is called by the web server core framework,
+	 * in response to a call to <code>IServer.canModifyModules</code>.
+	 * Clients should never call this method.
 	 * </p>
+	 * <p>
+	 * [issue: See IServerAttributes.canModifyModules(IModule[], IModule[], IProgressMonitor).]
+	 * </p>
+	 * [issue: doc that it should be quick]
 	 *
 	 * @param add a possibly-empty list of modules to add
 	 * @param remove a possibly-empty list of modules to remove
 	 * @return a status object with code <code>IStatus.OK</code> if the modules
 	 *   can be modified, otherwise a status object indicating why they can't
-	 * @see IServerAttributes#canModifyModules(IModule[], IModule[], IProgressMonitor)
 	 */
 	public abstract IStatus canModifyModules(IModule[] add, IModule[] remove);
 
@@ -240,6 +243,7 @@
 	 * @param module a module
 	 * @return an array of possible root modules
 	 * @throws CoreException if anything went wrong
+	 * 
 	 * @see org.eclipse.wst.server.core.IServerAttributes#getRootModules(IModule, IProgressMonitor)
 	 */
 	public abstract IModule[] getRootModules(IModule module) throws CoreException;
@@ -351,8 +355,7 @@
 	 * @param remove a possibly-empty list of modules to remove
 	 * @param monitor a progress monitor, or <code>null</code> if progress
 	 *    reporting and cancellation are not desired
-	 * @throws CoreException if the changes are not allowed or could not
-	 *    be processed
+	 * @throws CoreException [missing]
 	 */
 	public abstract void modifyModules(IModule[] add, IModule[] remove, IProgressMonitor monitor) throws CoreException;
 
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 09154b6..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
@@ -161,16 +161,17 @@
 			List list = new ArrayList(size);
 			for (int i = 0; i < size; i++) {
 				IResource resource = resources[i];
-				if (resource != null && resource.exists()) {
-					String name = resource.getName();
-					if (resource instanceof IContainer) {
-						IContainer container2 = (IContainer) resource;
-						ModuleFolder mf = new ModuleFolder(container2, name, path);
-						mf.setMembers(getModuleResources(path.append(name), container2));
+				if (resource instanceof IContainer) {
+					IContainer container2 = (IContainer) resource;
+					if (container2 != null && container2.exists()) {
+						ModuleFolder mf = new ModuleFolder(container2, container2.getName(), path);
+						mf.setMembers(getModuleResources(path.append(container2.getName()), container2));
 						list.add(mf);
-					} else if (resource instanceof IFile) {
-						list.add(new ModuleFile((IFile) resource, name, path));
 					}
+				} else if (resource instanceof IFile) {
+					IFile file = (IFile) resource;
+					if (file != null && file.exists())
+						list.add(new ModuleFile(file, file.getName(), path));
 				}
 			}
 			IModuleResource[] moduleResources = new IModuleResource[list.size()];
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
index 7295a89..a177b84 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,73 +27,45 @@
  * @since 1.0
  */
 public abstract class ProjectModuleFactoryDelegate extends ModuleFactoryDelegate {
-	// map of IProject to IModule[]
-	private Map modules = new HashMap();
+	private static List factories = new ArrayList();
+
+	// list of IModules
+	private List modules;
 
 	/**
 	 * Construct a new ProjectModuleFactoryDelegate.
 	 */
 	public ProjectModuleFactoryDelegate() {
 		super();
+		
+		factories.add(this);
 	}
 
 	/**
-	 * Cache modules that exist in the given project.
-	 * 
-	 * @param project a project to cache
-	 * @since 2.0
-	 */
-	private final IModule[] cacheModules(IProject project) {
-		if (project == null || !project.isAccessible())
-			return null;
-		
-		IModule[] m = null;
-		try {
-			m = (IModule[]) modules.get(project);
-			if (m != null)
-				return m;
-		} catch (Exception e) {
-			// ignore
-		}
-		
-		try {
-			m = createModules(project);
-			if (m != null) {
-				modules.put(project, m);
-				return m;
-			}
-		} catch (Throwable t) {
-			Trace.trace(Trace.SEVERE, "Error creating module", t);
-		}
-		return new IModule[0];
-	}
-
-	/**
-	 * Cache all existing modules.
+	 * Cache any preexisting modules.
 	 */
 	private final void cacheModules() {
+		if (modules != null)
+			return;
+		
 		try {
-			IProject[] projects = getWorkspaceRoot().getProjects();
-			int size = projects.length;
+			clearCache();
+			IProject[] projects2 = getWorkspaceRoot().getProjects();
+			int size = projects2.length;
+			modules = new ArrayList(size);
 			for (int i = 0; i < size; i++) {
-				if (projects[i].isAccessible()) {
-					boolean cache = true;
+				//Trace.trace("caching: " + this + " " + projects[i] + " " + isValidModule(projects[i]));
+				if (projects2[i].isAccessible()) {
 					try {
-						Object o = modules.get(projects[i]);
-						if (o != null)
-							cache = false;
-					} catch (Exception e) {
-						// ignore
-					}
-					
-					if (cache) {
-						try {
-							IModule[] modules2 = createModules(projects[i]);
-							if (modules2 != null)
-								modules.put(projects[i], modules2);
-						} catch (Throwable t) {
-							Trace.trace(Trace.SEVERE, "Error creating module for " + projects[i].getName(), t);
+						IModule[] modules2 = createModules(projects2[i]);
+						if (modules2 != null) {
+							int size2 = modules2.length;
+							for (int j = 0; j < size2; j++)
+								if (modules2[j] != null)
+									modules.add(modules2[j]);
 						}
+					} catch (Throwable t) {
+						Trace.trace(Trace.SEVERE, "Error creating module", t);
 					}
 				}
 			}
@@ -103,7 +75,7 @@
 	}
 
 	/**
-	 * Returns the workspace root.
+	 * Return the workspace root.
 	 * 
 	 * @return the workspace root
 	 */
@@ -111,22 +83,16 @@
 		return ResourcesPlugin.getWorkspace().getRoot();
 	}
 
-	/*
-	 * @see ModuleFactoryDelegate#getModules()
+	/**
+	 * Return the modules provided by this factory.
+	 * 
+	 * @return a possibly-empty array of modules
 	 */
 	public final IModule[] getModules() {
 		cacheModules();
 		
-		List list = new ArrayList();
-		Iterator iter = modules.values().iterator();
-		while (iter.hasNext()) {
-			IModule[] m = (IModule[]) iter.next();
-			if (m != null)
-				list.addAll(Arrays.asList(m));
-		}
-		
-		IModule[] modules2 = new IModule[list.size()];
-		list.toArray(modules2);
+		IModule[] modules2 = new IModule[modules.size()];
+		modules.toArray(modules2);
 		return modules2;
 	}
 
@@ -136,15 +102,15 @@
 	 * @param project a project
 	 * @param delta a resource delta
 	 */
-	public final static void handleGlobalProjectChange(IProject project, IResourceDelta delta) {
-		ModuleFactory[] factories = ServerPlugin.getModuleFactories();
-		int size = factories.length;
+	public final static void handleGlobalProjectChange(final IProject project, IResourceDelta delta) {
+		ModuleFactory[] factories2 = ServerPlugin.getModuleFactories();
+		int size = factories2.length;
 		for (int i = 0; i < size; i++) {
-			if (factories[i].delegate != null && factories[i].delegate instanceof ProjectModuleFactoryDelegate) {
-				ProjectModuleFactoryDelegate pmfd = (ProjectModuleFactoryDelegate) factories[i].delegate;
+			if (factories2[i].delegate != null && factories2[i].delegate instanceof ProjectModuleFactoryDelegate) {
+				ProjectModuleFactoryDelegate pmfd = (ProjectModuleFactoryDelegate) factories2[i].delegate;
 				if (pmfd.deltaAffectsModules(delta)) {
-					pmfd.clearCache(project);
-					pmfd.clearCache();
+					pmfd.modules = null;
+					factories2[i].clearModuleCache();
 				}
 			}
 		}
@@ -193,25 +159,13 @@
 	}
 
 	/**
-	 * Clear cached metadata.
-	 * 
-	 * @deprecated use {@link #clearCache(IProject)} instead
+	 * Clear and cached metadata.
 	 */
 	protected void clearCache() {
 		// ignore
 	}
 
 	/**
-	 * Clear cached metadata.
-	 * 
-	 * @since 2.0
-	 */
-	protected void clearCache(IProject project) {
-		//modules.put(project, null);
-		modules = new HashMap();
-	}
-
-	/**
 	 * Creates the module for a given project.
 	 * 
 	 * @param project a project to create modules for
@@ -248,43 +202,4 @@
 	protected IPath[] getListenerPaths() {
 		return null;
 	}
-
-	/*
-	 * @see ModuleFactoryDelegate#getModules(IProject)
-	 * @since 2.0
-	 */
-	public IModule[] getModules(IProject project) {
-		return cacheModules(project);
-	}
-
-	/*
-	 * @see ModuleFactoryDelegate#findModule(String)
-	 * @since 2.0
-	 */
-	public IModule findModule(String id) {
-		try {
-			// first assume that the id is a project name
-			IProject project = getWorkspaceRoot().getProject(id);
-			if (project != null) {
-				IModule[] m = cacheModules(project);
-				if (m != null) {
-					int size = m.length;
-					for (int i = 0; i < size; i++) {
-						String id2 = m[i].getId();
-						int index = id2.indexOf(":");
-						if (index >= 0)
-							id2 = id2.substring(index+1);
-						
-						if (id.equals(id2))
-							return m[i];
-					}
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.FINER, "Could not find " + id + ". Reverting to default behaviour");
-		}
-		
-		// otherwise default to searching all modules
-		return super.findModule(id);
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java
index 5ab8920..113ad14 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java
@@ -32,12 +32,12 @@
 public class SocketUtil {
 	private static final Random rand = new Random(System.currentTimeMillis());
 
-	protected static final Object lock = new Object();
-
 	private static List localHostCache;
 
 	private static List addressCache;
 
+	private static Object lock = new Object();
+
 	/**
 	 * Static utility class - cannot create an instance.
 	 */
@@ -193,16 +193,16 @@
 				
 				Thread cacheThread = new Thread("Caching localhost information") {
 					public void run() {
-						Iterator iter2 = currentAddresses.iterator();
-						while (iter2.hasNext()) {
-							InetAddress addr = (InetAddress) iter2.next();
-							String hostname = addr.getHostName();
-							String hostname2 = addr.getCanonicalHostName();
+						Iterator iter = currentAddresses.iterator();
+						while (iter.hasNext()) {
+							InetAddress addr = (InetAddress) iter.next();
+							String host = addr.getHostName();
+							String host2 = addr.getCanonicalHostName();
 							synchronized (lock) {
-								if (hostname != null && !addressList.contains(hostname))
-									addressList.add(hostname);
-								if (hostname2 != null && !addressList.contains(hostname2))
-									addressList.add(hostname2);
+								if (host != null && !addressList.contains(host))
+									addressList.add(host);
+								if (host2 != null && !addressList.contains(host2))
+									addressList.add(host2);
 							}
 						}
 					}
diff --git a/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 136deb4..0000000
--- a/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,70 +0,0 @@
-#Wed Jan 17 22:47:37 EST 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.builder.duplicateResourceTask=error
-org.eclipse.jdt.core.builder.invalidClasspath=abort
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
-org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.fieldHiding=error
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
-org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.compiler.problem.nullReference=ignore
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
-org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.incompatibleJDKLevel=warning
-org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.jdt.ui.prefs
deleted file mode 100644
index 4c73947..0000000
--- a/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.jdt.ui.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Wed Jan 17 22:47:37 EST 2007
-eclipse.preferences.version=1
-org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.pde.prefs
deleted file mode 100644
index 08a60e5..0000000
--- a/plugins/org.eclipse.wst.server.ui/.settings/org.eclipse.pde.prefs
+++ /dev/null
@@ -1,14 +0,0 @@
-#Sat Apr 22 18:36:14 EDT 2006
-compilers.incompatible-environment=0
-compilers.p.build=0
-compilers.p.deprecated=1
-compilers.p.no-required-att=0
-compilers.p.not-externalized-att=2
-compilers.p.unknown-attribute=0
-compilers.p.unknown-class=0
-compilers.p.unknown-element=0
-compilers.p.unknown-resource=0
-compilers.p.unresolved-ex-points=0
-compilers.p.unresolved-import=0
-compilers.use-project=true
-eclipse.preferences.version=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 0035fd5..36c91c8 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.204.qualifier
+Bundle-Version: 1.0.107.qualifier
 Bundle-Activator: org.eclipse.wst.server.ui.internal.ServerUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -32,6 +32,5 @@
  org.eclipse.debug.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.debug.ui;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.wst.server.core;bundle-version="[1.0.103,1.1.0)",
- org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.103,1.1.0)",
- org.eclipse.update.core;resolution:=optional;bundle-version="[3.2.0,4.0.0)"
+ org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.103,1.1.0)"
 Eclipse-LazyStart: true; exceptions="org.eclipse.wst.server.ui.internal.webbrowser"
diff --git a/plugins/org.eclipse.wst.server.ui/build.properties b/plugins/org.eclipse.wst.server.ui/build.properties
index 1bcfe59..b08a26c 100644
--- a/plugins/org.eclipse.wst.server.ui/build.properties
+++ b/plugins/org.eclipse.wst.server.ui/build.properties
@@ -14,8 +14,7 @@
                icons/,\
                .options,\
                META-INF/,\
-               about.html,\
-               serverAdapterSites.xml
+               about.html
 bin.excludes = bin/**,\
                @dot/**,\
                temp.folder/**
diff --git a/plugins/org.eclipse.wst.server.ui/icons/wizban/import_configuration_wiz.gif b/plugins/org.eclipse.wst.server.ui/icons/wizban/import_configuration_wiz.gif
new file mode 100644
index 0000000..f46e4e0
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/wizban/import_configuration_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/wizban/import_configuration_wiz.png b/plugins/org.eclipse.wst.server.ui/icons/wizban/import_configuration_wiz.png
deleted file mode 100644
index 000ad20..0000000
--- a/plugins/org.eclipse.wst.server.ui/icons/wizban/import_configuration_wiz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/wizban/new_server_wiz.gif b/plugins/org.eclipse.wst.server.ui/icons/wizban/new_server_wiz.gif
new file mode 100644
index 0000000..30de91f
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/wizban/new_server_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/wizban/new_server_wiz.png b/plugins/org.eclipse.wst.server.ui/icons/wizban/new_server_wiz.png
deleted file mode 100644
index 577567c..0000000
--- a/plugins/org.eclipse.wst.server.ui/icons/wizban/new_server_wiz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/wizban/pub_resource_server_wiz.gif b/plugins/org.eclipse.wst.server.ui/icons/wizban/pub_resource_server_wiz.gif
new file mode 100644
index 0000000..c74d61a
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/wizban/pub_resource_server_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/wizban/select_client_wiz.gif b/plugins/org.eclipse.wst.server.ui/icons/wizban/select_client_wiz.gif
new file mode 100644
index 0000000..5b13db2
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/wizban/select_client_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/wizban/select_client_wiz.png b/plugins/org.eclipse.wst.server.ui/icons/wizban/select_client_wiz.png
deleted file mode 100644
index 6097885..0000000
--- a/plugins/org.eclipse.wst.server.ui/icons/wizban/select_client_wiz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/wizban/select_server_wiz.gif b/plugins/org.eclipse.wst.server.ui/icons/wizban/select_server_wiz.gif
new file mode 100644
index 0000000..3a9dadb
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/icons/wizban/select_server_wiz.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/icons/wizban/select_server_wiz.png b/plugins/org.eclipse.wst.server.ui/icons/wizban/select_server_wiz.png
deleted file mode 100644
index f4f1b76..0000000
--- a/plugins/org.eclipse.wst.server.ui/icons/wizban/select_server_wiz.png
+++ /dev/null
Binary files differ
diff --git a/plugins/org.eclipse.wst.server.ui/plugin.properties b/plugins/org.eclipse.wst.server.ui/plugin.properties
index 8326a5d..8876817 100644
--- a/plugins/org.eclipse.wst.server.ui/plugin.properties
+++ b/plugins/org.eclipse.wst.server.ui/plugin.properties
@@ -38,16 +38,15 @@
 actionDebugOnServer=Debug on Server
 actionProfileOnServer=Profile on Server
 
-# --------------- Preferences and Property pages ---------------
+# --------------- Preferences ---------------
 
 preferenceServersTitle=Server
 preferenceLaunchingTitle=Launching
 preferenceRuntimesTitle=Installed Runtimes
 preferenceServerKeywords=servers runtime environment build installed publishing deploy assembly launching running debugging profiling
 
+# Project properties preferences
 propertiesServer=Server
-propertiesServerInfo=Info
-propertiesMonitor=Monitoring
 
 # --------------- Editor ---------------
 
@@ -71,14 +70,9 @@
 audioCategoryPublish=Publishing
 audioPublishFinished=Publish Finished
 
-# --------------- Other ---------------
-
 monitorLabel=TCP/IP monitor
 monitorDescription=Uses the internal TCP/IP monitor to monitor server requests.
 
-moduleProjectDecoratorLabel=Module Project
-moduleProjectDecoratorDescription=Decorates server modules with information on the project that they come from
-
 # --------------- Action Sets (toolbar icon groups) ---------------
 
 # Web Browser action set
diff --git a/plugins/org.eclipse.wst.server.ui/plugin.xml b/plugins/org.eclipse.wst.server.ui/plugin.xml
index 7666f8d..997fc95 100644
--- a/plugins/org.eclipse.wst.server.ui/plugin.xml
+++ b/plugins/org.eclipse.wst.server.ui/plugin.xml
@@ -110,32 +110,11 @@
   <page
     id="org.eclipse.wst.server.ui.project.properties"
     name="%propertiesServer"
+    objectClass="org.eclipse.core.resources.IProject"
+    adaptable="true"
     class="org.eclipse.wst.server.ui.internal.ProjectPropertyPage">
      <enabledWhen>
-       <and>
-         <adapt type="org.eclipse.core.resources.IProject"/>
-         <test property="org.eclipse.wst.server.ui.isRunnable" value="true"/>
-       </and>
-     </enabledWhen>
-  </page>
-  <page
-    id="org.eclipse.wst.server.ui.properties"
-    name="%propertiesServerInfo"
-    class="org.eclipse.wst.server.ui.internal.ServerPropertyPage">
-     <enabledWhen>
-       <and>
-         <adapt type="org.eclipse.wst.server.core.IServer"/>
-       </and>
-     </enabledWhen>
-  </page>
-  <page
-    id="org.eclipse.wst.server.ui.properties.monitor"
-    name="%propertiesMonitor"
-    class="org.eclipse.wst.server.ui.internal.view.servers.MonitorPropertyPage">
-     <enabledWhen>
-       <and>
-         <adapt type="org.eclipse.wst.server.core.IServer"/>
-       </and>
+        <test property="org.eclipse.wst.server.ui.isRunnable" value="true"/>
      </enabledWhen>
   </page>
 </extension>
@@ -207,41 +186,6 @@
       type="org.eclipse.wst.server.core.IServer"
       class="org.eclipse.wst.server.ui.internal.ServerPropertyTester">
    </propertyTester>
-   <propertyTester
-      id="org.eclipse.wst.server.ui.propertyTester"
-      namespace="org.eclipse.wst.server.ui"
-      properties="serverType"
-      type="org.eclipse.wst.server.ui.internal.view.servers.ModuleServer"
-      class="org.eclipse.wst.server.ui.internal.ServerPropertyTester">
-   </propertyTester>
-   <propertyTester
-      id="org.eclipse.wst.server.ui.propertyTester"
-      namespace="org.eclipse.wst.server.ui"
-      properties="moduleType"
-      type="org.eclipse.wst.server.core.IModule"
-      class="org.eclipse.wst.server.ui.internal.ServerPropertyTester">
-   </propertyTester>
-   <propertyTester
-      id="org.eclipse.wst.server.ui.propertyTester"
-      namespace="org.eclipse.wst.server.ui"
-      properties="moduleType"
-      type="org.eclipse.wst.server.ui.internal.view.servers.ModuleServer"
-      class="org.eclipse.wst.server.ui.internal.ServerPropertyTester">
-   </propertyTester>
-   <propertyTester
-      id="org.eclipse.wst.server.ui.propertyTester"
-      namespace="org.eclipse.wst.server.ui"
-      properties="moduleVersion"
-      type="org.eclipse.wst.server.core.IModule"
-      class="org.eclipse.wst.server.ui.internal.ServerPropertyTester">
-   </propertyTester>
-   <propertyTester
-      id="org.eclipse.wst.server.ui.propertyTester"
-      namespace="org.eclipse.wst.server.ui"
-      properties="moduleVersion"
-      type="org.eclipse.wst.server.ui.internal.view.servers.ModuleServer"
-      class="org.eclipse.wst.server.ui.internal.ServerPropertyTester">
-   </propertyTester>
 </extension>
 
   <extension point="org.eclipse.wst.server.ui.editorPages">
@@ -259,7 +203,6 @@
       class="org.eclipse.wst.server.ui.internal.ServerAdapterFactory"
       adaptableType="org.eclipse.wst.server.core.IServer">
       <adapter type="org.eclipse.ui.IActionFilter"/>
-      <adapter type="org.eclipse.ui.model.IWorkbenchAdapter"/>
     </factory>
   </extension>
 
@@ -413,22 +356,4 @@
      markerType="org.eclipse.wst.common.project.facet.core.validation.marker"/>
 </extension>
 
-<extension point="org.eclipse.ui.decorators">
-  <decorator
-     adaptable="true"
-     class="org.eclipse.wst.server.ui.internal.ModuleLabelDecorator"
-     id="org.eclipse.wst.server.ui.decorator"
-     label="%moduleProjectDecoratorLabel"
-     lightweight="false"
-     state="false">
-    <description>%moduleProjectDecoratorDescription</description>
-    <enablement>
-      <or>
-        <objectClass name="org.eclipse.wst.server.core.IModule"/>
-        <objectClass name="org.eclipse.wst.server.ui.internal.view.servers.ModuleServer"/>
-      </or>
-    </enablement>
-  </decorator>
-</extension>
-
-</plugin>
\ No newline at end of file
+</plugin>
diff --git a/plugins/org.eclipse.wst.server.ui/schema/audio.exsd b/plugins/org.eclipse.wst.server.ui/schema/audio.exsd
index a19edf8..18c2254 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/audio.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/audio.exsd
@@ -12,10 +12,10 @@
 
    <element name="extension">
       <complexType>
-         <sequence>
+         <choice>
             <element ref="category" minOccurs="0" maxOccurs="unbounded"/>
             <element ref="sound" minOccurs="0" maxOccurs="unbounded"/>
-         </sequence>
+         </choice>
          <attribute name="point" type="string" use="required">
             <annotation>
                <documentation>
@@ -47,6 +47,8 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
diff --git a/plugins/org.eclipse.wst.server.ui/schema/editorActions.exsd b/plugins/org.eclipse.wst.server.ui/schema/editorActions.exsd
index f4cfcac..ede4998 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/editorActions.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/editorActions.exsd
@@ -15,7 +15,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="editorAction" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="editorAction" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -49,7 +49,7 @@
       </annotation>

       <complexType>

          <sequence>

-            <element ref="enablement" minOccurs="0" maxOccurs="1"/>

+            <element ref="enablement"/>

          </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

diff --git a/plugins/org.eclipse.wst.server.ui/schema/editorPageSections.exsd b/plugins/org.eclipse.wst.server.ui/schema/editorPageSections.exsd
index f800373..b60d40e 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/editorPageSections.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/editorPageSections.exsd
@@ -14,9 +14,9 @@
 

    <element name="extension">

       <complexType>

-         <sequence>

-            <element ref="section" minOccurs="1" maxOccurs="unbounded"/>

-         </sequence>

+         <choice>

+            <element ref="section"/>

+         </choice>

          <attribute name="point" type="string" use="required">

             <annotation>

                <documentation>

@@ -49,7 +49,7 @@
       </annotation>

       <complexType>

          <sequence>

-            <element ref="enablement" minOccurs="0" maxOccurs="1"/>

+            <element ref="enablement"/>

          </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

diff --git a/plugins/org.eclipse.wst.server.ui/schema/editorPages.exsd b/plugins/org.eclipse.wst.server.ui/schema/editorPages.exsd
index f3a9ec0..62df421 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/editorPages.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/editorPages.exsd
@@ -14,9 +14,9 @@
 

    <element name="extension">

       <complexType>

-         <sequence>

-            <element ref="page" minOccurs="1" maxOccurs="unbounded"/>

-         </sequence>

+         <choice>

+            <element ref="page"/>

+         </choice>

          <attribute name="point" type="string" use="required">

             <annotation>

                <documentation>

@@ -49,7 +49,7 @@
       </annotation>

       <complexType>

          <sequence>

-            <element ref="enablement" minOccurs="0" maxOccurs="1"/>

+            <element ref="enablement"/>

          </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

diff --git a/plugins/org.eclipse.wst.server.ui/schema/initialSelectionProvider.exsd b/plugins/org.eclipse.wst.server.ui/schema/initialSelectionProvider.exsd
index 6a9bca3..0494e1d 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/initialSelectionProvider.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/initialSelectionProvider.exsd
@@ -46,6 +46,8 @@
          </appInfo>
       </annotation>
       <complexType>
+         <sequence>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
@@ -101,7 +103,7 @@
          
       </documentation>
    </annotation>
-
+   
    <annotation>
       <appInfo>
          <meta.section type="implementation"/>
diff --git a/plugins/org.eclipse.wst.server.ui/schema/serverImages.exsd b/plugins/org.eclipse.wst.server.ui/schema/serverImages.exsd
index 9947534..ea0b38d 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/serverImages.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/serverImages.exsd
@@ -12,9 +12,9 @@
 

    <element name="extension">

       <complexType>

-         <sequence>

-            <element ref="image" minOccurs="1" maxOccurs="unbounded"/>

-         </sequence>

+         <choice>

+            <element ref="image" minOccurs="0" maxOccurs="unbounded"/>

+         </choice>

          <attribute name="point" type="string" use="required">

             <annotation>

                <documentation>

@@ -46,6 +46,8 @@
          </appInfo>

       </annotation>

       <complexType>

+         <sequence>

+         </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

@@ -66,7 +68,7 @@
          <attribute name="typeIds" type="string" use="required">

             <annotation>

                <documentation>

-                  a comma separated list of runtime, server, or module type ids

+                  a comma separated list of runtime or server type ids

                </documentation>

             </annotation>

          </attribute>

diff --git a/plugins/org.eclipse.wst.server.ui/schema/wizardFragments.exsd b/plugins/org.eclipse.wst.server.ui/schema/wizardFragments.exsd
index 7531ed9..65bcb2f 100644
--- a/plugins/org.eclipse.wst.server.ui/schema/wizardFragments.exsd
+++ b/plugins/org.eclipse.wst.server.ui/schema/wizardFragments.exsd
@@ -13,7 +13,7 @@
    <element name="extension">

       <complexType>

          <sequence>

-            <element ref="fragment" minOccurs="1" maxOccurs="unbounded"/>

+            <element ref="fragment" minOccurs="0" maxOccurs="unbounded"/>

          </sequence>

          <attribute name="point" type="string" use="required">

             <annotation>

@@ -46,6 +46,8 @@
          </appInfo>

       </annotation>

       <complexType>

+         <sequence>

+         </sequence>

          <attribute name="id" type="string" use="required">

             <annotation>

                <documentation>

diff --git a/plugins/org.eclipse.wst.server.ui/serverAdapterSites.xml b/plugins/org.eclipse.wst.server.ui/serverAdapterSites.xml
deleted file mode 100644
index c0c8976..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverAdapterSites.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<extensions>
-    <site url="http://www.apache.org/dist/geronimo/eclipse/updates/"/>
-    <site url="http://download.boulder.ibm.com/ibmdl/pub/software/websphere/wasce/updates/"/>
-    <site url="http://www.pramati.com/downloads/eclipse/updates/"/>
-    <site url="http://update.eclipse.org/updates/3.3/"/>
-</extensions>
\ No newline at end of file
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 f5ae076..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
@@ -14,7 +14,6 @@
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
@@ -39,10 +38,6 @@
  * @since 1.0
  */
 public class ServerLaunchConfigurationTab extends AbstractLaunchConfigurationTab {
-	// flag to be used to decide whether to enable combo in launch config dialog
-	// after the user requests a launch, they cannot change it
-	private static final String READ_ONLY = "read-only";
-
 	private String[] serverTypeIds;
 
 	private Combo serverCombo;
@@ -55,7 +50,9 @@
 	// list of servers that are in combo
 	private List servers;
 
-	private ILaunchConfigurationWorkingCopy wc;
+	// flag to be used to decide whether to enable combo in launch config dialog
+	// after the user requests a launch, they cannot change it
+	private static final String READ_ONLY = "read-only";
 
 	/**
 	 * Create a new server launch configuration tab.
@@ -179,26 +176,21 @@
 		} else
 			hostname.setText("");
 		
-		// check if "runtime" property is true or false
+		// 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("");
-		
-		try {
-			if (wc != null)
-				((Server)server).setupLaunchConfiguration(wc, new NullProgressMonitor());
-		} catch (Exception e) {
-			// ignore
-		}
-		
+
 		if (server == null)
 			setErrorMessage(Messages.errorNoServerSelected);
 		else if (server.getServerState() != IServer.STATE_STOPPED)
 			setErrorMessage(Messages.errorServerAlreadyRunning);
 		else
 			setErrorMessage(null);
-		
+		/*if (server != null) {
+		 server.setLaunchDefaults(configuration);
+		 }*/
 		updateLaunchConfigurationDialog();
 	}
 
@@ -218,7 +210,6 @@
 			if (server != null)
 				((Server) server).setupLaunchConfiguration(configuration, null);
 		}
-		wc = configuration;
 	}
 
 	/**
@@ -228,19 +219,19 @@
 		serverCombo.setEnabled(true);
 		//remove error message that other instances may have set
 		setErrorMessage(null);
-		
+
 		try {
 			String serverId = configuration.getAttribute(Server.ATTR_SERVER_ID, "");
 			if (serverId != null && !serverId.equals("")) {
 				server = ServerCore.findServer(serverId);
-				
-				if (server == null) { // server no longer exists				
+
+				if (server == null) { //server no longer exists				
 					setErrorMessage(Messages.errorInvalidServer);
-					//serverCombo.clearSelection();  // appears to be broken...doesn't work with read only?												
+					//serverCombo.clearSelection();  //appears to be broken...doesn't work with read only?												
 					serverCombo.setEnabled(false);
 					return;
 				}
-				
+
 				serverCombo.setText(server.getName());
 				if (server.getServerState() != IServer.STATE_STOPPED)
 					setErrorMessage(Messages.errorServerAlreadyRunning);
@@ -248,7 +239,7 @@
 				if (serverCombo.getItemCount() > 0)
 					serverCombo.select(0);
 			}
-			// flag should only be set if launch has been attempted on the config
+			//flag should only be set if launch has been attempted on the config
 			if (configuration.getAttribute(READ_ONLY, false))
 				serverCombo.setEnabled(false);
 		} catch (CoreException e) {
@@ -264,7 +255,6 @@
 			configuration.setAttribute(Server.ATTR_SERVER_ID, server.getId());
 		else
 			configuration.setAttribute(Server.ATTR_SERVER_ID, (String)null);
-		wc = configuration;
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerUICore.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerUICore.java
index 4aab376..0465c70 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerUICore.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerUICore.java
@@ -15,18 +15,15 @@
 import org.eclipse.wst.server.ui.internal.ServerLabelProvider;
 /**
  * Server UI core.
- * <p>
- * This class provides all its functionality through static members.
- * It is not intended to be subclassed or instantiated.
- * </p>
+ * 
  * @since 1.0
  */
-public final class ServerUICore {
+public class ServerUICore {
 	/**
-	 * Cannot instantiate ServerUICore - use static methods.
+	 * ServerUICore constructor comment.
 	 */
 	private ServerUICore() {
-		// can't create
+		super();
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerUIUtil.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerUIUtil.java
index 064a0fb..9cc2bb2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerUIUtil.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerUIUtil.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,18 +15,15 @@
 import org.eclipse.swt.widgets.Shell;
 /**
  * Server UI utility methods.
- * <p>
- * This class provides all its functionality through static members.
- * It is not intended to be subclassed or instantiated.
- * </p>
+ * 
  * @since 1.0
  */
-public final class ServerUIUtil {
+public class ServerUIUtil {
 	/**
-	 * Cannot instantiate ServerUIUtil - use static methods.
+	 * ServerUIUtil constructor comment.
 	 */
 	private ServerUIUtil() {
-		// can't create
+		super();
 	}
 
 	/**
@@ -42,35 +39,4 @@
 	public static boolean showNewRuntimeWizard(Shell shell, String typeId, String versionId) {
 		return ServerUIPlugin.showNewRuntimeWizard(shell, typeId, versionId, null);
 	}
-
-	/**
-	 * Open the new runtime wizard. The given typeId, versionId, and runtimeTypeId are
-	 * used to filter the set of runtimes displayed.
-	 * 
-	 * @param shell a shell to use when creating the wizard
-	 * @param typeId a module type id, or null for any module type
-	 * @param versionId a module version, or null for any version
-	 * @param runtimeTypeId a server runtime type, or null for any type
-	 * @return <code>true</code> if a runtime was created, or
-	 *    <code>false</code> otherwise
-	 * @since 2.0
-	 */
-	public static boolean showNewRuntimeWizard(Shell shell, String typeId, String versionId, String runtimeTypeId) {
-		return ServerUIPlugin.showNewRuntimeWizard(shell, typeId, versionId, runtimeTypeId);		
-	}
-
-	/**
-	 * Open the new server wizard.
-	 * 
-	 * @param shell a shell to use when creating the wizard
-	 * @param typeId a module type id, or null for any module type
-	 * @param versionId a module version, or null for any version
-	 * @param serverTypeId a server runtime type, or null for any type
-	 * @return <code>true</code> if a server was created, or
-	 *    <code>false</code> otherwise
-	 * @since 2.0
-	 */
-	public static boolean showNewServerWizard(Shell shell, String typeId, String versionId, String serverTypeId) {
-		return ServerUIPlugin.showNewServerWizard(shell, typeId, versionId, serverTypeId);
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/actions/RunOnServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/actions/RunOnServerAction.java
deleted file mode 100644
index 5633299..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/actions/RunOnServerAction.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.actions;
-
-import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.wst.server.ui.internal.ImageResource;
-import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.actions.RunOnServerActionDelegate;
-/**
- * "Run on Server" menu action. Allows the user to select an
- * object, and have automatic server creation, launching, and
- * the appropriate client to appear. A new instance of this
- * action must be created for each object that the user selects.
- * <p>
- * This class may be instantiated; it is not intended to be subclassed.
- * </p>
- * 
- * @since 2.0
- */
-public class RunOnServerAction extends Action {
-	protected RunOnServerActionDelegate delegate;
-
-	/**
-	 * Create a new Run on Server action for run mode.
-	 * 
-	 * @param object the object to attempt to run
-	 */
-	public RunOnServerAction(Object object) {
-		this(object, ILaunchManager.RUN_MODE);
-	}
-
-	/**
-	 * Create a new Run on Server action.
-	 * 
-	 * @param object the object to attempt to run
-	 * @param launchMode a {@link ILaunchManager} launch mode
-	 */
-	public RunOnServerAction(Object object, String launchMode) {
-		super();
-		
-		if (ILaunchManager.DEBUG_MODE.equals(launchMode)) {
-			setText(Messages.actionDebugOnServer);
-			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DTOOL_DEBUG_ON_SERVER));
-			setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CTOOL_DEBUG_ON_SERVER));
-			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ETOOL_DEBUG_ON_SERVER));
-		} else if (ILaunchManager.PROFILE_MODE.equals(launchMode)) {
-			setText(Messages.actionProfileOnServer);
-			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DTOOL_PROFILE_ON_SERVER));
-			setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CTOOL_PROFILE_ON_SERVER));
-			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ETOOL_PROFILE_ON_SERVER));
-		} else {
-			setText(Messages.actionRunOnServer);
-			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DTOOL_RUN_ON_SERVER));
-			setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CTOOL_RUN_ON_SERVER));
-			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ETOOL_RUN_ON_SERVER));
-		}
-		
-		delegate = new RunOnServerActionDelegate();
-		delegate.setLaunchMode(launchMode);
-		if (object != null) {
-			StructuredSelection sel = new StructuredSelection(object);
-			delegate.selectionChanged(this, sel);
-		} else
-			delegate.selectionChanged(this, null);
-	}
-
-	/* (non-Javadoc)
-	 * Method declared on IAction.
-	 */
-	public void run() {
-		delegate.run(this);
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
index 3dc6d8b..b478cde 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
@@ -170,7 +170,7 @@
 				IServerEditorPartFactory pageFactory = serverEditor.getPageFactory(this);
 				if (pageFactory.supportsInsertionId(insertionId)) {
 					String serverTypeId = null;
-					if (server != null && server.getServerType() != null)
+					if (server != null) 
 						serverTypeId = server.getServerType().getId();
 					if (serverTypeId != null && factory.supportsType(serverTypeId)
 							&& factory.shouldCreateSection(server)) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ContextIds.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ContextIds.java
index db2aaad..f57489d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ContextIds.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ContextIds.java
@@ -25,22 +25,27 @@
 
 	public static final String NEW_SERVER_WIZARD = ServerUIPlugin.PLUGIN_ID + ".swns0000";
 	public static final String NEW_SERVER_TYPE = ServerUIPlugin.PLUGIN_ID + ".swns0006";
-	
-	public static final String NEW_RUNTIME_WIZARD = ServerUIPlugin.PLUGIN_ID + ".swnr0000";
 
 	public static final String LAUNCH_CONFIGURATION_SERVER_COMBO = ServerUIPlugin.PLUGIN_ID + ".swsl0000";
 
 	public static final String SELECT_TASK_WIZARD = ServerUIPlugin.PLUGIN_ID + ".sstw0000";
 
+	/*public static final String IMPORT_CONFIGURATION_WIZARD = ServerUIPlugin.PLUGIN_ID + ".swic0000";
+	public static final String IMPORT_CONFIGURATION_NAME = ServerUIPlugin.PLUGIN_ID + ".swic0002";
+	public static final String IMPORT_CONFIGURATION_FOLDER = ServerUIPlugin.PLUGIN_ID + ".swic0004";
+	public static final String IMPORT_CONFIGURATION_FACTORY = ServerUIPlugin.PLUGIN_ID + ".swic0006";
+	public static final String IMPORT_CONFIGURATION_LOCATION = ServerUIPlugin.PLUGIN_ID + ".swic0008";
+	public static final String IMPORT_CONFIGURATION_LOCATION_BROWSE = ServerUIPlugin.PLUGIN_ID + ".swic0010";*/
+	
 	public static final String MODIFY_MODULES_COMPOSITE = ServerUIPlugin.PLUGIN_ID + ".swmm0000";
 
 	public static final String TERMINATE_SERVER_DIALOG = ServerUIPlugin.PLUGIN_ID + ".sdti0000";
-	public static final String DELETE_SERVER_DIALOG = ServerUIPlugin.PLUGIN_ID + ".svcp0002";
 
 	public static final String PREF_GENERAL = ServerUIPlugin.PLUGIN_ID + ".spge0000";
 	public static final String PREF_GENERAL_AUTOPUBLISH_LOCAL = ServerUIPlugin.PLUGIN_ID + ".spge0002";
 	public static final String PREF_GENERAL_AUTOPUBLISH_REMOTE = ServerUIPlugin.PLUGIN_ID + ".spge0006";
 	public static final String PREF_GENERAL_PUBLISH_BEFORE_START = ServerUIPlugin.PLUGIN_ID + ".spge0012";
+	public static final String PREF_GENERAL_AUTO_RESTART = ServerUIPlugin.PLUGIN_ID + ".spge0014";
 	public static final String PREF_GENERAL_PROMPT_IRREVERSIBLE = ServerUIPlugin.PLUGIN_ID + ".spge0020";
 	public static final String PREF_GENERAL_PROMPT_LAUNCH_MODE = ServerUIPlugin.PLUGIN_ID + ".spge0030";
 	public static final String PREF_GENERAL_SHOW_ON_ACTIVITY = ServerUIPlugin.PLUGIN_ID + ".spge0022";
@@ -50,7 +55,6 @@
 	public static final String PREF_GENERAL_LAUNCH_MODE = ServerUIPlugin.PLUGIN_ID + ".spge0030";
 	public static final String PREF_GENERAL_LAUNCH_MODE_DEBUG = ServerUIPlugin.PLUGIN_ID + ".spge0031";
 	public static final String PREF_GENERAL_ENABLE_BREAKPOINTS = ServerUIPlugin.PLUGIN_ID + ".spge0032";
-	public static final String PREF_GENERAL_RESTART = ServerUIPlugin.PLUGIN_ID + ".spge0034";
 
 	public static final String VIEW_SERVERS = ServerUIPlugin.PLUGIN_ID + ".svcp0000";
 
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 7dee1e8..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
@@ -38,7 +38,6 @@
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.PlatformUI;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.IServer.IOperationListener;
 import org.eclipse.wst.server.core.internal.ServerSchedulingRule;
@@ -102,7 +101,7 @@
 		composite.setLayout(layout);
 		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
 		composite.setFont(parent.getFont());
-		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.DELETE_SERVER_DIALOG);
+		//WorkbenchHelp.setHelp(composite, ContextIds.TERMINATE_SERVER_DIALOG);
 	
 		Label label = new Label(composite, SWT.NONE);
 		if (servers.length == 1)
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java
index 2ac3b00..2271457 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java
@@ -24,7 +24,7 @@
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
 /**
  * Utility class to handle image resources.
  */
@@ -69,6 +69,7 @@
 	public static final String IMG_CLCL_START = "IMG_CLCL_START";
 	public static final String IMG_CLCL_START_DEBUG = "IMG_CLCL_START_DEBUG";
 	public static final String IMG_CLCL_START_PROFILE = "IMG_CLCL_START_PROFILE";
+	public static final String IMG_CLCL_RESTART = "IMG_CLCL_RESTART";
 	public static final String IMG_CLCL_STOP = "IMG_CLCL_STOP";
 	public static final String IMG_CLCL_PUBLISH = "IMG_CLCL_PUBLISH";
 	public static final String IMG_CLCL_DISCONNECT = "IMG_CLCL_DISCONNECT";
@@ -76,6 +77,7 @@
 	public static final String IMG_ELCL_START = "IMG_ELCL_START";
 	public static final String IMG_ELCL_START_DEBUG = "IMG_ELCL_START_DEBUG";
 	public static final String IMG_ELCL_START_PROFILE = "IMG_ELCL_START_PROFILE";
+	public static final String IMG_ELCL_RESTART = "IMG_ELCL_RESTART";
 	public static final String IMG_ELCL_STOP = "IMG_ELCL_STOP";
 	public static final String IMG_ELCL_PUBLISH = "IMG_ELCL_PUBLISH";
 	public static final String IMG_ELCL_DISCONNECT = "IMG_ELCL_DISCONNECT";
@@ -83,6 +85,7 @@
 	public static final String IMG_DLCL_START = "IMG_DLCL_START";
 	public static final String IMG_DLCL_START_DEBUG = "IMG_DLCL_START_DEBUG";
 	public static final String IMG_DLCL_START_PROFILE = "IMG_DLCL_START_PROFILE";
+	public static final String IMG_DLCL_RESTART = "IMG_DLCL_RESTART";
 	public static final String IMG_DLCL_STOP = "IMG_DLCL_STOP";
 	public static final String IMG_DLCL_PUBLISH = "IMG_DLCL_PUBLISH";
 	public static final String IMG_DLCL_DISCONNECT = "IMG_DLCL_DISCONNECT";
@@ -199,10 +202,10 @@
 		imageDescriptors = new HashMap();
 
 		// wizard banners
-		registerImage(IMG_WIZBAN_NEW_SERVER, URL_WIZBAN + "new_server_wiz.png");
-		registerImage(IMG_WIZBAN_IMPORT_SERVER_CONFIGURATION, URL_WIZBAN + "import_configuration_wiz.png");
-		registerImage(IMG_WIZBAN_SELECT_SERVER_CLIENT, URL_WIZBAN + "select_client_wiz.png");
-		registerImage(IMG_WIZBAN_SELECT_SERVER, URL_WIZBAN + "select_server_wiz.png");
+		registerImage(IMG_WIZBAN_NEW_SERVER, URL_WIZBAN + "new_server_wiz.gif");
+		registerImage(IMG_WIZBAN_IMPORT_SERVER_CONFIGURATION, URL_WIZBAN + "import_configuration_wiz.gif");
+		registerImage(IMG_WIZBAN_SELECT_SERVER_CLIENT, URL_WIZBAN + "select_client_wiz.gif");
+		registerImage(IMG_WIZBAN_SELECT_SERVER, URL_WIZBAN + "select_server_wiz.gif");
 
 		// client images
 		registerImage(IMG_ETOOL_RUN_ON_SERVER, URL_ETOOL + "run_on_server.gif");
@@ -241,6 +244,7 @@
 		registerImage(IMG_ELCL_START, URL_ELCL + "launch_run.gif");
 		registerImage(IMG_ELCL_START_DEBUG, URL_ELCL + "launch_debug.gif");
 		registerImage(IMG_ELCL_START_PROFILE, URL_ELCL + "launch_profile.gif");
+		registerImage(IMG_ELCL_RESTART, URL_ELCL + "launch_restart.gif");
 		registerImage(IMG_ELCL_STOP, URL_ELCL + "launch_stop.gif");
 		registerImage(IMG_ELCL_DISCONNECT, URL_ELCL + "launch_disconnect.gif");
 	
@@ -248,6 +252,7 @@
 		registerImage(IMG_CLCL_START, URL_CLCL + "launch_run.gif");
 		registerImage(IMG_CLCL_START_DEBUG, URL_CLCL + "launch_debug.gif");
 		registerImage(IMG_CLCL_START_PROFILE, URL_CLCL + "launch_profile.gif");
+		registerImage(IMG_CLCL_RESTART, URL_CLCL + "launch_restart.gif");
 		registerImage(IMG_CLCL_STOP, URL_CLCL + "launch_stop.gif");
 		registerImage(IMG_CLCL_DISCONNECT, URL_CLCL + "launch_disconnect.gif");
 	
@@ -255,6 +260,7 @@
 		registerImage(IMG_DLCL_START, URL_DLCL + "launch_run.gif");
 		registerImage(IMG_DLCL_START_DEBUG, URL_DLCL + "launch_debug.gif");
 		registerImage(IMG_DLCL_START_PROFILE, URL_DLCL + "launch_profile.gif");
+		registerImage(IMG_DLCL_RESTART, URL_DLCL + "launch_restart.gif");
 		registerImage(IMG_DLCL_STOP, URL_DLCL + "launch_stop.gif");
 		registerImage(IMG_DLCL_DISCONNECT, URL_DLCL + "launch_disconnect.gif");
 	
@@ -280,7 +286,7 @@
 		loadServerImages();
 		
 		PlatformUI.getWorkbench().getProgressService().registerIconForFamily(
-				getImageDescriptor(IMG_SERVER), ServerUtil.SERVER_JOB_FAMILY);
+				getImageDescriptor(IMG_SERVER), ServerPlugin.PLUGIN_ID);
 	}
 
 	/**
@@ -324,12 +330,11 @@
 					imageDescriptor = ImageDescriptor.getMissingImageDescriptor();
 				
 				if (imageDescriptor != null) {
-					String[] typeIds = ServerUIPlugin.tokenize(cf[i].getAttribute("typeIds"), ",");
-					int size2 = typeIds.length;
-					for (int j = 0; j < size2; j++) {
-						imageRegistry.put(typeIds[j], imageDescriptor);		
-						imageDescriptors.put(typeIds[j], imageDescriptor);
-					}
+					String typeId = cf[i].getAttribute("typeIds");
+					if (typeId == null)
+						typeId = cf[i].getAttribute("moduleId");
+					imageRegistry.put(typeId, imageDescriptor);		
+					imageDescriptors.put(typeId, imageDescriptor);
 				}
 				Trace.trace(Trace.CONFIG, "  Loaded serverImage: " + cf[i].getAttribute("id"));
 			} catch (Throwable t) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/InitializeJob.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/InitializeJob.java
deleted file mode 100644
index c7b81fb..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/InitializeJob.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**********************************************************************
- * 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.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.ServerCore;
-/**
- * Job to initialize server UI.
- */
-public class InitializeJob extends Job {
-	/**
-	 * Create the job.
-	 */
-	public InitializeJob() {
-		super(Messages.jobInitializing);
-		setPriority(Job.SHORT);
-	}
-
-	/**
-	 * @see org.eclipse.core.runtime.jobs.Job#run(IProgressMonitor)
-	 */
-	protected IStatus run(IProgressMonitor monitor) {
-		IServer[] servers = ServerCore.getServers();
-		if (servers != null) {
-			int size = servers.length;
-			for (int i = 0; i < size; i++) {
-				servers[i].addServerListener(ServerUIPlugin.serverListener);
-				servers[i].addPublishListener(ServerUIPlugin.publishListener);
-			}
-		}
-		return Status.OK_STATUS;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java
index bffcfd8..4575fb4 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java
@@ -10,7 +10,6 @@
  **********************************************************************/
 package org.eclipse.wst.server.ui.internal;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
@@ -76,11 +75,7 @@
 				Trace.trace(Trace.FINEST, "Attempting to load client: " + client);
 				try {
 					Object launchable = launchableAdapter.getLaunchable(server, moduleArtifact);
-					IStatus status = client.launch(server, launchable, launchMode, server.getExistingLaunch());
-					if (status != null && status.getSeverity() == IStatus.ERROR)
-						EclipseUtil.openError(null, status);
-				} catch (CoreException ce) {
-					EclipseUtil.openError(null, ce.getStatus());
+					client.launch(server, launchable, launchMode, server.getExistingLaunch());
 				} catch (Exception e) {
 					Trace.trace(Trace.SEVERE, "Server client failed", e);
 				}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchingPreferencePage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchingPreferencePage.java
index fd86fc6..2cc3c39 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchingPreferencePage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchingPreferencePage.java
@@ -12,6 +12,9 @@
 
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.internal.RestartServerJob;
 import org.eclipse.wst.server.core.internal.ServerPreferences;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
@@ -35,6 +38,7 @@
 	protected ServerUIPreferences uiPreferences;
 
 	protected Button publishBeforeStart;
+	protected Button autoRestart;
 
 	protected byte saveEditors;
 	protected Button[] saveButtons;
@@ -44,8 +48,6 @@
 	protected Button[] launchMode2Buttons;
 	protected int breakpointEnablement;
 	protected Button[] breakpointButtons;
-	protected int restartEnablement;
-	protected Button[] restartButtons;
 
 	/**
 	 * ServerPreferencesPage constructor comment.
@@ -56,7 +58,7 @@
 		preferences = ServerPreferences.getInstance();
 		uiPreferences = ServerUIPlugin.getPreferences();
 	}
-
+	
 	/**
 	 * Create the preference options.
 	 *
@@ -87,6 +89,14 @@
 		publishBeforeStart.setSelection(preferences.isAutoPublishing());
 		whs.setHelp(publishBeforeStart, ContextIds.PREF_GENERAL_PUBLISH_BEFORE_START);
 		
+		autoRestart = new Button(composite, SWT.CHECK);
+		autoRestart.setText(Messages.prefAutoRestart);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+		data.horizontalSpan = 3;
+		autoRestart.setLayoutData(data);
+		autoRestart.setSelection(preferences.isAutoRestarting());
+		whs.setHelp(autoRestart, ContextIds.PREF_GENERAL_AUTO_RESTART);
+			
 		Label label = new Label(composite, SWT.NONE);
 		data = new GridData();
 		data.horizontalSpan = 3;
@@ -100,16 +110,13 @@
 		
 		createBreakpointsGroup(composite);
 		
-		createRestartGroup(composite);
-		
 		setSaveEditorStatus(uiPreferences.getSaveEditors());
 		setLaunchModeStatus(uiPreferences.getLaunchMode());
 		setLaunchMode2Status(uiPreferences.getLaunchMode2());
 		setBreakpointsStatus(uiPreferences.getEnableBreakpoints());
-		setRestartStatus(uiPreferences.getRestart());
 		
 		Dialog.applyDialogFont(composite);
-		
+	
 		return composite;
 	}
 
@@ -295,50 +302,6 @@
 		breakpointButtons[2].setSelection(breakpointEnablement == ServerUIPreferences.ENABLE_BREAKPOINTS_PROMPT); 
 	}
 
-	protected void createRestartGroup(Composite composite) {
-		Group group = new Group(composite, SWT.NONE);
-		group.setText(Messages.prefRestart);
-		
-		GridLayout layout = new GridLayout();
-		layout.numColumns = 3;
-		group.setLayout(layout);
-		GridData data = new GridData(GridData.FILL_HORIZONTAL);
-		data.horizontalSpan = 3;
-		group.setLayoutData(data);
-		
-		String[] messages = new String[] {
-			Messages.prefRestartAlways, Messages.prefRestartNever, Messages.prefRestartPrompt
-		};
-		
-		final byte[] options = new byte[] {
-			ServerUIPreferences.RESTART_ALWAYS,
-			ServerUIPreferences.RESTART_NEVER,
-			ServerUIPreferences.RESTART_PROMPT
-		};
-		
-		Button[] buttons = new Button[3];
-		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
-		for (int i = 0; i < 3; i++) {
-			buttons[i] = new Button(group, SWT.RADIO);
-			buttons[i].setText(messages[i]);
-			final int b = i;
-			buttons[i].addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent event) {
-					restartEnablement = options[b];
-				}
-			});
-			whs.setHelp(buttons[i], ContextIds.PREF_GENERAL_RESTART);
-		}
-		restartButtons = buttons;
-	}
-
-	protected void setRestartStatus(int mode) {
-		restartEnablement = mode;
-		restartButtons[0].setSelection(restartEnablement == ServerUIPreferences.RESTART_ALWAYS);
-		restartButtons[1].setSelection(restartEnablement == ServerUIPreferences.RESTART_NEVER);
-		restartButtons[2].setSelection(restartEnablement == ServerUIPreferences.RESTART_PROMPT); 
-	}
-
 	/**
 	 * Initializes this preference page using the passed workbench.
 	 *
@@ -352,13 +315,13 @@
 	 * Performs special processing when this page's Defaults button has been pressed.
 	 */
 	protected void performDefaults() {
+		autoRestart.setSelection(preferences.isDefaultAutoRestarting());
 		publishBeforeStart.setSelection(preferences.isDefaultAutoPublishing());
 		
 		setSaveEditorStatus(uiPreferences.getDefaultSaveEditors());
 		setLaunchModeStatus(uiPreferences.getDefaultLaunchMode());
 		setLaunchMode2Status(uiPreferences.getDefaultLaunchMode2());
 		setBreakpointsStatus(uiPreferences.getDefaultEnableBreakpoints());
-		setRestartStatus(uiPreferences.getDefaultRestart());
 		
 		super.performDefaults();
 	}
@@ -368,12 +331,38 @@
 	 */
 	public boolean performOk() {
 		preferences.setAutoPublishing(publishBeforeStart.getSelection());
+		preferences.setAutoRestarting(autoRestart.getSelection());
 		uiPreferences.setSaveEditors(saveEditors);
 		uiPreferences.setLaunchMode(launchMode);
 		uiPreferences.setLaunchMode2(launchMode2);
 		uiPreferences.setEnableBreakpoints(breakpointEnablement);
-		uiPreferences.setRestart(restartEnablement);
+		
+		// auto restart any servers that are ready for restart
+		if (autoRestart.getSelection())
+			autoRestartAll();
 		
 		return true;
 	}
+
+	/**
+	 * Automatically restart any servers that require it.
+	 */
+	protected static void autoRestartAll() {
+		Trace.trace(Trace.FINEST, "Auto restarting all dirty servers");
+		
+		IServer[] servers = ServerCore.getServers();
+		if (servers != null) {
+			int size = servers.length;
+			for (int i = 0; i < size; i++) {
+				IServer server = servers[i];
+				if (server.getServerState() == IServer.STATE_STARTED && server.getServerRestartState()) {
+					String mode = server.getMode();
+					if (server.canRestart(mode).isOK()) {
+						RestartServerJob job = new RestartServerJob(server, mode);
+						job.schedule();
+					}
+				}
+			}
+		}
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
index 645e934..a4b0035 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
@@ -62,14 +62,12 @@
 	public static String errorCouldNotCreateServerProject;
 	public static String errorDialogTitle;
 	public static String editorValidateEditFailureMessage;
+	public static String prefProjectDescription;
 	public static String prefProjectNotModule;
 	public static String prefProject;
 	public static String prefProjectDefaultServer;
 	public static String prefProjectNotConfigured;
 	public static String prefProjectNoServer;
-	public static String propServerInfoName;
-	public static String propServerInfoType;
-	public static String propServerInfoVendor;
 	public static String errorCouldNotSavePreference;
 	public static String preferenceRuntimesDescription;
 	public static String add;
@@ -85,11 +83,17 @@
 	public static String dialogRuntimeInUse;
 	public static String defaultDialogTitle;
 	public static String preferenceRuntimesTitleLong;
+	public static String runtimeTargetCombo;
+	public static String runtimeTargetNone;
+	public static String runtimeTargetNewRuntime;
+	public static String runtimeTargetChildren;
+	public static String runtimeTargetRuntimePreferences;
 	public static String prefAutoPublish;
 	public static String prefAutoPublishLocal;
 	public static String prefAutoPublishLocalTime;
 	public static String prefAutoPublishRemote;
 	public static String prefAutoPublishRemoteTime;
+	public static String prefAutoRestart;
 	public static String prefPromptIrreversible;
 	public static String prefLaunchMode;
 	public static String prefLaunchModeRestart;
@@ -104,10 +108,6 @@
 	public static String prefBreakpointsAlways;
 	public static String prefBreakpointsNever;
 	public static String prefBreakpointsPrompt;
-	public static String prefRestart;
-	public static String prefRestartAlways;
-	public static String prefRestartNever;
-	public static String prefRestartPrompt;
 	public static String prefShowOnActivity;
 	public static String prefSyncStartup;
 	public static String prefSaveEditors;
@@ -133,9 +133,6 @@
 	public static String actionRestart;
 	public static String actionPublishToolTip;
 	public static String actionPublish;
-	public static String actionPublishCleanToolTip;
-	public static String actionPublishClean;
-	public static String actionRename;
 	public static String actionDelete;
 	public static String actionRemove;
 	public static String dialogRemoveModuleConfirm;
@@ -161,12 +158,8 @@
 	public static String dialogBreakpointsReenable;
 	public static String dialogBreakpointsContinue;
 	public static String dialogRemember;
-	public static String dialogRestart;
-	public static String dialogRestartRestart;
-	public static String dialogRestartContinue;
-	public static String dialogPublishClean;
 	public static String errorNoServer;
-	public static String errorRootModule;
+	public static String errorNoClient;
 	public static String hostname;
 	public static String wizModuleTitle;
 	public static String wizModuleDescription;
@@ -177,10 +170,9 @@
 	public static String wizModuleRemove;
 	public static String wizModuleAddAll;
 	public static String wizModuleRemoveAll;
-	public static String wizModuleRequiredModule;
-	public static String wizModuleRequiredModules;
 	public static String wizTaskTitle;
 	public static String wizTaskDescription;
+	public static String wizTaskNone;
 	public static String wizErrorInvalidFolder;
 	public static String wizErrorClosedProject;
 	public static String createServerProjectDialogTitle;
@@ -198,29 +190,28 @@
 	public static String wizProfileOnServerTitle;
 	public static String wizNewRuntimeTitle;
 	public static String wizNewRuntimeDescription;
-	public static String wizNewRuntimeCreateServer;
 	public static String performingTasks;
 	public static String wizModuleWizardTitle;
 	public static String wizNewServerWizardTitle;
 	public static String wizSelectClientWizardTitle;
 	public static String wizTaskWizardTitle;
 	public static String viewBy;
-	public static String dialogMonitorTitle;
-	public static String dialogMonitorMonitorPort;
+	public static String wizDescription;
 	public static String dialogMonitorColumnStatus;
 	public static String dialogMonitorColumnType;
 	public static String dialogMonitorColumnPort;
 	public static String dialogMonitorColumnMonitorPort;
 	public static String dialogMonitorColumnContentType;
-	public static String dialogMonitorContentType;
-	public static String dialogMonitorContentTypeAll;
-	public static String dialogMonitorContentTypeWeb;
-	public static String dialogMonitorContentTypeWebServices;
-	public static String dialogMonitorNone;
 	public static String start;
 	public static String stop;
+	public static String dialogMonitorTitle;
+	public static String dialogMonitorMonitorPort;
+	public static String dialogMonitorContentType;
+	public static String dialogMonitorContentTypeAll;
 	public static String started;
 	public static String stopped;
+	public static String dialogMonitorContentTypeWeb;
+	public static String dialogMonitorContentTypeWebServices;
 	public static String columnName;
 	public static String columnType;
 	public static String runtimeTypeCompTree;
@@ -236,7 +227,7 @@
 	public static String serverTypeCompLabel;
 	public static String viewServers;
 	public static String viewNoModules;
-	public static String actionProperties;
+	public static String actionMonitorProperties;
 	public static String actionOpen;
 	public static String viewServer;
 	public static String viewStatus;
@@ -246,7 +237,6 @@
 	public static String actionModifyModulesToolTip;
 	public static String actionModifyModules;
 	public static String actionMonitor;
-	public static String viewInitializing;
 	public static String viewSyncOkay;
 	public static String viewSyncRestart;
 	public static String viewSyncPublish;
@@ -317,19 +307,11 @@
 	public static String wizNewInstallableServerRestart;
 	public static String installableServerCompTree;
 	public static String installableServerLink;
-	public static String installableServerLocal;
-	public static String installableServerSearching;
 	public static String wizLicenseTitle;
 	public static String wizLicenseDescription;
 	public static String wizLicenseAccept;
 	public static String wizLicenseDecline;
 	public static String wizLicenseNone;
-	public static String jobInitializing;
-	public static String jobInitializingServersView;
-	public static String jobRestarting;
-	public static String clientDefaultName;
-	public static String clientDefaultDescription;
-	public static String moduleDecoratorProject;
 
 	public static String errorStartingMonitor;
 	public static String audioPrefSelectFile;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
index f374828..58a3350 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004, 2007 IBM Corporation and others.
+# Copyright (c) 2004, 2005 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@
 wizRunOnServerTitle=Run On Server
 wizDebugOnServerTitle=Debug On Server
 wizProfileOnServerTitle=Profile On Server
-wizSelectServerPreferred=Always use this server when running this &project
+wizSelectServerPreferred=Set server as project &default (do not ask again)
 
 # Select Server Client Wizard
 wizSelectClientWizardTitle=Select a Server Client
@@ -42,27 +42,27 @@
 wizTaskWizardTitle=Select Tasks
 wizTaskTitle=Select Tasks
 wizTaskDescription=Select the tasks to perform on the server.
+wizTaskNone=There are currently no tasks that need to be performed.
 
 # New Runtime Wizard
 wizNewRuntimeWizardTitle=New Server Runtime
 wizNewRuntimeTitle=New Server Runtime
 wizNewRuntimeDescription=Define a new installed server runtime environment
-wizNewRuntimeCreateServer=Also &create new local server
 wizEditRuntimeWizardTitle=Edit Server Runtime
 
-# New Server Adapter Wizard
-wizNewInstallableServerTitle=Install New Server Adapter
+# New Installable Server Wizard
+wizNewInstallableServerTitle=Install New Server
 wizNewInstallableServerDescription=Download and install support for a new server
-wizNewInstallableServerMessage=The following server adapters have been found on remote update manager sites. Select a server adapter to download and install.
+wizNewInstallableServerMessage=Support for a new server will be downloaded and installed from a remote update manager site. The workbench must be restarted for the changes to take effect.
 wizNewInstallableServerConfirm=Support for {0} will now be downloaded and installed. You will be prompted to restart once the installation is complete.
-wizNewInstallableServerJob=Installing {0}
+wizNewInstallableServerJob=Installing support for {0}
 wizNewInstallableServerRestart=Installation complete. The new server will not be available until after the workbench is restarted. Do you want to restart now?
 
 # License wizard
 wizLicenseTitle=Feature License
-wizLicenseDescription=This license must be accepted before proceeding with the installation.
-wizLicenseAccept=I &accept the terms of the license agreement
-wizLicenseDecline=I &do not accept the terms of the license agreement
+wizLicenseDescription=Some features have license agreements that you need to accept before proceeding with the installation.
+wizLicenseAccept=I &accept the terms in the license agreement
+wizLicenseDecline=I &do not accept the terms in the license agreement
 wizLicenseNone=Feature does not contain a license.
 
 # Add/Remove Modules
@@ -76,8 +76,9 @@
 wizModuleAddAll=Add A&ll >>
 wizModuleRemove=< &Remove
 wizModuleRemoveAll=<< Re&move All
-wizModuleRequiredModule={0} is required and can't be removed from the server
-wizModuleRequiredModules=One of the required modules ({0}) must be added to the server
+
+# General text used in multiple wizards
+wizDescription=Description:
 
 # Wizard info and error messages
 wizErrorInvalidFolder=The folder must be a server project or a folder within a server project
@@ -98,13 +99,11 @@
 actionOpen=Open
 actionMonitor=Monitoring
 actionMonitorPort=Monitor port {0} ({1})
-actionProperties=Properties
+actionMonitorProperties=Properties
 actionNew=New
 actionNewServer=Server
 
 # --- Servers view ---
-viewInitializing=Initializing...
-
 # Column titles
 viewServer=Server
 viewStatus=Status
@@ -123,15 +122,12 @@
 actionRestartToolTip=Restart the server
 actionPublish=Publish
 actionPublishToolTip=Publish to the server
-actionPublishClean=Clean...
-actionPublishCleanToolTip=Clean projects on the server
 actionModifyModules=Add and Remove Projects...
 actionModifyModulesToolTip=Add and remove projects
 actionRestartModule=Restart {0}
 actionUpdateStatus=Initialize Server Status
 actionMoveServerToMetadata=Move to Metadata
 actionMoveServerToWorkspace=Move to Workspace
-actionRename=Rename
 
 # Status column text
 viewStatusStarted=Started
@@ -190,11 +186,12 @@
 preferenceRuntimesTitleLong=Installed Server Runtime Environments
 
 # Server preferences
-prefAutoPublish=Automatically publish w&hen starting servers
+prefAutoPublish=Automatically p&ublish when starting servers
 prefAutoPublishLocal=Automatically publish to &local servers
 prefAutoPublishLocalTime=Publishing i&nterval (in seconds):
 prefAutoPublishRemote=Automatically publish to rem&ote servers
 prefAutoPublishRemoteTime=Publishing inter&val (in seconds):
+prefAutoRestart=Automatically restart servers when necessar&y
 prefPromptIrreversible=Prompt before making &irreversible changes within an editor
 prefShowOnActivity=Show &Servers view when server state changes
 prefMachineSpeed=Server &timeout delay:
@@ -217,32 +214,24 @@
 prefLaunchModePrompt=P&rompt
 
 prefLaunchMode2=When switching the server out of debug mode
-prefLaunchMode2Restart=Rest&art
+prefLaunchMode2Restart=R&estart
 prefLaunchMode2Breakpoints=Disable &breakpoints
-prefLaunchMode2Continue=Contin&ue
-prefLaunchMode2Prompt=Pr&ompt
+prefLaunchMode2Continue=C&ontinue
+prefLaunchMode2Prompt=Pro&mpt
 
 prefBreakpoints=When switching the server into debug mode, re-enable breakpoints
 prefBreakpointsAlways=Al&ways
-prefBreakpointsNever=N&ever
-prefBreakpointsPrompt=Pro&mpt
-
-prefRestart=When a restart may be required, restart the server
-prefRestartAlways=Alwa&ys
-prefRestartNever=Ne&ver
-prefRestartPrompt=Promp&t
+prefBreakpointsNever=Ne&ver
+prefBreakpointsPrompt=Promp&t
 
 # Project properties preferences
+prefProjectDescription=Set the default server used by Run on Server for this project.
 prefProject=Project:
-prefProjectDefaultServer=Always use the &following server when running this project:
-prefProjectNotModule=This project cannot be used with servers.
-prefProjectNotConfigured=This project is not associated with any servers.
+prefProjectDefaultServer=De&fault server:
+prefProjectNotModule=This project cannot be deployed to a server.
+prefProjectNotConfigured=Not currently deployed to any servers
 prefProjectNoServer=<None>
 
-propServerInfoName=Name:
-propServerInfoType=Type:
-propServerInfoVendor=Vendor:
-
 # Installed runtimes
 preferenceRuntimesDescription=Add, remove, or edit installed server runtime definitions.
 preferenceRuntimesTable=&Installed server runtimes:
@@ -255,9 +244,6 @@
 loadingTask=Loading {0}.
 performingTasks=Performing tasks.
 launchingClientTask=Launching client
-jobInitializing=Initializing Server Tools
-jobRestarting=Restarting {0}
-jobInitializingServersView=Initializing Servers view
 
 # --------------- Dialogs ---------------
 
@@ -283,6 +269,12 @@
 resourceDirtyDialogMessage=The server resource {0} has unsaved changes. Do you want to continue?
 resourceDirtyDialogContinue=Continue
 
+runtimeTargetCombo=&Target runtime:
+runtimeTargetNone=<None>
+runtimeTargetNewRuntime=&New...
+runtimeTargetRuntimePreferences=Configure &Installed Runtimes...
+runtimeTargetChildren=Target contained projects
+
 # General dialogs
 defaultDialogTitle=Server
 dialogStoppingServer=Stopping server {0}.
@@ -300,10 +292,6 @@
 dialogBreakpointsReenable=Re-&enable breakpoints
 dialogBreakpointsContinue=&Continue without debugging
 
-dialogRestart=The server may need be restarted. Do you want to restart the server?
-dialogRestartRestart=Re&start server
-dialogRestartContinue=&Continue without restarting
-
 # Monitor dialog
 dialogMonitorTitle=Monitoring Ports
 dialogMonitorDescription=The following ports are being monitored on server {0}:
@@ -318,9 +306,6 @@
 dialogMonitorContentTypeAll=All
 dialogMonitorContentTypeWeb=Web
 dialogMonitorContentTypeWebServices=WebServices
-dialogMonitorNone=<none>
-
-dialogPublishClean=Clean will discard all publish state and republish from scratch. Are you sure you want to clean all published projects?
 
 start=Start
 stop=Stop
@@ -344,7 +329,7 @@
 
 # runtime composite
 runtimeTypeCompDescription=Runtimes are used at build time to compile projects.
-runtimeTypeCompTree=Select the &runtime type:
+runtimeTypeCompTree=Select the type of &runtime that you want to define:
 serverTypeCompLabel=Select the &server type:
 name=Name
 vendor=Vendor
@@ -356,9 +341,7 @@
 
 # installable server composite
 installableServerCompTree=Select the &server support to install:
-installableServerLink=Download additional server adapters
-installableServerLocal=Examining local configuration
-installableServerSearching=Searching {0}
+installableServerLink=Don't see your server listed? Click here
 
 # misc composites
 hostname=Server's &host name:
@@ -379,13 +362,13 @@
 errorCouldNotCreateServerProjectStatus=Could not create server project: {0}
 errorNoArtifact=The selection did not contain anything that can be run on a server.
 errorNoModules=The selection is not within a valid module.
-errorNoServer=Could not find a server to run the selection.
+errorNoServer=Could not find a server to run the selection
+errorNoClient=Could not find a client that is able to launch the selection
 errorCouldNotSavePreference=Could not save server preference information.
 errorEditorCantSave=Can't save the server resource for the following reason(s):
 errorEditor=Could not open editor because {0} is not a valid server or server configuration.
 errorVersionLevel=The server does not support version {1} of the {0} specification.
 errorMissingConfiguration=The server configuration is missing or invalid
-errorRootModule=Could not find a valid parent module to add to the server.
 
 # Info messages
 infoNoRuntimesFound=No server runtimes were found.
@@ -405,12 +388,6 @@
 remove=&Remove
 search=&Search...
 
-clientDefaultName=Do nothing
-clientDefaultDescription=Launch the module on the server but do not bring up a client application.
-
-# Module decorator
-moduleDecoratorProject={0} ({1})
-
 # --------------- Editor support ---------------
 
 serverEditorOverviewPageTitle=Server Overview
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ModuleLabelDecorator.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ModuleLabelDecorator.java
index 5b12d9d..04935ec 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ModuleLabelDecorator.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ModuleLabelDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * 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
@@ -12,7 +12,6 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.jface.viewers.ILabelDecorator;
-import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.wst.server.core.IModule;
@@ -59,18 +58,17 @@
 				module = modules[modules.length - 1];
 			}
 			if (module == null)
-				return null;
+				return "";
 			
 			IProject project = module.getProject();
 			
 			if (project == null)
-				return null;
+				return "";
 			
-			if (!project.getName().equals(text))
-				text = NLS.bind(Messages.moduleDecoratorProject, new String[] {text, project.getName()});
-			return PlatformUI.getWorkbench().getDecoratorManager().decorateText(text, project);
+			String text2 = PlatformUI.getWorkbench().getDecoratorManager().decorateText(text, project);
+			return text2;
 		} catch (Exception e) {
-			return null;
+			return "";
 		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java
index 9025974..f58d1a0 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java
@@ -63,73 +63,66 @@
 	protected Control createContents(Composite parent) {
 		try {
 			IAdaptable element = getElement();
-			project = (IProject) element.getAdapter(IProject.class);
-			//if (element instanceof IProject)
-			//	project = (IProject) element;
+			if (element instanceof IProject)
+				project = (IProject) element;
 			
 			Composite composite = new Composite(parent, SWT.NONE);
 			GridLayout layout = new GridLayout();
 			layout.marginHeight = 0;
 			layout.marginWidth = 0;
-			layout.numColumns = 2;
-			layout.verticalSpacing = 5;
+			layout.numColumns = 4;
+			layout.verticalSpacing = 10;
 			composite.setLayout(layout);
 			composite.setLayoutData(new GridData(GridData.FILL_BOTH));
 			
-			/*Label label = new Label(composite, SWT.WRAP);
+			Label label = new Label(composite, SWT.WRAP);
 			label.setText(Messages.prefProjectDescription);
 			GridData data = new GridData(GridData.FILL_HORIZONTAL);
-			data.horizontalSpan = 2;
+			data.horizontalSpan = 4;
 			data.widthHint = 200;
-			label.setLayoutData(data);*/
+			label.setLayoutData(data);
 			
 			module = ServerUtil.getModule(project);
 			if (module == null) {
-				Label label = new Label(composite, SWT.NONE);
+				label = new Label(composite, SWT.NONE);
 				label.setText(Messages.prefProjectNotModule);
-				GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-				data.horizontalSpan = 2;
-				data.verticalIndent = 5;
+				data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+				data.horizontalSpan = 4;
 				label.setLayoutData(data);
 			} else {
 				IModuleType mt = module.getModuleType();
 				if (mt != null) {
-					Label label = new Label(composite, SWT.NONE);
+					label = new Label(composite, SWT.NONE);
 					label.setText(Messages.prefProject);
-					GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-					data.verticalIndent = 5;
+					data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
 					label.setLayoutData(data);
 					
 					Label moduleKind = new Label(composite, SWT.NONE);
 					data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-					data.verticalIndent = 5;
+					data.horizontalSpan = 3;
 					moduleKind.setLayoutData(data);
 					moduleKind.setText(module.getName() + " (" + mt.getName() + ")");
 				}
 				
 				defaultServer = ServerCore.getDefaultServer(module);
 				
+				label = new Label(composite, SWT.NONE);
+				label.setText(Messages.prefProjectDefaultServer);
+				data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
+				label.setLayoutData(data);
+				
 				final IServer[] servers = getServersBySupportedModule(module);
 				if (servers == null || servers.length == 0) {
-					Label label = new Label(composite, SWT.WRAP);
+					label = new Label(composite, SWT.WRAP);
 					label.setText(Messages.prefProjectNotConfigured);
-					GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-					data.horizontalSpan = 2;
-					data.verticalIndent = 5;
+					data = new GridData();
+					data.horizontalSpan = 3;
 					label.setLayoutData(data);
 				} else {
-					Label label = new Label(composite, SWT.NONE);
-					label.setText(Messages.prefProjectDefaultServer);
-					GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
-					data.horizontalSpan = 2;
-					data.verticalIndent = 5;
-					label.setLayoutData(data);
-					
 					table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
 					data = new GridData(GridData.FILL_HORIZONTAL);
-					data.horizontalSpan = 2;
-					data.horizontalIndent = 15;
-					data.heightHint = 90;
+					data.horizontalSpan = 3;
+					data.heightHint = 70;
 					table.setLayoutData(data);
 					
 					// add none option
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
index 7ed3872..deb3304 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
@@ -322,7 +322,11 @@
 			fragment = new WizardFragment() {
 				protected void createChildFragments(List list) {
 					list.add(new NewRuntimeWizardFragment());
-					list.add(WizardTaskUtil.SaveRuntimeFragment);
+					list.add(new WizardFragment() {
+						public void performFinish(IProgressMonitor monitor) throws CoreException {
+							WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+						}
+					});
 				}
 			};
 		} else {
@@ -336,7 +340,11 @@
 			fragment = new WizardFragment() {
 				protected void createChildFragments(List list) {
 					list.add(fragment2);
-					list.add(WizardTaskUtil.SaveRuntimeFragment);
+					list.add(new WizardFragment() {
+						public void performFinish(IProgressMonitor monitor) throws CoreException {
+							WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+						}
+					});
 				}
 			};
 		}
@@ -345,12 +353,12 @@
 		ClosableWizardDialog dialog = new ClosableWizardDialog(getShell(), wizard);
 		return dialog.open();
 	}
-
+	
 	protected IRuntime getSelection(ISelection sel2) {
 		IStructuredSelection sel = (IStructuredSelection) sel2;
 		return (IRuntime) sel.getFirstElement();
 	}
-
+	
 	/**
 	 * Initializes this preference page using the passed workbench.
 	 *
@@ -363,7 +371,8 @@
 	/** 
 	 * @see org.eclipse.jface.preference.PreferencePage#performOk()
 	 */
-	public boolean performOk() { 
+	public boolean performOk() {
+		// TODO - should not save until user hits ok 
 		return true;
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java
index 4e23331..52efdbc 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,10 +11,7 @@
 package org.eclipse.wst.server.ui.internal;
 
 import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.IActionFilter;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-import org.eclipse.wst.server.core.IServer;
 /**
  * Adapter factory to adapt servers to IActionFilter.
  */
@@ -24,44 +21,21 @@
 			return ServerPropertyTester.checkProperty(target, name, value);
 		}
 	};
-	
-	IWorkbenchAdapter workbenchAdapter = new IWorkbenchAdapter() {
-		public Object[] getChildren(Object o) {
-			return null;
-		}
-
-		public ImageDescriptor getImageDescriptor(Object object) {
-			return ImageResource.getImageDescriptor(ImageResource.IMG_SERVER);
-		}
-
-		public String getLabel(Object o) {
-			if (o instanceof IServer)
-				return ((IServer) o).getName();
-			return null;
-		}
-
-		public Object getParent(Object o) {
-			return null;
-		}
-	};
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
 	 */
 	public Object getAdapter(Object adaptableObject, Class adapterType) {
-		if (adapterType == IActionFilter.class)
-			return actionFilter;
+		if (adapterType != IActionFilter.class)
+			return null;
 		
-		if (adapterType == IWorkbenchAdapter.class)
-			return workbenchAdapter;
-		
-		return null;
+		return actionFilter; 
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
 	 */
 	public Class[] getAdapterList() {
-		return new Class[] { IActionFilter.class, IWorkbenchAdapter.class };
+		return new Class[] { IActionFilter.class };
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLaunchShortcut.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLaunchShortcut.java
index 6cd8087..f122256 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLaunchShortcut.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLaunchShortcut.java
@@ -23,20 +23,23 @@
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IFileEditorInput;
 /**
- * 
+ *
  */
 public class ServerLaunchShortcut implements ILaunchShortcut {
 	/* (non-Javadoc)
 	 * @see org.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.jface.viewers.ISelection, java.lang.String)
 	 */
 	public void launch(ISelection selection, final String mode) {
-		RunOnServerActionDelegate ros = new RunOnServerActionDelegate();
-		ros.setLaunchMode(mode);
+		RunOnServerActionDelegate del = new RunOnServerActionDelegate() {
+			protected String getLaunchMode() {
+				return mode;
+			}
+		};
 		IAction action = new Action() {
 			// dummy action
 		};
-		ros.selectionChanged(action, selection);
-		ros.run(action);
+		del.selectionChanged(action, selection);
+		del.run(action);
 	}
 
 	/* (non-Javadoc)
@@ -49,7 +52,7 @@
 		// check if the editor input itself can be run. Otherwise, check if
 		// the editor has a file input that can be run
 		IEditorInput input = editor.getEditorInput();
-		
+
 		if (ServerPlugin.hasModuleArtifact(input)) {
 			launch(new StructuredSelection(input), mode);
 		} else if (input instanceof IFileEditorInput) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyPage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyPage.java
deleted file mode 100644
index 5775fa5..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyPage.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.server.ui.internal;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.dialogs.PropertyPage;
-import org.eclipse.wst.server.core.IRuntimeType;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.IServerType;
-/**
- * PropertyPage for servers.
- */
-public class ServerPropertyPage extends PropertyPage {
-	protected IServer server;
-
-	protected IServer defaultServer;
-
-	/**
-	 * ServerPropertyPage constructor comment.
-	 */
-	public ServerPropertyPage() {
-		super();
-	}
-
-	/**
-	 * Create the body of the page.
-	 *
-	 * @param parent org.eclipse.swt.widgets.Composite
-	 * @return org.eclipse.swt.widgets.Control
-	 */
-	protected Control createContents(Composite parent) {
-		try {
-			IAdaptable element = getElement();
-			server = (IServer) element.getAdapter(IServer.class);
-			
-			Composite composite = new Composite(parent, SWT.NONE);
-			GridLayout layout = new GridLayout();
-			layout.marginHeight = 0;
-			layout.marginWidth = 0;
-			layout.numColumns = 2;
-			composite.setLayout(layout);
-			composite.setLayoutData(new GridData(GridData.FILL_BOTH));
-			
-			// name
-			Label label = new Label(composite, SWT.NONE);
-			label.setText(Messages.propServerInfoName);
-			
-			label = new Label(composite, SWT.NONE);
-			label.setText(server.getName());
-			label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			
-			// type
-			label = new Label(composite, SWT.NONE);
-			label.setText(Messages.propServerInfoType);
-			
-			IServerType serverType = server.getServerType();
-			label = new Label(composite, SWT.NONE);
-			if (serverType != null)
-				label.setText(serverType.getName());
-			else
-				label.setText(Messages.elementUnknownName);
-			label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			
-			// provider
-			label = new Label(composite, SWT.NONE);
-			label.setText(Messages.propServerInfoVendor);
-			
-			IRuntimeType runtimeType = null;
-			if (serverType != null)
-				runtimeType = serverType.getRuntimeType();
-			label = new Label(composite, SWT.NONE);
-			if (runtimeType != null)
-				label.setText(runtimeType.getVendor());
-			else
-				label.setText(Messages.elementUnknownName);
-			label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-			
-			Dialog.applyDialogFont(composite);
-			
-			return composite;
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error creating property page", e);
-			return null;
-		}
-	}
-
-	protected void performDefaults() {
-		super.performDefaults();
-	}
-
-	/**
-	 * @see org.eclipse.jface.preference.PreferencePage#performOk()
-	 */
-	public boolean performOk() {
-		return super.performOk();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyTester.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyTester.java
index 8f7d391..8525e9b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyTester.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyTester.java
@@ -14,11 +14,9 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.ServerUtil;
 import org.eclipse.wst.server.core.internal.ServerPlugin;
-import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer;
 /**
  * 
  */
@@ -29,20 +27,14 @@
 	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
 		if (expectedValue instanceof String)
 			return checkProperty(receiver, property, (String) expectedValue);
-		if (expectedValue != null)
-			return checkProperty(receiver, property, expectedValue.toString());
-		
 		return checkProperty(receiver, property, null);
 	}
 
 	protected static boolean checkProperty(Object target, String property, String value) {
 		if ("isRunnable".equals(property)) {
 			// check if project has a module associated with it
-			if (target instanceof IProject) {
-				IModule m = ServerUtil.getModule((IProject) target);
-				if (m == null)
-					return false;
-			}
+			if (target instanceof IProject)
+				return ServerUtil.getModule((IProject) target) != null;
 			
 			// check for runnable object
 			boolean b = ServerPlugin.hasModuleArtifact(target);
@@ -60,7 +52,7 @@
 			b = ServerPlugin.hasModuleArtifact(input);
 			if (b)
 				return true;*/
-			
+	
 			if (target instanceof IFileEditorInput) {
 				IFileEditorInput fei = (IFileEditorInput) target;
 				IFile file = fei.getFile();
@@ -70,64 +62,23 @@
 			}
 			return false;
 		} else if ("serverType".equals(property)) {
-			IServer server = null;
-			if (target instanceof IServer) {
-				server = (IServer) target;
-			} else if (target instanceof ModuleServer) {
-				ModuleServer ms = (ModuleServer) target;
-				server = ms.server;
-			}
-			if (server == null || server.getServerType() == null)
+			if (!(target instanceof IServer))
 				return false;
 			
+			IServer server = (IServer) target;
+			
 			String[] typeIds = ServerPlugin.tokenize(value, ",");
-			return matches(server.getServerType().getId(), typeIds);
-		} else if ("moduleType".equals(property)) {
-			IModule[] module = null;
-			if (target instanceof IModule[]) {
-				module = (IModule[]) target;
-			} else if (target instanceof IModule) {
-				module = new IModule[] {(IModule) target};
-			} else if (target instanceof ModuleServer) {
-				ModuleServer ms = (ModuleServer) target;
-				module = ms.module;
-			}
-			if (module == null)
-				return false;
-			if (module.length == 0)
-				return false;
-			
-			String[] values = ServerPlugin.tokenize(value, ",");
-			IModule m = module[module.length - 1];
-			return matches(m.getModuleType().getId(), values);
-		} else if ("moduleVersion".equals(property)) {
-			IModule[] module = null;
-			if (target instanceof IModule[]) {
-				module = (IModule[]) target;
-			} else if (target instanceof IModule) {
-				module = new IModule[] {(IModule) target};
-			} else if (target instanceof ModuleServer) {
-				ModuleServer ms = (ModuleServer) target;
-				module = ms.module;
-			}
-			if (module == null)
-				return false;
-			if (module.length == 0)
-				return false;
-			
-			String[] values = ServerPlugin.tokenize(value, ",");
-			IModule m = module[module.length - 1];
-			return matches(m.getModuleType().getVersion(), values);
+			return supportsServerType(server.getServerType().getId(), typeIds);
 		}
 		return false;
 	}
 	
 	/**
-	 * Returns true if the given type (given by the id) can use this action.
+	 * Returns true if the given server type (given by the id) can use this action.
 	 *
 	 * @return boolean
 	 */
-	protected static boolean matches(String id, String[] typeIds) {
+	protected static boolean supportsServerType(String id, String[] typeIds) {
 		if (id == null || id.length() == 0)
 			return false;
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
index 42e1c4e..e795aab 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
@@ -15,10 +15,8 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.StringTokenizer;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.*;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.dialogs.IDialogConstants;
@@ -27,21 +25,17 @@
 
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.*;
-import org.eclipse.wst.server.core.internal.Trace;
 import org.eclipse.wst.server.core.util.PublishAdapter;
+import org.eclipse.wst.server.ui.ServerUIUtil;
 import org.eclipse.wst.server.ui.internal.actions.RunOnServerActionDelegate;
 import org.eclipse.wst.server.ui.internal.editor.IServerEditorInput;
 import org.eclipse.wst.server.ui.internal.editor.ServerEditorCore;
 import org.eclipse.wst.server.ui.internal.editor.ServerEditorInput;
-import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer;
 import org.eclipse.wst.server.ui.internal.viewers.InitialSelectionProvider;
 import org.eclipse.wst.server.ui.internal.wizard.ClosableWizardDialog;
 import org.eclipse.wst.server.ui.internal.wizard.TaskWizard;
 import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
-import org.eclipse.wst.server.ui.internal.wizard.fragment.ModifyModulesWizardFragment;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.NewRuntimeWizardFragment;
-import org.eclipse.wst.server.ui.internal.wizard.fragment.NewServerWizardFragment;
-import org.eclipse.wst.server.ui.internal.wizard.fragment.TasksWizardFragment;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 
 import org.eclipse.osgi.util.NLS;
@@ -62,7 +56,7 @@
 
 	// server UI plugin id
 	public static final String PLUGIN_ID = "org.eclipse.wst.server.ui";
-
+	
 	protected static final String EXTENSION_SERVER_IMAGES = "serverImages";
 	private static final String EXTENSION_WIZARD_FRAGMENTS = "wizardFragments";
 	public static final String EXTENSION_EDITOR_PAGES = "editorPages";
@@ -215,8 +209,14 @@
 		
 		ServerCore.addServerLifecycleListener(serverLifecycleListener);
 		
-		InitializeJob job = new InitializeJob();
-		job.schedule();
+		IServer[] servers = ServerCore.getServers();
+		if (servers != null) {
+			int size = servers.length;
+			for (int i = 0; i < size; i++) {
+				servers[i].addServerListener(serverListener);
+				((Server) servers[i]).addPublishListener(publishListener);
+			}
+		}
 	}
 
 	/**
@@ -525,17 +525,21 @@
 	/**
 	 * Open the new runtime wizard.
 	 * 
-	 * @param shell a shell
-	 * @param type a module type id
-	 * @param version a module version id
-	 * @param runtimeTypeId a runtime type id
+	 * @param shell
+	 * @param type
+	 * @param version
+	 * @param runtimeTypeId
 	 * @return true if a new runtime was created
 	 */
 	public static boolean showNewRuntimeWizard(Shell shell, final String type, final String version, final String runtimeTypeId) {
 		WizardFragment fragment = new WizardFragment() {
 			protected void createChildFragments(List list) {
 				list.add(new NewRuntimeWizardFragment(type, version, runtimeTypeId));
-				list.add(WizardTaskUtil.SaveRuntimeFragment);
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+					}
+				});
 			}
 		};
 		TaskWizard wizard = new TaskWizard(Messages.wizNewRuntimeWizardTitle, fragment);
@@ -543,12 +547,12 @@
 		ClosableWizardDialog dialog = new ClosableWizardDialog(shell, wizard);
 		return (dialog.open() == IDialogConstants.OK_ID);
 	}
-
+	
 	/**
 	 * Open the new runtime wizard.
 	 * 
-	 * @param shell a shell
-	 * @param runtimeTypeId a runtime type id
+	 * @param shell
+	 * @param runtimeTypeId
 	 * @return true if a new runtime was created
 	 */
 	public static boolean showNewRuntimeWizard(Shell shell, final String runtimeTypeId) {
@@ -564,7 +568,11 @@
 				WizardFragment fragment = new WizardFragment() {
 					protected void createChildFragments(List list) {
 						list.add(getWizardFragment(runtimeTypeId));
-						list.add(WizardTaskUtil.SaveRuntimeFragment);
+						list.add(new WizardFragment() {
+							public void performFinish(IProgressMonitor monitor) throws CoreException {
+								WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+							}
+						});
 					}
 				};
 				TaskWizard wizard = new TaskWizard(Messages.wizNewRuntimeWizardTitle, fragment, taskModel);
@@ -577,40 +585,16 @@
 		}
 		return showNewRuntimeWizard(shell, null, null, runtimeTypeId);
 	}
-
+	
 	/**
-	 * Open the new server wizard.
-	 * 
-	 * @param shell a shell
-	 * @param typeId a module type id, or null for any module type
-	 * @param versionId a module version, or null for any version
-	 * @param serverTypeId a server runtime type, or null for any type
-	 * @return <code>true</code> if a server was created, or
-	 *    <code>false</code> otherwise
+	 * Open the new runtime wizard.
+	 * @param shell
+	 * @return true if a new runtime was created
 	 */
-	public static boolean showNewServerWizard(Shell shell, final String typeId, final String versionId, final String serverTypeId) {
-		WizardFragment fragment = new WizardFragment() {
-			protected void createChildFragments(List list) {
-				list.add(new NewServerWizardFragment(new ModuleType(typeId, versionId), serverTypeId));
-				
-				list.add(WizardTaskUtil.TempSaveRuntimeFragment);
-				list.add(WizardTaskUtil.TempSaveServerFragment);
-				
-				list.add(new ModifyModulesWizardFragment());
-				list.add(new TasksWizardFragment());
-				
-				list.add(WizardTaskUtil.SaveRuntimeFragment);
-				list.add(WizardTaskUtil.SaveServerFragment);
-				list.add(WizardTaskUtil.SaveHostnameFragment);
-			}
-		};
-		
-		TaskWizard wizard = new TaskWizard(Messages.wizNewServerWizardTitle, fragment);
-		wizard.setForcePreviousAndNextButtons(true);
-		ClosableWizardDialog dialog = new ClosableWizardDialog(shell, wizard);
-		return (dialog.open() == IDialogConstants.OK_ID);
+	public static boolean showNewRuntimeWizard(Shell shell) {
+		return ServerUIUtil.showNewRuntimeWizard(shell, null, null);
 	}
-
+	
 	/**
 	 * Returns the wizard fragment with the given id.
 	 *
@@ -644,7 +628,7 @@
 		Trace.trace(Trace.CONFIG, "->- Loading .wizardFragments extension point ->-");
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, EXTENSION_WIZARD_FRAGMENTS);
-		
+
 		Map map = new HashMap(cf.length);
 		loadWizardFragments(cf, map);
 		addRegistryListener();
@@ -660,10 +644,7 @@
 		for (int i = 0; i < cf.length; i++) {
 			try {
 				String id = cf[i].getAttribute("typeIds");
-				String[] ids = tokenize(id, ",");
-				int size = ids.length;
-				for (int j = 0; j < size; j++)
-					map.put(ids[j], new WizardFragmentData(id, cf[i]));
+				map.put(id, new WizardFragmentData(id, cf[i]));
 				Trace.trace(Trace.CONFIG, "  Loaded wizardFragment: " + id);
 			} catch (Throwable t) {
 				Trace.trace(Trace.SEVERE, "  Could not load wizardFragment: " + cf[i].getAttribute("id"), t);
@@ -715,19 +696,17 @@
 	protected static WizardFragment getWizardFragment(WizardFragmentData fragment) {
 		if (fragment == null)
 			return null;
-		
+	
 		if (fragment.fragment == null) {
 			try {
-				long time = System.currentTimeMillis();
 				fragment.fragment = (WizardFragment) fragment.ce.createExecutableExtension("class");
-				Trace.trace(Trace.PERFORMANCE, "ServerUIPlugin.getWizardFragment(): <" + (System.currentTimeMillis() - time) + "> " + fragment.ce.getAttribute("id"));
 			} catch (Throwable t) {
 				Trace.trace(Trace.SEVERE, "Could not create wizardFragment: " + fragment.ce.getAttribute("id"), t);
 			}
 		}
 		return fragment.fragment;
 	}
-
+	
 	public static void runOnServer(Object object, String launchMode) {
 		RunOnServerActionDelegate delegate = new RunOnServerActionDelegate();
 		Action action = new Action() {
@@ -777,130 +756,4 @@
 		}
 		wizardFragments = map;
 	}
-
-	/**
-	 * Utility method to tokenize a string into an array.
-	 * 
-	 * @param str a string to be parsed
-	 * @param delim the delimiters
-	 * @return an array containing the tokenized string
-	 */
-	public static String[] tokenize(String str, String delim) {
-		if (str == null)
-			return new String[0];
-		
-		List list = new ArrayList();
-		
-		StringTokenizer st = new StringTokenizer(str, delim);
-		while (st.hasMoreTokens()) {
-			String s = st.nextToken();
-			if (s != null && s.length() > 0)
-				list.add(s.trim());
-		}
-		
-		String[] s = new String[list.size()];
-		list.toArray(s);
-		return s;
-	}
-
-	/**
-	 * Returns the launchable clients for the given server and launchable
-	 * object.
-	 * 
-	 * @param server org.eclipse.wst.server.core.IServer
-	 * @param launchable
-	 * @param launchMode String
-	 * @return an array of clients
-	 */
-	public static IClient[] getClients(IServer server, Object launchable, String launchMode) {
-		if (server == null || launchable == null)
-			return new IClient[0];
-		
-		ArrayList list = new ArrayList(5);
-		IClient[] clients = ServerPlugin.getClients();
-		if (clients != null) {
-			int size = clients.length;
-			for (int i = 0; i < size; i++) {
-				Trace.trace(Trace.FINEST, "client= " + clients[i]);
-				if (clients[i].supports(server, launchable, launchMode))
-					list.add(clients[i]);
-			}
-		}
-		
-		IClient[] clients2 = new IClient[list.size()];
-		list.toArray(clients2);
-		return clients2;
-	}
-
-	public static Object[] getLaunchableAdapter(IServer server, IModuleArtifact moduleArtifact) throws CoreException {
-		ILaunchableAdapter launchableAdapter = null;
-		Object launchable = null;
-		
-		ILaunchableAdapter[] adapters = ServerPlugin.getLaunchableAdapters();
-		if (adapters != null) {
-			int size2 = adapters.length;
-			IStatus lastStatus = null;
-			for (int j = 0; j < size2; j++) {
-				ILaunchableAdapter adapter = adapters[j];
-				try {
-					Object launchable2 = adapter.getLaunchable(server, moduleArtifact);
-					Trace.trace(Trace.FINEST, "adapter= " + adapter + ", launchable= " + launchable2);
-					if (launchable2 != null) {
-						launchableAdapter = adapter;
-						launchable = launchable2;
-					}
-				} catch (CoreException ce) {
-					lastStatus = ce.getStatus();
-				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error in launchable adapter", e);
-				}
-			}
-			if (launchable == null && lastStatus != null)
-				throw new CoreException(lastStatus);
-		}
-		if (launchable == null) {
-			launchableAdapter = new ILaunchableAdapter() {
-				public String getId() {
-					return "org.eclipse.wst.server.ui.launchable.adapter.default";
-				}
-
-				public Object getLaunchable(IServer server3, IModuleArtifact moduleArtifact2) throws CoreException {
-					return "launchable";
-				}
-			};
-			try {
-				launchable = launchableAdapter.getLaunchable(server, moduleArtifact);
-			} catch (CoreException ce) {
-				// ignore
-			}
-		}
-		return new Object[] { launchableAdapter, launchable };
-	}
-
-	public static Object[] adaptLabelChangeObjects(Object[] obj) {
-		if (obj == null)
-			return obj;
-		
-		List list = new ArrayList();
-		int size = obj.length;
-		for (int i = 0; i < size; i++) {
-			if (obj[i] instanceof IModule) {
-				list.add(obj[i]);
-			} else if (obj[i] instanceof IServer) {
-				list.add(obj[i]);
-			} else if (obj[i] instanceof ModuleServer) {
-				list.add(obj[i]);
-			} else if (obj[i] instanceof IProject) {
-				IProject proj = (IProject) obj[i];
-				IModule[] m = ServerUtil.getModules(proj);
-				int size2 = m.length;
-				for (int j = 0; j < size2; j++)
-					list.add(m[j]);
-			}
-		}
-		
-		Object[] o = new Object[list.size()];
-		list.toArray(o);
-		return o;
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPreferences.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPreferences.java
index 01f25a3..eeb8984 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPreferences.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPreferences.java
@@ -28,8 +28,6 @@
 	private static final String PREF_LAUNCH_MODE = "launch-mode";
 	private static final String PREF_LAUNCH_MODE2 = "launch-mode2";
 	private static final String PREF_ENABLE_BREAKPOINTS = "enable-breakpoints";
-	private static final String PREF_RESTART = "restart";
-	private static final String PREF_CREATE_SERVER_WITH_RUNTIME = "create-server";
 
 	public static final byte SAVE_EDITORS_ALWAYS = 2;
 	public static final byte SAVE_EDITORS_NEVER = 0;
@@ -48,10 +46,6 @@
 	public static final byte ENABLE_BREAKPOINTS_ALWAYS = 1;
 	public static final byte ENABLE_BREAKPOINTS_NEVER = 2;
 
-	public static final byte RESTART_PROMPT = 0;
-	public static final byte RESTART_ALWAYS = 1;
-	public static final byte RESTART_NEVER = 2;
-
 	private static final int MAX_HOSTNAMES = 10;
 
 	private Preferences preferences;
@@ -69,11 +63,9 @@
 		preferences.setDefault(PREF_LAUNCH_MODE, getDefaultLaunchMode());
 		preferences.setDefault(PREF_LAUNCH_MODE2, getDefaultLaunchMode2());
 		preferences.setDefault(PREF_ENABLE_BREAKPOINTS, getDefaultEnableBreakpoints());
-		preferences.setDefault(PREF_RESTART, getDefaultRestart());
 		preferences.setDefault(PREF_SAVE_EDITORS, getDefaultSaveEditors());
 		preferences.setDefault(PREF_HOST_NAMES, "localhost");
 		preferences.setDefault(PREF_SHOW_ON_ACTIVITY, true);
-		preferences.setDefault(PREF_CREATE_SERVER_WITH_RUNTIME, true);
 	}
 
 	/**
@@ -201,36 +193,6 @@
 	}
 
 	/**
-	 * Returns the default value of whether the user should be prompted
-	 * when the server requires restarting.
-	 *
-	 * @return int
-	 */
-	public byte getDefaultRestart() {
-		return RESTART_PROMPT;
-	}
-
-	/**
-	 * Returns whether the user should be prompted when the server requires
-	 * restarting.
-	 * 
-	 * @return int
-	 */
-	public int getRestart() {
-		return preferences.getInt(PREF_RESTART);
-	}
-
-	/**
-	 * Sets whether the user should be prompted when the server requires restarting.
-	 *
-	 * @param b a breakpoint enablement constant
-	 */
-	public void setRestart(int b) {
-		preferences.setValue(PREF_RESTART, b);
-		ServerUIPlugin.getInstance().savePluginPreferences();
-	}
-
-	/**
 	 * Returns the import location.
 	 *
 	 * @return java.lang.String
@@ -352,25 +314,4 @@
 		preferences.setValue(PREF_HOST_NAMES, sb.toString());
 		ServerUIPlugin.getInstance().savePluginPreferences();
 	}
-
-	/**
-	 * Returns the setting for whether a server should be created with runtimes
-	 * when possible.
-	 * 
-	 * @return boolean
-	 */
-	public boolean getCreateServerWithRuntime() {
-		return preferences.getBoolean(PREF_CREATE_SERVER_WITH_RUNTIME);
-	}
-
-	/**
-	 * Sets the value for whether a server should be created with runtimes
-	 * when possible.
-	 * 
-	 * @param b
-	 */
-	public void setCreateServerWithRuntime(boolean b) {
-		preferences.setValue(PREF_CREATE_SERVER_WITH_RUNTIME, b);
-		ServerUIPlugin.getInstance().savePluginPreferences();
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Trace.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Trace.java
index c802205..b022e69 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Trace.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Trace.java
@@ -16,14 +16,14 @@
  * Helper class to route trace output.
  */
 public class Trace {
-	public static final byte CONFIG = 0;
-	public static final byte INFO = 1;
-	public static final byte WARNING = 2;
-	public static final byte SEVERE = 3;
-	public static final byte FINEST = 4;
-	public static final byte FINER = 5;
-	public static final byte PERFORMANCE = 6;
-	public static final byte EXTENSION_POINT = 7;
+	public static byte CONFIG = 0;
+	public static byte INFO = 1;
+	public static byte WARNING = 2;
+	public static byte SEVERE = 3;
+	public static byte FINEST = 4;
+	public static byte FINER = 5;
+	public static byte PERFORMANCE = 6;
+	public static byte EXTENSION_POINT = 7;
 	
 	protected static int pluginLength = -1;
 	
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DebugOnServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DebugOnServerAction.java
new file mode 100644
index 0000000..a5adc30
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DebugOnServerAction.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.wst.server.ui.internal.ImageResource;
+import org.eclipse.wst.server.ui.internal.Messages;
+/**
+ * "Debug on Server" menu action. Allows the user to select an
+ * object, and have automatic server creation, launching, and
+ * the appropriate client to appear. A new instance of this
+ * action must be created for each object that the user selects.
+ */
+public class DebugOnServerAction extends Action {
+	protected DebugOnServerActionDelegate delegate;
+
+	/**
+	 * DebugOnServerAction constructor comment.
+	 * 
+	 * @param object the object to attempt to debug
+	 */
+	public DebugOnServerAction(Object object) {
+		super(Messages.actionDebugOnServer);
+	
+		setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DTOOL_DEBUG_ON_SERVER));
+		setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CTOOL_DEBUG_ON_SERVER));
+		setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ETOOL_DEBUG_ON_SERVER));
+	
+		delegate = new DebugOnServerActionDelegate();
+		if (object != null) {
+			StructuredSelection sel = new StructuredSelection(object);
+			delegate.selectionChanged(this, sel);
+		} else
+			delegate.selectionChanged(this, null);
+	}
+
+	/**
+	 * Implementation of method defined on <code>IAction</code>.
+	 */
+	public void run() {
+		delegate.run(this);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DebugOnServerActionDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DebugOnServerActionDelegate.java
new file mode 100644
index 0000000..d811e87
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/DebugOnServerActionDelegate.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.actions;
+
+import org.eclipse.debug.core.ILaunchManager;
+/**
+ * 
+ */
+public class DebugOnServerActionDelegate extends RunOnServerActionDelegate {
+	/**
+	 * Returns the start mode that the server should use.
+	 */
+	protected String getLaunchMode() {
+		return ILaunchManager.DEBUG_MODE;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ProfileOnServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ProfileOnServerAction.java
new file mode 100644
index 0000000..6f4d203
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ProfileOnServerAction.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.actions;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.wst.server.ui.internal.ImageResource;
+import org.eclipse.wst.server.ui.internal.Messages;
+/**
+ * "Profile on Server" menu action. Allows the user to select an
+ * object, and have automatic server creation, launching, and
+ * the appropriate client to appear. A new instance of this
+ * action must be created for each object that the user selects.
+ */
+public class ProfileOnServerAction extends Action {
+	protected ProfileOnServerActionDelegate delegate;
+
+	/**
+	 * Profile an object on server.
+	 * 
+	 * @param object the object to attempt to debug
+	 */
+	public ProfileOnServerAction(Object object) {
+		super(Messages.actionProfileOnServer);
+	
+		setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DTOOL_PROFILE_ON_SERVER));
+		setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CTOOL_PROFILE_ON_SERVER));
+		setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ETOOL_PROFILE_ON_SERVER));
+	
+		delegate = new ProfileOnServerActionDelegate();
+		if (object != null) {
+			StructuredSelection sel = new StructuredSelection(object);
+			delegate.selectionChanged(this, sel);
+		} else
+			delegate.selectionChanged(this, null);
+	}
+
+	/**
+	 * Implementation of method defined on <code>IAction</code>.
+	 */
+	public void run() {
+		delegate.run(this);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ProfileOnServerActionDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ProfileOnServerActionDelegate.java
new file mode 100644
index 0000000..129a0ae
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/ProfileOnServerActionDelegate.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.actions;
+
+import org.eclipse.debug.core.ILaunchManager;
+/**
+ * 
+ */
+public class ProfileOnServerActionDelegate extends RunOnServerActionDelegate {
+	/**
+	 * Returns the start mode that the server should use.
+	 */
+	protected String getLaunchMode() {
+		return ILaunchManager.PROFILE_MODE;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
index 2dccce9..24b0376 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,16 +10,14 @@
  **********************************************************************/
 package org.eclipse.wst.server.ui.internal.actions;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
-import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.runtime.*;
-import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.IBreakpointManager;
-import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.ErrorDialog;
@@ -55,12 +53,8 @@
 	protected static Object globalSelection;
 
 	protected static Map globalLaunchMode;
-	protected String launchMode = ILaunchManager.RUN_MODE;
-
-	protected boolean tasksAndClientShown;
-
-	public ILaunchableAdapter launchableAdapter;
-	public IClient client;
+	
+	protected boolean tasksRun;
 
 	/**
 	 * RunOnServerActionDelegate constructor comment.
@@ -86,7 +80,7 @@
 		window = newWindow;
 	}
 
-	public IServer getServer(IModule module, IModuleArtifact moduleArtifact, IProgressMonitor monitor) throws CoreException {
+	public IServer getServer(IModule module, String launchMode, IProgressMonitor monitor) throws CoreException {
 		IServer server = ServerCore.getDefaultServer(module);
 		
 		// ignore preference if the server doesn't support this mode.
@@ -109,29 +103,25 @@
 			shell = window.getShell();
 		else
 			shell = ServerUIPlugin.getInstance().getWorkbench().getActiveWorkbenchWindow().getShell();
-		
+
 		if (server == null) {
 			// try the full wizard
-			Trace.trace(Trace.FINEST, "Launching wizard");
-			RunOnServerWizard wizard = new RunOnServerWizard(module, launchMode, moduleArtifact);
+			RunOnServerWizard wizard = new RunOnServerWizard(module, launchMode);
 			ClosableWizardDialog dialog = new ClosableWizardDialog(shell, wizard);
 			if (dialog.open() == Window.CANCEL) {
-				if (monitor != null)
-					monitor.setCanceled(true);
+				monitor.setCanceled(true);
 				return null;
 			}
-			
+
 			try {
-				Job.getJobManager().join("org.eclipse.wst.server.ui.family", null);
+				Platform.getJobManager().join("org.eclipse.wst.server.ui.family", null);
 			} catch (Exception e) {
 				Trace.trace(Trace.WARNING, "Error waiting for job", e);
 			}
 			server = wizard.getServer();
 			boolean preferred = wizard.isPreferredServer();
-			tasksAndClientShown = true;
-			client = wizard.getSelectedClient();
-			launchableAdapter = wizard.getLaunchableAdapter();
-			
+			tasksRun = true;
+
 			// set preferred server if requested
 			if (server != null && preferred) {
 				try {
@@ -144,7 +134,7 @@
 		}
 		
 		try {
-			Job.getJobManager().join("org.eclipse.wst.server.ui.family", new NullProgressMonitor());
+			Platform.getJobManager().join("org.eclipse.wst.server.ui.family", new NullProgressMonitor());
 		} catch (Exception e) {
 			Trace.trace(Trace.WARNING, "Error waiting for job", e);
 		}
@@ -156,8 +146,8 @@
 	 * Run the resource on a server.
 	 */
 	protected void run() {
-//		final String launchMode2 = getLaunchMode();
-		final IModuleArtifact moduleArtifact = ServerPlugin.getModuleArtifact(selection);
+		final String launchMode2 = getLaunchMode();
+		final IModuleArtifact moduleArtifact = ServerPlugin.loadModuleArtifact(selection);
 		
 		Shell shell2 = null;
 		if (window != null)
@@ -191,7 +181,7 @@
 		if (servers != null) {
 			int size = servers.length;
 			for (int i = 0; i < size && !found; i++) {
-				if (ServerUIPlugin.isCompatibleWithLaunchMode(servers[i], launchMode)) {
+				if (ServerUIPlugin.isCompatibleWithLaunchMode(servers[i], launchMode2)) {
 					try {
 						IModule[] parents = servers[i].getRootModules(module, null);
 						if (parents != null && parents.length > 0)
@@ -212,7 +202,7 @@
 				for (int i = 0; i < size && !found; i++) {
 					IServerType type = serverTypes[i];
 					IModuleType[] moduleTypes = type.getRuntimeType().getModuleTypes();
-					if (type.supportsLaunchMode(launchMode) && ServerUtil.isSupportedModule(moduleTypes, module.getModuleType())) {
+					if (type.supportsLaunchMode(launchMode2) && ServerUtil.isSupportedModule(moduleTypes, module.getModuleType())) {
 						found = true;
 					}
 				}
@@ -227,21 +217,10 @@
 		if (!ServerUIPlugin.saveEditors())
 			return;
 		
-		tasksAndClientShown = false;
+		tasksRun = false;
 		IServer server2 = null;
-		client = null;
-		launchableAdapter = null;
 		try {
-			IProgressMonitor monitor = new NullProgressMonitor();
-			server2 = getServer(module, moduleArtifact, monitor);
-			if (monitor.isCanceled())
-				return;
-			
-			if (server2 != null) {
-				IFolder folder = server2.getServerConfiguration();
-				if (folder != null && folder.getProject() != null && !folder.getProject().isOpen())
-					folder.getProject().open(monitor);
-			}
+			server2 = getServer(module, launchMode2, null);
 		} catch (CoreException ce) {
 			EclipseUtil.openError(shell, ce.getLocalizedMessage());
 			return;
@@ -261,43 +240,66 @@
 		if (!ServerUIPlugin.promptIfDirty(shell, server))
 			return;
 		
-		if (!tasksAndClientShown) {
-			RunOnServerWizard wizard = new RunOnServerWizard(server, launchMode, moduleArtifact);
-			if (wizard.shouldAppear()) {
+		if (!tasksRun) {
+			SelectTasksWizard wizard = new SelectTasksWizard(server);
+			wizard.addPages();
+			if (wizard.hasTasks() && wizard.hasOptionalTasks()) {
 				WizardDialog dialog = new WizardDialog(shell, wizard);
 				if (dialog.open() == Window.CANCEL)
 					return;
 			} else
 				wizard.performFinish();
-			client = wizard.getSelectedClient();
-			launchableAdapter = wizard.getLaunchableAdapter();
 		}
 		
 		Thread thread = new Thread("Run on Server") {
 			public void run() {
-				if (client == null) {
-					// if there is no client, use a dummy
-					client = new IClient() {
-						public String getDescription() {
-							return Messages.clientDefaultDescription;
+				String launchMode = launchMode2;
+				
+				// get the launchable adapter and module object
+				ILaunchableAdapter launchableAdapter = null;
+				Object launchable = null;
+				ILaunchableAdapter[] adapters = ServerPlugin.getLaunchableAdapters();
+				if (adapters != null) {
+					int size2 = adapters.length;
+					for (int j = 0; j < size2; j++) {
+						ILaunchableAdapter adapter = adapters[j];
+						try {
+							Object launchable2 = adapter.getLaunchable(server, moduleArtifact);
+							Trace.trace(Trace.FINEST, "adapter= " + adapter + ", launchable= " + launchable2);
+							if (launchable2 != null) {
+								launchableAdapter = adapter;
+								launchable = launchable2;
+							}
+						} catch (Exception e) {
+							Trace.trace(Trace.SEVERE, "Error in launchable adapter", e);
 						}
-
-						public String getId() {
-							return "org.eclipse.wst.server.ui.client.default";
+					}
+				}
+				
+				IClient[] clients = new IClient[0];
+				if (launchable != null)
+					clients = getClients(server, launchable, launchMode);
+				
+				Trace.trace(Trace.FINEST, "Launchable clients: " + clients);
+				
+				IClient client = null;
+				if (clients == null || clients.length == 0) {
+					EclipseUtil.openError(Messages.errorNoClient);
+					Trace.trace(Trace.SEVERE, "No launchable clients!");
+					return;
+				} else if (clients.length == 1) {
+					client = clients[0];
+				} else {
+					SelectClientWizard wizard = new SelectClientWizard(clients);
+					final ClosableWizardDialog dialog = new ClosableWizardDialog(shell, wizard);
+					shell.getDisplay().syncExec(new Runnable() {
+						public void run() {
+							dialog.open();
 						}
-
-						public String getName() {
-							return Messages.clientDefaultName;
-						}
-
-						public IStatus launch(IServer server3, Object launchable2, String launchMode3, ILaunch launch) {
-							return Status.OK_STATUS;
-						}
-
-						public boolean supports(IServer server3, Object launchable2, String launchMode3) {
-							return true;
-						}
-					};
+					});
+					client = wizard.getSelectedClient();
+					if (client == null)
+						return;
 				}
 				
 				Trace.trace(Trace.FINEST, "Ready to launch");
@@ -315,65 +317,55 @@
 					IBreakpointManager breakpointManager = DebugPlugin.getDefault().getBreakpointManager();
 					boolean disabledBreakpoints = false;
 					
-					if (server.getServerRestartState()) {
-						int result = openRestartDialog(shell);
-						if (result == 0) {
-							launchMode = mode;
+					if (!ILaunchManager.RUN_MODE.equals(mode) && ILaunchManager.RUN_MODE.equals(launchMode)) {
+						boolean breakpointsOption = false;
+						if (breakpointManager.isEnabled() && ILaunchManager.DEBUG_MODE.equals(mode))
+							breakpointsOption = true;
+						int result = openOptionsDialog(shell, Messages.wizRunOnServerTitle, Messages.dialogModeWarningRun, breakpointsOption);
+						if (result == 0)
 							restart = true;
-						} else if (result == 9) // cancel
+						else if (result == 1) {
+							breakpointManager.setEnabled(false);
+							disabledBreakpoints = true;
+							launchMode = mode;
+						} else if (result == 2)
+							launchMode = mode;
+						else // result == 9
+							return;
+					} else if (!ILaunchManager.DEBUG_MODE.equals(mode) && ILaunchManager.DEBUG_MODE.equals(launchMode)) {
+						int result = openOptionsDialog(shell, Messages.wizDebugOnServerTitle, Messages.dialogModeWarningDebug, false);
+						if (result == 0)
+							restart = true;
+						else if (result == 1)
+							launchMode = mode;
+						else // result == 9
+							return;
+					} else if (!ILaunchManager.PROFILE_MODE.equals(mode) && ILaunchManager.PROFILE_MODE.equals(launchMode)) {
+						boolean breakpointsOption = false;
+						if (breakpointManager.isEnabled() && ILaunchManager.DEBUG_MODE.equals(mode))
+							breakpointsOption = true;
+						int result = openOptionsDialog(shell, Messages.wizProfileOnServerTitle, Messages.dialogModeWarningProfile, breakpointsOption);
+						if (result == 0)
+							restart = true;
+						else if (result == 1) {
+							breakpointManager.setEnabled(false);
+							disabledBreakpoints = true;
+							launchMode = mode;
+						} else if (result == 2)
+							launchMode = mode;
+						else // result == 9
 							return;
 					}
-					if (!restart) {
-						if (!ILaunchManager.RUN_MODE.equals(mode) && ILaunchManager.RUN_MODE.equals(launchMode)) {
-							boolean breakpointsOption = false;
-							if (breakpointManager.isEnabled() && ILaunchManager.DEBUG_MODE.equals(mode))
-								breakpointsOption = true;
-							int result = openOptionsDialog(shell, Messages.wizRunOnServerTitle, Messages.dialogModeWarningRun, breakpointsOption);
+					
+					if (ILaunchManager.DEBUG_MODE.equals(launchMode)) {
+						if (!breakpointManager.isEnabled() && !disabledBreakpoints) {
+							int result = openBreakpointDialog(shell);
 							if (result == 0)
-								restart = true;
+								breakpointManager.setEnabled(true);
 							else if (result == 1) {
-								breakpointManager.setEnabled(false);
-								disabledBreakpoints = true;
-								launchMode = mode;
-							} else if (result == 2)
-								launchMode = mode;
-							else // result == 9 // cancel
+								// ignore
+							} else // result == 2
 								return;
-						} else if (!ILaunchManager.DEBUG_MODE.equals(mode) && ILaunchManager.DEBUG_MODE.equals(launchMode)) {
-							int result = openOptionsDialog(shell, Messages.wizDebugOnServerTitle, Messages.dialogModeWarningDebug, false);
-							if (result == 0)
-								restart = true;
-							else if (result == 1)
-								launchMode = mode;
-							else // result == 9 // cancel
-								return;
-						} else if (!ILaunchManager.PROFILE_MODE.equals(mode) && ILaunchManager.PROFILE_MODE.equals(launchMode)) {
-							boolean breakpointsOption = false;
-							if (breakpointManager.isEnabled() && ILaunchManager.DEBUG_MODE.equals(mode))
-								breakpointsOption = true;
-							int result = openOptionsDialog(shell, Messages.wizProfileOnServerTitle, Messages.dialogModeWarningProfile, breakpointsOption);
-							if (result == 0)
-								restart = true;
-							else if (result == 1) {
-								breakpointManager.setEnabled(false);
-								disabledBreakpoints = true;
-								launchMode = mode;
-							} else if (result == 2)
-								launchMode = mode;
-							else // result == 9 // cancel
-								return;
-						}
-						
-						if (ILaunchManager.DEBUG_MODE.equals(launchMode)) {
-							if (!breakpointManager.isEnabled() && !disabledBreakpoints) {
-								int result = openBreakpointDialog(shell);
-								if (result == 0)
-									breakpointManager.setEnabled(true);
-								else if (result == 1) {
-									// ignore
-								} else // result == 2
-									return;
-							}
 						}
 					}
 					
@@ -409,6 +401,32 @@
 	}
 
 	/**
+	 * Returns the launchable clients for the given server and launchable
+	 * object.
+	 *
+	 * @param server org.eclipse.wst.server.core.IServer
+	 * @param launchable
+	 * @param launchMode String
+	 * @return an array of clients
+	 */
+	public static IClient[] getClients(IServer server, Object launchable, String launchMode) {
+		ArrayList list = new ArrayList();
+		IClient[] clients = ServerPlugin.getClients();
+		if (clients != null) {
+			int size = clients.length;
+			for (int i = 0; i < size; i++) {
+				Trace.trace(Trace.FINEST, "client= " + clients[i]);
+				if (clients[i].supports(server, launchable, launchMode))
+					list.add(clients[i]);
+			}
+		}
+		
+		IClient[] clients2 = new IClient[list.size()];
+		list.toArray(clients2);
+		return clients2;
+	}
+
+	/**
 	 * Open an options dialog.
 	 * 
 	 * @param shell
@@ -490,9 +508,10 @@
 		final int[] i = new int[1];
 		shell.getDisplay().syncExec(new Runnable() {
 			public void run() {
+				//BreakpointDialog dialog = new BreakpointDialog(shell);
 				OptionsMessageDialog dialog = new OptionsMessageDialog(shell,
 						Messages.wizDebugOnServerTitle, Messages.dialogBreakpoints, new String[] {
-						Messages.dialogBreakpointsReenable, Messages.dialogModeWarningContinue});
+						Messages.dialogBreakpointsReenable,	Messages.dialogModeWarningContinue});
 				i[0] = dialog.open();
 				if (dialog.isRemember()) {
 					if (i[0] == 0)
@@ -506,37 +525,6 @@
 	}
 
 	/**
-	 * Open a restart options dialog.
-	 * 
-	 * @param shell
-	 * @return a dialog return constant
-	 */
-	protected int openRestartDialog(final Shell shell) {
-		int current = ServerUIPlugin.getPreferences().getRestart();
-		if (current == ServerUIPreferences.RESTART_ALWAYS)
-			return 0;
-		else if (current == ServerUIPreferences.RESTART_NEVER)
-			return 1;
-		
-		final int[] i = new int[1];
-		shell.getDisplay().syncExec(new Runnable() {
-			public void run() {
-				OptionsMessageDialog dialog = new OptionsMessageDialog(shell,
-						Messages.defaultDialogTitle, Messages.dialogRestart, new String[] {
-						Messages.dialogRestartRestart, Messages.dialogRestartContinue});
-				i[0] = dialog.open();
-				if (dialog.isRemember()) {
-					if (i[0] == 0)
-						ServerUIPlugin.getPreferences().setRestart(ServerUIPreferences.RESTART_ALWAYS);
-					else if (i[0] == 1)
-						ServerUIPlugin.getPreferences().setRestart(ServerUIPreferences.RESTART_NEVER);
-				}
-			}
-		});
-		return i[0];
-	}
-
-	/**
 	 * The delegating action has been performed. Implement
 	 * this method to do the actual work.
 	 *
@@ -551,7 +539,7 @@
 			Trace.trace(Trace.SEVERE, "Run on Server Error", e);
 		}
 	}
-
+	
 	protected boolean isEnabled() {
 		try {
 			Boolean b = (Boolean) globalLaunchMode.get(getLaunchMode());
@@ -566,16 +554,7 @@
 	 * Returns the start mode that the server should use.
 	 */
 	protected String getLaunchMode() {
-		return launchMode;
-	}
-
-	/**
-	 * Set the launch mode.
-	 * 
-	 * @param launchMode a {@link ILaunchManager} launch mode
-	 */
-	public void setLaunchMode(String launchMode) {
-		this.launchMode = launchMode;
+		return ILaunchManager.RUN_MODE;
 	}
 
 	/**
@@ -594,7 +573,7 @@
 			globalSelection = null;
 			return;
 		}
-		
+
 		IStructuredSelection select = (IStructuredSelection) sel;
 		Iterator iterator = select.iterator();
 		if (iterator.hasNext())
@@ -605,7 +584,7 @@
 			globalSelection = null;
 			return;
 		}
-		
+
 		if (selection != globalSelection) {
 			Trace.trace(Trace.FINEST, "Selection: " + selection);
 			if (selection != null)	
@@ -631,11 +610,11 @@
 				globalLaunchMode.put(ILaunchManager.PROFILE_MODE, new Boolean(true));
 			}
 		}
-		
+
 		action.setEnabled(isEnabled());
 		Trace.trace(Trace.FINEST, "< selectionChanged " + (System.currentTimeMillis() - time));
 	}
-
+	
 	/**
 	 * Determines whether there is a server factory available for the given module
 	 * and the various start modes.
@@ -669,4 +648,8 @@
 		}
 		return true;
 	}
+
+	protected boolean supportsLaunchMode(IServer server, String launchMode) {
+		return server.getServerType().supportsLaunchMode(launchMode);
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java
index c8c5f8a..cd5470d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java
@@ -22,6 +22,7 @@
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.operations.IUndoableOperation;
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.wst.server.core.*;
@@ -201,8 +202,9 @@
 	 * Reload the command manager for a given id.
 	 * 
 	 * @param id an id
+	 * @param monitor a progress monitor
 	 */
-	public void reload(String id) {
+	public void reload(String id, IProgressMonitor monitor) {
 		try {
 			CommandManagerInfo info = getExistingCommandManagerInfo(id);
 			if (info != null) {
@@ -211,18 +213,15 @@
 					server = ServerCore.findServer(id);
 				if (server != null)
 					info.wc = server.createWorkingCopy();
+				//info.serverElement = ServerCore.getResourceManager().getServer()
+				//info.serverElement = ServerCore.getEditManager().reloadEditModel(info.file, monitor);
 				firePropertyChangeEvent(PROP_RELOAD, id, null);
 			}
-			clearUndoList(id);
-			clearRedoList(id);
-			undoSaveIndex = undoList.size();
-			setDirtyState(id, false);
-			updateTimestamps(id);
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Could not release command manager", e);
 		}
 	}
-
+	
 	/**
 	 * 
 	 */
@@ -587,6 +586,9 @@
 			if (file != null)
 				list.add(file);
 			
+			//if ()
+			//IServerConfiguration config = (IServerConfiguration) element;
+			// TODO: get read-only files
 			IFile[] files = new IFile[list.size()];
 			list.toArray(files);
 			return files;
@@ -602,11 +604,11 @@
 	protected IFile[] getServerResourceFiles(String id) {
 		if (id == null)
 			return new IFile[0];
-		
+
 		CommandManagerInfo info = getExistingCommandManagerInfo(id);
 		if (info == null)
 			return new IFile[0];
-		
+
 		return getReadOnlyFiles(info.wc);
 	}
 
@@ -638,7 +640,7 @@
 		IFile[] files = getServerResourceFiles(id);
 		if (files != null) {
 			int size = files.length;
-			
+		
 			for (int i = 0; i < size; i++) {
 				if (files[i] != null) {
 					File f = files[i].getLocation().toFile();
@@ -651,10 +653,10 @@
 		}
 		info.timestamp = getTimestamp(info);
 	}
-
+	
 	protected static int getTimestamp(CommandManagerInfo info) {
 		IServer server = info.wc.getOriginal();
-		
+
 		if (server != null)
 			return ((Server)server).getTimestamp();
 		return -1;
@@ -669,7 +671,7 @@
 			return false;
 		IFile[] files = getServerResourceFiles(id);
 		int size = files.length;
-		
+
 		int count = 0;
 		for (int i = 0; i < size; i++) {
 			count++;
@@ -686,7 +688,7 @@
 		int timestamp = getTimestamp(info);
 		if (info.timestamp != timestamp)
 			return true;
-		
+
 		if (count != info.fileMap.size())
 			return true;
 		return false;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
index 797a932..d14755d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
@@ -21,6 +21,7 @@
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationType;
 import org.eclipse.debug.core.ILaunchManager;
@@ -72,7 +73,6 @@
 	protected Text serverConfigurationName;
 	protected Text hostname;
 	protected Combo runtimeCombo;
-	protected Button browse;
 	protected Button autoPublishDefault;
 	protected Button autoPublishDisable;
 	protected Button autoPublishOverride;
@@ -383,7 +383,7 @@
 		}
 		
 		// server configuration path
-		if (server != null && server.getServerType() != null && server.getServerType().hasServerConfiguration()) {
+		if (server != null && server.getServerType().hasServerConfiguration()) {
 			createLabel(toolkit, composite, Messages.serverEditorOverviewServerConfigurationPath);
 			
 			IFolder folder = server.getServerConfiguration();
@@ -403,7 +403,7 @@
 			whs.setHelp(serverConfigurationName, ContextIds.EDITOR_CONFIGURATION);
 			
 			final IFolder currentFolder = server.getServerConfiguration();
-			browse = toolkit.createButton(composite, Messages.serverEditorOverviewServerConfigurationBrowse, SWT.PUSH);
+			Button browse = toolkit.createButton(composite, Messages.serverEditorOverviewServerConfigurationBrowse, SWT.PUSH);
 			browse.addSelectionListener(new SelectionAdapter() {
 				public void widgetSelected(SelectionEvent e) {
 					ContainerSelectionDialog dialog = new ContainerSelectionDialog(serverConfigurationName.getShell(),
@@ -434,7 +434,7 @@
 			browse.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
 		}
 		
-		if (server != null && server.getServerType() != null) {
+		if (server != null) {
 			IServerType serverType = server.getServerType();
 			if (serverType.supportsLaunchMode(ILaunchManager.RUN_MODE) || serverType.supportsLaunchMode(ILaunchManager.DEBUG_MODE)
 					|| serverType.supportsLaunchMode(ILaunchManager.PROFILE_MODE)) {
@@ -614,7 +614,11 @@
 		WizardFragment fragment = new WizardFragment() {
 			protected void createChildFragments(List list) {
 				list.add(fragment2);
-				list.add(WizardTaskUtil.SaveRuntimeFragment);
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+					}
+				});
 			}
 		};
 		
@@ -688,60 +692,6 @@
 				serverName.setEditable(false);
 			else
 				serverName.setEditable(true);
-			
-			hostname.setText(server.getHost());
-			if (readOnly)
-				hostname.setEditable(false);
-			else
-				hostname.setEditable(true);
-			
-			if (runtimeCombo != null) {
-				updateRuntimeCombo();
-				IRuntime runtime = server.getRuntime();
-				int size2 = runtimes.length;
-				for (int i = 0; i < size2; i++) {
-					if (runtimes[i].equals(runtime))
-						runtimeCombo.select(i);
-				}
-				if (readOnly)
-					runtimeCombo.setEnabled(false);
-				else
-					runtimeCombo.setEnabled(true);
-			}
-			
-			if (serverConfigurationName != null) {
-				IFolder folder = server.getServerConfiguration();
-				if (folder == null)
-					serverConfigurationName.setText(Messages.elementUnknownName);
-				else
-					serverConfigurationName.setText("" + server.getServerConfiguration().getFullPath());
-				if (readOnly) {
-					serverConfigurationName.setEditable(false);
-					browse.setEnabled(false);
-				} else {
-					serverConfigurationName.setEditable(true);
-					browse.setEnabled(true);
-				}
-			}
-			
-			Server svr = (Server) server;
-			int publishSetting = svr.getAutoPublishSetting();
-			autoPublishDefault.setSelection(publishSetting == Server.AUTO_PUBLISH_DEFAULT);
-			autoPublishDisable.setSelection(publishSetting == Server.AUTO_PUBLISH_DISABLE);
-			autoPublishOverride.setSelection(publishSetting == Server.AUTO_PUBLISH_OVERRIDE);
-			autoPublishTime.setSelection(svr.getAutoPublishTime());
-			
-			if (readOnly) {
-				autoPublishDefault.setEnabled(false);
-				autoPublishDisable.setEnabled(false);
-				autoPublishOverride.setEnabled(false);
-				autoPublishTime.setEnabled(false);
-			} else {
-				autoPublishDefault.setEnabled(true);
-				autoPublishDisable.setEnabled(true);
-				autoPublishOverride.setEnabled(true);
-				autoPublishTime.setEnabled(true);
-			}
 		}
 		
 		updating = false;
@@ -749,7 +699,7 @@
 	}
 
 	protected void validate() {
-		if (server != null && server.getServerType() != null && server.getServerType().hasServerConfiguration()) {
+		if (server != null && server.getServerType().hasServerConfiguration()) {
 			IFolder folder = getServer().getServerConfiguration();
 			if (folder == null || !folder.exists()) {
 				setErrorMessage(Messages.errorMissingConfiguration);
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 c98b76c..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
@@ -226,7 +226,7 @@
 			Iterator iterator = ServerEditorCore.getServerEditorPageFactories().iterator();
 			while (iterator.hasNext()) {
 				IServerEditorPartFactory factory = (IServerEditorPartFactory) iterator.next();
-				if (factory.supportsType(serverTypeId) && factory.shouldCreatePage(server)) {
+				if (serverTypeId != null && factory.supportsType(serverTypeId) && factory.shouldCreatePage(server)) {
 					Trace.trace(Trace.FINEST, "Adding page: " + factory.getId() + " " + editorPartInput);
 					try {
 						IEditorPart page = factory.createPage();
@@ -245,8 +245,7 @@
 				}
 			}
 			
-			if (pageCount > 0)
-				setActivePage(0);
+			setActivePage(0);
 			
 			// register for events that might change the cut/copy/paste actions
 			int count = getPageCount();
@@ -507,14 +506,14 @@
 				status.setMessage("");
 		}
 	}
-
+	
 	/**
 	 * 
 	 */
 	public void updateStatusError() {
 		if (status == null)
 			return;
-		
+
 		String error = null;
 		IEditorPart part = getActiveEditor();
 		if (part instanceof ServerEditorPart)
@@ -533,7 +532,7 @@
 		}
 		status.setErrorMessage(error);
 	}
-
+	
 	/**
 	 * 
 	 */
@@ -875,18 +874,18 @@
 	/**
 	 * 
 	 */
-	protected void promptReloadServerFile(String id) {
+	protected void promptReloadServerFile(String id, IServerWorkingCopy wc) {
 		String title = Messages.editorResourceModifiedTitle;
 		String message = Messages.editorServerModifiedMessage;
-		
+
 		if (MessageDialog.openQuestion(getEditorSite().getShell(), title, message)) {
-			/*try {
+			try {
 				//wc.refreshLocal(IResource.DEPTH_ONE, new NullProgressMonitor());
 				//TODO: refresh local server
 			} catch (Exception e) {
 				Trace.trace(Trace.SEVERE, "Error refreshing server", e);
-			}*/
-			commandManager.reload(id);
+			}
+			commandManager.reload(id, new NullProgressMonitor());
 		}
 	}
 
@@ -930,13 +929,13 @@
 				if (commandManager.hasChanged(serverId)) {
 					IServer newServer = ServerCore.findServer(serverId);
 					if (newServer != null && ((Server)newServer).getTimestamp() > ((Server)server).getTimestamp())
-						commandManager.reload(serverId);
+						commandManager.reload(serverId, new NullProgressMonitor());
 					else
-						promptReloadServerFile(serverId);
+						promptReloadServerFile(serverId, server);
 				}
 			} else {
 				if (commandManager.hasChanged(serverId) && !commandManager.areFilesReadOnly(serverId))
-					promptReloadServerFile(serverId);
+					promptReloadServerFile(serverId, server);
 				else if (commandManager.areFilesReadOnly(serverId) && !commandManager.isReadOnly(serverId))
 					promptReadOnlyServerFile(serverId);
 			}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java
index f900576..bc71268 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java
@@ -147,12 +147,12 @@
 	 * @see IServerEditorPartFactory#supportsType(String)
 	 */
 	public boolean supportsType(String id) {
-		String[] s = getTypeIds();
-		if (s == null || s.length == 0 || "*".equals(s[0]))
-			return true;
-		
 		if (id == null || id.length() == 0)
 			return false;
+
+		String[] s = getTypeIds();
+		if (s == null)
+			return false;
 		
 		int size = s.length;
 		for (int i = 0; i < size; i++) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerResourceCommandManager.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerResourceCommandManager.java
index 52dfe03..8f56608 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerResourceCommandManager.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerResourceCommandManager.java
@@ -67,7 +67,7 @@
 	protected boolean validateEdit() {
 		if (commandManager.isDirty(id))
 			return true;
-		
+
 		IFile[] files = commandManager.getReadOnlyFiles(id);
 		if (files.length == 0)
 			return true;
@@ -89,7 +89,7 @@
 		IServerAttributes serverfile = commandManager.getServerResource(id);
 		if (commandManager.hasChanged(id)) {
 			if (serverfile instanceof IServer)
-				editor.promptReloadServerFile(id);
+				editor.promptReloadServerFile(id, (IServerWorkingCopy) serverfile);
 		}
 		
 		// allow edit
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/extension/ExtensionSite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/extension/ExtensionSite.java
deleted file mode 100644
index 10e7482..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/extension/ExtensionSite.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.extension;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.update.core.ICategory;
-import org.eclipse.update.core.IFeature;
-import org.eclipse.update.core.ISite;
-import org.eclipse.update.core.ISiteFeatureReference;
-import org.eclipse.wst.server.core.internal.IMemento;
-import org.eclipse.wst.server.core.internal.InstallableRuntime;
-import org.eclipse.wst.server.ui.internal.ProgressUtil;
-/**
- * 
- */
-public class ExtensionSite {
-	private IMemento memento;
-
-	public ExtensionSite(IMemento memento) {
-		super();
-		this.memento = memento;
-	}
-
-	public String getUrl() {
-		return memento.getString("url");
-	}
-
-	private List featureList;
-
-	protected static boolean hasCategory(ISiteFeatureReference ref, String category) {
-		ICategory[] cat = ref.getCategories();
-		if (cat == null)
-			return false;
-		
-		int size = cat.length;
-		for (int i = 0; i < size; i++)
-			if (category.equals(cat[i].getName()))
-				return true;
-		
-		return false;
-	}
-
-	protected static boolean matches(String a, String b) {
-		if (a == null || "*".equals(a))
-			return true;
-		
-		if (b == null)
-			return false;
-		
-		StringTokenizer st = new StringTokenizer(a, ",");
-		while (st.hasMoreTokens()) {
-			String c = st.nextToken().trim();
-			if (b.equals(c))
-				return true;
-		}
-		
-		return false;
-	}
-
-	public synchronized List getFeatures(String category, IProgressMonitor monitor) throws CoreException {
-		if (featureList != null)
-			return featureList;
-		
-		String fromSite = getUrl();
-		
-		List list = new ArrayList();
-		if (fromSite == null)
-			return list;
-		
-		monitor.beginTask("Searching " + fromSite, 100);
-		ISite site = InstallableRuntime.getSite(fromSite, ProgressUtil.getSubMonitorFor(monitor, 5));
-		if (site == null)
-			return list;
-		// java.net.UnknownHostException
-		
-		ISiteFeatureReference[] featureRefs = site.getFeatureReferences();
-		for (int i = 0; i < featureRefs.length; i++) {
-			if (hasCategory(featureRefs[i], category)) {
-				if (matches(featureRefs[i].getOS(), Platform.getOS()) &&
-						matches(featureRefs[i].getOSArch(), Platform.getOSArch()) &&
-						matches(featureRefs[i].getWS(), Platform.getWS())) {
-					IFeature feature2 = featureRefs[i].getFeature(ProgressUtil.getSubMonitorFor(monitor, 5));
-					if (feature2 != null)
-						list.add(feature2);
-				}
-			}
-		}
-		monitor.done();
-		
-		featureList = list;
-		return featureList;
-	}
-
-	public String toString() {
-		return "ExtensionSite[" + getUrl() + "]";
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/extension/ExtensionUtility.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/extension/ExtensionUtility.java
deleted file mode 100644
index 1e08df1..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/extension/ExtensionUtility.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.extension;
-
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.window.Window;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.update.configuration.IConfiguredSite;
-import org.eclipse.update.configuration.ILocalSite;
-import org.eclipse.update.core.IFeature;
-import org.eclipse.update.core.IFeatureReference;
-import org.eclipse.update.core.ISite;
-import org.eclipse.update.core.IURLEntry;
-import org.eclipse.update.core.IVerificationListener;
-import org.eclipse.update.core.IVerificationResult;
-import org.eclipse.update.core.SiteManager;
-import org.eclipse.update.core.VersionedIdentifier;
-import org.eclipse.wst.server.core.internal.IInstallableServer;
-import org.eclipse.wst.server.core.internal.IMemento;
-import org.eclipse.wst.server.core.internal.InstallableServer;
-import org.eclipse.wst.server.core.internal.ServerPlugin;
-import org.eclipse.wst.server.core.internal.XMLMemento;
-import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.ProgressUtil;
-import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.Trace;
-import org.eclipse.wst.server.ui.internal.wizard.ExtensionWizard;
-
-public class ExtensionUtility {
-	public static boolean launchExtensionWizard(Shell shell, String title, String message) {
-		ExtensionWizard wizard2 = new ExtensionWizard(title, message);
-		WizardDialog dialog = new WizardDialog(shell, wizard2);
-		if (dialog.open() != Window.CANCEL)
-			return true;
-		return false;
-	}
-
-	public static ExtensionSite[] getExtensionItems(URL url) throws CoreException {
-		InputStream in = null;
-		try {
-			in = url.openStream();
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not load URL " + url);
-		}
-		
-		if (in == null)
-			throw new CoreException(new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, "Could not load extensions", null));
-		
-		try {
-			IMemento memento = XMLMemento.loadMemento(in);
-			IMemento children[] = memento.getChildren("site");
-			int size = children.length;
-			List list = new ArrayList(size);
-			for (int i = 0; i < size; i++) {
-				ExtensionSite item = new ExtensionSite(children[i]);
-				list.add(item);
-			}
-			
-			ExtensionSite[] items = new ExtensionSite[list.size()];
-			list.toArray(items);
-			return items;
-		} catch (Exception e) {
-			throw new CoreException(new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, e.getMessage(), e));
-		}
-	}
-
-	/**
-	 * Returns an array of all known extension items.
-	 * <p>
-	 * A new array is returned on each call, so clients may store or modify the result.
-	 * </p>
-	 * 
-	 * @return the array of extensions items {@link ExtensionSite}
-	 */
-	public static ExtensionSite[] getExtensionItems() {
-		URL url = ServerUIPlugin.getInstance().getBundle().getEntry("serverAdapterSites.xml");
-		
-		try {
-			return getExtensionItems(url);
-		} catch (CoreException ce) {
-			Trace.trace(Trace.SEVERE, "Could not get extension items");
-			return null;
-		}
-	}
-
-	public static void addFeature(List list, List existing, IFeature newFeature, FeatureListener listener) {
-		if (existing.contains(newFeature))
-			return;
-		
-		VersionedIdentifier newVi = newFeature.getVersionedIdentifier();
-		IFeature remove = null;
-		
-		Iterator iterator = list.iterator();
-		while (iterator.hasNext()) {
-			IFeature feature = (IFeature) iterator.next();
-			VersionedIdentifier vi = feature.getVersionedIdentifier(); 
-			if (vi.getIdentifier().equals(newVi.getIdentifier())) {
-				//Version nextCand = new Version(features[i].getVersionedIdentifier().getVersion().toString());
-				if (newVi.getVersion().isGreaterOrEqualTo(vi.getVersion())) {
-					remove = feature;
-				} else // new feature is older
-					return;
-			}
-		}
-		if (remove != null) {
-			list.remove(remove);
-			listener.featureRemoved(remove);
-		}
-		
-		list.add(newFeature);
-		listener.featureFound(newFeature);
-		
-		try {
-			Thread.sleep(800);
-		} catch (Exception s) {
-			//
-		}
-	}
-
-	public static void addFeatures(List list, List existing, List newFeatures, FeatureListener listener) {
-		Iterator iterator = newFeatures.iterator();
-		while (iterator.hasNext()) {
-			addFeature(list, existing, (IFeature) iterator.next(), listener);
-		}
-	}
-
-	public interface FeatureListener {
-		public void featureFound(IFeature feature);
-		public void featureRemoved(IFeature feature);
-		public void siteFailure(ISite site, CoreException ce);
-	}
-
-	protected static List getExistingFeatures(IProgressMonitor monitor) throws CoreException {
-		monitor.beginTask(Messages.installableServerLocal, 100);
-		ILocalSite site = SiteManager.getLocalSite();
-		IConfiguredSite[] sites = site.getCurrentConfiguration().getConfiguredSites();
-		int size = sites.length;
-		List list = new ArrayList(200);
-		for (int i = 0; i < size; i++) {
-			IFeatureReference[] refs = sites[i].getFeatureReferences();
-			int size2 = refs.length;
-			for (int j = 0; j < size2; j++) {
-				IFeature f = refs[j].getFeature(ProgressUtil.getSubMonitorFor(monitor, 5));
-				if (!list.contains(f))
-					list.add(f);
-			}
-		}
-		monitor.done();
-		
-		return list;
-	}
-
-	public static IFeature[] getAllFeatures(String id, FeatureListener listener, IProgressMonitor monitor) throws CoreException {
-		monitor = ProgressUtil.getMonitorFor(monitor);
-		monitor.beginTask("", 1100);
-		
-		monitor.subTask(Messages.installableServerLocal);
-		List existing = getExistingFeatures(ProgressUtil.getSubMonitorFor(monitor, 100));
-		
-		ExtensionSite[] items = ExtensionUtility.getExtensionItems();
-		IInstallableServer[] servers = ServerPlugin.getInstallableServers();
-		int x = 1000 / (items.length + servers.length);
-		
-		monitor.worked(50);
-		List list = new ArrayList();
-		int size = items.length;
-		
-		for (int i = 0; i < size; i++) {
-			try {
-				if (monitor.isCanceled())
-					return null;
-				
-				monitor.subTask(NLS.bind(Messages.installableServerSearching, items[i].getUrl()));
-				List list2 = items[i].getFeatures(id, ProgressUtil.getSubMonitorFor(monitor, x));
-				addFeatures(list, existing, list2, listener);
-			} catch (CoreException ce) {
-				ce.printStackTrace();
-			}
-		}
-		
-		// add installable servers
-		size = servers.length;
-		for (int i = 0; i < size; i++) {
-			if (monitor.isCanceled())
-				return null;
-			
-			InstallableServer is = (InstallableServer) servers[i];
-			monitor.subTask(NLS.bind(Messages.installableServerSearching, is.getFromSite()));
-			IFeature feature = is.getFeature(ProgressUtil.getSubMonitorFor(monitor, x));
-			if (feature != null)
-				addFeature(list, existing, feature, listener);
-		}
-		
-		IFeature[] ef = new IFeature[list.size()];
-		list.toArray(ef);
-		monitor.done();
-		return ef;
-	}
-
-	public static String getLicense(IFeature feature) {
-		IURLEntry license = feature.getLicense();
-		if (license != null)
-			return license.getAnnotation();
-		
-		return null;
-	}
-
-	public static String getDescription(IFeature feature) {
-		IURLEntry license = feature.getDescription();
-		if (license != null)
-			return license.getAnnotation();
-		
-		return null;
-	}
-
-	/*
-	 * @see IInstallableServer#install(IProgressMonitor)
-	 */
-	public static void install(IFeature feature, IProgressMonitor monitor) throws CoreException {
-		try {
-			IVerificationListener verificationListener = new IVerificationListener() {
-				public int prompt(IVerificationResult result) {
-					return CHOICE_INSTALL_TRUST_ONCE;
-				}
-			};
-			SiteManager.getLocalSite().getCurrentConfiguration().getConfiguredSites()[0].install(feature, verificationListener, monitor);
-		} catch (CoreException ce) {
-			ce.printStackTrace();
-		}
-		
-		try {
-			Thread.sleep(1000);
-		} catch (Exception e) {
-			// ignore
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/AbstractServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/AbstractServerAction.java
index ffda274..dd6aaf4 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/AbstractServerAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/AbstractServerAction.java
@@ -24,8 +24,8 @@
 public abstract class AbstractServerAction extends SelectionProviderAction {
 	public Shell shell;
 
-	public AbstractServerAction(Shell shell, ISelectionProvider selectionProvider, String text) {
-		super(selectionProvider, text);
+	public AbstractServerAction(Shell shell, ISelectionProvider selectionProvider, String name) {
+		super(selectionProvider, name);
 		this.shell = shell;
 		setEnabled(false);
 	}
@@ -36,9 +36,7 @@
 	 * @return boolean
 	 * @param server org.eclipse.wst.server.core.IServer
 	 */
-	public boolean accept(IServer server) {
-		return true;
-	}
+	public abstract boolean accept(IServer server);
 
 	/**
 	 * Perform action on this server.
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/DeleteAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/DeleteAction.java
index a916d4d..138e8a2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/DeleteAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/DeleteAction.java
@@ -15,8 +15,6 @@
 
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.jface.action.Action;
-import org.eclipse.ui.ISharedImages;
-import org.eclipse.ui.PlatformUI;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.ServerCore;
 import org.eclipse.wst.server.ui.internal.DeleteServerDialog;
@@ -48,9 +46,6 @@
 	 */
 	public DeleteAction(Shell shell, IServer[] servers) {
 		super(Messages.actionDelete);
-		ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages();
-		setImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
-		setDisabledImageDescriptor(sharedImages.getImageDescriptor(ISharedImages.IMG_TOOL_DELETE_DISABLED));
 		this.shell = shell;
 		
 		this.servers = servers;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModifyModulesAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModifyModulesAction.java
new file mode 100644
index 0000000..f8fa261
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModifyModulesAction.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.view.servers;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.*;
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.wizard.ClosableWizardDialog;
+import org.eclipse.wst.server.ui.internal.wizard.ModifyModulesWizard;
+/**
+ * Action to modify the modules of a server.
+ */
+public class ModifyModulesAction extends Action {
+	protected IWorkbenchPart part;
+	protected IServer server;
+
+	/**
+	 * ModifyModulesAction constructor comment.
+	 * 
+	 * @param server a server
+	 */
+	public ModifyModulesAction(IServer server) {
+		super(Messages.actionModifyModules);
+		this.server = server;
+	}
+
+	/*
+	 * Notifies this action delegate that the selection in the workbench has changed. 
+	 */
+	public void selectionChanged(IAction action, ISelection selection) {
+		server = null;
+		
+		if (selection instanceof IStructuredSelection) {
+			IStructuredSelection sel = (IStructuredSelection) selection;
+			Object obj = sel.getFirstElement();
+			if (obj instanceof IServer)
+				server = (IServer) obj;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
+	 */
+	public void setActivePart(IAction action, IWorkbenchPart targetPart) {
+		part = targetPart;
+	}
+
+	/*
+	 * Performs this action.
+	 */
+	public void run(IAction action) {
+		if (server == null)
+			return;
+		
+		Shell shell = part.getSite().getShell();
+		//if (!ServerUIUtil.promptIfDirty(shell, server))
+		//	return;
+		
+		// check if there are any projects first
+		// get currently deployed modules
+		List deployed = new ArrayList();
+		List modules = new ArrayList();
+		IModule[] currentModules = server.getModules();
+		if (currentModules != null) {
+			int size = currentModules.length;
+			for (int i = 0; i < size; i++) {
+				deployed.add(currentModules[i]);
+			}
+		}
+
+		// get remaining modules
+		IModule[] modules2 = ServerUtil.getModules(server.getServerType().getRuntimeType().getModuleTypes());
+		if (modules != null) {
+			int size = modules2.length;
+			for (int i = 0; i < size; i++) {
+				IModule module = modules2[i];
+				if (!deployed.contains(module)) {
+					IStatus status = server.canModifyModules(new IModule[] { module }, null, null);
+					if (status != null && status.getSeverity() != IStatus.ERROR)
+						modules.add(module);
+				}
+			}
+		}
+		
+		if (deployed.isEmpty() && modules.isEmpty()) {
+			MessageDialog.openInformation(shell, Messages.defaultDialogTitle, Messages.dialogAddRemoveModulesNone);
+			return;
+		}
+
+		ModifyModulesWizard wizard = new ModifyModulesWizard(server);
+		ClosableWizardDialog dialog = new ClosableWizardDialog(shell, wizard);
+		dialog.open();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModuleSloshAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModuleSloshAction.java
index 3bea1e8..07f690f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModuleSloshAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ModuleSloshAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,7 +21,6 @@
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.ServerUtil;
-import org.eclipse.wst.server.ui.internal.ImageResource;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.wizard.ClosableWizardDialog;
 import org.eclipse.wst.server.ui.internal.wizard.ModifyModulesWizard;
@@ -29,32 +28,31 @@
  * 
  */
 public class ModuleSloshAction extends AbstractServerAction {
-	public ModuleSloshAction(Shell shell, ISelectionProvider selectionProvider) {
-		super(shell, selectionProvider, Messages.actionModifyModules);
-		setToolTipText(Messages.actionModifyModulesToolTip);
-		setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ETOOL_MODIFY_MODULES));
-		setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CTOOL_MODIFY_MODULES));
-		setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DTOOL_MODIFY_MODULES));
+	public ModuleSloshAction(Shell shell, ISelectionProvider selectionProvider, String name) {
+		super(shell, selectionProvider, name);
 	}
 
 	/**
 	 * Return true if this server can currently be acted on.
 	 * @return boolean
-	 * @param server a server
+	 * @param server org.eclipse.wst.server.core.IServer
 	 */
 	public boolean accept(IServer server) {
-		return server.getServerType() != null;
+		return true;
 	}
 
 	/**
 	 * Perform action on this server.
-	 * @param server a server
+	 * @param server org.eclipse.wst.server.core.IServer
 	 */
 	public void perform(final IServer server) {
 		if (server == null)
 			return;
 		
-		// check if there are any modules first
+		//if (!ServerUIUtil.promptIfDirty(shell, server))
+		//	return;
+		
+		// check if there are any projects first
 		// get currently deployed modules
 		List deployed = new ArrayList();
 		List modules = new ArrayList();
@@ -65,7 +63,7 @@
 				deployed.add(currentModules[i]);
 			}
 		}
-		
+
 		// get remaining modules
 		IModule[] modules2 = ServerUtil.getModules(server.getServerType().getRuntimeType().getModuleTypes());
 		if (modules != null) {
@@ -84,7 +82,7 @@
 			MessageDialog.openInformation(shell, Messages.defaultDialogTitle, Messages.dialogAddRemoveModulesNone);
 			return;
 		}
-		
+
 		ModifyModulesWizard wizard = new ModifyModulesWizard(server);
 		ClosableWizardDialog dialog = new ClosableWizardDialog(shell, wizard);
 		dialog.open();
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerAction.java
new file mode 100644
index 0000000..6b02675
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerAction.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.view.servers;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.ui.internal.Messages;
+/**
+ * Action for monitoring a server.
+ */
+public class MonitorServerAction extends Action {
+	protected IServer server;
+	protected Shell shell;
+
+	/**
+	 * MonitorServerAction constructor.
+	 * 
+	 * @param shell a shell
+	 * @param server a server
+	 */
+	public MonitorServerAction(Shell shell, IServer server) {
+		super(Messages.actionMonitorProperties);
+		this.shell = shell;
+		this.server = server;
+	}
+
+	/**
+	 * Invoked when an action occurs. 
+	 */
+	public void run() {
+		MonitorServerDialog msd = new MonitorServerDialog(shell, server);
+		msd.open();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorPropertyPage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerDialog.java
similarity index 61%
rename from plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorPropertyPage.java
rename to plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerDialog.java
index df9c3f2..df2fbc2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorPropertyPage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,10 +10,9 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.view.servers;
 
-import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
 
-import org.eclipse.ui.dialogs.PropertyPage;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.viewers.MonitorComposite;
@@ -24,52 +23,66 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
 /**
- * Preference page that allows a user to monitor ports from a server.
+ * Dialog that prompts a user to monitor ports from a given server.
  */
-public class MonitorPropertyPage extends PropertyPage {
+public class MonitorServerDialog extends Dialog {
 	protected IServer server;
 	protected MonitorComposite monitorComp;
 
 	/**
-	 * MonitorPropertyPage constructor comment.
+	 * MonitorServerDialog constructor comment.
+	 * @param parentShell the parent shell
+	 * @param server the server
 	 */
-	public MonitorPropertyPage() {
-		super();
+	public MonitorServerDialog(Shell parentShell, IServer server) {
+		super(parentShell);
+		this.server = server;
+
+		setBlockOnOpen(true);
 	}
 
 	/**
-	 * Create the body of the page.
 	 *
-	 * @param parent org.eclipse.swt.widgets.Composite
-	 * @return org.eclipse.swt.widgets.Control
 	 */
-	protected Control createContents(Composite parent) {
-		IAdaptable element = getElement();
-		server = (IServer) element.getAdapter(IServer.class);
-		
+	protected void configureShell(Shell newShell) {
+		super.configureShell(newShell);
+		newShell.setText(Messages.dialogMonitorTitle);
+	}
+	
+	protected void createButtonsForButtonBar(Composite parent) {
+		createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
+	}
+
+	/**
+	 * 
+	 */
+	protected Control createDialogArea(Composite parent) {
 		// create a composite with standard margins and spacing
 		Composite composite = new Composite(parent, SWT.NONE);
 		GridLayout layout = new GridLayout();
-		layout.marginHeight = 0;
-		layout.marginWidth = 0;
+		layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+		layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+		layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
 		composite.setLayout(layout);
 		GridData data = new GridData(GridData.FILL_BOTH);
 		data.widthHint = 550;
 		composite.setLayoutData(data);
 		composite.setFont(parent.getFont());
 		//WorkbenchHelp.setHelp(composite, ContextIds.TERMINATE_SERVER_DIALOG);
-		
+	
 		Label label = new Label(composite, SWT.WRAP);
 		label.setText(NLS.bind(Messages.dialogMonitorDescription, new String[] { server.getName() } ));
 		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
 		label.setLayoutData(data);
-		
+
 		monitorComp = new MonitorComposite(composite, SWT.NONE, null, server);
 		monitorComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL));
 		
 		Dialog.applyDialogFont(composite);
-		
+	
 		return composite;
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PropertiesAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PropertiesAction.java
deleted file mode 100644
index 0684f96..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PropertiesAction.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.server.ui.internal.view.servers;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.dialogs.PreferencesUtil;
-
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.ui.internal.Messages;
-/**
- * Action to show the property page for a server.
- */
-public class PropertiesAction extends AbstractServerAction {
-	public PropertiesAction(Shell shell, ISelectionProvider selectionProvider) {
-		super(shell, selectionProvider, Messages.actionProperties);
-		try {
-			selectionChanged((IStructuredSelection) selectionProvider.getSelection());
-		} catch (Exception e) {
-			// ignore
-		}
-	}
-
-	public void perform(IServer server) {
-		Dialog dialog = PreferencesUtil.createPropertyDialogOn(shell, server, "org.eclipse.wst.server.ui.properties", null, null);
-		dialog.open();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java
index 1a9acf8..bdc5bc7 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,20 +14,14 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.internal.PublishServerJob;
-import org.eclipse.wst.server.ui.internal.ImageResource;
-import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 import org.eclipse.swt.widgets.Shell;
 /**
  * Publish to a server.
  */
 public class PublishAction extends AbstractServerAction {
-	public PublishAction(Shell shell, ISelectionProvider selectionProvider) {
-		super(shell, selectionProvider, Messages.actionPublish);
-		setToolTipText(Messages.actionPublishToolTip);
-		setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_PUBLISH));
-		setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_PUBLISH));
-		setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_PUBLISH));
+	public PublishAction(Shell shell, ISelectionProvider selectionProvider, String name) {
+		super(shell, selectionProvider, name);
 		try {
 			selectionChanged((IStructuredSelection) selectionProvider.getSelection());
 		} catch (Exception e) {
@@ -48,13 +42,13 @@
 	 * Perform action on this server.
 	 * @param server org.eclipse.wst.server.core.IServer
 	 */
-	public void perform(IServer server) {
+	public void perform(final IServer server) {
 		if (!ServerUIPlugin.promptIfDirty(shell, server))
 			return;
 		
 		if (!ServerUIPlugin.saveEditors())
 			return;
-		
+
 		PublishServerJob publishJob = new PublishServerJob(server, IServer.PUBLISH_INCREMENTAL, false);
 		publishJob.setUser(true);
 		publishJob.schedule();
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishCleanAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishCleanAction.java
deleted file mode 100644
index 46d7b28..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishCleanAction.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - Initial API and implementation
- **********************************************************************/
-package org.eclipse.wst.server.ui.internal.view.servers;
-
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.internal.PublishServerJob;
-import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.swt.widgets.Shell;
-/**
- * Clean publish to a server.
- */
-public class PublishCleanAction extends AbstractServerAction {
-	public PublishCleanAction(Shell shell, ISelectionProvider selectionProvider) {
-		super(shell, selectionProvider, Messages.actionPublishClean);
-		setToolTipText(Messages.actionPublishCleanToolTip);
-		try {
-			selectionChanged((IStructuredSelection) selectionProvider.getSelection());
-		} catch (Exception e) {
-			// ignore
-		}
-	}
-
-	/**
-	 * Return true if this server can currently be acted on.
-	 * @return boolean
-	 * @param server org.eclipse.wst.server.core.IServer
-	 */
-	public boolean accept(IServer server) {
-		return server.canPublish().isOK();
-	}
-
-	/**
-	 * Perform action on this server.
-	 * @param server org.eclipse.wst.server.core.IServer
-	 */
-	public void perform(IServer server) {
-		if (!ServerUIPlugin.promptIfDirty(shell, server))
-			return;
-		
-		if (!ServerUIPlugin.saveEditors())
-			return;
-		
-		if (MessageDialog.openConfirm(shell, Messages.defaultDialogTitle, Messages.dialogPublishClean)) {
-			PublishServerJob publishJob = new PublishServerJob(server, IServer.PUBLISH_CLEAN, false);
-			publishJob.setUser(true);
-			publishJob.schedule();
-		}
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RenameAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RenameAction.java
deleted file mode 100644
index b6dc612..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RenameAction.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.server.ui.internal.view.servers;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.TreeEditor;
-import org.eclipse.swt.events.FocusAdapter;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-import org.eclipse.ui.actions.TextActionHandler;
-
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.IServerWorkingCopy;
-import org.eclipse.wst.server.ui.internal.Messages;
-/**
- * Action to rename a server.
- */
-public class RenameAction extends AbstractServerAction {
-	/*
-	 * The tree editing widgets. If treeEditor is null then edit using the
-	 * dialog. We keep the editorText around so that we can close it if a new
-	 * selection is made.
-	 */
-	protected TreeEditor treeEditor;
-
-	protected Tree tree;
-
-	protected Text textEditor;
-
-	protected Composite textEditorParent;
-
-	private TextActionHandler textActionHandler;
-
-	// The server being edited if this is being done inline
-	protected IServer editedServer;
-
-	protected boolean saving = false;
-
-	public RenameAction(Shell shell, TreeViewer viewer, ISelectionProvider selectionProvider) {
-		super(shell, selectionProvider, Messages.actionRename);
-		this.tree = viewer.getTree();
-		this.treeEditor = new TreeEditor(tree);
-		try {
-			selectionChanged((IStructuredSelection) selectionProvider.getSelection());
-		} catch (Exception e) {
-			// ignore
-		}
-	}
-
-	public void perform(IServer server) {
-		runWithInlineEditor(server);
-	}
-
-	/*
-	 * Run the receiver using an inline editor from the supplied navigator. The
-	 * navigator will tell the action when the path is ready to run.
-	 */
-	private void runWithInlineEditor(IServer server) {
-		queryNewServerNameInline(server);
-	}
-
-	/**
-	 * On Mac the text widget already provides a border when it has focus, so
-	 * there is no need to draw another one. The value of returned by this
-	 * method is usd to control the inset we apply to the text field bound's in
-	 * order to get space for drawing a border. A value of 1 means a one-pixel
-	 * wide border around the text field. A negative value supresses the border.
-	 * However, in M9 the system property
-	 * "org.eclipse.swt.internal.carbon.noFocusRing" has been introduced as a
-	 * temporary workaround for bug #28842. The existence of the property turns
-	 * the native focus ring off if the widget is contained in a main window
-	 * (not dialog). The check for the property should be removed after a final
-	 * fix for #28842 has been provided.
-	 */
-	private static int getCellEditorInset(Control c) {
-		// special case for MacOS X
-		if ("carbon".equals(SWT.getPlatform())) { //$NON-NLS-1$
-			if (System
-					.getProperty("org.eclipse.swt.internal.carbon.noFocusRing") == null || c.getShell().getParent() != null) { //$NON-NLS-1$
-				return -2; // native border
-			}
-		}
-		return 1; // one pixel wide black border
-	}
-
-	/**
-	 * Get the Tree being edited.
-	 * 
-	 * @returnTree
-	 */
-	private Tree getTree() {
-		return tree;
-	}
-
-	private Composite createParent() {
-		Tree tree2 = getTree();
-		Composite result = new Composite(tree2, SWT.NONE);
-		TreeItem[] selectedItems = tree2.getSelection();
-		treeEditor.horizontalAlignment = SWT.LEFT;
-		treeEditor.grabHorizontal = true;
-		treeEditor.setEditor(result, selectedItems[0]);
-		return result;
-	}
-
-	/**
-	 * Return the new name to be given to the target resource or
-	 * <code>null<code>
-	 * if the query was canceled. Rename the currently selected server using the table editor. 
-	 * Continue the action when the user is done.
-	 *
-	 * @param server the server to rename
-	 */
-	private void queryNewServerNameInline(final IServer server) {
-		// Make sure text editor is created only once. Simply reset text
-		// editor when action is executed more than once. Fixes bug 22269
-		if (textEditorParent == null) {
-			createTextEditor(server);
-		}
-		textEditor.setText(server.getName());
-
-		// Open text editor with initial size
-		textEditorParent.setVisible(true);
-		Point textSize = textEditor.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		textSize.x += textSize.y; // Add extra space for new characters
-		Point parentSize = textEditorParent.getSize();
-		int inset = getCellEditorInset(textEditorParent);
-		textEditor.setBounds(2, inset, Math.min(textSize.x, parentSize.x - 4),
-				parentSize.y - 2 * inset);
-		textEditorParent.redraw();
-		textEditor.selectAll();
-		textEditor.setFocus();
-	}
-
-	/**
-	 * Create the text editor widget.
-	 * 
-	 * @param server the server to rename
-	 */
-	private void createTextEditor(final IServer server) {
-		// Create text editor parent. This draws a nice bounding rect
-		textEditorParent = createParent();
-		textEditorParent.setVisible(false);
-		final int inset = getCellEditorInset(textEditorParent);
-		if (inset > 0) {
-			textEditorParent.addListener(SWT.Paint, new Listener() {
-				public void handleEvent(Event e) {
-					Point textSize = textEditor.getSize();
-					Point parentSize = textEditorParent.getSize();
-					e.gc.drawRectangle(0, 0, Math.min(textSize.x + 4,
-							parentSize.x - 1), parentSize.y - 1);
-				}
-			});
-		}
-		// Create inner text editor
-		textEditor = new Text(textEditorParent, SWT.NONE);
-		textEditor.setFont(tree.getFont());
-		textEditorParent.setBackground(textEditor.getBackground());
-		textEditor.addListener(SWT.Modify, new Listener() {
-			public void handleEvent(Event e) {
-				Point textSize = textEditor.computeSize(SWT.DEFAULT,
-						SWT.DEFAULT);
-				textSize.x += textSize.y; // Add extra space for new
-				// characters.
-				Point parentSize = textEditorParent.getSize();
-				textEditor.setBounds(2, inset, Math.min(textSize.x,
-						parentSize.x - 4), parentSize.y - 2 * inset);
-				textEditorParent.redraw();
-			}
-		});
-		textEditor.addListener(SWT.Traverse, new Listener() {
-			public void handleEvent(Event event) {
-
-				// Workaround for Bug 20214 due to extra
-				// traverse events
-				switch (event.detail) {
-				case SWT.TRAVERSE_ESCAPE:
-					// Do nothing in this case
-					disposeTextWidget();
-					event.doit = true;
-					event.detail = SWT.TRAVERSE_NONE;
-					break;
-				case SWT.TRAVERSE_RETURN:
-					saveChangesAndDispose(server);
-					event.doit = true;
-					event.detail = SWT.TRAVERSE_NONE;
-					break;
-				}
-			}
-		});
-		textEditor.addFocusListener(new FocusAdapter() {
-			public void focusLost(FocusEvent fe) {
-				saveChangesAndDispose(server);
-			}
-		});
-
-		if (textActionHandler != null) {
-			textActionHandler.addText(textEditor);
-		}
-	}
-
-	/**
-	 * Close the text widget and reset the editorText field.
-	 */
-	protected void disposeTextWidget() {
-		if (textActionHandler != null)
-			textActionHandler.removeText(textEditor);
-
-		if (textEditorParent != null) {
-			textEditorParent.dispose();
-			textEditorParent = null;
-			textEditor = null;
-			treeEditor.setEditor(null, null);
-		}
-	}
-
-	/**
-	 * Save the changes and dispose of the text widget.
-	 * 
-	 * @param server the server to rename
-	 */
-	protected void saveChangesAndDispose(IServer server) {
-		if (saving == true)
-			return;
-		
-		saving = true;
-		// Cache the resource to avoid selection loss since a selection of
-		// another item can trigger this method
-		editedServer = server;
-		final String newName = textEditor.getText();
-		// Run this in an async to make sure that the operation that triggered
-		// this action is completed. Otherwise this leads to problems when the
-		// icon of the item being renamed is clicked (i.e., which causes the
-		// rename text widget to lose focus and trigger this method)
-		getTree().getShell().getDisplay().asyncExec(new Runnable() {
-			public void run() {
-				try {
-					if (!newName.equals(editedServer.getName())) {
-						try {
-							IServerWorkingCopy wc = editedServer.createWorkingCopy();
-							wc.setName(newName);
-							wc.save(false, null);
-						} catch (CoreException ce) {
-							// ignore for now
-						}
-						/*IStatus status = server.workspace.validateName(newName,
-								inlinedResource.getType());
-						if (!status.isOK()) {
-							MessageDialog.openError(shell, Messages.defaultDialogTitle, message);
-						} else {
-							// set name
-						}*/
-					}
-					editedServer = null;
-					// Dispose the text widget regardless
-					disposeTextWidget();
-					// Ensure the Navigator tree has focus, which it may not if
-					// the text widget previously had focus
-					if (tree != null && !tree.isDisposed()) {
-						tree.setFocus();
-					}
-				} finally {
-					saving = false;
-				}
-			}
-		});
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartAction.java
index 3939a38..339fb15 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RestartAction.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,13 +10,10 @@
  **********************************************************************/
 package org.eclipse.wst.server.ui.internal.view.servers;
 
-import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.internal.RestartServerJob;
-import org.eclipse.wst.server.ui.internal.ImageResource;
-import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 import org.eclipse.wst.server.ui.internal.Trace;
 import org.eclipse.wst.server.ui.internal.provisional.UIDecoratorManager;
@@ -27,27 +24,12 @@
 public class RestartAction extends AbstractServerAction {
 	protected String mode;
 
-	public RestartAction(Shell shell, ISelectionProvider selectionProvider, String mode) {
-		super(shell, selectionProvider, "restart");
-		if (mode == ILaunchManager.RUN_MODE) {
-			setToolTipText(Messages.actionRestartToolTip);
-			setText(Messages.actionStart);
-			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START));
-			setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START));
-			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START));
-		} else if (mode == ILaunchManager.DEBUG_MODE) {
-			setToolTipText(Messages.actionDebugToolTip);
-			setText(Messages.actionDebug);
-			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_DEBUG));
-			setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_DEBUG));
-			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_DEBUG));
-		} else if (mode == ILaunchManager.PROFILE_MODE) {
-			setToolTipText(Messages.actionRestartToolTip);
-			setText(Messages.actionProfile);
-			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_PROFILE));
-			setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_PROFILE));
-			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_PROFILE));
-		}
+	public RestartAction(Shell shell, ISelectionProvider selectionProvider, String name) {
+		this(shell, selectionProvider, name, null);
+	}
+
+	public RestartAction(Shell shell, ISelectionProvider selectionProvider, String name, String mode) {
+		super(shell, selectionProvider, name);
 		try {
 			selectionChanged((IStructuredSelection) selectionProvider.getSelection());
 		} catch (Exception e) {
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 c063a5e..5a318b6 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
@@ -34,7 +34,9 @@
 		int size = module.length;
 		setText(NLS.bind(Messages.actionRestartModule, module[size - 1].getName()));
 		
-		setEnabled(server.canControlModule(module, null).isOK() && server.getModuleState(module) != IServer.STATE_STOPPED);
+		setEnabled(server.getServerState() == IServer.STATE_STARTED
+			&& server.getModuleState(module) != IServer.STATE_STOPPED
+			&& server.canControlModule(module, null).isOK());
 	}
 
 	/**
@@ -42,7 +44,7 @@
 	 */
 	public void run() {
 		int size = module.length;
-		Job restartJob = new Job(NLS.bind(Messages.jobRestarting, module[size-1].getName())) {
+		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;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerActionHelper.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerActionHelper.java
index cd67aeb..a766536 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerActionHelper.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerActionHelper.java
@@ -20,6 +20,7 @@
 import org.eclipse.jface.viewers.*;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.ui.internal.ImageResource;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.actions.NewServerWizardAction;
 import org.eclipse.swt.widgets.Shell;
@@ -76,21 +77,72 @@
 			}
 		};
 	
-		// create the start actions
-		menu.add(new StartAction(shell, provider, ILaunchManager.DEBUG_MODE));
-		menu.add(new StartAction(shell, provider, ILaunchManager.RUN_MODE));
-		menu.add(new StartAction(shell, provider, ILaunchManager.PROFILE_MODE));
+		// create the debug action
+		Action debugAction = new StartAction(shell, provider, "debug", ILaunchManager.DEBUG_MODE);
+		debugAction.setToolTipText(Messages.actionDebugToolTip);
+		debugAction.setText(Messages.actionDebug);
+		debugAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_DEBUG));
+		debugAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_DEBUG));
+		debugAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_DEBUG));
+		menu.add(debugAction);
+	
+		// create the start action
+		Action runAction = new StartAction(shell, provider, "start", ILaunchManager.RUN_MODE);
+		runAction.setToolTipText(Messages.actionStartToolTip);
+		runAction.setText(Messages.actionStart);
+		runAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START));
+		runAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START));
+		runAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START));
+		menu.add(runAction);
 		
-		// create the restart menu
+		// create the profile action
+		Action profileAction = new StartAction(shell, provider, "profile", ILaunchManager.PROFILE_MODE);
+		profileAction.setToolTipText(Messages.actionProfileToolTip);
+		profileAction.setText(Messages.actionProfile);
+		profileAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_PROFILE));
+		profileAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_PROFILE));
+		profileAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_PROFILE));
+		menu.add(profileAction);
+	
+		// create the restart action
 		MenuManager menuManager = new MenuManager(Messages.actionRestart);
-		menuManager.add(new RestartAction(shell, provider, ILaunchManager.DEBUG_MODE));
-		menuManager.add(new RestartAction(shell, provider, ILaunchManager.RUN_MODE));
-		menuManager.add(new RestartAction(shell, provider, ILaunchManager.PROFILE_MODE));
-		menu.add(menuManager);
 		
-		// create the publish actions
-		menu.add(new PublishAction(shell, provider));
-		menu.add(new PublishCleanAction(shell, provider));
+		Action restartAction = new RestartAction(shell, provider, "restart", ILaunchManager.RUN_MODE);
+		restartAction.setToolTipText(Messages.actionRestartToolTip);
+		restartAction.setText(Messages.actionRestart);
+		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_RESTART));
+		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_RESTART));
+		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_RESTART));
+		menuManager.add(restartAction);
+		//menu.add(restartAction);
+		menu.add(menuManager);
+
+		// create the stop action
+		/*Action stopAction = new StopAction(shell, provider, "stop", IServerFactory.SERVER_STATE_SET_MANAGED);
+		stopAction.setToolTipText(Messages.actionStopToolTip"));
+		stopAction.setText(Messages.actionStop"));
+		stopAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_STOP));
+		stopAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_STOP));
+		stopAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_STOP));
+		menu.add(stopAction);
+
+		// create the disconnect action
+		Action disconnectAction = new StopAction(shell, provider, "disconnect", IServerFactory.SERVER_STATE_SET_ATTACHED);
+		disconnectAction.setToolTipText(Messages.actionStopToolTip2"));
+		disconnectAction.setText(Messages.actionStop2"));
+		disconnectAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_DISCONNECT));
+		disconnectAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_DISCONNECT));
+		disconnectAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_DISCONNECT));
+		menu.add(disconnectAction);*/
+
+		// create the publish action
+		Action publishAction = new PublishAction(shell, provider, "publish");
+		publishAction.setToolTipText(Messages.actionPublishToolTip);
+		publishAction.setText(Messages.actionPublish);
+		publishAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_PUBLISH));
+		publishAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_PUBLISH));
+		publishAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_PUBLISH));
+		menu.add(publishAction);
 	}
 
 	public static boolean isActionEnabled(ISelection selection, byte action) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableLabelProvider.java
index ff1689d..39b66d6 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableLabelProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,7 @@
 package org.eclipse.wst.server.ui.internal.view.servers;
 
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.viewers.ILabelDecorator;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 
@@ -54,6 +55,15 @@
 		super();
 	}
 
+	/**
+	 * ServerTableLabelProvider constructor comment.
+	 * 
+	 * @param decorator a label decorator
+	 */
+	public ServerTableLabelProvider(ILabelDecorator decorator) {
+		super(decorator);
+	}
+
 	public void setDefaultServer(IServer ds) {
 		defaultServer = ds;
 	}
@@ -124,24 +134,12 @@
 			return null;
 	}
 
-	public String getText(Object element) {
-		return getColumnText(element, 0);
-	}
-
 	public String getColumnText(Object element, int columnIndex) {
 		if (element instanceof ModuleServer) {
 			ModuleServer ms = (ModuleServer) element;
 			if (columnIndex == 0) {
-				if (ms.module == null)
-					return "";
 				int size = ms.module.length;
-				String name = ms.module[size - 1].getName();
-				if (decorator != null) {
-					String dec = decorator.decorateText(name, ms);
-					if (dec != null)
-						return dec;
-				}
-				return name;
+				return ms.module[size - 1].getName();
 			} else if (columnIndex == 1) {
 				if (ms.server == null)
 					return "";
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
index 242ebff..b0d1ac3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
@@ -11,10 +11,8 @@
 package org.eclipse.wst.server.ui.internal.view.servers;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.jface.viewers.*;
 
@@ -24,9 +22,7 @@
 import org.eclipse.wst.server.ui.internal.Trace;
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Item;
 import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.Widget;
 import org.eclipse.ui.IActionBars;
 import org.eclipse.ui.actions.ActionFactory;
 /**
@@ -44,15 +40,12 @@
 	// servers that are currently publishing and starting
 	protected static List publishing = new ArrayList();
 	protected static List starting = new ArrayList();
-
+	
 	protected ServerTableLabelProvider labelProvider;
 	//protected ISelectionListener dsListener;
 
 	protected ServersView view;
-
-	protected boolean animationActive = false;
-	protected boolean stopAnimation = false;
-
+	
 	public class ServerContentProvider implements IStructuredContentProvider, ITreeContentProvider {
 		public Object[] getElements(Object element) {
 			List list = new ArrayList();
@@ -158,39 +151,40 @@
 		fShell.setVisible(true);
 	}*/
 
+	protected Thread thread = null;
+	protected boolean stopThread = false;
+	
 	protected void startThread() {
-		if (animationActive)
+		stopThread = false;
+		if (thread != null)
 			return;
 		
-		stopAnimation = false;
-		
-		final Display display = getTree().getDisplay();
-		final int SLEEP = 200;
-		final Runnable[] animator = new Runnable[1];
-		animator[0] = new Runnable() {
+		thread = new Thread("Servers View Animator") {
 			public void run() {
-				if (!stopAnimation) {
+				while (!stopThread) {
 					try {
 						labelProvider.animate();
 						final Object[] rootElements = ((ITreeContentProvider)getContentProvider()).getElements(null); 
-						if (getTree() != null && !getTree().isDisposed())
-							update(rootElements, null);
+						Display.getDefault().asyncExec(new Runnable() {
+							public void run() {
+								if (getTree() != null && !getTree().isDisposed())
+									update(rootElements, null);
+							}
+						});
+						Thread.sleep(250);
 					} catch (Exception e) {
-						Trace.trace(Trace.FINEST, "Error in Servers view animation", e);
+						Trace.trace(Trace.FINEST, "Error in animated server view", e);
 					}
-					display.timerExec(SLEEP, animator[0]);
+					thread = null;
 				}
 			}
 		};
-		Display.getDefault().syncExec(new Runnable() {
-			public void run() {
-				display.timerExec(SLEEP, animator[0]);
-			}
-		});
+		thread.setDaemon(true);
+		thread.start();
 	}
 
 	protected void stopThread() {
-		stopAnimation = true;
+		stopThread = true;
 	}
 
 	/**
@@ -202,9 +196,6 @@
 	public ServerTableViewer(final ServersView view, final Tree tree) {
 		super(tree);
 		this.view = view;
-	}
-	
-	protected void initialize() {
 		/*tree.addMouseMoveListener(new MouseMoveListener() {
 			public void mouseMove(MouseEvent e) {
 				if (fShell != null) {
@@ -235,7 +226,6 @@
 				if (obj == null)
 					refresh(true);
 				else {
-					obj = adaptLabelChangeObjects(obj);
 					int size = obj.length;
 					for (int i = 0; i < size; i++)
 						refresh(obj[i], true);
@@ -243,24 +233,14 @@
 			}
 		});
 		setLabelProvider(labelProvider);
-		setComparator(new ViewerComparator() {
-			public int compare(Viewer viewer, Object e1, Object e2) {
-				if (e1 instanceof IServer && e2 instanceof IServer) {
-					IServer s1 = (IServer) e1;
-					IServer s2 = (IServer) e2;
-					return (s1.getName().compareToIgnoreCase(s2.getName()));
-				} else if (e1 instanceof ModuleServer && e2 instanceof ModuleServer) {
-					ModuleServer s1 = (ModuleServer) e1;
-					ModuleServer s2 = (ModuleServer) e2;
-					return (s1.module[s1.module.length - 1].getName().compareToIgnoreCase(s2.module[s2.module.length - 1].getName()));
-				}
-				
-				return super.compare(viewer, e1, e2);
-			}
+		setSorter(new ViewerSorter() {
+			// empty
 		});
 		
 		setInput(ROOT);
+		
 		addListeners();
+		
 		IActionBars actionBars = view.getViewSite().getActionBars();
 		actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), new ServerAction(getControl().getShell(), this, "Delete it!", ServerActionHelper.ACTION_DELETE));
 		
@@ -312,64 +292,6 @@
 			}
 		};
 		view.getViewSite().getPage().addSelectionListener(dsListener);*/
-		
-		//if (getTree().getItemCount() > 0)
-		//	getTree().setSelection(getTree().getItem(0));
-		
-		if (getTree().getItemCount() > 0)
-			this.setSelection(new StructuredSelection(getTree().getItem(0).getData()));
-	}
-
-	protected Object[] adaptLabelChangeObjects(Object[] obj) {
-		if (obj == null)
-			return obj;
-		
-		List list = new ArrayList();
-		int size = obj.length;
-		for (int i = 0; i < size; i++) {
-			if (obj[i] instanceof IModule) {
-				list.add(obj[i]);
-			} else if (obj[i] instanceof IServer) {
-				list.add(obj[i]);
-			} else if (obj[i] instanceof ModuleServer) {
-				list.add(obj[i]);
-			} else if (obj[i] instanceof IProject) {
-				IProject proj = (IProject) obj[i];
-
-				List list2 = new ArrayList();
-				getTreeChildren(list2, view.treeTable);
-				
-				Iterator iterator = list2.iterator();
-				while (iterator.hasNext()) {
-					Object o = iterator.next();
-					if (o instanceof ModuleServer) {
-						ModuleServer ms = (ModuleServer) o;
-						if (proj.equals(ms.module[ms.module.length - 1].getProject()))
-							list.add(ms);
-					}
-				}
-			}
-		}
-		
-		Object[] o = new Object[list.size()];
-		list.toArray(o);
-		return o;
-	}
-
-	private void getTreeChildren(List list, Widget widget) {
-		Item[] items = getChildren(widget);
-		for (int i = 0; i < items.length; i++) {
-			Item item = items[i];
-			Object data = item.getData();
-			if (data != null)
-				list.add(data);
-			
-			if (getExpanded(item)) {
-				// only recurse if it is expanded - if
-				// not then the children aren't visible
-				getTreeChildren(list, item);
-			}
-		}
 	}
 
 	protected void addListeners() {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java
index 3ccc56d..0a62b3d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,17 +12,13 @@
 
 import java.util.Iterator;
 
-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.debug.core.ILaunchManager;
 import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.debug.ui.IDebugView;
 import org.eclipse.jface.action.*;
 import org.eclipse.jface.viewers.*;
 import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.Server;
+import org.eclipse.wst.server.core.internal.Trace;
 import org.eclipse.wst.server.core.model.ServerDelegate;
 import org.eclipse.wst.server.ui.internal.*;
 import org.eclipse.swt.SWT;
@@ -33,7 +29,6 @@
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Tree;
@@ -49,10 +44,6 @@
 public class ServersView extends ViewPart {
 	private static final String TAG_COLUMN_WIDTH = "columnWidth";
 
-	protected Action noneAction = new Action(Messages.dialogMonitorNone) {
-		// dummy action
-	};
-
 	protected int[] cols;
 
 	protected Tree treeTable;
@@ -60,8 +51,6 @@
 
 	// actions on a server
 	protected Action[] actions;
-	protected Action actionModifyModules;
-	protected Action actionProperties;
 	protected MenuManager restartMenu;
 
 	/**
@@ -97,49 +86,9 @@
 		column3.setText(Messages.viewSync);
 		column3.setWidth(cols[2]);
 		
-		deferInitialization();
-	}
-
-	private void deferInitialization() {
-		TreeItem item = new TreeItem(treeTable, SWT.NONE);
-		item.setText(Messages.viewInitializing);
-		
 		tableViewer = new ServerTableViewer(this, treeTable);
 		initializeActions(tableViewer);
 		
-		Job job = new Job(Messages.jobInitializingServersView) {
-			public IStatus run(IProgressMonitor monitor) {
-				IServer[] servers = ServerCore.getServers();
-				int size = servers.length;
-				for (int i = 0; i < size; i++) {
-					((Server)servers[i]).getAllModules().iterator();
-					/*while (iterator.hasNext()) {
-						Module module = (Module) iterator.next();
-						module.g
-					}*/
-				}
-				
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						try {
-							deferredInitialize();
-						} catch (Exception e) {
-							// ignore - view has already been closed
-						}
-					}
-				});
-				return Status.OK_STATUS;
-			}
-		};
-		
-		job.setSystem(true);
-		job.setPriority(Job.SHORT);
-		job.schedule();
-	}
-
-	protected void deferredInitialize() {
-		tableViewer.initialize();
-		
 		treeTable.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent event) {
 				try {
@@ -192,7 +141,7 @@
 				fillContextMenu(shell, mgr);
 			}
 		});
-		Menu menu = menuManager.createContextMenu(treeTable);
+		Menu menu = menuManager.createContextMenu(parent);
 		treeTable.setMenu(menu);
 		getSite().registerContextMenu(menuManager, tableViewer);
 		getSite().setSelectionProvider(tableViewer);
@@ -248,36 +197,112 @@
 	 */
 	public void initializeActions(ISelectionProvider provider) {
 		Shell shell = getSite().getShell();
+
+		// create the debug action
+		Action debugAction = new StartAction(shell, provider, "debug", ILaunchManager.DEBUG_MODE);
+		debugAction.setToolTipText(Messages.actionDebugToolTip);
+		debugAction.setText(Messages.actionDebug);
+		debugAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_DEBUG));
+		debugAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_DEBUG));
+		debugAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_DEBUG));
+	
+		// create the start action
+		Action runAction = new StartAction(shell, provider, "start", ILaunchManager.RUN_MODE);
+		runAction.setToolTipText(Messages.actionStartToolTip);
+		runAction.setText(Messages.actionStart);
+		runAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START));
+		runAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START));
+		runAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START));
 		
+		// create the profile action
+		Action profileAction = new StartAction(shell, provider, "profile", ILaunchManager.PROFILE_MODE);
+		profileAction.setToolTipText(Messages.actionProfileToolTip);
+		profileAction.setText(Messages.actionProfile);
+		profileAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_PROFILE));
+		profileAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_PROFILE));
+		profileAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_PROFILE));
+	
 		// create the restart menu
 		restartMenu = new MenuManager(Messages.actionRestart);
-		restartMenu.add(new RestartAction(shell, provider, ILaunchManager.DEBUG_MODE));
-		restartMenu.add(new RestartAction(shell, provider, ILaunchManager.RUN_MODE));
-		restartMenu.add(new RestartAction(shell, provider, ILaunchManager.PROFILE_MODE));
 		
-		actions = new Action[6];
-		// create the start actions
-		actions[0] = new StartAction(shell, provider, ILaunchManager.DEBUG_MODE);
-		actions[1] = new StartAction(shell, provider, ILaunchManager.RUN_MODE);
-		actions[2] = new StartAction(shell, provider, ILaunchManager.PROFILE_MODE);
+		Action restartAction = new RestartAction(shell, provider, "restartDebug", ILaunchManager.DEBUG_MODE);
+		restartAction.setToolTipText(Messages.actionDebugToolTip);
+		restartAction.setText(Messages.actionDebug);
+		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_DEBUG));
+		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_DEBUG));
+		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_DEBUG));
+		restartMenu.add(restartAction);
 		
+		restartAction = new RestartAction(shell, provider, "restartRun", ILaunchManager.RUN_MODE);
+		restartAction.setToolTipText(Messages.actionRestartToolTip);
+		restartAction.setText(Messages.actionStart);
+		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START));
+		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START));
+		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START));
+		restartMenu.add(restartAction);
+		
+		restartAction = new RestartAction(shell, provider, "restartProfile", ILaunchManager.PROFILE_MODE);
+		restartAction.setToolTipText(Messages.actionRestartToolTip);
+		restartAction.setText(Messages.actionProfile);
+		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_PROFILE));
+		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_PROFILE));
+		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_PROFILE));
+		restartMenu.add(restartAction);
+		
+		// create the restart action
+		restartAction = new RestartAction(shell, provider, "restart");
+		restartAction.setToolTipText(Messages.actionRestartToolTip);
+		restartAction.setText(Messages.actionRestart);
+		restartAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_RESTART));
+		restartAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_RESTART));
+		restartAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_RESTART));
+
 		// create the stop action
-		actions[3] = new StopAction(shell, provider);
-		
-		// create the publish actions
-		actions[4] = new PublishAction(shell, provider);
-		actions[5] = new PublishCleanAction(shell, provider);
+		Action stopAction = new StopAction(shell, provider, "stop");
+		stopAction.setToolTipText(Messages.actionStopToolTip);
+		stopAction.setText(Messages.actionStop);
+		stopAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_STOP));
+		stopAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_STOP));
+		stopAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_STOP));
+
+		// create the disconnect action
+		/*Action disconnectAction = new StopAction(shell, provider, "disconnect", IServerType.SERVER_STATE_SET_ATTACHED);
+		disconnectAction.setToolTipText(Messages.actionStopToolTip2"));
+		disconnectAction.setText(Messages.actionStop2"));
+		disconnectAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_DISCONNECT));
+		disconnectAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_DISCONNECT));
+		disconnectAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_DISCONNECT));*/
+
+		// create the publish action
+		Action publishAction = new PublishAction(shell, provider, "publish");
+		publishAction.setToolTipText(Messages.actionPublishToolTip);
+		publishAction.setText(Messages.actionPublish);
+		publishAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_PUBLISH));
+		publishAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_PUBLISH));
+		publishAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_PUBLISH));
 		
 		// create the module slosh dialog action
-		actionModifyModules = new ModuleSloshAction(shell, provider);
+		Action addModuleAction = new ModuleSloshAction(shell, provider, "modules");
+		addModuleAction.setToolTipText(Messages.actionModifyModulesToolTip);
+		addModuleAction.setText(Messages.actionModifyModules);
+		addModuleAction.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ETOOL_MODIFY_MODULES));
+		addModuleAction.setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CTOOL_MODIFY_MODULES));
+		addModuleAction.setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DTOOL_MODIFY_MODULES));
 		
-		// create the properties action
-		actionProperties = new PropertiesAction(shell, provider);
+		actions = new Action[7];
+		actions[0] = debugAction;
+		actions[1] = runAction;
+		actions[2] = profileAction;
+		actions[3] = restartAction;
+		actions[4] = stopAction;
+		actions[5] = publishAction;
+		actions[6] = addModuleAction;
 		
 		// add toolbar buttons
 		IContributionManager cm = getViewSite().getActionBars().getToolBarManager();
-		for (int i = 0; i < actions.length - 1; i++)
+		for (int i = 0; i < actions.length - 1; i++) {
 			cm.add(actions[i]);
+		}
 	}
 
 	protected void fillContextMenu(Shell shell, IMenuManager menu) {
@@ -307,32 +332,24 @@
 		menu.add(newMenu);
 		
 		// open action
-		if (server != null && module == null) {
+		if (server != null) {
 			menu.add(new OpenAction(server));
 			menu.add(new UpdateStatusAction(server));
 			menu.add(new Separator());
-		} else
-			menu.add(new Separator());
-		
-		if (server != null) {
-			if (module == null) {
+			
+			if (module == null)
 				menu.add(new DeleteAction(shell, server));
-				menu.add(new RenameAction(shell, tableViewer, tableViewer));
-			} else if (module.length == 1)
+			else if (module.length == 1)
 				menu.add(new RemoveModuleAction(shell, server, module[0]));
 			menu.add(new Separator());
-		}
-		
-		if (server != null && module == null) {
-			// server actions
-			for (int i = 0; i < actions.length; i++) {
-				if (i == 3) // insert restart menu
-					menu.add(restartMenu);
-				menu.add(actions[i]);
-			}
 			
-			menu.add(new Separator());
-			menu.add(actionModifyModules);
+			// server actions
+			for (int i = 0; i < actions.length - 1; i++) {
+				if (i == 3)
+					menu.add(restartMenu);
+				else
+					menu.add(actions[i]);
+			}
 			
 			// monitor
 			if (server.getServerType() != null) {
@@ -354,14 +371,15 @@
 							}
 						}
 						
-						if (menuManager.isEmpty())
-							menuManager.add(noneAction);
+						if (!menuManager.isEmpty())
+							menuManager.add(new Separator());
+						
+						menuManager.add(new MonitorServerAction(shell2, server2));
 					}
 				});
 				
 				// add an initial menu item so that the menu appears correctly
-				noneAction.setEnabled(false);
-				menuManager.add(noneAction);
+				menuManager.add(new MonitorServerAction(shell, server));
 				menu.add(menuManager);
 			}
 			menu.add(new SwitchServerLocationAction(server));
@@ -372,13 +390,11 @@
 			menu.add(new RestartModuleAction(server, module));
 		}
 		
+		menu.add(new Separator());
+		menu.add(actions[6]);
+		
 		menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
 		menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end"));
-		
-		if (server != null) {
-			menu.add(new Separator());
-			menu.add(actionProperties);
-		}
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java
index 04fd622..bf170cc 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java
@@ -29,7 +29,6 @@
 import org.eclipse.ui.part.ResourceTransfer;
 import org.eclipse.ui.views.navigator.LocalSelectionTransfer;
 import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IModuleArtifact;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.IServerWorkingCopy;
 import org.eclipse.wst.server.core.ServerUtil;
@@ -104,7 +103,7 @@
 		// otherwise, try Run on Server
 		final IServer finalServer = server;
 		RunOnServerActionDelegate ros = new RunOnServerActionDelegate() {
-			public IServer getServer(IModule module, IModuleArtifact moduleArtifact, IProgressMonitor monitor) throws CoreException {
+			public IServer getServer(IModule module, String launchMode, IProgressMonitor monitor) throws CoreException {
 				if (!ServerUIPlugin.isCompatibleWithLaunchMode(finalServer, launchMode))
 					return null;
 				
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java
index dfcf7cd..a3a021a 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,8 +18,6 @@
 import org.eclipse.wst.server.core.internal.ServerPreferences;
 import org.eclipse.wst.server.core.internal.ServerType;
 import org.eclipse.wst.server.core.internal.StartServerJob;
-import org.eclipse.wst.server.ui.internal.ImageResource;
-import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 import org.eclipse.wst.server.ui.internal.Trace;
 import org.eclipse.swt.widgets.Shell;
@@ -29,28 +27,9 @@
 public class StartAction extends AbstractServerAction {
 	protected String launchMode = ILaunchManager.RUN_MODE;
 	
-	public StartAction(Shell shell, ISelectionProvider selectionProvider, String launchMode) {
-		super(shell, selectionProvider, "start");
+	public StartAction(Shell shell, ISelectionProvider selectionProvider, String name, String launchMode) {
+		super(shell, selectionProvider, name);
 		this.launchMode = launchMode;
-		if (launchMode == ILaunchManager.RUN_MODE) {
-			setToolTipText(Messages.actionStartToolTip);
-			setText(Messages.actionStart);
-			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START));
-			setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START));
-			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START));
-		} else if (launchMode == ILaunchManager.DEBUG_MODE) {
-			setToolTipText(Messages.actionDebugToolTip);
-			setText(Messages.actionDebug);
-			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_DEBUG));
-			setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_DEBUG));
-			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_DEBUG));
-		} else if (launchMode == ILaunchManager.PROFILE_MODE) {
-			setToolTipText(Messages.actionProfileToolTip);
-			setText(Messages.actionProfile);
-			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_START_PROFILE));
-			setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_START_PROFILE));
-			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_START_PROFILE));
-		}
 		try {
 			selectionChanged((IStructuredSelection) selectionProvider.getSelection());
 		} catch (Exception e) {
@@ -61,7 +40,7 @@
 	/**
 	 * Return true if this server can currently be acted on.
 	 * @return boolean
-	 * @param server a server
+	 * @param server org.eclipse.wst.server.core.IServer
 	 */
 	public boolean accept(IServer server) {
 		return server.canStart(launchMode).isOK();
@@ -69,9 +48,12 @@
 
 	/**
 	 * Perform action on this server.
-	 * @param server a server
+	 * @param server org.eclipse.wst.server.core.IServer
 	 */
-	public void perform(IServer server) {
+	public void perform(final IServer server) {
+		//if (!ServerUIUtil.promptIfDirty(shell, server))
+		//	return;				
+		
 		if (!ServerUIPlugin.saveEditors())
 			return;
 		
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StopAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StopAction.java
index ce90705..5abab0e 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StopAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StopAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,6 @@
 import org.eclipse.jface.viewers.ISelectionProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.ui.internal.ImageResource;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 import org.eclipse.osgi.util.NLS;
@@ -24,12 +23,8 @@
  * Stop (terminate) a server.
  */
 public class StopAction extends AbstractServerAction {
-	public StopAction(Shell shell, ISelectionProvider selectionProvider) {
-		super(shell, selectionProvider, Messages.actionStop);
-		setToolTipText(Messages.actionStopToolTip);
-		setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_STOP));
-		setHoverImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_CLCL_STOP));
-		setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DLCL_STOP));
+	public StopAction(Shell shell, ISelectionProvider selectionProvider, String name) {
+		super(shell, selectionProvider, name);
 		try {
 			selectionChanged((IStructuredSelection) selectionProvider.getSelection());
 		} catch (Exception e) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/UpdateStatusAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/UpdateStatusAction.java
index 8099954..5d0f546 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/UpdateStatusAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/UpdateStatusAction.java
@@ -28,7 +28,7 @@
 	public UpdateStatusAction(IServer server) {
 		super(Messages.actionUpdateStatus);
 		this.server = server;
-		if (server.getServerType() == null || server.getServerState() != IServer.STATE_UNKNOWN)
+		if (server.getServerState() != IServer.STATE_UNKNOWN)
 			setEnabled(false);
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTableComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTableComposite.java
index 1921394..6aea532 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTableComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTableComposite.java
@@ -37,7 +37,7 @@
 		layout.marginHeight = 0;
 		layout.numColumns = 1;
 		setLayout(layout);
-		
+
 		GridData data = new GridData(GridData.FILL_BOTH);
 		setLayoutData(data);
 		
@@ -47,11 +47,11 @@
 		table.setLinesVisible(true);
 		createTableViewer();
 	}
-
+	
 	protected void createTable() {
 		table = new Table(this, SWT.BORDER | SWT.FULL_SELECTION | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE);
 	}
-
+	
 	protected void createTableViewer() {
 		tableViewer = new LockedTableViewer(table);
 	}
@@ -64,11 +64,11 @@
 		IStructuredSelection sel = (IStructuredSelection) sel2;
 		return sel.getFirstElement();
 	}
-
+	
 	public void refresh() {
 		tableViewer.refresh();
 	}
-
+	
 	public void refresh(Object obj) {
 		tableViewer.refresh(obj);
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java
index 6bb91bd..56e8572 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java
@@ -37,13 +37,13 @@
 	protected Tree tree;
 	protected TreeViewer treeViewer;
 	protected Label description;
-
+	
 	public AbstractTreeComposite(Composite parent, int style) {
 		super(parent, style);
 		
 		createWidgets();
 	}
-
+	
 	protected void createWidgets() {
 		GridLayout layout = new GridLayout();
 		layout.horizontalSpacing = 3;
@@ -62,10 +62,18 @@
 			label.setLayoutData(data);
 		}
 		
+		Label label = new Label(this, SWT.WRAP);
+		label.setText(getTitleLabel());
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
+		if (descriptionText != null)
+			data.verticalIndent = 7;
+		data.horizontalSpan = 2;
+		label.setLayoutData(data);
+		
 		String details = getDetailsLabel();
 		if (details != null) {
 			Link prefLink = new Link(this, SWT.NONE);
-			GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END);
+			data = new GridData(GridData.HORIZONTAL_ALIGN_END);
 			data.horizontalSpan = 2;
 			prefLink.setLayoutData(data);
 			prefLink.setText("<a>" + details + "</a>");
@@ -76,15 +84,6 @@
 			});
 		}
 		
-		Label label = new Label(this, SWT.WRAP);
-		label.setText(getTitleLabel());
-		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
-		if (descriptionText != null && details == null)
-			data.verticalIndent = 7;
-		label.setLayoutData(data);
-		
-		createViewComposite();
-		
 		tree = new Tree(this, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE);
 		data = new GridData(GridData.FILL_BOTH);
 		data.horizontalSpan = 2;
@@ -101,12 +100,46 @@
 		    }
 		});
 		
+		label = new Label(this, SWT.NONE);
+		label.setText("");
+		data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
+		label.setLayoutData(data);
+		
+		// view composite
+		Composite comp = new Composite(this, SWT.NONE);
+		layout = new GridLayout();
+		layout.horizontalSpacing = 3;
+		layout.verticalSpacing = 0;
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		layout.numColumns = 2;
+		comp.setLayout(layout);
+
+		data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_CENTER);
+		comp.setLayoutData(data);
+		
+		label = new Label(comp, SWT.NONE);
+		label.setText(Messages.viewBy);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_CENTER);
+		label.setLayoutData(data);
+	
+		final Combo combo = new Combo(comp, SWT.DROP_DOWN | SWT.READ_ONLY);
+		combo.setItems(getComboOptions());
+		combo.select(1);
+		combo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER));
+		combo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				int sel = combo.getSelectionIndex();
+				viewOptionSelected((byte) sel);
+			}
+		});
+		
 		if (hasDescription()) {
 			description = new Label(this, SWT.WRAP);
 			description.setText("Multi\nLine\nMessage");
 			Dialog.applyDialogFont(this);
 			Point p = description.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-			description.setText("");
+			description.setText(Messages.wizDescription);
 			data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
 			data.horizontalSpan = 2;
 			if (p.y > 10)
@@ -118,53 +151,24 @@
 		
 		tree.forceFocus();
 	}
-
-	protected void createViewComposite() {
-		Composite comp = new Composite(this, SWT.NONE);
-		GridLayout layout = new GridLayout();
-		layout.horizontalSpacing = 3;
-		layout.verticalSpacing = 0;
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		layout.numColumns = 2;
-		comp.setLayout(layout);
-		
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_END);
-		comp.setLayoutData(data);
-		
-		Label label = new Label(comp, SWT.NONE);
-		label.setText(Messages.viewBy);
-		data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_CENTER);
-		label.setLayoutData(data);
-		
-		final Combo combo = new Combo(comp, SWT.DROP_DOWN | SWT.READ_ONLY);
-		combo.setItems(getComboOptions());
-		combo.select(1);
-		combo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER));
-		combo.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				int sel = combo.getSelectionIndex();
-				viewOptionSelected((byte) sel);
-			}
-		});
-	}
+	
 	protected abstract String getDescriptionLabel();
-
+	
 	protected abstract String getTitleLabel();
-
+	
 	protected abstract String[] getComboOptions();
-
+	
 	protected boolean hasDescription() {
 		return true;
 	}
-
+	
 	protected void setDescription(String text) {
 		if (description != null && text != null)
-			description.setText(text);
+			description.setText(Messages.wizDescription + " " + text);
 	}
-
+	
 	protected abstract void viewOptionSelected(byte option);
-
+	
 	protected TreeViewer getTreeViewer() {
 		return treeViewer;
 	}
@@ -173,11 +177,11 @@
 		IStructuredSelection sel = (IStructuredSelection) sel2;
 		return sel.getFirstElement();
 	}
-
+	
 	public void refresh() {
 		treeViewer.refresh();
 	}
-
+	
 	public void refresh(Object obj) {
 		treeViewer.refresh(obj);
 	}
@@ -189,7 +193,7 @@
 	protected String getDetailsLabel() {
 		return null;
 	}
-
+	
 	protected void detailsSelected() {
 		// do nothing
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.java
index ab0ed34..a4b9587 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/DefaultViewerSorter.java
@@ -57,15 +57,6 @@
 	 *    element is greater than the second element
 	 */
 	protected int compareCategories(String s1, String s2) {
-		try {
-			Version v1 = Version.parseVersion(s1);
-			Version v2 = Version.parseVersion(s2);
-			
-			return Version.compare(v1, v2);
-		} catch (NumberFormatException nfe) {
-			// ignore
-		}
-		
 		return s1.compareTo(s2);
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ExtensionComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ExtensionComposite.java
deleted file mode 100644
index 23c5bca..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ExtensionComposite.java
+++ /dev/null
@@ -1,464 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.server.ui.internal.viewers;
-
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.update.core.IFeature;
-import org.eclipse.update.core.ISite;
-import org.eclipse.wst.server.ui.internal.ImageResource;
-import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.Trace;
-import org.eclipse.wst.server.ui.internal.extension.ExtensionUtility;
-/**
- * 
- */
-public class ExtensionComposite extends Composite {
-	public interface FeatureSelectionListener {
-		public void featureSelected(IFeature feature);
-	}
-
-	protected Table table;
-	protected TableViewer tableViewer;
-
-	protected Font font;
-
-	protected HashMap images;
-
-	protected String progress;
-	protected int totalWork;
-	protected double currentWork;
-	protected int count;
-
-	public FeatureSelectionListener listener;
-
-	public ExtensionComposite(Composite parent, int style, FeatureSelectionListener listener) {
-		super(parent, style);
-		this.listener = listener;
-		
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		layout.verticalSpacing = 5;
-		layout.horizontalSpacing = 5;
-		//layout.numColumns = 2;
-		setLayout(layout);
-		
-		Font currentFont = getFont();
-		FontData[] fd = currentFont.getFontData();
-		int size2 = fd.length;
-		for (int i = 0; i < size2; i++) {
-			fd[i].setHeight(fd[i].getHeight() + 2);
-			fd[i].setStyle(SWT.BOLD);
-		}
-		
-		font = new Font(getDisplay(), fd);
-		
-		GridData data = new GridData(GridData.FILL_BOTH);
-		data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
-		data.heightHint = 350;
-		setLayoutData(data);
-		
-		table = new Table(this, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.FULL_SELECTION);
-		data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
-		//data.horizontalSpan = 2;
-		//data.heightHint = 250;
-		data.widthHint = 350;
-		table.setLayoutData(data);
-		table.setLinesVisible(true);
-		tableViewer = new TableViewer(table);
-		table.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				disposeResources();
-			}
-		});
-		
-		TableLayout tableLayout = new TableLayout();
-		table.setLayout(tableLayout);
-		
-		/*tableLayout.addColumnData(new ColumnPixelData(90, false));
-		//tableLayout.addColumnData(new ColumnWeightData(8, 80, true));
-		TableColumn col2 = new TableColumn(table, SWT.NONE);
-		col2.setText("null");
-		*/
-		tableLayout.addColumnData(new ColumnWeightData(30, 250, false));
-		final TableColumn col = new TableColumn(table, SWT.NONE);
-		col.setText("null");
-		/*col.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event event) {
-				col.pack();
-			}
-		});*/
-		
-		//tableLayout.addColumnData(new ColumnWeightData(30, 250, false));
-		//TableColumn col2 = new TableColumn(table, SWT.NONE);
-		//col2.setText("null2");
-		
-		table.setHeaderVisible(false);
-		//table.setLinesVisible(false);
-		
-		final int TEXT_MARGIN = 3;
-		table.addListener(SWT.MeasureItem, new Listener() {
-			public void handleEvent(Event event) {
-				event.gc.setFont(font);
-				Point size = event.gc.textExtent("A");
-				int h = TEXT_MARGIN * 3 + size.y;
-				event.gc.setFont(null);
-				size = event.gc.textExtent("A");
-				h += size.y;
-				h = Math.max(h, 40 + TEXT_MARGIN * 2);
-				event.width = 400;
-				event.height = Math.max(event.height, h);
-			}
-		});
-		table.addListener(SWT.EraseItem, new Listener() {
-			public void handleEvent(Event event) {
-				//if (event.index == 0)
-				//	return;
-				event.detail &= ~SWT.FOREGROUND;
-				//event.detail &= ~SWT.BACKGROUND;
-			}
-		});
-		table.addListener(SWT.PaintItem, new Listener() {
-			public void handleEvent(Event event) {
-				//if (event.index == 0)
-				//	return;
-				TableItem item = (TableItem) event.item;
-				Object obj = item.getData();
-				
-				int width = table.getColumn(0).getWidth();
-				GC gc = event.gc;
-				
-				if (obj instanceof String) {
-					String s = (String) obj;
-					if (progress != null)
-						s = progress;
-					int h = event.y + event.height / 2;
-					Point size = event.gc.textExtent(s);
-					gc.drawText(s, event.x + TEXT_MARGIN, h - size.y/2, true);
-					
-					int hh = event.y + event.height - 5 - TEXT_MARGIN - 1;
-					
-					gc.setLineWidth(2);
-					Color color = getDisplay().getSystemColor(SWT.COLOR_LIST_SELECTION);
-					gc.setBackground(color);
-					
-					int width2 = 0;
-					int step = 9;
-					if (totalWork > 0)
-						width2 = (int) ((width - step * 2 - 15 - TEXT_MARGIN * 2) * currentWork / totalWork);
-					
-					for (int i = 0; i < width2; i+= step) {
-						gc.fillRectangle(event.x + TEXT_MARGIN + i, hh, step - 2, 5);
-					}
-					
-					return;
-				}
-				IFeature ei = (IFeature) obj;
-				if (ei == null)
-					return;
-				
-				
-				//if ((event.detail & SWT.SELECTED) == 0) {
-				//	//event.gc.setForeground();
-				//	//event.gc.fillRectangle(0, 0, width, 5);
-				//	event.gc.setBackground(getBackground());
-				//	event.gc.setForeground(getForeground());
-				//	event.gc.fillRectangle(event.x, event.y, width, event.height);
-				//}
-				//System.out.println(width + " " + event.width + " " + event.x);
-				
-				String name = ei.getLabel();
-				String provider = "" + ei.getProvider();
-				//String provider = "" + ei.getImage();
-				//String provider = "" + ExtensionUtility.getDescription(ei);
-				String version = "v" + ei.getVersionedIdentifier().getVersion().toString();
-				
-				Image image = getImage(ei.getImage());
-				if (image == null)
-					image = ImageResource.getImage(ImageResource.IMG_WIZBAN_NEW_SERVER);
-				int iw = image.getBounds().width;
-				int ih = image.getBounds().height;
-				gc.drawImage(image, 0, 0, iw, ih, event.x + TEXT_MARGIN, event.y + TEXT_MARGIN, 40, 40);
-				iw = 40 + TEXT_MARGIN * 2;
-				
-				int yOffset = TEXT_MARGIN;
-				gc.setFont(font);
-				gc.drawText(name, event.x + iw, event.y + yOffset, true);
-				Point size = event.gc.textExtent(name);
-				gc.setFont(null);
-				
-				yOffset += size.y + TEXT_MARGIN;
-				gc.drawText(provider, event.x + iw, event.y + yOffset, true);
-				
-				size = event.gc.textExtent(version);
-				gc.drawText(version, event.x + width - TEXT_MARGIN * 2 - size.x, event.y + yOffset, true);
-			}
-		});
-		
-		tableViewer.setSorter(new ViewerSorter() {
-			public int compare(Viewer viewer, Object e1, Object e2) {
-				try {
-					IFeature f1 = (IFeature) e1;
-					IFeature f2 = (IFeature) e2;
-					return (f1.getLabel().compareToIgnoreCase(f2.getLabel()));
-				} catch (Exception e) {
-					return 0;
-				}
-			}
-		});
-		
-		/*Composite buttonComp = new Composite(this, SWT.NONE);
-		buttonComp.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING));
-		layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		buttonComp.setLayout(layout);
-		
-		Button install = SWTUtil.createButton(buttonComp, "Find Updates");
-		install.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				//
-			}
-		});*/
-		
-		final Label description = new Label(this, SWT.WRAP);
-		description.setText("Multi\nLine\nMessage");
-		Dialog.applyDialogFont(this);
-		Point p = description.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		description.setText("");
-		data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
-		data.horizontalSpan = 2;
-		if (p.y > 10)
-			data.heightHint = p.y;
-		else
-			data.heightHint = 42;
-		description.setLayoutData(data);
-		
-		/*final Label download = new Label(this, SWT.NONE);
-		data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
-		data.horizontalSpan = 2;
-		download.setLayoutData(data);
-		download.setText("Download size: ");*/
-		
-		tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			public void selectionChanged(SelectionChangedEvent event) {
-				StructuredSelection sel = (StructuredSelection) tableViewer.getSelection();
-				Object obj = sel.getFirstElement();
-				IFeature feature = null;
-				if (obj instanceof IFeature)
-					feature = (IFeature) obj;
-				
-				handleSelection(feature);
-				if (feature != null)
-					description.setText(ExtensionUtility.getDescription(feature));
-				else
-					description.setText("");
-				/*long size = feature.getDownloadSize();
-				String s = "<unknown>";
-				if (size > 0)
-					s = size + " Kb";
-				download.setText("Download size: " + s);*/
-			}
-		});
-		
-		deferInitialization();
-	}
-
-	protected Image getImage(URL url) {
-		if (url == null)
-			return null;
-		
-		try {
-			Image image = (Image) images.get(url.toString());
-			if (image != null)
-				return image;
-		} catch (Exception e) {
-			// ignore
-		}
-		try {
-			ImageDescriptor id = ImageDescriptor.createFromURL(url);
-			Image image = id.createImage();
-			if (images == null)
-				images = new HashMap();
-			images.put(url.toString(), image);
-			return image;
-		} catch (Exception e) {
-			Trace.trace(Trace.INFO, "Could not create image", e);
-		}
-		return null;
-	}
-
-	protected void disposeResources() {
-		try {
-			font.dispose();
-			
-			if (images != null) {
-				Iterator iterator = images.values().iterator();
-				while (iterator.hasNext()) {
-					Image image = (Image) iterator.next();
-					image.dispose();
-				}
-			}
-		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not dispose - possible resource leak", e);
-		}
-	}
-
-	protected void handleSelection(IFeature feature) {
-		listener.featureSelected(feature);
-	}
-
-	protected void deferInitialization() {
-		Object[] obj = new Object[] { Messages.viewInitializing };
-		tableViewer.setContentProvider(new ExtensionContentProvider(obj));
-		tableViewer.setLabelProvider(new ExtensionTableLabelProvider());
-		tableViewer.setInput(AbstractTreeContentProvider.ROOT);
-		
-		final Thread t = new Thread() {
-			public void run() {
-				deferredInitialize(new IProgressMonitor() {
-					public void beginTask(String name, int totalWork2) {
-						totalWork = totalWork2;
-						progress = name;
-					}
-
-					public void setTaskName(String name) {
-						progress = name;
-					}
-
-					public void subTask(String name) {
-						progress = name;
-					}
-
-					public void done() {
-						// 
-					}
-
-					public void internalWorked(double work) {
-						currentWork += work;
-					}
-
-					public boolean isCanceled() {
-						return false;
-					}
-
-					public void setCanceled(boolean value) {
-						// 
-					}
-
-					public void worked(int work) {
-						currentWork += work;
-					}
-				});
-			}
-		};
-		t.setDaemon(true);
-		t.start();
-		
-		final Display display = getDisplay();
-		final int SLEEP = 200;
-		final Runnable[] animator = new Runnable[1];
-		animator[0] = new Runnable() {
-			public void run() {
-				if (t.isAlive()) {
-					count++;
-					try {
-						Object[] rootElements = ((IStructuredContentProvider)tableViewer.getContentProvider()).getElements(null);
-						//tableViewer.update(Messages.viewInitializing, null);
-						tableViewer.update(rootElements, null);
-					} catch (Exception e) {
-						// ignore
-					}
-					display.timerExec(SLEEP, animator[0]);
-				}
-			}
-		};
-		display.timerExec(SLEEP, animator[0]);
-	}
-
-	public void deferredInitialize(IProgressMonitor monitor) {
-		final List list = new ArrayList();
-		ExtensionUtility.FeatureListener listener2 = new ExtensionUtility.FeatureListener() {
-			public void featureFound(IFeature feature) {
-				list.add(feature);
-				int size = list.size();
-				final Object[] obj = new Object[size+1];
-				list.toArray(obj);
-				if (progress != null)
-					obj[size] = progress;
-				else
-					obj[size] = Messages.viewInitializing;
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						if (!table.isDisposed())
-							tableViewer.setContentProvider(new ExtensionContentProvider(obj));
-					}
-				});
-			}
-
-			public void featureRemoved(IFeature feature) {
-				list.remove(feature);
-			}
-
-			public void siteFailure(ISite site, CoreException ce) {
-				// 
-			}
-		};
-		
-		String id = "org.eclipse.wst.server.core.serverAdapter";
-		try {
-			final IFeature[] ef = ExtensionUtility.getAllFeatures(id, listener2, monitor);
-			
-			Display.getDefault().asyncExec(new Runnable() {
-				public void run() {
-					if (!table.isDisposed())
-						tableViewer.setContentProvider(new ExtensionContentProvider(ef));
-				}
-			});
-		} catch (CoreException ce) {
-			ce.printStackTrace();
-		}
-	}
-
-	protected Object getSelection(ISelection sel2) {
-		IStructuredSelection sel = (IStructuredSelection) sel2;
-		return sel.getFirstElement();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ExtensionContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ExtensionContentProvider.java
deleted file mode 100644
index ad8161c..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ExtensionContentProvider.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.server.ui.internal.viewers;
-
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-/**
- * Extension content provider.
- */
-public class ExtensionContentProvider implements IStructuredContentProvider {
-	protected Object[] items;
-
-	public ExtensionContentProvider(Object[] items) {
-		super();
-		this.items = items;
-	}
-
-	public void dispose() {
-		// do nothing
-	}
-
-	public Object[] getElements(Object inputElement) {
-		return items;
-	}
-
-	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		// do nothing
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ExtensionTableLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ExtensionTableLabelProvider.java
deleted file mode 100644
index 068db46..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ExtensionTableLabelProvider.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.server.ui.internal.viewers;
-
-import org.eclipse.jface.viewers.ILabelDecorator;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.update.core.IFeature;
-import org.eclipse.swt.graphics.Image;
-/**
- * Extension item table label provider.
- */
-public class ExtensionTableLabelProvider extends BaseLabelProvider implements ITableLabelProvider {
-	/**
-	 * ExtensionTableLabelProvider constructor comment.
-	 */
-	public ExtensionTableLabelProvider() {
-		super();
-	}
-
-	/**
-	 * ExtensionTableLabelProvider constructor comment.
-	 * 
-	 * @param decorator a label decorator, or null if no decorator is required
-	 */
-	public ExtensionTableLabelProvider(ILabelDecorator decorator) {
-		super(decorator);
-	}
-
-	/**
-	 * @see ITableLabelProvider#getColumnImage(Object, int)
-	 */
-	public Image getColumnImage(Object element, int columnIndex) {
-		//if (columnIndex == 0)
-		//	return ImageResource.getImage(ImageResource.IMG_WIZBAN_NEW_SERVER);
-		
-		return null;
-	}
-
-	/**
-	 * @see ITableLabelProvider#getColumnText(Object, int)
-	 */
-	public String getColumnText(Object element, int columnIndex) {
-		if (element instanceof String) {
-			return ((String) element) + Math.random();
-		}
-		IFeature item = (IFeature) element;
-		if (columnIndex == 0) {
-		//	return "";
-		//} else if (columnIndex == 1) {
-			return item.getLabel() + "\n" + item.getProvider();
-		}
-		return "";
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerComposite.java
new file mode 100644
index 0000000..f9b5f5a
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerComposite.java
@@ -0,0 +1,116 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.viewers;
+
+import org.eclipse.jface.viewers.*;
+import org.eclipse.swt.widgets.Composite;
+
+import org.eclipse.wst.server.core.internal.IInstallableServer;
+import org.eclipse.wst.server.ui.internal.Messages;
+/**
+ * 
+ */
+public class InstallableServerComposite extends AbstractTreeComposite {
+	protected IInstallableServer selection;
+	protected InstallableServerSelectionListener listener;
+	
+	protected InstallableServerContentProvider contentProvider;
+	protected boolean initialSelection = true;
+	
+	public interface InstallableServerSelectionListener {
+		public void installableServerSelected(IInstallableServer server);
+	}
+
+	public InstallableServerComposite(Composite parent, int style, InstallableServerSelectionListener listener2) {
+		super(parent, style);
+		this.listener = listener2;
+	
+		contentProvider = new InstallableServerContentProvider(InstallableServerContentProvider.STYLE_VENDOR);
+		treeViewer.setContentProvider(contentProvider);
+		
+		ILabelProvider labelProvider = new InstallableServerLabelProvider();
+		labelProvider.addListener(new ILabelProviderListener() {
+			public void labelProviderChanged(LabelProviderChangedEvent event) {
+				Object[] obj = event.getElements();
+				if (obj == null)
+					treeViewer.refresh(true);
+				else {
+					int size = obj.length;
+					for (int i = 0; i < size; i++)
+						treeViewer.refresh(obj[i], true);
+				}
+			}
+		});
+		treeViewer.setLabelProvider(labelProvider);
+		treeViewer.setInput(AbstractTreeContentProvider.ROOT);
+
+		treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				Object obj = getSelection(event.getSelection());
+				if (obj instanceof IInstallableServer) {
+					selection = (IInstallableServer) obj;
+					setDescription(selection.getDescription());
+				} else {
+					selection = null;
+					setDescription("");
+				}
+				listener.installableServerSelected(selection);
+			}
+		});
+		
+		treeViewer.setSorter(new ViewerSorter() {
+			public int compare(Viewer viewer, Object e1, Object e2) {
+				if (e1 instanceof IInstallableServer && !(e2 instanceof IInstallableServer))
+					return 1;
+				if (!(e1 instanceof IInstallableServer) && e2 instanceof IInstallableServer)
+					return -1;
+				if (!(e1 instanceof IInstallableServer && e2 instanceof IInstallableServer))
+					return super.compare(viewer, e1, e2);
+				IInstallableServer r1 = (IInstallableServer) e1;
+				IInstallableServer r2 = (IInstallableServer) e2;
+				return r1.getName().compareToIgnoreCase(r2.getName());
+			}
+		});
+		treeViewer.expandToLevel(2);
+	}
+
+	public void setVisible(boolean visible) {
+		super.setVisible(visible);
+		if (visible && initialSelection) {
+			initialSelection = false;
+			if (contentProvider.getInitialSelection() != null)
+				treeViewer.setSelection(new StructuredSelection(contentProvider.getInitialSelection()), true);
+		}
+	}
+
+	protected String getTitleLabel() {
+		return Messages.installableServerCompTree;
+	}
+
+	protected String getDescriptionLabel() {
+		return null;
+	}
+
+	protected String[] getComboOptions() {
+		return new String[] { Messages.name,
+			Messages.vendor, Messages.version };
+	}
+
+	protected void viewOptionSelected(byte option) {
+		ISelection sel = treeViewer.getSelection();
+		treeViewer.setContentProvider(new InstallableServerContentProvider(option));
+		treeViewer.setSelection(sel);
+	}
+
+	public IInstallableServer getSelectedInstallableServer() {
+		return selection;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerContentProvider.java
new file mode 100644
index 0000000..add684f
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerContentProvider.java
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.viewers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.wst.server.core.internal.IInstallableServer;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
+/**
+ * Installable server content provider.
+ */
+public class InstallableServerContentProvider extends AbstractTreeContentProvider {
+	public static final byte STYLE_VENDOR = 1;
+	public static final byte STYLE_VERSION = 2;
+
+	public InstallableServerContentProvider(byte style) {
+		super(style, false);
+		
+		fillTree();
+	}
+
+	public void fillTree() {
+		clean();
+		List list = new ArrayList();
+		if (style != STYLE_FLAT) {
+			IInstallableServer[] iis = ServerPlugin.getInstallableServers();
+			if (iis != null) {
+				int size = iis.length;
+				for (int i = 0; i < size; i++) {
+					IInstallableServer is = iis[i];
+					TreeElement ele = null;
+					if (style == STYLE_VENDOR) {
+						ele = getOrCreate(list, is.getVendor());
+						ele.contents.add(is);
+						elementToParentMap.put(is, ele);
+					} else if (style == STYLE_VERSION) {
+						ele = getOrCreate(list, is.getVersion());
+						ele.contents.add(is);
+						elementToParentMap.put(is, ele);
+					}
+				}
+			}
+		} else {
+			IInstallableServer[] iis = ServerPlugin.getInstallableServers();
+			if (iis != null) {
+				int size = iis.length;
+				for (int i = 0; i < size; i++)
+					list.add(iis[i]);
+			}
+		}
+		elements = list.toArray();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerLabelProvider.java
new file mode 100644
index 0000000..0bc9b2a
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InstallableServerLabelProvider.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.viewers;
+
+import org.eclipse.wst.server.core.internal.IInstallableServer;
+import org.eclipse.wst.server.ui.internal.ImageResource;
+import org.eclipse.jface.viewers.ILabelDecorator;
+import org.eclipse.swt.graphics.Image;
+/**
+ * Installable server label provider.
+ */
+public class InstallableServerLabelProvider extends AbstractTreeLabelProvider {
+	/**
+	 * InstallableServerLabelProvider constructor comment.
+	 */
+	public InstallableServerLabelProvider() {
+		super();
+	}
+
+	/**
+	 * InstallableServerLabelProvider constructor comment.
+	 * 
+	 * @param decorator a label decorator, or null if no decorator is required
+	 */
+	public InstallableServerLabelProvider(ILabelDecorator decorator) {
+		super(decorator);
+	}
+
+	/**
+	 * 
+	 */
+	protected Image getImageImpl(Object element) {
+		return ImageResource.getImage(ImageResource.IMG_SERVER);
+	}
+
+	/**
+	 * 
+	 */
+	protected String getTextImpl(Object element) {
+		IInstallableServer is = (IInstallableServer) element;
+		return notNull(is.getName());
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorComposite.java
index 849b112..c797690 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorComposite.java
@@ -57,8 +57,6 @@
 		GridLayout layout = new GridLayout();
 		layout.marginWidth = 0;
 		layout.marginHeight = 0;
-		layout.verticalSpacing = 5;
-		layout.horizontalSpacing = 5;
 		layout.numColumns = 2;
 		setLayout(layout);
 
@@ -140,8 +138,6 @@
 				}
 			}
 		});
-		if (server.getServerType() == null)
-			add.setEnabled(false);
 		
 		final Button edit = SWTUtil.createButton(buttonComp, Messages.edit);
 		edit.addSelectionListener(new SelectionAdapter() {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorDialog.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorDialog.java
index cfb11b0..8f564b5 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorDialog.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/MonitorDialog.java
@@ -52,7 +52,7 @@
 
 		this.server = server;
 	}
-
+	
 	public MonitorDialog(Shell parentShell, IServer server, ServerPort port, int monitorPort, String[] contentTypes) {
 		this(parentShell, server);
 		this.monitorPort = monitorPort;
@@ -68,7 +68,7 @@
 		super.configureShell(newShell);
 		newShell.setText(Messages.dialogMonitorTitle);
 	}
-
+	
 	protected void createButtonsForButtonBar(Composite parent) {
 		ok = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
 		createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
index b4e0a18..30a0a63 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
@@ -22,7 +22,6 @@
 import org.eclipse.wst.server.core.IRuntime;
 import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
 import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 /**
  * 
  */
@@ -45,13 +44,13 @@
 			IRuntime r1 = (IRuntime) e1;
 			IRuntime r2 = (IRuntime) e2;
 			if (sortByName)
-				return getComparator().compare(notNull(r1.getName()), notNull(r2.getName()));
+				return collator.compare(notNull(r1.getName()), notNull(r2.getName()));
 			
 			if (r1.getRuntimeType() == null)
 				return -1;
 			if (r2.getRuntimeType() == null)
 				return 1;
-			return getComparator().compare(notNull(r1.getRuntimeType().getName()), notNull(r2.getRuntimeType().getName()));
+			return collator.compare(notNull(r1.getRuntimeType().getName()), notNull(r2.getRuntimeType().getName()));
 		}
 		
 		protected String notNull(String s) {
@@ -104,7 +103,6 @@
 				if (obj == null)
 					tableViewer.refresh(true);
 				else {
-					obj = ServerUIPlugin.adaptLabelChangeObjects(obj);
 					int size = obj.length;
 					for (int i = 0; i < size; i++)
 						tableViewer.refresh(obj[i], true);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java
index e193c07..f61edaf 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java
@@ -11,13 +11,14 @@
 package org.eclipse.wst.server.ui.internal.viewers;
 
 import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Composite;
 
 import org.eclipse.wst.server.core.IRuntimeType;
 import org.eclipse.wst.server.core.internal.ServerPlugin;
 import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.extension.ExtensionUtility;
+import org.eclipse.wst.server.ui.internal.wizard.NewInstallableServerWizard;
 /**
  * 
  */
@@ -54,7 +55,6 @@
 				if (obj == null)
 					treeViewer.refresh(true);
 				else {
-					obj = ServerUIPlugin.adaptLabelChangeObjects(obj);
 					int size = obj.length;
 					for (int i = 0; i < size; i++)
 						treeViewer.refresh(obj[i], true);
@@ -128,8 +128,9 @@
 	}
 
 	protected void detailsSelected() {
-		if (ExtensionUtility.launchExtensionWizard(getShell(), Messages.wizNewInstallableServerTitle,
-				Messages.wizNewInstallableServerDescription))
+		NewInstallableServerWizard wizard2 = new NewInstallableServerWizard();
+		WizardDialog dialog = new WizardDialog(getShell(), wizard2);
+		if (dialog.open() != Window.CANCEL)
 			refresh();
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeTreeContentProvider.java
index 25d93be..88f77ce 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeTreeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeTreeContentProvider.java
@@ -21,7 +21,7 @@
 	public static final byte STYLE_VENDOR = 1;
 	public static final byte STYLE_VERSION = 2;
 	public static final byte STYLE_MODULE_TYPE = 3;
-
+	
 	protected boolean creation;
 	protected String type;
 	protected String version;
@@ -37,7 +37,7 @@
 		super(style);
 		this.creation = creation;
 	}
-
+	
 	public RuntimeTypeTreeContentProvider(byte style, boolean creation, String type, String version, String runtimeTypeId) {
 		super(style, false);
 		this.type = type;
@@ -47,7 +47,7 @@
 		
 		fillTree();
 	}
-
+	
 	public void fillTree() {
 		clean();
 		List list = new ArrayList();
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java
index 3a6b0fd..a660be7 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java
@@ -22,7 +22,6 @@
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 /**
  * 
  */
@@ -32,15 +31,15 @@
 	protected ServerTreeContentProvider contentProvider;
 	protected boolean initialSelection = true;
 	protected byte viewOption;
-
+	
 	protected IModule module;
 	protected String launchMode;
 	protected boolean includeIncompatibleVersions;
-
+	
 	public interface ServerSelectionListener {
 		public void serverSelected(IServer server);
 	}
-
+	
 	public ServerComposite(Composite parent, int style, ServerSelectionListener listener2, IModule module, String launchMode) {
 		super(parent, style);
 		this.module = module;
@@ -59,7 +58,6 @@
 				if (obj == null)
 					treeViewer.refresh(true);
 				else {
-					obj = ServerUIPlugin.adaptLabelChangeObjects(obj);
 					int size = obj.length;
 					for (int i = 0; i < size; i++)
 						treeViewer.refresh(obj[i], true);
@@ -69,7 +67,7 @@
 		treeViewer.setLabelProvider(labelProvider);
 		treeViewer.setInput(AbstractTreeContentProvider.ROOT);
 		treeViewer.expandToLevel(1);
-		
+
 		treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
 				Object obj = getSelection(event.getSelection());
@@ -88,7 +86,7 @@
 	public ServerComposite(Composite parent, int style, ServerSelectionListener listener2) {
 		this(parent, style, listener2, null, null);
 	}
-
+	
 	public void setIncludeIncompatibleVersions(boolean b) {
 		includeIncompatibleVersions = b;
 		ISelection sel = treeViewer.getSelection();
@@ -115,9 +113,9 @@
 	}
 
 	protected String getDescriptionLabel() {
-		return null;
+		return null; //Messages.serverTypeCompDescription");
 	}
-
+	
 	protected String getTitleLabel() {
 		return Messages.wizNewServerSelectExisting;
 	}
@@ -135,15 +133,12 @@
 		treeViewer.setContentProvider(contentProvider);
 		treeViewer.setSelection(sel);
 	}
-
+	
 	public IServer getSelectedServer() {
 		return selection;
 	}
-
+	
 	public void setSelection(IServer server) {
-		if (server != null)
-			treeViewer.setSelection(new StructuredSelection(server), true);
-		else
-			treeViewer.setSelection(null);
+		treeViewer.setSelection(new StructuredSelection(server), true);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java
index 887fb9f..078b3f4 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java
@@ -17,14 +17,15 @@
 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Composite;
 
 import org.eclipse.wst.server.core.IModuleType;
 import org.eclipse.wst.server.core.IServerType;
 import org.eclipse.wst.server.core.internal.ServerPlugin;
 import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.extension.ExtensionUtility;
+import org.eclipse.wst.server.ui.internal.wizard.NewInstallableServerWizard;
 /**
  * 
  */
@@ -33,25 +34,23 @@
 	protected ServerTypeSelectionListener listener;
 	protected ServerTypeTreeContentProvider contentProvider;
 	protected boolean initialSelection = true;
-
+	
 	protected IModuleType moduleType;
-	protected String serverTypeId;
-
+	
 	protected boolean isLocalhost;
 	protected boolean includeIncompatibleVersions;
-
+	
 	public interface ServerTypeSelectionListener {
 		public void serverTypeSelected(IServerType type);
 	}
-
-	public ServerTypeComposite(Composite parent, int style, IModuleType moduleType, String serverTypeId, ServerTypeSelectionListener listener2) {
+	
+	public ServerTypeComposite(Composite parent, int style, IModuleType moduleType, ServerTypeSelectionListener listener2) {
 		super(parent, style);
 		this.listener = listener2;
 		
 		this.moduleType = moduleType;
-		this.serverTypeId = serverTypeId;
 		
-		contentProvider = new ServerTypeTreeContentProvider(ServerTypeTreeContentProvider.STYLE_VENDOR, moduleType, serverTypeId);
+		contentProvider = new ServerTypeTreeContentProvider(ServerTypeTreeContentProvider.STYLE_VENDOR, moduleType);
 		treeViewer.setContentProvider(contentProvider);
 		
 		ILabelProvider labelProvider = new ServerTypeTreeLabelProvider();
@@ -61,7 +60,6 @@
 				if (obj == null)
 					treeViewer.refresh(true);
 				else {
-					obj = ServerUIPlugin.adaptLabelChangeObjects(obj);
 					int size = obj.length;
 					for (int i = 0; i < size; i++)
 						treeViewer.refresh(obj[i], true);
@@ -134,7 +132,7 @@
 
 	protected void viewOptionSelected(byte option) {
 		ISelection sel = treeViewer.getSelection();
-		contentProvider = new ServerTypeTreeContentProvider(option, moduleType, serverTypeId);
+		contentProvider = new ServerTypeTreeContentProvider(option, moduleType);
 		contentProvider.setLocalhost(isLocalhost);
 		contentProvider.setIncludeIncompatibleVersions(includeIncompatibleVersions);
 		treeViewer.setContentProvider(contentProvider);
@@ -148,7 +146,7 @@
 	public void refresh() {
 		ISelection sel = treeViewer.getSelection();
 		ServerTypeTreeContentProvider cp = (ServerTypeTreeContentProvider) treeViewer.getContentProvider();
-		treeViewer.setContentProvider(new ServerTypeTreeContentProvider(cp.style, moduleType, serverTypeId));
+		treeViewer.setContentProvider(new ServerTypeTreeContentProvider(cp.style, moduleType));
 		treeViewer.setSelection(sel);
 	}
 
@@ -159,8 +157,9 @@
 	}
 
 	protected void detailsSelected() {
-		if (ExtensionUtility.launchExtensionWizard(getShell(), Messages.wizNewInstallableServerTitle,
-				Messages.wizNewInstallableServerDescription))
+		NewInstallableServerWizard wizard2 = new NewInstallableServerWizard();
+		WizardDialog dialog = new WizardDialog(getShell(), wizard2);
+		if (dialog.open() != Window.CANCEL)
 			refresh();
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java
index dd38a32..7c91e41 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,11 +24,10 @@
 	public static final byte STYLE_VERSION = 2;
 	public static final byte STYLE_MODULE_TYPE = 3;
 	public static final byte STYLE_TYPE = 4; // not used yet
-
+	
 	protected boolean localhost;
-
+	
 	protected IModuleType moduleType;
-	protected String serverTypeId;
 	protected boolean includeIncompatibleVersions;
 
 	/**
@@ -36,14 +35,12 @@
 	 * 
 	 * @param style a style
 	 * @param moduleType a module type
-	 * @param serverTypeId a server type id, or null to match any id
 	 */
-	public ServerTypeTreeContentProvider(byte style, IModuleType moduleType, String serverTypeId) {
+	public ServerTypeTreeContentProvider(byte style, IModuleType moduleType) {
 		super(style, false);
 		localhost = true;
 		
 		this.moduleType = moduleType;
-		this.serverTypeId = serverTypeId;
 		
 		fillTree();
 	}
@@ -99,22 +96,20 @@
 	}
 
 	protected boolean include(IServerType serverType) {
-		if (serverTypeId != null && !serverType.getId().startsWith(serverTypeId))
-			return false;
-		
 		IRuntimeType runtimeType = serverType.getRuntimeType();
 		if (runtimeType == null)
 			return false;
 		
-		if (moduleType == null)
-			return true;
-		
-		String moduleTypeId = moduleType.getId();
+		String moduleTypeId = null;
+		if (moduleType != null)
+			moduleTypeId = moduleType.getId();
 		if (includeIncompatibleVersions) {
 			if (!ServerUtil.isSupportedModule(runtimeType.getModuleTypes(), moduleTypeId, null))
 				return false;
 		} else {
-			String moduleVersion = moduleType.getVersion();
+			String moduleVersion = null;
+			if (moduleType != null)
+				moduleVersion = moduleType.getVersion();
 			if (!ServerUtil.isSupportedModule(runtimeType.getModuleTypes(), moduleTypeId, moduleVersion))
 				return false;
 		}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/Version.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/Version.java
deleted file mode 100644
index 58e4bb9..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/Version.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*******************************************************************************
- * 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.viewers;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.StringTokenizer;
-
-public class Version {
-	private static final String SEPARATOR = ".";
-
-	private String[] version;
-
-	public Version(String s) {
-		StringTokenizer st = new StringTokenizer(s, SEPARATOR);
-		List list = new ArrayList();
-		
-		while (st.hasMoreTokens()) {
-			String str = st.nextToken();
-			int size = str.length();
-			for (int i = 0; i < size; i++) {
-				if (!Character.isLetterOrDigit(str.charAt(i)))
-					throw new NumberFormatException("Version strings cannot contain '" + str.charAt(i) + "'");
-			}
-			list.add(str);
-		}
-		
-		version = new String[list.size()];
-		list.toArray(version);
-	}
-
-	public static Version parseVersion(String s) {
-		return new Version(s);
-	}
-
-	public static int compare(Version v1, Version v2) {
-		int v1l = v1.version.length;
-		int v2l = v2.version.length;
-		
-		int size = Math.min(v1l, v2l);
-		for (int i = 0; i < size; i++) {
-			try {
-				double d1 = Double.parseDouble(v1.version[i]);
-				double d2 = Double.parseDouble(v2.version[i]);
-				
-				int c = Double.compare(d1, d2);
-				if (c != 0)
-					return c;
-			} catch (NumberFormatException nfe) {
-				// ignore
-			}
-			
-			int c = v1.version[i].compareTo(v2.version[i]);
-			if (c != 0)
-				return c;
-		}
-		if (v1l == v2l)
-			return 0;
-		if (v1l > v2l)
-			return 1;
-		return -1;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ModifyModulesWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ModifyModulesWizard.java
index 258f863..08b930f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ModifyModulesWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ModifyModulesWizard.java
@@ -26,10 +26,10 @@
 	static class ModifyModulesWizard2 extends WizardFragment {
 		protected void createChildFragments(List list) {
 			list.add(new ModifyModulesWizardFragment());
-			list.add(WizardTaskUtil.SaveServerFragment);
-			
 			list.add(new WizardFragment() {
 				public void performFinish(IProgressMonitor monitor) throws CoreException {
+					WizardTaskUtil.saveServer(getTaskModel(), monitor);
+					
 					IServerAttributes svr = (IServerAttributes) getTaskModel().getObject(TaskModel.TASK_SERVER);
 					if (svr instanceof IServer) {
 						IServer server = (IServer) svr;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ExtensionWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewInstallableServerWizard.java
similarity index 71%
rename from plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ExtensionWizard.java
rename to plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewInstallableServerWizard.java
index 229f75a..ba0090a 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/ExtensionWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewInstallableServerWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 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
@@ -19,38 +19,35 @@
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
+
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.update.core.IFeature;
 import org.eclipse.wst.server.core.TaskModel;
+import org.eclipse.wst.server.core.internal.IInstallableServer;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.Trace;
-import org.eclipse.wst.server.ui.internal.extension.ExtensionUtility;
-import org.eclipse.wst.server.ui.internal.wizard.fragment.ExtensionWizardFragment;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.LicenseWizardFragment;
+import org.eclipse.wst.server.ui.internal.wizard.fragment.NewInstallableServerWizardFragment;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
  * A wizard to create a new installable server.
  */
-public class ExtensionWizard extends TaskWizard {
+public class NewInstallableServerWizard extends TaskWizard {
 	/**
-	 * Create a new ExtensionWizard.
-	 * 
-	 * @param title the wizard title
-	 * @param message the description message
+	 * NewInstallableServerWizard constructor comment.
 	 */
-	public ExtensionWizard(String title, String message) {
-		super(title, new WizardFragment() {
+	public NewInstallableServerWizard() {
+		super(Messages.wizNewServerWizardTitle, new WizardFragment() {
 			protected void createChildFragments(List list) {
-				list.add(new ExtensionWizardFragment());
+				list.add(new NewInstallableServerWizardFragment());
 				list.add(new LicenseWizardFragment());
 				list.add(new WizardFragment() {
 					public void performFinish(IProgressMonitor monitor) throws CoreException {
-						IFeature is = (IFeature) getTaskModel().getObject(WizardTaskUtil.TASK_FEATURE);
+						IInstallableServer is = (IInstallableServer) getTaskModel().getObject("installableServer");
 						if (is != null)
-							install(is);
+							installServer(is);
 					}
 				});
 			}
@@ -58,8 +55,8 @@
 	}
 
 	public static void invalidateLicense(TaskModel taskModel) {
-		IFeature is = (IFeature) taskModel.getObject(WizardTaskUtil.TASK_FEATURE);
-		IFeature ls = (IFeature) taskModel.getObject(LicenseWizardFragment.LICENSE_SERVER);
+		IInstallableServer is = (IInstallableServer) taskModel.getObject("installableServer");
+		IInstallableServer ls = (IInstallableServer) taskModel.getObject(LicenseWizardFragment.LICENSE_SERVER);
 		if (is == ls)
 			return;
 		
@@ -69,19 +66,23 @@
 	}
 
 	public static void updateLicense(IWizardHandle wizard, final TaskModel taskModel) {
-		final IFeature feature = (IFeature) taskModel.getObject(WizardTaskUtil.TASK_FEATURE);
-		IFeature ls = (IFeature) taskModel.getObject(LicenseWizardFragment.LICENSE_SERVER);
-		if (feature.equals(ls))
+		final IInstallableServer is = (IInstallableServer) taskModel.getObject("installableServer");
+		IInstallableServer ls = (IInstallableServer) taskModel.getObject(LicenseWizardFragment.LICENSE_SERVER);
+		if (is == ls)
 			return;
 		
 		IRunnableWithProgress runnable = new IRunnableWithProgress() {
 			public void run(IProgressMonitor monitor) {
 				String license = LicenseWizardFragment.LICENSE_UNKNOWN;
-				license = ExtensionUtility.getLicense(feature);
-				if (license == null)
-					license = LicenseWizardFragment.LICENSE_NONE;
+				try {
+					license = is.getLicense(monitor);
+					if (license == null)
+						license = LicenseWizardFragment.LICENSE_NONE;
+				} catch (CoreException ce) {
+					// ignore
+				}
 				taskModel.putObject(LicenseWizardFragment.LICENSE, license);
-				taskModel.putObject(LicenseWizardFragment.LICENSE_SERVER, feature);
+				taskModel.putObject(LicenseWizardFragment.LICENSE_SERVER, is);
 			}
 		};
 		
@@ -93,18 +94,18 @@
 	}
 
 	/**
-	 * Install a new feature.
-	 * @param feature
+	 * Install a new server adapter.
+	 * @param is
 	 */
-	protected static void install(final IFeature feature) {
-		if (feature == null)
+	protected static void installServer(final IInstallableServer is) {
+		if (is == null)
 			return;
 		
 		final boolean[] b = new boolean[1];
 		final Display display = Display.getDefault();
 		display.syncExec(new Runnable() {
 			public void run() {
-				String msg = NLS.bind(Messages.wizNewInstallableServerConfirm, feature.getLabel());
+				String msg = NLS.bind(Messages.wizNewInstallableServerConfirm, is.getName());
 				b[0] = MessageDialog.openConfirm(display.getActiveShell(),
 					Messages.defaultDialogTitle, msg);
 			}
@@ -112,11 +113,11 @@
 		if (!b[0])
 			return;
 		
-		String name = NLS.bind(Messages.wizNewInstallableServerJob, feature.getLabel());
+		String name = NLS.bind(Messages.wizNewInstallableServerJob, is.getName());
 		Job job = new Job(name) {
 			public IStatus run(IProgressMonitor monitor) {
 				try {
-					ExtensionUtility.install(feature, monitor);
+					is.install(monitor);
 					promptRestart();
 					return Status.OK_STATUS;
 				} catch (CoreException ce) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewRuntimeWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewRuntimeWizard.java
index 7e5da64..04a2249 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewRuntimeWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewRuntimeWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,8 @@
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.NewRuntimeWizardFragment;
@@ -29,7 +31,11 @@
 		super(Messages.wizNewRuntimeWizardTitle, new WizardFragment() {
 			protected void createChildFragments(List list) {
 				list.add(new NewRuntimeWizardFragment());
-				list.add(WizardTaskUtil.SaveRuntimeFragment);
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+					}
+				});
 			}
 		});
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewServerWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewServerWizard.java
index b588f64..ce8be44 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewServerWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/NewServerWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,10 +12,14 @@
 
 import java.util.List;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
+import org.eclipse.wst.server.core.IServerAttributes;
 import org.eclipse.wst.server.core.TaskModel;
 import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.ModifyModulesWizardFragment;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.NewServerWizardFragment;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.TasksWizardFragment;
@@ -37,16 +41,26 @@
 		super(Messages.wizNewServerWizardTitle, new WizardFragment() {
 			protected void createChildFragments(List list) {
 				list.add(new NewServerWizardFragment());
-				
-				list.add(WizardTaskUtil.TempSaveRuntimeFragment);
-				list.add(WizardTaskUtil.TempSaveServerFragment);
-				
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.tempSaveRuntime(getTaskModel(), monitor);
+						WizardTaskUtil.tempSaveServer(getTaskModel(), monitor);
+					}
+				});
 				list.add(new ModifyModulesWizardFragment());
 				list.add(new TasksWizardFragment());
-				
-				list.add(WizardTaskUtil.SaveRuntimeFragment);
-				list.add(WizardTaskUtil.SaveServerFragment);
-				list.add(WizardTaskUtil.SaveHostnameFragment);
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+						WizardTaskUtil.saveServer(getTaskModel(), monitor);
+						try {
+							IServerAttributes server = (IServerAttributes) getTaskModel().getObject(TaskModel.TASK_SERVER);
+							ServerUIPlugin.getPreferences().addHostname(server.getHost());
+						} catch (Exception e) {
+							// ignore
+						}
+					}
+				});
 			}
 		});
 		
@@ -58,7 +72,7 @@
 			}
 		}
 	}
-
+	
 	public void init(IWorkbench newWorkbench, IStructuredSelection newSelection) {
 		// do nothing
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java
index 7801f41..e21146a 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,148 +10,83 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.wizard;
 
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IModuleArtifact;
 import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServerAttributes;
 import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.internal.IClient;
-import org.eclipse.wst.server.core.internal.ILaunchableAdapter;
 import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.wizard.fragment.RunOnServerWizardFragment;
+import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
+import org.eclipse.wst.server.ui.internal.wizard.fragment.ModifyModulesWizardFragment;
+import org.eclipse.wst.server.ui.internal.wizard.fragment.NewServerWizardFragment;
+import org.eclipse.wst.server.ui.internal.wizard.fragment.TasksWizardFragment;
+import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
- * A wizard used for Run on Server.
+ * A wizard used to select a server from various lists.
  */
 public class RunOnServerWizard extends TaskWizard {
+	protected static NewServerWizardFragment task;
+
 	/**
 	 * RunOnServerWizard constructor comment.
 	 * 
 	 * @param module a module
 	 * @param launchMode a launch mode
-	 * @param moduleArtifact a module artifact
 	 */
-	public RunOnServerWizard(IModule module, String launchMode, IModuleArtifact moduleArtifact) {
-		super(Messages.wizRunOnServerTitle, new RunOnServerWizardFragment(module, launchMode, moduleArtifact));
-		
+	public RunOnServerWizard(final IModule module, final String launchMode) {
+		super(Messages.wizRunOnServerTitle, new WizardFragment() {
+			protected void createChildFragments(List list) {
+				task = new NewServerWizardFragment(module, launchMode);
+				list.add(task);
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.tempSaveRuntime(getTaskModel(), monitor);
+						WizardTaskUtil.tempSaveServer(getTaskModel(), monitor);
+					}
+				});
+				list.add(new ModifyModulesWizardFragment(module));
+				list.add(new TasksWizardFragment());
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
+						WizardTaskUtil.saveServer(getTaskModel(), monitor);
+						try {
+							IServerAttributes server = (IServerAttributes) getTaskModel().getObject(TaskModel.TASK_SERVER);
+							ServerUIPlugin.getPreferences().addHostname(server.getHost());
+						} catch (Exception e) {
+							// ignore
+						}
+					}
+				});
+			}
+		});
+	
 		setNeedsProgressMonitor(true);
 		if (ILaunchManager.DEBUG_MODE.equals(launchMode))
 			setWindowTitle(Messages.wizDebugOnServerTitle);
 		else if (ILaunchManager.PROFILE_MODE.equals(launchMode))
 			setWindowTitle(Messages.wizProfileOnServerTitle);
-		getTaskModel().putObject(TaskModel.TASK_LAUNCH_MODE, launchMode);
-	}
-
-	/**
-	 * RunOnServerWizard constructor comment.
-	 * 
-	 * @param server a server
-	 * @param launchMode a launch mode
-	 * @param moduleArtifact a module artifact
-	 */
-	public RunOnServerWizard(IServer server, String launchMode, IModuleArtifact moduleArtifact) {
-		super(Messages.wizRunOnServerTitle, new RunOnServerWizardFragment(server, launchMode, moduleArtifact));
-		
-		setNeedsProgressMonitor(true);
-		if (ILaunchManager.DEBUG_MODE.equals(launchMode))
-			setWindowTitle(Messages.wizDebugOnServerTitle);
-		else if (ILaunchManager.PROFILE_MODE.equals(launchMode))
-			setWindowTitle(Messages.wizProfileOnServerTitle);
-		
-		getTaskModel().putObject(TaskModel.TASK_SERVER, server);
-		getTaskModel().putObject(TaskModel.TASK_LAUNCH_MODE, launchMode);
-		addPages();
 	}
 
 	/**
 	 * Return the server.
-	 * 
-	 * @return the server
+	 * @return org.eclipse.wst.server.core.IServer
 	 */
 	public IServer getServer() {
 		try {
-			return (IServer) getTaskModel().getObject(TaskModel.TASK_SERVER);
+			return (IServer) getRootFragment().getTaskModel().getObject(TaskModel.TASK_SERVER);
 		} catch (Exception e) {
 			return null;
 		}
 	}
-
-	/**
-	 * Return if the user wants to use the server as a default.
-	 * 
-	 * @return true if the server should be the default
-	 */
+	
 	public boolean isPreferredServer() {
-		try {
-			Boolean b = (Boolean) getTaskModel().getObject(WizardTaskUtil.TASK_DEFAULT_SERVER);
-			return b.booleanValue();
-		} catch (Exception e) {
+		if (task == null)
 			return false;
-		}
-	}
-
-	/**
-	 * Return the selected client.
-	 * 
-	 * @return the client
-	 */
-	public IClient getSelectedClient() {
-		try {
-			return (IClient) getTaskModel().getObject(WizardTaskUtil.TASK_CLIENT);
-		} catch (Exception e) {
-			return null;
-		}
-	}
-
-	/**
-	 * Return the launchable adapter.
-	 * 
-	 * @return the adapter
-	 */
-	public ILaunchableAdapter getLaunchableAdapter() {
-		try {
-			return (ILaunchableAdapter) getTaskModel().getObject(WizardTaskUtil.TASK_LAUNCHABLE_ADAPTER);
-		} catch (Exception e) {
-			return null;
-		}
-	}
-
-	/**
-	 * Returns true if this wizard should be shown to the user.
-	 * 
-	 * @return <code>true</code> if this wizard should be shown, and <code>false</code>
-	 *    otherwise
-	 */
-	public boolean shouldAppear() {
-		return getServer() == null || hasTasks() || hasClients();
-	}
-
-	/**
-	 * Return <code>true</code> if this wizard has tasks.
-	 * 
-	 * @return <code>true</code> if this wizard has tasks, and <code>false</code>
-	 *    otherwise
-	 */
-	protected boolean hasTasks() {
-		try {
-			Boolean b = (Boolean) getTaskModel().getObject(WizardTaskUtil.TASK_HAS_TASKS);
-			return b.booleanValue();
-		} catch (Exception e) {
-			return false;
-		}
-	}
-
-	/**
-	 * Return <code>true</code> if this wizard has multiple clients to show.
-	 * 
-	 * @return <code>true</code> if this wizard has multiple clients, and <code>false</code>
-	 *    otherwise
-	 */
-	protected boolean hasClients() {
-		try {
-			Boolean b = (Boolean) getTaskModel().getObject(WizardTaskUtil.TASK_HAS_CLIENTS);
-			return b.booleanValue();
-		} catch (Exception e) {
-			return false;
-		}
+		return task.isPreferredServer();
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/SelectClientWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/SelectClientWizard.java
new file mode 100644
index 0000000..af5efca
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/SelectClientWizard.java
@@ -0,0 +1,57 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.wst.server.ui.internal.wizard;
+
+import org.eclipse.wst.server.core.internal.IClient;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.wizard.page.SelectClientComposite;
+import org.eclipse.wst.server.ui.wizard.IWizardHandle;
+import org.eclipse.wst.server.ui.wizard.WizardFragment;
+import org.eclipse.swt.widgets.Composite;
+/**
+ * A wizard used to select a server client from a list.
+ */
+public class SelectClientWizard extends TaskWizard {
+	protected static SelectClientComposite comp;
+
+	/**
+	 * SelectClientWizard constructor comment.
+	 * 
+	 * @param clients an array of clients
+	 */
+	public SelectClientWizard(final IClient[] clients) {
+		super(Messages.wizSelectClientWizardTitle,
+			new WizardFragment() {						
+				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 SelectClientComposite(parent, wizard, clients);
+					return comp;
+				}
+			}
+		);
+
+		setForcePreviousAndNextButtons(true);
+	}
+
+	/**
+	 * Return the selected client.
+	 * @return org.eclipse.wst.server.core.IClient
+	 */
+	public IClient getSelectedClient() {
+		return comp.getSelectedClient();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/SelectTasksWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/SelectTasksWizard.java
new file mode 100644
index 0000000..16eb7f6
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/SelectTasksWizard.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.wizard;
+
+import java.util.List;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.TaskModel;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.wizard.fragment.TasksWizardFragment;
+import org.eclipse.wst.server.ui.wizard.WizardFragment;
+/**
+ * A wizard used to select server and module tasks.
+ */
+public class SelectTasksWizard extends TaskWizard {
+	protected static TasksWizardFragment fragment;
+
+	/**
+	 * SelectTasksWizard constructor.
+	 * 
+	 * @param server a server
+	 */
+	public SelectTasksWizard(final IServer server) {
+		super(Messages.wizTaskWizardTitle, new WizardFragment() {
+			protected void createChildFragments(List list) {
+				fragment = new TasksWizardFragment();
+				list.add(fragment);
+				list.add(new WizardFragment() {
+					public void performFinish(IProgressMonitor monitor) throws CoreException {
+						WizardTaskUtil.saveServer(getTaskModel(), monitor);
+					}
+				});
+			}
+		});
+		getTaskModel().putObject(TaskModel.TASK_SERVER, server);
+		addPages();
+	}
+
+	/**
+	 * Return <code>true</code> if this wizard has tasks.
+	 * 
+	 * @return <code>true</code> if this wizard has tasks, and <code>false</code>
+	 *    otherwise
+	 */
+	public boolean hasTasks() {
+		return fragment.hasTasks();
+	}
+
+	/**
+	 * Return <code>true</code> if this wizard has optional tasks.
+	 * 
+	 * @return <code>true</code> if this wizard has optional tasks, and
+	 *    <code>false</code> otherwise
+	 */
+	public boolean hasOptionalTasks() {
+		return fragment.hasOptionalTasks();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java
index 3a67199..dc29ca9 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java
@@ -340,7 +340,7 @@
 						fragmentData.put(fragment, page2);
 						addPage(page2);
 					}
-				}
+				}	
 			}
 		} catch (Exception e) {
 			Trace.trace(Trace.SEVERE, "Error adding fragments to wizard", e);
@@ -348,7 +348,7 @@
 			addingPages = false;
 		}
 	}
-
+	
 	/*private static void updateWizardPages() {
 		try {
 			current.updatePages();
@@ -357,7 +357,7 @@
 			Trace.trace(Trace.SEVERE, "Error updating wizard pages", e);
 		}
 	}*/
-
+	
 	private TaskWizardPage getFragmentData(WizardFragment fragment) {
 		try {
 			TaskWizardPage page = (TaskWizardPage) fragmentData.get(fragment);
@@ -369,7 +369,7 @@
 		
 		return null;
 	}
-
+	
 	protected void updatePages() {
 		addPages();
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java
index ac59231..a794693 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java
@@ -29,14 +29,14 @@
  */
 class TaskWizardPage extends WizardPage implements IWizardHandle {
 	protected WizardFragment fragment;
-
-	protected boolean isCreated = false;
+	
+	protected boolean isEmptyError = false;
 
 	public TaskWizardPage(WizardFragment fragment) {
 		super(fragment.toString());
 		this.fragment = fragment;
 	}
-
+	
 	public void createControl(Composite parentComp) {
 		Composite comp = null;
 		try {
@@ -52,26 +52,29 @@
 		}
 		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
 		data.widthHint = convertHorizontalDLUsToPixels(150);
+		//data.heightHint = convertVerticalDLUsToPixels(350);
 		comp.setLayoutData(data);
 		setControl(comp);
-		
-		isCreated = true;
-		update();
 	}
 
 	public boolean isPageComplete() {
+		//if (isEmptyError)
+		//	return false;
 		try {
 			if (!fragment.isComplete())
 				return false;
 		} catch (Exception e) {
 			return false;
 		}
+		//return (getMessage() == null || getMessageType() != ERROR);
 		return true;
 	}
 
 	public boolean canFlipToNextPage() {
 		if (getNextPage() == null)
 			return false;
+		//if (isEmptyError)
+		//	return false;
 		try {
 			if (!fragment.isComplete())
 				return false;
@@ -79,6 +82,7 @@
 			return false;
 		}
 		return true;
+		//return (getMessage() == null || getMessageType() != ERROR);
 	}
 
 	public void setVisible(boolean visible) {
@@ -95,8 +99,10 @@
 
 	public void setMessage(String message, int type) {
 		if (type == IMessageProvider.ERROR && "".equals(message)) {
+			isEmptyError = true;
 			message = null;
-		}
+		} else
+			isEmptyError = false;
 		super.setMessage(message, type);
 		WizardFragment frag = ((TaskWizard) getWizard()).getCurrentWizardFragment();
 		if (!fragment.equals(frag))
@@ -109,9 +115,6 @@
 	}
 
 	public void update() {
-		if (!isCreated)
-			return;
-		
 		fragment.updateChildFragments();
 		((TaskWizard) getWizard()).updatePages();
 		
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java
index ae1281c..daf4955 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,67 +21,16 @@
 import org.eclipse.wst.server.core.internal.ServerPlugin;
 import org.eclipse.wst.server.core.internal.ServerWorkingCopy;
 import org.eclipse.wst.server.ui.internal.EclipseUtil;
-import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 import org.eclipse.wst.server.ui.internal.Trace;
-import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
  * 
  */
 public class WizardTaskUtil {
-	public static final String TASK_LAUNCHABLE_ADAPTER = "launchableAdapter";
-	public static final String TASK_LAUNCHABLE = "launchable";
-	public static final String TASK_CLIENT = "client";
-	public static final String TASK_CLIENTS = "clients";
-	public static final String TASK_DEFAULT_SERVER = "defaultServer";
-	public static final String TASK_MODE = "mode";
-	public static final String TASK_HAS_TASKS = "hasTasks";
-	public static final String TASK_HAS_CLIENTS = "hasClients";
-	public static final String TASK_FEATURE = "feature";
-
-	public static final byte MODE_EXISTING = 0;
-	public static final byte MODE_DETECT = 1;
-	public static final byte MODE_MANUAL = 2;
-
-	public static final WizardFragment SaveRuntimeFragment = new WizardFragment() {
-		public void performFinish(IProgressMonitor monitor) throws CoreException {
-			WizardTaskUtil.saveRuntime(getTaskModel(), monitor);
-		}
-	};
-
-	public static final WizardFragment SaveServerFragment = new WizardFragment() {
-		public void performFinish(IProgressMonitor monitor) throws CoreException {
-			WizardTaskUtil.saveServer(getTaskModel(), monitor);
-		}
-	};
-
-	public static final WizardFragment TempSaveRuntimeFragment = new WizardFragment() {
-		public void performFinish(IProgressMonitor monitor) throws CoreException {
-			WizardTaskUtil.tempSaveRuntime(getTaskModel(), monitor);
-		}
-	};
-
-	public static final WizardFragment TempSaveServerFragment = new WizardFragment() {
-		public void performFinish(IProgressMonitor monitor) throws CoreException {
-			WizardTaskUtil.tempSaveServer(getTaskModel(), monitor);
-		}
-	};
-
-	public static final WizardFragment SaveHostnameFragment = new WizardFragment() {
-		public void performFinish(IProgressMonitor monitor) throws CoreException {
-			try {
-				IServerAttributes server2 = (IServerAttributes) getTaskModel().getObject(TaskModel.TASK_SERVER);
-				ServerUIPlugin.getPreferences().addHostname(server2.getHost());
-			} catch (Exception e) {
-				// ignore
-			}
-		}
-	};
-
 	private WizardTaskUtil() {
 		// do nothing
 	}
-
-	protected static void saveRuntime(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
+	
+	public static void saveRuntime(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
 		IRuntime runtime = (IRuntime) taskModel.getObject(TaskModel.TASK_RUNTIME);
 		if (runtime != null && runtime instanceof IRuntimeWorkingCopy) {
 			IRuntimeWorkingCopy workingCopy = (IRuntimeWorkingCopy) runtime;
@@ -93,7 +42,7 @@
 	/* (non-Javadoc)
 	 * @see org.eclipse.wst.server.ui.internal.task.ITask#doTask()
 	 */
-	protected static void saveServer(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
+	public static void saveServer(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
 		IServer server = (IServer) taskModel.getObject(TaskModel.TASK_SERVER);
 		if (server != null && server instanceof IServerWorkingCopy) {
 			IServerWorkingCopy workingCopy = (IServerWorkingCopy) server;
@@ -113,20 +62,20 @@
 			}
 		}
 	}
-
-	protected static void tempSaveRuntime(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
+	
+	public static void tempSaveRuntime(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
 		IRuntime runtime = (IRuntime) taskModel.getObject(TaskModel.TASK_RUNTIME);
 		if (runtime != null && runtime instanceof IRuntimeWorkingCopy) {
 			IRuntimeWorkingCopy workingCopy = (IRuntimeWorkingCopy) runtime;
 			if (!workingCopy.isDirty())
 				return;
-			
+		
 			runtime = workingCopy.save(false, monitor);
 			taskModel.putObject(TaskModel.TASK_RUNTIME, runtime.createWorkingCopy());
 		}
 	}
-
-	protected static void tempSaveServer(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
+	
+	public static void tempSaveServer(TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
 		IServer server = (IServer) taskModel.getObject(TaskModel.TASK_SERVER);
 		if (server != null && server instanceof IServerWorkingCopy) {
 			IServerWorkingCopy workingCopy = (IServerWorkingCopy) server;
@@ -156,7 +105,7 @@
 			taskModel.putObject(TaskModel.TASK_SERVER, workingCopy);
 		}
 	}
-
+	
 	public static void addModule(IModule module, TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
 		if (module == null)
 			return;
@@ -187,13 +136,13 @@
 		workingCopy.modifyModules(new IModule[] { parentModule }, new IModule[0], monitor);
 		taskModel.putObject(TaskModel.TASK_SERVER, workingCopy.save(false, monitor));
 	}
-
+	
 	public static void modifyModules(List add, List remove, TaskModel taskModel, IProgressMonitor monitor) throws CoreException {
 		if ((add == null || add.isEmpty()) && (remove == null || remove.isEmpty()))
 			return;
-		
+
 		IServerWorkingCopy workingCopy = (IServerWorkingCopy) taskModel.getObject(TaskModel.TASK_SERVER);
-		
+
 		// modify modules
 		IModule[] remove2 = new IModule[0];
 		if (remove != null) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java
index 2c392e7..77018a5 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java
@@ -114,13 +114,6 @@
 		}
 	}
 
-	public boolean isComplete() {
-		if (comp != null)
-			return comp.isComplete();
-		
-		return true;
-	}
-
 	public void performFinish(IProgressMonitor monitor) throws CoreException {
 		if (comp != null)
 			WizardTaskUtil.modifyModules(comp.getModulesToAdd(), comp.getModulesToRemove(), getTaskModel(), monitor);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ExtensionWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewInstallableServerWizardFragment.java
similarity index 71%
rename from plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ExtensionWizardFragment.java
rename to plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewInstallableServerWizardFragment.java
index a97da0d..8a950de 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ExtensionWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewInstallableServerWizardFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,19 +13,18 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.wst.server.ui.internal.ImageResource;
 import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.wizard.ExtensionWizard;
-import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
-import org.eclipse.wst.server.ui.internal.wizard.page.Extension2Composite;
+import org.eclipse.wst.server.ui.internal.wizard.NewInstallableServerWizard;
+import org.eclipse.wst.server.ui.internal.wizard.page.NewInstallableServerComposite;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 /**
  * 
  */
-public class ExtensionWizardFragment extends WizardFragment {
-	protected Extension2Composite comp;
+public class NewInstallableServerWizardFragment extends WizardFragment {
+	protected NewInstallableServerComposite comp;
 	protected IWizardHandle wizard;
 
-	public ExtensionWizardFragment() {
+	public NewInstallableServerWizardFragment() {
 		// do nothing
 	}
 
@@ -38,7 +37,7 @@
 	 */
 	public Composite createComposite(Composite parent, IWizardHandle wizard2) {
 		this.wizard = wizard2;
-		comp = new Extension2Composite(parent, getTaskModel(), wizard);
+		comp = new NewInstallableServerComposite(parent, getTaskModel(), wizard);
 		
 		wizard.setTitle(Messages.wizNewInstallableServerTitle);
 		wizard.setDescription(Messages.wizNewInstallableServerDescription);
@@ -47,10 +46,10 @@
 	}
 
 	public boolean isComplete() {
-		return getTaskModel().getObject(WizardTaskUtil.TASK_FEATURE) != null;
+		return getTaskModel().getObject("installableServer") != null;
 	}
 
 	public void exit() {
-		ExtensionWizard.updateLicense(wizard, getTaskModel());
+		NewInstallableServerWizard.updateLicense(wizard, getTaskModel());
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java
index 792c38d..741d96f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewRuntimeWizardFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,40 +10,33 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.wizard.fragment;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.eclipse.wst.server.core.IRuntimeWorkingCopy;
-import org.eclipse.wst.server.core.IServerWorkingCopy;
 import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.internal.ServerWorkingCopy;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
 import org.eclipse.wst.server.ui.internal.wizard.page.NewRuntimeComposite;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.swt.widgets.Composite;
 /**
  * 
  */
 public class NewRuntimeWizardFragment extends WizardFragment {
+	protected NewRuntimeComposite page;
+	
 	// filter by type/version
 	protected String type;
 	protected String version;
-
+	
 	// filter by partial runtime type id
 	protected String runtimeTypeId;
-
-	protected Map fragmentMap = new HashMap();
-
+	
 	public NewRuntimeWizardFragment() {
 		// do nothing
 	}
-
+	
 	public NewRuntimeWizardFragment(String type, String version, String runtimeTypeId) {
 		this.type = type;
 		this.version = version;
@@ -58,61 +51,20 @@
 	 * @see org.eclipse.wst.server.ui.internal.task.WizardTask#getWizardPage()
 	 */
 	public Composite createComposite(Composite parent, IWizardHandle wizard) {
-		return new NewRuntimeComposite(parent, wizard, getTaskModel(), type, version, runtimeTypeId);
-	}
-
-	public List getChildFragments() {
-		List listImpl = new ArrayList();
-		createChildFragments(listImpl);
-		return listImpl;
+		page = new NewRuntimeComposite(parent, wizard, getTaskModel(), type, version, runtimeTypeId);
+		return page;
 	}
 
 	protected void createChildFragments(List list) {
 		if (getTaskModel() == null)
 			return;
-		
+	
 		IRuntimeWorkingCopy runtime = (IRuntimeWorkingCopy) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
 		if (runtime == null)
 			return;
-		
-		WizardFragment sub = getWizardFragment(runtime.getRuntimeType().getId());
+
+		WizardFragment sub = ServerUIPlugin.getWizardFragment(runtime.getRuntimeType().getId());
 		if (sub != null)
 			list.add(sub);
-		
-		if (runtime != null) {
-			IServerWorkingCopy server = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
-			if (server != null) {
-				if (server.getServerType().hasServerConfiguration() && server instanceof ServerWorkingCopy) {
-					ServerWorkingCopy swc = (ServerWorkingCopy) server;
-					try {
-						if (swc != null && runtime != null && runtime.getLocation() != null && !runtime.getLocation().isEmpty())
-							swc.importRuntimeConfiguration(runtime, null);
-					} catch (CoreException ce) {
-						// ignore
-					}
-				}
-				
-				sub = getWizardFragment(server.getServerType().getId());
-				if (sub != null)
-					list.add(sub);
-				
-				list.add(WizardTaskUtil.SaveServerFragment);
-			}
-		}
-	}
-
-	protected WizardFragment getWizardFragment(String typeId) {
-		try {
-			WizardFragment fragment = (WizardFragment) fragmentMap.get(typeId);
-			if (fragment != null)
-				return fragment;
-		} catch (Exception e) {
-			// ignore
-		}
-		
-		WizardFragment fragment = ServerUIPlugin.getWizardFragment(typeId);
-		if (fragment != null)
-			fragmentMap.put(typeId, fragment);
-		return fragment;
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
index eaf02af..7b793cc 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
@@ -16,12 +16,10 @@
 import java.util.Map;
 
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.ServerWorkingCopy;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
 import org.eclipse.wst.server.ui.internal.wizard.page.NewServerComposite;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
@@ -29,29 +27,25 @@
  * 
  */
 public class NewServerWizardFragment extends WizardFragment {
-	public static final byte MODE_EXISTING = WizardTaskUtil.MODE_EXISTING;
-	public static final byte MODE_DETECT = WizardTaskUtil.MODE_DETECT;
-	public static final byte MODE_MANUAL = WizardTaskUtil.MODE_MANUAL;
+	public static final String MODE = "mode";
+	public static final byte MODE_EXISTING = 0;
+	public static final byte MODE_DETECT = 1;
+	public static final byte MODE_MANUAL= 2;
 
+	protected NewServerComposite comp;
 	protected IModule module;
-	protected IModuleType moduleType;
-	protected String serverTypeId;
-
+	protected String launchMode;
+	
 	protected Map fragmentMap = new HashMap();
 	protected Map configMap = new HashMap();
-	protected IPath runtimeLocation = null;
-
+	
 	public NewServerWizardFragment() {
 		// do nothing
 	}
-
-	public NewServerWizardFragment(IModuleType moduleType, String serverTypeId) {
-		this.moduleType = moduleType;
-		this.serverTypeId = serverTypeId;
-	}
-
-	public NewServerWizardFragment(IModule module) {
+	
+	public NewServerWizardFragment(IModule module, String launchMode) {
 		this.module = module;
+		this.launchMode = launchMode;
 	}
 
 	public boolean hasComposite() {
@@ -60,18 +54,14 @@
 
 	public void enter() {
 		super.enter();
+		getTaskModel().putObject(TaskModel.TASK_LAUNCH_MODE, launchMode);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.wst.server.ui.internal.task.WizardTask#getWizardPage()
 	 */
 	public Composite createComposite(Composite parent, IWizardHandle wizard) {
-		String launchMode = (String) getTaskModel().getObject(TaskModel.TASK_LAUNCH_MODE);
-		NewServerComposite comp = null;
-		if (moduleType != null || serverTypeId != null)
-			comp = new NewServerComposite(parent, wizard, moduleType, serverTypeId, launchMode);
-		else
-			comp = new NewServerComposite(parent, wizard, module, launchMode);
+		comp = new NewServerComposite(parent, wizard, module, launchMode);
 		if (getTaskModel() != null)
 			comp.setTaskModel(getTaskModel());
 		return comp;
@@ -102,7 +92,7 @@
 		if (getTaskModel() == null)
 			return;
 		
-		Byte b = (Byte) getTaskModel().getObject(WizardTaskUtil.TASK_MODE);
+		Byte b = (Byte) getTaskModel().getObject(MODE);
 		if (b != null && b.byteValue() == MODE_MANUAL) {
 			IRuntime runtime = (IRuntime) getTaskModel().getObject(TaskModel.TASK_RUNTIME);
 			if (runtime != null && runtime instanceof IRuntimeWorkingCopy) {
@@ -115,16 +105,12 @@
 			if (server != null) {
 				if (server.getServerType().hasServerConfiguration() && server instanceof ServerWorkingCopy) {
 					ServerWorkingCopy swc = (ServerWorkingCopy) server;
-					if (swc != null && runtime != null && runtime.getLocation() != null && !runtime.getLocation().isEmpty()) {
-						if (runtimeLocation == null || !runtimeLocation.equals(runtime.getLocation()))
-							try {
-								swc.importRuntimeConfiguration(runtime, null);
-							} catch (CoreException ce) {
-								// ignore
-							}
-						runtimeLocation = runtime.getLocation();
-					} else
-						runtimeLocation = null;
+					try {
+						if (swc != null && runtime != null && runtime.getLocation() != null && !runtime.getLocation().isEmpty())
+							swc.importRuntimeConfiguration(runtime, null);
+					} catch (CoreException ce) {
+						// ignore
+					}
 				}
 				WizardFragment sub = getWizardFragment(server.getServerType().getId());
 				if (sub != null)
@@ -138,16 +124,22 @@
 			}*/
 		}
 	}
-
+	
 	public boolean isComplete() {
-		return getServer() != null; 
+		if (comp == null)
+			return false;
+		return comp.getServer() != null; 
+	}
+	
+	public IServerWorkingCopy getServer() {
+		if (comp == null)
+			return null;
+		return comp.getServer();
 	}
 
-	private IServerWorkingCopy getServer() {
-		try {
-			return (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
-		} catch (Exception e) {
-			return null;
-		}
+	public boolean isPreferredServer() {
+		if (comp == null)
+			return false;
+		return comp.isPreferredServer();
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/OptionalClientWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/OptionalClientWizardFragment.java
deleted file mode 100644
index 4f71c8a..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/OptionalClientWizardFragment.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.core.runtime.CoreException;
-import org.eclipse.wst.server.core.IModuleArtifact;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.core.internal.IClient;
-import org.eclipse.wst.server.ui.internal.EclipseUtil;
-import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
-import org.eclipse.wst.server.ui.wizard.WizardFragment;
-/**
- * A fragment used to select a client.
- */
-public class OptionalClientWizardFragment extends WizardFragment {
-	protected IClient[] clients;
-
-	protected IModuleArtifact moduleArtifact;
-	protected IServer lastServer;
-
-	public OptionalClientWizardFragment(IModuleArtifact moduleArtifact) {
-		super();
-		this.moduleArtifact = moduleArtifact;
-	}
-
-	protected void createChildFragments(List list) {
-		if (clients != null && clients.length > 1)
-			list.add(new SelectClientWizardFragment());
-	}
-
-	protected void updateClients() {
-		if (getTaskModel() == null)
-			return;
-		
-		try {
-			IServer server = (IServer) getTaskModel().getObject(TaskModel.TASK_SERVER);
-			if (lastServer == null && server == null)
-				return;
-			if (lastServer != null && lastServer.equals(server))
-				return;
-			
-			lastServer = server;
-			
-			getTaskModel().putObject(WizardTaskUtil.TASK_CLIENTS, null);
-			getTaskModel().putObject(WizardTaskUtil.TASK_HAS_CLIENTS, new Boolean(false));
-			
-			// get the launchable adapter and module object
-			Object launchable = null;
-			try {
-				Object[] obj = ServerUIPlugin.getLaunchableAdapter(server, moduleArtifact);
-				getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE_ADAPTER, obj[0]);
-				getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE, obj[1]);
-				launchable = obj[1];
-			} catch (CoreException ce) {
-				getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE_ADAPTER, null);
-				getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE, null);
-				EclipseUtil.openError(null, ce.getStatus());
-			}
-			
-			String launchMode = (String) getTaskModel().getObject(TaskModel.TASK_LAUNCH_MODE);
-			clients = ServerUIPlugin.getClients(server, launchable, launchMode);
-			
-			if (clients != null) {
-				if (clients.length > 1) {
-					getTaskModel().putObject(WizardTaskUtil.TASK_CLIENTS, clients);
-					getTaskModel().putObject(WizardTaskUtil.TASK_HAS_CLIENTS, new Boolean(true));
-				} else
-					getTaskModel().putObject(WizardTaskUtil.TASK_CLIENT, clients[0]);
-			}
-			
-			updateChildFragments();
-		} catch (Exception e) {
-			// ignore
-		}
-	}
-
-	public void enter() {
-		updateClients();
-	}
-
-	public List getChildFragments() {
-		updateClients();
-		return super.getChildFragments();
-	}
-
-	public void setTaskModel(TaskModel taskModel) {
-		super.setTaskModel(taskModel);
-		updateClients();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/RunOnServerWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/RunOnServerWizardFragment.java
deleted file mode 100644
index d766839..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/RunOnServerWizardFragment.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 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.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IModuleArtifact;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
-import org.eclipse.wst.server.ui.wizard.WizardFragment;
-/**
- * A fragment used for the Run on Server wizard.
- */
-public class RunOnServerWizardFragment extends WizardFragment {
-	protected IServer server;
-	protected IModule module;
-	protected IModuleArtifact moduleArtifact;
-
-	/**
-	 * Create the Run on Server wizard with all pages.
-	 * 
-	 * @param module
-	 * @param launchMode
-	 * @param moduleArtifact
-	 */
-	public RunOnServerWizardFragment(IModule module, String launchMode, IModuleArtifact moduleArtifact) {
-		super();
-		this.module = module;
-		this.moduleArtifact = moduleArtifact;
-	}
-
-	/**
-	 * Create the Run on Server wizard with a default server.
-	 * 
-	 * @param server a server
-	 * @param launchMode
-	 * @param moduleArtifact
-	 */
-	public RunOnServerWizardFragment(IServer server, String launchMode, IModuleArtifact moduleArtifact) {
-		super();
-		this.server = server;
-		this.moduleArtifact = moduleArtifact;
-	}
-
-	protected void createChildFragments(List list) {
-		if (server == null) {
-			list.add(new NewServerWizardFragment(module));
-			
-			list.add(WizardTaskUtil.TempSaveRuntimeFragment);
-			list.add(WizardTaskUtil.TempSaveServerFragment);
-			
-			list.add(new ModifyModulesWizardFragment(module));
-		}
-		
-		list.add(new TasksWizardFragment());
-		
-		list.add(WizardTaskUtil.SaveRuntimeFragment);
-		list.add(WizardTaskUtil.SaveServerFragment);
-		if (server == null)
-			list.add(WizardTaskUtil.SaveHostnameFragment);
-		
-		list.add(new OptionalClientWizardFragment(moduleArtifact));
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/SelectClientWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/SelectClientWizardFragment.java
deleted file mode 100644
index f27eb75..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/SelectClientWizardFragment.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.server.ui.internal.wizard.fragment;
-
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.wst.server.core.internal.IClient;
-import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
-import org.eclipse.wst.server.ui.internal.wizard.page.SelectClientComposite;
-import org.eclipse.wst.server.ui.wizard.WizardFragment;
-import org.eclipse.wst.server.ui.wizard.IWizardHandle;
-/**
- * A fragment used to select a client.
- */
-public class SelectClientWizardFragment extends WizardFragment {
-	public SelectClientWizardFragment() {
-		super();
-	}
-
-	public boolean hasComposite() {
-		return true;
-	}
-
-	public Composite createComposite(Composite parent, IWizardHandle wizard) {
-		return new SelectClientComposite(parent, wizard, getTaskModel());
-	}
-
-	public boolean isComplete() {
-		try {
-			IClient[] clients = (IClient[]) getTaskModel().getObject(WizardTaskUtil.TASK_CLIENTS);
-			if (clients == null || clients.length < 2)
-				return true;
-		} catch (Exception e) {
-			return true;
-		}
-		
-		return getTaskModel().getObject(WizardTaskUtil.TASK_CLIENT) != null;
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ServerConfigurationWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ServerConfigurationWizardFragment.java
new file mode 100644
index 0000000..16803d5
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ServerConfigurationWizardFragment.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.wizard.fragment;
+
+import org.eclipse.wst.server.ui.wizard.WizardFragment;
+/**
+ * 
+ */
+public class ServerConfigurationWizardFragment extends WizardFragment {
+	public ServerConfigurationWizardFragment() {
+		// do nothing
+	}
+	
+	public void enter() {
+		//TaskModel model = getTaskModel();
+		//IRuntime runtime = (IRuntime) model.getObject(TaskModel.TASK_RUNTIME);
+		//IServerWorkingCopy server = (IServerWorkingCopy) model.getObject(TaskModel.TASK_SERVER);
+		
+		//IServerType type = server.getServerType();
+		/*if (type.hasServerConfiguration() && server.getServerConfiguration() == null) {
+			try {
+				IFile file = null;
+				if (ServerCore.getServerPreferences().isCreateResourcesInWorkspace())
+					file = ServerUtil.getUnusedServerConfigurationFile(WizardUtil.getServerProject(), type.getServerConfigurationType());
+				
+				IServerConfigurationWorkingCopy serverConfiguration = type.getServerConfigurationType().importFromRuntime(null, file, runtime, new NullProgressMonitor());
+				ServerUtil.setServerConfigurationDefaultName(serverConfiguration);
+				model.putObject(TaskModel.TASK_SERVER_CONFIGURATION, serverConfiguration);
+				server.setServerConfiguration(serverConfiguration);
+				updateChildFragments();
+			} catch (Exception e) {
+				Trace.trace(Trace.SEVERE, "Could not create configuration", e);
+			}
+		}*/
+	}
+
+	/*protected void createChildFragments(List list) {
+		IServerWorkingCopy server = (IServerWorkingCopy) getTaskModel().getObject(TaskModel.TASK_SERVER);
+		IServerConfiguration serverConfiguration = null;
+		if (server != null)
+			serverConfiguration = server.getServerConfiguration();
+		if (serverConfiguration != null) {
+			WizardFragment sub = ServerUICore.getWizardFragment(serverConfiguration.getServerConfigurationType().getId());
+			if (sub != null)
+				list.add(sub);
+		}
+	}*/
+}
\ 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 aaed110..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
@@ -22,7 +22,6 @@
 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.WizardTaskUtil;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
  * 
@@ -114,7 +113,7 @@
 	}
 
 	protected void createChildFragments(List list) {
-		if (tasks == null || tasks.isEmpty())
+		if (tasks == null)
 			return;
 		
 		int TASKS_PER_PAGE = 5;
@@ -147,7 +146,7 @@
 			tasks = null;
 			return;
 		}
-		
+
 		IServerAttributes server = (IServerAttributes) getTaskModel().getObject(TaskModel.TASK_SERVER);
 		List modules = (List) getTaskModel().getObject(TaskModel.TASK_MODULES);
 		
@@ -159,24 +158,17 @@
 					return true;
 				}
 			}, null);
-			
+
 			modules = moduleList;
 		}
 		
 		if (server != null && modules != null) {
-			hasOptionalTasks = false;
-			hasPreferredTasks = false;
-			List taskList = new ArrayList(5);
+			List taskList = new ArrayList();
 			createTasks(taskList, server, modules);
 			
 			if (tasks == null || !tasks.equals(taskList)) {
 				tasks = taskList;
 				updateChildFragments();
-				
-				boolean b = tasks == null || !tasks.isEmpty();
-				if (hasOptionalTasks)
-					b = true;
-				getTaskModel().putObject(WizardTaskUtil.TASK_HAS_TASKS, new Boolean(b));
 			}
 		}
 	}
@@ -189,7 +181,7 @@
 		List disabledTasks = ((Server)server).getDisabledPreferredPublishOperationIds();
 		PublishOperation[] tasks2 = ((Server)server).getAllTasks(modules);
 		for (int j = 0; j < tasks2.length; j++) {
-			int kind = tasks2[j].getKind();
+			int kind = tasks2[j].getKind(); 
 			String id = ((Server)server).getPublishOperationId(tasks2[j]);
 			if (kind == PublishOperation.OPTIONAL || kind == PublishOperation.PREFERRED)
 				hasOptionalTasks = true;
@@ -219,6 +211,10 @@
 		return sti;
 	}
 
+	public boolean hasComposite() {
+		return false;
+	}
+
 	/**
 	 * @see WizardFragment#performFinish(IProgressMonitor)
 	 */
@@ -264,4 +260,34 @@
 			wc.save(true, monitor);
 		monitor.done();
 	}
+
+	/**
+	 * Return <code>true</code> if this wizard has tasks.
+	 * 
+	 * @return <code>true</code> if this wizard has tasks, and <code>false</code>
+	 *    otherwise
+	 */
+	public boolean hasTasks() {
+		return tasks == null || !tasks.isEmpty();
+	}
+	
+	/**
+	 * Return <code>true</code> if this wizard has optional tasks.
+	 * 
+	 * @return <code>true</code> if this wizard has optional tasks, and
+	 *    <code>false</code> otherwise
+	 */
+	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/ElementCreationCache.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ElementCreationCache.java
new file mode 100644
index 0000000..91eaa79
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ElementCreationCache.java
@@ -0,0 +1,113 @@
+/**********************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.wst.server.ui.internal.wizard.page;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IServerType;
+import org.eclipse.wst.server.core.IServerWorkingCopy;
+/**
+ * A helper class used to cache the creation of server elements.
+ */
+public class ElementCreationCache {
+	protected Map elementCache;
+	protected Map taskCache;
+
+	/**
+	 * ElementCreationCache constructor comment.
+	 */
+	public ElementCreationCache() {
+		super();
+		elementCache = new HashMap();
+		taskCache = new HashMap();
+	}
+	
+	/**
+	 * Return the key to use for the given factory.
+	 *
+	 * @param type the server type
+	 * @param isLocalhost true if the server is local
+	 * @return the key
+	 */
+	protected String getKey(IServerType type, boolean isLocalhost) {
+		return type.getId() + "|" + isLocalhost + "|";
+	}
+
+	/**
+	 * Returns a server. 
+	 *
+	 * @param type
+	 * @param isLocalhost true if the server is local
+	 * @param monitor a progress monitor
+	 * @return a server working copy
+	 * @throws CoreException if anything goes wrong
+	 */
+	public IServerWorkingCopy getServer(IServerType type, boolean isLocalhost, IProgressMonitor monitor) throws CoreException {
+		try {
+			IServerWorkingCopy server = getCachedServer(type, isLocalhost);
+			if (server != null)
+				return server;
+		} catch (Exception e) {
+			// ignore
+		}
+	
+		try {
+			IFile file = null;
+			//if (ServerPreferences.getInstance().isCreateResourcesInWorkspace())
+			//	file = ServerUtil.getUnusedServerFile(WizardUtil.getServerProject(), type);
+			
+			IServerWorkingCopy server = type.createServer(null, file, (IRuntime)null, monitor);
+			elementCache.put(getKey(type, isLocalhost), server);
+			return server;
+		} catch (CoreException ce) {
+			throw ce;
+		}
+	}
+
+	/**
+	 * Returns a cached server resource. 
+	 *
+	 * @param type the server type
+	 * @param isLocalhost true if the server is local
+	 * @return a working copy
+	 */
+	public IServerWorkingCopy getCachedServer(IServerType type, boolean isLocalhost) {
+		try {
+			IServerWorkingCopy server = (IServerWorkingCopy) elementCache.get(getKey(type, isLocalhost));
+			if (server != null)
+				return server;
+		} catch (Exception e) {
+			// ignore
+		}
+
+		return null;
+	}
+
+	/**
+	 * Clears a cached server resource. 
+	 *
+	 * @param type the server type
+	 * @param isLocalhost true if the server is local
+	 */
+	public void clearCachedServer(IServerType type, boolean isLocalhost) {
+		try {
+			elementCache.remove(getKey(type, isLocalhost));
+		} catch (Exception e) {
+			// ignore
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/Extension2Composite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/Extension2Composite.java
deleted file mode 100644
index 5263f01..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/Extension2Composite.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.server.ui.internal.wizard.page;
-
-import org.eclipse.jface.dialogs.Dialog;
-
-import org.eclipse.update.core.IFeature;
-import org.eclipse.wst.server.core.TaskModel;
-import org.eclipse.wst.server.ui.internal.Messages;
-import org.eclipse.wst.server.ui.internal.SWTUtil;
-import org.eclipse.wst.server.ui.internal.viewers.ExtensionComposite;
-import org.eclipse.wst.server.ui.internal.wizard.ExtensionWizard;
-import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
-import org.eclipse.wst.server.ui.wizard.IWizardHandle;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-/**
- * A composite used to select a server to install.
- */
-public class Extension2Composite extends Composite {
-	private TaskModel taskModel;
-	private IWizardHandle wizard;
-	private ExtensionComposite comp;
-
-	/**
-	 * Create a new NewInstallableServerComposite.
-	 * 
-	 * @param parent a parent composite
-	 * @param taskModel a task model
-	 * @param wizard the wizard this composite is contained in
-	 */
-	public Extension2Composite(Composite parent, TaskModel taskModel, IWizardHandle wizard) {
-		super(parent, SWT.NONE);
-		this.taskModel = taskModel;
-		this.wizard = wizard;
-		
-		createControl();
-	}
-
-	/**
-	 * Creates the UI of the page.
-	 */
-	protected void createControl() {
-		GridLayout layout = new GridLayout();
-		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
-		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		layout.numColumns = 3;
-		setLayout(layout);
-		//WorkbenchHelp.setHelp(this, ContextIds.SELECT_CLIENT_WIZARD);
-		
-		Label label = new Label(this, SWT.WRAP);
-		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
-		data.horizontalSpan = 3;
-		data.widthHint = 225;
-		label.setLayoutData(data);
-		label.setText(Messages.wizNewInstallableServerMessage);
-		
-		comp = new ExtensionComposite(this, SWT.NONE, new ExtensionComposite.FeatureSelectionListener() {
-			public void featureSelected(IFeature feature) {
-				handleSelection(feature);
-			}
-		});
-		data = new GridData(GridData.FILL_BOTH);
-		data.heightHint = 200;
-		comp.setLayoutData(data);
-		
-		Dialog.applyDialogFont(this);
-		
-		/*Job job = new Job("Downloading information") {
-			public IStatus run(IProgressMonitor monitor) {
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						try {
-							comp.deferredInitialize(new NullProgressMonitor());
-						} catch (Exception e) {
-							// ignore - view has already been closed
-						}
-					}
-				});
-				return Status.OK_STATUS;
-			}
-		};
-		
-		job.setSystem(true);
-		job.setPriority(Job.SHORT);
-		job.schedule();*/
-		
-		/*Thread t= new Thread() {
-			public void run() {
-				Display.getDefault().asyncExec(new Runnable() {
-					public void run() {
-						runBackground();
-					}
-				});
-			}
-		};
-		t.start();*/
-		//runBackground();
-	}
-
-	/*protected void runBackground() {
-		IRunnableWithProgress runnable = new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) {
-				comp.deferredInitialize(monitor);
-			}
-		};
-		try {
-			wizard.run(true, false, runnable);
-		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error with runnable", e); //$NON-NLS-1$
-		}
-	}*/
-
-	protected void handleSelection(IFeature feature) {
-		taskModel.putObject(WizardTaskUtil.TASK_FEATURE, feature);
-		ExtensionWizard.invalidateLicense(taskModel);
-		wizard.update();
-	}
-}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/LicenseComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/LicenseComposite.java
index 69905e2..1ba894b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/LicenseComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/LicenseComposite.java
@@ -14,48 +14,22 @@
 
 import org.eclipse.wst.server.core.TaskModel;
 import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.SWTUtil;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.LicenseWizardFragment;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Text;
 /**
  * A composite used to accept a license.
  */
 public class LicenseComposite extends Composite {
-	class LicenseLayout extends Layout {
-		private static final int INDENT = 15;
-		private static final int SPACING = 5;
-		
-		protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
-			if (wHint < 200)
-				wHint = 200;
-			if (hHint < 300)
-				hHint = 300;
-			return new Point(wHint, hHint);
-		}
-
-		protected void layout(Composite composite, boolean flushCache) {
-			Control[] children = composite.getChildren();
-			Point p1 = children[1].computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
-			Point p2 = children[2].computeSize(SWT.DEFAULT, SWT.DEFAULT, flushCache);
-			
-			Rectangle r = composite.getClientArea();
-			
-			children[2].setBounds(r.x + INDENT, r.y + r.height - p2.y, r.width - INDENT, p2.y);
-			children[1].setBounds(r.x + INDENT, r.y + r.height - p2.y - p1.y - SPACING, r.width - INDENT, p1.y);
-			children[0].setBounds(r.x, r.y, r.width, r.height - p1.y - p2.y - SPACING * 3);
-		}
-	}
-
 	protected TaskModel taskModel;
 	protected IWizardHandle wizard;
 	protected Text licenseText;
@@ -82,13 +56,27 @@
 	 * Creates the UI of the page.
 	 */
 	protected void createControl() {
-		setLayout(new LicenseLayout());
+		GridLayout layout = new GridLayout();
+		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
+		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		layout.numColumns = 1;
+		setLayout(layout);
+		//WorkbenchHelp.setHelp(this, ContextIds.SELECT_CLIENT_WIZARD);
 		
 		licenseText = new Text(this, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.READ_ONLY | SWT.WRAP);
+		GridData data = new GridData(GridData.FILL_BOTH);
+		//data.widthHint = 200;
+		licenseText.setLayoutData(data);
 		licenseText.setBackground(licenseText.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
 		
 		accept = new Button(this, SWT.RADIO);
 		accept.setText(Messages.wizLicenseAccept);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
+		data.horizontalIndent = 15;
+		data.verticalIndent = 5;
+		accept.setLayoutData(data);
 		accept.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				accepted = accept.getSelection();
@@ -98,6 +86,10 @@
 		});
 		
 		decline = new Button(this, SWT.RADIO);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
+		data.horizontalIndent = 15;
+		data.verticalIndent = 2;
+		decline.setLayoutData(data);
 		decline.setText(Messages.wizLicenseDecline);
 		
 		updateLicense();
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 b2310eb..602d166 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
@@ -31,8 +31,7 @@
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerComparator;
-import org.eclipse.osgi.util.NLS;
+import org.eclipse.jface.viewers.ViewerSorter;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
@@ -53,11 +52,11 @@
  * A wizard page used to add and remove modules.
  */
 public class ModifyModulesComposite extends Composite {
-	private static final String ROOT = "root";
-
 	protected IWizardHandle wizard;
 
 	protected IServerAttributes server;
+	protected IRuntime runtime;
+	protected boolean runtimeDirty;
 
 	protected Map childModuleMap = new HashMap();
 	protected Map parentModuleMap = new HashMap();
@@ -81,7 +80,6 @@
 
 	// a module that must be kept on the server
 	protected IModule requiredModule;
-	protected boolean isComplete = true;
 
 	// the parent modules of the above modules. at least one of these modules
 	// must be kept on the server
@@ -229,10 +227,39 @@
 	}
 
 	public void setServer(IServerAttributes server) {
-		if (server == this.server)
+		if (isVisible())
 			return;
-
+		
+		// see bug 185875
+		if (server == this.server) {
+			if (server == null)
+				return;
+			if (runtime == this.runtime) {
+				if (runtime == null)
+					return;
+				if (runtime instanceof IRuntimeWorkingCopy) {
+					IRuntimeWorkingCopy wc = (IRuntimeWorkingCopy) runtime;
+					if (wc.isDirty() == runtimeDirty)
+						return;
+				} else
+					return;
+			}
+		}
+		
 		this.server = server;
+		if (server == null)
+			runtime = null;
+		else
+			runtime = server.getRuntime();
+		runtimeDirty = false;
+		if (runtime != null) {
+			if (runtime instanceof IRuntimeWorkingCopy) {
+				IRuntimeWorkingCopy wc = (IRuntimeWorkingCopy) runtime;
+				if (wc.isDirty())
+					runtimeDirty = true;
+			}
+		}
+		
 		originalModules = new ArrayList();
 		deployed = new ArrayList();
 		modules = new ArrayList();
@@ -271,7 +298,7 @@
 		}
 		if (requiredModules != null && !deployed.contains(requiredModules[0]))
 			deployed.add(requiredModules[0]);
-		
+
 		// get remaining modules
 		IModule[] modules2 = ServerUtil.getModules(server.getServerType().getRuntimeType().getModuleTypes());
 		if (modules2 != null) {
@@ -299,7 +326,7 @@
 				}
 			}
 		}
-		
+
 		// build child map
 		Iterator iterator = deployed.iterator();
 		while (iterator.hasNext()) {
@@ -356,8 +383,7 @@
 			}
 		}
 		
-		//if (availableTreeViewer != null && add != null && add.isVisible())
-		/*if (availableTreeViewer != null)
+		if (availableTreeViewer != null)
 			Display.getDefault().syncExec(new Runnable() {
 				public void run() {
 					try { // update trees if we can
@@ -368,25 +394,10 @@
 						// ignore
 					}
 				}
-			});*/
+			});
 		updateTaskModel();
 	}
-
-	public void setVisible(boolean b) {
-		Display.getDefault().syncExec(new Runnable() {
-			public void run() {
-				try { // update trees if we can
-					availableTreeViewer.refresh();
-					deployedTreeViewer.refresh();
-					setEnablement();
-				} catch (Exception e) {
-					// ignore
-				}
-			}
-		});
-		super.setVisible(b);
-	}
-
+	
 	public void setTaskModel(TaskModel model) {
 		this.taskModel = model;
 	}
@@ -402,13 +413,13 @@
 		setLayout(layout);
 		setFont(getParent().getFont());
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, ContextIds.MODIFY_MODULES_COMPOSITE);
-		
+
 		Label label = new Label(this, SWT.NONE);
 		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
 		data.horizontalSpan = 3;
 		label.setLayoutData(data);
 		label.setText(Messages.wizModuleMessage);
-		
+
 		label = new Label(this, SWT.NONE);
 		label.setText(Messages.wizModuleAvailableList);
 		
@@ -432,7 +443,6 @@
 				if (obj == null)
 					availableTreeViewer.refresh(true);
 				else {
-					obj = ServerUIPlugin.adaptLabelChangeObjects(obj);
 					int size = obj.length;
 					for (int i = 0; i < size; i++)
 						availableTreeViewer.refresh(obj[i], true);
@@ -441,18 +451,8 @@
 		});
 		availableTreeViewer.setLabelProvider(labelProvider);
 		availableTreeViewer.setContentProvider(new AvailableContentProvider());
-		availableTreeViewer.setComparator(new ViewerComparator() {
-			public int compare(Viewer viewer, Object e1, Object e2) {
-				if (e1 instanceof ModuleServer && e2 instanceof ModuleServer) {
-					ModuleServer s1 = (ModuleServer) e1;
-					ModuleServer s2 = (ModuleServer) e2;
-					return (s1.module[s1.module.length - 1].getName().compareToIgnoreCase(s2.module[s2.module.length - 1].getName()));
-				}
-				
-				return super.compare(viewer, e1, e2);
-			}
-		});
-		availableTreeViewer.setInput(ROOT);
+		availableTreeViewer.setSorter(new ViewerSorter());
+		availableTreeViewer.setInput("root");
 		
 		availableTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
@@ -539,18 +539,8 @@
 		});
 		deployedTreeViewer.setLabelProvider(labelProvider);
 		deployedTreeViewer.setContentProvider(new DeployedContentProvider());
-		deployedTreeViewer.setComparator(new ViewerComparator() {
-			public int compare(Viewer viewer, Object e1, Object e2) {
-				if (e1 instanceof ModuleServer && e2 instanceof ModuleServer) {
-					ModuleServer s1 = (ModuleServer) e1;
-					ModuleServer s2 = (ModuleServer) e2;
-					return (s1.module[s1.module.length - 1].getName().compareToIgnoreCase(s2.module[s2.module.length - 1].getName()));
-				}
-				
-				return super.compare(viewer, e1, e2);
-			}
-		});
-		deployedTreeViewer.setInput(ROOT);
+		deployedTreeViewer.setSorter(new ViewerSorter());
+		deployedTreeViewer.setInput("root");
 		
 		deployedTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
@@ -571,14 +561,14 @@
 		Dialog.applyDialogFont(this);
 	}
 
-	protected ModuleServer getAvailableSelection() {
+	protected IModule getAvailableSelection() {
 		IStructuredSelection sel = (IStructuredSelection) availableTreeViewer.getSelection();
-		return (ModuleServer) sel.getFirstElement();
+		return getModule((ModuleServer) sel.getFirstElement());
 	}
 
-	protected ModuleServer getDeployedSelection() {
+	protected IModule getDeployedSelection() {
 		IStructuredSelection sel = (IStructuredSelection) deployedTreeViewer.getSelection();
-		return (ModuleServer) sel.getFirstElement();
+		return getModule((ModuleServer) sel.getFirstElement());
 	}
 
 	protected static IModule getModule(ModuleServer ms) {
@@ -592,75 +582,53 @@
 		boolean enabled = false;
 		wizard.setMessage(null, IMessageProvider.NONE);
 		
-		int count = 0;
-		if (requiredModules != null) {
-			// count how many of requiredModules are deployed
-			int size = requiredModules.length;
-			for (int i = 0; i < size; i++) {
-				if (deployed.contains(requiredModules[i]))
-					count++;
-			}
-		}
-		
-		// give error if there are more than one possible required modules and none are
-		// added to the server
-		isComplete = true;
-		if (requiredModules != null && requiredModules.length > 1 && count == 0) {
-			String s = "";
-			int size = requiredModules.length;
-			for (int i = 0; i < size; i++) {
-				if (i > 0)
-					s += " | ";
-				s += requiredModules[i].getName();
-			}
-			wizard.setMessage(NLS.bind(Messages.wizModuleRequiredModules, s), IMessageProvider.ERROR);
-			isComplete = false;
-		}
-		
-		// selection specific messages
-		ModuleServer ms = getAvailableSelection();
-		if (ms == null || ms.module == null ||  ms.module.length > 1) {
-			add.setEnabled(false);
-		} else {
-			IModule module = getModule(ms);
-			if (module != null) {
-				try {
-					IStatus status = (IStatus) errorMap.get(module);
-					if (modules.contains(module)) {
-						if (status == null)
-							enabled = true;
-						else if (status.getSeverity() == IStatus.ERROR)
-							wizard.setMessage(status.getMessage(), IMessageProvider.ERROR);
-						else if (status.getSeverity() == IStatus.WARNING)
-							wizard.setMessage(status.getMessage(), IMessageProvider.WARNING);
-						else if (status.getSeverity() == IStatus.INFO)
-							wizard.setMessage(status.getMessage(), IMessageProvider.INFORMATION);
-					}
-				} catch (Exception e) {
-					// ignore
+		IModule module = getAvailableSelection();		
+		if (module != null) {
+			try {
+				IStatus status = (IStatus) errorMap.get(module);
+				if (modules.contains(module)) {
+					if (status == null)
+						enabled = true;
+					else if (status.getSeverity() == IStatus.ERROR)
+						wizard.setMessage(status.getMessage(), IMessageProvider.ERROR);
+					else if (status.getSeverity() == IStatus.WARNING)
+						wizard.setMessage(status.getMessage(), IMessageProvider.WARNING);
+					else if (status.getSeverity() == IStatus.INFO)
+						wizard.setMessage(status.getMessage(), IMessageProvider.INFORMATION);
 				}
+			} catch (Exception e) {
+				// ignore
 			}
-			add.setEnabled(enabled);
 		}
+		
+		add.setEnabled(enabled);
 		addAll.setEnabled(modules.size() > 0);
 		
-		enabled = true;
-		ms = getDeployedSelection();
-		if (ms == null || ms.module == null ||  ms.module.length > 1) {
-			remove.setEnabled(false);
-		} else {
-			IModule module = getModule(ms);
-			if (module != null && deployed.contains(module)) {
-				// provide error about removing required single module
-				if (requiredModules != null && requiredModules.length == 1 &&
-						requiredModules[0].equals(module)) {
-					wizard.setMessage(NLS.bind(Messages.wizModuleRequiredModule, module.getName()), IMessageProvider.ERROR);
-					enabled = false;
+		enabled = false;
+		module = getDeployedSelection();
+		if (module != null && deployed.contains(module)) {
+			try {
+				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);
 		}
-	
+		remove.setEnabled(enabled);
 		if (requiredModules == null)
 			removeAll.setEnabled(deployed.size() > 0);
 		else
@@ -673,7 +641,7 @@
 			modules.toArray(modules2);
 			moveAll(modules2, true);
 		} else
-			moveAll(new IModule[] { getModule(getAvailableSelection()) }, true);
+			moveAll(new IModule[] { getAvailableSelection() }, true);
 		updateTaskModel();
 	}
 
@@ -698,7 +666,7 @@
 			
 			moveAll(modules2, false);
 		} else
-			moveAll(new IModule[] { getModule(getDeployedSelection()) }, false);
+			moveAll(new IModule[] { getDeployedSelection() }, false);
 		updateTaskModel();
 	}
 
@@ -715,22 +683,17 @@
 		Iterator iterator = list.iterator();
 		while (iterator.hasNext()) {
 			IModule module = (IModule) iterator.next();
-			ModuleServer ms = new ModuleServer(null, new IModule[] { module });
 			if (add2) {
 				modules.remove(module);
 				deployed.add(module);
-				availableTreeViewer.remove(ms);
-				deployedTreeViewer.add(ROOT, ms);
 			} else {
 				modules.add(module);
 				deployed.remove(module);
-				availableTreeViewer.add(ROOT, ms);
-				deployedTreeViewer.remove(ms);
 			}
 		}
 		
-		//availableTreeViewer.refresh();
-		//deployedTreeViewer.refresh();
+		availableTreeViewer.refresh();
+		deployedTreeViewer.refresh();
 
 		setEnablement();
 	}
@@ -800,8 +763,4 @@
 		
 		return map;
 	}
-
-	public boolean isComplete() {
-		return isComplete;
-	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewInstallableServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewInstallableServerComposite.java
new file mode 100644
index 0000000..6292e32
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewInstallableServerComposite.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.wizard.page;
+
+import org.eclipse.jface.dialogs.Dialog;
+
+import org.eclipse.wst.server.core.TaskModel;
+import org.eclipse.wst.server.core.internal.IInstallableServer;
+import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.SWTUtil;
+import org.eclipse.wst.server.ui.internal.viewers.InstallableServerComposite;
+import org.eclipse.wst.server.ui.internal.wizard.NewInstallableServerWizard;
+import org.eclipse.wst.server.ui.wizard.IWizardHandle;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+/**
+ * A composite used to select a server to install.
+ */
+public class NewInstallableServerComposite extends Composite {
+	private TaskModel taskModel;
+	private IWizardHandle wizard;
+
+	/**
+	 * Create a new NewInstallableServerComposite.
+	 * 
+	 * @param parent a parent composite
+	 * @param taskModel a task model
+	 * @param wizard the wizard this composite is contained in
+	 */
+	public NewInstallableServerComposite(Composite parent, TaskModel taskModel, IWizardHandle wizard) {
+		super(parent, SWT.NONE);
+		this.taskModel = taskModel;
+		this.wizard = wizard;
+		
+		createControl();
+	}
+
+	/**
+	 * Creates the UI of the page.
+	 */
+	protected void createControl() {
+		GridLayout layout = new GridLayout();
+		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
+		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		layout.numColumns = 3;
+		setLayout(layout);
+		//WorkbenchHelp.setHelp(this, ContextIds.SELECT_CLIENT_WIZARD);
+		
+		Label label = new Label(this, SWT.WRAP);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
+		data.horizontalSpan = 3;
+		data.widthHint = 225;
+		label.setLayoutData(data);
+		label.setText(Messages.wizNewInstallableServerMessage);
+		
+		InstallableServerComposite comp = new InstallableServerComposite(this, SWT.NONE, new InstallableServerComposite.InstallableServerSelectionListener() {
+			public void installableServerSelected(IInstallableServer server) {
+				handleSelection(server);
+			}
+		});
+		data = new GridData(GridData.FILL_BOTH);
+		data.heightHint = 200;
+		comp.setLayoutData(data);
+		
+		Dialog.applyDialogFont(this);
+	}
+
+	protected void handleSelection(IInstallableServer server) {
+		taskModel.putObject("installableServer", server);
+		NewInstallableServerWizard.invalidateLicense(taskModel);
+		wizard.update();
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
index 30f51be..8960aca 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -71,10 +72,8 @@
 	protected String host;
 
 	protected IModuleType moduleType;
-	protected String serverTypeId;
-	protected boolean includeIncompatible;
 
-	protected ServerCreationCache cache = new ServerCreationCache();
+	protected ElementCreationCache cache = new ElementCreationCache();
 
 	/**
 	 * Creates a new server and server configuration.  If the initial
@@ -84,18 +83,14 @@
 	 * @param parent a parent composite
 	 * @param wizard a wizard handle
 	 * @param moduleType a module type
-	 * @param serverTypeId a server type id, or null
-	 * @param includeIncompatible true to include incompatible servers that support similar module types
 	 * @param listener a server selection listener
 	 */
-	public NewManualServerComposite(Composite parent, IWizardHandle2 wizard, IModuleType moduleType, String serverTypeId, boolean includeIncompatible, ServerSelectionListener listener) {
+	public NewManualServerComposite(Composite parent, IWizardHandle2 wizard, IModuleType moduleType, ServerSelectionListener listener) {
 		super(parent, SWT.NONE);
 		this.wizard = wizard;
 		this.listener = listener;
 		
 		this.moduleType = moduleType;
-		this.serverTypeId = serverTypeId;
-		this.includeIncompatible = includeIncompatible;
 		
 		createControl();
 		wizard.setMessage("", IMessageProvider.ERROR); //$NON-NLS-1$
@@ -118,13 +113,13 @@
 		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
 		whs.setHelp(this, ContextIds.NEW_SERVER_WIZARD);
 		
-		serverTypeComposite = new ServerTypeComposite(this, SWT.NONE, moduleType, serverTypeId, new ServerTypeComposite.ServerTypeSelectionListener() {
+		serverTypeComposite = new ServerTypeComposite(this, SWT.NONE, moduleType, new ServerTypeComposite.ServerTypeSelectionListener() {
 			public void serverTypeSelected(IServerType type2) {
 				handleTypeSelection(type2);
 				//WizardUtil.defaultSelect(parent, CreateServerWizardPage.this);
 			}
 		});
-		serverTypeComposite.setIncludeIncompatibleVersions(includeIncompatible);
+		serverTypeComposite.setIncludeIncompatibleVersions(true);
 		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
 		data.horizontalSpan = 3;
 		serverTypeComposite.setLayoutData(data);
@@ -191,15 +186,15 @@
 	}
 
 	/**
-	 * Load a server of the given type.
+	 * Return the current editable element.
 	 */
-	protected void loadServerImpl(IServerType serverType) {
+	protected void loadServerImpl(final IServerType serverType) {
 		server = null;
 		
 		if (serverType == null)
 			return;
 		
-		boolean isLocalhost = SocketUtil.isLocalhost(host);
+		final boolean isLocalhost = SocketUtil.isLocalhost(host);
 		
 		server = cache.getCachedServer(serverType, isLocalhost);
 		if (server != null) {
@@ -210,30 +205,51 @@
 			return;
 		}
 		
-		try {
-			server = cache.getServer(serverType, isLocalhost, null);
-			if (server != null) {
-				server.setHost(host);
-				ServerUtil.setServerDefaultName(server);
-				
-				if (serverType.hasRuntime() && server.getRuntime() == null) {
-					runtime = null;
-					updateRuntimes(serverType);
-					setRuntime(getDefaultRuntime());
+		final CoreException[] ce = new CoreException[1];
+		
+		IRunnableWithProgress runnable = new IRunnableWithProgress() {
+			public void run(IProgressMonitor monitor) {
+				try {
+					monitor = ProgressUtil.getMonitorFor(monitor);
+					int ticks = 200;
+					monitor.beginTask(NLS.bind(Messages.loadingTask, serverType.getName()), ticks);
 					
-					if (server.getServerType().hasServerConfiguration() && !runtime.getLocation().isEmpty())
-						((ServerWorkingCopy)server).importRuntimeConfiguration(runtime, null);
+					server = cache.getServer(serverType, isLocalhost, ProgressUtil.getSubMonitorFor(monitor, 200));
+					if (server != null) {
+						server.setHost(host);
+						ServerUtil.setServerDefaultName(server);
+						
+						if (serverType.hasRuntime() && server.getRuntime() == null) {
+							runtime = null;
+							updateRuntimes(serverType);
+							setRuntime(getDefaultRuntime());
+							
+							if (server.getServerType().hasServerConfiguration() && !runtime.getLocation().isEmpty())
+								((ServerWorkingCopy)server).importRuntimeConfiguration(runtime, null);
+						}
+						((ServerWorkingCopy)server).setDefaults(monitor);
+					}
+				} catch (CoreException cex) {
+					ce[0] = cex;
+					cache.clearCachedServer(serverType, isLocalhost);
+				} catch (Throwable t) {
+					Trace.trace(Trace.SEVERE, "Error creating element", t); //$NON-NLS-1$
+				} finally {
+					monitor.done();
 				}
-				((ServerWorkingCopy)server).setDefaults(null);
 			}
-		} catch (CoreException ce) {
-			Trace.trace(Trace.SEVERE, "Error creating server", ce);
+		};
+		try {
+			wizard.run(true, false, runnable);
+		} catch (Exception e) {
+			Trace.trace(Trace.SEVERE, "Error with runnable", e); //$NON-NLS-1$
+		}
+	
+		if (ce[0] != null) {
 			server = null;
 			runtime = null;
-			wizard.setMessage(ce.getLocalizedMessage(), IMessageProvider.ERROR);
-		}
-		
-		if (server == null)
+			wizard.setMessage(ce[0].getLocalizedMessage(), IMessageProvider.ERROR);
+		} else if (server == null)
 			wizard.setMessage(Messages.wizErrorServerCreationError, IMessageProvider.ERROR);
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
index 827ab25..06b33c3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,30 +10,19 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.wizard.page;
 
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
 import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.ui.internal.ContextIds;
 import org.eclipse.wst.server.ui.internal.ImageResource;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.SWTUtil;
-import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
-import org.eclipse.wst.server.ui.internal.Trace;
 import org.eclipse.wst.server.ui.internal.viewers.RuntimeTypeComposite;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Tree;
@@ -43,21 +32,16 @@
 public class NewRuntimeComposite extends Composite {
 	protected Tree tree;
 	protected TreeViewer treeViewer;
-	protected Button createServer;
 
 	protected IRuntimeWorkingCopy runtime;
-
-	// cache of created runtimes and servers
-	protected Map cache = new HashMap();
-	protected Map serverCache = new HashMap();
-
+	protected Map runtimeMap = new HashMap();
+	
 	protected TaskModel taskModel;
 	protected IWizardHandle wizard;
-
+	
 	protected String type;
 	protected String version;
 	protected String runtimeTypeId;
-	protected IServerType serverType;
 
 	public NewRuntimeComposite(Composite parent, IWizardHandle wizard, TaskModel tm, String type, String version, String runtimeTypeId) {
 		super(parent, SWT.NONE);
@@ -84,8 +68,6 @@
 		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
 		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
 		setLayout(layout);
-		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
-		whs.setHelp(this, ContextIds.NEW_RUNTIME_WIZARD);
 		
 		final RuntimeTypeComposite comp = new RuntimeTypeComposite(this, SWT.NONE, true, new RuntimeTypeComposite.RuntimeTypeSelectionListener() {
 			public void runtimeTypeSelected(IRuntimeType runtimeType) {
@@ -93,18 +75,8 @@
 			}
 		}, type, version, runtimeTypeId);
 		GridData data = new GridData(GridData.FILL_BOTH);
-		data.heightHint = 300;
+		data.heightHint = 250;
 		comp.setLayoutData(data);
-		
-		createServer = new Button(this, SWT.CHECK);
-		createServer.setText(Messages.wizNewRuntimeCreateServer);
-		createServer.setSelection(ServerUIPlugin.getPreferences().getCreateServerWithRuntime());
-		createServer.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				handleServer();
-				ServerUIPlugin.getPreferences().setCreateServerWithRuntime(createServer.getSelection());
-			}
-		});
 	}
 
 	protected void handleSelection(IRuntimeType runtimeType) {
@@ -113,7 +85,7 @@
 		else {
 			try {
 				runtime = null;
-				runtime = (IRuntimeWorkingCopy) cache.get(runtimeType);
+				runtime = (IRuntimeWorkingCopy) runtimeMap.get(runtimeType);
 			} catch (Exception e) {
 				// ignore
 			}
@@ -122,72 +94,17 @@
 					runtime = runtimeType.createRuntime(null, null);
 					ServerUtil.setRuntimeDefaultName(runtime);
 					if (runtime != null)
-						cache.put(runtimeType, runtime);
+						runtimeMap.put(runtimeType, runtime);
 				} catch (Exception e) {
 					// ignore
 				}
 			}
 		}
-		serverType = getCompatibleServerType(runtimeType);
-		handleServer();
-	}
 
-	protected void handleServer() {
-		boolean option = false;
-		if (serverType != null && serverType.hasRuntime())
-			option = true;
-		createServer.setVisible(option);
-		
-		if (option && createServer.getSelection()) {
-			IServerWorkingCopy server = getServer();
-			taskModel.putObject(TaskModel.TASK_SERVER, server);
-		} else
-			taskModel.putObject(TaskModel.TASK_SERVER, null);
-		
 		taskModel.putObject(TaskModel.TASK_RUNTIME, runtime);
 		wizard.update();
 	}
 
-	protected static IServerType getCompatibleServerType(IRuntimeType runtimeType) {
-		List list = new ArrayList();
-		IServerType[] serverTypes = ServerCore.getServerTypes();
-		int size = serverTypes.length;
-		for (int i = 0; i < size; i++) {
-			IRuntimeType rt = serverTypes[i].getRuntimeType();
-			if (rt.equals(runtimeType))
-				list.add(serverTypes[i]);
-		}
-		if (list.size() == 1)
-			return (IServerType) list.get(0);
-		return null;
-	}
-
-	/**
-	 * Get a server of the given type.
-	 */
-	protected IServerWorkingCopy getServer() {
-		if (serverType == null || runtime == null || !serverType.hasRuntime())
-			return null;
-		
-		IServerWorkingCopy server = (IServerWorkingCopy) serverCache.get(runtime);
-		if (server != null)
-			return server;
-		
-		try {
-			server = serverType.createServer(null, null, runtime, null);
-			if (server != null) {
-				server.setHost("localhost");
-				ServerUtil.setServerDefaultName(server);
-				serverCache.put(runtime, server);
-				return server;
-			}
-		} catch (CoreException ce) {
-			Trace.trace(Trace.SEVERE, "Error creating server", ce);
-		}
-		
-		return null;
-	}
-
 	public IRuntimeWorkingCopy getRuntime() {
 		return runtime;
 	}
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 0a63a26..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
@@ -31,7 +31,6 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.help.IWorkbenchHelpSystem;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IModuleType;
 import org.eclipse.wst.server.core.IRuntime;
@@ -44,7 +43,7 @@
 import org.eclipse.wst.server.core.ServerUtil;
 import org.eclipse.wst.server.ui.internal.*;
 import org.eclipse.wst.server.ui.internal.viewers.ServerComposite;
-import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
+import org.eclipse.wst.server.ui.internal.wizard.fragment.NewServerWizardFragment;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 /**
  * A wizard page used to select a server.
@@ -53,13 +52,11 @@
 	protected IWizardHandle wizard;
 	protected TaskModel taskModel;
 	protected IModule module;
-	protected IModuleType moduleType;
-	protected String serverTypeId;
 	protected String launchMode;
 	
-	protected static final byte MODE_EXISTING = WizardTaskUtil.MODE_EXISTING;
-	protected static final byte MODE_DETECT = WizardTaskUtil.MODE_DETECT;
-	protected static final byte MODE_MANUAL = WizardTaskUtil.MODE_MANUAL;
+	protected static final byte MODE_EXISTING = 0;
+	protected static final byte MODE_DETECT = 1;
+	protected static final byte MODE_MANUAL= 2;
 	protected byte mode;
 
 	protected Composite detectComp2;
@@ -69,12 +66,15 @@
 	protected NewManualServerComposite manualComp;
 	protected HostnameComposite manualHostComp;
 	protected ServerComposite existingComp;
-
+	
 	protected Composite stack;
 	protected StackLayout stackLayout; 
-
+	
 	protected String lastHostname;
-
+	
+	protected Button pref;
+	protected boolean preferred;
+	
 	protected IServerWorkingCopy existingWC;
 
 	/**
@@ -82,29 +82,6 @@
 	 * 
 	 * @param parent a parent composite
 	 * @param wizard a wizard handle
-	 * @param moduleType a module type, or null
-	 * @param serverTypeId a server type id, or null
-	 * @param launchMode a launch mode
-	 */
-	public NewServerComposite(Composite parent, IWizardHandle wizard, IModuleType moduleType, String serverTypeId, String launchMode) {
-		super(parent, SWT.NONE);
-		this.wizard = wizard;
-		this.moduleType = moduleType;
-		this.serverTypeId = serverTypeId;
-		this.launchMode = launchMode;
-		
-		wizard.setTitle(Messages.wizNewServerTitle);
-		wizard.setDescription(Messages.wizNewServerDescription);
-		wizard.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_WIZBAN_NEW_SERVER));
-		
-		createControl();
-	}
-
-	/**
-	 * Create a new NewServerComposite.
-	 * 
-	 * @param parent a parent composite
-	 * @param wizard a wizard handle
 	 * @param module a module
 	 * @param launchMode a launch mode
 	 */
@@ -113,7 +90,7 @@
 		this.wizard = wizard;
 		this.module = module;
 		this.launchMode = launchMode;
-		
+	
 		wizard.setTitle(Messages.wizNewServerTitle);
 		wizard.setDescription(Messages.wizNewServerDescription);
 		wizard.setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_WIZBAN_NEW_SERVER));
@@ -121,6 +98,10 @@
 		createControl();
 	}
 
+	public NewServerComposite(Composite parent, IWizardHandle wizard) {
+		this(parent, wizard, null, null);
+	}
+
 	protected Label createLabel(Composite parent, String text, int span) {
 		Label label = new Label(parent, SWT.WRAP);
 		label.setText(text);
@@ -161,12 +142,11 @@
 		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
 		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
 		setLayout(layout);
-		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
-		whs.setHelp(this, ContextIds.NEW_SERVER_WIZARD);
-		
+		//WorkbenchHelp.setHelp(this, ContextIds.SELECT_CLIENT_WIZARD);
+	
 		if (module != null)
 			createLabel(this, Messages.wizNewServerSelect, 1);
-		
+			
 		Button existing = null;
 		if (module != null) {
 			final Button predefined = createRadioButton(this, Messages.wizNewServerExisting, 1);
@@ -237,13 +217,16 @@
 		
 		if (module != null) {
 			// preferred server button
-			final Button pref = new Button(this, SWT.CHECK | SWT.WRAP);
+			pref = new Button(this, SWT.CHECK | SWT.WRAP);
 			pref.setText(Messages.wizSelectServerPreferred);
 			data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_END);
+			//pref.setSelection(true);
+			//preferred = true;
+			data.horizontalSpan = 1;
 			pref.setLayoutData(data);
 			pref.addSelectionListener(new SelectionAdapter() {
 				public void widgetSelected(SelectionEvent e) {
-					taskModel.putObject(WizardTaskUtil.TASK_DEFAULT_SERVER, new Boolean(pref.getSelection()));
+					preferred = pref.getSelection();
 				}
 			});
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(pref, ContextIds.SELECT_SERVER_PREFERENCE);
@@ -274,7 +257,7 @@
 		}
 		stack.layout();
 		if (taskModel != null) {
-			taskModel.putObject(WizardTaskUtil.TASK_MODE, new Byte(mode));
+			taskModel.putObject(NewServerWizardFragment.MODE, new Byte(mode));
 			updateTaskModel();
 		}
 	}
@@ -362,7 +345,7 @@
 						}
 						if (rootModules != null) {
 							if (rootModules.length == 0) {
-								wizard.setMessage(Messages.errorRootModule, IMessageProvider.ERROR);
+								wizard.setMessage("", IMessageProvider.ERROR);
 								server = null;
 							} else {
 								int size = rootModules.length;
@@ -439,11 +422,7 @@
 		manualComp2.setLayoutData(new GridData(GridData.FILL_BOTH));
 		
 		manualHostComp = createHostComposite(manualComp2);
-		IModuleType mt = moduleType;
-		boolean includeIncompatible = true;
-		if (moduleType != null)
-			includeIncompatible = false;
-		
+		IModuleType mt = null;
 		if (module != null)
 			mt = module.getModuleType();
 		
@@ -457,7 +436,7 @@
 			public void setMessage(String newMessage, int newType) {
 				wizard.setMessage(newMessage, newType);
 			}
-		}, mt, serverTypeId, includeIncompatible, new NewManualServerComposite.ServerSelectionListener() {
+		}, mt, new NewManualServerComposite.ServerSelectionListener() {
 			public void serverSelected(IServerAttributes server) {
 				updateTaskModel();
 			}
@@ -473,7 +452,7 @@
 
 		GridData data = new GridData(GridData.FILL_BOTH);
 		data.horizontalSpan = 3;
-		data.heightHint = 325;
+		data.heightHint = 300;
 		manualComp.setLayoutData(data);
 	}
 
@@ -493,7 +472,7 @@
 
 	public void setTaskModel(TaskModel model) {
 		taskModel = model;
-		taskModel.putObject(WizardTaskUtil.TASK_MODE, new Byte(mode));
+		taskModel.putObject(NewServerWizardFragment.MODE, new Byte(mode));
 		updateTaskModel();
 	}
 
@@ -517,7 +496,16 @@
 		else
 			return manualComp.getRuntime();
 	}
-
+	
+	/**
+	 * Returns true if this server should become the preferred server.
+	 * 
+	 * @return boolean
+	 */
+	public boolean isPreferredServer() {
+		return preferred;
+	}
+	
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/SelectClientComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/SelectClientComposite.java
index 3384a48..78462b0 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/SelectClientComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/SelectClientComposite.java
@@ -13,11 +13,9 @@
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.wst.server.core.TaskModel;
 import org.eclipse.wst.server.core.internal.IClient;
 import org.eclipse.wst.server.ui.ServerUICore;
 import org.eclipse.wst.server.ui.internal.*;
-import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
@@ -35,7 +33,6 @@
  */
 public class SelectClientComposite extends Composite {
 	protected IWizardHandle wizard;
-	protected TaskModel taskModel;
 
 	// the list of elements to select from
 	protected IClient[] clients;
@@ -54,17 +51,12 @@
 	 * 
 	 * @param parent a parent composite
 	 * @param wizard a wizard handle
-	 * @param taskModel a task model
+	 * @param clients an array of clients
 	 */
-	public SelectClientComposite(Composite parent, IWizardHandle wizard, TaskModel taskModel) {
+	public SelectClientComposite(Composite parent, IWizardHandle wizard, IClient[] clients) {
 		super(parent, SWT.NONE);
 		this.wizard = wizard;
-		this.taskModel = taskModel;
-		try {
-			clients = (IClient[]) taskModel.getObject(WizardTaskUtil.TASK_CLIENTS);
-		} catch (Exception e) {
-			// ignore
-		}
+		this.clients = clients;
 	
 		wizard.setTitle(Messages.wizSelectClientTitle);
 		wizard.setDescription(Messages.wizSelectClientDescription);
@@ -74,12 +66,21 @@
 	}
 
 	/**
+	 * Clears the selected client.
+	 */
+	public void clearSelectedClient() {
+		selectedClient = null;
+	}
+
+	/**
 	 * Creates the UI of the page.
 	 */
 	protected void createControl() {
 		GridLayout layout = new GridLayout();
 		layout.horizontalSpacing = SWTUtil.convertHorizontalDLUsToPixels(this, 4);
 		layout.verticalSpacing = SWTUtil.convertVerticalDLUsToPixels(this, 4);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
 		setLayout(layout);
 
 		IWorkbenchHelpSystem whs = PlatformUI.getWorkbench().getHelpSystem();
@@ -128,6 +129,15 @@
 	}
 
 	/**
+	 * Return the selected client.
+	 *
+	 * @return org.eclipse.wst.server.core.IClient
+	 */
+	public IClient getSelectedClient() {
+		return selectedClient;
+	}
+
+	/**
 	 * Handle the selection of a client.
 	 */
 	protected void handleSelection() {
@@ -137,19 +147,18 @@
 		else
 			selectedClient = clients[index];
 		
-		taskModel.putObject(WizardTaskUtil.TASK_CLIENT, selectedClient);
 		if (selectedClient != null)
 			wizard.setMessage(null, IMessageProvider.NONE);
 		else
 			wizard.setMessage("", IMessageProvider.ERROR);
-		
+	
 		String desc = null;
 		if (selectedClient != null)
 			desc = selectedClient.getDescription();
 		if (desc == null)
 			desc = "";
 		description.setText(desc);
-		
+	
 		wizard.update();
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ServerCreationCache.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ServerCreationCache.java
deleted file mode 100644
index 099428e..0000000
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ServerCreationCache.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**********************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     IBM Corporation - Initial API and implementation
- **********************************************************************/
-package org.eclipse.wst.server.ui.internal.wizard.page;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-
-import org.eclipse.wst.server.core.IRuntime;
-import org.eclipse.wst.server.core.IServerType;
-import org.eclipse.wst.server.core.IServerWorkingCopy;
-/**
- * A helper class used to cache the creation of servers.
- */
-public class ServerCreationCache {
-	protected Map cache;
-
-	/**
-	 * ServerCreationCache constructor comment.
-	 */
-	public ServerCreationCache() {
-		super();
-		cache = new HashMap();
-	}
-
-	/**
-	 * Return the key to use for the given server type.
-	 * 
-	 * @param type the server type
-	 * @param isLocalhost true if the server is local
-	 * @return the key
-	 */
-	private String getKey(IServerType type, boolean isLocalhost) {
-		return type.getId() + "|" + isLocalhost + "|";
-	}
-
-	/**
-	 * Returns a server, from the cache if possible and otherwise by creating
-	 *
-	 * @param type the server type
-	 * @param isLocalhost true if the server is local
-	 * @param monitor a progress monitor
-	 * @return a server working copy
-	 * @throws CoreException if anything goes wrong
-	 */
-	public IServerWorkingCopy getServer(IServerType type, boolean isLocalhost, IProgressMonitor monitor) throws CoreException {
-		IServerWorkingCopy server = getCachedServer(type, isLocalhost);
-		if (server != null)
-			return server;
-		
-		server = type.createServer(null, null, (IRuntime)null, monitor);
-		cache.put(getKey(type, isLocalhost), server);
-		return server;
-	}
-
-	/**
-	 * Returns a previously cached server, if one exists
-	 * 
-	 * @param type the server type
-	 * @param isLocalhost true if the server is local
-	 * @return a working copy
-	 */
-	public IServerWorkingCopy getCachedServer(IServerType type, boolean isLocalhost) {
-		try {
-			IServerWorkingCopy server = (IServerWorkingCopy) cache.get(getKey(type, isLocalhost));
-			if (server != null)
-				return server;
-		} catch (Exception e) {
-			// ignore
-		}
-		
-		return null;
-	}
-}
\ No newline at end of file
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 b5354b4..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
@@ -18,7 +18,6 @@
 import org.eclipse.wst.server.ui.internal.ImageResource;
 import org.eclipse.wst.server.ui.internal.Messages;
 import org.eclipse.wst.server.ui.internal.SWTUtil;
-import org.eclipse.wst.server.ui.internal.Trace;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.TasksWizardFragment;
 import org.eclipse.wst.server.ui.wizard.IWizardHandle;
 import org.eclipse.swt.SWT;
@@ -123,8 +122,10 @@
 				checkbox.setSelection(sti.isSelected());
 		}
 		
-		if (size == 0)
-			Trace.trace(Trace.SEVERE, "Task composite appeared with no tasks!");
+		if (size == 0) {
+			Label label = new Label(this, SWT.NONE);
+			label.setText(Messages.wizTaskNone);
+		}
 		
 		Dialog.applyDialogFont(this);
 		layout(true, true);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksLayout.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksLayout.java
index 378c106..17bfbd5 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksLayout.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksLayout.java
@@ -40,17 +40,17 @@
 		Control[] children = composite.getChildren();
 		Rectangle r = composite.getClientArea();
 		
-		int y = r.y + 5;
+		int y = r.y;
 		if (children != null) {
 			int size = children.length;
 			for (int i = 0; i < size; i++) {
 				if (i % 2 == 0) {
-					int h = children[i].computeSize(r.width - 10, SWT.DEFAULT).y;
-					children[i].setBounds(r.x + 5, y, r.width - 10, h);
+					int h = children[i].computeSize(r.width, SWT.DEFAULT).y;
+					children[i].setBounds(r.x, y, r.width, h);
 					y += h + verticalSpacing;
 				} else {
-					int h = Math.max(50, children[i].computeSize(r.width - 30, SWT.DEFAULT).y);
-					children[i].setBounds(r.x + 25, y, r.width - 30, h);
+					int h = Math.max(50, children[i].computeSize(r.width - 20, SWT.DEFAULT).y);
+					children[i].setBounds(r.x + 20, y, r.width - 20, h);
 					y += h + verticalSpacing;
 				}
 			}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java
index 800b824..d6e4d7b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java
@@ -183,7 +183,7 @@
 	 * state and the flow of the wizard will be incorrect. 
 	 * 
 	 * @param list a list to add the child fragments to
-	 */
+	 */	
 	protected void createChildFragments(List list) {
 		// do nothing
 	}