diff --git a/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/LaunchUtils.java b/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/LaunchUtils.java
index 968dfc4..8f34451 100644
--- a/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/LaunchUtils.java
+++ b/bundles/org.eclipse.jst.ws.cxf.core/src/org/eclipse/jst/ws/internal/cxf/core/utils/LaunchUtils.java
@@ -27,7 +27,7 @@
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.jdt.launching.VMRunnerConfiguration;
 import org.eclipse.jst.ws.internal.cxf.core.CXFCorePlugin;
-import org.eclipse.jst.ws.internal.cxf.core.model.CXFContext;
+import org.eclipse.jst.ws.internal.cxf.core.model.CXFInstall;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
@@ -78,13 +78,15 @@
         return status;
     }
 
-    public static void launch(IJavaProject javaProject, String className, String[] programArgs)
-    throws CoreException {
+    public static void launch(IJavaProject javaProject, String className, String[] programArgs) throws CoreException {
         IVMInstall vmInstall = JavaRuntime.getVMInstall(javaProject);
         if (vmInstall == null) {
             vmInstall = JavaRuntime.getDefaultVMInstall();
         }
 
+        String installedVersion = CXFCorePlugin.getDefault().getCXFRuntimeVersion(javaProject.getProject());
+        CXFInstall cxfInstall = CXFCorePlugin.getDefault().getJava2WSContext().getInstallations().get(installedVersion);
+
         IVMRunner vmRunner = vmInstall.getVMRunner(ILaunchManager.RUN_MODE);
         String[] runtimeClasspath = JavaRuntime.computeDefaultRuntimeClassPath(javaProject);
         VMRunnerConfiguration vmRunnerConfiguration = new VMRunnerConfiguration(className, runtimeClasspath);
@@ -95,7 +97,7 @@
             IVMInstall2 install2 = (IVMInstall2) vmInstall;
             if (install2.getJavaVersion().compareTo(JavaCore.VERSION_1_6) > 0) {
                 vmRunnerConfiguration.setVMArguments(new String[] { "-Djava.endorsed.dirs=" //$NON-NLS-1$
-                        + CXFCorePlugin.getDefault().getJava2WSContext().getDefaultRuntimeLocation() });
+                        + cxfInstall.getLocation() });
             }
         }
 
@@ -113,19 +115,19 @@
         IProcess[] processes = launch.getProcesses();
 
         String outputStream = processes[0].getStreamsProxy().getOutputStreamMonitor().getContents();
-        logStream(outputStream);
+        logStream(outputStream, cxfInstall);
         String errorStream = processes[0].getStreamsProxy().getErrorStreamMonitor().getContents();
-        logStream(errorStream);
+        logStream(errorStream, cxfInstall);
 
         logErrorStreamContents(errorStream, className);
     }
 
-    private static void logStream(String outputStream) {
+    private static void logStream(String outputStream, CXFInstall cxfInstall) {
         if (!PlatformUI.isWorkbenchRunning()) {
             return;
         }
         try {
-            MessageConsole cxfConsole = getCXFConsole();
+            MessageConsole cxfConsole = getCXFConsole(cxfInstall);
             IWorkbench workbench = PlatformUI.getWorkbench();
             IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
             if (workbenchWindow != null) {
@@ -144,19 +146,18 @@
         }
     }
 
-    private static MessageConsole getCXFConsole() {
+    private static MessageConsole getCXFConsole(CXFInstall cxfInstall) {
         ConsolePlugin consolePlugin = ConsolePlugin.getDefault();
         IConsoleManager consoleManager = consolePlugin.getConsoleManager();
         IConsole[] existingConsoles = consoleManager.getConsoles();
-        CXFContext context = CXFCorePlugin.getDefault().getJava2WSContext();
         for (int i = 0; i < existingConsoles.length; i++) {
-            if (existingConsoles[i].getName().equals(context.getDefaultRuntimeType() + " "
-                    + context.getDefaultRuntimeVersion())) {
+            if (existingConsoles[i].getName().equals(cxfInstall.getType() + " "
+                    + cxfInstall.getVersion())) {
                 return (MessageConsole) existingConsoles[i];
             }
         }
-        MessageConsole cxfConsole = new MessageConsole(context.getDefaultRuntimeType() + " "
-                + context.getDefaultRuntimeVersion(),
+        MessageConsole cxfConsole = new MessageConsole(cxfInstall.getType() + " "
+                + cxfInstall.getVersion(),
                 CXFCorePlugin.imageDescriptorFromPlugin(CXFCorePlugin.PLUGIN_ID,
                 "icons/view16/console_view.gif")); //$NON-NLS-1$
         consoleManager.addConsoles(new IConsole[]{cxfConsole});
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUIMessages.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUIMessages.java
index 7bde138..9a1e548 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUIMessages.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUIMessages.java
@@ -28,7 +28,10 @@
     public static String CXF_RUNTIME_PREFERENCE_PAGE_DESCRIPTION_LABEL;
     public static String CXF_RUNTIME_PREFERENCE_PAGE_VERSION_COLUMN_NAME;
     public static String CXF_RUNTIME_PREFERENCE_PAGE_LOCATION_COLUMN_NAME;
-    public static String CXF_RUNTIME_PREFERENCE_PAGE_LOCATION_TYPE_NAME;
+    public static String CXF_RUNTIME_PREFERENCE_PAGE_TYPE_COLUMN_NAME;
+
+    public static String CXF_RUNTIME_PREFERENCE_PAGE_ENTER_TYPE_NAME;
+    public static String CXF_RUNTIME_PREFERENCE_PAGE_INVALID_TYPE_NAME;
 
     public static String CXF_PROPERTY_PAGE_RUNTIME_LABEL;
     public static String CXF_CONFIGURE_INSTALLED_RUNTIMES_LABEL;
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUImessages.properties b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUImessages.properties
index beeeee8..bf95fc3 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUImessages.properties
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/CXFUImessages.properties
@@ -24,8 +24,9 @@
 CXF_RUNTIME_PREFERENCE_PAGE_DESCRIPTION_LABEL=Add, remove or edit CXF runtimes. By default, the checked CXF runtime is added to the build path of a project when installing the CXF facet.
 CXF_RUNTIME_PREFERENCE_PAGE_VERSION_COLUMN_NAME=Version
 CXF_RUNTIME_PREFERENCE_PAGE_LOCATION_COLUMN_NAME=Location
-CXF_RUNTIME_PREFERENCE_PAGE_LOCATION_TYPE_NAME=Type
-
+CXF_RUNTIME_PREFERENCE_PAGE_TYPE_COLUMN_NAME=Type
+CXF_RUNTIME_PREFERENCE_PAGE_ENTER_TYPE_NAME=Enter type name
+CXF_RUNTIME_PREFERENCE_PAGE_INVALID_TYPE_NAME=Invalid type name: {0}
 CXF_PROPERTY_PAGE_RUNTIME_LABEL=CXF runtime:
 CXF_CONFIGURE_INSTALLED_RUNTIMES_LABEL=<A>Configure installed runtimes</A>
 
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java
index bd8a9be..c38f3c5 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/preferences/CXFRuntimePreferencePage.java
@@ -260,7 +260,7 @@
         });
 
         TableColumn typeColumn = typeViewerColumn.getColumn();
-        typeColumn.setText(CXFUIMessages.CXF_RUNTIME_PREFERENCE_PAGE_LOCATION_TYPE_NAME);
+        typeColumn.setText(CXFUIMessages.CXF_RUNTIME_PREFERENCE_PAGE_TYPE_COLUMN_NAME);
         typeColumn.pack();
 
         columnWeightData = new ColumnWeightData(50, 100, true);
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFFacetInstallWizardPage.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFFacetInstallWizardPage.java
index 7725dd6..10d266e 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFFacetInstallWizardPage.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFFacetInstallWizardPage.java
@@ -56,9 +56,11 @@
     public void transferStateToConfig() {
         StructuredSelection structuredSelection = (StructuredSelection) installationsComboViewer.getSelection();
         CXFInstall selectedInstall = (CXFInstall) structuredSelection.getFirstElement();
-        dataModel.setDefaultRuntimeVersion(selectedInstall.getVersion());
-        dataModel.setDefaultRuntimeLocation(selectedInstall.getLocation());
-        dataModel.setDefaultRuntimeType(selectedInstall.getType());
+        if (selectedInstall != null) {
+            dataModel.setDefaultRuntimeVersion(selectedInstall.getVersion());
+            dataModel.setDefaultRuntimeLocation(selectedInstall.getLocation());
+            dataModel.setDefaultRuntimeType(selectedInstall.getType());
+        }
     }
 
     public void createControl(Composite parent) {
@@ -134,6 +136,9 @@
         CXFInstall defaultInstall = cxfContext.getInstallations().get(intalledVersion);
         if (defaultInstall != null) {
             installationsComboViewer.setSelection(new StructuredSelection(defaultInstall), true);
+            setPageComplete(true);
+        } else {
+            setPageComplete(false);
         }
     }
 }
diff --git a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
index 644ba9c..3c78ddd 100644
--- a/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
+++ b/bundles/org.eclipse.jst.ws.cxf.ui/src/org/eclipse/jst/ws/internal/cxf/ui/wizards/CXFInstallWizardPage.java
@@ -20,9 +20,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
@@ -234,20 +231,16 @@
 
     private IStatus validateTypeName(String typeName) {
         if (typeName.trim().length() == 0) {
-            CXF_TYPE_STATUS = new Status(Status.ERROR, CXFUIPlugin.PLUGIN_ID, "Enter Type Name");
+            CXF_TYPE_STATUS = new Status(Status.ERROR, CXFUIPlugin.PLUGIN_ID, CXFUIMessages.CXF_RUNTIME_PREFERENCE_PAGE_ENTER_TYPE_NAME);
         } else {
             CXF_TYPE_STATUS = OK_STATUS;
         }
-        IWorkspace workspace = ResourcesPlugin.getWorkspace();
-        IStatus result = workspace.validateName(typeName, IResource.FOLDER);
-        if (!result.isOK()) {
-            return result;
+        if (!typeName.matches("[a-zA-Z0-9_\\-\\s]+")) {
+            CXF_TYPE_STATUS = new Status(Status.ERROR, CXFUIPlugin.PLUGIN_ID,
+                    CXFUIMessages.bind(CXFUIMessages.CXF_RUNTIME_PREFERENCE_PAGE_INVALID_TYPE_NAME, typeName));
+        } else {
+            CXF_TYPE_STATUS = OK_STATUS;
         }
-        //        if (!typeName.matches("[a-zA-Z0-9_\\-\\s]")) {
-        //            CXF_TYPE_STATUS = new Status(Status.ERROR, CXFUIPlugin.PLUGIN_ID, "Invalid type name");
-        //        } else {
-        //            CXF_TYPE_STATUS = OK_STATUS;
-        //        }
         return CXF_TYPE_STATUS;
     }
 
@@ -323,9 +316,9 @@
         CXFPersistentContext context = CXFCorePlugin.getDefault().getJava2WSContext();
         Map<String, CXFInstall> installs = context.getInstallations();
         CXFInstall install = CXFFactory.eINSTANCE.createCXFInstall();
-        install.setVersion(cxfVersionText.getText());
-        install.setLocation(cxfHomeDirText.getText());
-        install.setType(cxfTypeText.getText());
+        install.setVersion(cxfVersionText.getText().trim());
+        install.setLocation(cxfHomeDirText.getText().trim());
+        install.setType(cxfTypeText.getText().trim());
         installs.put(cxfRuntimeVersion, install);
         context.setInstallations(installs);
         if (isUpdateRequired(install)) {
