[108595] Design facets into the Web services framework.
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/plugin.xml b/bundles/org.eclipse.jst.ws.axis.creation.ui/plugin.xml
index 6f82010..bd5f93a 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/plugin.xml
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/plugin.xml
@@ -11,6 +11,7 @@
       </serverDefaulter>
    </extension>
    
+   <!--
    <extension point="org.eclipse.jst.ws.consumption.ui.webServiceRuntime">
   	<webServiceRuntime
     id="org.eclipse.jst.ws.axis.creation.axisWebServiceRT"
@@ -23,7 +24,8 @@
     class="org.eclipse.jst.ws.internal.axis.creation.ui.wsrt.AxisWebServiceRuntime">
   	</webServiceRuntime>
 	</extension> 
-
+   -->
+   
 	<extension point="org.eclipse.wst.command.env.ui.widgetRegistry">
        <widgetFactory   
              id="AxisBeanConfig"
@@ -37,5 +39,40 @@
              insertBeforeCommandId="org.eclipse.jst.ws.internal.axis.creation.ui.task.TDCheckAxisDeploymentDescriptors"
              class="org.eclipse.jst.ws.internal.axis.creation.ui.wsrt.AxisSkeletonConfigWidgetFactory"/>
     </extension> 
+    
+    <!-- M9 extensions -->
+    <extension point="org.eclipse.jst.ws.consumption.ui.runtimes">
+      <runtime
+        id="org.eclipse.jst.ws.axis.creation.axisWebServiceRT"
+        label="%LABEL_RUNTIME_AXIS_11"/>
+    </extension>
+
+    <!-- define support for Axis Java bean bottom up and top-down support in web projects -->
+    <extension point="org.eclipse.jst.ws.consumption.ui.serviceRuntimes">
+      <serviceRuntime
+        id="org.eclipse.jst.ws.axis.creation.java"
+        serviceImplementationTypeId="org.eclipse.jst.ws.wsImpl.java"
+        runtimeId="org.eclipse.jst.ws.axis.creation.axisWebServiceRT"
+        bottomUp="true"
+        topDown="true"
+        class="org.eclipse.jst.ws.internal.axis.creation.ui.wsrt.AxisWebServiceRuntime">
+
+        <required-facet-version facet="jst.web" version="2.3" allow-newer="true"/>
+
+      </serviceRuntime>
+    </extension>   
+
+    <!-- define support for Axis Java clients in Java projects -->
+    <extension point="org.eclipse.jst.ws.consumption.ui.clientRuntimes">
+      <clientRuntime
+        id="org.eclipse.jst.ws.axis.consumption.java"
+        clientImplementationTypeId="org.eclipse.jst.ws.client.type.java"
+        runtimeId="org.eclipse.jst.ws.axis.creation.axisWebServiceRT"
+        class="org.eclipse.jst.ws.internal.axis.creation.ui.wsrt.AxisWebServiceRuntime">
+
+        <required-facet-version facet="jst.java" version="1.3" allow-newer="true"/>
+
+      </clientRuntime>
+    </extension>    
 
 </plugin>
\ No newline at end of file
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDAxisInputCommand.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDAxisInputCommand.java
index 4ce4cf3..4110eb0 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDAxisInputCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/command/TDAxisInputCommand.java
@@ -25,6 +25,7 @@
 	private String serverProject_; 
 
 	  private String serverServer_;
+      private String serviceServerTypeID_; 
 	  private String wsdlURI_;
 	  	  
 		/**
@@ -40,7 +41,8 @@
 		
 		public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable ) 
 		{	    
-		serverServer_ = ws_.getWebServiceInfo().getServerInstanceId();	
+		serverServer_ = ws_.getWebServiceInfo().getServerInstanceId();
+        serviceServerTypeID_ = ws_.getWebServiceInfo().getServerFactoryId();
 		wsdlURI_ = ws_.getWebServiceInfo().getWsdlURL();
 		
 		return Status.OK_STATUS;
@@ -58,6 +60,11 @@
 		  {
 		    return serverServer_;
 		  }
+          
+          public String getServiceServerTypeID()
+          {
+            return serviceServerTypeID_;
+          }          
 
 		public String getWsdlURI() {
 			return wsdlURI_;
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/DefaultsForServerJavaWSDLCommand.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/DefaultsForServerJavaWSDLCommand.java
index 9840b92..f63ae0e 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/DefaultsForServerJavaWSDLCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/DefaultsForServerJavaWSDLCommand.java
@@ -50,6 +50,7 @@
 	private String WSDLServiceURL_;
 	private String WSDLServicePathname_;
 	private WebServicesParser WSParser_;
+    private String serviceServerTypeID_;
 	
 	private final String WSDL_FOLDER = "wsdl"; //$NON-NLS-1$
 	public final String SERVICE_EXT = "/services/"; //$NON-NLS-1$
@@ -175,7 +176,7 @@
 		javaWSDLParam_.setStyle(JavaWSDLParameter.STYLE_WRAPPED);
 		javaWSDLParam_.setUse(JavaWSDLParameter.USE_LITERAL);
 
-		String projectURL = ServerUtils.getEncodedWebComponentURL(serviceProject_);
+		String projectURL = ServerUtils.getEncodedWebComponentURL(serviceProject_, serviceServerTypeID_);
 		if (projectURL == null) {
 			status = StatusUtils.errorStatus( msgUtils_.getMessage("MSG_ERROR_PROJECT_URL"));
 			environment.getStatusHandler().reportError(status);
@@ -259,5 +260,10 @@
       if (object instanceof String)
         setJavaBeanName((String)object);
     }
-  }	
+  }
+  
+  public void setServiceServerTypeID(String id)
+  {
+    serviceServerTypeID_ = id;
+  }
 }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/MoveDeploymentFilesTask.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/MoveDeploymentFilesTask.java
index 3670616..e008c90 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/MoveDeploymentFilesTask.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/MoveDeploymentFilesTask.java
@@ -33,6 +33,7 @@
 	private MessageUtils msgUtils_;
 	private MessageUtils coreMsgUtils_;
 	private IProject serverProject;
+    private String serviceServerTypeID_;    
 	
     private JavaWSDLParameter javaWSDLParam_;
 	
@@ -58,7 +59,7 @@
 
 		IProject project = serverProject;
 		//String projectURL = ResourceUtils.getEncodedWebProjectURL(project);
-		String projectURL = ServerUtils.getEncodedWebComponentURL(project);
+		String projectURL = ServerUtils.getEncodedWebComponentURL(project, serviceServerTypeID_);
 		
 		if (projectURL == null) {
 		    status = StatusUtils.errorStatus(msgUtils_.getMessage("MSG_ERROR_PROJECT_URL",new String[] { project.toString()}));
@@ -112,4 +113,9 @@
 	{
 	  this.serverProject = serverProject;
 	}
+    
+    public void setServiceServerTypeID(String id)
+    {
+      serviceServerTypeID_ = id;
+    }    
 }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/MoveJavaFilesTask.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/MoveJavaFilesTask.java
index de75da8..172a426 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/MoveJavaFilesTask.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/MoveJavaFilesTask.java
@@ -31,6 +31,7 @@
 	private MessageUtils msgUtils_;
 	private MessageUtils coreMsgUtils_;
 	private IProject serviceProject_;
+    private String serviceServerTypeID_;    
 	
 	// rm private Model model_;
 
@@ -64,7 +65,7 @@
 
 		IProject project = serviceProject_;
 		//String projectURL = ResourceUtils.getEncodedWebProjectURL(project);
-		String projectURL = ServerUtils.getEncodedWebComponentURL(project);
+		String projectURL = ServerUtils.getEncodedWebComponentURL(project, serviceServerTypeID_);
 		if (projectURL == null) {
 		    status = StatusUtils.errorStatus(msgUtils_.getMessage("MSG_ERROR_PROJECT_URL",new String[] {project.toString()}));
 		    environment.getStatusHandler().reportError(status);
@@ -126,4 +127,9 @@
 	  model_ = model;
 	}
 	*/
+    
+    public void setServiceServerTypeID(String id)
+    {
+      serviceServerTypeID_ = id;
+    }    
 }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/Skeleton2WSDLCommand.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/Skeleton2WSDLCommand.java
index 669f77a..a4e160e 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/Skeleton2WSDLCommand.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/Skeleton2WSDLCommand.java
@@ -57,6 +57,7 @@
   private WebServicesParser webServicesParser;
   private JavaWSDLParameter javaWSDLParam;
   private IProject serverProject;
+  private String serviceServerTypeID_;  
   private MessageUtils msgUtils_;
 
   public Skeleton2WSDLCommand( ) {
@@ -218,7 +219,7 @@
     if (soapAddress != null)
     {
 //      String projectURL = ResourceUtils.getEncodedWebProjectURL(serverProject);
-	  String projectURL = ServerUtils.getEncodedWebComponentURL(serverProject);
+	  String projectURL = ServerUtils.getEncodedWebComponentURL(serverProject, serviceServerTypeID_);
       if (projectURL == null)
         return StatusUtils.errorStatus( msgUtils_.getMessage("MSG_ERROR_PROJECT_URL", new String[] {serverProject.toString()}));
       StringBuffer serviceURL = new StringBuffer(projectURL);
@@ -276,5 +277,10 @@
 	  catch(MalformedURLException mue){}
 	return url;
   }
+  
+  public void setServiceServerTypeID(String id)
+  {
+    serviceServerTypeID_ = id;
+  }  
 
 }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/UpdateAxisWSDDFileTask.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/UpdateAxisWSDDFileTask.java
index 8b44e49..18bb333 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/UpdateAxisWSDDFileTask.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/task/UpdateAxisWSDDFileTask.java
@@ -48,6 +48,7 @@
     private MessageUtils coreMsgUtils_;
 	private JavaWSDLParameter javaWSDLParam_;
 	private IProject serviceProject_;
+    private String serviceServerTypeID_;
 
 	public UpdateAxisWSDDFileTask() 
 	{
@@ -79,7 +80,7 @@
 	
 		IProject project = serviceProject_;
 		//String projectURL = ResourceUtils.getEncodedWebProjectURL(project);
-		String projectURL = ServerUtils.getEncodedWebComponentURL(project);
+		String projectURL = ServerUtils.getEncodedWebComponentURL(project, serviceServerTypeID_);
 		if (projectURL == null) {
 		    status = StatusUtils.errorStatus(msgUtils_.getMessage("MSG_ERROR_PROJECT_URL",new String[] {project.toString()}));
 		    environment.getStatusHandler().reportError(status);
@@ -198,5 +199,9 @@
 	{
 	  model_ = model;
 	}
-	*/	
+	*/
+    public void setServiceServerTypeID(String id)
+    {
+      serviceServerTypeID_ = id;
+    }    
 }
diff --git a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/wsrt/AxisWebService.java b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/wsrt/AxisWebService.java
index 852909f..1c2c23d 100644
--- a/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/wsrt/AxisWebService.java
+++ b/bundles/org.eclipse.jst.ws.axis.creation.ui/src/org/eclipse/jst/ws/internal/axis/creation/ui/wsrt/AxisWebService.java
@@ -174,6 +174,7 @@
 	    //DefaultsForServerJavaWSDLCommand
 	    registry.addMapping(BUAxisDefaultingCommand.class, "JavaWSDLParam", DefaultsForServerJavaWSDLCommand.class);
 	    registry.addMapping(BUAxisInputCommand.class, "ServerProject", DefaultsForServerJavaWSDLCommand.class, "ServiceProject", new StringToIProjectTransformer());
+        registry.addMapping(BUAxisInputCommand.class, "ServiceServerTypeID", DefaultsForServerJavaWSDLCommand.class);        
 	    registry.addMapping(BUAxisDefaultingCommand.class, "JavaBeanName", DefaultsForServerJavaWSDLCommand.class);
 	    registry.addMapping(BUAxisDefaultingCommand.class, "Parser", DefaultsForServerJavaWSDLCommand.class);
 	    
@@ -203,10 +204,12 @@
 	    //MoveJavaFilesTask
 	    registry.addMapping(WSDL2JavaCommand.class, "JavaWSDLParam", MoveJavaFilesTask.class);
 	    registry.addMapping(BUAxisInputCommand.class, "ServerProject", MoveJavaFilesTask.class, "ServiceProject", new StringToIProjectTransformer());
+        registry.addMapping(BUAxisInputCommand.class, "ServiceServerTypeID", MoveJavaFilesTask.class);        
 	    
 	    //UpdateAxisWSDDFileTask
 	    registry.addMapping(MoveJavaFilesTask.class, "JavaWSDLParam", UpdateAxisWSDDFileTask.class);
 	    registry.addMapping(BUAxisInputCommand.class, "ServerProject", UpdateAxisWSDDFileTask.class, "ServiceProject", new StringToIProjectTransformer());
+        registry.addMapping(BUAxisInputCommand.class, "ServiceServerTypeID", UpdateAxisWSDDFileTask.class);
 	    
 	    //UpdateWEBXMLCommand
 	    registry.addMapping(BUAxisInputCommand.class, "ServerProject", UpdateWEBXMLCommand.class, "ServerProject", new StringToIProjectTransformer());
@@ -277,6 +280,7 @@
 		
 	    // MoveDeploymentFilesTask
 	    dataRegistry.addMapping(TDAxisInputCommand.class, "ServerProject", MoveDeploymentFilesTask.class, "ServerProject", projectTransformer);
+        dataRegistry.addMapping(TDAxisInputCommand.class, "ServiceServerTypeID", MoveDeploymentFilesTask.class);        
 	    dataRegistry.addMapping(WSDL2JavaCommand.class, "JavaWSDLParam", MoveDeploymentFilesTask.class);
 
 	    // CopyAxisJarCommand
@@ -285,6 +289,7 @@
 	    // Skeleton2WSDLCommand
 	    dataRegistry.addMapping(AxisSkeletonDefaultingCommand.class, "WebServicesParser", Skeleton2WSDLCommand.class);
 	    dataRegistry.addMapping(TDAxisInputCommand.class, "ServerProject", Skeleton2WSDLCommand.class, "ServerProject", projectTransformer);
+        dataRegistry.addMapping(TDAxisInputCommand.class, "ServiceServerTypeID", Skeleton2WSDLCommand.class);        
 	    dataRegistry.addMapping(WSDL2JavaCommand.class, "JavaWSDLParam", Skeleton2WSDLCommand.class);
 
 	    // UpdateWEBXMLCommand
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.consumption.ui/META-INF/MANIFEST.MF
index 2e5bcdf..51386b2 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/META-INF/MANIFEST.MF
@@ -67,5 +67,6 @@
  org.eclipse.jem.util,
  org.eclipse.wst.wsdl.validation,
  org.eclipse.wst.common.frameworks.ui,
- org.eclipse.wst.common.environment
+ org.eclipse.wst.common.environment,
+ org.eclipse.wst.common.project.facet.core
 Eclipse-AutoStart: true
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/plugin.xml b/bundles/org.eclipse.jst.ws.consumption.ui/plugin.xml
index 84a767c..e24fa09 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/plugin.xml
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/plugin.xml
@@ -584,7 +584,6 @@
             id="wsilimport">
          </action>
       </objectContribution>
-
    </extension>
 
    <!-- Object Selection Widgets -->
@@ -616,15 +615,23 @@
       </objectSelectionWidget>
    </extension>
    
-   <!-- New extension points for WTP M4 -->
+
    <extension-point id="wsImpl" name="Web service implementations"/>
    <extension-point id="wsClientImpl" name="Web service client implementations"/>
+   
+   <!-- serviceType, clientType, and webServiceRuntime are to be deleted in WTP 1.0 M9 -->
    <extension-point id="serviceType" name="Extensions that provide unique combinations of service implementations, scenarios, and module types "/>
    <extension-point id="clientType" name="Extensions that provide unique combinations of client implementations and module types"/>
    <extension-point id="webServiceRuntime" name="Web service runtimes"/>
+   
+   
+   <extension-point id="runtimes" name="Web service runtimes" />
+   <extension-point id="serviceRuntimes" name="Combination of a Web service runime, service implementation type, and required facets" />
+   <extension-point id="clientRuntimes" name="Combination of a Web service runime, client implementation type, and required facets" />
+
    <extension-point id="tester" name="Web service test facilities"/>
 
-<!-- M4 Extensions to the new extension points -->
+
 
 <!-- Test Extensions beginning  -->
 
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/consumption/ui/plugin.properties b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/consumption/ui/plugin.properties
index 376ed9f..e3855f8 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/consumption/ui/plugin.properties
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/consumption/ui/plugin.properties
@@ -193,7 +193,8 @@
 PAGE_DESC_WS_CLIENT_RUNTIME_SELECTION=Choose from the list of supported runtimes and servers for the client environment, or use the default settings.
 
 LABEL_CLIENT_SELECTION_VIEW_TITLE=Client-Side Environment Selection:
-LABEL_CLIENT_TYPE=Client type:
+LABEL_CLIENT_TYPE=Client Project type:
+LABEL_SERVICE_TYPE=Service Project type:
 LABEL_WEB=Web
 LABEL_EJB=EJB
 LABEL_NO_LABEL=
@@ -362,7 +363,8 @@
 #
 # Tooltips for WebServiceClientRuntimeSelectionPage
 #
-TOOLTIP_PWCR_COMBO_CLIENT_TYPE=Client type.
+TOOLTIP_PWCR_COMBO_CLIENT_TYPE=Client project type.
+TOOLTIP_PWCR_COMBO_SERVICE_TYPE=Service project type.
 
 
 #
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/CheckForServiceProjectCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/CheckForServiceProjectCommand.java
index 08da92c..9b4f995 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/CheckForServiceProjectCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/command/CheckForServiceProjectCommand.java
@@ -33,7 +33,8 @@
 public class CheckForServiceProjectCommand extends AbstractDataModelOperation
 {
   MessageUtils msgUtils;
-  SelectionListChoices runtime2ClientTypes;
+  //SelectionListChoices runtime2ClientTypes;
+  String clientProjectName;
   String wsdlURI;
   WebServicesParser webServicesParser;
     
@@ -43,9 +44,10 @@
     msgUtils = new MessageUtils(pluginId + ".plugin", this);  
   }
   
-  public void setRuntime2ClientTypes( SelectionListChoices runtime2ClientTypes )
+
+  public void setClientProjectName(String name)
   {
-    this.runtime2ClientTypes = runtime2ClientTypes;
+    clientProjectName = name;
   }
   
   public void setWsdlURI(String wsdlURI)
@@ -66,10 +68,9 @@
   {
     Environment environment = getEnvironment();
     IStatus status = Status.OK_STATUS;
-    if (runtime2ClientTypes==null || wsdlURI==null || wsdlURI.length()==0 || webServicesParser==null)
+    if (clientProjectName==null || wsdlURI==null || wsdlURI.length()==0 || webServicesParser==null)
       return status;
     
-    String clientProjectName = runtime2ClientTypes.getChoice().getChoice().getList().getSelection();
     if (clientProjectName==null || clientProjectName.length()==0)
       return status;
     
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FacetMatcher.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FacetMatcher.java
new file mode 100644
index 0000000..0ddcefb
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FacetMatcher.java
@@ -0,0 +1,42 @@
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.util.Set;
+
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+
+public class FacetMatcher
+{
+  private boolean match;
+  private Set facetsThatMatched;
+  private Set facetsToAdd;
+  
+  public Set getFacetsThatMatched()
+  {
+    return facetsThatMatched;
+  }
+  public void setFacetsThatMatched(Set facetsThatMatched)
+  {
+    this.facetsThatMatched = facetsThatMatched;
+  }
+  public Set getFacetsToAdd()
+  {
+    return facetsToAdd;
+  }
+  public void setFacetsToAdd(Set facetsToAdd)
+  {
+    this.facetsToAdd = facetsToAdd;
+  }
+  public boolean isMatch()
+  {
+    return match;
+  }
+  public void setMatch(boolean match)
+  {
+    this.match = match;
+  }
+  
+
+  
+  
+
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FacetUtils.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FacetUtils.java
new file mode 100644
index 0000000..c03684e
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/common/FacetUtils.java
@@ -0,0 +1,253 @@
+package org.eclipse.jst.ws.internal.consumption.ui.common;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.RequiredFacetVersion;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action.Type;
+
+public class FacetUtils
+{
+
+  /**
+   * Returns a list of valid projects. Valid projects include projects with the facets nature or
+   * projects with the Java nature.
+   * @return IProject[] an array of valid projects
+   */
+  public static IProject[] getAllProjects()
+  {
+    //Return all projects in the workspace that have the project facet nature or that do not have the project
+    //facet nature but have the Java nature.
+    IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
+    ArrayList validProjects = new ArrayList();
+    for (int i = 0; i < projects.length; i++)
+    {
+      try
+      {
+        IFacetedProject facProject = ProjectFacetsManager.create(projects[i]);
+        if (facProject != null)
+        {
+          //Add it to the list
+          validProjects.add(projects[i]);
+        }
+        else
+        {
+          //Check if it's a Java project        
+          IJavaProject javaProject = null;    
+          javaProject = JavaCore.create(projects[i]);    
+          if (javaProject != null)
+          {
+            //Add it to the list
+            validProjects.add(projects[i]);
+          }
+        }
+      }
+      catch (CoreException ce)
+      {        
+      }      
+    }
+    return (IProject[])validProjects.toArray(new IProject[]{});
+  }
+  
+  public static Set getTemplates(RequiredFacetVersion[] requiredFacetVersions)
+  {
+    
+    //Get the templates that support the actions
+    Set templates = new HashSet();
+    
+    for( Iterator itr = ProjectFacetsManager.getTemplates().iterator(); itr.hasNext(); )
+    {
+        final IFacetedProjectTemplate template = (IFacetedProjectTemplate) itr.next();
+        //TODO final Set initial = template.getInitialProjectFacets();
+        Set fixedFacets = template.getFixedProjectFacets(); 
+        HashSet initial = new HashSet(); 
+        for (Iterator itr2 = fixedFacets.iterator(); itr2.hasNext(); ) 
+        { 
+          IProjectFacet facet = (IProjectFacet) itr2.next(); 
+          IProjectFacetVersion highestFacetVersion = facet.getLatestVersion(); 
+          initial.add(highestFacetVersion); 
+        }         
+        
+        FacetMatcher fm = match(requiredFacetVersions, initial);
+        if (fm.isMatch())
+        {
+          templates.add(template);
+        }
+    }    
+    
+    return templates;
+    
+  }
+  
+  public static String[] getTemplateLabels(String[] templateIds)
+  {
+    String[] labels = new String[templateIds.length];
+    for (int i=0; i<templateIds.length; i++)
+    {
+      IFacetedProjectTemplate template = ProjectFacetsManager.getTemplate(templateIds[i]);      
+      labels[i] = template.getLabel();
+    }
+    return labels;
+    
+  }
+  
+  public static String getTemplateIdByLabel(String templateLabel)
+  {
+    for( Iterator itr = ProjectFacetsManager.getTemplates().iterator(); itr.hasNext(); )
+    {
+        final IFacetedProjectTemplate template = (IFacetedProjectTemplate) itr.next();
+        if (template.getLabel().equals(templateLabel))
+        {
+          return template.getId();
+
+        }
+    }
+    
+    return "";
+  }
+  
+  public static Set getInstallActions(Set projectFacetVersions)
+  {
+    HashSet actions = new HashSet();
+    
+    Iterator facets = projectFacetVersions.iterator();
+    
+    while(facets.hasNext())
+    {
+      IProjectFacetVersion fv = (IProjectFacetVersion)facets.next();
+      Action action = new Action(Type.INSTALL, fv, null);
+      actions.add(action);
+    }
+    
+    return actions;
+  }
+  
+  public static FacetMatcher match(RequiredFacetVersion[] requiredFacetVersions, Set projectFacetVersions)
+  {
+    FacetMatcher fm = new FacetMatcher();
+    HashSet facetsToAdd = new HashSet();
+    HashSet facetsThatMatched = new HashSet();
+    for (int i=0; i<requiredFacetVersions.length; i++)
+    {
+      RequiredFacetVersion rfv = requiredFacetVersions[i];
+      IProjectFacetVersion rpfv = rfv.getProjectFacetVersion();
+      String rid = rpfv.getProjectFacet().getId();
+      String rv = rpfv.getVersionString();
+      boolean facetPresent = false;
+
+      //Is the project facet present? or a later version of applicable.
+      Iterator itr = projectFacetVersions.iterator();
+      while(itr.hasNext())
+      {
+        IProjectFacetVersion pfv = (IProjectFacetVersion)itr.next();
+        String id = pfv.getProjectFacet().getId();
+        String version = pfv.getVersionString();
+        if (rid.equals(id))
+        {
+          if (rv.equals(version))
+          {
+            //found an exact match
+            facetPresent = true;
+            facetsThatMatched.add(pfv);
+          }
+          else
+          {
+            if (rfv.getAllowNewer())
+            {
+              if (greaterThan(version, rv))
+              {
+                //found a match
+                facetPresent = true;
+                facetsThatMatched.add(pfv);
+              }
+            }
+          }
+          //No need to keep iterating since we hit a facet with the same id;
+          break;
+        }
+      }
+      
+      //if not present, put it in the list to check if it can be added.
+      if (!facetPresent)
+      {
+        facetsToAdd.add(rpfv);
+      }
+      
+    }
+    
+    //Check if the facetsToAdd can be added
+    if (facetsToAdd.size() > 0)
+    {
+      Set actions = getInstallActions(facetsToAdd);
+      if( ProjectFacetsManager.check( projectFacetVersions, actions ).getSeverity() == IStatus.OK )
+      {
+        //Facets can be added so there is a match
+        fm.setMatch(true);
+        fm.setFacetsThatMatched(facetsThatMatched);
+        fm.setFacetsToAdd(facetsToAdd);        
+      }
+      else
+      {
+        fm.setMatch(false);
+      }      
+    }
+    else
+    {
+      //Facets can be added so there is a match
+      fm.setMatch(true);
+      fm.setFacetsThatMatched(facetsThatMatched);
+      fm.setFacetsToAdd(facetsToAdd);
+    }
+    
+    return fm;
+  }
+  
+  /*
+   * @param versionA version number of the form 1.2.3
+   * @param versionA version number of the form 1.2.3
+   * @return boolean returns whether versionA is greater than versionB
+   */
+  private static boolean greaterThan(String versionA, String versionB)
+  {
+    StringTokenizer stA = new StringTokenizer(versionA, ".");
+    StringTokenizer stB = new StringTokenizer(versionB, ".");
+    
+    int sizeA = stA.countTokens();
+    int sizeB = stB.countTokens();
+    
+    int size;
+    if (sizeA < sizeB)
+    {
+      size = sizeA;
+    }
+    else
+      size = sizeB;
+    
+    for (int i=0; i<size; i++)
+    {
+      int a = Integer.parseInt(stA.nextToken());
+      int b = Integer.parseInt(stB.nextToken());
+      if (a!=b)
+      {
+        return a > b;
+      }      
+    }
+    
+    return sizeA > sizeB;
+  }
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/extension/PreClientDevelopCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/extension/PreClientDevelopCommand.java
index 468d2bb..7936b45 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/extension/PreClientDevelopCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/extension/PreClientDevelopCommand.java
@@ -16,7 +16,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jst.ws.internal.consumption.command.common.CreateModuleCommand;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.wst.command.internal.provisional.env.core.context.ResourceContext;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
@@ -42,6 +42,7 @@
   */
   
   private TypeRuntimeServer typeRuntimeServer_;
+  private String            clientRuntimeId_;
   private IContext          context_;
   private ISelection        selection_;
   private String            project_;
@@ -76,8 +77,8 @@
       }
     }    
     
-    IWebServiceRuntime wsrt = WebServiceRuntimeExtensionUtils
-        .getWebServiceRuntime(typeRuntimeServer_.getRuntimeId());
+    IWebServiceRuntime wsrt = WebServiceRuntimeExtensionUtils2
+        .getClientRuntime(clientRuntimeId_);
     WebServiceClientInfo wsInfo = new WebServiceClientInfo();
 
     System.out.println("In Pre client develop command.");
@@ -154,6 +155,11 @@
 	typeRuntimeServer_ = typeRuntimeServer;  
   }
   
+  public void setClientRuntimeId( String id)
+  {
+    clientRuntimeId_ = id;
+  }
+  
   public void setClientJ2EEVersion( String j2eeLevel )
   {
 	j2eeLevel_ = j2eeLevel;  
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/preferences/ServerRuntimePreferencePage.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/preferences/ServerRuntimePreferencePage.java
index b2abb86..dc8fa1a 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/preferences/ServerRuntimePreferencePage.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/preferences/ServerRuntimePreferencePage.java
@@ -15,7 +15,7 @@
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.plugin.WebServiceConsumptionUIPlugin;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.ui.common.UIUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
@@ -93,8 +93,7 @@
 	private void initializeValues()
 	{
 		PersistentServerRuntimeContext context = WebServiceConsumptionUIPlugin.getInstance().getServerRuntimeContext();
-		//serverToRuntimeToJ2EE_ = WebServiceServerRuntimeTypeRegistry.getInstance().getServerToRuntimeToJ2EE();
-    serverToRuntimeToJ2EE_ = WebServiceRuntimeExtensionUtils.getServerToRuntimeToJ2EE();
+        serverToRuntimeToJ2EE_ = WebServiceRuntimeExtensionUtils2.getServerToRuntimeToJ2EE();
 
 
 		setServerItems(serverToRuntimeToJ2EE_.getList().getList());
@@ -268,7 +267,7 @@
 		  for (int i=0;i<factoryIds.length;i++)
 		  {
 			  //String thisServerLabel = WebServiceServerRuntimeTypeRegistry.getInstance().getServerLabel(factoryIds[i]);
-        String thisServerLabel = WebServiceRuntimeExtensionUtils.getServerLabelById(factoryIds[i]);
+        String thisServerLabel = WebServiceRuntimeExtensionUtils2.getServerLabelById(factoryIds[i]);
 			  if (thisServerLabel!=null && thisServerLabel.length()>0)
 			  {
 			    serverLabelsList.add(thisServerLabel);
@@ -289,7 +288,7 @@
 		for (int i=0;i<ids.length;i++)
 		{
 		  //runtimeLabels[i] = WebServiceServerRuntimeTypeRegistry.getInstance().getRuntimeLabel(ids[i]);
-      runtimeLabels[i] = WebServiceRuntimeExtensionUtils.getRuntimeLabelById(ids[i]);
+      runtimeLabels[i] = WebServiceRuntimeExtensionUtils2.getRuntimeLabelById(ids[i]);
 		}
 		runtime_.setItems(runtimeLabels);
 	  }
@@ -324,14 +323,14 @@
 	{
 	  String serverLabel = server_.getText();
 	  //return WebServiceServerRuntimeTypeRegistry.getInstance().getServerFactoryId(serverLabel);
-    return WebServiceRuntimeExtensionUtils.getServerFactoryId(serverLabel);
+    return WebServiceRuntimeExtensionUtils2.getServerFactoryId(serverLabel);
 	}
 	
 	private String getRuntimeSelection()
 	{
       String runtimeLabel = runtime_.getText();
 	  //return WebServiceServerRuntimeTypeRegistry.getInstance().getRuntimeId(runtimeLabel);
-      return WebServiceRuntimeExtensionUtils.getRuntimeId(runtimeLabel);
+      return WebServiceRuntimeExtensionUtils2.getRuntimeId(runtimeLabel);
 	}
 	
 	private String getJ2EESelection()
@@ -343,14 +342,14 @@
 	private void setServerSelection(String factoryId)
 	{
 		//String label = WebServiceServerRuntimeTypeRegistry.getInstance().getServerLabel(factoryId);
-    String label = WebServiceRuntimeExtensionUtils.getServerLabelById(factoryId);
+    String label = WebServiceRuntimeExtensionUtils2.getServerLabelById(factoryId);
 		setSelection(server_,label);
 	}
 	
 	private void setRuntimeSelection(String id)
 	{
 		//String label = WebServiceServerRuntimeTypeRegistry.getInstance().getRuntimeLabel(id);
-    String label = WebServiceRuntimeExtensionUtils.getRuntimeLabelById(id);
+    String label = WebServiceRuntimeExtensionUtils2.getRuntimeLabelById(id);
 		setSelection(runtime_,label);		
 	}
 	
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidgetDefaultingCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidgetDefaultingCommand.java
index 29b4885..56bf0ae 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidgetDefaultingCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidgetDefaultingCommand.java
@@ -15,7 +15,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.context.ScenarioContext;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.jst.ws.internal.plugin.WebServicePlugin;
@@ -55,9 +55,9 @@
 		//WebServiceClientTypeRegistry registry = WebServiceClientTypeRegistry.getInstance();
     String                       type     = getScenarioContext().getClientWebServiceType();
     //String                       runtime  = registry.getAllClientRuntimes()[0];
-		String                       runtime  = WebServiceRuntimeExtensionUtils.getAllClientRuntimes()[0];
+		String                       runtime  = WebServiceRuntimeExtensionUtils2.getAllRuntimesForClientSide()[0];
     //String                       server   = registry.getAllClientServerFactoryIds()[0];
-		String                       server   = WebServiceRuntimeExtensionUtils.getAllClientServerFactoryIds()[0];
+		String                       server   = WebServiceRuntimeExtensionUtils2.getAllClientServerFactoryIds()[0];
     TypeRuntimeServer            result   = new TypeRuntimeServer();
 		// rskreg
     
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WebServiceClientTypeWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WebServiceClientTypeWidget.java
index d0e1d20..6b149bf 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WebServiceClientTypeWidget.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/WebServiceClientTypeWidget.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets;
 
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.LabelsAndIds;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.jst.ws.internal.ui.common.UIUtils;
@@ -74,7 +74,7 @@
 		// rskreg
     //WebServiceClientTypeRegistry registry   = WebServiceClientTypeRegistry.getInstance();
     //LabelsAndIds                 labelIds   = registry.getClientTypeLabels();
-		LabelsAndIds                 labelIds   = WebServiceRuntimeExtensionUtils.getClientTypeLabels();
+		LabelsAndIds                 labelIds   = WebServiceRuntimeExtensionUtils2.getClientTypeLabels();
     int                          selection  = 0;
     String[]                     clientIds  = labelIds.getIds_();
     String                       selectedId = ids.getTypeId();
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/binding/ClientWidgetBinding.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/binding/ClientWidgetBinding.java
index 83941f9..0625116 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/binding/ClientWidgetBinding.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/binding/ClientWidgetBinding.java
@@ -97,20 +97,25 @@
             
     // Before ClientRuntimeSelectionWidget
     dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientTypeRuntimeServer", ClientRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientJ2EEVersion", ClientRuntimeSelectionWidget.class, "J2EEVersion", null);
-    dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", ClientRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", ClientRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", ClientRuntimeSelectionWidget.class);
+    dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientRuntimeId", ClientRuntimeSelectionWidget.class);
+    dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", ClientRuntimeSelectionWidget.class);    
+    dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", ClientRuntimeSelectionWidget.class);
+    dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentType", ClientRuntimeSelectionWidget.class);
+    //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientJ2EEVersion", ClientRuntimeSelectionWidget.class, "J2EEVersion", null);
+    //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", ClientRuntimeSelectionWidget.class);
+    //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", ClientRuntimeSelectionWidget.class);
+    //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", ClientRuntimeSelectionWidget.class);
     dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientNeedEAR", ClientRuntimeSelectionWidget.class,"NeedEAR",null);
     
     // After ClientRuntimeSelectionWidget
     dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "ClientTypeRuntimeServer", ClientExtensionDefaultingCommand.class);
-    dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "J2EEVersion", ClientExtensionDefaultingCommand.class, "ClientJ2EEVersion", null);
-    dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "Runtime2ClientTypes", ClientExtensionDefaultingCommand.class);
+    dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "ClientRuntimeId", ClientExtensionDefaultingCommand.class);
+    //dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "J2EEVersion", ClientExtensionDefaultingCommand.class, "ClientJ2EEVersion", null);
+    //dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "Runtime2ClientTypes", ClientExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "ClientProjectName", ClientExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "ClientEarProjectName", ClientExtensionDefaultingCommand.class); 
-    dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "ClientComponentName", ClientExtensionDefaultingCommand.class);
-    dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "ClientEarComponentName", ClientExtensionDefaultingCommand.class);
+    //dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "ClientComponentName", ClientExtensionDefaultingCommand.class);
+    //dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "ClientEarComponentName", ClientExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "ClientComponentType", ClientExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ClientRuntimeSelectionWidget.class, "ClientNeedEAR", ClientExtensionDefaultingCommand.class);
     
@@ -264,15 +269,16 @@
       
       // Map ClientRuntimeSelectionWidgetDefaultingCommand command
       dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientTypeRuntimeServer", ClientExtensionDefaultingCommand.class); 
-      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", ClientExtensionDefaultingCommand.class);
+      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientRuntimeId", ClientExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", ClientExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", ClientExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", ClientExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", ClientExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", ClientExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", ClientExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", ClientExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentType", ClientExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientJ2EEVersion", ClientExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientJ2EEVersion", ClientExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientNeedEAR", ClientExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", CheckForServiceProjectCommand.class);
+      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", CheckForServiceProjectCommand.class);
       
       // Map WSDLSelectionWidgetDefaultingCommand command.
       dataRegistry.addMapping(SelectionCommand.class, "InitialSelection", WSDLSelectionWidgetDefaultingCommand.class );
@@ -289,7 +295,7 @@
       dataRegistry.addMapping(WSDLSelectionOutputCommand.class, "WebServicesParser", GetMonitorCommand.class);
       dataRegistry.addMapping(WSDLSelectionOutputCommand.class, "Project", ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientInitialProject", null);
       dataRegistry.addMapping(WSDLSelectionOutputCommand.class, "WsdlURI", ClientRuntimeSelectionWidgetDefaultingCommand.class);
-      dataRegistry.addMapping(WSDLSelectionOutputCommand.class, "ComponentName", ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientInitialComponentName", null);
+      //dataRegistry.addMapping(WSDLSelectionOutputCommand.class, "ComponentName", ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientInitialComponentName", null);
       dataRegistry.addMapping(WSDLSelectionOutputCommand.class, "WebServicesParser", ClientRuntimeSelectionWidgetDefaultingCommand.class);
       dataRegistry.addMapping(WSDLSelectionOutputCommand.class, "WsdlURI", CheckForServiceProjectCommand.class);
       dataRegistry.addMapping(WSDLSelectionOutputCommand.class, "WebServicesParser", CheckForServiceProjectCommand.class);      
@@ -306,6 +312,7 @@
       dataRegistry.addMapping( ClientExtensionDefaultingCommand.class, "ClientProjectEAR", PreClientDevelopCommand.class, "Ear", null );
       dataRegistry.addMapping( ClientWizardWidgetOutputCommand.class, "ResourceContext", PreClientDevelopCommand.class);
 	    dataRegistry.addMapping( ClientExtensionDefaultingCommand.class, "WsdlURI", PreClientDevelopCommand.class );
+        dataRegistry.addMapping( ClientExtensionDefaultingCommand.class, "ClientRuntimeId", PreClientDevelopCommand.class );
       
 			dataRegistry.addMapping( PreClientDevelopCommand.class, "WebService", ClientExtensionOutputCommand.class, "WebServiceClient", null );
 			
@@ -320,7 +327,7 @@
       
       dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientNeedEAR", ClientTestDelegateCommand.class);
 	  dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientEarProjectName", ClientTestDelegateCommand.class);
-	  dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientEarComponentName", ClientTestDelegateCommand.class);
+	  dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientEarProjectName", ClientTestDelegateCommand.class,"ClientEarComponentName", null);
 	  dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientProject",ClientTestDelegateCommand.class);
       dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientTypeRuntimeServer", ClientTestDelegateCommand.class);
       dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientServer", ClientTestDelegateCommand.class);
@@ -360,45 +367,45 @@
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Context", DevelopClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Selection", DevelopClientFragment.class );
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", DevelopClientFragment.class, "Project", null );
-      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", DevelopClientFragment.class, "Module", null );  
+      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", DevelopClientFragment.class, "Module", null );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", DevelopClientFragment.class, "EarProject", null );
-      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", DevelopClientFragment.class, "Ear", null );
+      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", DevelopClientFragment.class, "Ear", null );
     
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "WebService", AssembleClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Environment", AssembleClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Context", AssembleClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Selection", AssembleClientFragment.class );
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", AssembleClientFragment.class, "Project", null );
-      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", AssembleClientFragment.class, "Module", null );  
+      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", AssembleClientFragment.class, "Module", null );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", AssembleClientFragment.class, "EarProject", null );
-      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", AssembleClientFragment.class, "Ear", null );
+      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", AssembleClientFragment.class, "Ear", null );
     
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "WebService", DeployClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Environment", DeployClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Context", DeployClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Selection", DeployClientFragment.class );
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", DeployClientFragment.class, "Project", null );
-      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", DeployClientFragment.class, "Module", null );  
+      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", DeployClientFragment.class, "Module", null );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", DeployClientFragment.class, "EarProject", null );
-      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", DeployClientFragment.class, "Ear", null );
+      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", DeployClientFragment.class, "Ear", null );
     
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "WebService", InstallClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Environment", InstallClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Context", InstallClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Selection", InstallClientFragment.class );
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", InstallClientFragment.class, "Project", null );
-      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", InstallClientFragment.class, "Module", null );  
+      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", InstallClientFragment.class, "Module", null );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", InstallClientFragment.class, "EarProject", null );
-      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", InstallClientFragment.class, "Ear", null );
+      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", InstallClientFragment.class, "Ear", null );
     
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "WebService", RunClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Environment", RunClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Context", RunClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "Selection", RunClientFragment.class );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", RunClientFragment.class, "Project", null );
-      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", RunClientFragment.class, "Module", null );  
+      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", RunClientFragment.class, "Module", null );  
       dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", RunClientFragment.class, "EarProject", null );
-      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", RunClientFragment.class, "Ear", null );      
+      dataRegistry.addMapping( ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", RunClientFragment.class, "Ear", null );      
     }
   }
 }
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/binding/GenSampleWidgetBinding.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/binding/GenSampleWidgetBinding.java
index 5ced295..7629826 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/binding/GenSampleWidgetBinding.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/binding/GenSampleWidgetBinding.java
@@ -318,13 +318,13 @@
       
       // Map ClientRuntimeSelectionWidgetDefaultingCommand command
       dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientTypeRuntimeServer", ClientExtensionDefaultingCommand.class); 
-      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", ClientExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", ClientExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", ClientExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", ClientExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", ClientExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", ClientExtensionDefaultingCommand.class);   
+      //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", ClientExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", ClientExtensionDefaultingCommand.class);   
       dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentType", ClientExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientJ2EEVersion", ClientExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ClientRuntimeSelectionWidgetDefaultingCommand.class, "ClientJ2EEVersion", ClientExtensionDefaultingCommand.class);
       
       // Map WSDLSelectionWidgetDefaultingCommand command.
       dataRegistry.addMapping(SelectionCommand.class, "InitialSelection", WSDLSelectionWidgetDefaultingCommand.class );
@@ -344,7 +344,7 @@
 
       dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientNeedEAR", ClientTestDelegateCommand.class);
 	  dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientEarProjectName", ClientTestDelegateCommand.class);
-	  dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientEarComponentName", ClientTestDelegateCommand.class);
+	  dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientEarProjectName", ClientTestDelegateCommand.class,"ClientEarComponentName",null);
       dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientProject",ClientTestDelegateCommand.class);
       dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ClientTypeRuntimeServer", ClientTestDelegateCommand.class);
       dataRegistry.addMapping(ClientExtensionDefaultingCommand.class, "ServiceServerInstanceId", FinishDefaultCommand.class);
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/extensions/ClientExtensionDefaultingCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/extensions/ClientExtensionDefaultingCommand.java
index 1f46b5f..4915b37 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/extensions/ClientExtensionDefaultingCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/extensions/ClientExtensionDefaultingCommand.java
@@ -27,17 +27,18 @@
 {
   // ClientWizardWidget
   private TypeRuntimeServer    clientIds_;
+  private String               clientRuntimeId_;
   private Boolean              testService;
   private ResourceContext      resourceContext;
   
   // ClientRuntimeSelectionWidget
-  private SelectionListChoices clientChoices_;
+  //private SelectionListChoices clientChoices_;
   private String clientProjectName_;
   private String clientEarProjectName_;
-  private String clientComponentName_;
-  private String clientEarComponentName_;
+  //private String clientComponentName_;
+  //private String clientEarComponentName_;
   private String clientComponentType_;
-  private String j2eeVersion;
+  //private String j2eeVersion;
   private boolean clientNeedEAR_;
   
   private String serviceServerFactoryId_;
@@ -75,17 +76,18 @@
     return isClientScenario_; 
   }
   
-  
+  /*
   public void setRuntime2ClientTypes( SelectionListChoices choices )
   {
     clientChoices_ = choices;  
   }
   
+  
   public SelectionListChoices getRuntime2ClientTypes()
   {
     return clientChoices_;  
   }
-  
+  */
   
   public void setClientTypeRuntimeServer(TypeRuntimeServer ids)
   {
@@ -111,6 +113,16 @@
     return clientIds_;
   }
   
+  public void setClientRuntimeId(String id)
+  {
+    clientRuntimeId_ = id;
+  }
+  
+  public String getClientRuntimeId()
+  {
+    return clientRuntimeId_;
+  }
+  
   public void setServiceExistingServerInstId(String serverInstId) {
   	this.serverInstId_ = serverInstId;
   }
@@ -132,7 +144,8 @@
    */
   public String getClientProject()
   {
-	  return clientProjectName_ + "/" + clientComponentName_;
+	  //return clientProjectName_ + "/" + clientComponentName_;
+      return clientProjectName_ + "/" + clientProjectName_;
   }
 
   /**
@@ -140,10 +153,10 @@
    */
   public String getClientProjectEAR()
   {
-    if (clientEarProjectName_!=null && clientEarProjectName_.length()>0 
-        && clientEarComponentName_!=null && clientEarComponentName_.length()>0)
+    if (clientEarProjectName_!=null && clientEarProjectName_.length()>0)
     {
-	    return clientEarProjectName_ + "/" + clientEarComponentName_;
+	    //return clientEarProjectName_ + "/" + clientEarComponentName_;
+      return clientEarProjectName_ + "/" + clientEarProjectName_;
     }
     else
     {
@@ -315,17 +328,18 @@
    */
   public String getClientJ2EEVersion()
   {
-	  return j2eeVersion;
+	  return "14"; //rm j2ee
   }
 
   /**
    * @param version The j2eeVersion to set.
    */
+  /*
   public void setClientJ2EEVersion(String version)
   {
 	  j2eeVersion = version;
   }
-  
+  */
   /**
    * 
    * @return returns true if a proxy should be generated and false otherwise.
@@ -379,30 +393,36 @@
     this.clientProjectName_ = clientProjectName;
   }
 
+  /*
   public void setClientComponentName(String clientComponentName)
   {
     this.clientComponentName_ = clientComponentName;
   }
-
+  */
+  
   public void setClientEarProjectName(String clientEarProjectName)
   {
     this.clientEarProjectName_ = clientEarProjectName;
   }
   
+  /*
   public void setClientEarComponentName(String clientEarComponentName)
   {
     this.clientEarComponentName_ = clientEarComponentName;
   }
+  */
   
   public String getClientEarProjectName()
   {
     return clientEarProjectName_;
   }
   
+  /*
   public String getClientEarComponentName()
   {
     return clientEarComponentName_;
   }
+  */
   
   public void setServiceServerFactoryId(String id)
   {
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/extensions/ServerExtensionDefaultingCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/extensions/ServerExtensionDefaultingCommand.java
index 4eda82c..bc10815 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/extensions/ServerExtensionDefaultingCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/extensions/ServerExtensionDefaultingCommand.java
@@ -15,7 +15,6 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
 import org.eclipse.wst.ws.internal.parser.discovery.WebServicesParserExt;
@@ -28,12 +27,13 @@
   private Boolean              testService;
   private Boolean              publishService;
   private TypeRuntimeServer    serviceIds_;
+  private String               serviceRuntimeId_;
   //private SelectionListChoices serviceChoices_;
   private String               serviceProjectName_;
   private String               serviceEarProjectName_;
-  private String               serviceComponentName_;
-  private String               serviceEarComponentName_;
-  private String j2eeVersion;
+  //private String               serviceComponentName_;
+  //private String               serviceEarComponentName_;
+  //private String j2eeVersion;
   private boolean serviceNeedEAR_;
   private WebServicesParser wsdlParser_;
   
@@ -59,6 +59,16 @@
   {
     return serviceIds_;
   }
+  
+  public void setServiceRuntimeId(String id)
+  {
+    serviceRuntimeId_ = id;
+  }
+  
+  public String getServiceRuntimeId()
+  {
+    return serviceRuntimeId_;
+  }
 
   /*
   public void setServiceProject2EARProject(SelectionListChoices choices)
@@ -106,7 +116,7 @@
    */
   public String getServerProject()
   {
-    return serviceProjectName_ + "/" + serviceComponentName_; 
+    return serviceProjectName_ + "/" + serviceProjectName_; 
   }
   
   /**
@@ -114,10 +124,9 @@
    */
   public String getServerProjectEAR()
   {
-    if (serviceEarProjectName_!=null && serviceEarProjectName_.length()>0 && 
-        serviceEarComponentName_!=null && serviceEarComponentName_.length()>0)
+    if (serviceEarProjectName_!=null && serviceEarProjectName_.length()>0)
     {
-      return serviceEarProjectName_ + "/" + serviceEarComponentName_;
+      return serviceEarProjectName_ + "/" + serviceEarProjectName_;
     }
     else
     {
@@ -193,15 +202,7 @@
    */
   public String getServiceJ2EEVersion()
   {
-  	return j2eeVersion;
-  }
-  
-  /**
-   * @param version The j2eeVersion to set.
-   */
-  public void setServiceJ2EEVersion(String version)
-  {
-  	j2eeVersion = version;
+  	return "14"; //rm j2ee
   }
   
   /**
@@ -216,33 +217,7 @@
   public void setServiceNeedEAR(boolean serviceNeedEAR)
   {
     serviceNeedEAR_ = serviceNeedEAR;
-  }  
-  
-  /**
-   * 
-   * @return returns true if the web service project is an EJB project.
-   */
-  public boolean getIsServiceProjectEJB()
-  {
-    //If the type/server/runtime suggests that an EJB project
-    //is required, return true.
-    boolean ejbRequired = false;
-    boolean ejbRequired2 = false;
-	// rskreg
-    //WebServiceServerRuntimeTypeRegistry wssrtRegistry = WebServiceServerRuntimeTypeRegistry.getInstance();
-    if (serviceIds_ != null)
-    {      
-      //String serverTypeId = wssrtRegistry.getWebServiceServerByFactoryId(serviceIds_.getServerId()).getId();
-	  //String serverTypeId = wssrtRegistry.getWebServiceServerByFactoryId(serviceIds_.getServerId()).getId();
-      //ejbRequired = wssrtRegistry.requiresEJBModuleFor(serverTypeId, serviceIds_.getRuntimeId(), serviceIds_.getTypeId());
-	  ejbRequired = WebServiceRuntimeExtensionUtils.requiresEJBModuleFor(serviceIds_.getServerId(), serviceIds_.getRuntimeId(), serviceIds_.getTypeId());
-      //ejbRequired2 = wssrtRegistry.requiresEJBProject(serviceIds_.getTypeId()); 
-	  ejbRequired2 = WebServiceRuntimeExtensionUtils.requiresEJBProject(serviceIds_.getRuntimeId(), serviceIds_.getTypeId());
-    }
-
-	// rskreg
-    return (ejbRequired || ejbRequired2);    
-  }
+  }    
   
   /**
    * @return Returns the wsdlParser_.
@@ -270,20 +245,10 @@
     this.serviceProjectName_ = serviceProjectName;
   }
 
-  public void setServiceComponentName(String s)
-  {
-    serviceComponentName_ = s;
-  }
-
   public void setServiceEarProjectName(String serviceEarProjectName)
   {
     this.serviceEarProjectName_ = serviceEarProjectName;
   }
-  
-  public void setServiceEarComponentName(String s)
-  {
-    serviceEarComponentName_ = s;
-  }
 
   public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException
   {
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionFragment.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionFragment.java
index 87b31d7..dfa0b13 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionFragment.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionFragment.java
@@ -11,7 +11,7 @@
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.object;
 
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceImpl;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.wst.command.internal.env.core.fragment.BooleanFragment;
 import org.eclipse.wst.command.internal.env.core.fragment.SequenceFragment;
@@ -71,8 +71,8 @@
     {
       String wst = typeRuntimeServer.getTypeId();
 
-      int scenario = WebServiceRuntimeExtensionUtils.getScenarioFromTypeId(wst);
-      String implId = WebServiceRuntimeExtensionUtils.getImplIdFromTypeId(wst);
+      int scenario = WebServiceRuntimeExtensionUtils2.getScenarioFromTypeId(wst);
+      String implId = WebServiceRuntimeExtensionUtils2.getWebServiceImplIdFromTypeId(wst);
       if (scenario == WebServiceScenario.TOPDOWN)
       {
         //Must have WSDL object selection. No choice.
@@ -80,7 +80,7 @@
       }
       else
       {
-        WebServiceImpl wsimpl = WebServiceRuntimeExtensionUtils.getWebServiceImplById(implId);
+        WebServiceImpl wsimpl = WebServiceRuntimeExtensionUtils2.getWebServiceImplById(implId);
         if (wsimpl!=null)
         {  
           String objectSelectionWidgetId = wsimpl.getObjectSelectionWidget(); 
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionOutputCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionOutputCommand.java
index 3cb6a96..4c50d4d 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionOutputCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionOutputCommand.java
@@ -21,7 +21,7 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jst.ws.internal.common.ResourceUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceImpl;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.wst.command.internal.provisional.env.core.data.Transformer;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
@@ -99,11 +99,11 @@
     {
       String wst = typeRuntimeServer.getTypeId();
 
-      int scenario = WebServiceRuntimeExtensionUtils.getScenarioFromTypeId(wst);
-      String implId = WebServiceRuntimeExtensionUtils.getImplIdFromTypeId(wst);
+      int scenario = WebServiceRuntimeExtensionUtils2.getScenarioFromTypeId(wst);
+      String implId = WebServiceRuntimeExtensionUtils2.getWebServiceImplIdFromTypeId(wst);
 
-      WebServiceImpl wsimpl = WebServiceRuntimeExtensionUtils.getWebServiceImplById(implId);
-	    //IWebServiceType wst = WebServiceRuntimeExtensionUtils.getWebServiceTypeById(typeRuntimeServer.getTypeId());
+      WebServiceImpl wsimpl = WebServiceRuntimeExtensionUtils2.getWebServiceImplById(implId);
+	    //IWebServiceType wst = WebServiceRuntimeExtensionUtils2.getWebServiceTypeById(typeRuntimeServer.getTypeId());
 
       if (wsimpl != null)
       {
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionWidget.java
index 779de1e..13fa081 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionWidget.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/ObjectSelectionWidget.java
@@ -19,7 +19,7 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jst.ws.internal.common.ResourceUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceImpl;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.layout.GridData;
@@ -65,9 +65,9 @@
     if (typeRuntimeServer != null)
     {
       String wst = typeRuntimeServer.getTypeId();
-      int scenario = WebServiceRuntimeExtensionUtils.getScenarioFromTypeId(wst);
-      String implId = WebServiceRuntimeExtensionUtils.getImplIdFromTypeId(wst);
-      WebServiceImpl wsimpl = WebServiceRuntimeExtensionUtils.getWebServiceImplById(implId);
+      int scenario = WebServiceRuntimeExtensionUtils2.getScenarioFromTypeId(wst);
+      String implId = WebServiceRuntimeExtensionUtils2.getWebServiceImplIdFromTypeId(wst);
+      WebServiceImpl wsimpl = WebServiceRuntimeExtensionUtils2.getWebServiceImplById(implId);
       
 	    //IWebServiceType wst = WebServiceRuntimeExtensionUtils.getWebServiceTypeById(typeRuntimeServer.getTypeId());
       if (wsimpl != null)
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidget.java
index f9adcab..1149139 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidget.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidget.java
@@ -13,6 +13,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jst.ws.internal.consumption.ui.common.ValidationUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.jst.ws.internal.ui.common.UIUtils;
 import org.eclipse.swt.SWT;
@@ -42,10 +43,11 @@
   private Group                        clientGroup_;
   private RuntimeServerSelectionWidget runtimeWidget_;
   private SelectionListChoices         runtime2ClientTypes_;
-  private Combo                        clientType_;
+  //private Combo                        clientType_;
   private SelectionAdapter             clientTypeSelListener;
   private ProjectSelectionWidget       projectWidget_;
   private boolean 					           isVisible_;
+  private String                        clientRuntimeId_;
   
   
   public WidgetDataEvents addControls( Composite parent, final Listener statusListener )
@@ -58,39 +60,37 @@
     
     runtimeWidget_ = new RuntimeServerSelectionWidget( true );
     runtimeWidget_.addControls( clientGroup_, statusListener );
+
+    
     runtimeWidget_.addModifyListener( new ModifyListener()
                                       {
                                         public void modifyText(ModifyEvent e)
                                         {
-                                          handleRuntime2ClientTypesEvent();
+                                          //handleRuntime2ClientTypesEvent();
                                           handleUpdateProjectWidget();
                                         }
                                       });
-    
-    clientType_ = uiUtils.createCombo( clientGroup_, "LABEL_CLIENT_TYPE",  
-                                       "TOOLTIP_PWCR_COMBO_CLIENT_TYPE",
-                                       INFOPOP_PWRS_GROUP_CLIENT, 
-                                       SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY );
-    
-    clientTypeSelListener = new SelectionAdapter()
-                                {
-                                  public void widgetSelected( SelectionEvent evt )
-                                  {
-                                    handleSetProjects( clientType_.getSelectionIndex() );
-                                    statusListener.handleEvent(null);
-                                  }
-                                };
-                                
-    clientType_.addSelectionListener(clientTypeSelListener);
+                                         
     
     projectWidget_ = new ProjectSelectionWidget(true);
     projectWidget_.addControls( clientGroup_, statusListener );
     
-    //projectWidget_.addModifyListener(new ModifyListener(){
-    //  								public void modifyText(ModifyEvent e){
-    //  								  getProjectSelections();
-    //  								}
-    //								});
+    //clientType_ = uiUtils.createCombo(clientGroup_, "LABEL_CLIENT_TYPE", "TOOLTIP_PWCR_COMBO_CLIENT_TYPE",
+    //    INFOPOP_PWRS_GROUP_CLIENT, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
+
+    //Temporarily remove the listeners
+    /*
+    clientTypeSelListener = new SelectionAdapter()
+    {
+      public void widgetSelected(SelectionEvent evt)
+      {
+        handleSetProjects(clientType_.getSelectionIndex());
+        statusListener.handleEvent(null);
+      }
+    };
+
+    clientType_.addSelectionListener(clientTypeSelListener);
+    */
     
     return this;
   }
@@ -118,16 +118,20 @@
     return runtimeWidget_.getTypeRuntimeServer();  
   }
   
-  public String getJ2EEVersion()
+  public void setClientRuntimeId(String id)
   {
-    return runtimeWidget_.getJ2EEVersion();
+    clientRuntimeId_ = id;
   }
   
-  public void setJ2EEVersion(String j2eeVersion)
+  public String getClientRuntimeId()
   {
-    runtimeWidget_.setJ2EEVersion(j2eeVersion);
-    projectWidget_.setJ2EEVersion(j2eeVersion);
-  }
+    //calculate the most appropriate clientRuntimeId based on current settings.
+    String projectName = projectWidget_.getProjectName();
+    String templateId = projectWidget_.getComponentType();
+    
+    //Find the client runtime that fits this profile best.
+    return WebServiceRuntimeExtensionUtils2.getClientRuntimeId(runtimeWidget_.getTypeRuntimeServer(), projectName, templateId);
+  } 
     
   public boolean getClientNeedEAR()
   {
@@ -139,31 +143,29 @@
     projectWidget_.setNeedEAR(b);
   }  
   
-  public String getClientComponentName()
+  public String getClientProjectName()
   {
-	return projectWidget_.getComponentName();  
+	return projectWidget_.getProjectName();  
   }
   
-  public void setClientComponentName( String name )
+  public void setClientProjectName( String name )
   {
-    projectWidget_.setComponentName( name );
+    projectWidget_.setProjectName( name );
   }
   
-  public String getClientEarComponentName()
+  public String getClientEarProjectName()
   {
-    return projectWidget_.getEarComponentName();	  
+    return projectWidget_.getEarProjectName();	  
   }
   
-  public void setClientEarComponentName( String name )
+  public void setClientEarProjectName( String name )
   {
-	projectWidget_.setEarComponentName( name );  
+	projectWidget_.setEarProjectName( name );  
   }
   
   public String getClientComponentType()
   {
-    SelectionList projTypeList = runtime2ClientTypes_.getChoice().getList();
-    projTypeList.setIndex( clientType_.getSelectionIndex() );
-    return projTypeList.getSelection();
+    return projectWidget_.getComponentType();
   }
   
   public void setClientComponentType( String type )
@@ -171,48 +173,7 @@
 	projectWidget_.setComponentType( type );  
   }
   
-  public String getClientProjectName()
-  {
-    return projectWidget_.getProjectName();  
-  }
-  
-  public String getClientEarProjectName()
-  {
-	return projectWidget_.getEarProjectName();  
-  }
-  
-  /**
-   * @param runtime2ClientTypes The runtime2ClientTypes to set.
-   */
-  public void setRuntime2ClientTypes(SelectionListChoices runtime2ClientTypes)
-  {
-    runtime2ClientTypes_ = runtime2ClientTypes;
-    handleRuntime2ClientTypesEvent();
-  }
-
-  public SelectionListChoices getRuntime2ClientTypes()
-  {
-    
-    String runtime       = runtimeWidget_.getTypeRuntimeServer().getRuntimeId();
-    String clientProject = projectWidget_.getProjectChoices().getList().getSelection();
-    String earProject    = projectWidget_.getProjectChoices().getChoice().getList().getSelection();
-    
-    SelectionList runtimeList  = runtime2ClientTypes_.getList();
-    runtimeList.setSelectionValue( runtime );
-    
-    SelectionList projTypeList = runtime2ClientTypes_.getChoice().getList();
-    projTypeList.setIndex( clientType_.getSelectionIndex() );
-    
-    SelectionListChoices clientProjChoice = runtime2ClientTypes_.getChoice().getChoice();
-    SelectionList        clientProjList   = clientProjChoice.getList();
-    clientProjList.setSelectionValue( clientProject );    
-    
-    SelectionList        earProjList      = clientProjChoice.getChoice().getList();   
-    earProjList.setSelectionValue( earProject );
-    
-    return runtime2ClientTypes_; 
-  }
-  
+  /*
   private void handleRuntime2ClientTypesEvent()
   {
     if (runtime2ClientTypes_ != null)
@@ -234,19 +195,24 @@
       clientType_.setItems( getClientTypeLabels( clientTypeIds ));
       clientType_.select(selectedClientTypeIdx);
       clientType_.addSelectionListener(clientTypeSelListener);
-      handleSetProjects(selectedClientTypeIdx);
+      // Temp remove listeners and event handling 
+      //handleSetProjects(selectedClientTypeIdx);
       
     }
   }
+  */
 
 
   private void handleUpdateProjectWidget()
   {
-    projectWidget_.setTypeRuntimeServer(runtimeWidget_.getTypeRuntimeServer());
-    projectWidget_.setJ2EEVersion(runtimeWidget_.getJ2EEVersion());
+    projectWidget_.setTypeRuntimeServer(runtimeWidget_.getTypeRuntimeServer());    
+
+    //Update the list of projects shown to the user.
+    projectWidget_.refreshProjectItems();    
   }
 
   
+  /*
   private void handleSetProjects( int clientTypeIndex )
   {    
     SelectionListChoices clientType2Projects = runtime2ClientTypes_.getChoice();
@@ -273,6 +239,7 @@
 	projectWidget_.setComponentType(clientType2Projects.getList().getSelection());
     projectWidget_.setProjectChoices( clientType2Projects.getChoice() );    
   }
+  */
   
   private String[] getClientTypeLabels( String[] types )
   {
@@ -318,7 +285,10 @@
    */
   public IStatus getStatus() 
   {
+    //Return OK all the time for now.
     IStatus finalStatus   = Status.OK_STATUS;
+    
+    /*
     IStatus projectStatus = projectWidget_.getStatus();
     IStatus runtimeStatus = runtimeWidget_.getStatus();
     
@@ -357,7 +327,8 @@
         
         //Validate client side server targets and J2EE levels
         String clientServerFactoryId = getClientTypeRuntimeServer().getServerId();
-        String clientJ2EElevel = getJ2EEVersion();
+        // rm j2ee
+        String clientJ2EElevel = "14";
         IStatus clientProjectStatus = valUtils.validateProjectTargetAndJ2EE(clientProjName, clientCompName, clientEARName, clientEARCompName, clientServerFactoryId,
             clientJ2EElevel);
         if (clientProjectStatus.getSeverity() == Status.ERROR)
@@ -366,6 +337,7 @@
         }
       }
     }
+    */
     return finalStatus;    
   }
 }
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidgetDefaultingCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidgetDefaultingCommand.java
index 2ebfd11..9cb2ea3 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidgetDefaultingCommand.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ClientRuntimeSelectionWidgetDefaultingCommand.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.consumption.ui.widgets.runtime;
 
+import java.util.Set;
 import java.util.Vector;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -24,11 +25,16 @@
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.jst.ws.internal.common.ResourceUtils;
 import org.eclipse.jst.ws.internal.common.ServerUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.common.FacetMatcher;
+import org.eclipse.jst.ws.internal.consumption.ui.common.FacetUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.common.ServerSelectionUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.common.ValidationUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.plugin.WebServiceConsumptionUIPlugin;
 import org.eclipse.jst.ws.internal.consumption.ui.preferences.PersistentServerRuntimeContext;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.ClientRuntimeDescriptor;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.RequiredFacetVersion;
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeInfo;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.wst.command.internal.provisional.env.core.common.MessageUtils;
@@ -39,7 +45,12 @@
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.environment.Environment;
 import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.ServerUtil;
 import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser;
 import org.eclipse.wst.ws.internal.provisional.wsrt.IContext;
 import org.eclipse.wst.ws.internal.provisional.wsrt.ISelection;
@@ -56,12 +67,15 @@
   // clientRuntimeJ2EEType contains the default client runtime and J2EE level based on the initial selection.
   // If the initialSeleciton does not result in a valid client runtime and J2EE level, clientRuntimeJ2EEType
   // should remain null for the life of this instance.  
-  private WSRuntimeJ2EEType    clientRuntimeJ2EEType_;
+  private WSRuntimeJ2EEType    clientRuntimeJ2EEType_; //usage is internal to this class
   
   private TypeRuntimeServer    clientIds_;
-  private SelectionListChoices runtimeClientTypes_;
-  private String clientComponentName_;
-  private String clientEarComponentName_;
+  private String clientRuntimeId_;
+  private String clientProjectName_;
+  private String clientEarProjectName_;
+  protected boolean clientNeedEAR_ = true;
+  private String clientComponentType_;
+  private FacetMatcher clientFacetMatcher_;
   
   private IContext          context_;
   private ISelection        selection_;
@@ -80,12 +94,9 @@
   //2. The containing project has a J2EE level, server target, and project type combination which
   //   is not supported by any of the registered Web service runtimes.
   private IProject clientInitialProject_;
-  private String clientInitialComponentName_;
   private IProject initialInitialProject_;
-  private String initialInitialComponentName_;
 
-  private String clientJ2EEVersion_;
-  protected boolean clientNeedEAR_ = true;
+
   
   private String wsdlURI_;
   private WebServicesParser parser_;
@@ -108,44 +119,24 @@
     return clientIds_; 
   }
   
-  public SelectionListChoices getRuntime2ClientTypes()
+  public String getClientRuntimeId()
   {
-    return runtimeClientTypes_;
+    return clientRuntimeId_;
   }
   
   public String getClientProjectName()
   {
-    return getRuntime2ClientTypes().getChoice().getChoice().getList().getSelection();
+    return clientProjectName_;
   }
   
   public String getClientEarProjectName()
   {
-    return getRuntime2ClientTypes().getChoice().getChoice().getChoice().getList().getSelection();
-  }
-  
-  public String getClientComponentName()
-  {
-    return clientComponentName_;
-  }
-  
-  public String getClientEarComponentName()
-  {
-    return clientEarComponentName_;
-  }
-  
-  protected void setClientEARComponentName(String name)
-  {
-    clientEarComponentName_ = name;
+    return clientEarProjectName_;
   }
   
   public String getClientComponentType()
   {
-    return  getRuntime2ClientTypes().getChoice().getList().getSelection();
-  }
-  
-  public String getClientJ2EEVersion()
-  {
-    return clientJ2EEVersion_;
+    return  clientComponentType_;
   }
   
   public IWebServiceClient getWebService()
@@ -163,9 +154,228 @@
     return selection_;    
   }
   
+  public IStatus execute(IProgressMonitor monitor, IAdaptable adaptable)
+  {
+
+    Environment env = getEnvironment();
+
+    try
+    {
+      // Set the runtime based on the initial selection
+      clientRuntimeId_ = getDefaultClientRuntime(clientInitialProject_);
+      if (clientRuntimeId_ == null)
+      {
+        // return and error.
+      }
+      clientIds_.setRuntimeId(WebServiceRuntimeExtensionUtils2.getClientRuntimeDescriptorById(clientRuntimeId_).getRuntime()
+          .getId());
+
+      // Set the project
+      if (clientProjectName_ == null)
+      {
+        // Project name did not get set when the runtime was set, so set it now
+        clientProjectName_ = getDefaultClientProjectName();
+      }
+
+      IProject clientProject = ProjectUtilities.getProject(clientProjectName_);
+      if (!clientProject.exists())
+      {
+        // Set the project template
+        clientComponentType_ = getDefaultClientProjectTemplate();
+      }
+      else
+      {
+        //Set it to an empty String
+        clientComponentType_ = "";
+      }
+
+      // Set the EAR
+      clientEarProjectName_ = ""; // TODO fix this!
+      clientNeedEAR_ = false;
+
+      // Set the server
+      IStatus serverStatus = setClientDefaultServer();
+      if (serverStatus.getSeverity() == Status.ERROR)
+      {
+        env.getStatusHandler().reportError(serverStatus);
+        return serverStatus;
+      }
+
+      // Calculate default IWebServiceClient
+      setDefaultsForExtension(env);
+
+      return Status.OK_STATUS;
+      
+    } catch (Exception e)
+    {
+      // Catch all Exceptions in order to give some feedback to the user
+      IStatus errorStatus = StatusUtils.errorStatus(msgUtils_.getMessage("MSG_ERROR_TASK_EXCEPTED",
+          new String[] { e.getMessage() }), e);
+      env.getStatusHandler().reportError(errorStatus);
+      return errorStatus;
+    }
+  }
+  
+  private IStatus setClientDefaultServer()
+  {
+    //Choose an existing server the module is already associated with if possible
+    IProject clientProject = ProjectUtilities.getProject(clientProjectName_);
+    IServer[] configuredServers = ServerUtil.getServersByModule(ServerUtils.getModule(clientProject), null);
+    IServer firstSupportedServer = getFirstSupportedServer(configuredServers, clientRuntimeId_, clientProject);
+    if (firstSupportedServer != null)
+    {
+      clientIds_.setServerId(firstSupportedServer.getServerType().getId());
+      clientIds_.setServerInstanceId(firstSupportedServer.getId());
+      return Status.OK_STATUS;        
+    }    
+    
+    
+    //Choose any suitable existing server
+    IServer[] servers = ServerCore.getServers();
+    IServer supportedServer = getFirstSupportedServer(servers, clientRuntimeId_, clientProject);
+    if (supportedServer != null)
+    {
+      clientIds_.setServerId(supportedServer.getServerType().getId());
+      clientIds_.setServerInstanceId(supportedServer.getId());
+      return Status.OK_STATUS;        
+    }        
+    
+    //No suitable existing server was found. Choose a suitable server type
+    String[] serverTypes = WebServiceRuntimeExtensionUtils2.getServerFactoryIdsByClientRuntime(clientRuntimeId_);
+    if (serverTypes!=null && serverTypes.length>0)
+    {
+      //TODO give priority to a server type that corresponds to the runtime associated with
+      //this project, if any.
+      clientIds_.setServerId(serverTypes[0]);
+      return Status.OK_STATUS;
+    }
+    
+    //No suitable server was found. Popup an error.
+    String runtimeLabel = WebServiceRuntimeExtensionUtils2.getRuntimeLabelById(clientIds_.getRuntimeId());
+    String serverLabels = getServerLabels(clientIds_.getRuntimeId());    
+    IStatus status = StatusUtils.errorStatus(msgUtils_.getMessage("MSG_ERROR_NO_SERVER_RUNTIME", new String[]{runtimeLabel, serverLabels}) );
+    return status;
+  }
+  
+  private IServer getFirstSupportedServer(IServer[] servers, String clientRuntimeId, IProject clientProject)
+  {
+    if (servers != null && servers.length > 0) {
+      for (int i = 0; i < servers.length; i++)
+      {
+        String serverFactoryId = servers[i].getServerType().getId();
+        if (WebServiceRuntimeExtensionUtils2.doesClientRuntimeSupportServer(clientRuntimeId, serverFactoryId))
+        {
+          //TODO check if the server type supports the project before returning.
+          return servers[i];
+        }
+      }
+    }
+    return null;
+  }    
+  
+  private String getDefaultClientProjectTemplate()
+  {
+    String[] templates = WebServiceRuntimeExtensionUtils2.getClientProjectTemplates(clientIds_.getTypeId(), clientIds_.getRuntimeId());
+    return templates[0];
+  }
+  
+  private String getDefaultClientProjectName()
+  {
+    IProject[] projects = FacetUtils.getAllProjects();
+    ClientRuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getClientRuntimeDescriptorById(clientRuntimeId_);
+    RequiredFacetVersion[] rfvs = desc.getRequiredFacetVersions();
+    
+    //Check each project for compatibility with the clientRuntime
+    for (int i=0; i<projects.length; i++)
+    {
+      try
+      {
+        IFacetedProject fproject = ProjectFacetsManager.create(projects[i]);
+        if (fproject != null)
+        {
+          Set facetVersions = fproject.getProjectFacets();
+          FacetMatcher fm = FacetUtils.match(rfvs, facetVersions);
+          if (fm.isMatch())
+          {
+            clientFacetMatcher_ = fm;
+            return projects[i].getName();
+          }            
+        }
+        else
+        {
+          //TODO Handle the plain-old Java projects            
+        }
+      } catch (CoreException ce)
+      {
+        
+      }
+    }
+    
+    //No project was suitable, return a new project name
+    return ResourceUtils.getDefaultWebProjectName();
+    
+  }
+  
+  private String getDefaultClientRuntime(IProject project)
+  {
+    //If possible, pick a Web service runtime that works with the initially selected project.
+    //If the initially selected project does not work with any of the Web service runtimes, pick the 
+    //preferred Web service runtime.
+    
+    String[] clientRuntimes = WebServiceRuntimeExtensionUtils2.getClientRuntimesByType(clientIds_.getTypeId());
+    if (project != null && project.exists())
+    {
+      for (int i=0; i<clientRuntimes.length; i++)
+      {
+        RequiredFacetVersion[] rfv = WebServiceRuntimeExtensionUtils2.getClientRuntimeDescriptorById(clientRuntimes[i]).getRequiredFacetVersions();
+        try
+        {
+          IFacetedProject fproject = ProjectFacetsManager.create(project);
+          if (fproject != null)
+          {
+            Set facetVersions = fproject.getProjectFacets();
+            FacetMatcher fm = FacetUtils.match(rfv, facetVersions);
+            if (fm.isMatch())
+            {
+              clientFacetMatcher_ = fm;
+              clientProjectName_ = project.getName();
+              return clientRuntimes[i];
+            }            
+          }
+          else
+          {
+            //TODO Handle the plain-old Java projects            
+          }
+        } catch (CoreException ce)
+        {
+          
+        }
+      }
+    }
+    
+    //Haven't returned yet so this means that the intitially selected project cannot be used
+    //to influence the selection of the runtime. Pick the preferred Web service runtime.
+    PersistentServerRuntimeContext context = WebServiceConsumptionUIPlugin.getInstance().getServerRuntimeContext();
+    String runtimeId = context.getRuntimeId();
+    for (int j=0; j<clientRuntimes.length; j++ )
+    {
+      ClientRuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getClientRuntimeDescriptorById(clientRuntimes[j]);
+      if (desc.getRuntime().getId().equals(runtimeId))
+      {
+        return desc.getId();
+      }
+    }
+    
+    if (clientRuntimes.length > 0)
+      return WebServiceRuntimeExtensionUtils2.getClientRuntimeDescriptorById(clientRuntimes[0]).getId();
+    else
+      return null;
+  }
+   
   /* (non-Javadoc)
    * @see org.eclipse.wst.command.env.core.Command#execute(org.eclipse.wst.command.internal.provisional.env.core.common.Environment)
    */
+  /*
   public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable )
   {    
     Environment env = getEnvironment();
@@ -191,14 +401,10 @@
         setClientProjectType(clientRuntimeJ2EEType_.getClientProjectTypeId());
         
       }
-	  //setClientRuntimeId((WebServiceRuntimeExtensionUtils.getRuntimesByClientType(clientIds_.getTypeId()))[0]);
-	  //setClientComponentType();
-	  //clientJ2EEVersion_ = (WebServiceRuntimeExtensionUtils.getWebServiceRuntimeById(clientIds_.getRuntimeId()).getJ2eeLevels())[0];
 	  
 
       //If clientInitialProject is the service project, check the initialInitialProject
-      //to see if it is valid.
-	    ///* 
+      //to see if it is valid. 
       ValidationUtils vu = new ValidationUtils();
       if (vu.isProjectServiceProject(clientInitialProject_, wsdlURI_, parser_))
       {            
@@ -215,7 +421,6 @@
           clientInitialComponentName_ = initialInitialComponentName_;
         }
       }
-      //*/
     
       setClientDefaultProject();
       setClientDefaultEAR();
@@ -239,13 +444,14 @@
     }
     
   }
-  
+  */
 
   /**
    * 
    * @param runtimeId
    * @return
    */
+  /*
   private SelectionListChoices getClientTypesChoice(String runtimeId)
   {
     String[] clientComponentTypes;
@@ -257,7 +463,7 @@
     }
     return new SelectionListChoices(list, choices);
   }
-    
+  */  
   /**
    * 
    * @param clientType
@@ -326,7 +532,7 @@
   */
   // rskreg
   
-
+  /*
   private void setClientDefaultRuntimeFromPreference()
   {
     PersistentServerRuntimeContext context = WebServiceConsumptionUIPlugin.getInstance().getServerRuntimeContext();
@@ -335,8 +541,8 @@
     //set the client runtime to be the preferred runtime if the client type allows.
     setClientRuntimeId(pRuntimeId);
   }
-
-  
+  */
+  /*
   private void setClientRuntimeId(String id)
   {
     String[] clientRuntimeIds = getRuntime2ClientTypes().getList().getList();
@@ -350,7 +556,8 @@
    	    }
     }    
   }
-  
+  */
+  /*
   private void setClientProjectType(String id)
   {
     String[] clientProjectTypeIds = getRuntime2ClientTypes().getChoice().getList().getList();
@@ -363,8 +570,8 @@
    	    }
     }        
   }
-  
-
+  */
+  /*
   protected void setClientDefaultJ2EEVersionFromPreference()
   {
     if (clientIds_ != null)
@@ -399,8 +606,9 @@
       }
     }  	
   }
+  */
 
-
+  /*
   private WSRuntimeJ2EEType getClientRuntimeAndJ2EEFromProject(IProject project, String componentName)
   {
     WSRuntimeJ2EEType cRJ2EE = null;
@@ -478,13 +686,14 @@
     }    
     return cRJ2EE;
   }
-
+  */
   
+  /*
   private void setClientComponentType()
   {
 	  getRuntime2ClientTypes().getChoice().getList().setIndex(0);	  
   }
-
+  */
   /*
   private void setClientDefaultProjectNew()
   {
@@ -541,6 +750,7 @@
   }
   */
   
+  /*
   private void setClientDefaultProject()
   {    
 	//Handle the case where no valid initial selection exists
@@ -563,8 +773,9 @@
     }
 
   }
+  */
 
-
+  /*
   private void setClientProjectToFirstValid()
   {
     //WebServiceClientTypeRegistry wsctReg = WebServiceClientTypeRegistry.getInstance();
@@ -615,7 +826,7 @@
     getRuntime2ClientTypes().getChoice().getChoice().getList().setSelectionValue(ResourceUtils.getDefaultWebProjectName());
     clientComponentName_ = ResourceUtils.getDefaultWebProjectName();
   }
-
+  */
   
   protected IResource getResourceFromInitialSelection(IStructuredSelection selection)
   {
@@ -638,6 +849,7 @@
   }
   
   
+  /*
   private void setClientDefaultEAR()
   {
     //Client-side
@@ -649,7 +861,7 @@
     getRuntime2ClientTypes().getChoice().getChoice().getChoice().getList().setSelectionValue(clientEARInfo[0]);
     clientEarComponentName_ = clientEARInfo[1];
   }
-  
+  */
   /*
   private void setClientDefaultEARNew()
   {    
@@ -702,6 +914,7 @@
    *  
    */
   
+  /*
   protected String[] getDefaultEARFromClientProject(IProject project, String componentName)
   {
     String[] projectAndComp = new String[2];
@@ -750,7 +963,9 @@
       //clientEarComponentName_ = ResourceUtils.getDefaultClientEARComponentName();
     }    
   }
+  */  
     
+  /*
   private IStatus setClientDefaultServer()
   {
 	  IStatus status = Status.OK_STATUS;
@@ -857,11 +1072,10 @@
     
     return status;
   }  
-  
-  protected String getServerLabels(String runtimeId)
+  */
+  protected String getServerLabels(String clientRuntimeId)
   {
-	    WebServiceRuntimeInfo wsrt = WebServiceRuntimeExtensionUtils.getWebServiceRuntimeById(runtimeId);
-	    String[] validServerFactoryIds = wsrt.getServerFactoryIds();
+        String[] validServerFactoryIds = WebServiceRuntimeExtensionUtils2.getServerFactoryIdsByClientRuntime(clientRuntimeId);
 	    //String[] validServerLabels = new String[validServerFactoryIds.length];
 	    StringBuffer validServerLabels = new StringBuffer(); 
 	    for (int i=0; i<validServerFactoryIds.length; i++)
@@ -876,17 +1090,19 @@
 	    return validServerLabels.toString();
   }
   
-  protected void updateClientProject(String projectName, String componentName, String serviceTypeId)
+  
+  protected void updateClientProject(String projectName, String serviceTypeId)
   {
     boolean isEJB = false;
-    String implId = WebServiceRuntimeExtensionUtils.getImplIdFromTypeId(serviceTypeId);
+    String implId = WebServiceRuntimeExtensionUtils2.getWebServiceImplIdFromTypeId(serviceTypeId);
     isEJB = (implId.equals("org.eclipse.jst.ws.wsImpl.ejb"));
-    String[] updatedNames = ResourceUtils.getClientProjectComponentName(projectName, componentName, isEJB);
-    getRuntime2ClientTypes().getChoice().getChoice().getList().setSelectionValue(updatedNames[0]);
-    clientComponentName_ = updatedNames[1];
+    String[] updatedNames = ResourceUtils.getClientProjectComponentName(projectName, projectName, isEJB);
+    clientProjectName_ = updatedNames[0];
     
   }
   
+  
+  /*
   protected void updateClientEARs()
   {
   	//Set EAR selection to null if the project/server defaults imply an EAR should not be created
@@ -929,15 +1145,16 @@
       }
   	}  	
   }  
+  */
   
   private void setDefaultsForExtension(Environment env)
   {
-    IWebServiceRuntime wsrt = WebServiceRuntimeExtensionUtils.getWebServiceRuntime(clientIds_.getRuntimeId());
+    IWebServiceRuntime wsrt = WebServiceRuntimeExtensionUtils2.getClientRuntime(clientRuntimeId_);
     if (wsrt != null)
     {
       WebServiceClientInfo wsInfo = new WebServiceClientInfo();
 
-      wsInfo.setJ2eeLevel(clientJ2EEVersion_);
+      wsInfo.setJ2eeLevel("14"); //rm j2ee
       wsInfo.setServerFactoryId(clientIds_.getServerId());
       wsInfo.setServerInstanceId(clientIds_.getServerInstanceId());
       wsInfo.setState(WebServiceState.UNKNOWN_LITERAL);
@@ -960,7 +1177,6 @@
     if (clientInitialProject_ == null)
     {
       clientInitialProject_ = getProjectFromInitialSelection(selection);
-      clientInitialComponentName_ = getComponentNameFromInitialSelection(selection);
     }
   }
 
@@ -969,18 +1185,12 @@
     clientInitialProject_ = clientInitialProject;
   }
   
-  public void setClientInitialComponentName(String name)
-  {
-    clientInitialComponentName_ = name;
-  }  
-  
   /**
    * @param initialInitialSelection_ The initialInitialSelection_ to set.
    */
   public void setInitialInitialSelection(IStructuredSelection initialInitialSelection)
   {
     initialInitialProject_ = getProjectFromInitialSelection(initialInitialSelection);
-    initialInitialComponentName_ = getComponentNameFromInitialSelection(initialInitialSelection);
   }
   
   public boolean getClientNeedEAR()
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ProjectSelectionWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ProjectSelectionWidget.java
index 66ba203..130881f 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ProjectSelectionWidget.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/ProjectSelectionWidget.java
@@ -19,7 +19,9 @@
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.jst.ws.internal.common.ResourceUtils;
 import org.eclipse.jst.ws.internal.common.ServerUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.common.FacetUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.common.ServerSelectionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.jst.ws.internal.ui.common.UIUtils;
 import org.eclipse.swt.SWT;
@@ -40,18 +42,20 @@
 
 public class ProjectSelectionWidget extends SimpleWidgetDataContributor {
 
+
+  
   private final String EAR_PERMITTED_PROJECT_TYPE = "EAR_PERMITTED_PROJECT_TYPE";
   //private final String JAVA_PROJECT_TYPE_ID = "org.eclipse.jst.ws.consumption.ui.clientProjectType.Containerless";
   
   private String pluginId_ = "org.eclipse.jst.ws.consumption.ui";
-
-  private SelectionListChoices projects_;
+  
+  //private SelectionListChoices projects_;
   
   private boolean needEAR_;
   
   private TypeRuntimeServer trsIds_;
-  
-  private String j2eeVersion_;
+
+  //private String j2eeVersion_;
   
   private String projectTypeId_ = EAR_PERMITTED_PROJECT_TYPE;
 
@@ -71,7 +75,9 @@
   
   private Combo moduleProject_;
   private Combo earProject_;
-  private String   componentType_;
+  private Combo projectType_;
+
+  //private String   componentType_;
   
   private ModifyListener moduleProjectListener_;
   private ModifyListener moduleListener_;
@@ -80,18 +86,26 @@
 
   private String initialModuleName_;
   
+  
+
   /*
    * CONTEXT_ID PWRS0006 for the service-side Web project combo box of the
    * runtime selection Page
    */
   private String INFOPOP_PWRS_COMBO_PROJECT = pluginId_ + ".PWRS0006";
 
-  private Combo module_;
+  //private Combo module_;
 
   /* CONTEXT_ID PWRS0012 for the EAR combo box of the runtime selection Page */
   private String INFOPOP_PWRS_COMBO_EAR = pluginId_ + ".PWRS0012";
+  
+  /* CONTEXT_ID PWRS0018 for the client project type combo box of the runtime selection Page */
+  private String INFOPOP_PWRS_COMBO_CLIENT_PROJECT_TYPE = pluginId_ + ".PWRS0018";
+  
+  /* CONTEXT_ID PWRS0024 for the service project type combo box of the runtime selection Page */
+  private String INFOPOP_PWRS_COMBO_SERVICE_PROJECT_TYPE = pluginId_ + ".PWRS0018";    
 
-  private Combo earModule_;
+  //private Combo earModule_;
 
   /*
    * Default Constructor
@@ -114,33 +128,32 @@
 		
     if (isClient_)
 	{
-	  moduleProject_ = uiUtils.createCombo(parent, "LABEL_CLIENT_PROJECT", "LABEL_CLIENT_PROJECT", INFOPOP_PWRS_COMBO_PROJECT, SWT.SINGLE | SWT.BORDER );
-      module_ = uiUtils.createCombo(parent, "LABEL_CLIENT_MODULE", "LABEL_CLIENT_MODULE", INFOPOP_PWRS_COMBO_PROJECT, SWT.SINGLE | SWT.BORDER );
+      projectType_ = uiUtils.createCombo(parent, "LABEL_CLIENT_TYPE", "TOOLTIP_PWCR_COMBO_CLIENT_TYPE", INFOPOP_PWRS_COMBO_CLIENT_PROJECT_TYPE, SWT.SINGLE | SWT.BORDER);
+	  moduleProject_ = uiUtils.createCombo(parent, "LABEL_CLIENT_PROJECT", "LABEL_CLIENT_PROJECT", INFOPOP_PWRS_COMBO_PROJECT, SWT.SINGLE | SWT.BORDER );            
+      //module_ = uiUtils.createCombo(parent, "LABEL_CLIENT_MODULE", "LABEL_CLIENT_MODULE", INFOPOP_PWRS_COMBO_PROJECT, SWT.SINGLE | SWT.BORDER );
 	  earProject_ = uiUtils.createCombo(parent, "LABEL_CLIENT_EAR_PROJECT", "LABEL_CLIENT_EAR_PROJECT", INFOPOP_PWRS_COMBO_PROJECT, SWT.SINGLE | SWT.BORDER );
-	  earModule_ = uiUtils.createCombo(parent, "LABEL_CLIENT_EAR_MODULE", "LABEL_CLIENT_EAR_MODULE", INFOPOP_PWRS_COMBO_EAR, SWT.SINGLE | SWT.BORDER );
+	  //earModule_ = uiUtils.createCombo(parent, "LABEL_CLIENT_EAR_MODULE", "LABEL_CLIENT_EAR_MODULE", INFOPOP_PWRS_COMBO_EAR, SWT.SINGLE | SWT.BORDER );
     }
     else 
 	{
+      projectType_ = uiUtils.createCombo(parent, "LABEL_SERVICE_TYPE", "TOOLTIP_PWCR_COMBO_SERVICE_TYPE", INFOPOP_PWRS_COMBO_SERVICE_PROJECT_TYPE, SWT.SINGLE | SWT.BORDER);      
 	  moduleProject_ = uiUtils.createCombo(parent, "LABEL_SERVICE_PROJECT", "LABEL_SERVICE_PROJECT", INFOPOP_PWRS_COMBO_PROJECT, SWT.SINGLE | SWT.BORDER );
-      module_ = uiUtils.createCombo(parent, "LABEL_SERVICE_MODULE", "LABEL_SERVICE_MODULE", INFOPOP_PWRS_COMBO_PROJECT, SWT.SINGLE | SWT.BORDER );
+      //module_ = uiUtils.createCombo(parent, "LABEL_SERVICE_MODULE", "LABEL_SERVICE_MODULE", INFOPOP_PWRS_COMBO_PROJECT, SWT.SINGLE | SWT.BORDER );
 	  earProject_ = uiUtils.createCombo(parent, "LABEL_SERVICE_EAR_PROJECT", "LABEL_SERVICE_EAR_PROJECT", INFOPOP_PWRS_COMBO_PROJECT, SWT.SINGLE | SWT.BORDER );
-	  earModule_ = uiUtils.createCombo(parent, "LABEL_SERVICE_EAR_MODULE", "LABEL_SERVICE_EAR_MODULE", INFOPOP_PWRS_COMBO_EAR, SWT.SINGLE | SWT.BORDER );
+	  //earModule_ = uiUtils.createCombo(parent, "LABEL_SERVICE_EAR_MODULE", "LABEL_SERVICE_EAR_MODULE", INFOPOP_PWRS_COMBO_EAR, SWT.SINGLE | SWT.BORDER );
     }
-	
-    //module_.addModifyListener(projectListener_);
-	
-    //earModule_.addModifyListener(earListener_);
-    //earModule_.addListener(SWT.Modify, statusListener);
-	
+    
+    //Temporarily remove the listeners
+    
 	moduleProjectListener_ = new ModifyListener()
 	                         {
 	                           public void modifyText(ModifyEvent evt) 
 					           {
-					             handleModuleProjectChanged(null);
+					             handleProjectChanged();
 					             statusListener_.handleEvent( null );
 		                       }
 	                         };
-
+    /*
 	moduleListener_ = new ModifyListener()
                       {
                         public void modifyText(ModifyEvent evt) 
@@ -158,7 +171,7 @@
 				              statusListener_.handleEvent( null );
 	                        }
                           };
-                          
+                        
     earModuleListener_ = new ModifyListener()
                              {
                                public void modifyText(ModifyEvent evt) 
@@ -166,29 +179,27 @@
 				                 statusListener_.handleEvent( null );
 	                           }
                              };
-							  
+    */					  
     // message area
     messageText_ = uiUtils.createText(parent, "LABEL_NO_LABEL", "LABEL_NO_LABEL", null, SWT.WRAP | SWT.MULTI | SWT.READ_ONLY);
+    setEarProjectItems();
   
     return this;
   }
   
   private void listenersOn()
   {
-	module_.addModifyListener( moduleListener_ );
 	moduleProject_.addModifyListener( moduleProjectListener_ );
-	earProject_.addModifyListener( earProjectListener_ );
-	earModule_.addModifyListener( earModuleListener_ );
+	//earProject_.addModifyListener( earModuleListener_ );
   }
   
   private void listenersOff()
   {
-    module_.removeModifyListener( moduleListener_ );
-	moduleProject_.removeModifyListener( moduleProjectListener_ );
-	earProject_.removeModifyListener( earProjectListener_ );
-	earModule_.removeModifyListener( earModuleListener_ );
+    moduleProject_.removeModifyListener( moduleProjectListener_ );
+	//earModule_.removeModifyListener( earModuleListener_ );
   }
   
+  /*
   private void handleModuleProjectChanged(String moduleName)
   {
 	String   projectName = moduleProject_.getText(); 
@@ -232,7 +243,9 @@
 	  }
   
   }
+  */
   
+  /*
   private void handleModuleChanged()
   {
 	IVirtualComponent component = getEarModuleForModule();
@@ -254,7 +267,9 @@
 	
 	updateEAREnabledState();
   }
+  */
 
+  /*
   private void handleEarProjectChanged()
   {
 	
@@ -288,7 +303,9 @@
 	  earModule_.setItems( new String[0] );	
 	}
   }
+  */
   
+  /*
   private IVirtualComponent getEarModuleForModule()
   {
 	String   projectName = moduleProject_.getText(); 
@@ -304,7 +321,9 @@
 	
 	return components.length == 0 ? null : components[0];
   }
-    
+  */
+  
+  /*
   public void setProjectChoices(SelectionListChoices projects) 
   {
 	listenersOff();
@@ -325,45 +344,53 @@
 	updateEAREnabledState();	
     listenersOn();
   }
+  */
+  
 
+
+  /*
   public SelectionListChoices getProjectChoices() 
   {
     return projects_;
   }
+  */
   
-  public String getComponentName()
+  public String getProjectName()
   {
-	return module_.getText();
+	return moduleProject_.getText();
   }
   
-  public void setComponentName( String name )
+  public void setProjectName( String name )
   {
 	listenersOff();
-    module_.setText( name );
+    moduleProject_.setText( name );
     initialModuleName_ = name;
+    handleProjectChanged();
 	listenersOn();
   }
   
-  public String getEarComponentName()
+  public String getEarProjectName()
   {
-    return earModule_.getText();
+    return earProject_.getText();
   }
   
-  public void setEarComponentName( String name )
+  public void setEarProjectName( String name )
   { 
 	listenersOff();
-	earModule_.setText( name );
+	earProject_.setText( name );
 	listenersOn();
   }
   
   public void setComponentType( String type )
   {
-	componentType_ = type;  
+	projectType_.setText(type);
   }
   
-  public String getComponentType( )
+  public String getComponentType()
   {
-	  return componentType_;
+    String templateLabel = projectType_.getText();
+    String templateId = FacetUtils.getTemplateIdByLabel(templateLabel);
+    return templateId;
   }
   
   public boolean getNeedEAR()
@@ -371,37 +398,29 @@
     return needEAR_;
   }
   
-  public String getProjectName()
-  {
-    return moduleProject_.getText();  
-  }
-  
-  public String getEarProjectName()
-  {
-	return earProject_.getText();  
-  }
-  
   public void setNeedEAR(boolean b)
   {
     needEAR_ = b;
+    if (needEAR_)
+    {
+     earProject_.setEnabled(true);
+     populateEARCombos();
+    }
+    else
+    {
+      earProject_.setEnabled(false);
+      earProject_.setText("");
+    }
   }    
 
   public void setTypeRuntimeServer(TypeRuntimeServer trs)
   {
     trsIds_ = trs;
 	listenersOff();
-    updateEAREnabledState();
+    updateEARState();
     listenersOn();
   }
   
-  public void setJ2EEVersion(String j2eeVersion)
-  {
-    j2eeVersion_ = j2eeVersion;
-	listenersOff();
-    updateEAREnabledState();
-	listenersOn();
-  }
-  
   public void setProjectTypeId(String id)
   {
     projectTypeId_ = id;
@@ -419,102 +438,151 @@
 	
 	return projectNames;
   }
-    
-  private void updateEAREnabledState()
+
+  public void refreshProjectItems()
   {
-    if (projects_ != null)
+    listenersOff();
+    String selectedModuleProject = moduleProject_.getText();    
+    String runtimeId = trsIds_.getRuntimeId();
+    String typeId = trsIds_.getTypeId();
+    
+    //Get all the projects that are compatible with the type and runtime
+    String[] projectNames = null;
+    if (isClient_)
     {
-      if(!projectNeedsEAR(moduleProject_.getText(), module_.getText()))
+      projectNames = WebServiceRuntimeExtensionUtils2.getProjectsForClientTypeAndRuntime(typeId, runtimeId);
+    }
+    else
+    {
+      projectNames = WebServiceRuntimeExtensionUtils2.getProjectsForServiceTypeAndRuntime(typeId, runtimeId);
+    }
+    
+    moduleProject_.setItems(projectNames);
+    moduleProject_.setText(selectedModuleProject);
+    System.out.println("moduleProject_ = "+moduleProject_.getText()+"..");
+    handleProjectChanged();
+    listenersOn();
+  }
+  
+  public void setEarProjectItems()
+  {
+    IVirtualComponent[] ears = J2EEUtils.getAllEARComponents();
+    String[] earProjectNames = new String[ears.length];
+    for (int i=0; i<earProjectNames.length; i++)
+    {
+      earProjectNames[i]=ears[i].getProject().getName();
+    }
+    earProject_.setItems(earProjectNames);
+    
+    if (earProjectNames.length > 0)
+      earProject_.select(0);
+  }
+  
+  private void handleProjectChanged()
+  {  
+    updateEARState();
+    updateTemplates();
+  }
+  
+  private void updateTemplates()
+  {
+    String projectName = moduleProject_.getText();
+    if (projectName != null && projectName.length()>0)
+    {
+      IProject project = ProjectUtilities.getProject(projectName);
+      if (project.exists())
       {
-	    earModule_.setEnabled(false);   
-		earProject_.setEnabled(false);
-        earModule_.setText("");
-		earProject_.setText("");
+        projectType_.setEnabled(false);
+        projectType_.setText("");        
+      }
+      else
+      {
+        populateProjectTypeCombo();
+        projectType_.setEnabled(true);
+      }
+    }
+  }
+  
+  private void populateProjectTypeCombo()
+  {
+    String[] templates = null;
+    if (isClient_)
+    {
+      templates = WebServiceRuntimeExtensionUtils2.getClientProjectTemplates(trsIds_.getTypeId(), trsIds_.getRuntimeId());
+    }
+    else
+    {
+      templates = WebServiceRuntimeExtensionUtils2.getServiceProjectTemplates(trsIds_.getTypeId(), trsIds_.getRuntimeId());      
+    }
+    
+    String[] templateLabels = FacetUtils.getTemplateLabels(templates);
+    projectType_.setItems(templateLabels);
+  
+    if (templates.length > 0)
+      projectType_.select(0);    
+  }
+  
+  private void updateEARState()
+  {
+      if(!projectNeedsEAR(moduleProject_.getText()))
+      {
+	    earProject_.setEnabled(false);   
+        earProject_.setText("");
         needEAR_ = false;
       }
       else
       {
         needEAR_ = true;
-        earModule_.setEnabled(true);
-		earProject_.setEnabled(true);
+        earProject_.setEnabled(true);
         populateEARCombos();
       }
-    }
+    
   }
 
   private void populateEARCombos()
   {
-    earModule_.removeAll();
     earProject_.removeAll();
-    String moduleName = module_.getText();
-    IProject moduleProj = ResourcesPlugin.getWorkspace().getRoot().getProject(moduleProject_.getText());
-    if (moduleProj.exists())
+    String projectName = moduleProject_.getText();
+    if (projectName != null && projectName.length() > 0)
     {
-      IVirtualComponent[] ears = J2EEUtils.getReferencingEARComponents(moduleProj);
-      if (ears != null && ears.length > 0)
+      IProject proj = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
+      if (proj.exists())
       {
-        for (int i = 0; i < ears.length; i++)
+        IVirtualComponent[] ears = J2EEUtils.getReferencingEARComponents(proj);
+        if (ears != null && ears.length > 0)
         {
-          earModule_.add(ears[i].getName());
-          earProject_.add(ears[i].getProject().getName());
+          for (int i = 0; i < ears.length; i++)
+          {
+            earProject_.add(ears[i].getName());
+          }
+          earProject_.select(0);
+          return;
         }
-        earModule_.select(0);
-        earProject_.select(0);
-        return;
       }
+      
+      String earName = projectName + "EAR";
+      earProject_.setText(earName);      
     }
-    String earName = moduleName + "EAR";
-    earModule_.setText(earName);
-    earProject_.setText(earName);
+    else
+    {
+      setEarProjectItems();
+    }
   }
 
-  private boolean projectNeedsEAR(String projectName, String componentName)
+  private boolean projectNeedsEAR(String projectName)
   {
-    if (projectTypeId_.equals(IModuleConstants.JST_UTILITY_MODULE))
-      return false;
-    
-    if (projectName == null || projectName.length()==0)
-      return true;
-    
-    if (componentName == null || componentName.length()==0)
-      return true;
-    
-    
-    //IProject project = (IProject)((new StringToIProjectTransformer()).transform(projectName));
-	IProject project = ResourceUtils.getWorkspaceRoot().getProject(projectName);
-  	if (project != null && project.exists())
-  	{
-  	  //Get the runtime target on the project
-  	  IRuntime target = ServerSelectionUtils.getRuntimeTarget(projectName);
-  	  String j2eeVersion = String.valueOf(J2EEVersionConstants.J2EE_1_4_ID);
-  	  if (J2EEUtils.exists(project))
-  	    j2eeVersion = String.valueOf(J2EEUtils.getJ2EEVersion(project));
-  	
-  	  
-  	  if (target != null)
+	//Use the server type
+    if (trsIds_ != null && trsIds_.getServerId() != null)
+    {
+      String targetId = ServerUtils.getRuntimeTargetIdFromFactoryId(trsIds_.getServerId());
+  	  if (targetId!=null && targetId.length()>0)
   	  {
-  	  	if (!ServerUtils.isTargetValidForEAR(target.getRuntimeType().getId(),j2eeVersion))
-  	  	{
-          return false;
-  	  	}
-  	  		
-  	  }
-  	}
-  	else
-  	{
-  		//Use the server type
-  	    if (trsIds_ != null && trsIds_.getServerId() != null)
+  	    if (!ServerUtils.isTargetValidForEAR(targetId,"13")) //rm j2ee
   	    {
-  		  String targetId = ServerUtils.getRuntimeTargetIdFromFactoryId(trsIds_.getServerId());
-  		  if (targetId!=null && targetId.length()>0)
-  		  {
-  		    if (!ServerUtils.isTargetValidForEAR(targetId,j2eeVersion_))
-  		    {
-  		      return false;
-  	  	    }
-  		  }
+  	      return false;
   	    }
-  	}      	
+  	  }
+    }
   	
   	return true;    
   }
@@ -523,7 +591,7 @@
     IStatus status = Status.OK_STATUS;
     try {
       byte result = (byte) 0;
-      if (module_.getText().length() != 0 && earModule_.getText().length() != 0) {
+      if (moduleProject_.getText().length() != 0 && earProject_.getText().length() != 0) {
         String projectText = moduleProject_.getText();
         String earText = earProject_.getText();
         IProject project = ResourceUtils.getWorkspaceRoot().getProject(projectText);
@@ -602,30 +670,6 @@
         return StatusUtils.errorStatus( msgUtils.getMessage("MSG_SERVICE_EAR_EMPTY", new String[]{""} ) );      
     }
     
-    if( module_ == null || module_.getText().length() == 0 ) 
-    {
-      if( isClient_ )
-      {
-        return StatusUtils.errorStatus( msgUtils.getMessage("MSG_CLIENT_PROJECT_EMPTY", new String[]{moduleText} ) );
-      }
-      else
-      {
-        return StatusUtils.errorStatus( msgUtils.getMessage("MSG_CLIENT_EAR_EMPTY", new String[]{moduleText} ) );        	
-      }
-    }
-      
-    if( needEAR_ && ( earModule_ == null || earModule_.getText().length() == 0 ) )
-    {
-      if( isClient_ )
-      {
-        return StatusUtils.errorStatus( msgUtils.getMessage("MSG_CLIENT_EAR_EMPTY", new String[]{moduleText} ) );
-      }
-      else
-      {
-        return StatusUtils.errorStatus( msgUtils.getMessage("MSG_SERVICE_EAR_EMPTY", new String[]{moduleText} ) );        	
-      }  
-    }
-    
 //  TODO:  Defect 107997 - Revisit prject and module creation logic
 //    if( !FlexibleJavaProjectPreferenceUtil.getMultipleModulesPerProjectProp() )
 //    {
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/RuntimeServerSelectionWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/RuntimeServerSelectionWidget.java
index 6b4db2b..0d528df 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/RuntimeServerSelectionWidget.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/runtime/RuntimeServerSelectionWidget.java
@@ -15,7 +15,7 @@
 import org.eclipse.jface.window.Window;
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.wizard.RuntimeServerSelectionDialog;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.jst.ws.internal.ui.common.UIUtils;
 import org.eclipse.swt.SWT;
@@ -43,11 +43,11 @@
   private String            pluginId_ = "org.eclipse.jst.ws.consumption.ui";
   private Text              runtime_;
   private Text              server_;
-  private Text              j2eeVersionText;
+  //private Text              j2eeVersionText;
   private Composite         parent_;
   private boolean           isClientContext_;
   private TypeRuntimeServer ids_;
-  private String             j2eeVersion_;
+  //private String             j2eeVersion_;
   private MessageUtils       msgUtils_;
   private Listener           statusListener_;
   
@@ -86,8 +86,6 @@
                                   "TOOLTIP_PWRS_TEXT_SERVER",
                                   INFOPOP_PWRS_GROUP_SERVICE_SERVER, SWT.READ_ONLY );
     
-    j2eeVersionText = uiUtils.createText(parent, "LABEL_J2EE_VERSION", "TOOLTIP_PWRS_J2EE_VERSION", INFOPOP_PWRS_J2EE_VERSION, SWT.READ_ONLY);
-    
     Button editButton = new Button( parent, SWT.NONE );
     editButton.setText( msgUtils_.getMessage("LABEL_EDIT_BUTTON")); 
     editButton.addSelectionListener( new SelectionAdapter()
@@ -115,24 +113,9 @@
     setLabels();
   }
   
-  public String getJ2EEVersion()
-  {
-    return j2eeVersion_;
-  }
-  
-  public void setJ2EEVersion(String j2eeVersion)
-  {
-    this.j2eeVersion_ = j2eeVersion;
-    j2eeVersionText.setText((j2eeVersion_ != null) ? J2EEUtils.getLabelFromJ2EEVersion(j2eeVersion_) : msgUtils_.getMessage("LABEL_NA"));
-    //setLabels();
-  }
-  
   private void setLabels()
   {
-	  // rskreg
-    //WebServiceClientTypeRegistry registry     = WebServiceClientTypeRegistry.getInstance();
-    //String                       runtimeLabel = registry.getRuntimeLabelById( ids_.getRuntimeId() );
-	String                       runtimeLabel = WebServiceRuntimeExtensionUtils.getRuntimeLabelById( ids_.getRuntimeId() );
+	String                       runtimeLabel = WebServiceRuntimeExtensionUtils2.getRuntimeLabelById( ids_.getRuntimeId() );
     String                       serverLabel  = null;
     
     if( ids_.getServerInstanceId() == null )
@@ -142,7 +125,7 @@
       //serverLabel = server == null ? "" : server.getLabel();
       String serverId = ids_.getServerId();
       if (serverId != null)
-        serverLabel = WebServiceRuntimeExtensionUtils.getServerLabelById(serverId);
+        serverLabel = WebServiceRuntimeExtensionUtils2.getServerLabelById(serverId);
     }
     else
     {
@@ -150,7 +133,7 @@
       //serverLabel = registry.getServerInstanceLabelFromInstanceId( ids_.getServerInstanceId() );
       String serverInstanceId = ids_.getServerInstanceId();
       if (serverInstanceId != null)
-        serverLabel = WebServiceRuntimeExtensionUtils.getServerInstanceLabelFromInstanceId(serverInstanceId);
+        serverLabel = WebServiceRuntimeExtensionUtils2.getServerInstanceLabelFromInstanceId(serverInstanceId);
     }
     // rskreg
     runtimeLabel = runtimeLabel == null ? "" : runtimeLabel;
@@ -158,7 +141,7 @@
     runtime_.setText( runtimeLabel );
     if (serverLabel != null)
       server_.setText( serverLabel );
-    j2eeVersionText.setText((j2eeVersion_ != null) ? J2EEUtils.getLabelFromJ2EEVersion(j2eeVersion_) : msgUtils_.getMessage("LABEL_NA"));
+ 
   }
   
   public void handleEditButton()
@@ -166,7 +149,7 @@
     byte mode = isClientContext_ ? (byte)1 : (byte)0;
     
     RuntimeServerSelectionDialog dialog     
-      = dialog = new RuntimeServerSelectionDialog( parent_.getShell(), mode, ids_, j2eeVersion_ );
+      = dialog = new RuntimeServerSelectionDialog( parent_.getShell(), mode, ids_, "14" ); //rm j2ee
     dialog.create();
     dialog.handleServerViewSelectionEvent();
     int result = dialog.open();
@@ -174,7 +157,6 @@
     if (result == Window.OK)
     {
       ids_ = dialog.getTypeRuntimeServer();
-      j2eeVersion_ = dialog.getJ2EEVersion();
       setLabels();
       statusListener_.handleEvent(null);
     }  
@@ -201,8 +183,8 @@
     String scenario = isClientContext_ ? msgUtils_.getMessage( "MSG_CLIENT_SUB" )
                                         : msgUtils_.getMessage( "MSG_SERVICE_SUB" );
     
-	String                       runtimeLabel = WebServiceRuntimeExtensionUtils.getRuntimeLabelById( ids_.getRuntimeId() );
-	String                       serverLabel  = ids_.getServerId() == null ? "" : WebServiceRuntimeExtensionUtils.getServerLabelById(ids_.getServerId());
+	String                       runtimeLabel = WebServiceRuntimeExtensionUtils2.getRuntimeLabelById( ids_.getRuntimeId() );
+	String                       serverLabel  = ids_.getServerId() == null ? "" : WebServiceRuntimeExtensionUtils2.getServerLabelById(ids_.getServerId());
     
 	
     if( ids_.getRuntimeId() == null || runtimeLabel == null || runtimeLabel.equals("" ))
@@ -238,7 +220,7 @@
 		
 		if (!foundNonStubRuntime)
 		{	
-			String servertypeLabel = WebServiceRuntimeExtensionUtils.getServerLabelById(serverFactoryId);
+			String servertypeLabel = WebServiceRuntimeExtensionUtils2.getServerLabelById(serverFactoryId);
 			status = StatusUtils.errorStatus( msgUtils_.getMessage("MSG_ERROR_STUB_ONLY",new String[]{servertypeLabel}) );					
 		}
 	}		
@@ -249,7 +231,7 @@
 	if (!(ids_.getServerId() == null) && !(ids_.getRuntimeId() == null) && isClientContext_)
 	{
 
-		if (!WebServiceRuntimeExtensionUtils.webServiceClientRuntimeTypeExists( ids_.getServerId(), ids_.getRuntimeId(), ids_.getTypeId())) 
+		if (!WebServiceRuntimeExtensionUtils2.isServerClientRuntimeTypeSupported( ids_.getServerId(), ids_.getRuntimeId(), ids_.getTypeId())) 
 		{
 			status = StatusUtils.errorStatus( msgUtils_.getMessage( "MSG_INVALID_SRT_SELECTIONS", new String[]{ scenario } ) );		  
 		}
@@ -260,7 +242,7 @@
     if (!(ids_.getServerId() == null) && !(ids_.getRuntimeId() == null) && !isClientContext_)
     {
 
-	  if (!WebServiceRuntimeExtensionUtils.isServerRuntimeTypeSupported(ids_.getServerId(), ids_.getRuntimeId(), ids_.getTypeId())) {	  
+	  if (!WebServiceRuntimeExtensionUtils2.isServerRuntimeTypeSupported(ids_.getServerId(), ids_.getRuntimeId(), ids_.getTypeId())) {	  
         status = StatusUtils.errorStatus( msgUtils_.getMessage( "MSG_INVALID_SRT_SELECTIONS", new String[]{ scenario } ) );      
       }
 
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wizard/RuntimeServerSelectionDialog.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wizard/RuntimeServerSelectionDialog.java
index 778828d..ce4d40b 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wizard/RuntimeServerSelectionDialog.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wizard/RuntimeServerSelectionDialog.java
@@ -18,8 +18,8 @@
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.jst.ws.internal.common.ServerUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.plugin.WebServiceConsumptionUIPlugin;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeInfo;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.RuntimeDescriptor;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
@@ -107,7 +107,8 @@
   private String typeId_;
   // rskreg
   //private IWebServiceRuntime selectedRuntime_;
-  private WebServiceRuntimeInfo selectedRuntime_;
+  //private WebServiceRuntimeInfo selectedRuntime_;
+  private RuntimeDescriptor selectedRuntime_;
   // rskreg
   private IServer selectedServer_;
   private String selectedServerLabel_;
@@ -408,12 +409,12 @@
       // {
 		  
 		  //rskreg
-      boolean wssrtSupported = WebServiceRuntimeExtensionUtils.isServerRuntimeTypeSupported(selectedServerFactoryID_,selectedRuntime_.getId(),typeId_);		  
+      boolean wssrtSupported = WebServiceRuntimeExtensionUtils2.isServerRuntimeTypeSupported(selectedServerFactoryID_,selectedRuntime_.getId(),typeId_);		  
       //if (wssrt != null && wssrtRegistry.isServerSupportedForChosenType(typeId_, selectedServerFactoryID_)) {
         //setOKStatusMessage();
       //}
 	  
-      if (wssrtSupported && WebServiceRuntimeExtensionUtils.isServerSupportedForChosenType(typeId_, selectedServerFactoryID_)) {
+      if (wssrtSupported && WebServiceRuntimeExtensionUtils2.isServerSupportedForChosenServiceType(typeId_, selectedServerFactoryID_)) {
 	        setOKStatusMessage();
 	      }
 	  // rskreg
@@ -435,7 +436,7 @@
       //if (wss == null || selectedRuntime_ == null || !wsctRegistry.webServiceClientRuntimeTypeExists(wss.getId(), selectedRuntime_.getId(), clientId)) {
         //setERRORStatusMessage("%MSG_INVALID_SRT_SELECTIONS");
       //}
-      if (selectedServerFactoryID_==null || selectedRuntime_ == null || !WebServiceRuntimeExtensionUtils.webServiceClientRuntimeTypeExists(selectedServerFactoryID_, selectedRuntime_.getId(), clientId)) {
+      if (selectedServerFactoryID_==null || selectedRuntime_ == null || !WebServiceRuntimeExtensionUtils2.isServerClientRuntimeTypeSupported(selectedServerFactoryID_, selectedRuntime_.getId(), clientId)) {
 	        setERRORStatusMessage("%MSG_INVALID_SRT_SELECTIONS");
 	  }	  
 	  // rskreg
@@ -603,16 +604,13 @@
   }
 
   private void processRuntimeListSelection(String runtimeName) {
-	  // rskreg
+
     if (selectionMode_ == MODE_SERVICE) {
-      //selectedRuntime_ = wssrtRegistry.getWebServiceRuntimeByLabel(runtimeName);
-		selectedRuntime_ = WebServiceRuntimeExtensionUtils.getWebServiceRuntimeByLabel(runtimeName);
+		selectedRuntime_ = WebServiceRuntimeExtensionUtils2.getRuntimeByLabel(runtimeName);
     }
     else {
-      //selectedRuntime_ = wsctRegistry.getWebServiceRuntimeByName(runtimeName);
-		selectedRuntime_ = WebServiceRuntimeExtensionUtils.getWebServiceRuntimeByLabel(runtimeName);
+		selectedRuntime_ = WebServiceRuntimeExtensionUtils2.getRuntimeByLabel(runtimeName);
     }
-	 // rskreg
   }
 
   private void processServerListSelection() {
@@ -663,14 +661,10 @@
     String[] runtimes = null;
 
     if (selectionMode_ == MODE_SERVICE) {
-		// rskreg
-      //runtimes = wssrtRegistry.getRuntimesByType(typeId_);
-		runtimes = WebServiceRuntimeExtensionUtils.getRuntimesByType(typeId_);
+		runtimes = WebServiceRuntimeExtensionUtils2.getRuntimesByServiceType(typeId_);
     }
     else {
-      //runtimes = wsctRegistry.getAllClientRuntimes();
-	  runtimes = WebServiceRuntimeExtensionUtils.getAllClientRuntimes();
-	  // rskreg
+	  runtimes = WebServiceRuntimeExtensionUtils2.getAllRuntimesForClientSide();
     }
 
     TreeItem[] runtimeName = new TreeItem[runtimes.length];
@@ -693,18 +687,14 @@
     return getRuntime(type).getLabel();
   }
 
-  // rskreg
-  private WebServiceRuntimeInfo getRuntime(String type) {
+  private RuntimeDescriptor getRuntime(String type) {
     if (selectionMode_ == MODE_SERVICE) {
-      //return wssrtRegistry.getRuntimeById(type);
-	  return WebServiceRuntimeExtensionUtils.getWebServiceRuntimeById(type);
+	  return WebServiceRuntimeExtensionUtils2.getRuntimeById(type);
     }
     else {
-      //return wsctRegistry.getRuntimeById(type);
-	  return WebServiceRuntimeExtensionUtils.getWebServiceRuntimeById(type);
+	  return WebServiceRuntimeExtensionUtils2.getRuntimeById(type);
     }
   }
-  // rskreg
 
   /**
    * 
@@ -763,18 +753,10 @@
       String[] serverIds = null;
       // rm String wst = wse.getWebServiceType();
       if (selectionMode_ == MODE_SERVICE) {
-		  // rskreg
-        //serverIds = wssrtRegistry.getServerFactoryIdsByType(typeId_);
-		serverIds = WebServiceRuntimeExtensionUtils.getServerFactoryIdsByType(typeId_);
-		  // rskreg
+		serverIds = WebServiceRuntimeExtensionUtils2.getServerFactoryIdsByServiceType(typeId_);
       }
       else {
-        //serverIds = wsctRegistry.getServerFactoryIdsByClientType(typeId_);
-		  // rskreg
-        //serverIds = wsctRegistry.getAllClientServerFactoryIds();
-		serverIds = WebServiceRuntimeExtensionUtils.getAllClientServerFactoryIds();
-		// rskreg
-
+		serverIds = WebServiceRuntimeExtensionUtils2.getAllClientServerFactoryIds();
       }
       // rm serverId =
       // wssrtRegistry.getServerFactoryIdsByType(wse.getWebServiceType());
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wizard/TypeSelectionFilter2.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wizard/TypeSelectionFilter2.java
new file mode 100644
index 0000000..8ae6bec
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wizard/TypeSelectionFilter2.java
@@ -0,0 +1,193 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.jst.ws.internal.consumption.ui.wizard;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jst.ws.internal.common.ResourceUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceImpl;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
+import org.eclipse.wst.ws.internal.provisional.wsrt.WebServiceScenario;
+
+
+public class TypeSelectionFilter2
+{
+  // Copyright
+  public static final String copyright = "(c) Copyright IBM Corporation 2000, 2002.";
+
+  public String[] getWebServiceTypeByInitialSelection(IStructuredSelection initialSelection, ArrayList webServiceTypeList)
+  {
+        
+    ArrayList supportedTypes = new ArrayList();
+    if (initialSelection != null && initialSelection.size() == 1)
+    {
+      
+      // Check for null initial selection
+      Object initialObject = initialSelection.getFirstElement();
+      if (initialObject == null)
+      {
+        return null;
+      }
+      // Match up resource type metadata with initial selection
+      Iterator iter = webServiceTypeList.iterator();
+      while (iter.hasNext())
+      {
+        String wst = (String)iter.next();
+        String scenario = wst.substring(0,wst.indexOf("/"));
+        String implId = wst.substring(wst.indexOf("/")+1);        
+        //IWebServiceType wst = (IWebServiceType)iter.next();
+        //String typeId = (String)wst.getId();
+        if (scenario.equals(String.valueOf(WebServiceScenario.BOTTOMUP)) && !supportedTypes.contains(wst))
+        {
+
+          
+          WebServiceImpl wsimpl = WebServiceRuntimeExtensionUtils2.getWebServiceImplById(implId);
+          String[] resourceTypes = wsimpl.getResourceTypeMetadata();
+          for (int i=0; i<resourceTypes.length; i++)
+          {
+            if (resourceTypes[i]!=null)
+            {              
+              if ((initialObject.getClass().getName()).endsWith(resourceTypes[i]))
+              {
+                String name = null;
+                IResource resource = null;
+
+                try
+                {                  
+                  resource = ResourceUtils.getResourceFromSelection(initialObject);
+                }
+                catch( CoreException exc )
+                {
+                  resource = null;
+                }
+
+                if (resource instanceof IContainer)
+                {
+                  name = initialObject.getClass().getName();
+                }
+                else if( resource != null )
+                {
+                  name = resource.getFullPath().toString();
+                }
+                else
+                {
+                  name = initialObject.getClass().getName();
+                }
+                String[] extensions = wsimpl.getExtensionMetadata();
+                if (acceptsName(name, extensions))
+                {
+                  supportedTypes.add(wst);
+                }
+              }
+              
+            }
+          }
+        }
+      }
+      
+      //If no wsImpls have accepted this selection, check if this is WSDL. If it is,
+      //add the top-down Java service type to the list.
+      if (supportedTypes.isEmpty())
+      {
+        String[] resourceTypes = {"File", "IResource", "String", "ServiceImpl", "ServiceRefImpl", "WSDLResourceImpl"};
+        for (int i=0; i<resourceTypes.length; i++)
+        {
+          if (resourceTypes[i]!=null)
+          {              
+            if ((initialObject.getClass().getName()).endsWith(resourceTypes[i]))
+            {
+              String name = null;
+              IResource resource = null;
+
+              try
+              {                  
+                resource = ResourceUtils.getResourceFromSelection(initialObject);
+              }
+              catch( CoreException exc )
+              {
+                resource = null;
+              }
+
+              if (resource instanceof IContainer)
+              {
+                name = initialObject.getClass().getName();
+              }
+              else if( resource != null )
+              {
+                name = resource.getFullPath().toString();
+              }
+              else
+              {
+                name = initialObject.getClass().getName();
+              }
+              String[] extensions = {".wsdl", ".wsil", ".html", ".ServiceImpl", ".ServiceRefImpl", ".WSDLResourceImpl"};
+              if (acceptsName(name, extensions))
+              {
+                StringBuffer entrybuff = new StringBuffer();
+                entrybuff.append(String.valueOf(WebServiceScenario.TOPDOWN));
+                entrybuff.append("/");
+                entrybuff.append("org.eclipse.jst.ws.wsImpl.java");
+                String entry = entrybuff.toString();                
+                supportedTypes.add(entry);
+              }
+            }
+            
+          }
+        }      
+      }
+      
+    }    
+  
+
+    
+    if (supportedTypes.isEmpty())
+    {
+      //It's not a registered implementation and its not WSDL so return null;
+      return null;
+    }
+    else
+    {
+      return (String[])supportedTypes.toArray(new String[0]);
+    }
+  }
+  //
+  // Checks if the given name is acceptable based upon its extension
+  //
+  private boolean acceptsName ( String name, String[] extensions)
+  {
+    //Return true if "all" extensions are supported.
+
+    if (extensions[0]!=null)
+    {
+      if (extensions[0].equals("all"))
+      {
+        return true;
+      }
+    }
+
+    for (int i=0; i<extensions.length; i++)
+    {
+      if (extensions[i]!=null)
+      {
+        if (name.endsWith(extensions[i]))
+          return true;
+      }
+    }
+    return false;
+  }
+
+
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/ClientRuntimeDescriptor.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/ClientRuntimeDescriptor.java
new file mode 100644
index 0000000..14bd601
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/ClientRuntimeDescriptor.java
@@ -0,0 +1,135 @@
+package org.eclipse.jst.ws.internal.consumption.ui.wsrt;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.ws.internal.provisional.wsrt.IWebServiceRuntime;
+
+public class ClientRuntimeDescriptor
+{
+  private IConfigurationElement elem;
+  private Hashtable allWebServiceClientImpls;
+  private Hashtable allRuntimes;
+  private String id;
+  private WebServiceClientImpl clientImplementationType;
+  private RuntimeDescriptor runtime;
+  private String clientRuntimeClassName;
+  private IWebServiceRuntime webServiceRuntime;
+  private RequiredFacetVersion[] requiredFacetVersions;
+  private Set projectFacetVersions;
+  
+  public ClientRuntimeDescriptor(IConfigurationElement elem, Hashtable allWebServiceClientImpls, Hashtable allRuntimes)
+  {
+    this.elem = elem;
+    this.allWebServiceClientImpls = allWebServiceClientImpls;
+    this.allRuntimes = allRuntimes;
+  }
+  
+  public WebServiceClientImpl getClientImplementationType()
+  {
+    if (clientImplementationType == null)
+    {
+     String clientImplementationTypeId = elem.getAttribute("clientImplementationTypeId");
+     clientImplementationType = (WebServiceClientImpl)allWebServiceClientImpls.get(clientImplementationTypeId);
+    }
+    return clientImplementationType;
+  }
+  
+  public String getClientRuntimeClassName()
+  {
+    if (clientRuntimeClassName == null)
+    {
+      clientRuntimeClassName = elem.getAttribute("class");
+    }
+    return clientRuntimeClassName;
+  }
+  
+  public String getId()
+  {
+    if (id == null)
+    {
+      id = elem.getAttribute("id");
+    }    
+    return id;
+  }
+  
+  public RequiredFacetVersion[] getRequiredFacetVersions()
+  {
+    if (requiredFacetVersions == null)
+    {
+      ArrayList requiredFacetVersionList = new ArrayList();
+      IConfigurationElement[] facetElems = elem.getChildren("required-facet-version");
+      for (int i = 0; i < facetElems.length; i++)
+      {
+        RequiredFacetVersion rfv = new RequiredFacetVersion();
+        IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(facetElems[i].getAttribute("facet"));        
+        IProjectFacetVersion projectFacetVersion = projectFacet.getVersion(facetElems[i].getAttribute("version"));
+        rfv.setProjectFacetVersion(projectFacetVersion);
+        String allowNewerValue = facetElems[i].getAttribute("allow-newer");
+        if (allowNewerValue == null)
+        {
+          rfv.setAllowNewer(false);
+        }
+        else
+        {
+          rfv.setAllowNewer(Boolean.valueOf(allowNewerValue).booleanValue());
+        }
+        
+        requiredFacetVersionList.add(rfv);
+      }
+      
+      requiredFacetVersions = (RequiredFacetVersion[])requiredFacetVersionList.toArray(new RequiredFacetVersion[]{});
+    }
+    
+    return requiredFacetVersions;
+  }
+  
+  public Set getProjectFacetVersions()
+  {
+    if (projectFacetVersions == null)
+    {
+     projectFacetVersions = new HashSet();
+     RequiredFacetVersion[] rfv = getRequiredFacetVersions();
+     for (int i=0; i<rfv.length; i++)
+     {
+       projectFacetVersions.add(rfv[i].getProjectFacetVersion());
+     }
+    }
+    
+    return projectFacetVersions;    
+  }  
+  
+  public RuntimeDescriptor getRuntime()
+  {
+    if (runtime == null)
+    {
+     String runtimeId = elem.getAttribute("runtimeId");
+     runtime = (RuntimeDescriptor)allRuntimes.get(runtimeId);
+    }    
+    return runtime;
+  }
+  
+  public IWebServiceRuntime getWebServiceRuntime()
+  {
+    if (webServiceRuntime == null)
+    {
+        try
+        {
+            webServiceRuntime = (IWebServiceRuntime)elem.createExecutableExtension("class");
+        }
+        catch(CoreException ce)
+        {
+            
+        }
+    }
+    
+    return webServiceRuntime;
+  }
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/RequiredFacetVersion.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/RequiredFacetVersion.java
new file mode 100644
index 0000000..82214c3
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/RequiredFacetVersion.java
@@ -0,0 +1,28 @@
+package org.eclipse.jst.ws.internal.consumption.ui.wsrt;
+
+
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+
+public class RequiredFacetVersion
+{
+  private IProjectFacetVersion projectFacetVersion;
+  private boolean allowNewer;
+  
+  public boolean getAllowNewer()
+  {
+    return allowNewer;
+  }
+  public void setAllowNewer(boolean allowNewer)
+  {
+    this.allowNewer = allowNewer;
+  }
+  public IProjectFacetVersion getProjectFacetVersion()
+  {
+    return projectFacetVersion;
+  }
+  public void setProjectFacetVersion(IProjectFacetVersion projectFacetVersion)
+  {
+    this.projectFacetVersion = projectFacetVersion;
+  }  
+  
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/RuntimeDescriptor.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/RuntimeDescriptor.java
new file mode 100644
index 0000000..73b3584
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/RuntimeDescriptor.java
@@ -0,0 +1,43 @@
+package org.eclipse.jst.ws.internal.consumption.ui.wsrt;
+
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+
+public class RuntimeDescriptor
+{
+
+  private IConfigurationElement elem;
+  private String id;
+  private String label;
+  
+
+  public RuntimeDescriptor(IConfigurationElement elem)
+  {
+    this.elem = elem;
+  }
+  
+  public String getId()
+  {
+    if (id == null)
+    {
+      id = elem.getAttribute("id");
+    }
+    return id;
+  }
+  
+  public String getLabel()
+  {
+    if (label == null)
+    {
+      label = elem.getAttribute("label");
+    }
+    return label;
+  }
+  
+  public String[] getJ2eeLevels()
+  {
+    return new String[]{"13", "14"};
+  }
+  
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/ServiceRuntimeDescriptor.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/ServiceRuntimeDescriptor.java
new file mode 100644
index 0000000..7e64bcd
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/ServiceRuntimeDescriptor.java
@@ -0,0 +1,154 @@
+package org.eclipse.jst.ws.internal.consumption.ui.wsrt;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.ws.internal.provisional.wsrt.IWebServiceRuntime;
+
+
+public class ServiceRuntimeDescriptor
+{
+  private IConfigurationElement elem;
+  private Hashtable allWebServiceImpls;
+  private Hashtable allRuntimes;
+  private String id;
+  private WebServiceImpl serviceImplementationType;
+  private RuntimeDescriptor runtime;
+  private boolean bottomUp = false;
+  private boolean topDown = false;
+  private String serviceRuntimeClassName;
+  private IWebServiceRuntime webServiceRuntime;
+  private RequiredFacetVersion[] requiredFacetVersions;
+  private Set projectFacetVersions;
+  
+  public ServiceRuntimeDescriptor(IConfigurationElement elem, Hashtable allWebServiceImpls, Hashtable allRuntimes)
+  {
+    this.elem = elem;
+    this.allWebServiceImpls = allWebServiceImpls;
+    this.allRuntimes = allRuntimes;
+    
+    System.out.println("bottomUp = "+elem.getAttribute("bottomUp"));
+    System.out.println("bottomUp = "+elem.getAttribute("topDown"));
+
+    bottomUp = (Boolean.valueOf(elem.getAttribute("bottomUp"))).booleanValue();
+    topDown = (Boolean.valueOf(elem.getAttribute("topDown"))).booleanValue();    
+  }
+  
+  public boolean getBottomUp()
+  {    
+    return bottomUp;
+  }
+  
+  public String getId()
+  {
+    if (id == null)
+    {
+      id = elem.getAttribute("id");
+    }
+    return id;
+  }
+  
+  
+  public RequiredFacetVersion[] getRequiredFacetVersions()
+  {
+    if (requiredFacetVersions == null)
+    {
+      ArrayList requiredFacetVersionList = new ArrayList();
+      IConfigurationElement[] facetElems = elem.getChildren("required-facet-version");
+      for (int i = 0; i < facetElems.length; i++)
+      {
+        RequiredFacetVersion rfv = new RequiredFacetVersion();
+        IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(facetElems[i].getAttribute("facet"));        
+        IProjectFacetVersion projectFacetVersion = projectFacet.getVersion(facetElems[i].getAttribute("version"));
+        rfv.setProjectFacetVersion(projectFacetVersion);
+        String allowNewerValue = facetElems[i].getAttribute("allow-newer");
+        if (allowNewerValue == null)
+        {
+          rfv.setAllowNewer(false);
+        }
+        else
+        {
+          rfv.setAllowNewer(Boolean.valueOf(allowNewerValue).booleanValue());
+        }
+        
+        requiredFacetVersionList.add(rfv);
+      }
+      
+      requiredFacetVersions = (RequiredFacetVersion[])requiredFacetVersionList.toArray(new RequiredFacetVersion[]{});
+    }
+    
+    return requiredFacetVersions;
+  }
+  
+  public Set getProjectFacetVersions()
+  {
+    if (projectFacetVersions == null)
+    {
+     projectFacetVersions = new HashSet();
+     RequiredFacetVersion[] rfv = getRequiredFacetVersions();
+     for (int i=0; i<rfv.length; i++)
+     {
+       projectFacetVersions.add(rfv[i].getProjectFacetVersion());
+     }
+    }
+    
+    return projectFacetVersions;    
+  }
+  
+  public RuntimeDescriptor getRuntime()
+  {
+    if (runtime == null)
+    {
+     String runtimeId = elem.getAttribute("runtimeId");
+     runtime = (RuntimeDescriptor)allRuntimes.get(runtimeId);     
+    }
+    return runtime;
+  }
+  
+  public WebServiceImpl getServiceImplementationType()
+  {
+    if (serviceImplementationType == null)
+    {      
+      String serviceImplementationTypeId = elem.getAttribute("serviceImplementationTypeId");
+      serviceImplementationType = (WebServiceImpl)allWebServiceImpls.get(serviceImplementationTypeId);
+    }
+    return serviceImplementationType;
+  }
+  
+  public String getServiceRuntimeClassName()
+  {
+    if (serviceRuntimeClassName == null)
+    {
+      serviceRuntimeClassName = elem.getAttribute("class");
+    }
+    return serviceRuntimeClassName;
+  }
+  
+  public boolean getTopDown()
+  {
+    return topDown;
+  }
+  
+  public IWebServiceRuntime getWebServiceRuntime()
+  {
+    if (webServiceRuntime == null)
+    {
+        try
+        {
+            webServiceRuntime = (IWebServiceRuntime)elem.createExecutableExtension("class");
+        }
+        catch(CoreException ce)
+        {
+            
+        }
+    }
+    
+    return webServiceRuntime;
+  }  
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionRegistry2.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionRegistry2.java
new file mode 100644
index 0000000..00e90d2
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionRegistry2.java
@@ -0,0 +1,187 @@
+package org.eclipse.jst.ws.internal.consumption.ui.wsrt;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Hashtable;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.wst.ws.internal.provisional.wsrt.WebServiceScenario;
+
+public class WebServiceRuntimeExtensionRegistry2
+{
+
+  private static WebServiceRuntimeExtensionRegistry2 instance_;
+
+
+  Hashtable webServiceImpls_;
+
+  Hashtable webServiceClientImpls_;
+
+  Hashtable runtimes_;
+  
+  Hashtable serviceRuntimes_;
+  
+  Hashtable clientRuntimes_;
+  
+  ArrayList webServiceTypesList_;
+  
+  ArrayList webServiceClientTypesList_;  
+  
+  
+  /**
+   * Returns a singleton instance of this class.
+   * 
+   * @return A singleton WebServiceRuntimeExtensionRegistry2 object.
+   */
+  public static WebServiceRuntimeExtensionRegistry2 getInstance()
+  {
+    if (instance_ == null)
+    {
+      instance_ = new WebServiceRuntimeExtensionRegistry2();
+      instance_.load();
+    }
+    return instance_;
+  }
+
+  private void load()
+  {
+    webServiceImpls_ = new Hashtable();
+    webServiceClientImpls_ = new Hashtable();
+    runtimes_ = new Hashtable();
+    serviceRuntimes_ = new Hashtable();
+    clientRuntimes_ = new Hashtable();
+    webServiceTypesList_ = new ArrayList();
+    webServiceClientTypesList_ = new ArrayList();
+    
+    
+    IExtensionRegistry reg = Platform.getExtensionRegistry();
+    
+    //Load WebServiceImpls
+    IConfigurationElement[] wsImplExts = reg.getConfigurationElementsFor(
+        "org.eclipse.jst.ws.consumption.ui", "wsImpl");
+    
+    for(int idx=0; idx<wsImplExts.length; idx++) 
+    {
+      IConfigurationElement elem = wsImplExts[idx];
+        System.out.println("element name = "+elem.getName());
+        if (elem.getName().equals("webServiceImpl"))
+        {
+          WebServiceImpl wsimpl = new WebServiceImpl(elem);
+          System.out.println(elem.getAttribute("id"));
+          webServiceImpls_.put(elem.getAttribute("id"), wsimpl);
+        }        
+    }
+    
+    //Load WebServiceClientImpls
+    IConfigurationElement[] wsClientImplExts = reg.getConfigurationElementsFor(
+        "org.eclipse.jst.ws.consumption.ui", "wsClientImpl");
+    
+    for(int idx=0; idx<wsClientImplExts.length; idx++) 
+    {
+      IConfigurationElement elem = wsClientImplExts[idx];
+
+        if (elem.getName().equals("webServiceClientImpl"))
+        {
+          WebServiceClientImpl wsClientImpl = new WebServiceClientImpl(elem);
+          webServiceClientImpls_.put(elem.getAttribute("id"), wsClientImpl);
+        }        
+    }
+    
+    //Load runtimes
+    IConfigurationElement[] runtimeExts = reg.getConfigurationElementsFor(
+        "org.eclipse.jst.ws.consumption.ui", "runtimes");
+    
+    for(int idx=0; idx<runtimeExts.length; idx++) 
+    {
+      IConfigurationElement elem = runtimeExts[idx];
+
+        if (elem.getName().equals("runtime"))
+        {
+          RuntimeDescriptor rd = new RuntimeDescriptor(elem);
+          runtimes_.put(elem.getAttribute("id"), rd);
+        }        
+    }
+    
+    //Load serviceRuntimes
+    IConfigurationElement[] serviceRuntimeExts = reg.getConfigurationElementsFor(
+        "org.eclipse.jst.ws.consumption.ui", "serviceRuntimes");
+    
+    for(int idx=0; idx<serviceRuntimeExts.length; idx++) 
+    {
+      IConfigurationElement elem = serviceRuntimeExts[idx];
+
+        if (elem.getName().equals("serviceRuntime"))
+        {
+          ServiceRuntimeDescriptor rd = new ServiceRuntimeDescriptor(elem, webServiceImpls_, runtimes_);
+          serviceRuntimes_.put(elem.getAttribute("id"), rd);          
+          updateWebServiceTypeList(rd);
+        }        
+    }
+    
+    //Load serviceRuntimes
+    IConfigurationElement[] clientRuntimeExts = reg.getConfigurationElementsFor(
+        "org.eclipse.jst.ws.consumption.ui", "clientRuntimes");
+    
+    for(int idx=0; idx<clientRuntimeExts.length; idx++) 
+    {
+      IConfigurationElement elem = clientRuntimeExts[idx];
+
+      if (elem.getName().equals("clientRuntime"))
+      {
+        ClientRuntimeDescriptor rd = new ClientRuntimeDescriptor(elem, webServiceClientImpls_, runtimes_);
+        clientRuntimes_.put(elem.getAttribute("id"), rd);
+        updateWebServiceClientTypeList(rd);
+          
+      }        
+    }
+  }  
+    
+  private void updateWebServiceTypeList(ServiceRuntimeDescriptor descriptor)
+  {
+    String serviceImplId = descriptor.getServiceImplementationType().getId();
+    boolean bottomUp = descriptor.getBottomUp();
+    boolean topDown = descriptor.getTopDown();
+    if (bottomUp)
+    {
+      StringBuffer entrybuff = new StringBuffer();
+      entrybuff.append(String.valueOf(WebServiceScenario.BOTTOMUP));
+      entrybuff.append("/");
+      entrybuff.append(serviceImplId);
+      String entry = entrybuff.toString();
+      if (!webServiceTypesList_.contains(entry))
+      {
+        webServiceTypesList_.add(entry);
+      }      
+    }
+    
+    if (topDown)
+    {
+      StringBuffer entrybuff = new StringBuffer();
+      entrybuff.append(String.valueOf(WebServiceScenario.TOPDOWN));
+      entrybuff.append("/");
+      entrybuff.append(serviceImplId);
+      String entry = entrybuff.toString();
+      if (!webServiceTypesList_.contains(entry))
+      {
+        webServiceTypesList_.add(entry);
+      }      
+    }
+  }
+  
+  private void updateWebServiceClientTypeList(ClientRuntimeDescriptor descriptor)
+  {
+    String clientImplId = descriptor.getClientImplementationType().getId();
+    StringBuffer entrybuff = new StringBuffer();
+    entrybuff.append(String.valueOf(WebServiceScenario.CLIENT));
+    entrybuff.append("/");
+    entrybuff.append(clientImplId);
+    String entry = entrybuff.toString();
+    if (!webServiceClientTypesList_.contains(entry))
+    {
+      webServiceClientTypesList_.add(entry);
+    }    
+  }
+  
+}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils.java
index 5fc1bd9..8db7fa7 100644
--- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils.java
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils.java
@@ -13,6 +13,7 @@
 import org.eclipse.wst.command.internal.provisional.env.core.selection.SelectionList;
 import org.eclipse.wst.command.internal.provisional.env.core.selection.SelectionListChoices;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.IServerType;
 import org.eclipse.wst.server.core.ServerCore;
@@ -952,5 +953,4 @@
     
     return (String)runtimeIdByLabel_.get(label);    
   }    
-
 }
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils2.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils2.java
new file mode 100644
index 0000000..28801ec
--- /dev/null
+++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/wsrt/WebServiceRuntimeExtensionUtils2.java
@@ -0,0 +1,1401 @@
+package org.eclipse.jst.ws.internal.consumption.ui.wsrt;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.Vector;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jst.ws.internal.consumption.ui.common.FacetMatcher;
+import org.eclipse.jst.ws.internal.consumption.ui.common.FacetUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wizard.TypeSelectionFilter2;
+import org.eclipse.jst.ws.internal.data.LabelsAndIds;
+import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
+import org.eclipse.wst.command.internal.provisional.env.core.common.MessageUtils;
+import org.eclipse.wst.command.internal.provisional.env.core.selection.SelectionList;
+import org.eclipse.wst.command.internal.provisional.env.core.selection.SelectionListChoices;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IFacetedProjectTemplate;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action.Type;
+import org.eclipse.wst.common.project.facet.core.runtime.IRuntime;
+import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager;
+import org.eclipse.wst.server.core.IRuntimeType;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.IServerType;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.ServerUtil;
+import org.eclipse.wst.server.ui.ServerUICore;
+import org.eclipse.wst.ws.internal.provisional.wsrt.IWebServiceRuntime;
+import org.eclipse.wst.ws.internal.provisional.wsrt.WebServiceScenario;
+
+public class WebServiceRuntimeExtensionUtils2
+{
+  private static WebServiceRuntimeExtensionRegistry2 registry = WebServiceRuntimeExtensionRegistry2.getInstance();
+  
+  public static RuntimeDescriptor getRuntimeById(String id)
+  {
+    Object result = registry.runtimes_.get(id);
+    if (result!=null)
+    {
+      return (RuntimeDescriptor)result;
+    }
+    return null;        
+  }
+  
+  public static String getRuntimeLabelById(String runtimeId) 
+  {
+    RuntimeDescriptor desc = getRuntimeById(runtimeId);
+    if (desc == null)
+      return null;
+    
+    return desc.getLabel();
+  }    
+  
+  public static RuntimeDescriptor getRuntimeByLabel(String label)
+  {
+    Iterator iter = registry.runtimes_.values().iterator();
+    while (iter.hasNext())
+    {
+      RuntimeDescriptor descriptor = (RuntimeDescriptor)iter.next();
+      if (descriptor!=null) {
+        if (label.equals(descriptor.getLabel()))
+          return descriptor;
+      }
+    }
+    return null;      
+  }      
+
+  public static String getServerLabelById(String serverFactoryId)
+  {
+    IServerType serverType = ServerCore.findServerType(serverFactoryId);
+    if (serverType == null)
+      return null;
+    
+    String serverLabel = ServerUICore.getLabelProvider().getText(serverType);   
+    return serverLabel;
+  }
+  
+  public static String getServerInstanceLabelFromInstanceId( String instanceId )
+  {
+    IServer server = ServerCore.findServer( instanceId );    
+    return server.getName();
+  }  
+  
+  //Service-side utilities
+  public static WebServiceImpl getWebServiceImplById(String id)
+  {
+    Object result = registry.webServiceImpls_.get(id);
+    if (result!=null)
+    {
+      return (WebServiceImpl)result;
+    }
+    return null;    
+  }
+  
+  public static ServiceRuntimeDescriptor getServiceRuntimeDescriptorById(String id)
+  {
+    Object result = registry.serviceRuntimes_.get(id);
+    if (result!=null)
+    {
+      return (ServiceRuntimeDescriptor)result;
+    }
+    return null;        
+  }  
+  
+  public static IWebServiceRuntime getServiceRuntime( String serviceRuntimeId )
+  {
+    ServiceRuntimeDescriptor descriptor = getServiceRuntimeDescriptorById(serviceRuntimeId);
+    IWebServiceRuntime    webserviceRuntime     = null;
+    if (descriptor != null)
+    {
+        webserviceRuntime = descriptor.getWebServiceRuntime();
+    }
+    
+    return webserviceRuntime;
+  }
+  
+  public static String getServiceRuntimeId(TypeRuntimeServer trs, String projectName, String templateId)
+  {
+    //Find the first client runtime that supports the implementation type, runtime, server, and project
+    String[] descs = getServiceRuntimesByServiceType(trs.getTypeId());
+    for (int i=0; i<descs.length; i++)
+    {
+      ServiceRuntimeDescriptor desc = getServiceRuntimeDescriptorById(descs[i]);      
+      if (desc.getRuntime().getId().equals(trs.getRuntimeId()))
+      {
+        boolean supportsServer = doesServiceRuntimeSupportServer(desc.getId(), trs.getServerId());
+        if (!supportsServer)
+        {
+          continue;
+        }
+        
+        IProject project = ProjectUtilities.getProject(projectName);
+        if (project.exists())
+        {
+          if (doesServiceRuntimeSupportProject(desc.getId(), projectName))
+          {
+            return desc.getId();
+          }
+        }
+        else
+        {
+          //Check if template is supported
+          if (doesServiceRuntimeSupportTemplate(desc.getId(), templateId))
+          {
+            return desc.getId();
+          }
+        }
+      }
+    }
+    
+    return "";
+    
+  }  
+  
+  /*
+   * @param typeId will be a String of the format "0/implId"
+   * where the digit before the "/" represents the scenario
+   * (e.g. WebServiceScenario.BOTTOM_UP) and the implId is the id
+   * of the WebServiceImpl
+   */    
+  public static int getScenarioFromTypeId(String typeId)
+  {
+    return Integer.parseInt(typeId.substring(0,typeId.indexOf("/")));
+  }
+  
+  /*
+   * @param typeId will be a String of the format "0/implId"
+   * where the digit before the "/" represents the scenario
+   * (e.g. WebServiceScenario.BOTTOM_UP) and the implId is the id
+   * of the WebServiceImpl
+   */    
+  public static String getWebServiceImplIdFromTypeId(String typeId)
+  {
+    return typeId.substring(typeId.indexOf("/")+1);
+  }    
+  
+  /*
+   * @param typeId will be a String of the format "0/implId"
+   * where the digit before the "/" represents the scenario
+   * (e.g. WebServiceScenario.BOTTOM_UP) and the implId is the id
+   * of the WebServiceImpl
+   * 
+   * @returns String[] containing the ids of all runtimes that
+   * support this type.
+   */
+  public static String[] getRuntimesByServiceType(String typeId) 
+  {
+    int scenario = getScenarioFromTypeId(typeId);
+    String implId = getWebServiceImplIdFromTypeId(typeId);    
+    ArrayList ids = new ArrayList();
+    Iterator iter = registry.serviceRuntimes_.values().iterator();
+    while (iter.hasNext())   
+    {
+      ServiceRuntimeDescriptor desc = (ServiceRuntimeDescriptor)iter.next();
+      //Check if this serviceRuntime supports the implementation type
+      if (desc.getServiceImplementationType().getId().equals(implId))
+      {
+        switch (scenario)
+        {
+          case WebServiceScenario.BOTTOMUP:
+            if (desc.getBottomUp())
+            {
+              String runtimeId = desc.getRuntime().getId(); 
+              if (!ids.contains(runtimeId))
+              {
+                ids.add(runtimeId);
+              }
+            }
+            break;
+          case WebServiceScenario.TOPDOWN:
+            if (desc.getTopDown())
+            {
+              String runtimeId = desc.getRuntime().getId(); 
+              if (!ids.contains(runtimeId))
+              {
+                ids.add(runtimeId);
+              }
+            }
+            break;
+          default:          
+        }
+      }
+    }
+    
+    return (String[])ids.toArray(new String[]{});
+  }
+  
+  /*
+   * @param typeId will be a String of the format "0/implId"
+   * where the digit before the "/" represents the scenario
+   * (e.g. WebServiceScenario.BOTTOM_UP) and the implId is the id
+   * of the WebServiceImpl
+   * 
+   * @returns String[] containing the ids of all service runtimes that
+   * support this type.
+   */
+  public static String[] getServiceRuntimesByServiceType(String typeId) 
+  {
+    int scenario = getScenarioFromTypeId(typeId);
+    String implId = getWebServiceImplIdFromTypeId(typeId);    
+    ArrayList ids = new ArrayList();
+    Iterator iter = registry.serviceRuntimes_.values().iterator();
+    while (iter.hasNext())   
+    {
+      ServiceRuntimeDescriptor desc = (ServiceRuntimeDescriptor)iter.next();
+      //Check if this serviceRuntime supports the implementation type
+      if (desc.getServiceImplementationType().getId().equals(implId))
+      {
+        switch (scenario)
+        {
+          case WebServiceScenario.BOTTOMUP:
+            if (desc.getBottomUp())
+            {
+              String serviceRuntimeId = desc.getId(); 
+              ids.add(serviceRuntimeId);
+            }
+            break;
+          case WebServiceScenario.TOPDOWN:
+            if (desc.getTopDown())
+            {
+              String serviceRuntimeId = desc.getId(); 
+              ids.add(serviceRuntimeId);
+            }
+            break;
+          default:          
+        }
+      }
+    }
+    
+    return (String[])ids.toArray(new String[]{});
+  }  
+  /*
+   * @param typeId will be a String of the format "0/implId"
+   * where the digit before the "/" represents the scenario
+   * (e.g. WebServiceScenario.BOTTOM_UP) and the implId is the id
+   * of the WebServiceImpl
+   * @param runtimeId id of a Web service runtime (RuntimeDescriptor)
+   */  
+  public static boolean isRuntimeSupportedForServiceType(String typeId, String runtimeId)
+  {
+    String[] serviceRuntimeIds = getServiceRuntimesByServiceType(typeId);
+    if (serviceRuntimeIds!=null)
+    {
+      for (int i=0; i < serviceRuntimeIds.length; i++)
+      {
+        ServiceRuntimeDescriptor desc = getServiceRuntimeDescriptorById(serviceRuntimeIds[i]);
+        if (desc.getRuntime().getId().equals(runtimeId))
+        {
+          return true;
+        }
+      }
+    }
+    
+    return false;
+  }  
+  
+  public static String[] getServerFactoryIdsByServiceType(String typeId)
+  {
+    ArrayList serverFactoryIds = new ArrayList();
+    String[] srts = getServiceRuntimesByServiceType(typeId);
+    if (srts != null)
+    {
+      for (int i = 0; i < srts.length; i++)
+      {
+        //Get the runtimes that work for the facets required for this service runtime
+        ServiceRuntimeDescriptor descriptor = getServiceRuntimeDescriptorById(srts[i]);        
+        Set runtimes = getRuntimes(descriptor.getProjectFacetVersions());
+        IServerType[] allServerTypes = ServerCore.getServerTypes();
+        //TODO iterate over all the server types and see if their runtime types have an
+        //id that matches the runtime type of any of the runtimes.
+      }
+    }
+    
+    //return (String[])serverFactoryIds.toArray(new String[]{});
+    
+    //Temporarily return all server type ids.
+    return getAllServerFactoryIdsWithRuntimes();
+  }
+  
+  /*
+   * @param typeId will be a String of the format "0/implId"
+   * where the digit before the "/" represents the scenario
+   * (e.g. WebServiceScenario.BOTTOM_UP) and the implId is the id
+   * of the WebServiceImpl
+   */
+  public static boolean isServerSupportedForChosenServiceType(String typeId, String serverFactoryId)
+  {
+    String[] fIds = getServerFactoryIdsByServiceType(typeId);
+    if (fIds == null)
+    {
+      return false;
+    }
+
+    for (int i=0;i<fIds.length;i++)
+    {
+      if (serverFactoryId.equals(fIds[i]))
+      {
+        return true;
+      }      
+    }
+    
+    return false;
+  }
+  
+  public static String[] getServerFactoryIdsByServiceRuntime(String serviceRuntimeId)
+  {
+    ArrayList serverFactoryIds = new ArrayList();    
+   
+    ServiceRuntimeDescriptor desc = getServiceRuntimeDescriptorById(serviceRuntimeId);
+    Set facetRuntimes = getRuntimes(desc.getProjectFacetVersions());
+    
+    //TODO iterate over all the server types and see if their runtime types have an
+    //id that matches the runtime type of any of the runtimes.        
+            
+    //return (String[])serverFactoryIds.toArray(new String[]{});
+    //Temporarily return all server types
+    return getAllServerFactoryIdsWithRuntimes();    
+  }      
+  
+
+  public static boolean doesServiceRuntimeSupportServer(String serviceRuntimeId, String serverFactoryId)
+  {
+    String[] serverIds = getServerFactoryIdsByServiceRuntime(serviceRuntimeId);
+    for (int i=0; i<serverIds.length; i++)
+    {
+      if (serverIds[i].equals(serverFactoryId))
+      {
+        return true;
+      }
+    }
+    
+    return false;
+  }
+    
+  
+  public static LabelsAndIds getServiceTypeLabels()
+  {
+    String       pluginId = "org.eclipse.jst.ws.consumption.ui";
+    MessageUtils msgUtils = new MessageUtils( pluginId + ".plugin", registry );
+    
+    LabelsAndIds labelIds = new LabelsAndIds();
+    Iterator     iterator = registry.webServiceTypesList_.iterator();
+    int          size     = registry.webServiceTypesList_.size();
+    String[]     labels   = new String[size];
+    String[]     ids      = new String[size];
+    int          index    = 0;
+    
+    labelIds.setLabels_( labels );
+    labelIds.setIds_( ids );
+    
+    while( iterator.hasNext() ) 
+    {
+      String wst = (String)iterator.next();
+      int scenario = getScenarioFromTypeId(wst);
+      String implId = getWebServiceImplIdFromTypeId(wst);
+      WebServiceImpl wsimpl = getWebServiceImplById(implId);
+      String impllabel = wsimpl.getLabel();
+      ids[index]    = wst;
+      String scenLabel = "";
+      switch(scenario)
+      {
+      case WebServiceScenario.BOTTOMUP:
+        scenLabel = msgUtils.getMessage(WebServiceScenario.BOTTOMUP_LABEL);
+        break;
+      case WebServiceScenario.TOPDOWN:
+        scenLabel = msgUtils.getMessage(WebServiceScenario.TOPDOWN_LABEL);
+        break; 
+      default:
+      }
+      labels[index] = msgUtils.getMessage( "COMBINED_TYPE_AND_RUNTIME_LABEL", new String[]{ scenLabel, impllabel } );
+      index++;
+    }    
+    
+    return labelIds;
+  }
+  
+  /*
+   * @param typeId will be a String of the format "0/implId"
+   * where the digit before the "/" represents the scenario
+   * (e.g. WebServiceScenario.BOTTOM_UP) and the implId is the id
+   * of the WebServiceImpl
+   */
+  public static String getDefaultRuntimeValueFor(String typeId)
+  {
+    String[] srIds = getServiceRuntimesByServiceType(typeId);
+    if (srIds == null)
+    {
+      return null;
+    }
+    
+    ServiceRuntimeDescriptor desc = getServiceRuntimeDescriptorById(srIds[0]);
+    return desc.getRuntime().getId();
+  }      
+  
+  public static String getDefaultServerValueFor(String typeId)
+  {
+    String[] fIds = getServerFactoryIdsByServiceType(typeId);
+    if (fIds==null)
+      return null;
+    
+    return fIds[0];
+  }    
+  
+  /*
+   * @param typeId will be a String of the format "0/implId"
+   * where the digit before the "/" represents the scenario
+   * (e.g. WebServiceScenario.BOTTOM_UP) and the implId is the id
+   * of the WebServiceImpl
+   * @param runtimeId is the id of a RuntimeDescriptor
+   * @param serverFactoryId server factory id
+   */    
+  public static boolean isServerRuntimeTypeSupported(String serverFactoryId, String runtimeId, String typeId)  
+  {
+    //Ensure there is at least one service runtime that supports the given type
+    String[] serviceRuntimes = getServiceRuntimesByServiceType(typeId);
+    if (serviceRuntimes!=null && serviceRuntimes.length>0)
+    {
+      //Ensure that at least one of these server runtimes supports the given server
+      for (int i=0; i<serviceRuntimes.length; i++)
+      {
+        ServiceRuntimeDescriptor desc = getServiceRuntimeDescriptorById(serviceRuntimes[i]);
+        Set runtimes = getRuntimes(desc.getProjectFacetVersions());
+        //TODO Iterate through the runtimes to see if there is a facet runtime that corresponds
+        //to a server runtime for this server type.
+        
+        //Temporarily return true
+        return true;
+        
+      }
+    }
+    
+    return false;
+  }  
+  
+  public static String[] getWebServiceTypeBySelection(IStructuredSelection selection)
+  {
+    TypeSelectionFilter2 tsf = new TypeSelectionFilter2();
+    String[] wst = tsf.getWebServiceTypeByInitialSelection(selection, registry.webServiceTypesList_);
+    return wst == null ? null : wst;
+  }    
+  
+  /*
+   * @param runtimeId : id of a RuntimeDescriptor
+   * @param factoryId : id of a server type
+   */
+  public static boolean doesRuntimeSupportServerForServiceSide(String runtimeId, String factoryId)
+  {
+    //Get all the ServiceRuntimeDescriptors that point to this runtimeId
+    Iterator iter = registry.serviceRuntimes_.values().iterator();
+    while (iter.hasNext())   
+    {
+      ServiceRuntimeDescriptor desc = (ServiceRuntimeDescriptor)iter.next();
+      //check if this service runtime points to runtimeId
+      String thisRuntimeId = desc.getRuntime().getId();
+      if (thisRuntimeId.equals(runtimeId))
+      {
+        Set facetRuntimes = getRuntimes(desc.getProjectFacetVersions());
+        //TODO Iterate over the facetRuntimes to see if any of them is a suitable server runtime for a
+        //server of the given type. If so, return true.
+        
+        //Temporarily return true
+        return true;
+      }            
+    }
+    
+    //return false;
+    
+    //Always return true temporarily
+    return true;
+  }
+  
+  /*
+   * @param runtimeId: id of a RuntimeDescriptor
+   * @return: server factory id
+   */
+  public static String getFirstSupportedServerForServiceSide(String runtimeId)
+  {
+    //Get all the ServiceRuntimeDescriptors that point to this runtimeId
+    Iterator iter = registry.serviceRuntimes_.values().iterator();
+    while (iter.hasNext())   
+    {
+      ServiceRuntimeDescriptor desc = (ServiceRuntimeDescriptor)iter.next();
+      //check if this service runtime points to runtimeId
+      String thisRuntimeId = desc.getRuntime().getId();
+      if (thisRuntimeId.equals(runtimeId))
+      {
+        Set facetRuntimes = getRuntimes(desc.getProjectFacetVersions());
+        IServerType[] allServerTypes = ServerCore.getServerTypes();
+        //TODO iterate over all the server types and return the first server type that
+        //has a server runtime corresponding to a supported facet runtime.
+      }            
+    }
+    
+    //Temporarliy return the first server type
+    String[] factoryIds = getAllServerFactoryIdsWithRuntimes();
+    if (factoryIds!=null && factoryIds.length >0)
+    {
+      return factoryIds[0];
+    }
+    else
+    {
+      return null;
+    }
+  }  
+  
+  public static String[] getProjectsForServiceTypeAndRuntime(String typeId, String runtimeId)
+  {
+    String[] descs = getServiceRuntimesByServiceType(typeId);
+    IProject[] projects = FacetUtils.getAllProjects();
+    ArrayList validProjects = new ArrayList();
+    
+    for (int i=0; i<projects.length;i++)
+    {
+      //check if this projects suits any of the service runtimes
+      for (int j=0; j<descs.length; j++)
+      {
+        ServiceRuntimeDescriptor desc = getServiceRuntimeDescriptorById(descs[j]);
+        RequiredFacetVersion[] rfvs = desc.getRequiredFacetVersions();
+        try
+        {
+          IFacetedProject fproject = ProjectFacetsManager.create(projects[i]);
+          if (fproject != null)
+          {
+            Set facetVersions = fproject.getProjectFacets();
+            FacetMatcher fm = FacetUtils.match(rfvs, facetVersions);
+            if (fm.isMatch())
+            {
+              validProjects.add(projects[i].getName());
+              break;
+            }            
+          }
+          else
+          {
+            //TODO Handle the plain-old Java projects            
+          }
+        } catch (CoreException ce)
+        {
+          
+        }        
+      }
+    }
+    
+    return (String[])validProjects.toArray(new String[0]);
+    
+  }
+  
+  public static boolean doesServiceRuntimeSupportProject(String serviceRuntimeId, String projectName)
+  {
+    IProject project = ProjectUtilities.getProject(projectName);
+    if (project==null || !project.exists())
+      return false;
+    
+    ServiceRuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getServiceRuntimeDescriptorById(serviceRuntimeId);
+    RequiredFacetVersion[] rfvs = desc.getRequiredFacetVersions();    
+    
+    try
+    {
+      IFacetedProject fproject = ProjectFacetsManager.create(project);
+      if (fproject != null)
+      {
+        Set facetVersions = fproject.getProjectFacets();
+        FacetMatcher fm = FacetUtils.match(rfvs, facetVersions);
+        if (fm.isMatch())
+        {
+          return true;
+        }            
+      }
+      else
+      {
+        //TODO Handle the plain-old Java projects            
+      }
+    } catch (CoreException ce)
+    {
+      
+    }    
+    
+    return false;
+  }  
+  
+  /*
+   * Returns a list of valid faceted project template ids
+   * @param typeId id of the form "0/implId" on the service side.
+   * @param runtimeId id of a RuntimeDescriptor
+   * 
+   * @return String[] array of IFacetedProjectTemplate ids
+   */
+  public static String[] getServiceProjectTemplates(String typeId, String runtimeId)
+  {
+    String[] srIds = getServiceRuntimesByServiceType(typeId);
+    if (srIds == null)
+    {
+      return null;
+    }
+
+    ArrayList templateIdList = new ArrayList();
+    for (int i = 0; i < srIds.length; i++)
+    {
+      ServiceRuntimeDescriptor desc = getServiceRuntimeDescriptorById(srIds[i]);
+      String thisRuntimeId = desc.getRuntime().getId();
+      if (thisRuntimeId.equals(runtimeId))
+      {
+        //Get the templates for this client runtime
+        Set templateIds = FacetUtils.getTemplates(desc.getRequiredFacetVersions());
+        
+        //Add the template ids to the list if they have not already been added
+        Iterator itr = templateIds.iterator();
+        while (itr.hasNext())
+        {
+          IFacetedProjectTemplate template = (IFacetedProjectTemplate)itr.next();
+          if (!templateIdList.contains(template.getId()))
+          {
+            templateIdList.add(template.getId());
+          }
+        }
+      }
+      
+    }  
+    
+    return (String[])templateIdList.toArray(new String[]{});    
+  }
+
+  public static boolean doesServiceRuntimeSupportTemplate(String serviceRuntimeId, String templateId)
+  {
+    ServiceRuntimeDescriptor desc = getServiceRuntimeDescriptorById(serviceRuntimeId);
+    //Get the templates for this client runtime
+    Set templateIds = FacetUtils.getTemplates(desc.getRequiredFacetVersions());
+    return templateIds.contains(templateId);
+  }  
+  
+  //Client-side utilities
+  public static WebServiceClientImpl getWebServiceClientImplById(String id)
+  {
+    Object result = registry.webServiceClientImpls_.get(id);
+    if (result!=null)
+    {
+      return (WebServiceClientImpl)result;
+    }
+    return null;    
+  }
+  
+  public static ClientRuntimeDescriptor getClientRuntimeDescriptorById(String id)
+  {
+    Object result = registry.clientRuntimes_.get(id);
+    if (result!=null)
+    {
+      return (ClientRuntimeDescriptor)result;
+    }
+    return null;        
+  }    
+  
+  public static IWebServiceRuntime getClientRuntime( String clientRuntimeId )
+  {
+    ClientRuntimeDescriptor descriptor = getClientRuntimeDescriptorById(clientRuntimeId);
+    IWebServiceRuntime    webserviceRuntime     = null;
+    if (descriptor != null)
+    {
+        webserviceRuntime = descriptor.getWebServiceRuntime();
+    }
+    
+    return webserviceRuntime;
+  }
+  
+  public static String getClientRuntimeId(TypeRuntimeServer trs, String projectName, String templateId)
+  {
+    //Find the first client runtime that supports the implementation type, runtime, server, and project
+    String[] descs = getClientRuntimesByType(trs.getTypeId());
+    for (int i=0; i<descs.length; i++)
+    {
+      ClientRuntimeDescriptor desc = getClientRuntimeDescriptorById(descs[i]);      
+      if (desc.getRuntime().getId().equals(trs.getRuntimeId()))
+      {
+        boolean supportsServer = doesClientRuntimeSupportServer(desc.getId(), trs.getServerId());
+        if (!supportsServer)
+        {
+          continue;
+        }
+        
+        IProject project = ProjectUtilities.getProject(projectName);
+        if (project.exists())
+        {
+          if (doesClientRuntimeSupportProject(desc.getId(), projectName))
+          {
+            return desc.getId();
+          }
+        }
+        else
+        {
+          //Check if template is supported
+          if (doesClientRuntimeSupportTemplate(desc.getId(), templateId))
+          {
+            return desc.getId();
+          }
+        }
+      }
+    }
+    
+    return "";
+    
+  }
+  
+  /*
+   * @return String[] array of ids of RuntimeDescriptors
+   */
+  public static String[] getAllRuntimesForClientSide() 
+  {
+    ArrayList runtimeIds = new ArrayList();
+    Iterator iter = registry.clientRuntimes_.values().iterator();
+    while (iter.hasNext())   
+    {
+      ClientRuntimeDescriptor desc = (ClientRuntimeDescriptor)iter.next();
+      runtimeIds.add(desc.getRuntime().getId());
+    }      
+    return (String[])runtimeIds.toArray(new String[]{});
+  }
+  
+  /*
+   * @param clientImpld The id of a client implementation type
+   * 
+   * @returns String[] containing the ids of all clientRuntimes that
+   * support this client implementation type
+   */
+  public static String[] getClientRuntimesByType(String clientImplId) 
+  {
+    ArrayList ids = new ArrayList();
+    Iterator iter = registry.clientRuntimes_.values().iterator();
+    while (iter.hasNext())   
+    {
+      ClientRuntimeDescriptor desc = (ClientRuntimeDescriptor)iter.next();
+      //Check if this serviceRuntime supports the implementation type
+      if (desc.getClientImplementationType().getId().equals(clientImplId))
+      {
+        ids.add(desc.getId());
+      }
+    }
+    
+    return (String[])ids.toArray(new String[]{});
+  }  
+  
+  /*
+   * @param clientImplId id of a WebServiceClientImpl
+   * @return String[] array of RuntimeDescriptor ids
+   */
+  public static String[] getRuntimesByClientType(String clientImplId) 
+  {
+    ArrayList runtimeIds = new ArrayList();
+    Iterator iter = registry.clientRuntimes_.values().iterator();
+    while (iter.hasNext())   
+    {
+      ClientRuntimeDescriptor desc = (ClientRuntimeDescriptor)iter.next();
+      //Check if this serviceRuntime supports the implementation type
+      if (desc.getClientImplementationType().getId().equals(clientImplId))
+      {
+        runtimeIds.add(desc.getRuntime().getId());
+      }
+    }
+    
+    return (String[])runtimeIds.toArray(new String[]{});
+  }
+  
+  /*
+   * @param clientImplId The id of a client implementation type
+   * @param runtimeId id of a runtime (RuntimeDescriptor)
+   */  
+  public static boolean isRuntimeSupportedForClientType(String clientImplId, String runtimeId)
+  {
+    String[] clientRuntimeIds = getClientRuntimesByType(clientImplId);
+    if (clientRuntimeIds!=null)
+    {
+      for (int i=0; i < clientRuntimeIds.length; i++)
+      {
+        ClientRuntimeDescriptor desc = getClientRuntimeDescriptorById(clientRuntimeIds[i]);
+        if (desc.getRuntime().getId().equals(runtimeId))
+        {
+          return true;
+        }
+      }
+    }
+    
+    return false;
+  }
+  
+  public static String[] getAllClientServerFactoryIds() 
+  {    
+    ArrayList serverFactoryIds = new ArrayList();
+    Iterator iter = registry.clientRuntimes_.values().iterator();
+    while (iter.hasNext())   
+    {
+      ClientRuntimeDescriptor desc = (ClientRuntimeDescriptor)iter.next();
+      Set runtimes = getRuntimes(desc.getProjectFacetVersions());
+      IServerType[] allServerTypes = ServerCore.getServerTypes();
+      //TODO iterate over all the server types and see if their runtime types have an
+      //id that matches the runtime type of any of the runtimes.            
+    }
+    
+    //return (String[])serverFactoryIds.toArray(new String[]{});
+    //Temporarily return all server types
+    return getAllServerFactoryIdsWithRuntimes();    
+  }
+  
+  public static String[] getServerFactoryIdsByClientType(String clientImplId)
+  {
+    ArrayList serverFactoryIds = new ArrayList();
+    String[] crts = getClientRuntimesByType(clientImplId);
+    if (crts != null)
+    {
+      for (int i = 0; i < crts.length; i++)
+      {
+        //Get the runtimes that work for the facets required for this client runtime
+        ClientRuntimeDescriptor descriptor = getClientRuntimeDescriptorById(crts[i]);        
+        Set runtimes = getRuntimes(descriptor.getProjectFacetVersions());
+        IServerType[] allServerTypes = ServerCore.getServerTypes();
+        //TODO iterate over all the server types and see if their runtime types have an
+        //id that matches the runtime type of any of the runtimes.
+      }
+    }
+    
+    //return (String[])serverFactoryIds.toArray(new String[]{});
+    //Temporarily return all server types
+    return getAllServerFactoryIdsWithRuntimes();
+  }  
+  
+  /*
+   * 
+   */
+  public static boolean isServerSupportedForChosenClientType(String clientImplId, String serverFactoryId)
+  {
+    String[] fIds = getServerFactoryIdsByClientType(clientImplId);
+    if (fIds == null)
+    {
+      return false;
+    }
+
+    for (int i=0;i<fIds.length;i++)
+    {
+      if (serverFactoryId.equals(fIds[i]))
+      {
+        return true;
+      }      
+    }
+    
+    return false;
+  }  
+  
+  /*
+   * @prarm clientRuntimeId : id of a ClientRuntimeDescriptor
+   * 
+   */
+  public static String[] getServerFactoryIdsByClientRuntime(String clientRuntimeId)
+  {
+    ArrayList serverFactoryIds = new ArrayList();    
+   
+    ClientRuntimeDescriptor desc = getClientRuntimeDescriptorById(clientRuntimeId);
+    Set facetRuntimes = getRuntimes(desc.getProjectFacetVersions());
+    
+    //TODO iterate over all the server types and see if their runtime types have an
+    //id that matches the runtime type of any of the runtimes.        
+            
+    //return (String[])serverFactoryIds.toArray(new String[]{});
+    //Temporarily return all server types
+    return getAllServerFactoryIdsWithRuntimes();    
+  }    
+
+  /*
+   * @param clientRuntimeId id of a ClientRuntimeDescriptor
+   */
+  public static boolean doesClientRuntimeSupportServer(String clientRuntimeId, String serverFactoryId)
+  {
+    String[] serverIds = getServerFactoryIdsByClientRuntime(clientRuntimeId);
+    for (int i=0; i<serverIds.length; i++)
+    {
+      if (serverIds[i].equals(serverFactoryId))
+      {
+        return true;
+      }
+    }
+    
+    return false;
+  }
+  
+  /*
+   * @param runtimeId : id of a RuntimeDescriptor
+   * @param factoryId : id of a server type
+   */
+  public static boolean doesRuntimeSupportServerForClientSide(String runtimeId, String factoryId)
+  {
+    //Get all the ClientRuntimeDescriptors that point to this runtimeId
+    Iterator iter = registry.clientRuntimes_.values().iterator();
+    while (iter.hasNext())   
+    {
+      ClientRuntimeDescriptor desc = (ClientRuntimeDescriptor)iter.next();
+      //check if this client runtime points to runtimeId
+      String thisRuntimeId = desc.getRuntime().getId();
+      if (thisRuntimeId.equals(runtimeId))
+      {
+        Set facetRuntimes = getRuntimes(desc.getProjectFacetVersions());
+        //TODO Iterate over the facetRuntimes to see if any of them is a suitable server runtime for a
+        //server of the given type. If so, return true.
+        
+        //Temporarliy return true
+        return true;
+      }            
+    }
+    
+    return false;
+  }    
+  
+  /*
+   * @param runtimeId: id of a RuntimeDescriptor
+   * @return: server factory id
+   */
+  public static String getFirstSupportedServerForClientSide(String runtimeId)
+  {
+    //Get all the ClientRuntimeDescriptors that point to this runtimeId
+    Iterator iter = registry.clientRuntimes_.values().iterator();
+    while (iter.hasNext())   
+    {
+      ClientRuntimeDescriptor desc = (ClientRuntimeDescriptor)iter.next();
+      //check if this service runtime points to runtimeId
+      String thisRuntimeId = desc.getRuntime().getId();
+      if (thisRuntimeId.equals(runtimeId))
+      {
+        Set facetRuntimes = getRuntimes(desc.getProjectFacetVersions());
+        IServerType[] allServerTypes = ServerCore.getServerTypes();
+        //TODO iterate over all the server types and return the first server type that
+        //has a server runtime corresponding to a supported facet runtime.     
+      }            
+    }
+    
+    //Temporarliy return the first server type
+    String[] factoryIds = getAllServerFactoryIdsWithRuntimes();
+    if (factoryIds!=null && factoryIds.length >0)
+    {
+      return factoryIds[0];
+    }
+    else
+    {
+      return null;
+    }
+  }
+  
+  /*
+   * @param clientImplId is the id of a WebServiceClientImpl
+   * @param runtimeId is the id of a RuntimeDescriptor
+   * @param serverFactoryId server factory id
+   */    
+  public static boolean isServerClientRuntimeTypeSupported(String serverFactoryId, String runtimeId, String clientImplId)  
+  {
+    //Ensure there is at least one client runtime that supports the given type
+    String[] clientRuntimes = getClientRuntimesByType(clientImplId);
+    if (clientRuntimes!=null && clientRuntimes.length>0)
+    {
+      //Ensure that at least one of these server runtimes supports the given server
+      for (int i=0; i<clientRuntimes.length; i++)
+      {
+        ClientRuntimeDescriptor desc = getClientRuntimeDescriptorById(clientRuntimes[i]);
+        Set runtimes = getRuntimes(desc.getProjectFacetVersions());
+        //TODO Iterate through the runtimes to see if there is a facet runtime that corresponds
+        //to a server runtime for this server type.
+        
+        //Temporarily return true
+        return true;
+        
+      }
+    }
+    
+    return false;
+  }    
+  
+  /*
+   * Returns a list of valid faceted project template ids
+   * @param clientImplId id of a WebServiceClientImpl
+   * @param runtimeId id of a RuntimeDescriptor
+   * 
+   * @return String[] array of IFacetedProjectTemplate ids
+   */
+  public static String[] getClientProjectTemplates(String clientImplId, String runtimeId)
+  {
+    String[] crIds = getClientRuntimesByType(clientImplId);
+    if (crIds == null)
+    {
+      return null;
+    }
+
+    ArrayList templateIdList = new ArrayList();
+    for (int i = 0; i < crIds.length; i++)
+    {
+      ClientRuntimeDescriptor desc = getClientRuntimeDescriptorById(crIds[i]);
+      String thisRuntimeId = desc.getRuntime().getId();
+      if (thisRuntimeId.equals(runtimeId))
+      {
+        //Get the templates for this client runtime
+        Set templateIds = FacetUtils.getTemplates(desc.getRequiredFacetVersions());
+        
+        //Add the template ids to the list if they have not already been added
+        Iterator itr = templateIds.iterator();
+        while (itr.hasNext())
+        {
+          IFacetedProjectTemplate template = (IFacetedProjectTemplate)itr.next();
+          if (!templateIdList.contains(template.getId()))
+          {
+            templateIdList.add(template.getId());
+          }
+        }
+      }
+      
+    }  
+    
+    return (String[])templateIdList.toArray(new String[]{});    
+  }  
+  
+  public static boolean doesClientTypeAndRuntimeSupportTemplate(String clientImplId, String runtimeId, String templateId)
+  {
+    String[] templateIds = getClientProjectTemplates(clientImplId, runtimeId);
+    if (templateIds!=null)
+    {
+      for (int i=0; i<templateIds.length; i++)
+      {
+       if (templateIds[i].equals(templateId))
+       {
+         return true;
+       }
+      }
+    }
+    
+    return false;
+  } 
+  
+  public static boolean doesClientRuntimeSupportTemplate(String clientRuntimeId, String templateId)
+  {
+    ClientRuntimeDescriptor desc = getClientRuntimeDescriptorById(clientRuntimeId);
+    //Get the templates for this client runtime
+    Set templateIds = FacetUtils.getTemplates(desc.getRequiredFacetVersions());
+    return templateIds.contains(templateId);
+  }
+  
+    
+  public static LabelsAndIds getClientTypeLabels()
+  {
+    
+    LabelsAndIds labelIds = new LabelsAndIds();
+    String[] idsArray = new String[0];
+    String[] labelsArray = new String[0];
+    labelIds.setIds_(idsArray);
+    labelIds.setLabels_(labelsArray);
+  
+    ArrayList ids = new ArrayList();
+    ArrayList labels = new ArrayList();
+  
+    Iterator itr = registry.clientRuntimes_.values().iterator();
+    while(itr.hasNext())
+    {
+      ClientRuntimeDescriptor desc = (ClientRuntimeDescriptor)itr.next();
+      WebServiceClientImpl thisClientImpl = desc.getClientImplementationType();
+      if (!ids.contains(thisClientImpl.getId()))
+      {
+        ids.add(thisClientImpl.getId());
+        labels.add(thisClientImpl.getLabel());
+      }
+    }
+
+    if (ids.size() > 0)
+    {
+      idsArray = (String[]) ids.toArray(new String[0]);
+      labelsArray = (String[]) labels.toArray(new String[0]);
+      labelIds.setIds_(idsArray);
+      labelIds.setLabels_(labelsArray);
+    }
+
+    return labelIds;
+
+  }  
+  
+  public static String[] getAllServerFactoryIdsWithRuntimes()
+  {
+    ArrayList fids = new ArrayList();
+    IServerType[] sts = ServerCore.getServerTypes();
+    org.eclipse.wst.server.core.IRuntime[] rts = ServerCore.getRuntimes();
+    
+    for (int i=0; i<sts.length; i++)
+    {
+      IServerType st = sts[i];
+      for (int j=0; j<rts.length; j++)
+      {
+        org.eclipse.wst.server.core.IRuntime rt = rts[j];
+        // If the server type has the same runtime type as this runtime, add it to the list
+        String serverTypeRuntimeTypeId = st.getRuntimeType().getId();
+        String runtimeRuntimeTypeId = rt.getRuntimeType().getId();
+        if (serverTypeRuntimeTypeId.equals(runtimeRuntimeTypeId))
+        {
+          if (!fids.contains(st.getId()))
+          {
+            fids.add(st.getId());
+          }
+        }
+      }
+    }
+   
+    return (String[])fids.toArray(new String[0]);
+  }
+  
+  public static String[] getProjectsForClientTypeAndRuntime(String typeId, String runtimeId)
+  {
+    String[] descs = getClientRuntimesByType(typeId);
+    IProject[] projects = FacetUtils.getAllProjects();
+    ArrayList validProjects = new ArrayList();
+    
+    for (int i=0; i<projects.length;i++)
+    {
+      //check if this projects suits any of the client runtimes
+      for (int j=0; j<descs.length; j++)
+      {
+        ClientRuntimeDescriptor desc = getClientRuntimeDescriptorById(descs[j]);
+        RequiredFacetVersion[] rfvs = desc.getRequiredFacetVersions();
+        try
+        {
+          IFacetedProject fproject = ProjectFacetsManager.create(projects[i]);
+          if (fproject != null)
+          {
+            Set facetVersions = fproject.getProjectFacets();
+            FacetMatcher fm = FacetUtils.match(rfvs, facetVersions);
+            if (fm.isMatch())
+            {
+              validProjects.add(projects[i].getName());
+              break;
+            }            
+          }
+          else
+          {
+            //TODO Handle the plain-old Java projects            
+          }
+        } catch (CoreException ce)
+        {
+          
+        }        
+      }
+    }
+    
+    return (String[])validProjects.toArray(new String[0]);
+    
+  }  
+  
+  public static boolean doesClientRuntimeSupportProject(String clientRuntimeId, String projectName)
+  {
+    IProject project = ProjectUtilities.getProject(projectName);
+    if (project==null || !project.exists())
+      return false;
+    
+    ClientRuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getClientRuntimeDescriptorById(clientRuntimeId);
+    RequiredFacetVersion[] rfvs = desc.getRequiredFacetVersions();    
+    
+    try
+    {
+      IFacetedProject fproject = ProjectFacetsManager.create(project);
+      if (fproject != null)
+      {
+        Set facetVersions = fproject.getProjectFacets();
+        FacetMatcher fm = FacetUtils.match(rfvs, facetVersions);
+        if (fm.isMatch())
+        {
+          return true;
+        }            
+      }
+      else
+      {
+        //TODO Handle the plain-old Java projects            
+      }
+    } catch (CoreException ce)
+    {
+      
+    }    
+    
+    return false;
+  }
+  
+  //Utilities used by the ServerRuntimePreferencePage
+  
+  private static SelectionListChoices serverToRuntimeToJ2EE_;
+  private static Hashtable serverFactoryIdByLabel_;
+  private static Hashtable runtimeIdByLabel_;
+  
+  public static SelectionListChoices getServerToRuntimeToJ2EE()
+  {
+    if (serverToRuntimeToJ2EE_!=null)
+    {
+      return serverToRuntimeToJ2EE_;
+    }
+    
+    //String[] servers = getStringArrayIntersection(getAllServerFactoryIds(), WebServiceClientTypeRegistry.getInstance().getAllClientServerFactoryIds());
+    String[] servers = getAllServerFactoryIds();
+    SelectionList serversList = new SelectionList(servers, 0);
+    Vector choices = new Vector();
+    for (int i=0; i<servers.length; i++)
+    {
+      choices.add(getRuntimeChoices(servers[i]));
+    }
+    serverToRuntimeToJ2EE_ = new SelectionListChoices(serversList, choices);
+    return serverToRuntimeToJ2EE_;
+    
+  }
+
+  private static SelectionListChoices getRuntimeChoices(String serverFactoryId)
+  {
+    //Return all the runtimes for now.
+    Set runtimes = registry.runtimes_.keySet();
+    Iterator itr = registry.runtimes_.keySet().iterator();
+    String[] runtimeIds = new String[runtimes.size()];
+    //TODO String[] runtimeIds = getRuntimeIDsByServerFactoryID(serverFactoryId);    
+    int i = 0;
+    while (itr.hasNext())
+    {
+      String runtimeId = (String)itr.next();
+      runtimeIds[i] = runtimeId;
+      i++;
+     
+    }
+
+    SelectionList runtimesList = new SelectionList(runtimeIds, 0);
+    Vector choices = new Vector();
+    for (int j=0; j<runtimeIds.length; j++)
+    {
+      choices.add(getJ2EEChoices(runtimeIds[j]));
+    }
+    return new SelectionListChoices(runtimesList, choices);    
+  }  
+  
+  private static SelectionListChoices getJ2EEChoices(String runtimeId)
+  {
+    //J2EE levels will be removed from the Server Runtime preference page.
+    //Return some hard coded values for now.
+    String[] j2eeVersions = new String[]{"13", "14"};
+    SelectionList j2eeVersionsList = new SelectionList(j2eeVersions, 0);
+    return new SelectionListChoices(j2eeVersionsList, null);        
+  }  
+  
+  private static String[] getAllServerFactoryIds()
+  {
+    //Return all server type ids for now.
+    //TODO Only the servers that are appropriate for the Web service runtimes should be displayed.
+    ArrayList ids = new ArrayList();
+    if (serverFactoryIdByLabel_ == null)
+    {
+      serverFactoryIdByLabel_ = new Hashtable();
+      IServerType[] serverTypes = ServerCore.getServerTypes();
+      for (int i=0; i<serverTypes.length; i++)
+      {
+        String id = serverTypes[i].getId();
+        String label = getServerLabelById(id);
+        serverFactoryIdByLabel_.put(label, id);
+        ids.add(id);
+      }    
+    }
+    else
+    {
+      Iterator fids =  serverFactoryIdByLabel_.values().iterator();
+      while (fids.hasNext())
+      {
+        String fid = (String)fids.next();
+        ids.add(fid);
+      }           
+    }
+    
+    if (ids.size() > 0)
+    {
+      String[] serverFactoryIds = (String[])ids.toArray(new String[0]);
+      return serverFactoryIds;
+    }
+    
+    return null;
+  }  
+  
+  //TODO this needs to be implemented once facet runtime to server runtime bridge is available.
+  /*
+  private static String[] getRuntimeIDsByServerFactoryID(String serverFactoryID) 
+  {
+    ArrayList ids = new ArrayList();
+    Iterator iter = registry.webServiceRuntimes_.values().iterator();
+    while (iter.hasNext())
+    {
+      WebServiceRuntimeInfo wsr = (WebServiceRuntimeInfo)iter.next();
+      if (doesRuntimeSupportServer(wsr.getId(), serverFactoryID))
+      {
+        ids.add(wsr.getId());
+      }
+      
+    }
+    
+    if (ids.size() > 0)
+    {
+      String[] runtimeIds = (String[])ids.toArray(new String[0]);
+      return runtimeIds;
+    }
+    
+    return null;    
+    
+    
+  }
+  */
+  
+  public static String getServerFactoryId(String label)
+  {
+    if (label==null || label.length()==0)
+      return null;
+    
+    if (serverFactoryIdByLabel_ == null)
+    {
+      getAllServerFactoryIds();
+    }
+    
+    if (serverFactoryIdByLabel_.containsKey(label))
+    {
+      return (String)serverFactoryIdByLabel_.get(label);  
+    }
+    else
+    {
+      return null;
+    }       
+  }  
+  
+  public static String getRuntimeId(String label)
+  {
+    
+    if (label==null || label.length()==0)
+      return null;
+    
+    if (runtimeIdByLabel_ == null)
+    {
+      runtimeIdByLabel_ = new Hashtable();
+      Iterator iter = registry.runtimes_.values().iterator();
+      while (iter.hasNext())
+      {
+        RuntimeDescriptor desc = (RuntimeDescriptor)iter.next();
+        runtimeIdByLabel_.put(desc.getLabel(), desc.getId());        
+      }      
+    }
+    
+    return (String)runtimeIdByLabel_.get(label);    
+  }    
+  
+  
+  
+  //Methods that facet API should provide but that are in here temporarily with dummy implementations
+  
+  public static Set getRuntimes(Set facets)
+  {
+    //Return all the runtimes in the dummy implementation
+    return RuntimeManager.getRuntimes();
+  }
+}
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.jst.ws.creation.ui/META-INF/MANIFEST.MF
index 6529b2f..38da0d1 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jst.ws.creation.ui/META-INF/MANIFEST.MF
@@ -39,5 +39,6 @@
  org.eclipse.jst.j2ee.ejb,
  org.wsdl4j,
  org.eclipse.wst.common.frameworks,
- org.eclipse.wst.common.environment
+ org.eclipse.wst.common.environment,
+ org.eclipse.wst.common.project.facet.core
 Eclipse-AutoStart: true
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/extension/PreServiceDevelopCommand.java b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/extension/PreServiceDevelopCommand.java
index dac94a5..2f810fa 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/extension/PreServiceDevelopCommand.java
+++ b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/extension/PreServiceDevelopCommand.java
@@ -16,7 +16,7 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jst.ws.internal.consumption.command.common.CreateModuleCommand;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.wst.command.internal.provisional.env.core.context.ResourceContext;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
@@ -34,6 +34,7 @@
 public class PreServiceDevelopCommand extends AbstractDataModelOperation 
 {
   private TypeRuntimeServer typeRuntimeServer_;
+  private String            serviceRuntimeId_;
   private IContext          context_;
   private ISelection        selection_;
 	private String						project_;
@@ -73,7 +74,7 @@
     }
     
     
-	  IWebServiceRuntime wsrt   = WebServiceRuntimeExtensionUtils.getWebServiceRuntime( typeRuntimeServer_.getRuntimeId() );
+	  IWebServiceRuntime wsrt   = WebServiceRuntimeExtensionUtils2.getServiceRuntime( serviceRuntimeId_ );
 	  WebServiceInfo     wsInfo = new WebServiceInfo();
 
 	  System.out.println( "In Pre service develop command." );
@@ -88,7 +89,7 @@
 	
 		//Set up the IContext
 		WebServiceScenario scenario = null;
-    int scenarioInt = WebServiceRuntimeExtensionUtils.getScenarioFromTypeId(typeRuntimeServer_.getTypeId());
+    int scenarioInt = WebServiceRuntimeExtensionUtils2.getScenarioFromTypeId(typeRuntimeServer_.getTypeId());
     if (scenarioInt == WebServiceScenario.BOTTOMUP)
 		{
 			scenario = WebServiceScenario.BOTTOMUP_LITERAL;
@@ -160,6 +161,11 @@
   {
 	  typeRuntimeServer_ = typeRuntimeServer;  
   }
+  
+  public void setServiceRuntimeId(String id)
+  {
+    serviceRuntimeId_ = id;
+  }
 	  
   public void setServiceJ2EEVersion( String j2eeLevel )
   {
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidget.java b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidget.java
index 8b68cb8..1956860 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidget.java
+++ b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidget.java
@@ -14,7 +14,7 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jst.ws.internal.consumption.ui.widgets.PreferencesSelectionWidget;
 import org.eclipse.jst.ws.internal.consumption.ui.widgets.WebServiceClientTypeWidget;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.LabelsAndIds;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.jst.ws.internal.ui.common.UIUtils;
@@ -188,7 +188,7 @@
   
   public void setServiceTypeRuntimeServer( TypeRuntimeServer ids )
   {
-    LabelsAndIds                        labelIds   = WebServiceRuntimeExtensionUtils.getServiceTypeLabels();
+    LabelsAndIds                        labelIds   = WebServiceRuntimeExtensionUtils2.getServiceTypeLabels();
 	//rskreg
     int                                 selection  = 0;
     String[]                            serviceIds = labelIds.getIds_();
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidgetDefaultingCommand.java b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidgetDefaultingCommand.java
index f447504..95f0e3e 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidgetDefaultingCommand.java
+++ b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/ServerWizardWidgetDefaultingCommand.java
@@ -16,7 +16,7 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jst.ws.internal.consumption.ui.widgets.ClientWizardWidgetDefaultingCommand;
-import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 
 public class ServerWizardWidgetDefaultingCommand extends ClientWizardWidgetDefaultingCommand
@@ -27,9 +27,9 @@
   public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable )
   {    
     String type      = getScenarioContext().getWebServiceType();
-    String runtime   = WebServiceRuntimeExtensionUtils.getDefaultRuntimeValueFor( type );
+    String runtime   = WebServiceRuntimeExtensionUtils2.getDefaultRuntimeValueFor( type );
 	
-    String factoryID = WebServiceRuntimeExtensionUtils.getDefaultServerValueFor(type);    
+    String factoryID = WebServiceRuntimeExtensionUtils2.getDefaultServerValueFor(type);    
     typeRuntimeServer_ = new TypeRuntimeServer();
     
     typeRuntimeServer_.setTypeId( type );
@@ -37,7 +37,7 @@
     typeRuntimeServer_.setServerId( factoryID );
     
     //Default the typeId from the initial selection
-    String[] typeIds = WebServiceRuntimeExtensionUtils.getWebServiceTypeBySelection(initialSelection_);
+    String[] typeIds = WebServiceRuntimeExtensionUtils2.getWebServiceTypeBySelection(initialSelection_);
 
     if (typeIds!=null && typeIds.length>0)
     {
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/binding/ServerWidgetBinding.java b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/binding/ServerWidgetBinding.java
index 29615e7..ffaff16 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/binding/ServerWidgetBinding.java
+++ b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/binding/ServerWidgetBinding.java
@@ -138,36 +138,44 @@
     
     // Before ServerRuntimeSelectionWidget
     dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "GenerateProxy", ServerRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceProject2EARProject", ServerRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceComponentName", ServerRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceEarComponentName", ServerRuntimeSelectionWidget.class);
+    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceProjectName", ServerRuntimeSelectionWidget.class);
+    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceEarProjectName", ServerRuntimeSelectionWidget.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceProject2EARProject", ServerRuntimeSelectionWidget.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceComponentName", ServerRuntimeSelectionWidget.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceEarComponentName", ServerRuntimeSelectionWidget.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceComponentType", ServerRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", ServerRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", ServerRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", ServerRuntimeSelectionWidget.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", ServerRuntimeSelectionWidget.class);
+    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", ServerRuntimeSelectionWidget.class);
+    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", ServerRuntimeSelectionWidget.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", ServerRuntimeSelectionWidget.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", ServerRuntimeSelectionWidget.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceTypeRuntimeServer", ServerRuntimeSelectionWidget.class);
+    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceRuntimeId", ServerRuntimeSelectionWidget.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientTypeRuntimeServer", ServerRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceJ2EEVersion", ServerRuntimeSelectionWidget.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientJ2EEVersion", ServerRuntimeSelectionWidget.class);
+    dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientRuntimeId", ServerRuntimeSelectionWidget.class);    
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceJ2EEVersion", ServerRuntimeSelectionWidget.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientJ2EEVersion", ServerRuntimeSelectionWidget.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceNeedEAR", ServerRuntimeSelectionWidget.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientNeedEAR", ServerRuntimeSelectionWidget.class);
     
             
     // After ServerRuntimeSelectionWidget    
     dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceTypeRuntimeServer", ServerExtensionDefaultingCommand.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceJ2EEVersion", ServerExtensionDefaultingCommand.class );
+    dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceRuntimeId", ServerExtensionDefaultingCommand.class);    
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceJ2EEVersion", ServerExtensionDefaultingCommand.class );
     dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientTypeRuntimeServer", ClientExtensionDefaultingCommand.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientJ2EEVersion", ClientExtensionDefaultingCommand.class );
+    dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientRuntimeId", ClientExtensionDefaultingCommand.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientJ2EEVersion", ClientExtensionDefaultingCommand.class );
     //dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceProject2EARProject", ServerExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceProjectName", ServerExtensionDefaultingCommand.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceComponentName", ServerExtensionDefaultingCommand.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceComponentName", ServerExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceEarProjectName", ServerExtensionDefaultingCommand.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceEarComponentName", ServerExtensionDefaultingCommand.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "Runtime2ClientTypes", ClientExtensionDefaultingCommand.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceEarComponentName", ServerExtensionDefaultingCommand.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "Runtime2ClientTypes", ClientExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientProjectName", ClientExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientEarProjectName", ClientExtensionDefaultingCommand.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientComponentName", ClientExtensionDefaultingCommand.class);
-    dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientEarComponentName", ClientExtensionDefaultingCommand.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientComponentName", ClientExtensionDefaultingCommand.class);
+    //dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientEarComponentName", ClientExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientComponentType", ClientExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ServiceNeedEAR", ServerExtensionDefaultingCommand.class);
     dataRegistry.addMapping(ServerRuntimeSelectionWidget.class, "ClientNeedEAR", ClientExtensionDefaultingCommand.class);
@@ -363,6 +371,7 @@
       dataRegistry.addMapping( ServerWizardWidgetOutputCommand.class, "TestService", PreClientDevelopCommand.class);           
       dataRegistry.addMapping( ServerWizardWidgetOutputCommand.class, "ResourceContext", PreClientDevelopCommand.class);            
       dataRegistry.addMapping( ClientExtensionDefaultingCommand.class, "ClientTypeRuntimeServer", PreClientDevelopCommand.class );
+      dataRegistry.addMapping( ClientExtensionDefaultingCommand.class, "ClientRuntimeId", PreClientDevelopCommand.class );      
       dataRegistry.addMapping( ClientExtensionDefaultingCommand.class, "ClientJ2EEVersion", PreClientDevelopCommand.class);
       dataRegistry.addMapping( ClientExtensionDefaultingCommand.class, "ClientProject", PreClientDevelopCommand.class, "Module", null );
       dataRegistry.addMapping( ClientExtensionDefaultingCommand.class, "ClientProjectType", PreClientDevelopCommand.class, "ModuleType", null);
@@ -456,20 +465,22 @@
       
       // Map ServerRuntimeSelectionWidgetDefaultingCommand
       dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceTypeRuntimeServer", ServerExtensionDefaultingCommand.class);
+      dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceRuntimeId", ServerExtensionDefaultingCommand.class);      
       dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientTypeRuntimeServer", ClientExtensionDefaultingCommand.class);
+      dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientRuntimeId", ClientExtensionDefaultingCommand.class);      
       //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceProject2EARProject", ServerExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceProjectName", ServerExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceEarProjectName", ServerExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceComponentName", ServerExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceEarComponentName", ServerExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", ClientExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceComponentName", ServerExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceEarComponentName", ServerExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "Runtime2ClientTypes", ClientExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientProjectName", ClientExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarProjectName", ClientExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", ClientExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", ClientExtensionDefaultingCommand.class);      
+      //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientEarComponentName", ClientExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentName", ClientExtensionDefaultingCommand.class);      
       dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientComponentType", ClientExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceJ2EEVersion", ServerExtensionDefaultingCommand.class);
-      dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientJ2EEVersion", ClientExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceJ2EEVersion", ServerExtensionDefaultingCommand.class);
+      //dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ClientJ2EEVersion", ClientExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "GenerateProxy", ClientFragment.class);
       dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "GenerateProxy", ClientExtensionDefaultingCommand.class);
       dataRegistry.addMapping(ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceNeedEAR", ServerExtensionDefaultingCommand.class);
@@ -493,6 +504,7 @@
 			//
 	  dataRegistry.addMapping( ServerRuntimeSelectionWidgetDefaultingCommand.class, "ServiceComponentType", PreServiceDevelopCommand.class, "ModuleType", null);
 	    dataRegistry.addMapping( ServerExtensionDefaultingCommand.class, "ServiceTypeRuntimeServer", PreServiceDevelopCommand.class );
+        dataRegistry.addMapping( ServerExtensionDefaultingCommand.class, "ServiceRuntimeId", PreServiceDevelopCommand.class );
       dataRegistry.addMapping( ServerExtensionDefaultingCommand.class, "ServiceJ2EEVersion", PreServiceDevelopCommand.class);
       dataRegistry.addMapping( ServerExtensionDefaultingCommand.class, "ServerProject", PreServiceDevelopCommand.class, "Module", null );
       dataRegistry.addMapping( ServerExtensionDefaultingCommand.class, "ServerProjectEAR", PreServiceDevelopCommand.class, "Ear", null );
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidget.java b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidget.java
index 1ca3083..f1576d2 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidget.java
+++ b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidget.java
@@ -19,6 +19,7 @@
 import org.eclipse.jst.ws.internal.consumption.ui.widgets.runtime.ClientRuntimeSelectionWidget;
 import org.eclipse.jst.ws.internal.consumption.ui.widgets.runtime.ProjectSelectionWidget;
 import org.eclipse.jst.ws.internal.consumption.ui.widgets.runtime.RuntimeServerSelectionWidget;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
 import org.eclipse.jst.ws.internal.ui.common.UIUtils;
 import org.eclipse.swt.SWT;
@@ -57,6 +58,7 @@
   private ClientRuntimeSelectionWidget clientWidget_;
   private TextModifyListener           textListener_;
   private MessageUtils msgUtils_;
+  private String serviceRuntimeId_;
   
   private boolean isClientWidgetVisible_ = true;
   
@@ -132,46 +134,31 @@
     clientWidget_.setClientTypeRuntimeServer( ids );  
   }
   
-  public SelectionListChoices getServiceProject2EARProject()
+  public void setServiceRuntimeId(String id)
   {
-    return projectWidget_.getProjectChoices();
+    serviceRuntimeId_ = id;
   }
   
-  public void setServiceProject2EARProject(SelectionListChoices serviceProject2EARProject)
+  public String getServiceRuntimeId()
   {
-    projectWidget_.setProjectChoices(serviceProject2EARProject);
-  }
-  
-  public SelectionListChoices getRuntime2ClientTypes()
-  {
-    return clientWidget_.getRuntime2ClientTypes();
+    //calculate the most appropriate clientRuntimeId based on current settings.
+    String projectName = projectWidget_.getProjectName();
+    String templateId = projectWidget_.getComponentType();
+    
+    //Find the service runtime that fits this profile best.
+    return WebServiceRuntimeExtensionUtils2.getServiceRuntimeId(runtimeWidget_.getTypeRuntimeServer(), projectName, templateId);    
   }  
   
-  public void setRuntime2ClientTypes(SelectionListChoices runtime2ClientTypes)
+  public void setClientRuntimeId(String id)
   {
-    clientWidget_.setRuntime2ClientTypes(runtime2ClientTypes);
+    clientWidget_.setClientRuntimeId(id);
   }
   
-  public String getServiceJ2EEVersion()
+  public String getClientRuntimeId()
   {
-    return runtimeWidget_.getJ2EEVersion();
-  }
-  
-  public void setServiceJ2EEVersion(String j2eeVersion)
-  {
-    runtimeWidget_.setJ2EEVersion(j2eeVersion);
-    projectWidget_.setJ2EEVersion(j2eeVersion);
-  }
-  
-  public String getClientJ2EEVersion()
-  {
-    return clientWidget_.getJ2EEVersion();
-  }
-  
-  public void setClientJ2EEVersion(String j2eeVersion)
-  {
-    clientWidget_.setJ2EEVersion(j2eeVersion);
-  }
+    //calculate the most appropriate clientRuntimeId based on current settings.
+    return clientWidget_.getClientRuntimeId();
+  } 
   
   public boolean getServiceNeedEAR()
   {
@@ -193,57 +180,17 @@
     clientWidget_.setClientNeedEAR(b);
   }  
   
-  public String getServiceComponentName()
-  {
-	return projectWidget_.getComponentName();  
-  }
-  
-  public void setServiceComponentName( String name )
-  {
-    projectWidget_.setComponentName( name );
-  }
-  
-  public String getServiceEarComponentName()
-  {
-    return projectWidget_.getEarComponentName();	  
-  }
-  
-  public void setServiceEarComponentName( String name )
-  {
-	projectWidget_.setEarComponentName( name );  
-  }
-  
   public void setServiceComponentType( String type )
   {
 	projectWidget_.setComponentType( type );  
   }
   
-  public String getClientComponentName()
-  {
-	return clientWidget_.getClientComponentName();  
-  }
-  
-  public void setClientComponentName( String name )
-  {
-    clientWidget_.setClientComponentName( name );
-  }
-  
-  public String getClientEarComponentName()
-  {
-    return clientWidget_.getClientEarComponentName();	  
-  }
-  
-  public void setClientEarComponentName( String name )
-  {
-	clientWidget_.setClientEarComponentName( name );  
-  }
-  
   public String getClientComponentType()
   {
     return clientWidget_.getClientComponentType();
   }  
   
-  public void setComponentType( String type )
+  public void setClientComponentType( String type )
   {
 	clientWidget_.setClientComponentType( type );  
   }
@@ -253,21 +200,41 @@
     return projectWidget_.getProjectName();  
   }
   
+  public void setServiceProjectName(String name)
+  {
+    projectWidget_.setProjectName(name);  
+  }
+  
   public String getServiceEarProjectName()
   {
 	return projectWidget_.getEarProjectName();  
   }
   
+  public void setServiceEarProjectName(String name)
+  {
+    projectWidget_.setEarProjectName(name);  
+  }  
+  
   public String getClientProjectName()
   {
     return clientWidget_.getClientProjectName();  
   }
   
+  public void setClientProjectName(String name)
+  {
+    clientWidget_.setClientProjectName(name);  
+  }  
+  
   public String getClientEarProjectName()
   {
 	return clientWidget_.getClientEarProjectName();  
   }
   
+  public void setClientEarProjectName(String name)
+  {
+    clientWidget_.setClientEarProjectName(name);  
+  }    
+  
   private class TextModifyListener implements ModifyListener 
   {
   	public void modifyText(ModifyEvent e)
@@ -282,12 +249,11 @@
   		  clientIds.setServerInstanceId( serviceIds.getServerInstanceId() );
 
   		  clientWidget_.setClientTypeRuntimeServer( clientIds );
-  		  clientWidget_.setJ2EEVersion(runtimeWidget_.getJ2EEVersion());  	
+  		  //clientWidget_.setJ2EEVersion(runtimeWidget_.getJ2EEVersion());  	
   		}
 		
 		//Set the current server selection and J2EE level on the ProjectSelectionWidget
 		projectWidget_.setTypeRuntimeServer(runtimeWidget_.getTypeRuntimeServer());
-		projectWidget_.setJ2EEVersion(runtimeWidget_.getJ2EEVersion());
   	}
   }
  
@@ -301,6 +267,7 @@
     IStatus projectStatus = projectWidget_.getStatus();
     IStatus clientStatus  = clientWidget_.getStatus();    
     IStatus finalStatus   = Status.OK_STATUS;
+    /*
     
     // call child widgets' getStatus()
     if( serviceStatus.getSeverity() == Status.ERROR )
@@ -336,19 +303,6 @@
       IProject serviceProj = ProjectUtilities.getProject(serviceProjName);
       if (serviceProj.exists())
       {
-		// rskreg
-        //WebServiceServerRuntimeTypeRegistry wssrtRegistry = WebServiceServerRuntimeTypeRegistry.getInstance();
-        //String serverTypeId = wssrtRegistry.getWebServiceServerByFactoryId(serviceServerFactoryId).getId();
-		//String serverTypeId = wssrtRegistry.getWebServiceServerByFactoryId(serviceServerFactoryId).getId();
-        /* rskejb
-        boolean isEJBRequired = WebServiceRuntimeExtensionUtils.requiresEJBModuleFor(serviceServerFactoryId, webServiceRuntimeId, webServiceTypeId);
-        if (!isEJBRequired)
-        {
-          //Check the Web service type to see if an EJB project is required
-          //isEJBRequired = wssrtRegistry.requiresEJBProject(webServiceTypeId);
-			isEJBRequired = WebServiceRuntimeExtensionUtils.requiresEJBProject(webServiceTypeId);
-        }
-        rskejb */
         if (serviceComponentName!=null && serviceComponentName.length()>0)
         {
           String compTypeId = J2EEUtils.getComponentTypeId(serviceProj);
@@ -359,19 +313,6 @@
         	finalStatus = StatusUtils.errorStatus( msgUtils_.getMessage("MSG_INVALID_PROJECT_TYPE",new String[]{serviceProjName, compTypeLabel}) );        	        	
           }
         }
-        // begin remove
-        /*
-        boolean isEJBRequired = WebServiceRuntimeExtensionUtils.requiresEJBProject(webServiceRuntimeId, webServiceTypeId);
-        if (isEJBRequired && serviceComponentName!=null && serviceComponentName.length()>0 && !J2EEUtils.isEJBComponent(serviceProj, serviceComponentName))
-        {
-          finalStatus = new SimpleStatus("",msgUtils_.getMessage("MSG_INVALID_EJB_PROJECT",new String[]{serviceProjName}),Status.ERROR);          
-        }
-        if (!isEJBRequired && serviceComponentName!=null && serviceComponentName.length()>0 && !J2EEUtils.isWebComponent(serviceProj, serviceComponentName))
-        {
-          finalStatus = new SimpleStatus("",msgUtils_.getMessage("MSG_INVALID_WEB_PROJECT",new String[]{serviceProjName}),Status.ERROR);
-        }
-        */
-        // end remove
       }
     }
     
@@ -404,7 +345,7 @@
 	    }         
       
     }
-    
+    */
     return finalStatus;
   }
   
diff --git a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidgetDefaultingCommand.java b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidgetDefaultingCommand.java
index ea814cb..d346172 100644
--- a/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidgetDefaultingCommand.java
+++ b/bundles/org.eclipse.jst.ws.creation.ui/src/org/eclipse/jst/ws/internal/creation/ui/widgets/runtime/ServerRuntimeSelectionWidgetDefaultingCommand.java
@@ -10,8 +10,10 @@
  *******************************************************************************/
 package org.eclipse.jst.ws.internal.creation.ui.widgets.runtime;
 
+import java.util.Set;
 import java.util.Vector;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -21,12 +23,18 @@
 import org.eclipse.jst.ws.internal.common.J2EEUtils;
 import org.eclipse.jst.ws.internal.common.ResourceUtils;
 import org.eclipse.jst.ws.internal.common.ServerUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.common.FacetMatcher;
+import org.eclipse.jst.ws.internal.consumption.ui.common.FacetUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.common.ServerSelectionUtils;
 import org.eclipse.jst.ws.internal.consumption.ui.plugin.WebServiceConsumptionUIPlugin;
 import org.eclipse.jst.ws.internal.consumption.ui.preferences.PersistentServerRuntimeContext;
 import org.eclipse.jst.ws.internal.consumption.ui.widgets.runtime.ClientRuntimeSelectionWidgetDefaultingCommand;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.ClientRuntimeDescriptor;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.RequiredFacetVersion;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.ServiceRuntimeDescriptor;
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.ServiceType;
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils;
+import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeExtensionUtils2;
 import org.eclipse.jst.ws.internal.consumption.ui.wsrt.WebServiceRuntimeInfo;
 import org.eclipse.jst.ws.internal.context.ProjectTopologyContext;
 import org.eclipse.jst.ws.internal.data.TypeRuntimeServer;
@@ -38,7 +46,12 @@
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.environment.Environment;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 import org.eclipse.wst.server.core.IRuntime;
+import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.ServerCore;
+import org.eclipse.wst.server.core.ServerUtil;
 import org.eclipse.wst.ws.internal.provisional.wsrt.WebServiceScenario;
 
 public class ServerRuntimeSelectionWidgetDefaultingCommand extends ClientRuntimeSelectionWidgetDefaultingCommand
@@ -52,20 +65,25 @@
   private WSRuntimeJ2EEType webServiceRuntimeJ2EEType = null;
   
   private TypeRuntimeServer serviceIds_;
-  private SelectionListChoices serviceProject2EARProject_;
-  private String serviceComponentName_;
-  private String serviceEarComponentName_;
+  private String serviceRuntimeId_;
+  private String serviceProjectName_;
+  private String serviceEarProjectName_;
+  //private SelectionListChoices serviceProject2EARProject_;
+  //private String serviceComponentName_;
+  //private String serviceEarComponentName_;
   private String serviceComponentType_;
   private IProject initialProject_;
   private String initialComponentName_;
-  private String serviceJ2EEVersion_;
+  //private String serviceJ2EEVersion_;
   private boolean serviceNeedEAR_ = true;
+  private FacetMatcher serviceFacetMatcher_;
 
   public ServerRuntimeSelectionWidgetDefaultingCommand()
   {
     super();
   }
   
+  
   public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable )
   {    
     Environment env = getEnvironment();
@@ -78,6 +96,229 @@
        return clientSideStatus;
      }
      IStatus status = Status.OK_STATUS;
+     
+     // Set the runtime based on the initial selection
+     serviceRuntimeId_ = getDefaultServiceRuntime(initialProject_);
+     if (serviceRuntimeId_ == null)
+     {
+       // return and error.
+     }
+     serviceIds_.setRuntimeId(WebServiceRuntimeExtensionUtils2.getServiceRuntimeDescriptorById(serviceRuntimeId_).getRuntime()
+         .getId());
+
+     // Set the project
+     if (serviceProjectName_ == null)
+     {
+       // Project name did not get set when the runtime was set, so set it now
+       serviceProjectName_ = getDefaultServiceProjectName();
+     }
+
+     IProject serviceProject = ProjectUtilities.getProject(serviceProjectName_);
+     if (!serviceProject.exists())
+     {
+       // Set the project template
+       serviceComponentType_ = getDefaultServiceProjectTemplate();
+     }
+     else
+     {
+       //Set it to an empty String
+       serviceComponentType_ = "";
+     }
+
+     updateClientProject(serviceProjectName_, serviceIds_.getTypeId());
+     
+     // Set the EAR
+     serviceEarProjectName_ = ""; // TODO fix this!
+     serviceNeedEAR_ = false;
+
+     // Set the server
+     IStatus serverStatus = setServiceDefaultServer();
+     if (serverStatus.getSeverity() == Status.ERROR)
+     {
+       env.getStatusHandler().reportError(serverStatus);
+       return serverStatus;
+     }
+     
+     return Status.OK_STATUS;
+     
+    } catch (Exception e)
+    {
+      // Catch all Exceptions in order to give some feedback to the user
+      IStatus errorStatus = StatusUtils.errorStatus(msgUtils_.getMessage("MSG_ERROR_TASK_EXCEPTED",
+          new String[] { e.getMessage() }), e);
+      env.getStatusHandler().reportError(errorStatus);
+      return errorStatus;
+    }
+  }
+  
+  private IStatus setServiceDefaultServer()
+  {
+    //Choose an existing server the module is already associated with if possible
+    IProject serviceProject = ProjectUtilities.getProject(serviceProjectName_);
+    IServer[] configuredServers = ServerUtil.getServersByModule(ServerUtils.getModule(serviceProject), null);
+    IServer firstSupportedServer = getFirstSupportedServer(configuredServers, serviceRuntimeId_, serviceProject);
+    if (firstSupportedServer != null)
+    {
+      serviceIds_.setServerId(firstSupportedServer.getServerType().getId());
+      serviceIds_.setServerInstanceId(firstSupportedServer.getId());
+      return Status.OK_STATUS;        
+    }    
+    
+    
+    //Choose any suitable existing server
+    IServer[] servers = ServerCore.getServers();
+    IServer supportedServer = getFirstSupportedServer(servers, serviceRuntimeId_, serviceProject);
+    if (supportedServer != null)
+    {
+      serviceIds_.setServerId(supportedServer.getServerType().getId());
+      serviceIds_.setServerInstanceId(supportedServer.getId());
+      return Status.OK_STATUS;        
+    }        
+    
+    //No suitable existing server was found. Choose a suitable server type
+    String[] serverTypes = WebServiceRuntimeExtensionUtils2.getServerFactoryIdsByServiceRuntime(serviceRuntimeId_);
+    if (serverTypes!=null && serverTypes.length>0)
+    {
+      //TODO give priority to a server type that corresponds to the runtime associated with
+      //this project, if any.
+      serviceIds_.setServerId(serverTypes[0]);
+      return Status.OK_STATUS;
+    }
+    
+    //No suitable server was found. Popup an error.
+    String runtimeLabel = WebServiceRuntimeExtensionUtils2.getRuntimeLabelById(serviceIds_.getRuntimeId());
+    String serverLabels = getServerLabels(serviceIds_.getRuntimeId());    
+    IStatus status = StatusUtils.errorStatus(msgUtils_.getMessage("MSG_ERROR_NO_SERVER_RUNTIME", new String[]{runtimeLabel, serverLabels}) );
+    return status;
+  }  
+  
+  private IServer getFirstSupportedServer(IServer[] servers, String serviceRuntimeId, IProject serviceProject)
+  {
+    if (servers != null && servers.length > 0) {
+      for (int i = 0; i < servers.length; i++)
+      {
+        String serverFactoryId = servers[i].getServerType().getId();
+        if (WebServiceRuntimeExtensionUtils2.doesServiceRuntimeSupportServer(serviceRuntimeId, serverFactoryId))
+        {
+          //TODO check if the server type supports the project before returning.
+          return servers[i];
+        }
+      }
+    }
+    return null;
+  }      
+  
+  private String getDefaultServiceProjectTemplate()
+  {
+    String[] templates = WebServiceRuntimeExtensionUtils2.getServiceProjectTemplates(serviceIds_.getTypeId(), serviceIds_.getRuntimeId());
+    return templates[0];
+  }  
+  
+  private String getDefaultServiceProjectName()
+  {
+    IProject[] projects = FacetUtils.getAllProjects();
+    ServiceRuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getServiceRuntimeDescriptorById(serviceRuntimeId_);
+    RequiredFacetVersion[] rfvs = desc.getRequiredFacetVersions();
+    
+    //Check each project for compatibility with the serviceRuntime
+    for (int i=0; i<projects.length; i++)
+    {
+      try
+      {
+        IFacetedProject fproject = ProjectFacetsManager.create(projects[i]);
+        if (fproject != null)
+        {
+          Set facetVersions = fproject.getProjectFacets();
+          FacetMatcher fm = FacetUtils.match(rfvs, facetVersions);
+          if (fm.isMatch())
+          {
+            serviceFacetMatcher_ = fm;
+            return projects[i].getName();
+          }            
+        }
+        else
+        {
+          //TODO Handle the plain-old Java projects            
+        }
+      } catch (CoreException ce)
+      {
+        
+      }
+    }
+    
+    //No project was suitable, return a new project name
+    return ResourceUtils.getDefaultWebProjectName();
+    
+  }  
+  
+  private String getDefaultServiceRuntime(IProject project)
+  {
+    //If possible, pick a Web service runtime that works with the initially selected project.
+    //If the initially selected project does not work with any of the Web service runtimes, pick the 
+    //preferred Web service runtime.
+    
+    String[] serviceRuntimes = WebServiceRuntimeExtensionUtils2.getServiceRuntimesByServiceType(serviceIds_.getTypeId());
+    if (project != null && project.exists())
+    {
+      for (int i=0; i<serviceRuntimes.length; i++)
+      {
+        RequiredFacetVersion[] rfv = WebServiceRuntimeExtensionUtils2.getServiceRuntimeDescriptorById(serviceRuntimes[i]).getRequiredFacetVersions();
+        try
+        {
+          IFacetedProject fproject = ProjectFacetsManager.create(project);
+          if (fproject != null)
+          {
+            Set facetVersions = fproject.getProjectFacets();
+            FacetMatcher fm = FacetUtils.match(rfv, facetVersions);
+            if (fm.isMatch())
+            {
+              serviceFacetMatcher_ = fm;
+              serviceProjectName_ = project.getName();
+              return serviceRuntimes[i];
+            }            
+          }
+          else
+          {
+            //TODO Handle the plain-old Java projects            
+          }
+        } catch (CoreException ce)
+        {
+          
+        }
+      }
+    }
+    
+    //Haven't returned yet so this means that the intitially selected project cannot be used
+    //to influence the selection of the runtime. Pick the preferred Web service runtime.
+    PersistentServerRuntimeContext context = WebServiceConsumptionUIPlugin.getInstance().getServerRuntimeContext();
+    String runtimeId = context.getRuntimeId();
+    for (int j=0; j<serviceRuntimes.length; j++ )
+    {
+      ServiceRuntimeDescriptor desc = WebServiceRuntimeExtensionUtils2.getServiceRuntimeDescriptorById(serviceRuntimes[j]);
+      if (desc.getRuntime().getId().equals(runtimeId))
+      {
+        return desc.getId();
+      }
+    }
+    
+    if (serviceRuntimes.length > 0)
+      return WebServiceRuntimeExtensionUtils2.getServiceRuntimeDescriptorById(serviceRuntimes[0]).getId();
+    else
+      return null;
+  }  
+  /*
+  public IStatus execuste( IProgressMonitor monitor, IAdaptable adaptable )
+  {    
+    Environment env = getEnvironment();
+    
+    try
+    {
+     IStatus clientSideStatus = super.execute(monitor, null);
+     if (clientSideStatus.getSeverity()==Status.ERROR)
+     {
+       return clientSideStatus;
+     }
+     IStatus status = Status.OK_STATUS;
 
 
     setDefaultServiceRuntimeFromPreference();
@@ -91,7 +332,7 @@
      
      setServiceComponentType();
      // Default projects EARs and servers.
-     setDefaultProjects();
+     //setDefaultProjects();
      setDefaultEARs();
      IStatus serverStatus = setDefaultServer();
      if (serverStatus.getSeverity()== Status.ERROR)
@@ -101,7 +342,7 @@
      }
      updateServiceEARs();
      //updateClientProject(getServiceProject2EARProject().getList().getSelection(), serviceComponentName_, serviceIds_.getTypeId());
-     updateClientEARs();
+     //updateClientEARs();
 	 	 
      return status;
     } catch (Exception e)
@@ -112,7 +353,8 @@
       return errorStatus;
     }
     
-  }  
+  }
+  */
 
   private void setServiceComponentType()
   {
@@ -247,6 +489,7 @@
 
   
 
+  /*
   private void setDefaultServiceJ2EEVersionFromPreference()
   {
     if (serviceIds_ != null)
@@ -284,7 +527,7 @@
       }
     }
   } 
-
+  */
   
   /**
    * This method needs a lot of work. It does not take into account the component types supported by the
@@ -360,6 +603,7 @@
   */
   //
 
+  /*
   private void setDefaultProjects()
   {
 	
@@ -371,7 +615,7 @@
       String serviceProjectName = getServiceProject2EARProject().getList().getSelection();
      
       //Select a client project with "client" added to the above project name.
-      updateClientProject(serviceProjectName, serviceComponentName_, serviceIds_.getTypeId());
+      //updateClientProject(serviceProjectName, serviceComponentName_, serviceIds_.getTypeId());
       //String clientProjectName = ResourceUtils.getClientWebProjectName(serviceProjectName, serviceIds_.getTypeId() );
       //getRuntime2ClientTypes().getChoice().getChoice().getList().setSelectionValue(clientProjectName);
       
@@ -382,14 +626,16 @@
 	//Set the service project selection to this initialProject
 	getServiceProject2EARProject().getList().setSelectionValue(initialProject_.getName());
   serviceComponentName_ = initialComponentName_;
-  updateClientProject(initialProject_.getName(), serviceComponentName_, serviceIds_.getTypeId());
+  //updateClientProject(initialProject_.getName(), serviceComponentName_, serviceIds_.getTypeId());
 	//String clientProjectName = ResourceUtils.getClientWebProjectName(initialProject_.getName(), serviceIds_.getTypeId() ); 
 	//Set the client project selection to clientProject
 	//getRuntime2ClientTypes().getChoice().getChoice().getList().setSelectionValue(clientProjectName);
 		      	    
   }
+  */
   
 
+  /*
   private void setServiceProjectToFirstValid()
   {
     //WebServiceServerRuntimeTypeRegistry wssrtReg = WebServiceServerRuntimeTypeRegistry.getInstance();
@@ -420,9 +666,7 @@
                ((runtimeTarget!=null) && WebServiceRuntimeExtensionUtils.doesRuntimeSupportServerTarget(runtimeTargetId, serviceIds_.getRuntimeId()))) 
                )
             {
-              getServiceProject2EARProject().getList().setSelectionValue(projectNames[i]);
-              serviceComponentName_ = vcs[j].getName();
-              
+              serviceProjectName_ = projectNames[i];              
               return;
             }
           }
@@ -435,21 +679,21 @@
     //serviceComponentName_ = ResourceUtils.getDefaultWebProjectName();
     if (serviceComponentType_.equals(IModuleConstants.JST_EJB_MODULE))
     {
-      getServiceProject2EARProject().getList().setSelectionValue(ResourceUtils.getDefaultEJBProjectName());
-      serviceComponentName_ = ResourceUtils.getDefaultEJBComponentName();
+      serviceProjectName_ = ResourceUtils.getDefaultEJBProjectName();
     }
     else
     {
-      getServiceProject2EARProject().getList().setSelectionValue(ResourceUtils.getDefaultWebProjectName());
-      serviceComponentName_ = ResourceUtils.getDefaultWebComponentName();
+      serviceProjectName_ = ResourceUtils.getDefaultWebProjectName();
     }    
   }
+  */
 
 
+  /*
   private void setDefaultEARs()
   { 
     //Service side
-    String initialProjectName = getServiceProject2EARProject().getList().getSelection();
+    String initialProjectName = serviceProjectName_;
     IProject initialProject =   FileResourceUtils.getWorkspaceRoot().getProject(initialProjectName);
     boolean earIsSet = false;
     if (initialProject != null && initialProject.exists())
@@ -461,8 +705,7 @@
         IVirtualComponent earComp = earComps[0];
         String earProjectName = earComp.getProject().getName();
         String earComponentName = earComp.getName();
-        getServiceProject2EARProject().getChoice().getList().setSelectionValue(earProjectName);
-        serviceEarComponentName_ = earComponentName;
+        serviceEarProjectName_ = earProjectName;        
         earIsSet = true;
       }
     }
@@ -481,8 +724,7 @@
           if (runtime != null && serviceIds_.getRuntimeId() != null && WebServiceRuntimeExtensionUtils.doesRuntimeSupportServerTarget(runtime.getRuntimeType().getId(), serviceIds_.getRuntimeId()) && serviceJ2EEVersion_.equals(String.valueOf(J2EEUtils.getJ2EEVersion(allEarComps[i]))))
           {
             String earProjectName = allEarComps[i].getProject().getName();
-            getServiceProject2EARProject().getChoice().getList().setSelectionValue(earProjectName);
-            serviceEarComponentName_ = allEarComps[i].getName();
+            serviceEarProjectName_ = earProjectName;
             earIsSet = true;
           }
 
@@ -493,12 +735,9 @@
     if (!earIsSet)
     {
         // there are no suitable existing EARs
-        getServiceProject2EARProject().getChoice().getList().setSelectionValue(ResourceUtils.getDefaultServiceEARProjectName());
-        serviceEarComponentName_ = ResourceUtils.getDefaultServiceEARComponentName();
+        serviceEarProjectName_ = ResourceUtils.getDefaultServiceEARProjectName();
     }
-  
-    
-    
+
     //Client side    
     String initialClientProjectName = getRuntime2ClientTypes().getChoice().getChoice().getList().getSelection(); 
     IProject initialClientProject = ProjectUtilities.getProject(initialClientProjectName);
@@ -527,9 +766,9 @@
         setClientEARComponentName(proxyEARProject.getName());
       }     
     }    
-  
+    
   }
-
+  */
   
 /*  
     private void setDefaultEARs() { 
@@ -644,17 +883,17 @@
     }        
   }
   */
-
+  /*
   private IStatus setDefaultServer()
   {
 	  IStatus status = Status.OK_STATUS;
     //Calculate reasonable default server based on the default project selection. 
 
-    String initialProjectName = getServiceProject2EARProject().getList().getSelection(); 
+    String initialProjectName = serviceProjectName_; 
     IProject initialProject = ProjectUtilities.getProject(initialProjectName);
     if (initialProject.exists())
     {
-      String[] serverInfo = ServerSelectionUtils.getServerInfoFromExistingProject(initialProject, serviceComponentName_, serviceIds_.getRuntimeId(), true);
+      String[] serverInfo = ServerSelectionUtils.getServerInfoFromExistingProject(initialProject, initialProject.getName(), serviceIds_.getRuntimeId(), true);
       if (serverInfo!=null)
       {
         if (serverInfo[0]!=null && serverInfo[0].length()>0)
@@ -670,11 +909,11 @@
     else //the project does not exist.
     {
       //Does the EAR exist?
-      String initialEARProjectName = getServiceProject2EARProject().getChoice().getList().getSelection();
+      String initialEARProjectName = serviceEarProjectName_;
       IProject initialEARProject = ProjectUtilities.getProject(initialEARProjectName);
       if (initialEARProject.exists())
       {
-        String[] serverInfo = ServerSelectionUtils.getServerInfoFromExistingProject(initialEARProject, serviceEarComponentName_, serviceIds_.getRuntimeId(), false);
+        String[] serverInfo = ServerSelectionUtils.getServerInfoFromExistingProject(initialEARProject, serviceEarProjectName_, serviceIds_.getRuntimeId(), false);
         if (serverInfo!=null)
         {
           if (serverInfo[0]!=null && serverInfo[0].length()>0)
@@ -757,25 +996,24 @@
     
     return status;
   }
-
+  */
   
+  /*
   private void updateServiceEARs()
   {
   	//Set EAR selection to null if the project/server defaults imply an EAR should not be created
-  	String serviceProjectName = getServiceProject2EARProject().getList().getSelection();
-  	IProject serviceProject = FileResourceUtils.getWorkspaceRoot().getProject(serviceProjectName);
+  	IProject serviceProject = FileResourceUtils.getWorkspaceRoot().getProject(serviceProjectName_);
   	if (serviceProject != null && serviceProject.exists())
   	{
   	  //Get the runtime target on the serviceProject
-  	  IRuntime serviceTarget = ServerSelectionUtils.getRuntimeTarget(serviceProjectName);
+  	  IRuntime serviceTarget = ServerSelectionUtils.getRuntimeTarget(serviceProjectName_);
   	  String j2eeVersion = String.valueOf(J2EEUtils.getJ2EEVersion(serviceProject));
   	  if (serviceTarget != null)
   	  {
   	  	if (!ServerUtils.isTargetValidForEAR(serviceTarget.getRuntimeType().getId(),j2eeVersion))
   	  	{
   	      //Default the EAR selection to be empty
-  	  	  getServiceProject2EARProject().getChoice().getList().setIndex(-1);
-          serviceEarComponentName_ = "";
+  	  	  serviceEarProjectName_="";
   	  	  serviceNeedEAR_ = false;
   	  	}
   	  		
@@ -793,8 +1031,7 @@
   		  if (!ServerUtils.isTargetValidForEAR(serverTargetId,serviceJ2EEVersion_))
   	  	  {
   	        //Default the EAR selection to be empty
-  	  	    getServiceProject2EARProject().getChoice().getList().setIndex(-1);
-            serviceEarComponentName_ = "";
+  	  	    serviceEarProjectName_ = "";
   	  	    serviceNeedEAR_ = false;
   	  	  }
   		}
@@ -803,6 +1040,7 @@
   	
   		
   }
+  */
   public void setInitialSelection(IStructuredSelection selection)
   {
   }
@@ -827,6 +1065,11 @@
     return serviceIds_; 
   }
 
+  public String getServiceRuntimeId()
+  {
+    return serviceRuntimeId_;
+  }
+  /*
   public SelectionListChoices getServiceProject2EARProject()
   {
     if (serviceProject2EARProject_ == null)
@@ -846,7 +1089,7 @@
     }
     return serviceProject2EARProject_; 
   }
-    
+  */  
   /**
    * @return Returns the generateProxy_.
    */
@@ -861,30 +1104,15 @@
   {
     this.generateProxy_ = generateProxy_;
   }
-
-  public String getServiceJ2EEVersion()
-  {
-    return serviceJ2EEVersion_;
-  }
   
   public String getServiceProjectName()
   {
-    return getServiceProject2EARProject().getList().getSelection();  
+    return serviceProjectName_;  
   }
   
   public String getServiceEarProjectName()
   {
-    return getServiceProject2EARProject().getChoice().getList().getSelection();
-  }
-  
-  public String getServiceComponentName()
-  {
-    return serviceComponentName_;
-  }
-  
-  public String getServiceEarComponentName()
-  {
-    return serviceEarComponentName_;
+    return serviceEarProjectName_;
   }
   
   public String getServiceComponentType()
diff --git a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ServerUtils.java b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ServerUtils.java
index d362d85..be8b034 100644
--- a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ServerUtils.java
+++ b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/common/ServerUtils.java
@@ -408,7 +408,7 @@
 	 * @return The web server module root URL or null if the project has no Web
 	 *         nature or has no association to a server instance.
 	 */
-	public static String getWebComponentURL(IProject project) {
+	public static String getWebComponentURL(IProject project, String serverFactoryId) {
 		String webProjectURL = null;
 		IModule module = getModule(project);
 		if (module != null) {
@@ -424,24 +424,38 @@
 				}
 			}
 			else {
-				IRuntime projectTarget = ServerCore.getProjectProperties(project).getRuntimeTarget();
-				if (projectTarget!=null)
+				//IRuntime projectTarget = ServerCore.getProjectProperties(project).getRuntimeTarget();
+                IServerType serverType = ServerCore.findServerType(serverFactoryId);               
+				if (serverType!=null)
 				{
-					String projectTargetId = projectTarget.getRuntimeType().getId();
-					String serverFactoryId = getFactoryIdFromRuntimeTargetId(projectTargetId);
-					IServerType serverType = ServerCore.findServerType(serverFactoryId);
 					try {
-						if (serverType!=null) {
-							IServerWorkingCopy serverWC = serverType.createServer(null, null, projectTarget, null);
-							IURLProvider urlProvider = (IURLProvider) serverWC.loadAdapter(IURLProvider.class, null);
-							if (urlProvider!=null) {
-								URL url = urlProvider.getModuleRootURL(module);							
-								if (url != null) {
-									String s = url.toString();
-									webProjectURL = (s.endsWith("/") ? s.substring(0, s.length() - 1) : s);
-								}				
-							}
-						}
+                        //Choose a Runtime which is not a stub
+                        IRuntime nonStubRuntime = null;
+                        IRuntime[] runtimes = ServerUtil.getRuntimes(null, null);
+                        String serverRuntimeTypeId = serverType.getRuntimeType().getId();
+                        for (int i = 0; i < runtimes.length; i++) {
+                            IRuntime runtime = runtimes[i];
+                            String thisRuntimeTypeId = runtime.getRuntimeType().getId();
+                            if (thisRuntimeTypeId.equals(serverRuntimeTypeId) && !runtime.isStub()) {
+                                //Found an appropriate IRuntime that is not a stub
+                                nonStubRuntime = runtime;
+                                break;
+                            }
+                        }
+                        
+                        if (nonStubRuntime != null)
+                        {
+					      IServerWorkingCopy serverWC = serverType.createServer(null, null, nonStubRuntime, null);
+						  IURLProvider urlProvider = (IURLProvider) serverWC.loadAdapter(IURLProvider.class, null);
+						  if (urlProvider!=null) {
+						     URL url = urlProvider.getModuleRootURL(module);							
+							 if (url != null) {
+								String s = url.toString();
+								webProjectURL = (s.endsWith("/") ? s.substring(0, s.length() - 1) : s);
+							 }				
+						  }
+                        }
+
 					} catch(CoreException ce){
                         Logger.getLogger().log(ce);
 					}
@@ -483,8 +497,8 @@
 		return webProjectURL;
 	}
 
-	public static String getEncodedWebComponentURL(IProject project) {
-		String url = getWebComponentURL(project);
+	public static String getEncodedWebComponentURL(IProject project, String serverFactoryId) {
+		String url = getWebComponentURL(project, serverFactoryId);
 		if (url != null) {
 			int index = url.lastIndexOf('/');
 			if (index != -1) {
diff --git a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/context/ScenarioDefaults.java b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/context/ScenarioDefaults.java
index a7aeb25..ef9fe96 100644
--- a/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/context/ScenarioDefaults.java
+++ b/bundles/org.eclipse.jst.ws/src/org/eclipse/jst/ws/internal/context/ScenarioDefaults.java
@@ -57,7 +57,7 @@
   
   public String webserviceTypeIdDefault()
   {
-    return "0/org.eclipse.jst.ws.type.java";
+    return "0/org.eclipse.jst.ws.wsImpl.java";
   }
   
   public boolean startWebserviceDefault()