This commit was manufactured by cvs2svn to create branch 'R3_2_5_patches'.
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.classpath b/plugins/org.eclipse.wst.internet.monitor.ui/.classpath
new file mode 100644
index 0000000..acf166f
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="monitorui/"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.cvsignore b/plugins/org.eclipse.wst.internet.monitor.ui/.cvsignore
new file mode 100644
index 0000000..59f65bf
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.cvsignore
@@ -0,0 +1,8 @@
+bin
+monitorui.jar
+build.xml
+temp.folder
+org.eclipse.wst.internet.monitor.ui_3.0.0.jar
+@dot
+src.zip
+javaCompiler...args
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.options b/plugins/org.eclipse.wst.internet.monitor.ui/.options
new file mode 100644
index 0000000..6f0e9ee
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.options
@@ -0,0 +1,10 @@
+# Debugging options for the org.eclipse.wst.internet.monitor.ui plugin
+
+# Turn on general tracing
+org.eclipse.wst.internet.monitor.ui/debug=true
+
+# Tracing options
+org.eclipse.wst.internet.monitor.ui/config=false
+org.eclipse.wst.internet.monitor.ui/finest=false
+org.eclipse.wst.internet.monitor.ui/warning=false
+org.eclipse.wst.internet.monitor.ui/severe=false
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.project b/plugins/org.eclipse.wst.internet.monitor.ui/.project
new file mode 100644
index 0000000..c13081f
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.wst.internet.monitor.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature>
+	</natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..c8be432
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Fri Nov 10 17:11:35 HST 2006
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..2920850
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,77 @@
+#Thu Sep 13 15:25:06 EDT 2007
+eclipse.preferences.version=1
+instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.builder.duplicateResourceTask=error
+org.eclipse.jdt.core.builder.invalidClasspath=ignore
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
+org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=error
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.incompatibleJDKLevel=warning
+org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..3dffa25
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,3 @@
+#Fri Feb 23 21:16:28 EST 2007
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8"?>\n<templates/>
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.pde.prefs b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.pde.prefs
new file mode 100644
index 0000000..08a60e5
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,14 @@
+#Sat Apr 22 18:36:14 EDT 2006
+compilers.incompatible-environment=0
+compilers.p.build=0
+compilers.p.deprecated=1
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=2
+compilers.p.unknown-attribute=0
+compilers.p.unknown-class=0
+compilers.p.unknown-element=0
+compilers.p.unknown-resource=0
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.use-project=true
+eclipse.preferences.version=1
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f0c150e
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-SymbolicName: org.eclipse.wst.internet.monitor.ui; singleton:=true
+Bundle-Version: 1.0.407.qualifier
+Bundle-Activator: org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin
+Bundle-Vendor: %providerName
+Bundle-Localization: plugin
+Export-Package: org.eclipse.wst.internet.monitor.ui.internal;x-internal:=true,
+ org.eclipse.wst.internet.monitor.ui.internal.provisional;x-internal:=true,
+ org.eclipse.wst.internet.monitor.ui.internal.view;x-internal:=true,
+ org.eclipse.wst.internet.monitor.ui.internal.viewers;x-internal:=true
+Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.103,2.0.0)"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/about.html b/plugins/org.eclipse.wst.internet.monitor.ui/about.html
new file mode 100644
index 0000000..2199df3
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/about.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<HTML>
+
+<head>
+<title>About</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+
+<BODY lang="EN-US">
+
+<H3>About This Content</H3>
+
+<P>June, 2008</P>
+
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in 
+("Content"). Unless otherwise indicated below, the Content is provided to you 
+under the terms and conditions of the Eclipse Public License Version 1.0 
+("EPL"). A copy of the EPL is available at
+<A href="http://www.eclipse.org/org/documents/epl-v10.php">http://www.eclipse.org/org/documents/epl-v10.php</A>. 
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the 
+Content is being redistributed by another party ("Redistributor") and different 
+terms and conditions may apply to your use of any object code in the Content. 
+Check the Redistributor’s license that was provided with the Content. If no such 
+license exists, contact the Redistributor. Unless otherwise indicated below, the 
+terms and conditions of the EPL still apply to any source code in the Content 
+and such source code may be obtained at
+<A href="http://www.eclipse.org/">http://www.eclipse.org/</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/build.properties b/plugins/org.eclipse.wst.internet.monitor.ui/build.properties
new file mode 100644
index 0000000..1fddcd7
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/build.properties
@@ -0,0 +1,22 @@
+###############################################################################
+# Copyright (c) 2004, 2005 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+bin.includes = plugin.xml,\
+               .,\
+               plugin.properties,\
+               icons/,\
+               META-INF/,\
+               about.html
+bin.excludes = bin/**,\
+               @dot/**,\
+               temp.folder/**
+src.includes = schema/
+source.. = monitorui/
+output.. = bin/
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/clear.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/clear.gif
new file mode 100644
index 0000000..389954f
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/clear.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/httpHeader.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/httpHeader.gif
new file mode 100644
index 0000000..fb20c38
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/httpHeader.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/pin.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/pin.gif
new file mode 100644
index 0000000..ec50b70
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/pin.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/sortResponseTime.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/sortResponseTime.gif
new file mode 100644
index 0000000..e334e9f
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/clcl16/sortResponseTime.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/cview16/monitorView.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/cview16/monitorView.gif
new file mode 100644
index 0000000..c374f13
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/cview16/monitorView.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/clear.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/clear.gif
new file mode 100644
index 0000000..3bf98c0
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/clear.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/httpHeader.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/httpHeader.gif
new file mode 100644
index 0000000..6d71a8b
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/httpHeader.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/pin.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/pin.gif
new file mode 100644
index 0000000..61615d5
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/pin.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/sortResponseTime.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/sortResponseTime.gif
new file mode 100644
index 0000000..06e0c73
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/dlcl16/sortResponseTime.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/clear.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/clear.gif
new file mode 100644
index 0000000..389954f
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/clear.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/httpHeader.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/httpHeader.gif
new file mode 100644
index 0000000..fb20c38
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/httpHeader.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/pin.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/pin.gif
new file mode 100644
index 0000000..ec50b70
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/pin.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/resendRequest.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/resendRequest.gif
new file mode 100644
index 0000000..cf62b63
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/resendRequest.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/sortResponseTime.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/sortResponseTime.gif
new file mode 100644
index 0000000..e334e9f
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/elcl16/sortResponseTime.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/etool16/editRequest.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/etool16/editRequest.gif
new file mode 100644
index 0000000..d044e59
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/etool16/editRequest.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/eview16/monitorView.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/eview16/monitorView.gif
new file mode 100644
index 0000000..c374f13
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/eview16/monitorView.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/host.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/host.gif
new file mode 100644
index 0000000..b51ae39
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/host.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/monitorOff.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/monitorOff.gif
new file mode 100644
index 0000000..42e5f31
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/monitorOff.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/monitorOn.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/monitorOn.gif
new file mode 100644
index 0000000..2ff3974
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/monitorOn.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/tcp.gif b/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/tcp.gif
new file mode 100644
index 0000000..8a6e219
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/icons/obj16/tcp.gif
Binary files differ
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/ContextIds.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/ContextIds.java
new file mode 100644
index 0000000..df1d1c7
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/ContextIds.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+/**
+ * Constant ids for context help.
+ */
+public interface ContextIds {
+	public static final String VIEW = MonitorUIPlugin.PLUGIN_ID + ".tmvw0000";
+	public static final String VIEW_TREE = MonitorUIPlugin.PLUGIN_ID + ".tmvw0002";
+	public static final String VIEW_REQUEST = MonitorUIPlugin.PLUGIN_ID + ".tmvw0004";
+	public static final String VIEW_RESPONSE = MonitorUIPlugin.PLUGIN_ID + ".tmvw0006";
+
+	public static final String PREF = MonitorUIPlugin.PLUGIN_ID + ".tmpr0000";
+	public static final String PREF_SHOW = MonitorUIPlugin.PLUGIN_ID + ".tmpr0002";
+	public static final String PREF_MONITORS = MonitorUIPlugin.PLUGIN_ID + ".tmpr0004";
+	public static final String PREF_DIALOG = MonitorUIPlugin.PLUGIN_ID + ".tmpr0006";
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.java
new file mode 100644
index 0000000..29bd204
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.java
@@ -0,0 +1,68 @@
+/**********************************************************************
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * All rights reserved. This program and 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
+ *    Tianchao Li (Tianchao.Li@gmail.com) - Start monitors by default 
+ **********************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import org.eclipse.osgi.util.NLS;
+/**
+ * Translated messages.
+ */
+public class Messages extends NLS {
+	public static String editMonitor;
+	public static String newMonitor;
+	public static String localPort;
+	public static String remoteHost;
+	public static String remotePort;
+	public static String remoteGroup;
+	public static String connectionTimeout;
+	public static String autoStart;
+	public static String parseType;
+	public static String errorDialogTitle;
+	public static String preferenceDescription;
+	public static String prefShowView;
+	public static String monitorList;
+	public static String columnStatus;
+	public static String columnRemote;
+	public static String columnType;
+	public static String columnLocal;
+	public static String columnAutoStart;
+	public static String add;
+	public static String edit;
+	public static String remove;
+	public static String start;
+	public static String stop;
+	public static String started;
+	public static String stopped;
+	public static String headerLabel;
+	public static String imageViewInvalid;
+	public static String xmlViewInvalid;
+	public static String htmlViewInvalid;
+	public static String viewDateFormat;
+	public static String viewTime;
+	public static String viewResponseTime;
+	public static String viewType;
+	public static String viewResponseTimeFormat;
+	public static String viewSize;
+	public static String viewResponse;
+	public static String viewRequest;
+	public static String actionSortByResponseTime;
+	public static String viewSizeFormat;
+	public static String actionClearToolTip;
+	public static String actionShowHeader;
+	public static String actionPin;
+	public static String actionProperties;
+	public static String yes;
+	public static String no;
+
+	static {
+		NLS.initializeMessages(MonitorUIPlugin.PLUGIN_ID + ".internal.Messages", Messages.class);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.properties b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.properties
new file mode 100644
index 0000000..601417d
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Messages.properties
@@ -0,0 +1,78 @@
+###############################################################################
+# Copyright (c) 2005, 2008 IBM Corporation and others.
+# All rights reserved. This program and 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
+#     Tianchao Li (Tianchao.Li@gmail.com) - Start monitors by default 
+###############################################################################
+
+# --------------- TCP/IP Monitor view ---------------
+
+# Labels
+viewRequest=Request: {0}
+viewResponse=Response: {0}
+viewTime=Time of request: {0}
+viewType=Type: {0}
+viewResponseTime=Response Time: {0}
+viewSize=Size: {0}
+viewResponseTimeFormat={0} ms
+viewSizeFormat={0} ({1}) bytes
+
+# The following string allows you to change the time format of the TCP/IP monitor
+# view. It uses the formatting options found in java.text.SimpleDateFormat:
+#   k - hour in day, h - hour in am/pm, m - minute, s - second, S - millisecond,
+#   a - am/pm marker. use duplicate chars (e.g. 'mm') to fill with zeros (i.e. 
+#   '01' instead of '1')
+viewDateFormat=h:mm.s.S a
+
+# Actions
+actionSortByResponseTime=Sort By Response Time
+actionClearToolTip=Clear
+actionShowHeader=Show Header
+actionPin=Pin Selection
+actionProperties=Properties
+
+
+# --------------- RequestResponse Viewers ---------------
+headerLabel=Header: {0}
+imageViewInvalid=<Not a valid image file>
+xmlViewInvalid=<Not a valid XML file>
+htmlViewInvalid=<Not a valid HTML file>
+
+# --------------- Errors ---------------
+errorDialogTitle=Error
+
+# --------------- General UI ---------------
+monitorList=TCP/IP &Monitors:
+columnLocal=Local Port
+columnRemote=Host name
+columnType=Type
+columnStatus=Status
+columnAutoStart=Auto-start
+add=&Add...
+edit=&Edit...
+remove=&Remove
+start=&Start
+stop=S&top
+started=Started
+stopped=Stopped
+yes=Yes
+no=No
+
+newMonitor=New Monitor
+editMonitor=Edit Monitor
+
+localPort=&Local monitoring port:
+remoteGroup=Monitor
+remoteHost=&Host name:
+remotePort=&Port:
+parseType=&Type:
+autoStart=&Start monitor automatically
+connectionTimeout=T&imeout (in milliseconds):
+
+preferenceDescription=Configure TCP/IP monitors on local and remote ports.
+prefShowView=S&how the TCP/IP Monitor view when there is activity
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorContentProvider.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorContentProvider.java
new file mode 100644
index 0000000..e87b3cb
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorContentProvider.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.MonitorCore;
+/**
+ * Monitor content provider.
+ */
+public class MonitorContentProvider implements IStructuredContentProvider {
+	/**
+	 * MonitorContentProvider constructor comment.
+	 */
+	public MonitorContentProvider() {
+		super();
+	}
+
+	/*
+	 * Disposes of this content provider.  
+	 */
+	public void dispose() {
+		// do nothing
+	}
+
+	/*
+	 * Returns the elements to display in the viewer 
+	 * when its input is set to the given element. 
+	 */
+	public Object[] getElements(Object inputElement) {
+		return MonitorCore.getMonitors();
+	}
+
+	/*
+	 * Notifies this content provider that the given viewer's input
+	 * has been switched to a different element.
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		// do nothing
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorDialog.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorDialog.java
new file mode 100644
index 0000000..b4ba878
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorDialog.java
@@ -0,0 +1,301 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *     Tianchao Li (Tianchao.Li@gmail.com) - Start monitors by default 
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.internet.monitor.core.internal.IProtocolAdapter;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.IMonitor;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.IMonitorWorkingCopy;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.MonitorCore;
+/**
+ * 
+ */
+public class MonitorDialog extends Dialog {
+	protected IMonitorWorkingCopy monitor;
+	protected boolean isEdit;
+
+	private Button okButton;
+	private Spinner monitorPort;
+	private Label validateLabel;
+
+	interface StringModifyListener {
+		public void valueChanged(String s);
+	}
+
+	interface BooleanModifyListener {
+		public void valueChanged(boolean b);
+	}
+
+	interface TypeModifyListener {
+		public void valueChanged(IProtocolAdapter type);
+	}
+
+	interface IntModifyListener {
+		public void valueChanged(int i);
+	}
+
+	/**
+	 * Create a new monitor dialog.
+	 * 
+	 * @param parentShell
+	 * @param monitor
+	 */
+	public MonitorDialog(Shell parentShell, IMonitorWorkingCopy monitor) {
+		super(parentShell);
+		this.monitor = monitor;
+		isEdit = true;
+	}
+	
+	public MonitorDialog(Shell parentShell) {
+		super(parentShell);
+		monitor = MonitorCore.createMonitor();
+		isEdit = false;
+	}
+	
+	protected void configureShell(Shell shell) {
+		super.configureShell(shell);
+		if (isEdit)
+			shell.setText(Messages.editMonitor);
+		else
+			shell.setText(Messages.newMonitor);
+	}
+
+	protected Button createCheckBox(Composite comp, String txt, boolean selected, final BooleanModifyListener listener) {
+		final Button button = new Button(comp, SWT.CHECK);
+		button.setText(txt);
+		button.setSelection(selected);
+		button.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER));
+		if (listener != null)
+			button.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					listener.valueChanged(button.getSelection());
+				}
+			});
+		return button;
+	}
+
+	protected Label createLabel(Composite comp, String txt) {
+		Label label = new Label(comp, SWT.NONE);
+		label.setText(txt);
+		label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_CENTER));
+		return label;
+	}
+	
+	protected Text createText(Composite comp, String txt, final StringModifyListener listener) {
+		final Text text = new Text(comp, SWT.BORDER);
+		if (txt != null)
+			text.setText(txt);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
+		data.widthHint = 150;
+		text.setLayoutData(data);
+		if (listener != null)
+			text.addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {	
+					listener.valueChanged(text.getText());
+				}
+			});
+		return text;
+	}
+
+	protected Spinner createSpinner(Composite comp, int v, final IntModifyListener listener) {
+		final Spinner s = new Spinner(comp, SWT.BORDER);
+		s.setMinimum(0);
+		s.setMaximum(Integer.MAX_VALUE);
+		if (v != -1)
+			s.setSelection(v);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER);
+		data.widthHint = 150;
+		s.setLayoutData(data);
+		if (listener != null)
+			s.addModifyListener(new ModifyListener() {
+				public void modifyText(ModifyEvent e) {	
+					listener.valueChanged(s.getSelection());
+				}
+			});
+		return s;
+	}
+
+	protected Combo createTypeCombo(Composite comp, final String[] types, String sel, final StringModifyListener listener) {
+		final Combo combo = new Combo(comp, SWT.DROP_DOWN | SWT.READ_ONLY);
+		int size = types.length;
+		String[] items = new String[size];
+		int index = -1;
+		for (int i = 0; i < size; i++) {
+			items[i] = types[i];
+			if (types[i].equals(sel))
+				index = i;
+		}
+		combo.setItems(items);
+		if (index >= 0)
+			combo.select(index);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER);
+		data.widthHint = 150;
+		combo.setLayoutData(data);
+		if (listener != null)
+			combo.addSelectionListener(new SelectionListener() {
+				public void widgetSelected(SelectionEvent e) {	
+					listener.valueChanged(types[combo.getSelectionIndex()]);
+				}
+				public void widgetDefaultSelected(SelectionEvent e) {
+					widgetSelected(e);
+				}
+			});
+		return combo;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+	 */
+	protected Control createDialogArea(Composite parent) {
+		Composite composite = (Composite) super.createDialogArea(parent);
+		((GridLayout)composite.getLayout()).numColumns = 2;
+		
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.PREF_DIALOG);
+		
+		createLabel(composite, Messages.localPort);
+		monitorPort = createSpinner(composite, monitor.getLocalPort(), new IntModifyListener() {
+			public void valueChanged(int i) {
+				try {
+					monitor.setLocalPort(i);
+				} catch (Exception e) {
+					// ignore
+				}
+				validateFields();
+			}
+		});
+		
+		Group group = new Group(composite, SWT.NONE);
+		GridLayout layout = new GridLayout(2, false);
+		group.setLayout(layout);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL);
+		data.horizontalSpan = 2;
+		group.setLayoutData(data);
+		group.setText(Messages.remoteGroup);
+		
+		createLabel(group, Messages.remoteHost);
+		createText(group, monitor.getRemoteHost(), new StringModifyListener() {
+			public void valueChanged(String s) {
+				monitor.setRemoteHost(s);
+				validateFields();
+			}
+		});
+		
+		createLabel(group, Messages.remotePort);
+		createSpinner(group, monitor.getRemotePort(), new IntModifyListener() {
+			public void valueChanged(int i) {
+				try {
+					monitor.setRemotePort(i);
+				} catch (Exception e) {
+					// ignore
+				}
+				validateFields();
+			}
+		});
+		
+		createLabel(group, Messages.parseType);
+		createTypeCombo(group, new String[] {"TCP/IP","HTTP"}, monitor.getProtocol(), new StringModifyListener() {
+			public void valueChanged(String protocolId) {
+				monitor.setProtocol(protocolId);
+			}
+		});
+		
+		createLabel(group, Messages.connectionTimeout);
+		createSpinner(group, monitor.getTimeout(), new IntModifyListener() {
+			public void valueChanged(int i) {
+				monitor.setTimeout(i);
+				validateFields();
+			}
+		});
+		
+		createLabel(group, "");
+		createCheckBox(group, Messages.autoStart, monitor.isAutoStart(), new BooleanModifyListener() {
+			public void valueChanged(boolean b) {
+				monitor.setAutoStart(b);
+			}
+		});
+		
+		validateLabel = createLabel(composite, "");
+		validateLabel.setForeground(composite.getDisplay().getSystemColor(SWT.COLOR_RED));
+		
+		return composite;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+	 */
+	protected void okPressed() {
+		IMonitor savedMonitor = null;
+		try {
+			savedMonitor = monitor.save();
+		} catch (CoreException ce) {
+			ErrorDialog.openError(getShell(), Messages.errorDialogTitle, ce.getLocalizedMessage(), ce.getStatus());
+			return;
+		}
+		if (savedMonitor != null && savedMonitor.isAutoStart())
+			try {
+				savedMonitor.start();
+			} catch (CoreException ce) {
+				ErrorDialog.openError(getShell(), Messages.errorDialogTitle, ce.getLocalizedMessage(), ce.getStatus());
+			}
+		super.okPressed();
+	}
+
+	protected Control createButtonBar(Composite parent) {
+		Control buttonControl = super.createButtonBar(parent);
+		validateFields();
+		return buttonControl;
+	}
+
+	private void setOKButtonEnabled(boolean curIsEnabled) {
+		if (okButton == null)
+			okButton = getButton(IDialogConstants.OK_ID);
+		
+		if (okButton != null)
+			okButton.setEnabled(curIsEnabled);
+	}
+
+	protected void validateFields() {
+		if (monitorPort == null)
+			return;
+		
+		boolean result = true;
+		IStatus status = monitor.validate();
+		if (!status.isOK()) {
+			if (monitor.getRemoteHost() == null || monitor.getRemoteHost().length() < 1)
+				validateLabel.setText("");
+			else
+				validateLabel.setText(status.getMessage());
+			result = false;
+		} else
+			validateLabel.setText("");
+		
+		setOKButtonEnabled(result);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorPreferencePage.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorPreferencePage.java
new file mode 100644
index 0000000..c027481
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorPreferencePage.java
@@ -0,0 +1,351 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * All rights reserved. This program and 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
+ *     Tianchao Li (Tianchao.Li@gmail.com) - Start monitors by default 
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.eclipse.swt.*;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.IMonitor;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.IMonitorWorkingCopy;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.MonitorCore;
+/**
+ * The preference page that holds monitor properties.
+ */
+public class MonitorPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+	protected Button displayButton;
+	
+	protected Table table;
+	protected TableViewer tableViewer;
+	
+	protected Button edit;
+	protected Button remove;
+	protected Button start;
+	protected Button stop;
+	
+	protected List<Object> selection2;
+
+	/**
+	 * MonitorPreferencePage constructor comment.
+	 */
+	public MonitorPreferencePage() {
+		super();
+		noDefaultAndApplyButton();
+	}
+
+	/**
+	 * Create the preference options.
+	 *
+	 * @param parent org.eclipse.swt.widgets.Composite
+	 * @return org.eclipse.swt.widgets.Control
+	 */
+	protected Control createContents(Composite parent) {
+		initializeDialogUnits(parent);
+		
+		Composite composite = new Composite(parent, SWT.NONE);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.horizontalSpacing = convertHorizontalDLUsToPixels(4);
+		layout.verticalSpacing = convertVerticalDLUsToPixels(3);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		composite.setLayout(layout);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
+		composite.setLayoutData(data);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ContextIds.PREF);
+		
+		Label label = new Label(composite, SWT.WRAP);
+		label.setText(Messages.preferenceDescription);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+		data.horizontalSpan = 2;
+		label.setLayoutData(data);
+	
+		displayButton = new Button(composite, SWT.CHECK);
+		displayButton.setText(Messages.prefShowView);
+		displayButton.setSelection(MonitorUIPlugin.getShowOnActivityPreference());
+		data = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+		data.horizontalSpan = 2;
+		data.verticalIndent = 8;
+		displayButton.setLayoutData(data);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(displayButton, ContextIds.PREF_SHOW);
+		
+		label = new Label(composite, SWT.WRAP);
+		label.setText(Messages.monitorList);
+		data = new GridData(GridData.FILL_HORIZONTAL);
+		data.horizontalSpan = 2;
+		data.verticalIndent = 8;
+		label.setLayoutData(data);
+		
+		table = new Table(composite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.FULL_SELECTION);
+		data = new GridData(GridData.FILL_BOTH);
+		data.widthHint = 350;
+		table.setLayoutData(data);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(table, ContextIds.PREF_MONITORS);
+		
+		table.setHeaderVisible(true);
+		table.setLinesVisible(true);
+		
+		TableLayout tableLayout = new TableLayout();
+		
+		TableColumn statusColumn = new TableColumn(table, SWT.NONE);
+		statusColumn.setText(Messages.columnStatus);
+		ColumnWeightData colData = new ColumnWeightData(6, 60, true);
+		tableLayout.addColumnData(colData);
+		
+		TableColumn remoteColumn = new TableColumn(table, SWT.NONE);
+		remoteColumn.setText(Messages.columnRemote);
+		colData = new ColumnWeightData(12, 120, true);
+		tableLayout.addColumnData(colData);
+		
+		TableColumn httpColumn = new TableColumn(table, SWT.NONE);
+		httpColumn.setText(Messages.columnType);
+		colData = new ColumnWeightData(5, 50, true);
+		tableLayout.addColumnData(colData);
+		
+		TableColumn localColumn = new TableColumn(table, SWT.NONE);
+		localColumn.setText(Messages.columnLocal);
+		colData = new ColumnWeightData(6, 60, true);
+		tableLayout.addColumnData(colData);
+		
+		TableColumn startOnStartupColumn = new TableColumn(table, SWT.NONE);
+		startOnStartupColumn.setText(Messages.columnAutoStart);
+		colData = new ColumnWeightData(7, 70, true);
+		tableLayout.addColumnData(colData);
+		
+		table.setLayout(tableLayout);
+		
+		tableViewer = new TableViewer(table);
+		tableViewer.setContentProvider(new MonitorContentProvider());
+		tableViewer.setLabelProvider(new MonitorTableLabelProvider());
+		tableViewer.setInput("root");
+		
+		tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				setSelection(event.getSelection());
+			}
+		});
+		
+		Composite buttonComp = new Composite(composite, SWT.NONE);
+		layout = new GridLayout();
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = convertVerticalDLUsToPixels(3);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		layout.numColumns = 1;
+		buttonComp.setLayout(layout);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.VERTICAL_ALIGN_FILL);
+		buttonComp.setLayoutData(data);
+		
+		Button add = SWTUtil.createButton(buttonComp, Messages.add);
+		add.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				MonitorDialog dialog = new MonitorDialog(getShell());
+				if (dialog.open() == Window.CANCEL)
+					return;
+				tableViewer.refresh();
+				
+				IMonitor[] monitors = MonitorCore.getMonitors();
+				Object monitor = monitors[monitors.length - 1];
+				tableViewer.setSelection(new StructuredSelection(monitor));
+			}
+		});		
+		
+		edit = SWTUtil.createButton(buttonComp, Messages.edit);
+		edit.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				IMonitor monitor = (IMonitor) getSelection().get(0);
+				IMonitorWorkingCopy wc = monitor.createWorkingCopy();
+				
+				MonitorDialog dialog = new MonitorDialog(getShell(), wc);
+				if (dialog.open() != Window.CANCEL) {
+					try {
+						tableViewer.refresh(wc.save());
+					} catch (Exception ex) {
+						// ignore
+					}
+				}
+			}
+		});
+		edit.setEnabled(false);
+		
+		remove = SWTUtil.createButton(buttonComp, Messages.remove);
+		remove.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				Iterator iterator = getSelection().iterator();
+				while (iterator.hasNext()) {
+					IMonitor monitor = (IMonitor) iterator.next();
+					try {
+						monitor.delete();
+					} catch (Exception ex) {
+						// ignore
+					}
+					tableViewer.remove(monitor);
+					
+					IMonitor[] monitors = MonitorCore.getMonitors();
+					if (monitors.length > 0) {
+						Object monitor2 = monitors[monitors.length - 1];
+						tableViewer.setSelection(new StructuredSelection(monitor2));
+					}
+				}
+			}
+		});
+		remove.setEnabled(false);
+		
+		start = SWTUtil.createButton(buttonComp, Messages.start);
+		data = (GridData) start.getLayoutData();
+		data.verticalIndent = 9;
+		start.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				Iterator iterator = getSelection().iterator();
+				while (iterator.hasNext()) {
+					IMonitor monitor = (IMonitor) iterator.next();
+					try {
+						monitor.start();
+					} catch (CoreException ce) {
+						MessageDialog.openError(getShell(), Messages.errorDialogTitle, ce.getStatus().getMessage());
+					} catch (Exception ce) {
+						MessageDialog.openError(getShell(), Messages.errorDialogTitle, ce.getMessage());
+					}
+					tableViewer.refresh(monitor, true);
+				}
+				tableViewer.setSelection(tableViewer.getSelection());
+			}
+		});
+		start.setEnabled(false);
+		
+		stop = SWTUtil.createButton(buttonComp, Messages.stop);
+		stop.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				Iterator iterator = getSelection().iterator();
+				while (iterator.hasNext()) {
+					IMonitor monitor = (IMonitor) iterator.next();
+					try {
+						monitor.stop();
+					} catch (Exception ex) {
+						// ignore
+					}
+					tableViewer.refresh(monitor, true);
+				}
+				tableViewer.setSelection(tableViewer.getSelection());
+			}
+		});
+		stop.setEnabled(false);
+		
+		Dialog.applyDialogFont(composite);
+	
+		return composite;
+	}
+
+	/**
+	 * Initializes this preference page using the passed workbench.
+	 *
+	 * @param workbench the current workbench
+	 */
+	public void init(IWorkbench workbench) {
+		// do nothing
+	}
+
+	/**
+	 * Performs special processing when this page's Defaults button has been pressed.
+	 * <p>
+	 * This is a framework hook method for subclasses to do special things when
+	 * the Defaults button has been pressed.
+	 * Subclasses may override, but should call <code>super.performDefaults</code>.
+	 * </p>
+	 */
+	protected void performDefaults() {
+		displayButton.setSelection(MonitorUIPlugin.getDefaultShowOnActivityPreference());
+		super.performDefaults();
+	}
+
+	/** 
+	 * @see org.eclipse.jface.preference.IPreferencePage#performOk()
+	 */
+	public boolean performOk() {
+		MonitorUIPlugin.setShowOnActivityPreference(displayButton.getSelection());
+		MonitorUIPlugin.getInstance().savePluginPreferences();
+		return true;
+	}
+	
+	protected List getSelection() {
+		return selection2;
+	}
+
+	protected void setSelection(ISelection sel2) {
+		IStructuredSelection sel = (IStructuredSelection) sel2;
+		Iterator iterator = sel.iterator();
+		selection2 = new ArrayList<Object>();
+		
+		while (iterator.hasNext()) {
+			Object obj = iterator.next();
+			if (obj instanceof IMonitor)
+				selection2.add(obj);
+		}
+		
+		if (!selection2.isEmpty()) {
+			remove.setEnabled(true);
+			
+			boolean allStopped = true;
+			boolean allStarted = true;
+			
+			iterator = selection2.iterator();
+			while (iterator.hasNext()) {
+				IMonitor monitor = (IMonitor) iterator.next();
+				if (monitor.isRunning())
+					allStopped = false;
+				else
+					allStarted = false;
+			}
+			start.setEnabled(allStopped);
+			stop.setEnabled(allStarted);
+			edit.setEnabled(selection2.size() == 1 && allStopped);
+		} else {
+			edit.setEnabled(false);
+			remove.setEnabled(false);
+			start.setEnabled(false);
+			stop.setEnabled(false);
+		}
+	}
+	
+	/**
+	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), ContextIds.PREF);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorTableLabelProvider.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorTableLabelProvider.java
new file mode 100644
index 0000000..b875325
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorTableLabelProvider.java
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *     Tianchao Li (Tianchao.Li@gmail.com) - Start monitors by default 
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import org.eclipse.jface.viewers.ILabelProviderListener;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.IMonitor;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+/**
+ * Monitor table label provider.
+ */
+public class MonitorTableLabelProvider implements ITableLabelProvider {
+	/**
+	 * MonitorTableLabelProvider constructor comment.
+	 */
+	public MonitorTableLabelProvider() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void addListener(ILabelProviderListener listener) {
+		// do nothing
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
+	 */
+	public void dispose() {
+		// do nothing
+	}
+
+	/**
+	 * @see ITableLabelProvider#getColumnImage(Object, int)
+	 */
+	public Image getColumnImage(Object element, int columnIndex) {
+		if (columnIndex == 0) {
+			IMonitor monitor = (IMonitor) element;
+			if (monitor.isRunning())
+				return MonitorUIPlugin.getImage(MonitorUIPlugin.IMG_MONITOR_ON);
+			return MonitorUIPlugin.getImage(MonitorUIPlugin.IMG_MONITOR_OFF);
+		}
+		return null;
+	}
+
+	/**
+	 * @see ITableLabelProvider#getColumnText(Object, int)
+	 */
+	public String getColumnText(Object element, int columnIndex) {
+		IMonitor monitor = (IMonitor) element;
+		if (columnIndex == 0) {
+			if (monitor.isRunning())
+				return Messages.started;
+			return Messages.stopped;
+		} else if (columnIndex == 1)
+			return monitor.getRemoteHost() + ":" + monitor.getRemotePort();
+		else if (columnIndex == 2)
+			return monitor.getProtocol();
+		else if (columnIndex == 3)
+			return monitor.getLocalPort() + "";
+		else if (columnIndex == 4) {
+			if (monitor.isAutoStart())
+				return Messages.yes;
+			return Messages.no;
+		} else
+			return "X";
+	}
+
+	protected String notNull(String s) {
+		if (s == null)
+			return "";
+		
+		return s;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(Object, String)
+	 */
+	public boolean isLabelProperty(Object element, String property) {
+		return false;
+	}
+
+	/**
+	 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
+	 */
+	public void removeListener(ILabelProviderListener listener) {
+		// do nothing
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java
new file mode 100644
index 0000000..d292295
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java
@@ -0,0 +1,356 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.*;
+import java.util.zip.GZIPInputStream;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.osgi.service.debug.DebugOptions;
+import org.eclipse.osgi.service.debug.DebugOptionsListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.*;
+import org.eclipse.wst.internet.monitor.ui.internal.view.MonitorView;
+import org.osgi.framework.BundleContext;
+/**
+ * The TCP/IP monitor UI plugin.
+ */
+public class MonitorUIPlugin extends AbstractUIPlugin {
+	public static final String PLUGIN_ID = "org.eclipse.wst.internet.monitor.ui";
+	
+	private static final byte[] BUFFER = new byte[4096];
+
+	private static MonitorUIPlugin singleton;
+
+	protected Map<String, ImageDescriptor> imageDescriptors = new HashMap<String, ImageDescriptor>();
+
+	private static final String lineSeparator = System.getProperty("line.separator");
+
+	private static URL ICON_BASE_URL;
+	private static final String URL_CLCL = "clcl16/";
+	private static final String URL_ELCL = "elcl16/";
+	private static final String URL_DLCL = "dlcl16/";
+	private static final String URL_OBJ = "obj16/";
+
+	public static final String IMG_ELCL_SORT_RESPONSE_TIME = "IMG_ELCL_SORT_RESPONSE_TIME";
+	public static final String IMG_ELCL_CLEAR = "IMG_ELCL_CLEAR";
+	public static final String IMG_ELCL_HTTP_HEADER = "IMG_ELCL_HTTP_HEADER";
+	public static final String IMG_ELCL_PIN = "IMG_ELCL_PIN";
+	public static final String IMG_CLCL_SORT_RESPONSE_TIME = "IMG_CLCL_SORT_RESPONSE_TIME";
+	public static final String IMG_CLCL_CLEAR = "IMG_CLCL_CLEAR";
+	public static final String IMG_CLCL_HTTP_HEADER = "IMG_CLCL_HTTP_HEADER";
+	public static final String IMG_CLCL_PIN = "IMG_CLCL_PIN";
+	public static final String IMG_DLCL_SORT_RESPONSE_TIME = "IMG_DLCL_SORT_RESPONSE_TIME";
+	public static final String IMG_DLCL_CLEAR = "IMG_DLCL_CLEAR";
+	public static final String IMG_DLCL_HTTP_HEADER = "IMG_DLCL_HTTP_HEADER";
+	public static final String IMG_DLCL_PIN = "IMG_DLCL_PIN";
+
+	public static final String IMG_REQUEST_RESPONSE = "requestResponse";
+	public static final String IMG_RESEND_REQUEST_RESPONSE = "resendRequestResponse";
+
+	public static final String IMG_HOST = "host";
+	public static final String IMG_MONITOR_ON = "monitorOn";
+	public static final String IMG_MONITOR_OFF = "monitorOff";
+
+	private static final String SHOW_VIEW_ON_ACTIVITY = "show-view";
+	private static final String PIN_VIEW = "pin-view";
+	private static final String SHOW_HEADER = "show-header";
+
+	protected List<Request> requests = new ArrayList<Request>();
+
+	protected IMonitorListener monitorListener = new IMonitorListener() {
+		public void monitorAdded(IMonitor monitor) {
+			monitor.addRequestListener(requestListener);
+		}
+
+		public void monitorChanged(IMonitor monitor) {
+			// ignore
+		}
+
+		public void monitorRemoved(IMonitor monitor) {
+			monitor.removeRequestListener(requestListener);
+		}
+	};
+
+	protected IRequestListener requestListener = new IRequestListener() {
+		public void requestAdded(IMonitor monitor, Request request) {
+			addRequest(request);
+			
+			if (MonitorView.view != null)
+				MonitorView.view.doRequestAdded(request);
+			else if (MonitorUIPlugin.getShowOnActivityPreference())
+				MonitorView.open(request);
+		}
+
+		public void requestChanged(IMonitor monitor, Request request) {
+			if (MonitorView.view != null)
+				MonitorView.view.doRequestChanged(request);
+		}
+	};
+
+	/**
+	 * MonitorUIPlugin constructor comment.
+	 */
+	public MonitorUIPlugin() {
+		super();
+		singleton = this;
+	}
+
+	/**
+	 * Creates and pre-loads the image registry.
+	 * 
+	 * @return ImageRegistry
+	 */
+	protected ImageRegistry createImageRegistry() {
+		ImageRegistry registry = super.createImageRegistry();
+		
+		registerImage(registry, IMG_REQUEST_RESPONSE, URL_OBJ + "tcp.gif");
+		registerImage(registry, IMG_RESEND_REQUEST_RESPONSE, URL_ELCL + "resendRequest.gif");
+		
+		registerImage(registry, IMG_HOST, URL_OBJ + "host.gif");
+		registerImage(registry, IMG_MONITOR_ON, URL_OBJ + "monitorOn.gif");
+		registerImage(registry, IMG_MONITOR_OFF, URL_OBJ + "monitorOff.gif");
+		
+		registerImage(registry, IMG_CLCL_CLEAR, URL_CLCL + "clear.gif");
+		registerImage(registry, IMG_CLCL_SORT_RESPONSE_TIME, URL_CLCL + "sortResponseTime.gif");
+		registerImage(registry, IMG_CLCL_HTTP_HEADER, URL_CLCL + "httpHeader.gif");
+		registerImage(registry, IMG_CLCL_PIN, URL_CLCL + "pin.gif");
+		
+		registerImage(registry, IMG_ELCL_CLEAR, URL_ELCL + "clear.gif");
+		registerImage(registry, IMG_ELCL_SORT_RESPONSE_TIME, URL_ELCL + "sortResponseTime.gif");
+		registerImage(registry, IMG_ELCL_HTTP_HEADER, URL_ELCL + "httpHeader.gif");
+		registerImage(registry, IMG_ELCL_PIN, URL_ELCL + "pin.gif");
+		
+		registerImage(registry, IMG_DLCL_CLEAR, URL_DLCL + "clear.gif");
+		registerImage(registry, IMG_DLCL_SORT_RESPONSE_TIME, URL_DLCL + "sortResponseTime.gif");
+		registerImage(registry, IMG_DLCL_HTTP_HEADER, URL_DLCL + "httpHeader.gif");
+		registerImage(registry, IMG_DLCL_PIN, URL_DLCL + "pin.gif");
+		
+		return registry;
+	}
+
+	/**
+	 * Return the image with the given key from the image registry.
+	 * 
+	 * @param key the key
+	 * @return the image
+	 */
+	public static Image getImage(String key) {
+		return getInstance().getImageRegistry().get(key);
+	}
+
+	/**
+	 * Return the image with the given key from the image registry.
+	 * 
+	 * @param key the key
+	 * @return an image descriptor
+	 */
+	public static ImageDescriptor getImageDescriptor(String key) {
+		try {
+			getInstance().getImageRegistry();
+			return getInstance().imageDescriptors.get(key);
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	/**
+	 * Returns the singleton instance of this plugin.
+	 * 
+	 * @return the plugin
+	 */
+	public static MonitorUIPlugin getInstance() {
+		return singleton;
+	}
+
+	/**
+	 * Register an image with the registry.
+	 * 
+	 * @param key the key
+	 * @param partialURL
+	 */
+	private void registerImage(ImageRegistry registry, String key, String partialURL) {
+		if (ICON_BASE_URL == null) {
+			String pathSuffix = "icons/";
+			ICON_BASE_URL = singleton.getBundle().getEntry(pathSuffix);
+		}
+
+		try {
+			ImageDescriptor id = ImageDescriptor.createFromURL(new URL(ICON_BASE_URL, partialURL));
+			registry.put(key, id);
+			imageDescriptors.put(key, id);
+		} catch (Exception e) {
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error registering image", e);
+			}
+		}
+	}
+
+	/**
+	 * @see AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		
+		getPreferenceStore().setDefault(MonitorUIPlugin.SHOW_VIEW_ON_ACTIVITY, true);
+		getPreferenceStore().setDefault(MonitorUIPlugin.PIN_VIEW, false);
+		
+		MonitorCore.addMonitorListener(monitorListener);
+		
+		IMonitor[] monitors = MonitorCore.getMonitors();
+		if (monitors != null) {
+			for (IMonitor monitor : monitors)
+				monitor.addRequestListener(requestListener);
+		}
+
+		// register the debug options listener
+		final Hashtable<String, String> props = new Hashtable<String, String>(4);
+		props.put(DebugOptions.LISTENER_SYMBOLICNAME, PLUGIN_ID);
+		context.registerService(DebugOptionsListener.class.getName(), new Trace(), props);
+	}
+
+	/**
+	 * @see AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		super.stop(context);
+		
+		IMonitor[] monitors = MonitorCore.getMonitors();
+		if (monitors != null) {
+			for (IMonitor monitor : monitors)
+				monitor.removeRequestListener(requestListener);
+		}
+		
+		MonitorCore.removeMonitorListener(monitorListener);
+	}
+
+	public static boolean getDefaultShowOnActivityPreference() {
+		return getInstance().getPreferenceStore().getDefaultBoolean(SHOW_VIEW_ON_ACTIVITY);
+	}
+
+	public static boolean getShowOnActivityPreference() {
+		return getInstance().getPreferenceStore().getBoolean(SHOW_VIEW_ON_ACTIVITY);
+	}
+
+	public static void setShowOnActivityPreference(boolean b) {
+		getInstance().getPreferenceStore().setValue(SHOW_VIEW_ON_ACTIVITY, b);
+		getInstance().savePluginPreferences();
+	}
+
+	public static boolean getPinViewPreference() {
+		return getInstance().getPreferenceStore().getBoolean(PIN_VIEW);
+	}
+
+	public static void setPinViewPreference(boolean b) {
+		getInstance().getPreferenceStore().setValue(PIN_VIEW, b);
+		getInstance().savePluginPreferences();
+	}
+
+	public static boolean getShowHeaderPreference() {
+		return getInstance().getPreferenceStore().getBoolean(SHOW_HEADER);
+	}
+
+	public static void setShowHeaderPreference(boolean b) {
+		getInstance().getPreferenceStore().setValue(SHOW_HEADER, b);
+		getInstance().savePluginPreferences();
+	}
+
+	/**
+	 * Convenience method to unzip the given bytes using gzip. The returned byte
+	 * array is either the unzipped results, or the original byte array if unzipping
+	 * was not successful. The byte array must not be null.
+	 * 
+	 * @param b a byte array
+	 * @return the unzipped array, or the original array if unsuccessful
+	 */
+	public static synchronized byte[] unzip(byte[] b) {
+		if (b == null)
+			throw new IllegalArgumentException();
+		
+		try {
+			GZIPInputStream gin = new GZIPInputStream(new ByteArrayInputStream(b));
+			byte[] t = new byte[0];
+			while (gin.available() > 0) {
+				int n = gin.read(BUFFER);
+				if (n > 0) {
+					byte[] temp = new byte[t.length + n];
+					System.arraycopy(t, 0, temp, 0, t.length);
+					System.arraycopy(BUFFER, 0, temp, t.length, n);
+					t = temp;
+				}
+			}
+			return t;
+		} catch (Exception e) {
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Could not unzip byte array");
+			}
+			return b;
+		}
+	}
+
+	/**
+	 * Convenience method to parse the given bytes into String form. The bytes
+	 * are parsed into a line delimited string. The byte array must not be null.
+	 * 
+	 * @param b a byte array
+	 * @return the string after the conversion
+	 */
+	public static String parse(byte[] b) {
+		if (b == null)
+			throw new IllegalArgumentException();
+		
+		ByteArrayInputStream bin = new ByteArrayInputStream(b);
+		BufferedReader br = new BufferedReader(new InputStreamReader(bin));
+		StringBuffer sb = new StringBuffer();
+		try {
+			String s = br.readLine();
+			
+			while (s != null) {
+				sb.append(s);
+				s = br.readLine();
+				if (s != null)
+					sb.append(lineSeparator);
+			}
+		} catch (Exception e) {
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error parsing input", e);
+			}
+		}
+		
+		return sb.toString();
+	}
+
+	public void addRequest(Request request) {
+		if (!requests.contains(request))
+			requests.add(request);
+	}
+
+	/**
+	 * Returns a list of the current requests.
+	 *
+	 * @return an array of requests
+	 */
+	public Request[] getRequests() {
+		Request[] r = new Request[requests.size()];
+		requests.toArray(r);
+		return r;
+	}
+	
+	public void clearRequests() {
+		requests = new ArrayList<Request>();
+	}
+}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/RequestActionFilter.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/RequestActionFilter.java
new file mode 100644
index 0000000..d2a927a
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/RequestActionFilter.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import org.eclipse.ui.IActionFilter;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+/**
+ * An action filter for requests.
+ */
+public class RequestActionFilter implements IActionFilter{
+	public static final String REQUEST_SENT = "requestsent";
+
+	/**
+	 * @see IActionFilter#testAttribute(Object, String, String)
+	 */
+	public boolean testAttribute(Object target, String name, String value) {
+		Request request = (Request) target;
+		if (name.equals(REQUEST_SENT)) {
+			if (value.equals("true"))
+				return request.getResponseTime() != -1;
+			
+			return request.getResponseTime() == -1;
+		}
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/RequestAdapterFactory.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/RequestAdapterFactory.java
new file mode 100644
index 0000000..ac7d685
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/RequestAdapterFactory.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.ui.IActionFilter;
+/**
+ * Adapter factory to adapt Requests to IActionFilter.
+ */
+public class RequestAdapterFactory implements IAdapterFactory {
+	private RequestActionFilter reqActionFilter = null;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
+	 */
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		if (adapterType == IActionFilter.class) {
+			if (reqActionFilter == null) {
+				reqActionFilter = new RequestActionFilter();
+			}
+			return reqActionFilter;
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
+	 */
+	public Class[] getAdapterList() {
+		return new Class[] { IActionFilter.class };
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/SWTUtil.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/SWTUtil.java
new file mode 100644
index 0000000..ac622b3
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/SWTUtil.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.FontMetrics;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+/**
+ * SWT Utility class.
+ */
+public class SWTUtil {
+	private static FontMetrics fontMetrics;
+
+	protected static void initializeDialogUnits(Control testControl) {
+		// Compute and store a font metric
+		GC gc = new GC(testControl);
+		gc.setFont(JFaceResources.getDialogFont());
+		fontMetrics = gc.getFontMetrics();
+		gc.dispose();
+	}
+
+	/**
+	 * Returns a width hint for a button control.
+	 */
+	protected static int getButtonWidthHint(Button button) {
+		int widthHint = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.BUTTON_WIDTH);
+		return Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
+	}
+	
+	/**
+	 * Create a new button with the standard size.
+	 * 
+	 * @param comp the component to add the button to
+	 * @param label the button label
+	 * @return a button
+	 */
+	public static Button createButton(Composite comp, String label) {
+		Button b = new Button(comp, SWT.PUSH);
+		b.setText(label);
+		if (fontMetrics == null)
+			initializeDialogUnits(comp);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
+		data.widthHint = getButtonWidthHint(b);
+		b.setLayoutData(data);
+		return b;
+	}
+	
+	public static Button createCheckbox(Composite comp, String txt, boolean isSelected){
+		Button button = new Button(comp, SWT.CHECK);
+		button.setText(txt);
+		GridLayout layout = new GridLayout();
+		comp.setLayout(layout);
+		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);
+		data.horizontalIndent = 10;
+		button.setLayoutData(data);
+		button.setSelection(isSelected);
+		return button;
+	}
+	
+	public static Label createLabel(Composite comp, String txt) {
+		Label label = new Label(comp, SWT.NONE);
+		label.setText(txt);
+		label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING));
+		return label;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Startup.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Startup.java
new file mode 100644
index 0000000..3df7e03
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Startup.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import org.eclipse.wst.internet.monitor.core.internal.IStartup;
+/**
+ * Startup hook.
+ */
+public class Startup implements IStartup {
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.internet.monitor.core.IStartup#startup()
+	 */
+	public void startup() {
+		// do nothing - plugin loading is enough
+	}
+}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java
new file mode 100644
index 0000000..8d91945
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.service.debug.DebugOptions;
+import org.eclipse.osgi.service.debug.DebugOptionsListener;
+import org.eclipse.wst.internet.monitor.core.internal.MonitorPlugin;
+
+/**
+ * Helper class to route trace output.
+ */
+public class Trace implements DebugOptionsListener {
+
+	// tracing enablement flags
+	public static boolean CONFIG = false;
+	public static boolean WARNING = false;
+	public static boolean SEVERE = false;
+	public static boolean FINEST = false;
+
+	// tracing levels. One most exist for each debug option
+	public final static String STRING_CONFIG = "/config"; //$NON-NLS-1$
+	public final static String STRING_FINEST = "/finest"; //$NON-NLS-1$
+	public final static String STRING_WARNING = "/warning"; //$NON-NLS-1$
+	public final static String STRING_SEVERE = "/severe"; //$NON-NLS-1$
+	
+	/**
+	 * Trace constructor. This should never be explicitly called by clients and is used to register this class with the
+	 * {@link DebugOptions} service.
+	 */
+	public Trace() {
+		super();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osgi.service.debug.DebugOptionsListener#optionsChanged(org.eclipse.osgi.service.debug.DebugOptions)
+	 */
+	public void optionsChanged(DebugOptions options) {
+		Trace.CONFIG = options.getBooleanOption(MonitorPlugin.PLUGIN_ID + Trace.STRING_CONFIG, false);
+		Trace.WARNING = options.getBooleanOption(MonitorPlugin.PLUGIN_ID + Trace.STRING_WARNING, false);
+		Trace.SEVERE = options.getBooleanOption(MonitorPlugin.PLUGIN_ID + Trace.STRING_SEVERE, false);
+		Trace.FINEST = options.getBooleanOption(MonitorPlugin.PLUGIN_ID + Trace.STRING_FINEST, false);
+	}
+
+	/**
+	 * Trace the given message.
+	 * 
+	 * @param level
+	 *            The tracing level.
+	 * @param s
+	 *            The message to trace
+	 */
+	public static void trace(final String level, final String s) {
+		trace(level, s, null);
+	}
+
+	/**
+	 * Trace the given message and exception.
+	 * 
+	 * @param level
+	 *            The tracing level.
+	 * @param s
+	 *            The message to trace
+	 * @param t
+	 *            A {@link Throwable} to trace
+	 */
+	public static void trace(final String level, final String s, final Throwable t) {
+		if (Trace.STRING_SEVERE.equals(level)) {
+			MonitorUIPlugin.getInstance().getLog().log(new Status(IStatus.ERROR, MonitorUIPlugin.PLUGIN_ID, s, t));
+		}
+		if (MonitorUIPlugin.getInstance().isDebugging()) {
+			System.out.println(MonitorUIPlugin.PLUGIN_ID + " " + System.currentTimeMillis() + " thread=["
+					+ Thread.currentThread().getId() + "] " + level + " " + s);
+			if (t != null) {
+				t.printStackTrace();
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/MonitorStackLayout.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/MonitorStackLayout.java
new file mode 100644
index 0000000..ff3b111
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/MonitorStackLayout.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.custom;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.widgets.*;
+/**
+ * This Layout stacks all the controls one on top of the other and resizes all controls
+ * to have the same size and location.
+ * The control specified in topControl is visible and all other controls are not visible.
+ * Users must set the topControl value to flip between the visible items and then call 
+ * layout() on the composite which has the MonitorStackLayout.
+ */
+public class MonitorStackLayout extends Layout {
+ 	/**
+ 	 * topControl the Control that is displayed at the top of the stack.
+ 	 * All other controls that are children of the parent composite will not be visible.
+ 	 */
+ 	public Control topControl;
+
+	protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
+		Control children[] = composite.getChildren();
+		int maxWidth = 0;
+		int maxHeight = 0;
+		for (Control child : children) {
+			if (child == topControl) {
+				Point size = child.computeSize(wHint, hHint, flushCache);
+				maxWidth = Math.max(size.x, maxWidth);
+				maxHeight = Math.max(size.y, maxHeight);
+			}
+		}
+		int width = maxWidth;
+		int height = maxHeight;
+		if (wHint != SWT.DEFAULT)
+			width = wHint;
+		if (hHint != SWT.DEFAULT)
+			height = hHint;
+		return new Point(width, height);
+	}
+
+	protected boolean flushCache(Control control) {
+		return true;
+	}
+
+	protected void layout(Composite composite, boolean flushCache) {
+		Control children[] = composite.getChildren();
+		Rectangle rect = composite.getClientArea();
+		for (Control child : children) {
+			if (child instanceof Label) {
+				Rectangle r = new Rectangle(rect.x+2, rect.y, rect.width-2, rect.height);
+				child.setBounds(r);
+			} else
+				child.setBounds(rect);
+			child.setVisible(child == topControl);
+		}
+	}
+
+	public String toString() {
+		return "MonitorStackLayout";
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/SashForm.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/SashForm.java
new file mode 100644
index 0000000..8b45120
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/SashForm.java
@@ -0,0 +1,412 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.custom;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.graphics.*;
+/**
+ * The SashForm is a composite control that lays out its children in a
+ * row or column arrangement (as specified by the orientation) and places
+ * a Sash between each child. One child may be maximized to occupy the
+ * entire size of the SashForm.  The relative sizes of the children may
+ * be specified using weights.
+ * <p>
+ * <dl>
+ * <dt><b>Styles:</b></dt>
+ * <dd>HORIZONTAL, VERTICAL, SMOOTH</dd>
+ * </dl>
+ * </p>
+ */
+public class SashForm extends Composite {
+	public int SASH_WIDTH = 3;
+
+	int sashStyle;
+	Sash[] sashes = new Sash[0];
+	// Remember background and foreground
+	// colors to determine whether to set
+	// sashes to the default color (null) or
+	// a specific color
+	Color background = null;
+	Color foreground = null;
+	Control[] controls = new Control[0];
+	Control maxControl = null;
+	Listener sashListener;
+	static final int DRAG_MINIMUM = 20;
+
+	protected boolean enableSash = false;
+	protected boolean resize;  
+
+/**
+ * Constructs a new instance of this class given its parent
+ * and a style value describing its behavior and appearance.
+ * <p>
+ * The style value is either one of the style constants defined in
+ * class <code>SWT</code> which is applicable to instances of this
+ * class, or must be built by <em>bitwise OR</em>'ing together 
+ * (that is, using the <code>int</code> "|" operator) two or more
+ * of those <code>SWT</code> style constants. The class description
+ * lists the style constants that are applicable to the class.
+ * Style bits are also inherited from superclasses.
+ * </p>
+ *
+ * @param parent a widget which will be the parent of the new instance (cannot be null)
+ * @param style the style of widget to construct
+ *
+ * @exception IllegalArgumentException <ul>
+ *    <li>ERROR_NULL_ARGUMENT - if the parent is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
+ * </ul>
+ *
+ * @see SWT#HORIZONTAL
+ * @see SWT#VERTICAL
+ * @see #getStyle()
+ */
+public SashForm(Composite parent, int style) {
+	super(parent, checkStyle2(style));
+	super.setLayout(new SashFormLayout());
+	sashStyle = ((style & SWT.VERTICAL) != 0) ? SWT.HORIZONTAL : SWT.VERTICAL;
+	if ((style & SWT.BORDER) != 0) sashStyle |= SWT.BORDER;
+	if ((style & SWT.SMOOTH) != 0) sashStyle |= SWT.SMOOTH;
+	sashListener = new Listener() {
+		public void handleEvent(Event e) {
+			onDragSash(e);
+		}
+	};
+}
+static int checkStyle2(int style) {
+	int mask = SWT.BORDER | SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT;
+	return style & mask;
+}
+/**
+ * Returns SWT.HORIZONTAL if the controls in the SashForm are laid out side by side
+ * or SWT.VERTICAL   if the controls in the SashForm are laid out top to bottom.
+ * 
+ * @return SWT.HORIZONTAL or SWT.VERTICAL
+ */
+public int getOrientation() {
+	//checkWidget();
+	return (sashStyle & SWT.VERTICAL) != 0 ? SWT.HORIZONTAL : SWT.VERTICAL;
+}
+public int getStyle() {
+	int style = super.getStyle();
+	style |= getOrientation() == SWT.VERTICAL ? SWT.VERTICAL : SWT.HORIZONTAL;
+	if ((sashStyle & SWT.SMOOTH) != 0) style |= SWT.SMOOTH;
+	return style;
+}
+/**
+ * Answer the control that currently is maximized in the SashForm.  
+ * This value may be null.
+ * 
+ * @return the control that currently is maximized or null
+ */
+public Control getMaximizedControl(){
+	//checkWidget();
+	return this.maxControl;
+}
+/**
+ * Answer the relative weight of each child in the SashForm.  The weight represents the
+ * percent of the total width (if SashForm has Horizontal orientation) or 
+ * total height (if SashForm has Vertical orientation) each control occupies.
+ * The weights are returned in order of the creation of the widgets (weight[0]
+ * corresponds to the weight of the first child created).
+ * 
+ * @return the relative weight of each child
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+
+public int[] getWeights() {
+	checkWidget();
+	Control[] cArray = getControls(false);
+	int[] ratios = new int[cArray.length];
+	for (int i = 0; i < cArray.length; i++) {
+		Object data = cArray[i].getLayoutData();
+		if (data != null && data instanceof SashFormData) {
+			ratios[i] = (int)(((SashFormData)data).weight * 1000 >> 16);
+		} else {
+			ratios[i] = 200;
+		}
+	}
+	return ratios;
+}
+Control[] getControls(boolean onlyVisible) {
+	Control[] children = getChildren();
+	Control[] result = new Control[0];
+	for (int i = 0; i < children.length; i++) {
+		if (children[i] instanceof Sash) continue;
+		if (onlyVisible && !children[i].getVisible()) continue;
+
+		Control[] newResult = new Control[result.length + 1];
+		System.arraycopy(result, 0, newResult, 0, result.length);
+		newResult[result.length] = children[i];
+		result = newResult;
+	}
+	return result;
+}
+void onDragSash(Event event) {
+	if (!enableSash)
+		return;
+	
+	Sash sash = (Sash)event.widget;
+	int sashIndex = -1;
+	for (int i= 0; i < sashes.length; i++) {
+		if (sashes[i] == sash) {
+			sashIndex = i;
+			break;
+		}
+	}
+	if (sashIndex == -1) return;
+	
+	Control c1 = controls[sashIndex];
+	Control c2 = controls[sashIndex + 1];
+	Rectangle b1 = c1.getBounds();
+	Rectangle b2 = c2.getBounds();
+	
+	Rectangle sashBounds = sash.getBounds();
+	Rectangle area = getClientArea();
+	boolean correction = false;
+	if (getOrientation() == SWT.HORIZONTAL) {
+		correction = b1.width < DRAG_MINIMUM || b2.width < DRAG_MINIMUM;
+		int totalWidth = b2.x + b2.width - b1.x; 
+		int shift = event.x - sashBounds.x;
+		b1.width += shift;
+		b2.x += shift;
+		b2.width -= shift;
+		if (b1.width < DRAG_MINIMUM) {
+			b1.width = DRAG_MINIMUM;
+			b2.x = b1.x + b1.width + sashBounds.width;
+			b2.width = totalWidth - b2.x;
+			event.x = b1.x + b1.width;
+			event.doit = false;
+		}
+		if (b2.width < DRAG_MINIMUM) {
+			b1.width = totalWidth - DRAG_MINIMUM - sashBounds.width;
+			b2.x = b1.x + b1.width + sashBounds.width;
+			b2.width = DRAG_MINIMUM;
+			event.x = b1.x + b1.width;
+			event.doit = false;
+		}
+		Object data1 = c1.getLayoutData();
+		if (data1 == null || !(data1 instanceof SashFormData)) {
+			data1 = new SashFormData();
+			c1.setLayoutData(data1);
+		}
+		Object data2 = c2.getLayoutData();
+		if (data2 == null || !(data2 instanceof SashFormData)) {
+			data2 = new SashFormData();
+			c2.setLayoutData(data2);
+		}
+		((SashFormData)data1).weight = (((long)b1.width << 16) + area.width - 1) / area.width;
+		((SashFormData)data2).weight = (((long)b2.width << 16) + area.width - 1) / area.width;
+	} else {
+		correction = b1.height < DRAG_MINIMUM || b2.height < DRAG_MINIMUM;
+		int totalHeight = b2.y + b2.height - b1.y;
+		int shift = event.y - sashBounds.y;
+		b1.height += shift;
+		b2.y += shift;
+		b2.height -= shift;
+		if (b1.height < DRAG_MINIMUM) {
+			b1.height = DRAG_MINIMUM;
+			b2.y = b1.y + b1.height + sashBounds.height;
+			b2.height = totalHeight - b2.y;
+			event.y = b1.y + b1.height;
+			event.doit = false;
+		}
+		if (b2.height < DRAG_MINIMUM) {
+			b1.height = totalHeight - DRAG_MINIMUM - sashBounds.height;
+			b2.y = b1.y + b1.height + sashBounds.height;
+			b2.height = DRAG_MINIMUM;
+			event.y = b1.y + b1.height;
+			event.doit = false;
+		}
+		Object data1 = c1.getLayoutData();
+		if (data1 == null || !(data1 instanceof SashFormData)) {
+			data1 = new SashFormData();
+			c1.setLayoutData(data1);
+		}
+		Object data2 = c2.getLayoutData();
+		if (data2 == null || !(data2 instanceof SashFormData)) {
+			data2 = new SashFormData();
+			c2.setLayoutData(data2);
+		}
+		//((SashFormData)data1).weight = (((long)b1.height << 16) + area.height - 1) / area.height;
+		//((SashFormData)data2).weight = (((long)b2.height << 16) + area.height - 1) / area.height;
+		((SashFormData)data1).weight = ((200 << 16) + 999) / 1000 * b1.height / b2.height;
+		((SashFormData)data2).weight = ((200 << 16) + 999) / 1000;
+	}
+	if (correction || (event.doit && event.detail != SWT.DRAG)) {
+		c1.setBounds(b1);
+		sash.setBounds(event.x, event.y, event.width, event.height);
+		c2.setBounds(b2);
+	}
+}
+/**
+ * If orientation is SWT.HORIZONTAL, lay the controls in the SashForm 
+ * out side by side.  If orientation is SWT.VERTICAL, lay the 
+ * controls in the SashForm out top to bottom.
+ * 
+ * @param orientation SWT.HORIZONTAL or SWT.VERTICAL
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the value of orientation is not SWT.HORIZONTAL or SWT.VERTICAL
+ * </ul>
+ */
+public void setOrientation(int orientation) {
+	checkWidget();
+	if (getOrientation() == orientation) return;
+	if (orientation != SWT.HORIZONTAL && orientation != SWT.VERTICAL) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	sashStyle &= ~(SWT.HORIZONTAL | SWT.VERTICAL);
+	sashStyle |= orientation == SWT.VERTICAL ? SWT.HORIZONTAL : SWT.VERTICAL;
+	for (int i = 0; i < sashes.length; i++) {
+		sashes[i].dispose();
+		sashes[i] = new Sash(this, sashStyle);
+		sashes[i].setBackground(background);
+		sashes[i].setForeground(foreground);
+		sashes[i].addListener(SWT.Selection, sashListener);
+	}
+	layout(false);
+}
+public void setBackground (Color color) {
+	super.setBackground(color);
+	background = color;
+	for (int i = 0; i < sashes.length; i++) {
+		sashes[i].setBackground(background);
+	}
+}
+public void setForeground (Color color) {
+	super.setForeground(color);
+	foreground = color;
+	for (int i = 0; i < sashes.length; i++) {
+		sashes[i].setForeground(foreground);
+	}
+}
+/**
+ * Sets the layout which is associated with the receiver to be
+ * the argument which may be null.
+ * <p>
+ * Note: No Layout can be set on this Control because it already
+ * manages the size and position of its children.
+ * </p>
+ *
+ * @param layout the receiver's new layout or null
+ *
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setLayout (Layout layout) {
+	checkWidget();
+	return;
+}
+/**
+ * Specify the control that should take up the entire client area of the SashForm.  
+ * If one control has been maximized, and this method is called with a different control, 
+ * the previous control will be minimized and the new control will be maximized.
+ * If the value of control is null, the SashForm will minimize all controls and return to
+ * the default layout where all controls are laid out separated by sashes.
+ * 
+ * @param control the control to be maximized or null
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ */
+public void setMaximizedControl(Control control){
+	checkWidget();
+	if (control == null) {
+		if (maxControl != null) {
+			this.maxControl = null;
+			layout(false);
+			for (int i= 0; i < sashes.length; i++){
+				sashes[i].setVisible(true);
+			}
+		}
+		return;
+	}
+	
+	for (int i= 0; i < sashes.length; i++){
+		sashes[i].setVisible(false);
+	}
+	maxControl = control;
+	layout(false);
+}
+
+/**
+ * Specify the relative weight of each child in the SashForm.  This will determine
+ * what percent of the total width (if SashForm has Horizontal orientation) or 
+ * total height (if SashForm has Vertical orientation) each control will occupy.
+ * The weights must be positive values and there must be an entry for each
+ * non-sash child of the SashForm.
+ * 
+ * @param weights the relative weight of each child
+ * 
+ * @exception SWTException <ul>
+ *    <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if the weights value is null or of incorrect length (must match the number of children)</li>
+ * </ul>
+ */
+public void setWeights(int[] weights) {
+	checkWidget();
+	Control[] cArray = getControls(false);
+	if (weights == null || weights.length != cArray.length) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	
+	if (weights == null)
+		return;
+	
+	int total = 0;
+	for (int i = 0; i < weights.length; i++) {
+		if (weights[i] < 0) {
+			SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+		}
+		total += weights[i];
+	}
+	if (total == 0) {
+		SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+	}
+	for (int i = 0; i < cArray.length; i++) {
+		Object data = cArray[i].getLayoutData();
+		if (data == null || !(data instanceof SashFormData)) {
+			data = new SashFormData();
+			cArray[i].setLayoutData(data);
+		}
+		((SashFormData)data).weight = (((long)weights[i] << 16) + total - 1) / total;
+	}
+
+	layout(false);
+}
+
+public void setSimpleLayout(boolean b) {
+	Control[] cArray = getControls(false);
+	if (cArray == null || cArray.length != 2)
+		return;
+	enableSash = b;
+	SashFormLayout layout = (SashFormLayout) getLayout();
+	layout.simple = !enableSash;
+	
+	if (enableSash)
+		resize = true;
+}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/SashFormData.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/SashFormData.java
new file mode 100644
index 0000000..48ba237
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/SashFormData.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.custom;
+
+class SashFormData {
+
+	long weight;
+
+String getName () {
+	String string = getClass ().getName ();
+	int index = string.lastIndexOf ('.');
+	if (index == -1) return string;
+	return string.substring (index + 1, string.length ());
+}
+
+/**
+ * Returns a string containing a concise, human-readable
+ * description of the receiver.
+ *
+ * @return a string representation of the event
+ */
+public String toString () {
+	return getName()+" {weight="+weight+"}"; //$NON-NLS-2$
+}
+}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/SashFormLayout.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/SashFormLayout.java
new file mode 100644
index 0000000..f750322
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/custom/SashFormLayout.java
@@ -0,0 +1,240 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.custom;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.widgets.*;
+
+/**
+ * This class provides the layout for SashForm
+ * 
+ * @see SashForm
+ */
+class SashFormLayout extends Layout {
+	protected boolean simple;
+
+protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
+	SashForm sashForm = (SashForm)composite;
+	Control[] cArray = sashForm.getControls(true);
+	int width = 0;
+	int height = 0;
+	if (cArray.length == 0) {
+		if (wHint != SWT.DEFAULT) width = wHint;
+		if (hHint != SWT.DEFAULT) height = hHint;
+		return new Point(width, height);
+	}
+	// determine control sizes
+	boolean vertical = sashForm.getOrientation() == SWT.VERTICAL;
+	int maxIndex = 0;
+	int maxValue = 0;
+	Point[] sizes = new Point[cArray.length];
+	for (int i = 0; i < cArray.length; i++) {
+		if (vertical) {
+			sizes[i] = cArray[i].computeSize(wHint, SWT.DEFAULT, flushCache);
+			if (sizes[i].y > maxValue) {
+				maxIndex = i;
+				maxValue = sizes[i].y;
+			}
+			width = Math.max(width, sizes[i].x);
+		} else {
+			sizes[i] = cArray[i].computeSize(SWT.DEFAULT, hHint, flushCache);
+			if (sizes[i].x > maxValue) {
+				maxIndex = i;
+				maxValue = sizes[i].x;
+			}
+			height = Math.max(height, sizes[i].y);
+		}
+	}
+	// get the ratios
+	long[] ratios = new long[cArray.length];
+	long total = 0;
+	for (int i = 0; i < cArray.length; i++) {
+		Object data = cArray[i].getLayoutData();
+		if (data != null && data instanceof SashFormData) {
+			ratios[i] = ((SashFormData)data).weight;
+		} else {
+			data = new SashFormData();
+			cArray[i].setLayoutData(data);
+			((SashFormData)data).weight = ratios[i] = ((200 << 16) + 999) / 1000;
+			
+		}
+		total += ratios[i];
+	}
+	if (ratios[maxIndex] > 0) {
+		int sashwidth = sashForm.sashes.length > 0 ? sashForm.SASH_WIDTH + sashForm.sashes [0].getBorderWidth() * 2 : sashForm.SASH_WIDTH;
+		if (vertical) {
+			height += (int)(total * maxValue / ratios[maxIndex]) + (cArray.length - 1) * sashwidth;
+		} else {
+			width += (int)(total * maxValue / ratios[maxIndex]) + (cArray.length - 1) * sashwidth;
+		}
+	}
+	width += sashForm.getBorderWidth()*2;
+	height += sashForm.getBorderWidth()*2;
+	if (wHint != SWT.DEFAULT) width = wHint;
+	if (hHint != SWT.DEFAULT) height = hHint;
+	return new Point(width, height);
+}
+
+protected boolean flushCache(Control control) {
+	return true;
+}
+
+protected void layout(Composite composite, boolean flushCache) {
+	SashForm sashForm = (SashForm)composite;
+	Rectangle area = sashForm.getClientArea();
+	if (area.width <= 1 || area.height <= 1) return;
+	
+	Control[] newControls = sashForm.getControls(true);
+	if (sashForm.controls.length == 0 && newControls.length == 0)
+		return;
+	sashForm.controls = newControls;
+	
+	Control[] controls = sashForm.controls;
+	
+	if (sashForm.maxControl != null && !sashForm.maxControl.isDisposed()) {
+		for (int i= 0; i < controls.length; i++){
+			if (controls[i] != sashForm.maxControl) {
+				controls[i].setBounds(-200, -200, 0, 0);
+			} else {
+				controls[i].setBounds(area);
+			}
+		}
+		return;
+	}
+	
+	// simple layout
+	if (simple) {
+		// hide sashes
+		for (int i = 0; i < sashForm.sashes.length; i++) {
+			sashForm.sashes[i].setEnabled(false);
+			sashForm.sashes[i].setVisible(false);
+		}
+		
+		Point p = controls[0].computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
+		controls[0].setBounds(0, 0, area.width, p.y);
+		controls[1].setBounds(0, p.y + 2, area.width, area.height - p.y - 2);
+		
+		return;
+	}
+	
+	// keep just the right number of sashes
+	if (sashForm.sashes.length < controls.length - 1) {
+		Sash[] newSashes = new Sash[controls.length - 1];
+		System.arraycopy(sashForm.sashes, 0, newSashes, 0, sashForm.sashes.length);
+		for (int i = sashForm.sashes.length; i < newSashes.length; i++) {
+			newSashes[i] = new Sash(sashForm, sashForm.sashStyle);
+			newSashes[i].setBackground(sashForm.background);
+			newSashes[i].setForeground(sashForm.foreground);
+			newSashes[i].addListener(SWT.Selection, sashForm.sashListener);
+		}
+		sashForm.sashes = newSashes;
+	}
+	if (sashForm.sashes.length > controls.length - 1) {
+		if (controls.length == 0) {
+			for (int i = 0; i < sashForm.sashes.length; i++) {
+				sashForm.sashes[i].dispose();
+			}
+			sashForm.sashes = new Sash[0];
+		} else {
+			Sash[] newSashes = new Sash[controls.length - 1];
+			System.arraycopy(sashForm.sashes, 0, newSashes, 0, newSashes.length);
+			for (int i = controls.length - 1; i < sashForm.sashes.length; i++) {
+				sashForm.sashes[i].dispose();
+			}
+			sashForm.sashes = newSashes;
+		}
+	}
+	if (controls.length == 0) return;
+	Sash[] sashes = sashForm.sashes;
+	
+	for (int i = 0; i < sashForm.sashes.length; i++) {
+		sashes[i].setEnabled(true);
+		sashes[i].setVisible(true);
+	}
+	
+	if (sashForm.resize) {
+		Control c1 = controls[0];
+		Control c2 = controls[1];
+		
+		int h1 = area.height / 3;
+		int h2 = area.height - h1 - sashes[0].getBounds().height;
+		
+		Object data1 = c1.getLayoutData();
+		if (data1 == null || !(data1 instanceof SashFormData)) {
+			data1 = new SashFormData();
+			c1.setLayoutData(data1);
+		}
+		Object data2 = c2.getLayoutData();
+		if (data2 == null || !(data2 instanceof SashFormData)) {
+			data2 = new SashFormData();
+			c2.setLayoutData(data2);
+		}
+		((SashFormData)data1).weight = ((200 << 16) + 999) / 1000 * h1 / h2;
+		((SashFormData)data2).weight = ((200 << 16) + 999) / 1000;
+		sashForm.resize = false;
+	}
+	
+	// get the ratios
+	long[] ratios = new long[controls.length];
+	long total = 0;
+	for (int i = 0; i < controls.length; i++) {
+		Object data = controls[i].getLayoutData();
+		if (data != null && data instanceof SashFormData) {
+			ratios[i] = ((SashFormData)data).weight;
+		} else {
+			data = new SashFormData();
+			controls[i].setLayoutData(data);
+			((SashFormData)data).weight = ratios[i] = ((200 << 16) + 999) / 1000;
+		}
+		total += ratios[i];
+	}
+	
+	int sashwidth = sashes.length > 0 ? sashForm.SASH_WIDTH + sashes [0].getBorderWidth() * 2 : sashForm.SASH_WIDTH;
+	if (sashForm.getOrientation() == SWT.HORIZONTAL) {
+		int width = (int)(ratios[0] * (area.width - sashes.length * sashwidth) / total);
+		int x = area.x;
+		controls[0].setBounds(x, area.y, width, area.height);
+		x += width;
+		for (int i = 1; i < controls.length - 1; i++) {
+			sashes[i - 1].setBounds(x, area.y, sashwidth, area.height);
+			x += sashwidth;
+			width = (int)(ratios[i] * (area.width - sashes.length * sashwidth) / total);
+			controls[i].setBounds(x, area.y, width, area.height);
+			x += width;
+		}
+		if (controls.length > 1) {
+			sashes[sashes.length - 1].setBounds(x, area.y, sashwidth, area.height);
+			x += sashwidth;
+			width = area.width - x;
+			controls[controls.length - 1].setBounds(x, area.y, width, area.height);
+		}
+	} else {
+		int height = (int)(ratios[0] * (area.height - sashes.length * sashwidth) / total);
+		int y = area.y;
+		controls[0].setBounds(area.x, y, area.width, height);
+		y += height;
+		for (int i = 1; i < controls.length - 1; i++) {
+			sashes[i - 1].setBounds(area.x, y, area.width, sashwidth);
+			y += sashwidth;
+			height = (int)(ratios[i] * (area.height - sashes.length * sashwidth) / total);
+			controls[i].setBounds(area.x, y, area.width, height);
+			y += height;
+		}
+		if (controls.length > 1) {
+			sashes[sashes.length - 1].setBounds(area.x, y, area.width, sashwidth);
+			y += sashwidth;
+			height = area.height - y;
+			controls[controls.length - 1].setBounds(area.x, y, area.width, height);
+		}
+	}
+}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/ContentViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/ContentViewer.java
new file mode 100644
index 0000000..db500ab
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/ContentViewer.java
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.provisional;
+
+import org.eclipse.swt.widgets.Composite;
+/**
+ * Editable viewer for displaying and editing requests and responses.
+ * <p>
+ * This abstract class is intended to be subclassed only by clients
+ * to extend the <code>contentViewers</code> extension point.
+ * The subclass must have a public 0-argument constructor, which will be used
+ * automatically to instantiate the viewer when required.
+ * Once instantiated, {@link #init(Composite)} is called to create
+ * the viewer's controls. Then {@link #setContent(byte[])} is called,
+ * one or more times, to cause the viewer to display particular
+ * content. Finally, when the viewer is no longer needed, {@link #dispose()}
+ * is called to free up any resources tied up by the viewer.
+ * </p>
+ * <p>
+ * [issue: It's unclear how these content viewers are used.
+ * Is it just that the UI provides a list of available
+ * views for the user to make a manual selection from, regardless
+ * of the actual content of the message traffic?]
+ * </p>
+ * [issue: CS - If a ContentViewer is editable, does that mean we can edit the 
+ * bytes of the message and resend it across the wire?  How is an editable ContentViewer
+ * handled differently by the framework? Perhaps an example of what an editeable viewer would do. ]
+ */
+public abstract class ContentViewer {
+	/**
+	 * Creates a new content viewer instance.
+	 */
+	protected ContentViewer() {
+		// do nothing
+	}
+
+	/**
+	 * Creates the controls for this viewer as children of the given composite.
+	 * <p>
+	 * The default implementation of this method does nothing.
+	 * Subclasses should override this method.
+	 * </p>
+	 * 
+	 * @param parent the parent composite
+	 */
+	public abstract void init(Composite parent);
+
+	/**
+	 * Sets the content that the viewer should display.
+	 * The parameter may be null if no content should be displayed.
+	 * <p>
+	 * The default implementation of this method does nothing.
+	 * Subclasses should override this method.
+	 * </p>
+	 * <p>
+	 * [issue: Since this is for displaying request-reponse messages,
+	 * why not pass an Request? The problem as it stands now is that
+	 * it is unclear from specs how content viewers relate to anything
+	 * else having to do with the monitor.]
+	 * </p>
+	 * 
+	 * @param b the content to display, or <code>null</code> to
+	 * display nothing
+	 */
+	public abstract void setContent(byte[] b);
+
+	/**
+	 * Get the content from the viewer. This is usually only interesting if the
+	 * content has changed.
+	 * <p>
+	 * The default implementation of this method does nothing and
+	 * returns null. Subclasses should override this method.
+	 * </p>
+	 * 
+	 * @return the content from the viewer, or <code>null</code> if none
+	 */
+	public abstract byte[] getContent();
+
+	/**
+	 * Disposes this viewer and any underlying resources such as a composite.
+	 * This method will be called whenever the user switches to use another
+	 * viewer or the monitor view is closed. The parent composite should not
+	 * be disposed since it may be used to display another viewer. 
+	 * <p>
+	 * The default implementation of this method does nothing.
+	 * Subclasses should override this method to provide specialized cleanup.
+	 * </p>
+	 */
+	public void dispose() {
+		// do nothing
+	}
+
+	/**
+	 * Set whether the current viewer is editable, that is, the user is able to
+	 * edit the content.
+	 * <p>
+	 * The default implementation of this method does nothing.
+	 * Subclasses should override this method to allows instances
+	 * to be made editable.
+	 * </p>
+	 * 
+	 * @param editable <code>true</code> if true the content can be edited,
+	 *    and <code>false</code> otherwise
+	 */
+	public void setEditable(boolean editable) {
+		// do nothing
+	}
+
+	/**
+	 * Returns whether the current viewer is editable, that is, the user is able to
+	 * edit the content.
+	 * <p>
+	 * The default implementation of this method does nothing.
+	 * Subclasses should override this method to allows instances
+	 * to be made editable.
+	 * </p>
+	 * 
+	 * @return <code>true</code> if true the content can be edited,
+	 *    and <code>false</code> otherwise
+	 */
+	public boolean getEditable() {
+		return false;
+	}
+}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/MonitorUICore.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/MonitorUICore.java
new file mode 100644
index 0000000..02ea44c
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/MonitorUICore.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.provisional;
+
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+import org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin;
+/**
+ * Main class for access to the monitor UI.
+ * <p>
+ * This class provides all functionality through static members. It is not intended
+ * to be instantiated or subclassed.
+ * </p>
+ */
+public final class MonitorUICore {
+	/**
+	 * Cannot create MonitorUICore - use static methods.
+	 */
+	private MonitorUICore() {
+		// can't create
+	}
+
+	/**
+	 * Returns an array of the requests currently being displayed in the TCP/IP
+	 * monitor view.
+	 *
+	 * @return an array of requests
+	 */
+	public static Request[] getRequests() {
+		return MonitorUIPlugin.getInstance().getRequests();
+	}
+}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.html b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.html
new file mode 100644
index 0000000..d28b6c2
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.html
@@ -0,0 +1,21 @@
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<link rel="stylesheet" href="../../../../../..//apistyles.css" type="text/css">
+<title>WTP API overview</title>
+</head>
+<body>
+<p>TCP/IP monitor UI</p>
+<table width="500">
+<tr>
+<td>
+<p>The ContentViewer class is provided to
+implement the viewers extension point that allows external plugins to provide
+a view for viewing request and response data content in the monitor view.
+</p>
+</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.xml b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.xml
new file mode 100644
index 0000000..be41a27
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/provisional/package.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html>
+<head>
+	<!--  Escape to the root of your source folder  -->
+	<meta
+		name="root"
+		content="../../../../../../" />
+	<title>WTP API overview</title>
+</head>
+
+<body>
+<abstract>TCP/IP monitor UI</abstract>
+
+<p>The ContentViewer class is provided to
+implement the viewers extension point that allows external plugins to provide
+a view for viewing request and response data content in the monitor view.
+</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/FilterAction.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/FilterAction.java
new file mode 100644
index 0000000..3c4d83f
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/FilterAction.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.view;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.wst.internet.monitor.core.internal.IContentFilter;
+/**
+ * 
+ */
+public class FilterAction extends Action {
+	protected ViewerManager vm;
+	protected IContentFilter filter;
+	protected boolean enabled;
+
+	public FilterAction(ViewerManager vm, IContentFilter filter) {
+		super(filter.getName(), IAction.AS_CHECK_BOX);
+		this.vm = vm;
+		this.filter = filter;
+	}
+	
+	public void run() {
+		if (!isChecked())
+			vm.removeFilter(filter);
+		else
+			vm.addFilter(filter);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ModifyMessageAction.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ModifyMessageAction.java
new file mode 100644
index 0000000..f1f0f58
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ModifyMessageAction.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.view;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.wst.internet.monitor.core.internal.MonitorManager;
+import org.eclipse.wst.internet.monitor.core.internal.http.ResendHTTPRequest;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+/**
+ * Modify the selected message. Creates a new resendrequest and adds it
+ * to the tree.
+ */
+public class ModifyMessageAction implements IViewActionDelegate{
+	ISelection selection = null;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart view) {
+		// do nothing
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		if (selection != null) {
+			Object element = ((StructuredSelection) selection).getFirstElement();
+			if (element != null && element instanceof Request) {
+				Request req = (Request) element;
+				ResendHTTPRequest newReq = MonitorManager.createResendRequest(req);
+				MonitorManager.getInstance().addResendRequest(req, newReq);
+				TreeViewer treeViewer = MonitorView.view.treeViewer;
+				treeViewer.add(req, newReq);
+				treeViewer.setSelection(new StructuredSelection(newReq), false);
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection2) {
+		this.selection = selection2;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorTreeContentProvider.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorTreeContentProvider.java
new file mode 100644
index 0000000..b45eb20
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorTreeContentProvider.java
@@ -0,0 +1,155 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.view;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.wst.internet.monitor.core.internal.MonitorManager;
+import org.eclipse.wst.internet.monitor.core.internal.http.ResendHTTPRequest;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+import org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin;
+/**
+ * Content provider for the monitor server view.
+ */
+public class MonitorTreeContentProvider implements ITreeContentProvider {
+	protected static final String ROOT = "root";
+
+	/**
+	 * ProxyTreeContentProvider constructor comment.
+	 */
+	public MonitorTreeContentProvider() {
+		super();
+	}
+
+	/**
+	 * Disposes of this content provider.
+	 * <p>
+	 * [Issue: This method should be changed to take a Viewer,
+	 * renamed and repurposed to disconnect a content provider from
+	 * a viewer. This is over and above what inputChanged does,
+	 * which is disconnecting a content provider from the viewer's
+	 * input (but not the viewer itself).
+	 * ]
+	 * </p>
+	 */
+	public void dispose() {
+		// do nothing
+	}
+
+	/**
+	 * Returns an iterator over the child elements of the given element.
+	 * <p>
+	 * Note: The difference between this method and 
+	 * <code>IStructuredContentProvider.getElements</code> is
+	 * that <code>getElements</code> is called to obtain the 
+	 * tree viewer's root elements, whereas <code>getChildren</code> is used
+	 * to obtain the children of a given node in the tree
+	 * (including a root).
+	 * </p>
+	 * <p>
+	 * [Issue: Don't know what above is trying to say.
+	 *  See IStructuredContentProvider.getElements.
+	 * ]
+	 * </p>
+	 *
+	 * @param element the element
+	 * @return an iterator over the child elements 
+	 *    (element type: <code>Object</code>)
+	 */
+	public Object[] getChildren(Object element) {
+		if (element instanceof Integer) {
+			Integer in = (Integer) element;
+			List<Request> list = new ArrayList<Request>();
+			Request[] requests = MonitorUIPlugin.getInstance().getRequests();
+			if (requests != null) {
+				for (Request req : requests) {
+					if ((req.getLocalPort() == in.intValue())
+							&& !(req instanceof ResendHTTPRequest))
+						list.add(req);
+				}
+			}
+			return list.toArray();
+		} else if (element instanceof Request) {
+			Request req = (Request) element;
+			ResendHTTPRequest[] rr = MonitorManager.getInstance().getResendRequests(req);
+			List<Request> list = new ArrayList<Request>();
+			if (rr != null) {
+				for (ResendHTTPRequest r : rr)
+					list.add(r);
+			}
+			return list.toArray();
+		}
+		return null;
+	}
+
+	/*
+	 * Returns an iterator over the elements belonging to the
+	 * given element. These elements can be presented as rows in a table,
+	 * items in a list, etc.
+	 */
+	public Object[] getElements(Object element) {
+		if (ROOT.equals(element)) {
+			List<Integer> list = new ArrayList<Integer>();
+			Request[] requests = MonitorUIPlugin.getInstance().getRequests();
+			if (requests != null) {
+				for (Request req :  requests) {
+					Integer in = new Integer(req.getLocalPort());
+					if (!list.contains(in))
+						list.add(in);
+				}
+			}
+			return list.toArray();
+		}
+		return getChildren(element);
+	}
+
+	/*
+	 * Returns the parent for the given element, or <code>null</code> 
+	 * indicating that the parent can't be computed. 
+	 */
+	public Object getParent(Object element) {
+		if (element != null) {
+			if (element instanceof Integer)
+				return ROOT;
+			Request call = (Request) element;
+			if (call instanceof ResendHTTPRequest) {
+				ResendHTTPRequest callResend = (ResendHTTPRequest) call;
+				Request parent = callResend.getOriginalRequest();
+				if (parent != null)
+					return parent;
+			}
+			return new Integer(call.getLocalPort());
+		}
+		return null;
+	}
+
+	/*
+	 * Returns whether the given element has children.
+	 */
+	public boolean hasChildren(Object element) {
+		if (element instanceof Integer)
+			return true;
+		if (element instanceof Request)
+			return MonitorManager.getInstance().getResendRequests((Request) element).length > 0; 
+		
+		return false;
+	}
+
+	/*
+	 * Notifies this content provider that the given viewer's input
+	 * has been switched to a different element.
+	 */
+	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+		// do nothing
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorView.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorView.java
new file mode 100644
index 0000000..06467ad
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorView.java
@@ -0,0 +1,566 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.view;
+
+import java.text.SimpleDateFormat;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.action.*;
+import org.eclipse.jface.preference.IPreferenceNode;
+import org.eclipse.jface.preference.PreferenceDialog;
+import org.eclipse.jface.preference.PreferenceManager;
+import org.eclipse.jface.viewers.*;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.ui.*;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.wst.internet.monitor.core.internal.IContentFilter;
+import org.eclipse.wst.internet.monitor.core.internal.MonitorPlugin;
+import org.eclipse.wst.internet.monitor.core.internal.http.ResendHTTPRequest;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.IRequestListener;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+import org.eclipse.wst.internet.monitor.ui.internal.*;
+/**
+ * View of TCP/IP activity.
+ */
+public class MonitorView extends ViewPart {
+	protected Tree tree;
+	protected TreeViewer treeViewer;
+	protected MonitorTreeContentProvider contentProvider;
+
+	protected IRequestListener listener;
+	protected ViewerManager vm;
+	protected List requestViewers;
+	protected List responseViewers;
+
+	protected static SimpleDateFormat format;
+	protected static final String VIEW_ID = "org.eclipse.wst.internet.monitor.view";
+	protected static final String DEFAULT_VIEWER = "org.eclipse.wst.internet.monitor.viewers.byte";
+
+	protected IAction httpHeaderAction;
+	protected IAction preferenceAction;
+	
+	public static MonitorView view;
+	
+	protected Request currentRequest = null;
+	protected StructuredSelection currentSelection = null;
+
+	/**
+	 * MonitorView constructor comment.
+	 */
+	public MonitorView() {
+		super();
+		view = this;
+		
+		// try specified format, and fall back to standard format
+		try {
+			format = new SimpleDateFormat(Messages.viewDateFormat);
+		} catch (Exception e) {
+			format = new SimpleDateFormat("h:mm.s.S a");
+		}
+	}
+
+	public void doRequestAdded(final Request rr) {
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				if (!(rr instanceof ResendHTTPRequest)) {
+				  treeViewer.refresh(MonitorTreeContentProvider.ROOT);
+				  if (!MonitorUIPlugin.getPinViewPreference())
+					  treeViewer.setSelection(new StructuredSelection(rr), true);
+				}
+			}
+		});
+	}
+
+	public void doRequestChanged(final Request rr) {
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				if (treeViewer == null)
+					return;
+				IStructuredSelection sel = (IStructuredSelection) treeViewer.getSelection();
+				
+				treeViewer.refresh(rr);
+				if (!sel.isEmpty())
+					treeViewer.setSelection(sel);
+			}
+		});
+	}
+
+	/**
+	 * Clear the view.
+	 */
+	protected void clear() {
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				treeViewer.setSelection(null);
+				treeViewer.setInput(MonitorTreeContentProvider.ROOT);
+			}
+		});
+	}
+	
+	protected void setSelection(Request request) {
+		if (treeViewer != null)
+			treeViewer.setSelection(new StructuredSelection(request));
+	}
+
+	/**
+	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	public void createPartControl(Composite parent) {
+		SashForm sashFparent = new SashForm(parent, SWT.VERTICAL);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.horizontalSpacing = 4;
+		layout.verticalSpacing = 4;
+		sashFparent.setLayout(layout);
+		sashFparent.setLayoutData(new GridData(GridData.FILL_BOTH));
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(sashFparent, ContextIds.VIEW);
+		
+		// create tree panel
+		Composite treePanel = new Composite(sashFparent, SWT.NONE);
+		layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		treePanel.setLayout(layout);
+		GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+		data.heightHint = 110;
+		data.horizontalSpan = 2;
+		treePanel.setLayoutData(data);
+	
+		tree = new Tree(treePanel, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE);
+		data = new GridData(GridData.FILL_BOTH);
+		//data.widthHint = 120;
+		tree.setLayoutData(data);
+		treeViewer = new TreeViewer(tree);
+		contentProvider = new MonitorTreeContentProvider();
+		treeViewer.setContentProvider(contentProvider);
+		treeViewer.setInput(MonitorTreeContentProvider.ROOT);
+		treeViewer.setLabelProvider(new TreeLabelProvider());
+
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(tree, ContextIds.VIEW_TREE);
+	
+		Composite detailsPanel = new Composite(treePanel, SWT.NONE);
+		layout = new GridLayout();
+		layout.numColumns = 1;
+		layout.marginHeight = 2;
+		layout.marginWidth = 0;
+		detailsPanel.setLayout(layout);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
+		data.widthHint = 200;
+		detailsPanel.setLayoutData(data);
+
+		final Label label = new Label(detailsPanel, SWT.NONE);
+		label.setText(NLS.bind(Messages.viewTime, ""));
+		label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+
+		final Label label2 = new Label(detailsPanel, SWT.NONE);
+		label2.setText(NLS.bind(Messages.viewResponseTime, ""));
+		label2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+		
+		final Label label3 = new Label(detailsPanel, SWT.NONE);
+		label3.setText(NLS.bind(Messages.viewType, ""));
+		label3.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
+		
+		// create center and right panels
+		SashForm sashFchild = new SashForm(sashFparent, SWT.HORIZONTAL);
+		layout = new GridLayout();
+		layout.numColumns = 2;
+		layout.horizontalSpacing = 2;
+		layout.verticalSpacing = 4;
+		sashFchild.setLayout(layout);
+		sashFparent.setWeights(new int[] { 30, 70 });
+		
+		// request panel
+		Composite request = new Composite(sashFchild, SWT.NONE);
+		layout = new GridLayout();
+		layout.verticalSpacing = 3;
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		request.setLayout(layout);
+		request.setLayoutData(new GridData(GridData.FILL_BOTH));
+		
+		Composite requestHeader = new Composite(request, SWT.NONE);
+		layout = new GridLayout();
+		layout.verticalSpacing = 1;
+		layout.numColumns = 2;
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		layout.marginLeft = 2;
+		data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+		requestHeader.setLayout(layout);
+		requestHeader.setLayoutData(data);
+		
+		final Label requestLabel = new Label(requestHeader, SWT.NONE);
+		requestLabel.setText(NLS.bind(Messages.viewRequest, ""));
+		requestLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		final Combo requestViewerCombo = new Combo(requestHeader, SWT.DROP_DOWN | SWT.READ_ONLY);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_END);
+		data.verticalSpan = 2;
+		requestViewerCombo.setLayoutData(data);
+		
+		final Label requestSizeLabel = new Label(requestHeader, SWT.NONE);
+		requestSizeLabel.setText(NLS.bind(Messages.viewSize, ""));
+		requestSizeLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		// response panel
+		Composite response = new Composite(sashFchild, SWT.NONE);
+		layout = new GridLayout();
+		layout.verticalSpacing = 3;
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		response.setLayout(layout);
+		response.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+		Composite responseHeader = new Composite(response, SWT.NONE);
+		layout = new GridLayout();
+		layout.verticalSpacing = 1;
+		layout.numColumns = 2;
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		layout.marginLeft = 2;
+		data = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING);
+		responseHeader.setLayout(layout);
+		responseHeader.setLayoutData(data);
+		
+		final Label responseLabel = new Label(responseHeader, SWT.NONE);
+		responseLabel.setText(NLS.bind(Messages.viewResponse, ""));
+		responseLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		final Combo responseViewerCombo = new Combo(responseHeader, SWT.DROP_DOWN | SWT.READ_ONLY);
+		data = new GridData(GridData.HORIZONTAL_ALIGN_END);
+		data.verticalSpan = 2;
+		responseViewerCombo.setLayoutData(data);
+		
+		final Label responseSizeLabel = new Label(responseHeader, SWT.NONE);
+		responseSizeLabel.setText(NLS.bind(Messages.viewSize, ""));
+		responseSizeLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		// viewer manager
+		vm = new ViewerManager(request, response);
+		requestViewers = vm.getRequestViewers();
+		responseViewers = vm.getResponseViewers();
+		
+		// set up the viewer combo boxes
+		Iterator iterator = requestViewers.iterator();
+		int ctr = 0;
+		while (iterator.hasNext()) {
+			Viewer viewer = (Viewer) iterator.next();
+			requestViewerCombo.add(viewer.getLabel(), ctr);
+			if (viewer.getId().equals(DEFAULT_VIEWER)) {
+				requestViewerCombo.select(ctr); 
+				vm.setRequestViewer(viewer);
+			}
+			ctr++;
+		}
+		requestViewerCombo.addSelectionListener(new SelectionListener() {
+			public void widgetSelected(SelectionEvent e) {
+				Viewer viewer = (Viewer) requestViewers.get(requestViewerCombo.getSelectionIndex());
+				if (currentRequest != null && viewer != null)
+					currentRequest.setProperty("request-viewer", viewer.getId());
+				vm.setRequestViewer(viewer);
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				// ignore
+			}
+		});
+		requestHeader.layout(true);
+		
+		iterator = responseViewers.iterator();
+		ctr = 0;
+		while (iterator.hasNext()) {
+			Viewer viewer = (Viewer) iterator.next();
+			responseViewerCombo.add(viewer.getLabel(), ctr);
+			if (viewer.getId().equals(DEFAULT_VIEWER)) {
+				responseViewerCombo.select(ctr); 
+				vm.setResponseViewer(viewer);
+			}
+			ctr++;
+		}
+		responseViewerCombo.addSelectionListener(new SelectionListener() {
+			public void widgetSelected(SelectionEvent e) {
+				Viewer viewer = (Viewer) responseViewers.get(responseViewerCombo.getSelectionIndex());
+				if (currentRequest != null && viewer != null)
+					currentRequest.setProperty("response-viewer", viewer.getId());
+				vm.setResponseViewer(viewer);
+			}
+
+			public void widgetDefaultSelected(SelectionEvent e) {
+				// ignore
+			}
+		});
+		responseHeader.layout(true);
+
+		// selection listener
+		treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+			public void selectionChanged(SelectionChangedEvent event) {
+				ISelection selection = event.getSelection();
+
+				currentRequest = null;
+				if (selection != null && !selection.isEmpty()) {
+					StructuredSelection sel = (StructuredSelection) selection;
+					currentSelection = sel;
+					Object obj = sel.iterator().next();
+					if (obj instanceof Request)
+						currentRequest = (Request) obj;
+				}
+	
+				if (currentRequest != null) {
+					label.setText(NLS.bind(Messages.viewTime, format.format(currentRequest.getDate())));
+	
+					if (currentRequest.getResponseTime() == -1)
+						label2.setText(NLS.bind(Messages.viewResponseTime, ""));
+					else {
+						String time = NLS.bind(Messages.viewResponseTimeFormat, currentRequest.getResponseTime() + "");
+						label2.setText(NLS.bind(Messages.viewResponseTime, time));
+					}
+					label3.setText(NLS.bind(Messages.viewType, currentRequest.getProtocol()));
+	
+					// request information
+					requestLabel.setText(NLS.bind(Messages.viewRequest, "localhost:" + currentRequest.getLocalPort()));
+					requestSizeLabel.setText(getSizeString(currentRequest.getRequest(Request.CONTENT), currentRequest.getRequest(Request.ALL)));
+	
+					// response information
+					responseLabel.setText(NLS.bind(Messages.viewResponse, currentRequest.getRemoteHost() + ":" + currentRequest.getRemotePort()));
+					responseSizeLabel.setText(getSizeString(currentRequest.getResponse(Request.CONTENT), currentRequest.getResponse(Request.ALL)));
+					
+					vm.setRequest(currentRequest);
+					
+					Viewer viewer = vm.findViewer((String) currentRequest.getProperty("request-viewer"));
+					if (viewer == null)
+						viewer = vm.findViewer(DEFAULT_VIEWER);
+					if (viewer != null) {
+						vm.setRequestViewer(viewer);
+						requestViewerCombo.select(requestViewers.indexOf(viewer));
+					}
+					
+					viewer = vm.findViewer((String) currentRequest.getProperty("response-viewer"));
+					if (viewer == null && currentRequest.getName() != null)
+						viewer = vm.getDefaultViewer(currentRequest.getName());
+					if (viewer != null) {
+						vm.setResponseViewer(viewer);
+						responseViewerCombo.select(responseViewers.indexOf(viewer));
+					}
+				} else {
+					label.setText(NLS.bind(Messages.viewTime, ""));
+					label2.setText(NLS.bind(Messages.viewResponseTime, ""));
+					requestLabel.setText(NLS.bind(Messages.viewRequest, ""));
+					requestSizeLabel.setText(NLS.bind(Messages.viewSize, ""));
+					responseLabel.setText(NLS.bind(Messages.viewResponse, ""));
+					responseSizeLabel.setText(NLS.bind(Messages.viewSize, ""));
+					vm.setRequest(currentRequest);
+				}
+			}
+		});
+		treeViewer.expandToLevel(2);
+		
+		// create a menu manager for a context menu
+		MenuManager menuManager = new MenuManager();
+		menuManager.setRemoveAllWhenShown(true);
+		menuManager.addMenuListener(new IMenuListener() {
+			public void menuAboutToShow(IMenuManager menu) {
+				menu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+				menu.add(preferenceAction);
+			}
+		});
+
+		// create the menu
+		Menu menu = menuManager.createContextMenu(treeViewer.getControl());
+		treeViewer.getControl().setMenu(menu);
+		
+		// register the menu with the platform
+		getSite().registerContextMenu(menuManager, treeViewer);
+        
+		initializeActions();
+	}
+	
+	protected String getSizeString(byte[] a, byte[] b) {
+		String aa = "0";
+		String bb = "0";
+		if (a != null)
+			aa = a.length + "";
+		if (b != null)
+			bb = b.length + "";
+		String size = NLS.bind(Messages.viewSizeFormat, new Object[] { aa, bb});
+		return NLS.bind(Messages.viewSize, size);
+	}
+
+	public void dispose() {
+		super.dispose();
+		treeViewer = null;
+		view = null;
+	}
+
+	/**
+	 * Initialize the tool-bar and menu actions.
+	 */
+	public void initializeActions() {
+		final IAction pinAction = new Action() {
+			public void run() {
+				Display.getDefault().asyncExec(new Runnable() {
+					public void run() {
+						boolean pin = MonitorUIPlugin.getPinViewPreference();
+						MonitorUIPlugin.setPinViewPreference(!pin);
+					}
+				});
+			}
+		};
+		pinAction.setChecked(false);
+		pinAction.setToolTipText(Messages.actionPin);
+		pinAction.setImageDescriptor(MonitorUIPlugin.getImageDescriptor(MonitorUIPlugin.IMG_ELCL_PIN));
+		pinAction.setHoverImageDescriptor(MonitorUIPlugin.getImageDescriptor(MonitorUIPlugin.IMG_CLCL_PIN));
+		pinAction.setDisabledImageDescriptor(MonitorUIPlugin.getImageDescriptor(MonitorUIPlugin.IMG_DLCL_PIN));
+		
+		
+		final IAction sortByResponseTimeAction = new Action() {
+			public void run() {
+				Display.getDefault().asyncExec(new Runnable() {
+					public void run() {
+						if (treeViewer.getComparator() == null) {
+							setChecked(true);
+							treeViewer.setComparator(new RequestComparator());
+						} else {
+							setChecked(false);
+							treeViewer.setComparator(null);
+						}
+					}
+				});
+			}
+		};
+		sortByResponseTimeAction.setChecked(false);
+		sortByResponseTimeAction.setToolTipText(Messages.actionSortByResponseTime);
+		sortByResponseTimeAction.setImageDescriptor(MonitorUIPlugin.getImageDescriptor(MonitorUIPlugin.IMG_ELCL_SORT_RESPONSE_TIME));
+		sortByResponseTimeAction.setHoverImageDescriptor(MonitorUIPlugin.getImageDescriptor(MonitorUIPlugin.IMG_CLCL_SORT_RESPONSE_TIME));
+		sortByResponseTimeAction.setDisabledImageDescriptor(MonitorUIPlugin.getImageDescriptor(MonitorUIPlugin.IMG_DLCL_SORT_RESPONSE_TIME));
+	
+		IAction clearAction = new Action() {
+			public void run() {
+				MonitorUIPlugin.getInstance().clearRequests();
+				clear();
+			}
+		};
+		clearAction.setToolTipText(Messages.actionClearToolTip);
+		clearAction.setImageDescriptor(MonitorUIPlugin.getImageDescriptor(MonitorUIPlugin.IMG_ELCL_CLEAR));
+		clearAction.setHoverImageDescriptor(MonitorUIPlugin.getImageDescriptor(MonitorUIPlugin.IMG_CLCL_CLEAR));
+		clearAction.setDisabledImageDescriptor(MonitorUIPlugin.getImageDescriptor(MonitorUIPlugin.IMG_DLCL_CLEAR));
+
+		httpHeaderAction = new Action() {
+			public void run() {
+				Display.getDefault().asyncExec(new Runnable() {
+					public void run() {
+						boolean b = vm.getDisplayHeaderInfo();
+						vm.setDisplayHeaderInfo(!b);
+						setChecked(!b);
+					}
+				});
+			}
+		};
+		httpHeaderAction.setChecked(vm.getDisplayHeaderInfo());
+		httpHeaderAction.setText(Messages.actionShowHeader);
+
+		preferenceAction = new Action() {
+			public void run() {
+				showPreferencePage();
+			}
+		};
+		preferenceAction.setText(Messages.actionProperties);
+		
+		
+		IToolBarManager tbm = getViewSite().getActionBars().getToolBarManager();
+		tbm.add(sortByResponseTimeAction);
+		tbm.add(clearAction);
+		tbm.add(pinAction);
+		
+		IContentFilter[] filters = MonitorPlugin.getInstance().getContentFilters();
+		IMenuManager menuManager = getViewSite().getActionBars().getMenuManager();
+		menuManager.add(httpHeaderAction);
+		for (IContentFilter cf : filters) {
+			FilterAction action = new FilterAction(vm, cf);
+			menuManager.add(action);
+		}
+		menuManager.add(new Separator());
+		menuManager.add(preferenceAction);
+	}
+
+	protected boolean showPreferencePage() {
+		PreferenceManager manager = PlatformUI.getWorkbench().getPreferenceManager();
+		IPreferenceNode node = manager.find("org.eclipse.debug.ui.DebugPreferencePage").findSubNode("org.eclipse.wst.internet.monitor.preferencePage");
+		PreferenceManager manager2 = new PreferenceManager();
+		manager2.addToRoot(node);
+		
+		final PreferenceDialog dialog = new PreferenceDialog(getSite().getShell(), manager2);
+		final boolean[] result = new boolean[] { false };
+		BusyIndicator.showWhile(getSite().getShell().getDisplay(), new Runnable() {
+			public void run() {
+				dialog.create();
+				if (dialog.open() == Window.OK)
+					result[0] = true;
+			}
+		});
+		return result[0];
+	}
+
+	/**
+	 * Open a request.
+	 * 
+	 * @param request the request
+	 */
+	public static void open(final Request request) {
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {
+				try {
+					IWorkbench workbench = MonitorUIPlugin.getInstance().getWorkbench();
+					IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
+					
+					IWorkbenchPage page = workbenchWindow.getActivePage();
+					
+					IViewPart view2 = page.findView(VIEW_ID);
+					
+					if (view2 != null)
+						page.bringToTop(view2);
+					else
+						page.showView(VIEW_ID);
+					
+					if (view != null && !MonitorUIPlugin.getPinViewPreference())
+						view.setSelection(request);
+				} catch (Exception e) {
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error opening TCP/IP view", e);
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * 
+	 */
+	public void setFocus() {
+		if (tree != null)
+			tree.setFocus();
+	}
+}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/RequestComparator.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/RequestComparator.java
new file mode 100644
index 0000000..cf7b68a
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/RequestComparator.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.view;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+
+public class RequestComparator extends ViewerComparator {
+	/*
+	 * @see ViewerSorter#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
+	 */
+	public int compare(Viewer viewer, Object o1, Object o2) {
+		if (o1 instanceof Request && o2 instanceof Request) {
+			Request r1 = (Request) o1;
+			Request r2 = (Request) o2;
+			if (r1.getResponseTime() < r2.getResponseTime())
+				return -1;
+			return 1;
+		}
+		return super.compare(viewer, o1, o2);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ResendMessageAction.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ResendMessageAction.java
new file mode 100644
index 0000000..0df04de
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ResendMessageAction.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.view;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.wst.internet.monitor.core.internal.MonitorManager;
+import org.eclipse.wst.internet.monitor.core.internal.http.ResendHTTPRequest;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+/**
+ * Resends the selected request and adds the result to the request/response tree.
+ */
+public class ResendMessageAction implements IViewActionDelegate{
+	protected ISelection selection = null;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart view) {
+		// do nothing
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		if (selection != null) {
+			Object element = ((StructuredSelection) selection).getFirstElement();
+			if (element != null && element instanceof Request) {
+				Request req = (Request) element;
+				ResendHTTPRequest newReq = MonitorManager.createResendRequest(req);
+				MonitorManager.getInstance().addResendRequest(req, newReq);
+				TreeViewer treeViewer = MonitorView.view.treeViewer;
+				treeViewer.add(req, newReq);
+				treeViewer.setSelection(new StructuredSelection(newReq), false);
+				newReq.sendRequest();
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection2) {
+		this.selection = selection2;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/SendModifiedMessageAction.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/SendModifiedMessageAction.java
new file mode 100644
index 0000000..830b433
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/SendModifiedMessageAction.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.view;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.wst.internet.monitor.core.internal.http.ResendHTTPRequest;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+import org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer;
+import org.eclipse.wst.internet.monitor.ui.internal.viewers.HeaderViewer;
+/**
+ * Send a modified message.
+ */
+public class SendModifiedMessageAction implements IViewActionDelegate{
+	ISelection selection = null;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
+	 */
+	public void init(IViewPart view) {
+		// do nothing
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction action) {
+		if (selection != null) {
+			Object element = ((StructuredSelection) selection).getFirstElement();
+			if (element != null && element instanceof ResendHTTPRequest) {
+				ResendHTTPRequest req = (ResendHTTPRequest) element;
+				ContentViewer curViewer = MonitorView.view.vm.getCurrentRequestViewer();
+				HeaderViewer curHeaderViewer = MonitorView.view.vm.getCurrentRequestHeaderViewer();
+				req.setRequest(curViewer.getContent(), Request.CONTENT);
+				
+				if (curHeaderViewer != null)
+					req.setRequest(curHeaderViewer.getContent(), Request.TRANSPORT);
+
+				req.sendRequest();
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction action, ISelection selection2) {
+		this.selection = selection2;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/TreeLabelProvider.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/TreeLabelProvider.java
new file mode 100644
index 0000000..99c1df3
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/TreeLabelProvider.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.view;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.wst.internet.monitor.core.internal.http.ResendHTTPRequest;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+import org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin;
+/**
+ * A label provider for the monitor server view.
+ */
+public class TreeLabelProvider implements ILabelProvider {
+	/**
+	 * TreeLabelProvider constructor comment.
+	 */
+	public TreeLabelProvider() {
+		super();
+	}
+
+	/*
+	 * Adds a listener to this label provider.
+	 */
+	public void addListener(ILabelProviderListener listener) {
+		// do nothing
+	}
+
+	/*
+	 * Disposes of this label provider.
+	 */
+	public void dispose() {
+		// do nothing
+	}
+
+	/*
+	 * Returns the image for the label of the given element for use
+	 * in the given viewer.
+	 */
+	public Image getImage(Object element) {
+		if (element instanceof Request) {
+			if (element instanceof ResendHTTPRequest) {
+				if (!((ResendHTTPRequest) element).hasBeenSent())
+					return MonitorUIPlugin.getImage(MonitorUIPlugin.IMG_RESEND_REQUEST_RESPONSE);
+			}
+			return MonitorUIPlugin.getImage(MonitorUIPlugin.IMG_REQUEST_RESPONSE);
+		}
+		return MonitorUIPlugin.getImage(MonitorUIPlugin.IMG_HOST);
+	}
+
+	/*
+	 * Returns the text for the label of the given element for use
+	 * in the given viewer.
+	 */
+	public String getText(Object element) {
+		if (element instanceof Request) {
+			Request call = (Request) element;
+			return call.getName();
+		} else if (element instanceof Integer) {
+			Integer in = (Integer) element;
+			return "localhost:" + in.intValue();
+		} else
+			return element.toString();
+	}
+
+	/*
+	 * Returns whether the label would be affected 
+	 * by a change to the given property of the given element.
+	 */
+	public boolean isLabelProperty(Object element, String property) {
+		return false;
+	}
+	
+	/*
+	 * Removes a listener to this label provider.
+	 */
+	public void removeListener(ILabelProviderListener listener) {
+		// do nothing
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/Viewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/Viewer.java
new file mode 100644
index 0000000..c870a4f
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/Viewer.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.view;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.wst.internet.monitor.ui.internal.Trace;
+import org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer;
+/**
+ * 
+ */
+public class Viewer {
+	private IConfigurationElement element;
+
+	/**
+	 * Create a new content viewer.
+	 * 
+	 * @param element a configuration element
+	 */
+	public Viewer(IConfigurationElement element) {
+		super();
+		this.element = element;
+	}
+
+	public String getId() {
+		return element.getAttribute("id");
+	}
+
+	public String getLabel() {
+		String label = element.getAttribute("label");
+		if (label == null)
+			return "n/a";
+		return label;
+	}
+
+	/**
+	 * Create an instance of the viewer.
+	 * 
+	 * @return the viewer, or <code>null</code> if it couldn't be loaded
+	 */
+	public ContentViewer createViewer() {
+		try {
+			return (ContentViewer) element.createExecutableExtension("class");
+		} catch (Exception e) {
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not create viewer" + toString(), e);
+			}
+			return null;
+		}
+	}
+
+	public boolean isRequestViewer() {
+		return element.getAttribute("type").toLowerCase().indexOf("request") >= 0;
+	}
+
+	public boolean isResponseViewer() {
+		return element.getAttribute("type").toLowerCase().indexOf("response") >= 0;
+	}
+
+	/**
+	 * Return a string representation of this object.
+	 * 
+	 * @return String
+	 */
+	public String toString() {
+		return "ContentViewer[" + getId() + "]";
+	}
+}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ViewerManager.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ViewerManager.java
new file mode 100644
index 0000000..9af565f
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/ViewerManager.java
@@ -0,0 +1,330 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.view;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.eclipse.core.runtime.*;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.wst.internet.monitor.core.internal.IContentFilter;
+import org.eclipse.wst.internet.monitor.core.internal.http.ResendHTTPRequest;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+import org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin;
+import org.eclipse.wst.internet.monitor.ui.internal.Trace;
+import org.eclipse.wst.internet.monitor.ui.internal.custom.SashForm;
+import org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer;
+import org.eclipse.wst.internet.monitor.ui.internal.viewers.ByteViewer;
+import org.eclipse.wst.internet.monitor.ui.internal.viewers.HeaderViewer;
+/**
+ * 
+ */
+public class ViewerManager {
+	private boolean displayHeaderInf;
+
+	protected ContentViewer reqViewer;
+	protected ContentViewer respViewer;
+	protected Viewer requestViewer;
+	protected Viewer responseViewer;
+
+	protected HeaderViewer reqHeader;
+	protected HeaderViewer respHeader;
+
+	protected Composite reqComp;
+	protected Composite respComp;
+
+	protected List<Viewer> viewers;
+
+	protected Request request;
+
+	protected SashForm reqSash;
+	protected SashForm respSash;
+
+	protected List<IContentFilter> filters = new ArrayList<IContentFilter>();
+
+	public ViewerManager(Composite reqParent, Composite respParent) {
+		reqSash = new SashForm(reqParent, SWT.VERTICAL);
+		GridLayout layout = new GridLayout();
+		layout.numColumns = 1;
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 0;
+		layout.marginWidth = 0;
+		reqSash.setLayout(layout);
+		reqSash.setLayoutData(new GridData(GridData.FILL_BOTH));
+		
+		respSash = new SashForm(respParent, SWT.VERTICAL);
+		layout = new GridLayout();
+		layout.numColumns = 1;
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 0;
+		layout.marginWidth = 0;
+		respSash.setLayout(layout);
+		respSash.setLayoutData(new GridData(GridData.FILL_BOTH));
+		
+		reqComp = reqSash;
+		respComp = respSash;
+		
+		reqHeader = new HeaderViewer(reqSash, HeaderViewer.REQUEST_HEADER);
+		respHeader = new HeaderViewer(respSash, HeaderViewer.RESPONSE_HEADER);
+		reqViewer = new ByteViewer();
+		reqViewer.init(reqSash);
+		respViewer = new ByteViewer();
+		respViewer.init(respSash);
+		
+		reqSash.setWeights(new int[] { 10, 90 });
+		respSash.setWeights(new int[] { 10, 90 });
+		
+		setDisplayHeaderInfo(MonitorUIPlugin.getShowHeaderPreference());
+		loadAvailableViewers();
+	}
+
+	protected Viewer getDefaultViewer(String name) {
+		if (name == null)
+			return null;
+		
+		String name2 = name.toLowerCase(); 
+		if (name2.endsWith(".xml"))
+			return findViewer("org.eclipse.wst.internet.monitor.viewers.xml");
+		else if (name2.endsWith(".html"))
+			return findViewer("org.eclipse.wst.internet.monitor.viewers.browser");
+		else if (name2.endsWith(".gif") || name2.endsWith(".jpg") ||
+				name2.endsWith(".jpeg") || name2.endsWith(".png"))
+			return findViewer("org.eclipse.wst.internet.monitor.viewers.image");
+		else
+			return findViewer("org.eclipse.wst.internet.monitor.viewers.byte");
+	}
+
+	protected Viewer findViewer(String id) {
+		if (id == null)
+			return null;
+		
+		Iterator iterator = viewers.iterator();
+		while (iterator.hasNext()) {
+			Viewer viewer = (Viewer) iterator.next();
+			if (id.equals(viewer.getId()))
+				return viewer;
+		}
+		return null;
+	}
+
+	private void loadAvailableViewers() {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IConfigurationElement[] cf = registry.getConfigurationElementsFor(MonitorUIPlugin.PLUGIN_ID, "viewers");
+		int size = cf.length;
+		viewers = new ArrayList<Viewer>(size);
+		for (IConfigurationElement ce : cf)
+			viewers.add(new Viewer(ce));
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.internet.monitor.internal.view.IViewerManager#setDisplayHeaderInfo(boolean)
+	 */
+	public void setDisplayHeaderInfo(boolean b) {
+		displayHeaderInf = b;
+		reqHeader.setDisplayHeader(b);
+		respHeader.setDisplayHeader(b);
+		reqSash.setSimpleLayout(b);
+		respSash.setSimpleLayout(b);
+		reqSash.layout(true);
+		respSash.layout(true);
+		
+		MonitorUIPlugin.setShowHeaderPreference(b);
+		if (b) {
+			reqHeader.setEditable(false);
+			if (request instanceof ResendHTTPRequest && request.getResponse(Request.TRANSPORT) == null) {
+				reqHeader.setEditable(true);
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.internet.monitor.internal.view.IViewerManager#getDisplayHeaderInfo()
+	 */
+	public boolean getDisplayHeaderInfo() {
+		return displayHeaderInf;
+	}
+
+	public void setRequest(Request rr) {
+		// maintain the state of the request and request header if they've been modified.
+		if (request instanceof ResendHTTPRequest && request.getResponse(Request.ALL) == null) {
+			ResendHTTPRequest resRequest = (ResendHTTPRequest) request;
+			//EditableContentViewer editViewer = (ContentViewer) reqViewer;
+			byte[] content = reqViewer.getContent();
+			byte[] b = resRequest.getRequest(Request.CONTENT);
+			if (content != null && b != null && !MonitorUIPlugin.parse(b).equals(MonitorUIPlugin.parse(content))) {
+				resRequest.setRequest(content, Request.CONTENT);
+			}
+			byte[] header = reqHeader.getContent();
+			b = resRequest.getRequest(Request.TRANSPORT);
+			if (header != null && b != null && !MonitorUIPlugin.parse(b).equals(MonitorUIPlugin.parse(header))) {
+				resRequest.setRequest(header, Request.TRANSPORT);
+			}
+		}
+		reqHeader.setRequestResponse(rr);
+		respHeader.setRequestResponse(rr);
+		byte[] b = null;
+		if (rr != null)
+			b = filter(rr.getRequest(Request.CONTENT));
+		reqViewer.setContent(b);
+		b = null;
+		if (rr != null)
+			b = filter(rr.getResponse(Request.CONTENT));
+		respViewer.setContent(b);
+		request = rr;
+		
+		// set the editor to editable if the request hasn't been sent and the
+		// editor can be set as editable
+		if (request instanceof ResendHTTPRequest && request.getResponse(Request.ALL) == null) {
+			if (displayHeaderInf)
+				reqHeader.setEditable(true);
+			
+			reqViewer.setEditable(true);
+		} else {
+			if (displayHeaderInf)
+				reqHeader.setEditable(false);
+			
+			reqViewer.setEditable(false);
+		}
+	}
+
+	public void addFilter(IContentFilter filter) {
+		filters.add(filter);
+		setRequest(request);
+	}
+
+	public void removeFilter(IContentFilter filter) {
+		filters.remove(filter);
+		setRequest(request);
+	}
+
+	protected byte[] filter(byte[] b) {
+		if (b == null)
+			return null;
+		Iterator iterator = filters.iterator();
+		while (iterator.hasNext()) {
+			IContentFilter filter = (IContentFilter) iterator.next();
+			try {
+				b = filter.filter(request, false, b);
+			} catch (Exception e) {
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Error while filtering with " + filter.getId(), e);
+				}
+			}
+		}
+		return b;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#getRequestViewers()
+	 */
+	public List getRequestViewers() {
+		Iterator iterator = viewers.iterator();
+		List<Viewer> temp = new ArrayList<Viewer>();
+		while (iterator.hasNext()) {
+			Viewer viewer = (Viewer) iterator.next();
+			if (viewer.isRequestViewer())
+				temp.add(viewer);
+		}
+		return temp;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#getResponseViewers()
+	 */
+	public List getResponseViewers() {
+		Iterator iterator = viewers.iterator();
+		List<Viewer> temp = new ArrayList<Viewer>();
+		while (iterator.hasNext()) {
+			Viewer viewer = (Viewer) iterator.next();
+			if (viewer.isResponseViewer())
+				temp.add(viewer);
+		}
+		return temp;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#setRequestViewer(java.lang.String)
+	 */
+	public void setRequestViewer(Viewer viewer) {
+		if (viewer != null && viewer.equals(requestViewer))
+			return;
+		
+		// call set request to save and reset the request
+		setRequest(request);
+		reqViewer.dispose();
+		
+		requestViewer = viewer;
+		if (viewer != null)
+			reqViewer = viewer.createViewer();
+		else
+			reqViewer = null;
+		if (reqViewer == null)
+			return;
+		
+		reqViewer.init(reqComp);
+		//reqViewer.setRequestResponse(rr);
+		byte[] b = null;
+		if (request != null) {
+			b = filter(request.getRequest(Request.CONTENT));
+			// set the editor to editable if the request hasn't been sent and the
+			// editor can be set as editable
+			if (request instanceof ResendHTTPRequest && request.getResponse(Request.TRANSPORT) == null) {
+				reqViewer.setEditable(true);
+			} else {
+				reqViewer.setEditable(false);
+			}
+		}
+		reqViewer.setContent(b);
+		reqComp.layout(true);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.tcpip.monitor.internal.view.IViewerManager#setResponseViewer(java.lang.String)
+	 */
+	public void setResponseViewer(Viewer viewer) {
+		if (viewer != null && viewer.equals(responseViewer))
+			return;
+		respViewer.dispose();
+		
+		responseViewer = viewer;
+		if (viewer != null)
+			respViewer = viewer.createViewer();
+		else
+			respViewer = null;
+		if (respViewer == null)
+			return;
+		
+		respViewer.init(respComp);
+		//respViewer.setRequestResponse(rr);
+		byte[] b = null;
+		if (request != null)
+			b = filter(request.getResponse(Request.CONTENT));
+		respViewer.setContent(b);
+		respComp.layout(true);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.internet.monitor.ui.internal.view.IViewerManager#getCurrentRequestViewer()
+	 */
+	public ContentViewer getCurrentRequestViewer() {
+		return reqViewer;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.wst.internet.monitor.ui.internal.view.IViewerManager#getCurrentRequestHeaderViewer()
+	 */
+	public HeaderViewer getCurrentRequestHeaderViewer() {
+		return reqHeader;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/BrowserViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/BrowserViewer.java
new file mode 100644
index 0000000..5b7a361
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/BrowserViewer.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.viewers;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.wst.internet.monitor.ui.internal.Messages;
+import org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin;
+import org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer;
+/**
+ * A browser viewer.
+ */
+public class BrowserViewer extends ContentViewer {
+	protected static final byte CR = '\r';
+	protected static final byte LF = '\n';
+
+	protected Browser browser;
+
+	protected byte[] content;
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#init(Composite)
+	 */
+	public void init(Composite parent) {
+		browser = new Browser(parent, SWT.NONE);
+		browser.addListener(SWT.MenuDetect, new Listener() {
+			public void handleEvent(Event event) {
+				event.doit = false;
+			}
+		});
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#setContent(byte[])
+	 */
+	public void setContent(byte[] b) {
+		content = b;
+		if (b == null || b.length == 0) {
+			browser.setText(Messages.htmlViewInvalid);
+		} else {
+			b = MonitorUIPlugin.unzip(b);
+			
+			int trimFront = 0;
+			int trimBack = 0;
+			int len = b.length - 1;
+			while (trimFront < b.length && (b[trimFront] == CR || b[trimFront] == LF))
+				trimFront++;
+			while (trimBack < b.length && b.length > 0 && (b[len - trimBack] == CR || b[len - trimBack] == LF))
+				trimBack++;
+			
+			if (trimFront + trimBack > 0) {
+				if (trimFront + trimBack > b.length) {
+					b = new byte[0];
+				} else {
+					byte[] temp = b;
+					b = new byte[temp.length - trimBack - trimFront];
+					for (int i = trimFront; i < temp.length - trimBack; i++) {
+						b[i - trimFront] = temp[i];
+					}
+				}
+			}
+			browser.setText(new String(b));
+		}
+	}
+
+	/**
+	 * @see ContentViewer#getContent()
+	 */
+	public byte[] getContent() {
+		return content;
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#dispose()
+	 */
+	public void dispose() {
+		browser.dispose();
+		browser = null;
+		content = null;
+	}
+}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ByteViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ByteViewer.java
new file mode 100644
index 0000000..3082e7c
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ByteViewer.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.viewers;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.internet.monitor.ui.internal.ContextIds;
+import org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin;
+import org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer;
+/**
+ * A basic byte viewer.
+ */
+public class ByteViewer extends ContentViewer {
+	protected Text text;
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#init(Composite)
+	 */
+	public void init(Composite parent) {
+		text = new Text(parent, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL);
+		Display display = parent.getDisplay();
+		text.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		text.setForeground(display.getSystemColor(SWT.COLOR_LIST_FOREGROUND));
+		text.setFont(JFaceResources.getTextFont());
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(text, ContextIds.VIEW_RESPONSE);
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#setEditable(boolean)
+	 */
+	public void setEditable(boolean editable) {
+		text.setEditable(editable);
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#getContent()
+	 */
+	public byte[] getContent() {
+		if (text == null)
+			return new byte[0];
+		
+		String content = text.getText().trim();
+		if (content.equals(""))
+			return new byte[0];
+		
+		// Need to ensure that there is a newline at the end of the content
+		// getBytes() removes the newline
+		byte[] twoNewlines = new byte[] { '\015', '\012' };
+		byte[] contentBytes = content.getBytes();
+		byte[] retBytes = new byte[contentBytes.length + 2];
+		System.arraycopy(contentBytes, 0, retBytes, 0, contentBytes.length);
+		System.arraycopy(twoNewlines, 0, retBytes, contentBytes.length, 2);
+		return retBytes;
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#setContent(byte[])
+	 */
+	public void setContent(byte[] b) {
+		String out = "";
+		if (b != null) {
+			b = MonitorUIPlugin.unzip(b);
+			out = MonitorUIPlugin.parse(b);
+		}
+		
+		String lineSeparator = System.getProperty("line.separator");
+		int ls = lineSeparator.length();
+		if (out.length() > ls) {
+			while (out.substring(0, ls).indexOf(lineSeparator) >= 0)
+				out = out.substring(ls, out.length()); 
+		}
+		
+		text.setText(out);
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#dispose()
+	 */
+	public void dispose() {
+		text.dispose();
+		text = null;
+	}
+}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/HeaderViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/HeaderViewer.java
new file mode 100644
index 0000000..ec4f4cf
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/HeaderViewer.java
@@ -0,0 +1,172 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.viewers;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.internet.monitor.core.internal.provisional.Request;
+import org.eclipse.wst.internet.monitor.ui.internal.ContextIds;
+import org.eclipse.wst.internet.monitor.ui.internal.Messages;
+import org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin;
+import org.eclipse.wst.internet.monitor.ui.internal.custom.MonitorStackLayout;
+/**
+ * An transport (header) viewer.
+ */
+public class HeaderViewer {
+	protected boolean displayHeader;
+
+	protected Composite headerComp;
+	protected MonitorStackLayout layout;
+
+	protected Label headerLabel;
+	protected Text headerText;
+	protected Request rr;
+	protected byte msg;
+
+	protected boolean hidden;
+
+	/**
+	 * Request header constant.
+	 */
+	public static byte REQUEST_HEADER = 0;
+	
+	/**
+	 * Response header constant.
+	 */
+	public static byte RESPONSE_HEADER = 1;
+
+	/**
+	 * Create a new header viewer.
+	 * 
+	 * @param parent
+	 * @param message
+	 */
+	public HeaderViewer(Composite parent, byte message) {
+		displayHeader = true;
+		hidden = false;
+		
+		headerComp = new Composite(parent, SWT.NONE);
+		layout = new MonitorStackLayout();
+		headerComp.setLayout(layout);
+		
+		headerText = new Text(headerComp, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL);
+		Display display = headerComp.getDisplay();
+		headerText.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		headerText.setForeground(display.getSystemColor(SWT.COLOR_LIST_FOREGROUND));
+		headerText.setFont(JFaceResources.getTextFont());
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(headerText, ContextIds.VIEW_RESPONSE);
+		
+		headerLabel = new Label(headerComp, SWT.NONE);
+		
+		layout.topControl = headerText;
+		
+		rr = null;
+		msg = message;
+
+		setDisplayHeader(false);
+	}
+
+	/**
+	 * 
+	 * @param request
+	 */
+	public void setRequestResponse(Request request) {
+		rr = request;
+		if (!hidden)
+			getView();
+	}
+
+	/**
+	 * 
+	 * @param b
+	 */
+	public void setDisplayHeader(boolean b) {
+		if (displayHeader != b) {
+			displayHeader = b;
+			
+			if (displayHeader)
+				layout.topControl = headerText;
+			else
+				layout.topControl = headerLabel;
+			
+			headerComp.layout(true);
+			getView();
+		}
+	}
+
+	private void getView() {
+		String out = "";
+		if (rr != null) {
+			if (msg == REQUEST_HEADER) {
+				byte[] b = rr.getRequest(Request.TRANSPORT);
+				if (b != null)
+					out = MonitorUIPlugin.parse(b);
+			} else if (msg == RESPONSE_HEADER) {
+				byte[] b = rr.getResponse(Request.TRANSPORT);
+				if (b != null)
+					out = MonitorUIPlugin.parse(b);
+			}
+		}
+		
+		if (displayHeader)
+			headerText.setText(out);
+		else {
+			String lineSeparator = System.getProperty("line.separator");
+			int index = out.indexOf(lineSeparator);
+			if (index > 0)
+				headerLabel.setText(NLS.bind(Messages.headerLabel, out.substring(0, index)));
+			else 
+				headerLabel.setText(NLS.bind(Messages.headerLabel, out));
+		}
+	}
+
+	/**
+	 * Dispose the header.
+	 */
+	public void dispose() {
+		headerComp.dispose();
+	}
+
+	/**
+	 * Set whether the header can be edited.
+	 * 
+	 * @param editable If true the header can be edited, otherwise the header cannot be edited.
+	 */
+	public void setEditable(boolean editable) {
+		headerText.setEditable(editable);
+	}
+
+	/**
+	 * Get the content from the header.
+	 * 
+	 * @return The content from the header.
+	 */
+	public byte[] getContent() {
+		if (headerText == null || headerText.isDisposed())
+			return null;
+		
+		String header = headerText.getText().trim();
+		// Need to ensure that the following 4 bytes end the header. The getBytes()
+		// method removes spaces at the end of the string.
+		byte[] twoNewlines = new byte[] { '\015', '\012', '\015', '\012' };
+		byte[] headerBytes = header.getBytes();
+		byte[] retBytes = new byte[headerBytes.length + 4];
+		System.arraycopy(headerBytes, 0, retBytes, 0, headerBytes.length);
+		System.arraycopy(twoNewlines, 0, retBytes, headerBytes.length, 4);
+		return retBytes;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ImageViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ImageViewer.java
new file mode 100644
index 0000000..a8d4dbd
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/ImageViewer.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.viewers;
+
+import java.io.ByteArrayInputStream;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.wst.internet.monitor.ui.internal.Messages;
+import org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin;
+import org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer;
+/**
+ * An image viewer.
+ */
+public class ImageViewer extends ContentViewer {
+	protected static final byte CR = '\r';
+	protected static final byte LF = '\n';
+
+	protected ScrolledComposite scroll;
+	protected Label messageLabel;
+
+	protected byte[] content;
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#init(Composite)
+	 */
+	public void init(Composite parent) {
+		scroll = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
+		messageLabel = new Label(scroll, SWT.NONE);
+		messageLabel.setText(Messages.imageViewInvalid);
+		messageLabel.setFont(parent.getFont());
+		messageLabel.setSize(messageLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+		scroll.setContent(messageLabel);
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#setContent(byte[])
+	 */
+	public void setContent(byte[] b) {
+		content = b;
+		if (b == null || b.length == 0) {
+			messageLabel.setImage(null);
+		} else {
+			b = MonitorUIPlugin.unzip(b);
+			
+			int trimFront = 0;
+			int trimBack = 0;
+			int len = b.length - 1;
+			while (trimFront < b.length && b[trimFront] == CR || b[trimFront] == LF)
+				trimFront++;
+			while (trimBack < b.length && b[len - trimBack] == CR || b[len - trimBack] == LF)
+				trimBack++;
+			
+			if (trimFront + trimBack > 0) {
+				if (trimFront + trimBack > b.length) {
+					b = new byte[0];
+				} else {
+					byte[] temp = b;
+					b = new byte[temp.length - trimBack - trimFront];
+					for (int i = trimFront; i < temp.length - trimBack; i++) {
+						b[i - trimFront] = temp[i];
+					}
+				}
+			}
+			
+			try {
+				ImageData imgD = new ImageData(new ByteArrayInputStream(b));
+				Image img = new Image(null, imgD);
+				messageLabel.setImage(img);
+			} catch(Exception e) {
+				messageLabel.setImage(null);
+				messageLabel.setText(Messages.imageViewInvalid);
+			}
+		}
+		
+		messageLabel.setSize(messageLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+	}
+
+	/**
+	 * @see ContentViewer#getContent()
+	 */
+	public byte[] getContent() {
+		return content;
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#dispose()
+	 */
+	public void dispose() {
+		scroll.dispose();
+		scroll = null;
+		messageLabel = null;
+		content = null;
+	}
+}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/XMLViewer.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/XMLViewer.java
new file mode 100644
index 0000000..d6c906d
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/viewers/XMLViewer.java
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * All rights reserved. This program and 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
+ *     
+ *     2005-11-25 Arthur Ryman, ryman@ca.ibm.com
+ *     - fixed bug 118102: set xmlTagMissing correctly each time setContent() is called
+ *******************************************************************************/
+package org.eclipse.wst.internet.monitor.ui.internal.viewers;
+ 
+import java.io.*;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.*;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.eclipse.jface.resource.JFaceResources;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.internet.monitor.ui.internal.ContextIds;
+import org.eclipse.wst.internet.monitor.ui.internal.Messages;
+import org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin;
+import org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer;
+
+import org.w3c.dom.*;
+import org.xml.sax.*;
+/**
+ * XML Viewer.
+ */
+public class XMLViewer extends ContentViewer {
+	protected Composite viewerComp;
+	protected StackLayout layout;
+	protected Text messageText;
+	protected Label messageLabel;
+
+	protected boolean xmlTagMissing = false;
+	protected boolean setEncoding = false;
+	protected boolean missingEncoding = false;
+	protected String originalEncoding;
+
+	protected byte[] content;
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#setContent(byte[])
+	 */
+	public void setContent(byte[] b) {
+		content = b;
+		String out = "";	
+		if (b != null) {
+			b = MonitorUIPlugin.unzip(b);
+			out = MonitorUIPlugin.parse(b);
+		}
+		
+		String lineSeparator = System.getProperty("line.separator");
+		int ls = lineSeparator.length();
+		if (out.length() > ls) {
+			while (out.substring(0, ls).indexOf(lineSeparator) >= 0)
+			out = out.substring(ls, out.length());
+		}
+		
+		String out_temp = out.toLowerCase();
+		xmlTagMissing = !out_temp.startsWith("<?xml");
+		
+		if (out.length() > 0) {
+			String finalMsg = null;
+			try {
+				byte[] b1 = createDocument(out);
+				finalMsg = new String(b1).trim();
+			} catch (Exception e) {
+				// case: error parsing
+				messageText.setVisible(false);
+				layout.topControl = messageLabel;
+				messageLabel.setVisible(true);
+				messageLabel.setText(Messages.xmlViewInvalid);
+				return;
+			}
+			if (xmlTagMissing && (finalMsg.toLowerCase().startsWith("<?xml version=\"1.0\" encoding=\"utf-8\"?>")
+							|| finalMsg.toLowerCase().startsWith("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>") 
+							|| finalMsg.toLowerCase().startsWith("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>"))) {
+				int x = finalMsg.indexOf(">") + 1;
+				//remove <?xml version="1.0" encoding="UTF-8"?>
+				String Msg = finalMsg.substring(x);
+				//remove starting newlines
+				while (Msg.substring(0, ls).indexOf(lineSeparator) >= 0){
+					Msg = Msg.substring(ls, Msg.length());
+				}
+				finalMsg = Msg;
+				
+				messageText.setText(finalMsg);
+			} else if (setEncoding) {
+				// change back to original encoding
+				int begin = finalMsg.toLowerCase().indexOf("utf-8"); // location of opening "
+				if (begin >= 0) {
+					int last = begin + 5;  // location of closing "
+					String first_half = finalMsg.substring(0,begin);
+					String second_half = finalMsg.substring(last);
+					finalMsg = first_half + originalEncoding + second_half;
+				}
+				
+				messageText.setText(finalMsg);
+			} else if (missingEncoding) {
+				// remove encoding completely
+				int begin = finalMsg.toLowerCase().indexOf("encoding=\"utf-8\""); //location of opening "
+				int last = begin + 16;  //location of closing "
+				String first_half = finalMsg.substring(0,begin);
+				String second_half = finalMsg.substring(last);
+				finalMsg = first_half + second_half;
+				
+				messageText.setText(finalMsg);	
+			} else
+				messageText.setText(finalMsg);
+		} else
+			messageText.setText(out);
+		
+		messageLabel.setVisible(false);
+		layout.topControl = messageText;
+		messageText.setVisible(true);
+	}
+
+	/**
+	 * @see ContentViewer#getContent()
+	 */
+	public byte[] getContent() {
+		return content;
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#init(Composite)
+	 */
+	public void init(Composite parent) {
+		viewerComp = new Composite(parent, SWT.NONE);
+		layout = new StackLayout();
+		layout.marginHeight = 0;
+		layout.marginWidth = 0;
+		viewerComp.setLayout(layout);
+		
+		messageText = new Text(viewerComp, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL);
+		Display display = viewerComp.getDisplay();
+		messageText.setBackground(display.getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		messageText.setForeground(display.getSystemColor(SWT.COLOR_LIST_FOREGROUND));
+		messageText.setFont(JFaceResources.getTextFont());
+		messageText.setVisible(true);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(messageText, ContextIds.VIEW_RESPONSE);
+		
+		messageLabel = new Label(viewerComp, SWT.NONE);
+		messageLabel.setVisible(false);
+		
+		layout.topControl = messageText;
+	}
+
+	/* (non-Javadoc)
+	 * @#createDocument(String)
+	 */
+	protected byte[] createDocument(String str) throws IOException {
+		try {	
+			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+			try {
+				factory.setAttribute("http://apache.org/xml/features/allow-java-encodings", new Boolean(true));
+				factory.setAttribute("http://apache.org/xml/features/continue-after-fatal-error", new Boolean(true));
+			} catch (Exception e) {
+				// ignore
+			}
+			DocumentBuilder parser = factory.newDocumentBuilder();
+			
+			if (xmlTagMissing) {
+				str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + str;
+			} else {
+				String str_temp = str.toLowerCase();
+				
+				// if encoding present, then save original encoding and change to UTF-8
+				int ind = str_temp.indexOf("encoding=");
+				if (ind >= 0) {
+					String temp1 = str.substring(ind);
+					int beginIndex = temp1.indexOf("\"") + 1;
+					String temp2 = temp1.substring(beginIndex);
+					int endIndex = temp2.indexOf("\"");
+					originalEncoding = temp2.substring(0, endIndex);
+					if (!"utf-8".equals(originalEncoding))
+						setEncoding = true;
+				} else if (ind < 0) { //if no encoding at all,then no changes to be made
+					setEncoding = false;
+					missingEncoding = true;
+				}
+			}
+			byte[] parseArray = str.getBytes();
+			Document document = parser.parse(new InputSource(new ByteArrayInputStream(parseArray)));
+			return getContents(document);
+		} catch (Exception e) {
+			throw new IOException("Invalid XML");
+		}
+	}
+
+	protected byte[] getContents(Document document) throws IOException {
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		Result result = new StreamResult(out);
+		Source source = new DOMSource(document);
+		try {
+			TransformerFactory tf = TransformerFactory.newInstance();
+			try {
+				tf.setAttribute("indent-number", new Integer(2));
+			} catch (Exception e) {
+				e.printStackTrace();
+				// ignore - fails on JDK 1.4
+			}
+			Transformer transformer = tf.newTransformer();
+			transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
+			transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
+			transformer.setOutputProperty(OutputKeys.STANDALONE, "no"); //$NON-NLS-1$
+			transformer.transform(source, result);
+		} catch (TransformerConfigurationException e) {
+			throw (IOException) (new IOException().initCause(e));
+		} catch (TransformerException e) {
+			throw (IOException) (new IOException().initCause(e));
+		}
+		return out.toByteArray();
+	}
+
+	/** (non-Javadoc)
+	 * @see ContentViewer#dispose()
+	 */
+	public void dispose() {
+		viewerComp.dispose();
+		viewerComp = null;
+		content = null;
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/plugin.properties b/plugins/org.eclipse.wst.internet.monitor.ui/plugin.properties
new file mode 100644
index 0000000..6a48576
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/plugin.properties
@@ -0,0 +1,27 @@
+###############################################################################
+# Copyright (c) 2005 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+# 
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+pluginName=TCP/IP Monitor
+providerName=Eclipse.org
+
+extensionPointViewers=Viewers
+
+viewTitle=TCP/IP Monitor
+actionResend=Resend request
+actionModify=Modify request
+actionModifyResend=Send Modified Request
+
+byteView=Byte
+imageView=Image
+xmlView=XML
+browserView=Web Browser
+
+preferenceTitle=TCP/IP Monitor
+preferenceKeywords=debug
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/plugin.xml b/plugins/org.eclipse.wst.internet.monitor.ui/plugin.xml
new file mode 100644
index 0000000..383610e
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/plugin.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+<extension-point name="%extensionPointViewers" id="viewers" schema="schema/viewers.exsd"/>
+
+<extension point="org.eclipse.wst.internet.monitor.core.internalStartup">
+  <startup
+    id="org.eclipse.wst.internet.monitor.ui"
+    class="org.eclipse.wst.internet.monitor.ui.internal.Startup"/>
+</extension>
+
+<extension point="org.eclipse.ui.views"> 
+  <view
+    id="org.eclipse.wst.internet.monitor.view"
+    name="%viewTitle"
+    category="org.eclipse.debug.ui"
+    class="org.eclipse.wst.internet.monitor.ui.internal.view.MonitorView"
+    icon="icons/cview16/monitorView.gif">
+  </view>
+</extension>
+
+<extension point="org.eclipse.ui.preferencePages">
+  <page
+    id="org.eclipse.wst.internet.monitor.preferencePage"
+    name="%preferenceTitle"
+    category="org.eclipse.debug.ui.DebugPreferencePage"
+    class="org.eclipse.wst.internet.monitor.ui.internal.MonitorPreferencePage">
+      <keywordReference id="org.eclipse.wst.internet.monitor.preferenceKeywords"/>
+  </page>
+</extension>
+
+<extension point="org.eclipse.ui.keywords">
+  <keyword
+    label="%preferenceKeywords"
+    id="org.eclipse.wst.internet.monitor.preferenceKeywords"/>
+</extension>
+
+<extension point="org.eclipse.wst.internet.monitor.ui.viewers">
+  <viewer
+    id="org.eclipse.wst.internet.monitor.viewers.byte"
+    class="org.eclipse.wst.internet.monitor.ui.internal.viewers.ByteViewer"
+    type="requestresponse"
+    label="%byteView"/>
+  <viewer
+    id="org.eclipse.wst.internet.monitor.viewers.image"
+    class="org.eclipse.wst.internet.monitor.ui.internal.viewers.ImageViewer"
+    type="requestresponse"
+    label="%imageView"/>
+  <viewer
+    id="org.eclipse.wst.internet.monitor.viewers.xml"
+    class="org.eclipse.wst.internet.monitor.ui.internal.viewers.XMLViewer"
+    type="requestresponse"
+    label="%xmlView"/>
+  <viewer
+    id="org.eclipse.wst.internet.monitor.viewers.browser"
+    class="org.eclipse.wst.internet.monitor.ui.internal.viewers.BrowserViewer"
+    type="requestresponse"
+    label="%browserView"/>
+</extension>
+
+<extension point="org.eclipse.core.runtime.adapters">
+  <factory
+    class="org.eclipse.wst.internet.monitor.ui.internal.RequestAdapterFactory"
+    adaptableType="org.eclipse.wst.internet.monitor.core.internal.provisional.Request">
+    <adapter type="org.eclipse.ui.IActionFilter"/>
+  </factory>
+</extension>
+
+<extension point="org.eclipse.ui.popupMenus">
+    <objectContribution
+          objectClass="org.eclipse.wst.internet.monitor.core.internal.provisional.Request"
+          id="org.eclipse.wst.internet.monitor.ui.modifyaction">
+       <filter name="requestsent" value="true"/>
+       <action
+             label="%actionResend"
+             menubarPath="additions"
+             class="org.eclipse.wst.internet.monitor.ui.internal.view.ResendMessageAction"
+             enablesFor="1"
+             id="org.eclipse.wst.internet.monitor.ui.internal.view.ResendMessageAction"
+             icon="icons/elcl16/resendRequest.gif">
+       </action>
+       <action
+             label="%actionModify"
+             menubarPath="additions"
+             class="org.eclipse.wst.internet.monitor.ui.internal.view.ModifyMessageAction"
+             enablesFor="1"
+             id="org.eclipse.wst.internet.monitor.ui.internal.view.ModifyMessageAction"
+             icon="icons/etool16/editRequest.gif">
+       </action>
+    </objectContribution>
+    <objectContribution
+          objectClass="org.eclipse.wst.internet.monitor.core.internal.provisional.Request"
+          id="org.eclipse.wst.internet.monitor.ui.sendmodifyaction">
+       <filter name="requestsent" value="false"/>    
+       <action
+             label="%actionModifyResend"
+             menubarPath="additions"
+             class="org.eclipse.wst.internet.monitor.ui.internal.view.SendModifiedMessageAction"
+             enablesFor="1"
+             id="org.eclipse.wst.internet.monitor.ui.internal.view.SendModifiedMessageAction"
+             icon="icons/elcl16/resendRequest.gif">
+       </action>
+    </objectContribution>
+</extension>
+
+</plugin>
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/schema/viewers.exsd b/plugins/org.eclipse.wst.internet.monitor.ui/schema/viewers.exsd
new file mode 100644
index 0000000..6d76378
--- /dev/null
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/schema/viewers.exsd
@@ -0,0 +1,143 @@
+<?xml version='1.0' encoding='UTF-8'?>

+<!-- Schema file written by PDE -->

+<schema targetNamespace="org.eclipse.wst.internet.monitor.ui">

+<annotation>

+      <appInfo>

+         <meta.schema plugin="org.eclipse.wst.internet.monitor.ui" id="viewers" name="Content Viewers"/>

+      </appInfo>

+      <documentation>

+         This extension point is used to provide a viewer for a specific type of content. (e.g. a viewer for a particular image format)

+      </documentation>

+   </annotation>

+

+   <element name="extension">

+      <complexType>

+         <sequence>

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

+         </sequence>

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

+            <annotation>

+               <documentation>

+                  a fully qualified identifier of the target extension point

+               </documentation>

+            </annotation>

+         </attribute>

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

+            <annotation>

+               <documentation>

+                  an optional identifier of the extension instance

+               </documentation>

+            </annotation>

+         </attribute>

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

+            <annotation>

+               <documentation>

+                  an optional name of the extension instance

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <element name="viewer">

+      <annotation>

+         <appInfo>

+            <meta.element labelAttribute="name"/>

+         </appInfo>

+      </annotation>

+      <complexType>

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

+            <annotation>

+               <documentation>

+                  specifies a unique identifier for this extension point

+               </documentation>

+            </annotation>

+         </attribute>

+         <attribute name="class" type="string" use="required">

+            <annotation>

+               <documentation>

+                  specifies the fully qualified name of the Java class that extends &lt;samp&gt;org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer&lt;/samp&gt;. Viewers instances of this type will delegate to instances of this class.

+               </documentation>

+               <appInfo>

+                  <meta.attribute kind="java" basedOn="org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer"/>

+               </appInfo>

+            </annotation>

+         </attribute>

+         <attribute name="label" type="string" use="required">

+            <annotation>

+               <documentation>

+                  a translatable name used to identify the content viewer

+               </documentation>

+            </annotation>

+         </attribute>

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

+            <annotation>

+               <documentation>

+                  [issue: what is this used for?]

+               </documentation>

+            </annotation>

+         </attribute>

+      </complexType>

+   </element>

+

+   <annotation>

+      <appInfo>

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

+      </appInfo>

+      <documentation>

+         1.0

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

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

+      </appInfo>

+      <documentation>

+         The following is an example of a content viewer extension point:

+

+&lt;pre&gt;

+   &lt;extension 

+         point=&quot;org.eclipse.wst.internet.monitor.ui.viewers&quot;&gt;

+      &lt;viewer

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

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

+            type=&quot;requestresponse&quot;

+            label=&quot;%byteView&quot;/&gt;

+   &lt;/extension&gt;

+&lt;/pre&gt;

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

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

+      </appInfo>

+      <documentation>

+         Value of the attribute &lt;b&gt;class&lt;/b&gt; must be a fully qualified name of a Java class that extends the abstract class &lt;code&gt;org.eclipse.wst.internet.monitor.ui.internal.provisional.ContentViewer&lt;/code&gt;.

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

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

+      </appInfo>

+      <documentation>

+         

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

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

+      </appInfo>

+      <documentation>

+         Copyright (c) 2003, 2005 IBM Corporation and others.&lt;br&gt;

+All rights reserved. This program and the accompanying materials are made 

+available under the terms of the Eclipse Public License v1.0 which accompanies 

+this distribution, and is available at 

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

+      </documentation>

+   </annotation>

+

+</schema>

diff --git a/plugins/org.eclipse.wst.server.core/.options b/plugins/org.eclipse.wst.server.core/.options
index 3812a2f..e3bb1f3 100644
--- a/plugins/org.eclipse.wst.server.core/.options
+++ b/plugins/org.eclipse.wst.server.core/.options
@@ -3,6 +3,14 @@
 # Turn on general debugging
 org.eclipse.wst.server.core/debug=true
 
+# Tracing options
+org.eclipse.wst.server.core/config=false
+org.eclipse.wst.server.core/info=false
+org.eclipse.wst.server.core/warning=false
+org.eclipse.wst.server.core/severe=false
+org.eclipse.wst.server.core/finest=false
+org.eclipse.wst.server.core/finer=false
+
 # Tracking of server resources
 org.eclipse.wst.server.core/resources=false
 
@@ -12,5 +20,11 @@
 # Server listeners
 org.eclipse.wst.server.core/listeners=false
 
+# runtime targets
+org.eclipse.wst.server.core/runtime_target=false
+
 # Performance of loading and calling delegates
 org.eclipse.wst.server.core/performance=false
+
+# Publishing
+org.eclipse.wst.server.core/publishing=false
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.core.prefs
index ceff3f3..a23962e 100644
--- a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.core.prefs
@@ -1,87 +1,355 @@
-#Tue Mar 09 16:20:32 EST 2010
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
-org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
-org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
-org.eclipse.jdt.core.compiler.problem.unusedLabel=error
-org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
-org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
-org.eclipse.jdt.core.incompatibleJDKLevel=warning
-org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
-org.eclipse.jdt.core.builder.cleanOutputFolder=clean
-org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
-org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
-org.eclipse.jdt.core.compiler.problem.deprecation=warning
-org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
-org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
-org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
-org.eclipse.jdt.core.compiler.problem.unusedImport=error
-org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
-org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
-org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
-org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
-org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
-org.eclipse.jdt.core.builder.invalidClasspath=ignore
+#Wed Mar 23 16:23:03 EDT 2011
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=error
-org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
-org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
-org.eclipse.jdt.core.codeComplete.argumentSuffixes=
-org.eclipse.jdt.core.codeComplete.argumentPrefixes=
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
-org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
-org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
-org.eclipse.jdt.core.compiler.problem.nullReference=warning
-org.eclipse.jdt.core.compiler.source=1.5
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
-org.eclipse.jdt.core.builder.duplicateResourceTask=error
-org.eclipse.jdt.core.compiler.problem.fieldHiding=error
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
-org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
-org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
-org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
-org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
-org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
-org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
-org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-eclipse.preferences.version=1
-org.eclipse.jdt.core.incompleteClasspath=error
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
-org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
-org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
-org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
-org.eclipse.jdt.core.codeComplete.fieldPrefixes=
-org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
-org.eclipse.jdt.core.compiler.problem.autoboxing=warning
-org.eclipse.jdt.core.circularClasspath=error
-org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
-org.eclipse.jdt.core.codeComplete.fieldSuffixes=
-org.eclipse.jdt.core.codeComplete.localSuffixes=
-org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
-org.eclipse.jdt.core.codeComplete.localPrefixes=
-org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
-org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.compliance=1.5
-org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=error
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.compiler.problem.fieldHiding=error
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
-instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder=ignore
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.classpath.exclusionPatterns=disabled
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=80
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.classpath.multipleOutputLocations=disabled
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.builder.cleanOutputFolder=clean
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.codeComplete.fieldSuffixes=
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.builder.resourceCopyExclusionFilter=*.launch,*.testsuite,*.deploy,*.location,*.execution,*.datapool,*.artifact,*.html,*.svg
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.incompleteClasspath=error
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.compiler.problem.autoboxing=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes=
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.circularClasspath=error
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.codeComplete.fieldPrefixes=
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
 org.eclipse.jdt.core.codeComplete.staticFieldSuffixes=
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
+org.eclipse.jdt.core.formatter.tabulation.char=tab
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.codeComplete.localPrefixes=
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=error
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.codeComplete.localSuffixes=
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes=
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.codeComplete.argumentPrefixes=
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.compiler.problem.unusedImport=error
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.compiler.problem.unusedLabel=error
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.builder.invalidClasspath=ignore
+org.eclipse.jdt.core.codeComplete.argumentSuffixes=
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.incompatibleJDKLevel=warning
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.codeComplete.staticFieldPrefixes=
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.lineSplit=140
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
+org.eclipse.jdt.core.compiler.maxProblemPerUnit=1000
+org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.builder.duplicateResourceTask=error
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=error
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore
+eclipse.preferences.version=1
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
diff --git a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.ui.prefs
index fc7e3c7..651c3de 100644
--- a/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.ui.prefs
+++ b/plugins/org.eclipse.wst.server.core/.settings/org.eclipse.jdt.ui.prefs
@@ -1,10 +1,12 @@
-#Tue Mar 09 16:20:35 EST 2010
+#Wed Mar 23 16:23:03 EDT 2011
 org.eclipse.jdt.ui.ignorelowercasenames=true
 org.eclipse.jdt.ui.exception.name=e
 org.eclipse.jdt.ui.ondemandthreshold=4
 org.eclipse.jdt.ui.staticondemandthreshold=4
 org.eclipse.jdt.ui.overrideannotation=true
+formatter_settings_version=11
 org.eclipse.jdt.ui.importorder=java;javax;org;com;
+formatter_profile=_Eclipse WTP Servertools Formatting rules
 org.eclipse.jdt.ui.gettersetter.use.is=true
 eclipse.preferences.version=1
 org.eclipse.jdt.ui.keywordthis=false
diff --git a/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
index 9b29ca4..a2d43e2 100644
--- a/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.server.core; singleton:=true
-Bundle-Version: 1.1.205.qualifier
+Bundle-Version: 1.1.208.qualifier
 Bundle-Activator: org.eclipse.wst.server.core.internal.ServerPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -17,6 +17,7 @@
  org.eclipse.core.expressions;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.debug.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.update.core;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
- org.eclipse.wst.common.project.facet.core;bundle-version="[1.1.0,2.0.0)";resolution:=optional
+ org.eclipse.wst.common.project.facet.core;bundle-version="[1.1.0,2.0.0)";resolution:=optional,
+ org.eclipse.wst.common.core;bundle-version="[1.2.0,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd b/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd
index 4ee779e..7010776 100644
--- a/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd
+++ b/plugins/org.eclipse.wst.server.core/schema/moduleFactories.exsd
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>

 <!-- Schema file written by PDE -->

-<schema targetNamespace="org.eclipse.wst.server.core">

+<schema targetNamespace="org.eclipse.wst.server.core" xmlns="http://www.w3.org/2001/XMLSchema">

 <annotation>

       <appInfo>

          <meta.schema plugin="org.eclipse.wst.server.core" id="moduleFactories" name="Module Factories"/>

@@ -10,7 +10,14 @@
       </documentation>

    </annotation>

 

+  <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>

+

    <element name="extension">

+      <annotation>

+         <appInfo>

+            <meta.element />

+         </appInfo>

+      </annotation>

       <complexType>

          <sequence>

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

@@ -48,6 +55,7 @@
       <complexType>

          <sequence>

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

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

          </sequence>

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

             <annotation>

@@ -105,6 +113,15 @@
 

    <annotation>

       <appInfo>

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

+      </appInfo>

+      <documentation>

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

+      </documentation>

+   </annotation>

+

+   <annotation>

+      <appInfo>

          <meta.section type="since"/>

       </appInfo>

       <documentation>

@@ -135,30 +152,13 @@
       </documentation>

    </annotation>

 

-   <annotation>

-      <appInfo>

-         <meta.section type="apiInfo"/>

-      </appInfo>

-      <documentation>

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

-      </documentation>

-   </annotation>

-

-   <annotation>

-      <appInfo>

-         <meta.section type="implementation"/>

-      </appInfo>

-      <documentation>

-         

-      </documentation>

-   </annotation>

 

    <annotation>

       <appInfo>

          <meta.section type="copyright"/>

       </appInfo>

       <documentation>

-         Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br&gt;

+         Copyright (c) 2000, 2011 IBM Corporation and others.&lt;br&gt;

 All rights reserved. This program and the accompanying materials are made 

 available under the terms of the Eclipse Public License v1.0 which accompanies 

 this distribution, and is available at 

diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModule.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModule.java
index 7aad1e3..e1c1e59 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModule.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IModule.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
+ * Copyright (c) 2004, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
index d226f33..f06cf3b 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerCore.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -185,7 +185,9 @@
 	private static synchronized void loadRuntimeTypes() {
 		if (runtimeTypes != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .runtimeTypes extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .runtimeTypes extension point ->-");
+		}
 		
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, EXTENSION_RUNTIME_TYPE);
@@ -194,7 +196,9 @@
 		addRegistryListener();
 		runtimeTypes = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .runtimeTypes extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .runtimeTypes extension point -<-");
+		}
 	}
 
 	/**
@@ -205,9 +209,16 @@
 			try {
 				if (!ServerPlugin.contains(ServerPlugin.getExcludedServerAdapters(), ce.getAttribute("id")))
 					list.add(new RuntimeType(ce));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded runtimeType: " + ce.getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded runtimeType: " + ce.getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load runtimeType: " + ce.getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load runtimeType: "
+									+ ce.getAttribute("id"), t);
+				}
 			}
 		}
 	}
@@ -219,7 +230,9 @@
 		if (serverTypes != null)
 			return;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .serverTypes extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .serverTypes extension point ->-");
+		}
 		
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, EXTENSION_SERVER_TYPE);
@@ -228,7 +241,9 @@
 		addRegistryListener();
 		serverTypes = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .serverTypes extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .serverTypes extension point -<-");
+		}
 	}
 
 	/**
@@ -239,9 +254,16 @@
 			try {
 				if (!ServerPlugin.contains(ServerPlugin.getExcludedServerAdapters(), ce.getAttribute("id")))
 					list.add(new ServerType(ce));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded serverType: " + ce.getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded serverType: " + ce.getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load serverType: " + ce.getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load serverType: "
+									+ ce.getAttribute("id"), t);
+				}
 			}
 		}
 	}
@@ -469,7 +491,7 @@
 		PublishController[] controllers = ServerPlugin.getPublishController();
 		if (controllers.length > 0){
 			for (PublishController controller : controllers){
-				if (controller.supportsType(server.getServerType().getId()))
+				if (server.getServerType() != null && controller.supportsType(server.getServerType().getId()))
 					return controller.isPublishRequired(server, delta2);
 			}
 		}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java
index ac021cb..892dd7a 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -9,6 +9,9 @@
  *     IBM Corporation - Initial API and implementation
  *******************************************************************************/
 package org.eclipse.wst.server.core;
+
+import org.eclipse.core.runtime.IStatus;
+
 /**
  * An event fired when a server change or module changes.
  * 
@@ -21,6 +24,7 @@
 	private int state;
 	private int publishState;
 	private boolean restartState;
+	private IStatus status;
 	
 	/**
 	 * For notification when the state has changed.
@@ -56,6 +60,8 @@
 	 */
 	public static final int RESTART_STATE_CHANGE = 0x0004;
 	
+	public static final int STATUS_CHANGE = 0x0008;
+	
 	/**
 	 * For event on server changes. This kind is mutually exclusive with <code>MODULE_CHANGE</code>.
 	 * 
@@ -99,6 +105,38 @@
 		
 		checkKind();
 	}
+	
+	/**
+	 * Create a new server event for server change events.
+	 * 
+	 * @param kind the kind of the change. (<code>XXX_CHANGE</code>). If the kind does not 
+	 *    include the <code>SERVER_CHANGE</code> kind, the SERVER_CHANGE will be added automatically.  
+	 *    constants declared on {@link ServerEvent}
+	 * @param server the server that the server event takes place
+	 * @param state the server state after the change (<code>STATE_XXX</code>)
+	 *    constants declared on {@link IServer}
+	 * @param publishingState the server publishing state after the 
+	 *    change (<code>PUBLISH_STATE_XXX</code>)
+	 *    constants declared on {@link IServer}
+	 * @param restartState get the server restart state after the server is restart 
+	 *    needed property change event
+	 * @param status the server status after the change
+	 */
+	public ServerEvent(int kind, IServer server, int state, int publishingState, boolean restartState, IStatus status) {
+		this.kind = kind |= SERVER_CHANGE;
+		this.server = server;
+		this.state = state;
+		this.publishState = publishingState;
+		this.restartState = restartState;
+		this.status = status;
+		
+		if (server == null)
+			throw new IllegalArgumentException("Server parameter must not be null");
+		if ((kind & MODULE_CHANGE) != 0)
+			throw new IllegalArgumentException("Kind parameter invalid");
+		
+		checkKind();
+	}
 
 	/**
 	 * Create a new ServerEvent for module change events.
@@ -131,6 +169,40 @@
 		
 		checkKind();
 	}
+	
+	/**
+	 * Create a new ServerEvent for module change events.
+	 * 
+	 * @param kind the kind of the change. (<code>XXX_CHANGE</code>). If the kind does not 
+	 *    include the <code>MODULE_CHANGE</code> kind, the MODULE_CHANGE will be added automatically.  
+	 *    constants declared on {@link ServerEvent}
+	 * @param server the server that the module event takes place
+	 * @param module the module that has changed
+	 * @param state the module state after the change (<code>STATE_XXX</code>)
+	 *    constants declared on {@link IServer}
+	 * @param publishingState the module publishing state after the 
+	 *    change (<code>PUBLISH_STATE_XXX</code>)
+	 *    constants declared on {@link IServer}
+	 * @param restartState get the module restart state after the module is restart 
+	 *    needed property change event.
+	 * @param status the module status after the change
+	 */
+	public ServerEvent(int kind, IServer server, IModule[] module, int state, int publishingState, boolean restartState, IStatus status) {
+		this.kind = kind |= MODULE_CHANGE;
+		this.server = server;
+		this.moduleTree = module;
+		this.state = state;
+		this.publishState = publishingState;
+		this.restartState = restartState;
+		this.status = status;
+		
+		if (moduleTree == null || moduleTree.length == 0)
+			throw new IllegalArgumentException("Module parameter invalid");
+		if ((kind & SERVER_CHANGE) != 0)
+			throw new IllegalArgumentException("Kind parameter invalid");
+		
+		checkKind();
+	}
 
 	private void checkKind() {
 		int i = 0;
@@ -140,6 +212,8 @@
 			i++;
 		if ((kind & PUBLISH_STATE_CHANGE) != 0)
 			i++;
+		if ((kind & STATUS_CHANGE) != 0)
+			i++;		
 		
 		if (i != 0 && i != 1)
 			throw new IllegalArgumentException("Kind parameter invalid");
@@ -150,9 +224,9 @@
 	 * <p>
 	 * This kind can be used to test whether this event is a server event or module event by using
 	 * the following code (the example is checking for the server event):
-	 *    ((getKind() | SERVER_CHANGE) != 0) 
+	 *    ((getKind() & SERVER_CHANGE) != 0) 
 	 * the following code (the example is checking for the module event):
-	 *    ((getKind() | MODULE_CHANGE) != 0) 
+	 *    ((getKind() & MODULE_CHANGE) != 0) 
 	 * 
 	 * @return the kind of the change (<code>XXX_CHANGE</code>
 	 *    constants declared on {@link ServerEvent}
@@ -213,6 +287,19 @@
 	}
 	
 	/**
+	 * Get the status after the change that triggers this server event. If this event 
+	 * is of the SERVER_CHANGE kind, then the status is the server status.
+	 * If this event is of the MODULE_CHANGE kind, then the status is the module
+	 * status.
+	 * 
+	 * @return the server state after the change (<code>STATE_XXX</code>)
+	 *    constants declared on {@link IServer}
+	 */
+	public IStatus getStatus() {
+		return status;
+	}
+	
+	/**
 	 * Returns the server involved in the change event.
 	 * 
 	 * @return the server involved in the change event.
@@ -233,6 +320,7 @@
 				+ " state="+getState()
 				+ " publishState="+getPublishState()
 				+ " restartState="+getRestartState()
+				+ " status="+getStatus()
 				+ ">";
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
index 51b30c8..30bc068 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -91,13 +91,16 @@
 		List<IModule> list = new ArrayList<IModule>();
 		
 		ModuleFactory[] factories = ServerPlugin.getModuleFactories();
+
 		if (factories != null) {
 			for (ModuleFactory factory : factories) {
-				IModule[] modules = factory.getModules(project, null);
-				if (modules != null) {
-					for (IModule module : modules) {
-						if (!list.contains(module))
-							list.add(module);
+				if (factory.isEnabled(project, null)){
+					IModule[] modules = factory.getModules(project, null);
+					if (modules != null) {
+						for (IModule module : modules) {
+							if (!list.contains(module))
+								list.add(module);
+						}
 					}
 				}
 			}
@@ -329,7 +332,10 @@
 						addParentModules.add(parent);
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not find parent module", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING,
+							"Could not find parent module", e);
+				}
 			}
 			
 			if (!found)
@@ -353,7 +359,10 @@
 						removeParentModules.add(parent);
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not find parent module 2", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING,
+							"Could not find parent module 2", e);
+				}
 			}
 			
 			if (!found)
@@ -400,8 +409,8 @@
 		}
 
 		while (ServerPlugin.isNameInUse(runtime.getOriginal(), name)) {
-			suffix++;
 			name = NLS.bind(Messages.defaultRuntimeName2, new String[] { typeName, suffix + "" });
+			suffix++;
 		}
 		runtime.setName(name);
 		return suffix;
@@ -685,7 +694,9 @@
 		if (server == null || module == null)
 			throw new IllegalArgumentException("Arguments cannot be null");
 		
-		Trace.trace(Trace.FINEST, "containsModule() " + server + " " + module);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "containsModule() " + server + " " + module);
+		}
 		
 		final boolean[] b = new boolean[1];
 		
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Base.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Base.java
index 4328094..bac01e8 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Base.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Base.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -252,7 +252,10 @@
 			else
 				file.create(in, true, ProgressUtil.getSubMonitorFor(monitor, 1000));
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save " + getXMLRoot(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not save "
+						+ getXMLRoot(), e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorSaving, getFile().toString()), e));
 		}
 	}
@@ -370,7 +373,9 @@
 			IMemento memento = XMLMemento.loadMemento(in);
 			load(memento);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not load from file", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not load from file", e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorLoading, getFile().toString()), e));
 		} finally {
 			try {
@@ -396,7 +401,9 @@
 			IMemento memento = XMLMemento.loadMemento(in);
 			load(memento);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not load from path", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not load from path", e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorLoading, path.toString()), e));
 		} finally {
 			try {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java
index c1f44a6..80f2411 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ChainedJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java
index 20cc5c2..3218620 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Client.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,7 +84,10 @@
 			try {
 				delegate = (ClientDelegate) element.createExecutableExtension("class");
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Could not create delegate" + toString(), e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Could not create delegate" + toString(), e);
+				}
 			}
 		}
 		return delegate;
@@ -101,7 +104,10 @@
 		try {
 			return getDelegate().supports(server, launchable, launchMode);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 			return false;
 		}
 	}
@@ -113,7 +119,10 @@
 		try {
 			return getDelegate().launch(server, launchable, launchMode, launch);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 		}
 		return null;
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/DeletedModule.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/DeletedModule.java
index 4c4c3d3..6f2befb 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/DeletedModule.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/DeletedModule.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java
index 3b9768d..14140cd 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -175,11 +175,17 @@
 			URL siteURL = new URL(fromSite);
 			return SiteManager.getSite(siteURL, monitor);
 		} catch (MalformedURLException e) {
-			Trace.trace(Trace.WARNING, "Could not parse site", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not parse site", e);
+			}
 		} catch (CoreException e) {
-			Trace.trace(Trace.WARNING, "Could not parse site", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not parse site", e);
+			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not parse site", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not parse site", e);
+			}
 		}
 		return null;
 	}
@@ -190,10 +196,14 @@
 				return SiteManager.getSite(fromSiteURL, monitor);
 			}
 		} catch (CoreException e) {
-			Trace.trace(Trace.WARNING, "Could not parse site", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not parse site", e);
+			}
 			throw new IOException(e.getMessage());
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not parse site", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not parse site", e);
+			}
 			throw new IOException(e.getMessage());
 		}
 	}
@@ -220,7 +230,10 @@
 				if (urlEntries.length > mirror)
 					return urlEntries[mirror].getURL().toExternalForm();
 			} catch (CoreException e) {
-				Trace.trace(Trace.WARNING, "Could not find mirror site", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING,
+							"Could not find mirror site", e);
+				}
 			}
 		}
 		return null;
@@ -267,7 +280,10 @@
 					if (fromSite == null)
 						complete = true;
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error installing feature", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"Error installing feature", e);
+					}
 					throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
 							NLS.bind(Messages.errorInstallingServer, e.getLocalizedMessage()), e));
 				}
@@ -290,7 +306,9 @@
 			InputStream in = url.openStream();
 			unzip(in, path, monitor);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error unzipping runtime", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error unzipping runtime", e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
 					NLS.bind(Messages.errorInstallingServer, e.getLocalizedMessage()), e));
 		}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime2.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime2.java
index 8b4769e..e443a85 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime2.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/InstallableRuntime2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -124,7 +124,9 @@
 			copyWithSize(in, out, null, 0);
 			return new String(out.toByteArray());
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Error loading license", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Error loading license", e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
 					NLS.bind(Messages.errorInstallingServer, e.getLocalizedMessage()), e));
 		} finally {
@@ -215,7 +217,10 @@
 		} catch (IOException e) {
 			if (monitor != null)
 				monitor.done();
-			Trace.trace(Trace.WARNING, "Error creating url and temp file", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Error creating url and temp file", e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
 				NLS.bind(Messages.errorInstallingServer, e.getLocalizedMessage()), e));
 		}
@@ -236,7 +241,10 @@
 		} catch (Exception e) {
 			if (monitor != null)
 				monitor.done();
-			Trace.trace(Trace.WARNING, "Error downloading runtime", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Error downloading runtime",
+						e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
 				NLS.bind(Messages.errorInstallingServer, e.getLocalizedMessage()), e));
 		} finally {
@@ -277,7 +285,10 @@
 				}
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error uncompressing runtime", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error uncompressing runtime",
+						e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0,
 				NLS.bind(Messages.errorInstallingServer, e.getLocalizedMessage()), e));
 		} finally {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/LaunchableAdapter.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/LaunchableAdapter.java
index f118866..698a5e4 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/LaunchableAdapter.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/LaunchableAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -60,7 +60,10 @@
 			try {
 				delegate = (LaunchableAdapterDelegate) element.createExecutableExtension("class");
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create delegate" + toString(), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Could not create delegate" + toString(), t);
+				}
 			}
 		}
 		return delegate;
@@ -75,7 +78,10 @@
 		} catch (CoreException ce) {
 			throw ce;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 			return null;
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Module.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Module.java
index 8231056..4ac25b1 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Module.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Module.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -115,9 +115,15 @@
 					long time = System.currentTimeMillis();
 					delegate = factory.getDelegate(monitor).getModuleDelegate(this);
 					delegate.initialize(this);
-					Trace.trace(Trace.PERFORMANCE, "Module.getDelegate(): <" + (System.currentTimeMillis() - time) + " " + factory.getId());
+					if (Trace.PERFORMANCE) {
+						Trace.trace(Trace.STRING_PERFORMANCE, "Module.getDelegate(): <"
+								+ (System.currentTimeMillis() - time) + " " + factory.getId());
+					}
 				} catch (Throwable t) {
-					Trace.trace(Trace.WARNING, "Could not create delegate " + toString(), t);
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING,
+								"Could not create delegate " + toString(), t);
+					}
 				}
 			}
 		}
@@ -134,7 +140,11 @@
 		try {
 			return getDelegate(monitor).getChildModules();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate getChildModules() " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Error calling delegate getChildModules() "
+								+ toString(), e);
+			}
 			return null;
 		}
 	}
@@ -186,7 +196,10 @@
 		try {
 			return getDelegate(monitor).validate();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate validate() " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Error calling delegate validate() " + toString(), e);
+			}
 			return null;
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleArtifactAdapter.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleArtifactAdapter.java
index 1cd39e9..e7dfc1e 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleArtifactAdapter.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleArtifactAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -160,7 +160,10 @@
 			try {
 				delegate = (ModuleArtifactAdapterDelegate) element.createExecutableExtension("class");
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create delegate" + toString(), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Could not create delegate" + toString(), t);
+				}
 			}
 		}
 		return delegate;
@@ -180,7 +183,10 @@
 		try {
 			return getDelegate().getModuleArtifacts(obj);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 			return null;
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
index 0e07791..9c9bb7f 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,10 +13,11 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.expressions.*;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IProgressMonitor;
-
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IModuleType;
 import org.eclipse.wst.server.core.model.InternalInitializer;
@@ -28,6 +29,7 @@
 	private IConfigurationElement element;
 	public ModuleFactoryDelegate delegate;
 	private List<IModuleType> moduleTypes;
+	private Expression fContextualLaunchExpr = null;
 
 	/**
 	 * ModuleFactory constructor comment.
@@ -93,9 +95,15 @@
 				long time = System.currentTimeMillis();
 				delegate = (ModuleFactoryDelegate) element.createExecutableExtension("class");
 				InternalInitializer.initializeModuleFactoryDelegate(delegate, this, monitor);
-				Trace.trace(Trace.PERFORMANCE, "ModuleFactory.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getId());
+				if (Trace.PERFORMANCE) {
+					Trace.trace(Trace.STRING_PERFORMANCE,
+							"ModuleFactory.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getId());
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Could not create delegate " + toString(), t);
+				}
 			}
 		}
 		return delegate;
@@ -118,7 +126,10 @@
 				modules = filter(modules);
 			return modules;
 		} catch (Throwable t) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), t);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), t);
+			}
 			return new IModule[0];
 		}
 	}
@@ -133,10 +144,65 @@
 				modules = filter(modules);
 			return modules;
 		} catch (Throwable t) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), t);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), t);
+			}
 			return new IModule[0];
 		}
 	}
+	
+	/**
+	 * Returns an expression that represents the enablement logic for the
+	 * contextual project of this module factory <code>null</code> if none.
+	 * @return an evaluatable expression or <code>null</code>
+	 * @throws CoreException if the configuration element can't be
+	 *  converted. Reasons include: (a) no handler is available to
+	 *  cope with a certain configuration element or (b) the XML
+	 *  expression tree is malformed.
+	 */
+	protected Expression getContextualLaunchEnablementExpression() throws CoreException {
+		if (fContextualLaunchExpr == null) {
+			IConfigurationElement[] elements = element.getChildren(ExpressionTagNames.ENABLEMENT);
+			IConfigurationElement enablement = (elements != null && elements.length > 0) ? elements[0] : null; 
+
+			if (enablement != null)
+				fContextualLaunchExpr = ExpressionConverter.getDefault().perform(enablement);
+		}
+		return fContextualLaunchExpr;
+	}
+	
+	/**
+	 * Evaluate the given expression within the given context and return
+	 * the result. Returns <code>true</code> if result is either TRUE or NOT_LOADED.
+	 * This allows optimistic inclusion before plugins are loaded.
+	 * Returns <code>true</code> if exp is <code>null</code>.
+	 * 
+	 * @param exp the enablement expression to evaluate or <code>null</code>
+	 * @param context the context of the evaluation. 
+	 * @return the result of evaluating the expression
+	 * @throws CoreException
+	 */
+	protected boolean evalEnablementExpression(IEvaluationContext context, Expression exp) throws CoreException {
+		// for compatibility with the current behaviour, if the exp == null we return true. Meaning that the factory doesn't
+		// implement an expression and should be enabled for all cases.
+		return (exp != null) ? ((exp.evaluate(context)) != EvaluationResult.FALSE) : true;
+	}
+	
+	public boolean isEnabled(IProject project, IProgressMonitor monitor) {
+		try {
+			IEvaluationContext context = new EvaluationContext(null, project);
+			context.addVariable("project", project);
+			
+			return evalEnablementExpression(context, getContextualLaunchEnablementExpression());
+		} catch (Throwable t) {
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), t);
+			}
+			return false;
+		}
+	}
 
 	/*
 	 * @see ModuleFactoryDelegate#findModule(String)
@@ -153,7 +219,10 @@
 			
 			return module;
 		} catch (Throwable t) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), t);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), t);
+			}
 			return null;
 		}
 	}
@@ -184,8 +253,9 @@
 			IModule m = modules[i];
 			if (moduleTypes.contains(m.getModuleType()))
 				list.add(m);
-			else
-				Trace.trace(Trace.WARNING, "Invalid module returned from factory, ignored: " + m);
+			else if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Invalid module returned from factory, ignored: " + m);
+			}
 		}
 		
 		IModule[] m = new IModule[list.size()];
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java
index ec45afd..dfd4235 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2009 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -51,7 +51,9 @@
 	 * Load the data.
 	 */
 	private void load() {
-		Trace.trace(Trace.FINEST, "Loading module info");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Loading module info");
+		}
 		String filename = ServerPlugin.getInstance().getStateLocation().append(MODULE_DATA_FILE).toOSString();
 		modules = new HashMap<String, String>();
 		if (!(new File(filename).exists()))
@@ -69,7 +71,9 @@
 				modules.put(moduleId, serverId);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load servers", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not load servers", e);
+			}
 		}
 	}
 
@@ -91,7 +95,9 @@
 			
 			memento.saveToFile(filename);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save servers", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not save servers", e);
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModulePublishInfo.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModulePublishInfo.java
index d61985e..a719b55 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModulePublishInfo.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModulePublishInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -110,7 +110,9 @@
 	 * Used only for reading from WTP 1.x workspaces.
 	 */
 	protected void load(IMemento memento) {
-		Trace.trace(Trace.FINEST, "Loading module publish info for: " + memento);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Loading module publish info for: " + memento);
+		}
 		
 		try {
 			moduleId = memento.getString(MODULE_ID);
@@ -122,7 +124,10 @@
 			
 			resources = loadResource(memento, new Path(""));
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load module publish info information", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Could not load module publish info information", e);
+			}
 		}
 	}
 
@@ -165,7 +170,9 @@
 	}
 
 	protected void load(DataInput in) throws IOException {
-		Trace.trace(Trace.FINEST, "Loading module publish info");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Loading module publish info");
+		}
 		
 		moduleId = in.readUTF();
 		byte b = in.readByte(); // 8?
@@ -228,7 +235,10 @@
 			}
 			saveResource(out, resources);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save module publish info", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Could not save module publish info", e);
+			}
 		}
 	}
 
@@ -286,9 +296,14 @@
 			
 			delta = ServerPublishInfo.getDelta(resources, currentResources);
 			hasDelta = (delta != null && delta.length > 0);
-			Trace.trace(Trace.PERFORMANCE, "Filling publish cache for " + m.getName() + ": " + (System.currentTimeMillis() - time));
+			if (Trace.PERFORMANCE) {
+				Trace.trace(Trace.STRING_PERFORMANCE,
+						"Filling publish cache for " + m.getName() + ": " + (System.currentTimeMillis() - time));
+			}
 		} catch (CoreException ce) {
-			Trace.trace(Trace.WARNING, "Couldn't fill publish cache for " + module);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Couldn't fill publish cache for " + module);
+			}
 		}
 		if (delta == null)
 			delta = EMPTY_MODULE_RESOURCE_DELTA;
@@ -322,10 +337,16 @@
 			if (ServerPlugin.getInstance().isDebugging())
 				printModule(x,"resources: ");
 			
-			Trace.trace(Trace.PERFORMANCE, "Time to get members() for " + module[size - 1].getName() + ": " + (System.currentTimeMillis() - time));
+			if (Trace.PERFORMANCE) {
+				Trace.trace(Trace.STRING_PERFORMANCE, "Time to get members() for " + module[size - 1].getName() + ": "
+						+ (System.currentTimeMillis() - time));
+			}
 			return x;
 		} catch (CoreException ce) {
-			Trace.trace(Trace.WARNING, "Possible failure in getModuleResources", ce);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Possible failure in getModuleResources", ce);
+			}
 		}
 		return EMPTY_MODULE_RESOURCE;
 	}
@@ -337,7 +358,9 @@
 	}
 
 	private void printModule(IModuleResource r, String s) {
-		Trace.trace(Trace.RESOURCES, s + r.getName());
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, s + r.getName());
+		}
 		if (r instanceof IModuleFolder) {
 			IModuleFolder mf = (IModuleFolder) r;
 			IModuleResource[] mr = mf.members();
@@ -366,7 +389,10 @@
 			resources2 = pm.members();
 			printModule(resources2, "delta:");
 		} catch (CoreException ce) {
-			Trace.trace(Trace.WARNING, "Possible failure in getDelta", ce);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Possible failure in getDelta", ce);
+			}
 		}
 		if (resources2 == null)
 			resources2 = EMPTY_MODULE_RESOURCE;
@@ -391,7 +417,10 @@
 		try {
 			resources2 = pm.members();
 		} catch (CoreException ce) {
-			Trace.trace(Trace.WARNING, "Possible failure in hasDelta", ce);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Possible failure in hasDelta", ce);
+			}
 		}
 		if (resources2 == null)
 			resources2 = EMPTY_MODULE_RESOURCE;
@@ -418,7 +447,10 @@
 		try {
 			setResources(pm.members());
 		} catch (CoreException ce) {
-			Trace.trace(Trace.WARNING, "Possible failure in fill", ce);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Possible failure in fill",
+						ce);
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java
index 820dcbd..cc37b43 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ModuleType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -111,7 +111,9 @@
 	private static synchronized void loadModuleTypes() {
 		if (moduleKinds != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .moduleTypes extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .moduleTypes extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "moduleTypes");
 
@@ -121,13 +123,22 @@
 			try {
 				ModuleKind moduleType = new ModuleKind(cf[i]);
 				moduleKinds.add(moduleType);
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded moduleType: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded moduleType: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load moduleType: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load moduleType: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .moduleTypes extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .moduleTypes extension point -<-");
+		}
 	}
 
 	public int hashCode() {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java
index 53ef7df..6e1e929 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ProjectProperties.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,7 +53,9 @@
 	 * Load the preferences.
 	 */
 	private void loadPreferences() {
-		Trace.trace(Trace.FINEST, "Loading project preferences: " + project);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Loading project preferences: " + project);
+		}
 		
 		if (!project.isAccessible())
 			return;
@@ -74,7 +76,10 @@
 			else
 				serverProject = false;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not load preferences", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not load preferences",
+						e);
+			}
 		} finally {
 			try {
 				if (in != null)
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishController.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishController.java
index aa1c124..77ae103 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishController.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishController.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,9 +66,15 @@
 			try {
 				long time = System.currentTimeMillis();
 				delegate = (PublishControllerDelegate) element.createExecutableExtension("class");
-				Trace.trace(Trace.PERFORMANCE, "PublishTask.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getId());
+				if (Trace.PERFORMANCE) {
+					Trace.trace(Trace.STRING_PERFORMANCE, "PublishTask.getDelegate(): <"
+							+ (System.currentTimeMillis() - time) + "> " + getId());
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create delegate" + toString(), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Could not create delegate" + toString(), t);
+				}
 			}
 		}
 		return delegate;
@@ -76,10 +82,15 @@
 
 	public boolean isPublishRequired(IServer server, IResourceDelta delta) {
 		try {
-			Trace.trace(Trace.FINEST, "Task.init " + this);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Task.init " + this);
+			}
 			return getDelegate().isPublishRequired(server, delta);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 			return true;
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishInfo.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishInfo.java
index 909f609..a0f3dd1 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishInfo.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -135,7 +135,9 @@
 	 * 
 	 */
 	protected void load() {
-		Trace.trace(Trace.FINEST, "Loading publish info");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Loading publish info");
+		}
 		String filename = ServerPlugin.getInstance().getStateLocation().append("publish.xml").toOSString();
 		
 		try {
@@ -151,7 +153,10 @@
 				serverIdToPath.put(id, partialPath);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load global publish info", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Could not load global publish info", e);
+			}
 		}
 	}
 
@@ -176,7 +181,10 @@
 			
 			memento.saveToFile(filename);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save global publish info", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Could not save global publish info", e);
+			}
 		}
 	}
 }
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
index 16396f6..cccc489 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/PublishTask.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,9 +57,15 @@
 			try {
 				long time = System.currentTimeMillis();
 				delegate = (PublishTaskDelegate) element.createExecutableExtension("class");
-				Trace.trace(Trace.PERFORMANCE, "PublishTask.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getId());
+				if (Trace.PERFORMANCE) {
+					Trace.trace(Trace.STRING_PERFORMANCE, "PublishTask.getDelegate(): <"
+							+ (System.currentTimeMillis() - time) + "> " + getId());
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create delegate" + toString(), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Could not create delegate" + toString(), t);
+				}
 			}
 		}
 		return delegate;
@@ -70,12 +76,17 @@
 	 */
 	public PublishOperation[] getTasks(IServer server, List modules) {
 		try {
-			Trace.trace(Trace.FINEST, "Task.init " + this);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Task.init " + this);
+			}
 			PublishOperation[] po = getDelegate().getTasks(server, modules);
 			if (po != null)
 				return po;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 		}
 		return new PublishOperation[0];
 	}
@@ -85,12 +96,17 @@
 	 */
 	public PublishOperation[] getTasks(IServer server, int kind, List modules, List kindList) {
 		try {
-			Trace.trace(Trace.FINEST, "Task.init " + this);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Task.init " + this);
+			}
 			PublishOperation[] po = getDelegate().getTasks(server, kind, modules, kindList);
 			if (po != null)
 				return po;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 		}
 		return new PublishOperation[0];
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Publisher.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Publisher.java
index 0dbb618..6a35107 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Publisher.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Publisher.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2010 IBM Corporation and others.
+ * Copyright (c) 2008, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,9 +73,15 @@
 			try {
 				long time = System.currentTimeMillis();
 				delegate = (PublisherDelegate) element.createExecutableExtension("class");
-				Trace.trace(Trace.PERFORMANCE, "PublishTask.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getId());
+				if (Trace.PERFORMANCE) {
+					Trace.trace(Trace.STRING_PERFORMANCE, "PublishTask.getDelegate(): <"
+							+ (System.currentTimeMillis() - time) + "> " + getId());
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create delegate" + toString(), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Could not create delegate" + toString(), t);
+				}
 			}
 		}
 		return delegate;
@@ -131,7 +137,10 @@
 				while (moduleIterator.hasNext()) {
 					IModule[] module = moduleIterator.next();
 					if (module != null) {
-						Trace.trace(Trace.FINEST, "rebuilding cache for module: " + module[module.length - 1]);
+						if (Trace.FINEST) {
+							Trace.trace(Trace.STRING_FINEST, "rebuilding cache for module: "
+									+ module[module.length - 1]);
+						}
 						server.getServerPublishInfo().rebuildCache(module);
 					}
 				}
@@ -141,7 +150,9 @@
 	
 	public IStatus execute(int kind, IProgressMonitor monitor, IAdaptable info) throws CoreException {
 
-		Trace.trace(Trace.FINEST, "Task.init " + this);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Task.init " + this);
+		}
 		ISchedulingRule delegatePublisherRule = null;
 		final ISchedulingRule originalPublisherRule = Job.getJobManager().currentRule();
 		IStatus resultStatus = null;
@@ -149,29 +160,48 @@
 		try {
 			delegatePublisherRule = getDelegate().getRule();
 			changeSchedulingRules = this.changeSchedulingRule(originalPublisherRule, delegatePublisherRule);
-			Trace.trace(Trace.FINEST, "Change the scheduling rule to execute delegate: " + changeSchedulingRules);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Change the scheduling rule to execute delegate: "
+						+ changeSchedulingRules);
+			}
 			if (changeSchedulingRules) {
-				Trace.trace(Trace.FINEST, "Ending the current scheduling rule " + originalPublisherRule);
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "Ending the current scheduling rule " + originalPublisherRule);
+				}
 				Job.getJobManager().endRule(originalPublisherRule);
-				Trace.trace(Trace.FINEST, "Beginning the new scheduling rule: " + delegatePublisherRule);
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "Beginning the new scheduling rule: " + delegatePublisherRule);
+				}
 				Job.getJobManager().beginRule(delegatePublisherRule, monitor);
 			}
 			resultStatus = getDelegate().execute(kind, monitor, info);
 			this.modifyModules = getDelegate().isModifyModules();
-			Trace.trace(Trace.FINEST, "The publisher delegate stated that it modified modules: " + this.modifyModules);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "The publisher delegate stated that it modified modules: "
+						+ this.modifyModules);
+			}
 			if(this.modifyModules) {
 				this.rebuildModuleCache();
 			}
 		}
 		catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 			resultStatus = new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, "Error in delegate", e);
 		}
 		finally {
 			if (changeSchedulingRules) {
-				Trace.trace(Trace.FINEST, "Reseting the scheduling rules... ending: " + delegatePublisherRule);
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "Reseting the scheduling rules... ending: "
+							+ delegatePublisherRule);
+				}
 				Job.getJobManager().endRule(delegatePublisherRule);
-				Trace.trace(Trace.FINEST, "Reseting the scheduling rules... beginning: " + originalPublisherRule);
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "Reseting the scheduling rules... beginning: "
+							+ originalPublisherRule);
+				}
 				Job.getJobManager().beginRule(originalPublisherRule, monitor);
 			}
 		}
@@ -182,7 +212,10 @@
 		try {
 			getDelegate().setTaskModel(taskModel);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
index 2659997..356f84a 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ResourceManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -99,8 +99,10 @@
 			if (event.getBuildKind() == IncrementalProjectBuilder.CLEAN_BUILD)
 				return;
 			
-			// search for changes related to Server projects  
-			Trace.trace(Trace.RESOURCES, "->- ServerResourceChangeListener responding to resource change: " + event.getType() + " ->-");
+			if (Trace.RESOURCES) {
+				Trace.trace(Trace.STRING_RESOURCES, "->- ServerResourceChangeListener responding to resource change: "
+						+ event.getType() + " ->-");
+			}
 			IResourceDelta[] children = delta.getAffectedChildren();
 			if (children != null) {
 				int size = children.length;
@@ -127,10 +129,16 @@
 					}
 				});
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error responding to resource change", e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Error responding to resource change", e);
+				}
 			}
 			
-			Trace.trace(Trace.RESOURCES, "-<- Done ServerResourceChangeListener responding to resource change -<-");
+			if (Trace.RESOURCES) {
+				Trace.trace(Trace.STRING_RESOURCES,
+						"-<- Done ServerResourceChangeListener responding to resource change -<-");
+			}
 		}
 
 		/**
@@ -143,7 +151,9 @@
 			String projectName = project.getName();
 			if (!ServerPlugin.getProjectProperties(project).isServerProject()) {
 				if (!serverProjects.contains(projectName)) {
-					Trace.trace(Trace.RESOURCES, "Not a server project: " + project.getName());
+					if (Trace.RESOURCES) {
+						Trace.trace(Trace.STRING_RESOURCES, "Not a server project: " + project.getName());
+					}
 					return;
 				}
 				serverProjects.remove(projectName);
@@ -164,7 +174,10 @@
 						}
 					});
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error responding to resource change", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"Error responding to resource change", e);
+					}
 				}
 			}
 		}
@@ -182,7 +195,9 @@
 	 * Execute the server startup extension points.
 	 */
 	private static synchronized void executeStartups() {
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .startup extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .startup extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "internalStartup");
 		
@@ -193,15 +208,22 @@
 				try {
 					startup.startup();
 				} catch (Exception ex) {
-					Trace.trace(Trace.SEVERE, "Startup failed" + startup.toString(), ex);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Startup failed"
+								+ startup.toString(), ex);
+					}
 				}
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded startup: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded startup: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
 				ServerPlugin.logExtensionFailure(cf[i].getAttribute("id"), t);
 			}
 		}
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .startup extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .startup extension point -<-");
+		}
 	}
 
 	protected synchronized void init() {
@@ -245,7 +267,9 @@
 		resourceChangeListener = new ServerResourceChangeListener();
 		ResourcesPlugin.getWorkspace().addResourceChangeListener(resourceChangeListener, IResourceChangeEvent.POST_BUILD | IResourceChangeEvent.PRE_CLOSE | IResourceChangeEvent.PRE_DELETE);
 		
-		Trace.trace(Trace.FINER, "Loading workspace servers and server configurations");
+		if (Trace.FINER) {
+			Trace.trace(Trace.STRING_FINER, "Loading workspace servers and server configurations");
+		}
 		IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
 		if (projects != null) {
 			int size = projects.length;
@@ -268,7 +292,10 @@
 	 * Load all of the servers and server configurations from the given project.
 	 */
 	protected static void loadFromProject(IProject project) {
-		Trace.trace(Trace.FINER, "Initial server resource load for " + project.getName(), null);
+		if (Trace.FINER) {
+			Trace.trace(Trace.STRING_FINER, "Initial server resource load for "
+					+ project.getName(), null);
+		}
 		final ResourceManager rm = ResourceManager.getInstance();
 		
 		try {
@@ -280,7 +307,12 @@
 							try {
 								rm.handleNewFile(file, null);
 							} catch (Exception e) {
-								Trace.trace(Trace.SEVERE, "Error during initial server resource load", e);
+								if (Trace.SEVERE) {
+									Trace.trace(
+											Trace.STRING_SEVERE,
+											"Error during initial server resource load",
+											e);
+								}
 							}
 							return false;
 						}
@@ -288,7 +320,10 @@
 				}
 			}, 0);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not load server project " + project.getName(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Could not load server project " + project.getName(), e);
+			}
 		}
 	}
 		
@@ -312,7 +347,9 @@
 		try {
 			instance.shutdownImpl();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error during shutdown", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error during shutdown", e);
+			}
 		}
 	}
 
@@ -337,7 +374,10 @@
 					server.dispose();
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Error disposing server", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "Error disposing server",
+							e);
+				}
 			}
 		}
 		
@@ -351,7 +391,10 @@
 					runtime.dispose();
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Error disposing server", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "Error disposing server",
+							e);
+				}
 			}
 		}
 		try {
@@ -362,11 +405,18 @@
 	}
 	
 	protected void shutdownImpl() {
+		if(!initialized) {
+			return;
+		}
+
 		IWorkspace workspace = ResourcesPlugin.getWorkspace();
-		if (workspace != null)
+		if (workspace != null && resourceChangeListener != null) {
 			workspace.removeResourceChangeListener(resourceChangeListener);
-		
-		ServerPlugin.getInstance().getPluginPreferences().removePropertyChangeListener(pcl);
+		}
+
+		if (pcl != null) {
+			ServerPlugin.getInstance().getPluginPreferences().removePropertyChangeListener(pcl);
+		}
 		
 		removeServerLifecycleListener(ServerListener.getInstance());
 	}
@@ -375,7 +425,9 @@
 	 * 
 	 */
 	public void addRuntimeLifecycleListener(IRuntimeLifecycleListener listener) {
-		Trace.trace(Trace.LISTENERS, "Adding runtime lifecycle listener " + listener + " to " + this);
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "Adding runtime lifecycle listener " + listener + " to " + this);
+		}
 		
 		synchronized (runtimeListeners) {
 			runtimeListeners.add(listener);
@@ -386,7 +438,9 @@
 	 *
 	 */
 	public void removeRuntimeLifecycleListener(IRuntimeLifecycleListener listener) {
-		Trace.trace(Trace.LISTENERS, "Removing runtime lifecycle listener " + listener + " from " + this);
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "Removing runtime lifecycle listener " + listener + " from " + this);
+		}
 		
 		synchronized (runtimeListeners) {
 			runtimeListeners.remove(listener);
@@ -397,7 +451,9 @@
 	 * 
 	 */
 	public void addServerLifecycleListener(IServerLifecycleListener listener) {
-		Trace.trace(Trace.LISTENERS, "Adding server lifecycle listener " + listener + " to " + this);
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "Adding server lifecycle listener " + listener + " to " + this);
+		}
 		
 		synchronized (serverListeners) {
 			serverListeners.add(listener);
@@ -408,7 +464,9 @@
 	 *
 	 */
 	public void removeServerLifecycleListener(IServerLifecycleListener listener) {
-		Trace.trace(Trace.LISTENERS, "Removing server lifecycle listener " + listener + " from " + this);
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "Removing server lifecycle listener " + listener + " from " + this);
+		}
 		
 		synchronized (serverListeners) {
 			serverListeners.remove(listener);
@@ -424,7 +482,9 @@
 		if (runtime == null)
 			return;
 		
-		Trace.trace(Trace.RESOURCES, "Deregistering runtime: " + runtime.getName());
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "Deregistering runtime: " + runtime.getName());
+		}
 		
 		runtimes.remove(runtime);
 		fireRuntimeEvent(runtime, EVENT_REMOVED);
@@ -440,7 +500,9 @@
 		if (server == null)
 			return;
 		
-		Trace.trace(Trace.RESOURCES, "Deregistering server: " + server.getName());
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "Deregistering server: " + server.getName());
+		}
 		
 		((Server) server).deleteMetadata();
 		
@@ -453,7 +515,9 @@
 	 * Fire a runtime event.
 	 */
 	private void fireRuntimeEvent(final IRuntime runtime, byte b) {
-		Trace.trace(Trace.LISTENERS, "->- Firing runtime event: " + runtime.getName() + " ->-");
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "->- Firing runtime event: " + runtime.getName() + " ->-");
+		}
 		
 		if (runtimeListeners.isEmpty())
 			return;
@@ -461,7 +525,9 @@
 		List<IRuntimeLifecycleListener> clone = new ArrayList<IRuntimeLifecycleListener>();
 		clone.addAll(runtimeListeners);
 		for (IRuntimeLifecycleListener srl : clone) {
-			Trace.trace(Trace.LISTENERS, "  Firing runtime event to " + srl);
+			if (Trace.LISTENERS) {
+				Trace.trace(Trace.STRING_LISTENERS, "  Firing runtime event to " + srl);
+			}
 			try {
 				if (b == EVENT_ADDED)
 					srl.runtimeAdded(runtime);
@@ -470,17 +536,24 @@
 				else
 					srl.runtimeRemoved(runtime);
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "  Error firing runtime event to " + srl, e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"  Error firing runtime event to " + srl, e);
+				}
 			}
 		}
-		Trace.trace(Trace.LISTENERS, "-<- Done firing runtime event -<-");
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "-<- Done firing runtime event -<-");
+		}
 	}
 
 	/**
 	 * Fire a server event.
 	 */
 	private void fireServerEvent(final IServer server, byte b) {
-		Trace.trace(Trace.LISTENERS, "->- Firing server event: " + server.getName() + " ->-");
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "->- Firing server event: " + server.getName() + " ->-");
+		}
 		
 		if (serverListeners.isEmpty())
 			return;
@@ -488,7 +561,9 @@
 		List<IServerLifecycleListener> clone = new ArrayList<IServerLifecycleListener>();
 		clone.addAll(serverListeners);
 		for (IServerLifecycleListener srl : clone) {
-			Trace.trace(Trace.LISTENERS, "  Firing server event to " + srl);
+			if (Trace.LISTENERS) {
+				Trace.trace(Trace.STRING_LISTENERS, "  Firing server event to " + srl);
+			}
 			try {
 				if (b == EVENT_ADDED)
 					srl.serverAdded(server);
@@ -497,10 +572,15 @@
 				else
 					srl.serverRemoved(server);
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "  Error firing server event to " + srl, e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"  Error firing server event to " + srl, e);
+				}
 			}
 		}
-		Trace.trace(Trace.LISTENERS, "-<- Done firing server event -<-");
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "-<- Done firing server event -<-");
+		}
 	}
 
 	protected void saveRuntimesList() {
@@ -521,7 +601,9 @@
 			prefs.setValue("runtimes", xmlString);
 			ServerPlugin.getInstance().savePluginPreferences();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save runtimes", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not save runtimes", e);
+			}
 		}
 		ignorePreferenceChanges = false;
 	}
@@ -544,12 +626,16 @@
 			
 			memento.saveToFile(filename);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save servers", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not save servers", e);
+			}
 		}
 	}
 
 	protected void loadRuntimesList() {
-		Trace.trace(Trace.FINEST, "Loading runtime info");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Loading runtime info");
+		}
 		Preferences prefs = ServerPlugin.getInstance().getPluginPreferences();
 		String xmlString = prefs.getString("runtimes");
 		
@@ -568,13 +654,18 @@
 					runtimes.add(runtime);
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load runtimes", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING,
+							"Could not load runtimes", e);
+				}
 			}
 		}
 	}
 
 	protected void loadServersList() {
-		Trace.trace(Trace.FINEST, "Loading server info");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Loading server info");
+		}
 		String filename = ServerPlugin.getInstance().getStateLocation().append(SERVER_DATA_FILE).toOSString();
 		
 		try {
@@ -589,7 +680,9 @@
 				servers.add(server);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load servers", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not load servers", e);
+			}
 		}
 	}
 
@@ -757,7 +850,9 @@
 		if (kind == IResourceDelta.CHANGED && (flags & IResourceDelta.MARKERS) != 0)
 			return false;
 		
-		Trace.trace(Trace.RESOURCES, "Resource changed: " + resource2 + " " + kind);
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "Resource changed: " + resource2 + " " + kind);
+		}
 		
 		if (resource2 instanceof IFile) {
 			IFile file = (IFile) resource2;
@@ -783,7 +878,9 @@
 				try {
 					((Server)server).getDelegate(null).configurationChanged();
 				} catch (Exception e) {
-					Trace.trace(Trace.WARNING, "Server failed on configuration change");
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING, "Server failed on configuration change");
+					}
 				}
 			}
 		}
@@ -805,7 +902,9 @@
 	 * @return boolean
 	 */
 	protected boolean handleNewFile(IFile file, IProgressMonitor monitor) {
-		Trace.trace(Trace.RESOURCES, "handleNewFile: " + file);
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "handleNewFile: " + file);
+		}
 		monitor = ProgressUtil.getMonitorFor(monitor);
 		monitor.beginTask("", 2000);
 		
@@ -820,7 +919,9 @@
 					return true;
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error loading server", e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Error loading server", e);
+				}
 			}
 		}
 		
@@ -837,7 +938,9 @@
 	 * @return boolean
 	 */
 	private boolean handleMovedFile(IFile file, IResourceDelta delta, IProgressMonitor monitor) {
-		Trace.trace(Trace.RESOURCES, "handleMovedFile: " + file);
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "handleMovedFile: " + file);
+		}
 		monitor = ProgressUtil.getMonitorFor(monitor);
 		monitor.beginTask("", 2000);
 		
@@ -901,7 +1004,9 @@
 	 * @return boolean
 	 */
 	private boolean handleChangedFile(IFile file, IProgressMonitor monitor) {
-		Trace.trace(Trace.RESOURCES, "handleChangedFile: " + file);
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "handleChangedFile: " + file);
+		}
 		monitor = ProgressUtil.getMonitorFor(monitor);
 		monitor.beginTask("", 1000);
 		boolean found = false;
@@ -910,15 +1015,22 @@
 		if (server != null) {
 			found = true;
 			try {
-				Trace.trace(Trace.RESOURCES, "Reloading server: " + server);
+				if (Trace.RESOURCES) {
+					Trace.trace(Trace.STRING_RESOURCES, "Reloading server: " + server);
+				}
 				((Server) server).loadFromFile(monitor);
 				fireServerEvent(server, EVENT_CHANGED);
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error reloading server " + server.getName() + " from " + file, e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Error reloading server "
+							+ server.getName() + " from " + file, e);
+				}
 				removeServer(server);
 			}
-		} else
-			Trace.trace(Trace.RESOURCES, "No server found at: " + file);
+		}
+		else if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "No server found at: " + file);
+		}
 		
 		monitor.done();
 		return found;
@@ -932,7 +1044,9 @@
 	 * @return boolean
 	 */
 	private boolean handleRemovedFile(IFile file) {
-		Trace.trace(Trace.RESOURCES, "handleRemovedFile: " + file);
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "handleRemovedFile: " + file);
+		}
 		
 		IServer server = findServer(file);
 		if (server != null) {
@@ -940,7 +1054,9 @@
 			return true;
 		}
 		
-		Trace.trace(Trace.RESOURCES, "No server found at: " + file);
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "No server found at: " + file);
+		}
 		return false;
 	}
 
@@ -962,7 +1078,9 @@
 	 * @param buildEvent whether this event was a build event
 	 */
 	protected void publishHandleProjectChange(IResourceDelta delta, IResourceChangeEvent event) {
-		Trace.trace(Trace.FINEST, "> publishHandleProjectChange " + delta.getResource());
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "> publishHandleProjectChange " + delta.getResource());
+		}
 		IProject project = (IProject) delta.getResource();
 		
 		if (project == null)
@@ -977,7 +1095,9 @@
 		if (modules == null)
 			return;
 		
-		Trace.trace(Trace.FINEST, "- publishHandleProjectChange");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "- publishHandleProjectChange");
+		}
 
 		int size = modules.length;
 		int size2 = servers2.length;
@@ -987,7 +1107,9 @@
 					((Server) servers2[j]).handleModuleProjectChange(modules[i], event);
 			}
 		}
-		Trace.trace(Trace.FINEST, "< publishHandleProjectChange");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "< publishHandleProjectChange");
+		}
 	}
 
 	private IServer[] getPublishRequiredServers(IResourceDelta delta){		
@@ -1088,7 +1210,9 @@
 		if (runtime == null)
 			return;
 		
-		Trace.trace(Trace.RESOURCES, "Registering runtime: " + runtime.getName());
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "Registering runtime: " + runtime.getName());
+		}
 		
 		runtimes.add(runtime);
 		fireRuntimeEvent(runtime, EVENT_ADDED);
@@ -1108,15 +1232,19 @@
 		if (server == null)
 			return;
 		
-		Trace.trace(Trace.RESOURCES, "Registering server: " + server.getName());
+		if (Trace.RESOURCES) {
+			Trace.trace(Trace.STRING_RESOURCES, "Registering server: " + server.getName());
+		}
 		
 		servers.add(server);
 		fireServerEvent(server, EVENT_ADDED);
 		
 		ServerType serverType = (ServerType) server.getServerType();
-		String bundleId = serverType.getNamespace();
-		if (activeBundles != null && !activeBundles.contains(bundleId))
-			activeBundles.add(bundleId);
+		if (serverType != null) {
+			String bundleId = serverType.getNamespace();
+			if (activeBundles != null && !activeBundles.contains(bundleId))
+				activeBundles.add(bundleId);
+		}
 	}
 
 	public String toString() {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Runtime.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Runtime.java
index 04e3bc0..f7e0a40 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Runtime.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Runtime.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2006 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,7 +79,10 @@
 					delegate = ((RuntimeType) runtimeType).createRuntimeDelegate();
 					if (delegate != null)
 						InternalInitializer.initializeRuntimeDelegate(delegate, this, monitor);
-					Trace.trace(Trace.PERFORMANCE, "Runtime.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getRuntimeType().getId());
+					if (Trace.PERFORMANCE) {
+						Trace.trace(Trace.STRING_PERFORMANCE, "Runtime.getDelegate(): <"
+								+ (System.currentTimeMillis() - time) + "> " + getRuntimeType().getId());
+					}
 				} catch (Throwable t) {
 					ServerPlugin.logExtensionFailure(toString(), t);
 				}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeLocator.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeLocator.java
index c1016e8..b71cc6f 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeLocator.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeLocator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -52,7 +52,10 @@
 			try {
 				delegate = (RuntimeLocatorDelegate) element.createExecutableExtension("class");
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Could not create delegate " + toString(), t);
+				}
 			}
 		}
 		return delegate;
@@ -70,7 +73,10 @@
 				}
 			}, monitor);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java
index 2823425..1e0a831 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/RuntimeWorkingCopy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -194,9 +194,15 @@
 					long time = System.currentTimeMillis();
 					workingCopyDelegate = ((RuntimeType) runtimeType).createRuntimeDelegate();
 					InternalInitializer.initializeRuntimeDelegate(workingCopyDelegate, this, monitor);
-					Trace.trace(Trace.PERFORMANCE, "RuntimeWorkingCopy.getWorkingCopyDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getRuntimeType().getId());
+					if (Trace.PERFORMANCE) {
+						Trace.trace(Trace.STRING_PERFORMANCE, "RuntimeWorkingCopy.getWorkingCopyDelegate(): <"
+								+ (System.currentTimeMillis() - time) + "> " + getRuntimeType().getId());
+					}
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"Could not create delegate " + toString(), e);
+					}
 				}
 			}
 		}
@@ -252,7 +258,10 @@
 			ServerUtil.setRuntimeDefaultName(this);
 			getWorkingCopyDelegate(monitor).setDefaults(monitor);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate setDefaults() " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Error calling delegate setDefaults() " + toString(), e);
+			}
 		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
index f8612bc..11670be 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Server.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -128,7 +128,9 @@
 		}
 
 		public void run() {
-			Trace.trace(Trace.FINEST, "Auto-publish thread starting for " + Server.this + " - " + time + "s");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Auto-publish thread starting for " + Server.this + " - " + time + "s");
+			}
 			if (stop)
 				return;
 			
@@ -141,7 +143,9 @@
 			if (stop)
 				return;
 			
-			Trace.trace(Trace.FINEST, "Auto-publish thread publishing " + Server.this);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Auto-publish thread publishing " + Server.this);
+			}
 			
 			if (getServerState() != IServer.STATE_STARTED)
 				return;
@@ -488,7 +492,10 @@
 					delegate = ((ServerType) serverType).createServerDelegate();
 					if (delegate != null)
 						InternalInitializer.initializeServerDelegate(delegate, Server.this, monitor);
-					Trace.trace(Trace.PERFORMANCE, "Server.getDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
+					if (Trace.PERFORMANCE) {
+						Trace.trace(Trace.STRING_PERFORMANCE, "Server.getDelegate(): <"
+								+ (System.currentTimeMillis() - time) + "> " + getServerType().getId());
+					}
 				} catch (Throwable t) {
 					ServerPlugin.logExtensionFailure(toString(), t);
 				}
@@ -508,7 +515,11 @@
 					behaviourDelegate = ((ServerType) serverType).createServerBehaviourDelegate();
 					if (behaviourDelegate != null)
 						InternalInitializer.initializeServerBehaviourDelegate(behaviourDelegate, Server.this, monitor);
-					Trace.trace(Trace.PERFORMANCE, "Server.getBehaviourDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
+					if (Trace.PERFORMANCE) {
+						Trace.trace(Trace.STRING_PERFORMANCE,
+								"Server.getBehaviourDelegate(): <" + (System.currentTimeMillis() - time) + "> "
+										+ getServerType().getId());
+					}
 
 					// publish only if the server is started but respect Server > Launching > PREF_AUTO_PUBLISH
 					if (getServerState() == IServer.STATE_STARTED && ServerCore.isAutoPublishing())
@@ -636,7 +647,9 @@
 	public void addServerListener(IServerListener listener) {
 		if (listener == null)
 			throw new IllegalArgumentException("Module cannot be null");
-		Trace.trace(Trace.LISTENERS, "Adding server listener " + listener + " to " + this);
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "Adding server listener " + listener + " to " + this);
+		}
 		getServerNotificationManager().addListener(listener);
 	}
 
@@ -649,7 +662,10 @@
 	public void addServerListener(IServerListener listener, int eventMask) {
 		if (listener == null)
 			throw new IllegalArgumentException("Module cannot be null");
-		Trace.trace(Trace.LISTENERS, "Adding server listener " + listener + " to " + this + " with eventMask " + eventMask);
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "Adding server listener " + listener + " to " + this
+					+ " with eventMask " + eventMask);
+		}
 		getServerNotificationManager().addListener(listener, eventMask);
 	}
 
@@ -661,7 +677,9 @@
 	public void removeServerListener(IServerListener listener) {
 		if (listener == null)
 			throw new IllegalArgumentException("Module cannot be null");
-		Trace.trace(Trace.LISTENERS, "Removing server listener " + listener + " from " + this);
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "Removing server listener " + listener + " from " + this);
+		}
 		getServerNotificationManager().removeListener(listener);
 	}
 
@@ -669,7 +687,9 @@
 	 * Fire a server listener restart state change event.
 	 */
 	protected void fireRestartStateChangeEvent() {
-		Trace.trace(Trace.LISTENERS, "->- Firing server restart change event: " + getName() + " ->-");
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "->- Firing server restart change event: " + getName() + " ->-");
+		}
 		
 		if (notificationManager == null || notificationManager.hasNoListeners())
 			return;
@@ -678,12 +698,32 @@
 			new ServerEvent(ServerEvent.SERVER_CHANGE | ServerEvent.RESTART_STATE_CHANGE, this, getServerState(), 
 				getServerPublishState(), getServerRestartState()));
 	}
+	
+	/**
+	 * Fire a server listener server status change event
+	 */
+	protected void fireServerStatusChangeEvent() {
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "->- Firing server status change event: " + getName() + ", "
+					+ getServerStatus() + " ->-");
+		}
+		
+		if (notificationManager == null || notificationManager.hasNoListeners())
+			return;
+		
+		notificationManager.broadcastChange(
+			new ServerEvent(ServerEvent.SERVER_CHANGE | ServerEvent.STATUS_CHANGE, this, getServerState(), 
+				getServerPublishState(), getServerRestartState(), getServerStatus()));
+	}
 
 	/**
 	 * Fire a server listener state change event.
 	 */
 	protected void fireServerStateChangeEvent() {
-		Trace.trace(Trace.LISTENERS, "->- Firing server state change event: " + getName() + ", " + getServerState() + " ->-");
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "->- Firing server state change event: " + getName() + ", "
+					+ getServerState() + " ->-");
+		}
 		
 		if (notificationManager == null || notificationManager.hasNoListeners())
 			return;
@@ -697,7 +737,10 @@
 	 * Fire a server listener change event.
 	 */
 	protected void fireServerChangeEvent() {
-		Trace.trace(Trace.LISTENERS, "->- Firing server change event: " + getName() + ", " + getServerState() + " ->-");
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "->- Firing server change event: " + getName() + ", "
+					+ getServerState() + " ->-");
+		}
 		
 		if (notificationManager == null || notificationManager.hasNoListeners())
 			return;
@@ -711,7 +754,10 @@
 	 * Fire a server listener module state change event.
 	 */
 	protected void fireModuleStateChangeEvent(IModule[] module) {
-		Trace.trace(Trace.LISTENERS, "->- Firing module state change event: " + getName() + ", " + getServerState() + " ->-");
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "->- Firing module state change event: " + getName() + ", "
+					+ getServerState() + " ->-");
+		}
 		
 		if (notificationManager == null || notificationManager.hasNoListeners())
 			return;
@@ -720,12 +766,33 @@
 			new ServerEvent(ServerEvent.MODULE_CHANGE | ServerEvent.STATE_CHANGE, this, module, getModuleState(module), 
 				getModulePublishState(module), getModuleRestartState(module)));
 	}
+	
+
+	/**
+	 * Fire a server listener module status change event.
+	 */
+	protected void fireModuleStatusChangeEvent(IModule[] module) {
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "->- Firing module status change event: " + getName() + ", "
+					+ getModuleStatus(module) + " ->-");
+		}
+		
+		if (notificationManager == null || notificationManager.hasNoListeners())
+			return;
+		
+		notificationManager.broadcastChange(
+			new ServerEvent(ServerEvent.MODULE_CHANGE | ServerEvent.STATUS_CHANGE, this, module, getModuleState(module), 
+				getModulePublishState(module), getModuleRestartState(module), getModuleStatus(module)));
+	}
 
 	/**
 	 * Fire a server listener module publish state change event.
 	 */
 	protected void fireModulePublishStateChangeEvent(IModule[] module) {
-		Trace.trace(Trace.LISTENERS, "->- Firing module publish state change event: " + getName() + ", " + getServerState() + " ->-");
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "->- Firing module publish state change event: " + getName() + ", "
+					+ getServerState() + " ->-");
+		}
 		
 		if (notificationManager == null || notificationManager.hasNoListeners())
 			return;
@@ -739,7 +806,10 @@
 	 * Fire a server listener module state change event.
 	 */
 	protected void fireModuleRestartChangeEvent(IModule[] module) {
-		Trace.trace(Trace.LISTENERS, "->- Firing module restart change event: " + getName() + ", " + getServerState() + " ->-");
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "->- Firing module restart change event: " + getName() + ", "
+					+ getServerState() + " ->-");
+		}
 		
 		if (notificationManager == null || notificationManager.hasNoListeners())
 			return;
@@ -804,7 +874,7 @@
 		}
 	}
 
-	protected List<IModule> getExternalModules() {
+	public List<IModule> getExternalModules() {
 		return externalModules;
  	}
 
@@ -813,7 +883,9 @@
 	}
 
 	protected void handleModuleProjectChange(IModule module, IResourceChangeEvent buildEvent) {
-		Trace.trace(Trace.FINEST, "> handleDeployableProjectChange() " + this + " " + module);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "> handleDeployableProjectChange() " + this + " " + module);
+		}
 		
 		if (!isModuleDeployed(module)){
 			return;
@@ -837,11 +909,15 @@
 		job.setPriority(Job.BUILD);
 		job.schedule();
 		
-		Trace.trace(Trace.FINEST, "< handleDeployableProjectChange()");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "< handleDeployableProjectChange()");
+		}
 	}
 	
 	protected boolean isModuleDeployed(final IModule requestedModule){
-		Trace.trace(Trace.FINEST, "> isModuleDeployed()");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "> isModuleDeployed()");
+		}
 
 		// no modules are deployed
 		if (getModules().length < 0)
@@ -866,7 +942,9 @@
 			}
 		}
 		
-		Trace.trace(Trace.FINEST, "< isModuleDeployed() deployed="+deployed);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "< isModuleDeployed() deployed=" + deployed);
+		}
 		return deployed;
 	}
 
@@ -970,7 +1048,9 @@
 	public void addPublishListener(IPublishListener listener) {
 		if (listener == null)
 			throw new IllegalArgumentException("Listener cannot be null");
-		Trace.trace(Trace.LISTENERS, "Adding publish listener " + listener + " to " + this);
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "Adding publish listener " + listener + " to " + this);
+		}
 		
 		if (publishListeners == null)
 			publishListeners = new ArrayList<IPublishListener>();
@@ -987,7 +1067,9 @@
 	public void removePublishListener(IPublishListener listener) {
 		if (listener == null)
 			throw new IllegalArgumentException("Listener cannot be null");
-		Trace.trace(Trace.LISTENERS, "Removing publish listener " + listener + " from " + this);
+		if (Trace.LISTENERS) {
+			Trace.trace(Trace.STRING_LISTENERS, "Removing publish listener " + listener + " from " + this);
+		}
 
 		if (publishListeners != null)
 			publishListeners.remove(listener);
@@ -997,7 +1079,9 @@
 	 * Fire a publish start event.
 	 */
 	protected void firePublishStarted() {
-		Trace.trace(Trace.FINEST, "->- Firing publish started event ->-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "->- Firing publish started event ->-");
+		}
 	
 		if (publishListeners == null || publishListeners.isEmpty())
 			return;
@@ -1007,15 +1091,24 @@
 		publishListeners.toArray(srl);
 
 		for (int i = 0; i < size; i++) {
-			Trace.trace(Trace.FINEST, "  Firing publish started event to " + srl[i]);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "  Firing publish started event to " + srl[i]);
+			}
 			try {
 				srl[i].publishStarted(this);
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "  Error firing publish started event to " + srl[i], e);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Error firing publish started event to " + srl[i],
+							e);
+				}
 			}
 		}
 
-		Trace.trace(Trace.FINEST, "-<- Done firing publish started event -<-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "-<- Done firing publish started event -<-");
+		}
 	}
 
 	/**
@@ -1024,7 +1117,9 @@
 	 * @param status publishing status
 	 */
 	protected void firePublishFinished(IStatus status) {
-		Trace.trace(Trace.FINEST, "->- Firing publishing finished event: " + status + " ->-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "->- Firing publishing finished event: " + status + " ->-");
+		}
 	
 		if (publishListeners == null || publishListeners.isEmpty())
 			return;
@@ -1034,22 +1129,32 @@
 		publishListeners.toArray(srl);
 
 		for (int i = 0; i < size; i++) {
-			Trace.trace(Trace.FINEST, "  Firing publishing finished event to " + srl[i]);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "  Firing publishing finished event to " + srl[i]);
+			}
 			try {
 				srl[i].publishFinished(this, status);
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "  Error firing publishing finished event to " + srl[i], e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"  Error firing publishing finished event to "
+									+ srl[i], e);
+				}
 			}
 		}
 
-		Trace.trace(Trace.FINEST, "-<- Done firing publishing finished event -<-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "-<- Done firing publishing finished event -<-");
+		}
 	}
 
 	/**
 	 * Fire a publish state change event.
 	 */
 	protected void firePublishStateChange() {
-		Trace.trace(Trace.FINEST, "->- Firing publish state change event ->-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "->- Firing publish state change event ->-");
+		}
 		
 		if (notificationManager == null || notificationManager.hasNoListeners())
 			return;
@@ -1063,7 +1168,9 @@
 	 * Fire a publish state change event.
 	 */
 	protected void firePublishStateChange(IModule[] module) {
-		Trace.trace(Trace.FINEST, "->- Firing publish state change event: " + module + " ->-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "->- Firing publish state change event: " + module + " ->-");
+		}
 	
 		if (notificationManager == null || notificationManager.hasNoListeners())
 			return;
@@ -1528,7 +1635,9 @@
 	}
 	
 	public void setLaunch(ILaunch launch) {
-		Trace.trace(Trace.FINEST, "setLaunch() "+ launch);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "setLaunch() " + launch);
+		}
 		this.launch = launch;
 	}
 
@@ -1536,7 +1645,11 @@
 		try {
 			getBehaviourDelegate(monitor).setupLaunchConfiguration(workingCopy, monitor);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate setupLaunchConfiguration() " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Error calling delegate setupLaunchConfiguration() "
+								+ toString(), e);
+			}
 		}
 	}
 
@@ -1585,7 +1698,11 @@
 									try {
 										lc[0] = wc.doSave();
 									} catch (CoreException ce) {
-										Trace.trace(Trace.SEVERE, "Error configuring launch", ce);
+										if (Trace.SEVERE) {
+											Trace.trace(Trace.STRING_SEVERE,
+													"Error configuring launch",
+													ce);
+										}
 									}
 									return Status.OK_STATUS;
 								}
@@ -1595,7 +1712,10 @@
 							try {
 								job.join();
 							} catch (Exception e) {
-								Trace.trace(Trace.SEVERE, "Error configuring launch", e);
+								if (Trace.SEVERE) {
+									Trace.trace(Trace.STRING_SEVERE,
+											"Error configuring launch", e);
+								}
 							}
 							if (job.getState() != Job.NONE) {
 								job.cancel();
@@ -1607,7 +1727,10 @@
 						return launchConfigs[i];
 					}
 				} catch (CoreException e) {
-					Trace.trace(Trace.SEVERE, "Error configuring launch", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"Error configuring launch", e);
+					}
 				}
 			}
 		}
@@ -1728,7 +1851,9 @@
 		if (getServerState() == STATE_STOPPED)
 			return;
 		
-		Trace.trace(Trace.FINEST, "Restarting server: " + getName());
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Restarting server: " + getName());
+		}
 		
 		RestartJob restartJob = new RestartJob(mode2);
 		restartJob.schedule();
@@ -1813,8 +1938,12 @@
 		if (ServerCore.isAutoPublishing() && shouldPublish()) {
 			if (((ServerType)getServerType()).startBeforePublish())
 				pub = StartJob.PUBLISH_AFTER;
-			else
+			else {
+				if(op != null) {
+					op.done(Status.OK_STATUS);
+				}
 				return Status.OK_STATUS;
+			}
 		}
 		
 		final IStatus [] pubStatus = new IStatus[]{Status.OK_STATUS};
@@ -1852,7 +1981,9 @@
 	 * @see IServer#start(String, IProgressMonitor)
 	 */
 	public void start(String mode2, IProgressMonitor monitor) throws CoreException {
-		Trace.trace(Trace.FINEST, "Starting server: " + toString() + ", launchMode: " + mode2);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Starting server: " + toString() + ", launchMode: " + mode2);
+		}
 		if (getServerType() == null)
 			return;
 		
@@ -1862,7 +1993,9 @@
 		IStatus status = publishBeforeStart(monitor,false);
 		
 		if (status != null && status.getSeverity() == IStatus.ERROR){
-			Trace.trace(Trace.FINEST,"Failed publish job during start routine");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Failed publish job during start routine");
+			}
 			return;
 		}
 		
@@ -1873,8 +2006,10 @@
 			public void done(IJobChangeEvent event) {
 				IStatus resultStatus = event.getResult();
 				if (resultStatus != null && resultStatus.getSeverity() == IStatus.ERROR) { 
-					// Do not launch the publish.
-					Trace.trace(Trace.INFO,"Skipping auto publish after server start since the server start failed.");
+					if (Trace.INFO) {
+						Trace.trace(Trace.STRING_INFO,
+								"Skipping auto publish after server start since the server start failed.");
+					}
 				} else {
 					publishAfterStart(monitor2,false,null);
 				}
@@ -1899,7 +2034,11 @@
 		IStatus status = publishBeforeStart(null,false);
 		
 		if (status != null && status.getSeverity() == IStatus.ERROR){
-			Trace.trace(Trace.FINEST,"Failed publish job during start routine");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Failed publish job during start routine");
+			}
+			if (opListener != null)
+				opListener.done(Status.OK_STATUS);
 			return;
 		}
 
@@ -1930,9 +2069,14 @@
 				public void done(IJobChangeEvent event) {
 					IStatus resultStatus = event.getResult();
 					if (resultStatus != null && resultStatus.getSeverity() == IStatus.ERROR) { 
-						// Do not launch the publish.
-						Trace.trace(Trace.INFO,"Skipping auto publish after server start since the server start failed.");
-					} else {
+						if (Trace.INFO) {
+							Trace.trace(Trace.STRING_INFO,
+									"Skipping auto publish after server start since the server start failed.");
+						}
+						if (opListener != null)
+							opListener.done(Status.OK_STATUS);
+					}
+					else {
 						publishAfterStart(null,false,opListener);
 					}
 				}
@@ -1951,7 +2095,9 @@
 		IStatus status = publishBeforeStart(monitor,true);
 		
 		if (status != null && status.getSeverity() == IStatus.ERROR){
-			Trace.trace(Trace.FINEST,"Failed publish job during start routine");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Failed publish job during start routine");
+			}
 			return;
 		}
 		
@@ -1962,8 +2108,10 @@
 			public void done(IJobChangeEvent event) {
 				IStatus resultStatus = event.getResult();
 				if (resultStatus != null && resultStatus.getSeverity() == IStatus.ERROR) { 
-					// Do not launch the publish.
-					Trace.trace(Trace.INFO,"Skipping auto publish after server start since the server start failed.");
+					if (Trace.INFO) {
+						Trace.trace(Trace.STRING_INFO,
+								"Skipping auto publish after server start since the server start failed.");
+					}
 				} else {
 					publishAfterStart(monitor2,true,null);
 				}
@@ -1974,7 +2122,9 @@
 		try {
 			startJob.join();
 		} catch (InterruptedException e) {
-			Trace.trace(Trace.WARNING, "Error waiting for job", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Error waiting for job", e);
+			}
 		}
 	}
 
@@ -2055,7 +2205,9 @@
 		try {
 			job.join();
 		} catch (InterruptedException e) {
-			Trace.trace(Trace.WARNING, "Error waiting for job", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Error waiting for job", e);
+			}
 		}
 	}
 
@@ -2215,8 +2367,6 @@
 		//serverState = wc.serverState;
 		delegate = wc.delegate;
 		
-		if (getServerState() == IServer.STATE_STARTED)
-			autoPublish();
 	}
 
 	protected void saveState(IMemento memento) {
@@ -2378,7 +2528,7 @@
 			throw new IllegalArgumentException("Module cannot be null or empty");
 		try {
 			int i = module.length - 1;
-			if (module[i].getProject() == null || !module[i].getProject().isAccessible())
+			if (!module[i].isExternal() && (module[i].getProject() == null || !module[i].getProject().isAccessible()))
 				return null;
 			
 			ServerDelegate sd = getDelegate(monitor);
@@ -2509,11 +2659,16 @@
 							// notify waiter
 							synchronized (notified) {
 								try {
-									Trace.trace(Trace.FINEST, "runAndWait notify");
+									if (Trace.FINEST) {
+										Trace.trace(Trace.STRING_FINEST, "runAndWait notify");
+									}
 									notified[0] = true;
 									notified.notifyAll();
 								} catch (Exception e) {
-									Trace.trace(Trace.SEVERE, "Error notifying runAndWait", e);
+									if (Trace.SEVERE) {
+										Trace.trace(Trace.STRING_SEVERE,
+												"Error notifying runAndWait", e);
+									}
 								}
 							}
 						}
@@ -2549,7 +2704,9 @@
 								launch.terminate();//TODO
 							// notify waiter
 							synchronized (notified) {
-								Trace.trace(Trace.FINEST, "runAndWait user cancelled");
+								if (Trace.FINEST) {
+									Trace.trace(Trace.STRING_FINEST, "runAndWait user cancelled");
+								}
 								notified[0] = true;
 								notified.notifyAll();
 							}
@@ -2558,7 +2715,9 @@
 					if (!userCancelled && !timer.alreadyDone && !notified[0]) {
 						// notify waiter
 						synchronized (notified) {
-							Trace.trace(Trace.FINEST, "runAndWait notify timeout");
+							if (Trace.FINEST) {
+								Trace.trace(Trace.STRING_FINEST, "runAndWait notify timeout");
+							}
 							if (!timer.alreadyDone && totalTimeout <= 0)
 								timer.timeout = true;
 							notified[0] = true;
@@ -2566,14 +2725,19 @@
 						}
 					}
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error notifying runAndWait timeout", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"Error notifying runAndWait timeout", e);
+					}
 				}
 			}
 		};
 		thread.setDaemon(true);
 		thread.start();
 	
-		Trace.trace(Trace.FINEST, "runAndWait 2");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "runAndWait 2");
+		}
 	
 		// do the operation
 		try {
@@ -2589,7 +2753,9 @@
 			return Status.CANCEL_STATUS;
 		}
 		
-		Trace.trace(Trace.FINEST, "runAndWait 3");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "runAndWait 3");
+		}
 		
 		// wait for it! wait for it! ...
 		synchronized (notified) {
@@ -2599,7 +2765,10 @@
 					notified.wait();
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error waiting for operation", e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Error waiting for operation", e);
+				}
 			}
 			timer.alreadyDone = true;
 		}
@@ -2637,7 +2806,11 @@
 						try {
 							getBehaviourDelegate(monitor2).startModule(module, monitor2);
 						} catch (Exception e) {
-							Trace.trace(Trace.SEVERE, "Error calling delegate startModule() " + toString(), e);
+							if (Trace.SEVERE) {
+								Trace.trace(Trace.STRING_SEVERE,
+										"Error calling delegate startModule() "
+												+ toString(), e);
+							}
 							throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, e.getMessage()));
 						}
 					}
@@ -2676,7 +2849,11 @@
 						try {
 							getBehaviourDelegate(monitor2).stopModule(module, monitor2);
 						} catch (Exception e) {
-							Trace.trace(Trace.SEVERE, "Error calling delegate stopModule() " + toString(), e);
+							if (Trace.SEVERE) {
+								Trace.trace(Trace.STRING_SEVERE,
+										"Error calling delegate stopModule() "
+												+ toString(), e);
+							}
 							throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, e.getMessage()));
 						}
 					}
@@ -2715,7 +2892,11 @@
 						try {
 							getBehaviourDelegate(monitor2).restartModule(module, monitor2);
 						} catch (Exception e) {
-							Trace.trace(Trace.SEVERE, "Error calling delegate restartModule() " + toString(), e);
+							if (Trace.SEVERE) {
+								Trace.trace(Trace.STRING_SEVERE,
+										"Error calling delegate restartModule() "
+												+ toString(), e);
+							}
 							throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, e.getMessage()));
 						}
 					}
@@ -2816,7 +2997,7 @@
 		if (module == null || module.length == 0)
 			throw new IllegalArgumentException("Module cannot be null or empty");
 		moduleStatus.put(getKey(module), status);
-		//fireServerModuleStateChangeEvent(module);
+		fireModuleStatusChangeEvent(module);
 	}
 
 	public IStatus getModuleStatus(IModule[] module) {
@@ -2831,7 +3012,7 @@
 
 	public void setServerStatus(IStatus status) {
 		serverStatus = status;
-		//fireServerStateChangeEvent();
+		fireServerStatusChangeEvent();
 	}
 
 	public IStatus getServerStatus() {
@@ -2878,8 +3059,13 @@
 	}
 
 	protected IStatus publishImpl(int kind, List<IModule[]> modules4, IAdaptable info, IProgressMonitor monitor) {
-		Trace.trace(Trace.FINEST, "-->-- Publishing to server: " + Server.this.toString() + " -->--");
-		Trace.trace(Trace.FINEST, "Server.publishImpl(): kind=<"+getPublishKindString(kind)+"> modules=" + modules4);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "-->-- Publishing to server: " + Server.this.toString() + " -->--");
+		}
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Server.publishImpl(): kind=<" + getPublishKindString(kind) + "> modules="
+					+ modules4);
+		}
 		
 		stopAutoPublish();
 		
@@ -2892,7 +3078,10 @@
 			try {
 				getBehaviourDelegate(monitor).publish(kind, modules4, monitor, info);
 			} catch (CoreException ce) {
-				Trace.trace(Trace.WARNING, "Error during publishing", ce);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING,
+							"Error during publishing", ce);
+				}
 				status = ce.getStatus();
 			}
 			
@@ -2912,16 +3101,26 @@
 			getServerPublishInfo().save();
 			
 			firePublishFinished(Status.OK_STATUS);
-			Trace.trace(Trace.PERFORMANCE, "Server.publishImpl(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
+			if (Trace.PERFORMANCE) {
+				Trace.trace(Trace.STRING_PERFORMANCE, "Server.publishImpl(): <" + (System.currentTimeMillis() - time)
+						+ "> " + getServerType().getId());
+			}
 			return status;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate publish() " + Server.this.toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(
+						Trace.STRING_SEVERE,
+						"Error calling delegate publish() "
+								+ Server.this.toString(), e);
+			}
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e);
 		}
 	}
 
 	protected IStatus restartImpl(String launchMode, IProgressMonitor monitor) {
-		Trace.trace(Trace.FINEST, "Restarting server: " + getName());
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Restarting server: " + getName());
+		}
 		
 		try {
 			try {
@@ -2931,7 +3130,9 @@
 				return Status.OK_STATUS;
 			} catch (CoreException ce) {
 				if (ce.getStatus().getCode() != -1) {
-					Trace.trace(Trace.SEVERE, "Error calling delegate restart() " + Server.this.toString());
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error calling delegate restart() " + Server.this.toString());
+					}
 					return ce.getStatus();
 				}
 			}
@@ -2941,7 +3142,9 @@
 			start(launchMode, monitor);
 
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error restarting server", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error restarting server", e);
+			}
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorStartFailed, getName()), e);
 		}
 		return Status.OK_STATUS;
@@ -2968,11 +3171,16 @@
 						// notify waiter
 						synchronized (notified) {
 							try {
-								Trace.trace(Trace.FINEST, "synchronousRestart notify");
+								if (Trace.FINEST) {
+									Trace.trace(Trace.STRING_FINEST, "synchronousRestart notify");
+								}
 								notified[0] = true;
 								notified.notifyAll();
 							} catch (Exception e) {
-								Trace.trace(Trace.SEVERE, "Error notifying server restart", e);
+								if (Trace.SEVERE) {
+									Trace.trace(Trace.STRING_SEVERE,
+											"Error notifying server restart", e);
+								}
 							}
 						}
 					}
@@ -3008,7 +3216,9 @@
 								launch.terminate();
 							// notify waiter
 							synchronized (notified) {
-								Trace.trace(Trace.FINEST, "synchronousRestart user cancelled");
+								if (Trace.FINEST) {
+									Trace.trace(Trace.STRING_FINEST, "synchronousRestart user cancelled");
+								}
 								notified[0] = true;
 								notified.notifyAll();
 							}
@@ -3017,7 +3227,9 @@
 					if (!userCancelled && !timer.alreadyDone && !notified[0]) {
 						// notify waiter
 						synchronized (notified) {
-							Trace.trace(Trace.FINEST, "synchronousRestart notify timeout");
+							if (Trace.FINEST) {
+								Trace.trace(Trace.STRING_FINEST, "synchronousRestart notify timeout");
+							}
 							if (!timer.alreadyDone && totalTimeout <= 0)
 								timer.timeout = true;
 							notified[0] = true;
@@ -3025,14 +3237,19 @@
 						}
 					}
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error notifying server restart timeout", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"Error notifying server restart timeout", e);
+					}
 				}
 			}
 		};
 		thread.setDaemon(true);
 		thread.start();
 		
-		Trace.trace(Trace.FINEST, "synchronousRestart 2");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "synchronousRestart 2");
+		}
 		
 		// call the delegate restart
 		try {
@@ -3048,7 +3265,9 @@
 			return Status.CANCEL_STATUS;
 		}
 		
-		Trace.trace(Trace.FINEST, "synchronousRestart 3");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "synchronousRestart 3");
+		}
 		
 		// wait for it! wait for it! ...
 		synchronized (notified) {
@@ -3058,7 +3277,10 @@
 					notified.wait();
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error waiting for server restart", e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Error waiting for server restart", e);
+				}
 			}
 			timer.alreadyDone = true;
 		}
@@ -3072,7 +3294,9 @@
 		if (!monitor.isCanceled() && getServerState() == IServer.STATE_STOPPED)
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorRestartFailed, getName()), null);
 		
-		Trace.trace(Trace.FINEST, "synchronousRestart 4");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "synchronousRestart 4");
+		}
 		return Status.OK_STATUS;
 	}
 	
@@ -3092,11 +3316,16 @@
 						// notify waiter
 						synchronized (notified) {
 							try {
-								Trace.trace(Trace.FINEST, "synchronousStart notify");
+								if (Trace.FINEST) {
+									Trace.trace(Trace.STRING_FINEST, "synchronousStart notify");
+								}
 								notified[0] = true;
 								notified.notifyAll();
 							} catch (Exception e) {
-								Trace.trace(Trace.SEVERE, "Error notifying server start", e);
+								if (Trace.SEVERE) {
+									Trace.trace(Trace.STRING_SEVERE,
+											"Error notifying server start", e);
+								}
 							}
 						}
 					}
@@ -3132,7 +3361,9 @@
 								launch.terminate();
 							// notify waiter
 							synchronized (notified) {
-								Trace.trace(Trace.FINEST, "synchronousStart user cancelled");
+								if (Trace.FINEST) {
+									Trace.trace(Trace.STRING_FINEST, "synchronousStart user cancelled");
+								}
 								notified[0] = true;
 								notified.notifyAll();
 							}
@@ -3141,7 +3372,9 @@
 					if (!userCancelled && !timer.alreadyDone && !notified[0]) {
 						// notify waiter
 						synchronized (notified) {
-							Trace.trace(Trace.FINEST, "synchronousStart notify timeout");
+							if (Trace.FINEST) {
+								Trace.trace(Trace.STRING_FINEST, "synchronousStart notify timeout");
+							}
 							if (!timer.alreadyDone && totalTimeout <= 0)
 								timer.timeout = true;
 							notified[0] = true;
@@ -3149,14 +3382,19 @@
 						}
 					}
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error notifying server start timeout", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"Error notifying server start timeout", e);
+					}
 				}
 			}
 		};
 		thread.setDaemon(true);
 		thread.start();
 	
-		Trace.trace(Trace.FINEST, "synchronousStart 2");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "synchronousStart 2");
+		}
 	
 		// start the server
 		try {
@@ -3172,7 +3410,9 @@
 			return Status.CANCEL_STATUS;
 		}
 		
-		Trace.trace(Trace.FINEST, "synchronousStart 3");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "synchronousStart 3");
+		}
 		
 		// wait for it! wait for it! ...
 		synchronized (notified) {
@@ -3182,7 +3422,10 @@
 					notified.wait();
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error waiting for server start", e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Error waiting for server start", e);
+				}
 			}
 			timer.alreadyDone = true;
 		}
@@ -3196,12 +3439,16 @@
 		if (!monitor.isCanceled() && getServerState() == IServer.STATE_STOPPED)
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorStartFailed, getName()), null);
 		
-		Trace.trace(Trace.FINEST, "synchronousStart 4");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "synchronousStart 4");
+		}
 		return Status.OK_STATUS;
 	}
 
 	protected void startImpl2(String mode2, IProgressMonitor monitor) throws CoreException {
-		Trace.trace(Trace.FINEST, "Starting server: " + Server.this.toString() + ", launchMode: " + mode2);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Starting server: " + Server.this.toString() + ", launchMode: " + mode2);
+		}
 		SaveEditorPrompter editorHelper = (ServerPlugin.isRunningGUIMode()) ? ServerPlugin.getSaveEditorHelper() : null;
 		// make sure that the delegate is loaded and the server state is correct
 		loadAdapter(ServerBehaviourDelegate.class, monitor);
@@ -3213,15 +3460,22 @@
 				editorHelper.setDebugNeverSave();
 			}
 			
-			launch = launchConfig.launch(mode2, monitor); // , true); - causes workspace lock
+			if (launchConfig != null){
+				launch = launchConfig.launch(mode2, monitor); // , true); - causes workspace lock
+			}
 			
 			if (editorHelper != null){
 				editorHelper.setDebugOriginalValue();
 			}
 			
-			Trace.trace(Trace.FINEST, "Launch: " + launch);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Launch: " + launch);
+			}
 		} catch (CoreException e) {
-			Trace.trace(Trace.SEVERE, "Error starting server " + Server.this.toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error starting server "
+						+ Server.this.toString(), e);
+			}
 			throw e;
 		}
 	}
@@ -3242,7 +3496,10 @@
 							try {
 								mutex.notifyAll();
 							} catch (Exception e) {
-								Trace.trace(Trace.SEVERE, "Error notifying server stop", e);
+								if (Trace.SEVERE) {
+									Trace.trace(Trace.STRING_SEVERE,
+											"Error notifying server stop", e);
+								}
 							}
 						}
 					}
@@ -3267,12 +3524,17 @@
 							timer.timeout = true;
 							// notify waiter
 							synchronized (mutex) {
-								Trace.trace(Trace.FINEST, "stop notify timeout");
+								if (Trace.FINEST) {
+									Trace.trace(Trace.STRING_FINEST, "stop notify timeout");
+								}
 								mutex.notifyAll();
 							}
 						}
 					} catch (Exception e) {
-						Trace.trace(Trace.SEVERE, "Error notifying server stop timeout", e);
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE,
+									"Error notifying server stop timeout", e);
+						}
 					}
 				}
 			};
@@ -3290,7 +3552,10 @@
 						getServerState() != IServer.STATE_STARTED)
 					mutex.wait();
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error waiting for server stop", e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Error waiting for server stop", e);
+				}
 			}
 		}
 		removeServerListener(listener);
@@ -3311,15 +3576,27 @@
 		if (getServerState() == STATE_STOPPED)
 			return;
 		
-		Trace.trace(Trace.FINEST, "Stopping server: " + Server.this.toString());
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Stopping server: " + Server.this.toString());
+		}
 		
 		try {
 			getBehaviourDelegate(null).stop(force);
 		} catch (RuntimeException e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate stop() " + Server.this.toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(
+						Trace.STRING_SEVERE,
+						"Error calling delegate stop() "
+								+ Server.this.toString(), e);
+			}
 			throw e;
 		} catch (Throwable t) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate stop() " + Server.this.toString(), t);
+			if (Trace.SEVERE) {
+				Trace.trace(
+						Trace.STRING_SEVERE,
+						"Error calling delegate stop() "
+								+ Server.this.toString(), t);
+			}
 			throw new RuntimeException(t);
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerMonitor.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerMonitor.java
index 30dc6b9..aac3689 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerMonitor.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerMonitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,7 +66,10 @@
 			try {
 				delegate = (ServerMonitorDelegate) element.createExecutableExtension("class");
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create delegate" + toString(), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Could not create delegate" + toString(), t);
+				}
 			}
 		}
 		return delegate;
@@ -88,7 +91,10 @@
 		} catch (CoreException ce) {
 			throw ce;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 			return -1;
 		}
 	}
@@ -103,7 +109,10 @@
 		try {
 			getDelegate().stopMonitoring(server, port);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate "
+						+ toString(), e);
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerMonitorManager.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerMonitorManager.java
index f541701..c58451d 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerMonitorManager.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerMonitorManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -158,7 +158,10 @@
 					newPort = monitor.startMonitoring(server, port, newPort);
 					started = true;
 				} catch (CoreException e) {
-					Trace.trace(Trace.WARNING, "Could not restart server monitor", e);
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING,
+								"Could not restart server monitor", e);
+					}
 				}
 			}
 		}
@@ -257,7 +260,9 @@
 			if (port.isStarted())
 				monitor.stopMonitoring(port.getServer(), port.getServerPort());
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not remove monitor", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not remove monitor", e);
+			}
 		}
 	}
 
@@ -340,12 +345,16 @@
 			
 			memento.saveToFile(filename);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error saving monitor info", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error saving monitor info", e);
+			}
 		}
 	}
 	
 	protected void loadMonitors() {
-		Trace.trace(Trace.FINEST, "Loading monitor info");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Loading monitor info");
+		}
 		String filename = ServerPlugin.getInstance().getStateLocation().append(MONITOR_DATA_FILE).toOSString();
 		
 		try {
@@ -359,11 +368,16 @@
 					MonitoredPort mp = new MonitoredPort(children[i], null);
 					ports.add(mp);
 				} catch (Exception e) {
-					Trace.trace(Trace.WARNING, "Could not load monitor: " + e);
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING, "Could not load monitor: " + e);
+					}
 				}
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load monitor info", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Could not load monitor info", e);
+			}
 		}
 	}
 }
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java
index 3092f54..f744ba8 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerNotificationManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -68,7 +68,10 @@
 	 * @param eventMask
 	 */
 	public void addListener(IServerListener curListener, int eventMask) {
-		Trace.trace(Trace.FINEST, "->- Adding server listener to notification manager: " + curListener + " " + eventMask + " ->-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "->- Adding server listener to notification manager: " + curListener + " "
+					+ eventMask + " ->-");
+		}
 		if (curListener == null) {
 			return;
 		}
@@ -79,12 +82,16 @@
 	}
 
 	protected void broadcastChange(ServerEvent event) {
-		Trace.trace(Trace.FINEST, "->- Broadcasting server event: " + event + " ->-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "->- Broadcasting server event: " + event + " ->-");
+		}
 		if (event == null) {
 			return;
 		}
 		int eventKind = event.getKind();
-		Trace.trace(Trace.FINEST, "  Server event kind: " + eventKind + " ->-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "  Server event kind: " + eventKind + " ->-");
+		}
 		
 		// only notify listeners that listen to module event
 		int size;
@@ -101,20 +108,37 @@
 			boolean isTypeMatch = ((mask & eventKind & ServerEvent.SERVER_CHANGE) != 0) 
 					|| ((mask & eventKind & ServerEvent.MODULE_CHANGE) != 0);
 			// check the kind of change
-			boolean isKindMatch = (mask & eventKind ^ ServerEvent.SERVER_CHANGE ^ ServerEvent.MODULE_CHANGE) != 0;
+			// take out the ServerEvent.SERVER_CHANGE bit and ServerEvent.MODULE_CHANGE bit
+			int kindOnly = (eventKind | ServerEvent.SERVER_CHANGE | ServerEvent.MODULE_CHANGE) ^ ServerEvent.SERVER_CHANGE ^ ServerEvent.MODULE_CHANGE;
+			boolean isKindMatch = (mask & kindOnly) != 0;
 			
 			if (isTypeMatch && isKindMatch) {
-				Trace.trace(Trace.FINEST, "->- Firing server event to listener: " + curEntry.getListener() + " ->-");
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "->- Firing server event to listener: " + curEntry.getListener()
+							+ " ->-");
+				}
 				try {
-					Trace.trace(Trace.LISTENERS, "  Firing server event to listener: " + curEntry.getListener());
+					if (Trace.LISTENERS) {
+						Trace.trace(Trace.STRING_LISTENERS,
+								"  Firing server event to listener: " + curEntry.getListener());
+					}
 					curEntry.getListener().serverChanged(event);
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "  Error firing server event: " + curEntry.getListener(), e);
+					if (Trace.SEVERE) {
+						Trace.trace(
+								Trace.STRING_SEVERE,
+								"  Error firing server event: "
+										+ curEntry.getListener(), e);
+					}
 				}
-				Trace.trace(Trace.LISTENERS, "-<- Done firing server event -<-");
+				if (Trace.LISTENERS) {
+					Trace.trace(Trace.STRING_LISTENERS, "-<- Done firing server event -<-");
+				}
 			}
 		}
-		Trace.trace(Trace.FINEST, "-<- Done broadcasting server event -<-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "-<- Done broadcasting server event -<-");
+		}
 	}
 
 	/**
@@ -132,7 +156,10 @@
 	 * @param curListener
 	 */
 	public void removeListener(IServerListener curListener) {
-		Trace.trace(Trace.FINEST, "->- Removing server listener from notification manager: " + curListener + " ->-");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "->- Removing server listener from notification manager: " + curListener
+					+ " ->-");
+		}
 		if (curListener == null)
 			return;
 		
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
index 5fda91e..d97672c 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,9 +17,13 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osgi.service.debug.DebugOptions;
+import org.eclipse.osgi.service.debug.DebugOptionsListener;
 import org.eclipse.osgi.util.NLS;
+import org.eclipse.wst.common.core.util.UIContextDetermination;
 import org.eclipse.wst.server.core.*;
 import org.osgi.framework.*;
+
 /**
  * The main server plugin class.
  */
@@ -71,7 +75,7 @@
 	private static SaveEditorPrompter saveEditorPrompter;
 	
 	// cached copy of isRunningInGUICache
-	public static boolean isRunningInGUICache = false;
+	public static Boolean isRunningInGUICache = null;
 
 	// registry listener
 	private static IRegistryChangeListener registryListener;
@@ -215,7 +219,10 @@
 				deleteDirectory(statePath.append(dir.path).toFile(), null);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not remove temp directory", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Could not remove temp directory", e);
+			}
 		}
 	}
 
@@ -229,7 +236,9 @@
 	 * Load the temporary directory information.
 	 */
 	private void loadTempDirInfo() {
-		Trace.trace(Trace.FINEST, "Loading temporary directory information");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Loading temporary directory information");
+		}
 		IPath statePath = ServerPlugin.getInstance().getStateLocation();
 		String filename = statePath.append(TEMP_DATA_FILE).toOSString();
 		
@@ -257,7 +266,10 @@
 				tempDirHash.put(key, d);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load temporary directory information", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Could not load temporary directory information", e);
+			}
 		}
 	}
 
@@ -299,7 +311,10 @@
 	
 			memento.saveToFile(filename);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save temporary directory information", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Could not save temporary directory information", e);
+			}
 		}
 	}
 
@@ -307,7 +322,9 @@
 	 * @see Plugin#start(org.osgi.framework.BundleContext)
 	 */
 	public void start(BundleContext context) throws Exception {
-		Trace.trace(Trace.CONFIG, "----->----- Server Core plugin startup ----->-----");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "----->----- Server Core plugin startup ----->-----");
+		}
 		super.start(context);
 		bundleContext = context;
 		
@@ -324,6 +341,11 @@
 		// Load the PublishController during plugin startup since this will be used
 		// during the a workspace delta (changes to the workspace)
 		getPublishController();
+
+		// register the debug options listener
+		final Hashtable<String, String> props = new Hashtable<String, String>(4);
+		props.put(DebugOptions.LISTENER_SYMBOLICNAME, ServerPlugin.PLUGIN_ID);
+		context.registerService(DebugOptionsListener.class.getName(), new Trace(), props);
 	}
 
 	protected void stopBundle(final String bundleId) {
@@ -355,7 +377,9 @@
 	 * @see Plugin#stop(org.osgi.framework.BundleContext)
 	 */
 	public void stop(BundleContext context) throws Exception {
-		Trace.trace(Trace.CONFIG, "-----<----- Server Core plugin shutdown -----<-----");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-----<----- Server Core plugin shutdown -----<-----");
+		}
 		super.stop(context);
 		
 		if (registryListener != null)
@@ -367,7 +391,10 @@
 		try {
 			Job.getJobManager().join(SHUTDOWN_JOB_FAMILY, null);
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Error waiting for shutdown job", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Error waiting for shutdown job", e);
+			}
 		}
 		context.removeBundleListener(bundleListener);
 	}
@@ -382,8 +409,13 @@
 	 * @param t a throwable or exception
 	 */
 	public static void logExtensionFailure(String id, Throwable t) {
-		Trace.trace(Trace.SEVERE, "Missing or failed server extension: " + id + ". Enable tracing for more information");
-		Trace.trace(Trace.WARNING, "Exception in server delegate", t);
+		if (Trace.SEVERE) {
+			Trace.trace(Trace.STRING_SEVERE, "Missing or failed server extension: " + id
+					+ ". Enable tracing for more information");
+		}
+		if (Trace.WARNING) {
+			Trace.trace(Trace.STRING_WARNING, "Exception in server delegate", t);
+		}
 	}
 
 	private static void addAll(List<Object> list, Object[] obj) {
@@ -472,16 +504,26 @@
 			try {
 				String [] looseModuleRuntimeIds = ServerPlugin.tokenize(ce.getAttribute("runtimeTypes"), ",");				
 				if (looseModuleRuntimeIds.length < 0){
-					Trace.trace(Trace.EXTENSION_POINT, "  runtimeTypes on extension point definition is empty");
+					if (Trace.EXTENSION_POINT) {
+						Trace.trace(Trace.STRING_EXTENSION_POINT,
+								"  runtimeTypes on extension point definition is empty");
+					}
 					return;
 				}
 				
 				if (ServerPlugin.contains(looseModuleRuntimeIds, runtimeType.getId())){
 					((RuntimeType)runtimeType).addModuleType(ce);					
-					Trace.trace(Trace.EXTENSION_POINT, "  Loaded Runtime supported ModuleType: " + ce.getAttribute("id"));
+					if (Trace.EXTENSION_POINT) {
+						Trace.trace(Trace.STRING_EXTENSION_POINT,
+								"  Loaded Runtime supported ModuleType: " + ce.getAttribute("id"));
+					}
 				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load Runtime supported ModuleType: " + ce.getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"  Could not load Runtime supported ModuleType: "
+									+ ce.getAttribute("id"), t);
+				}
 			}
 		}
 	}
@@ -563,7 +605,10 @@
 			dir.delete();
 			monitor.done();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error deleting directory " + dir.getAbsolutePath(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error deleting directory "
+						+ dir.getAbsolutePath(), e);
+			}
 		}
 	}
 	
@@ -605,7 +650,9 @@
 	private static synchronized void loadLaunchableAdapters() {
 		if (launchableAdapters != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .launchableAdapters extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .launchableAdapters extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "launchableAdapters");
 
@@ -614,9 +661,16 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new LaunchableAdapter(cf[i]));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded launchableAdapter: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded launchableAdapter: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load launchableAdapter: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load launchableAdapter: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		
@@ -633,7 +687,9 @@
 			}
 		}
 		launchableAdapters = list;
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .launchableAdapters extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .launchableAdapters extension point -<-");
+		}
 	}
 
 	/**
@@ -642,7 +698,9 @@
 	private static synchronized void loadClients() {
 		if (clients != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .clients extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .clients extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "clients");
 		
@@ -651,9 +709,16 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new Client(cf[i]));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded clients: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded clients: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load clients: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load clients: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		
@@ -671,7 +736,9 @@
 		}
 		clients = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .clients extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .clients extension point -<-");
+		}
 	}
 
 	/**
@@ -696,7 +763,9 @@
 	private static synchronized void loadPublishTasks() {
 		if (publishTasks != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .publishTasks extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .publishTasks extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "publishTasks");
 		
@@ -705,14 +774,23 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new PublishTask(cf[i]));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded publishTask: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded publishTask: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load publishTask: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load publishTask: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		publishTasks = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .publishTasks extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .publishTasks extension point -<-");
+		}
 	}
 
 	/**
@@ -763,7 +841,9 @@
 	private static synchronized void loadPublishers() {
 		if (publishers != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .publishers extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .publishers extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "publishers");
 		
@@ -772,14 +852,23 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new Publisher(cf[i]));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded publisher: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded publisher: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load publisher: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load publisher: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		publishers = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .publishers extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .publishers extension point -<-");
+		}
 	}
 	
 	/**
@@ -804,7 +893,9 @@
 	private static synchronized void loadPublishControllers() {
 		if (publishControllers != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .publishController extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .publishController extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "publishController");
 		
@@ -813,14 +904,24 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new PublishController(cf[i]));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded .publishController: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT,
+							"  Loaded .publishController: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load .publishController: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load .publishController: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		publishControllers = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .publishController extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .publishController extension point -<-");
+		}
 	}
 	
 
@@ -925,7 +1026,9 @@
 	private static synchronized void loadModuleFactories() {
 		if (moduleFactories != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .moduleFactories extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .moduleFactories extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "moduleFactories");
 		
@@ -934,9 +1037,16 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new ModuleFactory(cf[i]));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded moduleFactories: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded moduleFactories: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load moduleFactories: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load moduleFactories: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		
@@ -953,7 +1063,9 @@
 		}
 		moduleFactories = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .moduleFactories extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .moduleFactories extension point -<-");
+		}
 	}
 
 	/**
@@ -978,7 +1090,9 @@
 	private static synchronized void loadServerMonitors() {
 		if (monitors != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .serverMonitors extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .serverMonitors extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "internalServerMonitors");
 
@@ -987,14 +1101,23 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new ServerMonitor(cf[i]));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded serverMonitor: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded serverMonitor: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load serverMonitor: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load serverMonitor: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		monitors = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .serverMonitors extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .serverMonitors extension point -<-");
+		}
 	}
 
 	/**
@@ -1019,7 +1142,9 @@
 	private static synchronized void loadRuntimeLocators() {
 		if (runtimeLocators != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .runtimeLocators extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .runtimeLocators extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "runtimeLocators");
 
@@ -1028,14 +1153,23 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new RuntimeLocator(cf[i]));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded runtimeLocator: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded runtimeLocator: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load runtimeLocator: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load runtimeLocator: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		runtimeLocators = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .runtimeLocators extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .runtimeLocators extension point -<-");
+		}
 	}
 
 	/**
@@ -1058,7 +1192,9 @@
 	private static synchronized void loadModuleArtifactAdapters() {
 		if (moduleArtifactAdapters != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .moduleArtifactAdapters extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .moduleArtifactAdapters extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "moduleArtifactAdapters");
 
@@ -1067,9 +1203,17 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new ModuleArtifactAdapter(cf[i]));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded moduleArtifactAdapter: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT,
+							"  Loaded moduleArtifactAdapter: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load moduleArtifactAdapter: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load moduleArtifactAdapter: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		
@@ -1087,7 +1231,9 @@
 		}
 		moduleArtifactAdapters = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .moduleArtifactAdapters extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .moduleArtifactAdapters extension point -<-");
+		}
 	}
 
 	/**
@@ -1098,30 +1244,46 @@
 	 * @return <code>true</code> if there is a module artifact adapter
 	 */
 	public static boolean hasModuleArtifact(Object obj) {
-		Trace.trace(Trace.FINEST, "ServerPlugin.hasModuleArtifact() " + obj);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "ServerPlugin.hasModuleArtifact() " + obj);
+		}
 		ModuleArtifactAdapter[] adapters = getModuleArtifactAdapters();
 		if (adapters != null) {
 			int size = adapters.length;
 			for (int i = 0; i < size; i++) {
 				try {
 					if (adapters[i].isEnabled(obj)) {
-						Trace.trace(Trace.FINER, "ServerPlugin.hasModuleArtifact() - " + adapters[i].getId());
+						if (Trace.FINER) {
+							Trace.trace(Trace.STRING_FINER, "ServerPlugin.hasModuleArtifact() - " + adapters[i].getId());
+						}
 						if (adapters[i].isDelegateLoaded()) {
 							long time = System.currentTimeMillis();
 							IModuleArtifact[] ma = adapters[i].getModuleArtifacts(obj);
-							Trace.trace(Trace.FINER, "Deep enabled time: " + (System.currentTimeMillis() - time));
+							if (Trace.FINER) {
+								Trace.trace(Trace.STRING_FINER, "Deep enabled time: "
+										+ (System.currentTimeMillis() - time));
+							}
 							if (ma != null) {
-								Trace.trace(Trace.FINER, "Deep enabled");
+								if (Trace.FINER) {
+									Trace.trace(Trace.STRING_FINER, "Deep enabled");
+								}
 								return true;
 							}
-							Trace.trace(Trace.FINER, "Not enabled");
+							if (Trace.FINER) {
+								Trace.trace(Trace.STRING_FINER, "Not enabled");
+							}
 						} else {
-							Trace.trace(Trace.FINER, "Enabled");
+							if (Trace.FINER) {
+								Trace.trace(Trace.STRING_FINER, "Enabled");
+							}
 							return true;
 						}
 					}
 				} catch (CoreException ce) {
-					Trace.trace(Trace.WARNING, "Could not use moduleArtifactAdapter", ce);
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING,
+								"Could not use moduleArtifactAdapter", ce);
+					}
 				}
 			}
 		}
@@ -1136,7 +1298,9 @@
 	 * @return a module artifact, or null
 	 */
 	public static IModuleArtifact[] getModuleArtifacts(Object obj) {
-		Trace.trace(Trace.FINEST, "ServerPlugin.getModuleArtifact() " + obj);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "ServerPlugin.getModuleArtifact() " + obj);
+		}
 		ModuleArtifactAdapter[] adapters = getModuleArtifactAdapters();
 		if (adapters != null) {
 			int size = adapters.length;
@@ -1151,7 +1315,11 @@
 						}*/
 					}
 				} catch (Exception e) {
-					Trace.trace(Trace.WARNING, "Could not use moduleArtifactAdapter " + adapters[i], e);
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING,
+								"Could not use moduleArtifactAdapter "
+										+ adapters[i], e);
+					}
 				}
 			}
 		}
@@ -1209,9 +1377,9 @@
 	 * Load the installable runtimes.
 	 */
 	private static synchronized void loadInstallableRuntimes() {
-		//if (installableRuntimes != null)
-		//	return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .installableRuntimes extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .installableRuntimes extension point ->-");
+		}
 		
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "installableRuntimes");
@@ -1226,14 +1394,24 @@
 						list.add(new InstallableRuntime2(cf[i]));
 				} else
 					list.add(new InstallableRuntime(cf[i]));
-				Trace.trace(Trace.EXTENSION_POINT, "  Loaded installableRuntime: " + cf[i].getAttribute("id"));
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT,
+							"  Loaded installableRuntime: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load installableRuntime: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load installableRuntime: "
+									+ cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		installableRuntimes = list;
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .installableRuntimes extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .installableRuntimes extension point -<-");
+		}
 	}
 
 	public static void setRegistryListener(IRegistryChangeListener listener) {
@@ -1268,7 +1446,9 @@
 			|| (b.endsWith(".*") && a.startsWith(b.substring(0, b.length() - 1))))
 			return true;
 		if (a.startsWith(b) || b.startsWith(a)) {
-			Trace.trace(Trace.WARNING, "Invalid matching rules used: " + a + "/" + b);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Invalid matching rules used: " + a + "/" + b);
+			}
 			return true;
 		}
 		return false;
@@ -1287,20 +1467,22 @@
 		return value;
 	}
 	
-	public static boolean isRunningGUIMode(){
-		// check only when the the plugin is not Bundle.ACTIVE
-		if (isRunningInGUICache == true){
-			return isRunningInGUICache;
+	public static boolean isRunningGUIMode() {
+
+		if (isRunningInGUICache == null) {
+			boolean isGui = false;
+			switch (UIContextDetermination.getCurrentContext()) {
+			case UIContextDetermination.UI_CONTEXT:
+				isGui = true;
+				break;
+			case UIContextDetermination.HEADLESS_CONTEXT:
+			default:
+				isGui = false;
+			}
+			isRunningInGUICache = new Boolean(isGui);
 		}
-
-		Bundle swtEclipseUIbndl = Platform.getBundle("org.eclipse.ui");  //running in GUI mode if it is active.
-		if(swtEclipseUIbndl != null){
-			isRunningInGUICache= (swtEclipseUIbndl.getState() == Bundle.ACTIVE);
-			return isRunningInGUICache; 
-		}			
-		return false;
-	}	
-
+		return isRunningInGUICache.booleanValue();
+	}
 
 	/**
 	 * Transfer the control to the UI and prompts to save all the editors
@@ -1313,25 +1495,41 @@
 	private static void loadSaveEditorExtension() {
 		if (saveEditorPrompter != null)
 			return;
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading .saveEditorPrompter extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading .saveEditorPrompter extension point ->-");
+		}
 		
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "saveEditorPrompter");
 		
 		int size = cf.length;
-		try{
-			saveEditorPrompter = (SaveEditorPrompter)cf[0].createExecutableExtension("class");
-			Trace.trace(Trace.EXTENSION_POINT, "  Loaded saveEditorPrompter: " + cf[0].getAttribute("id"));
-		} catch (CoreException ce){
-			Trace.trace(Trace.SEVERE, "  Could not load saveEditorPrompter: " + cf[0].getAttribute("id"), ce);			
+		if (size == 0) {
+			if (Trace.EXTENSION_POINT) {
+				Trace.trace(Trace.STRING_EXTENSION_POINT, "  No .saveEditorPrompter is found.");
+			}
+		} else {
+			try{
+				saveEditorPrompter = (SaveEditorPrompter)cf[0].createExecutableExtension("class");
+				if (Trace.EXTENSION_POINT) {
+					Trace.trace(Trace.STRING_EXTENSION_POINT, "  Loaded saveEditorPrompter: " + cf[0].getAttribute("id"));
+				}
+			} catch (CoreException ce){
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load saveEditorPrompter: "
+									+ cf[0].getAttribute("id"), ce);
+				}			
+			}
+			if (size > 1) {
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "  More than one .saveEditorPrompter found, only one loaded =>"
+							+ cf[0].getAttribute("id"));
+				}
+			}
 		}
-		if (size < 1) {
-			Trace.trace(Trace.WARNING, "  More than one .saveEditorPrompter found, only one loaded =>"+ cf[0].getAttribute("id"));
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .saveEditorPrompter extension point -<-");
 		}
-		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .saveEditorPrompter extension point -<-");
-		
 	}
-	
-	
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferenceModifyListener.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferenceModifyListener.java
index b263eb2..aa60152 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferenceModifyListener.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferenceModifyListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.server.core.internal;
 
+import java.io.File;
 import java.io.StringReader;
 import java.io.StringWriter;
 
@@ -44,8 +45,13 @@
 
 	private void removeLockedServerRuntimePreference(Preferences preferences) {
 		try {
+			File prefFile = new File(preferences.get(RUNTIMES_PREFERENCE_NAME, ""));
+			if (!prefFile.exists()){
+				return; 
+			}
+			
 			Document doc = DocumentBuilderFactory.newInstance()
-					.newDocumentBuilder().parse(new InputSource(new StringReader(preferences.get(RUNTIMES_PREFERENCE_NAME, "")))); //$NON-NLS-1$
+					.newDocumentBuilder().parse(new InputSource(new StringReader(prefFile.toString()))); //$NON-NLS-1$
 			NodeList nodeList = doc.getElementsByTagName(RUNTIME_NODE_NAME);
 			for (int s = 0; s < nodeList.getLength(); s++) {
 				Node node = nodeList.item(s);
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java
index f5161d5..b02e362 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPreferences.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java
index eadd3c8..8573884 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerPublishInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -250,7 +250,9 @@
 		String filename = path.toOSString();
 		
 		if (new File(filename).exists()) {
-			Trace.trace(Trace.FINEST, "Loading publish info from " + filename);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Loading publish info from " + filename);
+			}
 			
 			DataInputStream in = null;
 			try {
@@ -268,13 +270,18 @@
 					return;
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load publish information", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING,
+							"Could not load publish information", e);
+				}
 			}
 		}
 		
 		filename = filename.substring(0, filename.length() - 3) + "xml";
 		if (new File(filename).exists()) {
-			Trace.trace(Trace.FINEST, "Loading publish info from old format " + filename);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Loading publish info from old format " + filename);
+			}
 			
 			try {
 				IMemento memento2 = XMLMemento.loadMemento(filename);
@@ -290,7 +297,10 @@
 					modulePublishInfo.put(getKey(mpi.getModuleId()), mpi);
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load publish information", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING,
+							"Could not load publish information", e);
+				}
 			}
 		}
 	}
@@ -300,7 +310,9 @@
 	 */
 	public void save() {
 		String filename = path.toOSString();
-		Trace.trace(Trace.FINEST, "Saving publish info to " + filename);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Saving publish info to " + filename);
+		}
 		
 		DataOutputStream out = null;
 		try {
@@ -320,7 +332,10 @@
 				}
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save publish information", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Could not save publish information", e);
+			}
 		} finally {
 			try {
 				if (out != null)
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
index d33ce3e..c4668fa 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerType.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -243,7 +243,10 @@
 				try {
 					runtime = runtimeType.createRuntime(id, monitor);
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Couldn't create runtime", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"Couldn't create runtime", e);
+					}
 				}
 			}
 		}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
index 4f43a27..cb88a6a 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/ServerWorkingCopy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -363,9 +363,16 @@
 					long time = System.currentTimeMillis();
 					workingCopyDelegate = ((ServerType) serverType).createServerDelegate();
 					InternalInitializer.initializeServerDelegate(workingCopyDelegate, this, monitor);
-					Trace.trace(Trace.PERFORMANCE, "ServerWorkingCopy.getWorkingCopyDelegate(): <" + (System.currentTimeMillis() - time) + "> " + getServerType().getId());
+					if (Trace.PERFORMANCE) {
+						Trace.trace(Trace.STRING_PERFORMANCE,
+								"ServerWorkingCopy.getWorkingCopyDelegate(): <" + (System.currentTimeMillis() - time)
+										+ "> " + getServerType().getId());
+					}
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"Could not create delegate " + toString(), e);
+					}
 				}
 			}
 		}
@@ -441,6 +448,9 @@
 			getWorkingCopyDelegate(monitor).saveConfiguration(monitor);
 		wch.setDirty(false);
 		
+		if (getServerState() == IServer.STATE_STARTED)
+			autoPublish();
+		
 		return server;
 	}
 
@@ -593,7 +603,11 @@
 		} catch (CoreException ce) {
 			throw ce;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate modifyModule() " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Error calling delegate modifyModule() " + toString(),
+						e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, "" + e.getLocalizedMessage(), e));
 		}
 	}
@@ -656,7 +670,10 @@
 			ServerUtil.setServerDefaultName(this);
 			getWorkingCopyDelegate(monitor).setDefaults(monitor);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate setDefaults() " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Error calling delegate setDefaults() " + toString(), e);
+			}
 		}
 	}
 
@@ -766,7 +783,11 @@
 		try {
 			getWorkingCopyDelegate(monitor).importConfiguration(runtime2, monitor);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate importConfiguration() " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Error calling delegate importConfiguration() "
+								+ toString(), e);
+			}
 		}
 	}
 
@@ -783,10 +804,18 @@
 		try {
 			getWorkingCopyDelegate(monitor).importRuntimeConfiguration(runtime2, monitor);
 		} catch (CoreException ce) {
-			Trace.trace(Trace.SEVERE, "CoreException calling delegate importConfiguration() " + toString(), ce);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"CoreException calling delegate importConfiguration() "
+								+ toString(), ce);
+			}
 			throw ce;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate importConfiguration() " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Error calling delegate importConfiguration() "
+								+ toString(), e);
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Trace.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Trace.java
index ea2fd7f..370e742 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Trace.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/Trace.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,81 +17,121 @@
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.service.debug.DebugOptions;
+import org.eclipse.osgi.service.debug.DebugOptionsListener;
+
 /**
  * Helper class to route trace output.
  */
-public class Trace {
-	public static final byte CONFIG = 0;
-	public static final byte INFO = 1;
-	public static final byte WARNING = 2;
-	public static final byte SEVERE = 3;
-	public static final byte FINER = 4;
-	public static final byte FINEST = 5;
-	
-	public static final byte RESOURCES = 6;
-	public static final byte EXTENSION_POINT = 7;
-	public static final byte LISTENERS = 8;
-	public static final byte RUNTIME_TARGET = 9;
-	public static final byte PERFORMANCE = 10;
-	public static final byte PUBLISHING = 11;
+public class Trace implements DebugOptionsListener {
 
-	private static final String[] levelNames = new String[] {
-		"CONFIG   ", "INFO     ", "WARNING  ", "SEVERE   ", "FINER    ", "FINEST   ",
-		"RESOURCES", "EXTENSION", "LISTENERS", "TARGET   ", "PERF     ", "PUBLISH  "};
-
-	private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy HH:mm.ss.SSS");
+	private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy HH:mm.ss.SSS"); //$NON-NLS-1$
 
 	private static Set<String> logged = new HashSet<String>();
 
+	// tracing enablement flags
+	public static boolean CONFIG = false;
+	public static boolean INFO = false;
+	public static boolean WARNING = false;
+	public static boolean SEVERE = false;
+	public static boolean FINER = false;
+	public static boolean FINEST = false;
+	public static boolean RESOURCES = false;
+	public static boolean EXTENSION_POINT = false;
+	public static boolean LISTENERS = false;
+	public static boolean RUNTIME_TARGET = false;
+	public static boolean PERFORMANCE = false;
+	public static boolean PUBLISHING = false;
+
+	// tracing levels. One most exist for each debug option
+	public final static String STRING_CONFIG = "/config"; //$NON-NLS-1$
+	public final static String STRING_INFO = "/info"; //$NON-NLS-1$
+	public final static String STRING_WARNING = "/warning"; //$NON-NLS-1$
+	public final static String STRING_SEVERE = "/severe"; //$NON-NLS-1$
+	public final static String STRING_FINER = "/finer"; //$NON-NLS-1$
+	public final static String STRING_FINEST = "/finest"; //$NON-NLS-1$
+	public final static String STRING_RESOURCES = "/resources"; //$NON-NLS-1$
+	public final static String STRING_EXTENSION_POINT = "/extension_point"; //$NON-NLS-1$
+	public final static String STRING_LISTENERS = "/listeners"; //$NON-NLS-1$
+	public final static String STRING_RUNTIME_TARGET = "/runtime_target"; //$NON-NLS-1$
+	public final static String STRING_PERFORMANCE = "/performance"; //$NON-NLS-1$
+	public final static String STRING_PUBLISHING = "/publishing"; //$NON-NLS-1$
+	
 	/**
-	 * Trace constructor comment.
+	 * Trace constructor. This should never be explicitly called by clients and is used to register this class with the
+	 * {@link DebugOptions} service.
 	 */
-	private Trace() {
+	public Trace() {
 		super();
 	}
 
-	/**
-	 * Trace the given text.
-	 *
-	 * @param level a trace level
-	 * @param s a message
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osgi.service.debug.DebugOptionsListener#optionsChanged(org.eclipse.osgi.service.debug.DebugOptions)
 	 */
-	public static void trace(int level, String s) {
-		trace(level, s, null);
+	public void optionsChanged(DebugOptions options) {
+		Trace.CONFIG = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_CONFIG, false);
+		Trace.INFO = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_INFO, false);
+		Trace.WARNING = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_WARNING, false);
+		Trace.SEVERE = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_SEVERE, false);
+		Trace.FINER = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_FINER, false);
+		Trace.FINEST = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_FINEST, false);
+		Trace.RESOURCES = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_RESOURCES, false);
+		Trace.EXTENSION_POINT = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_EXTENSION_POINT, false);
+		Trace.LISTENERS = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_LISTENERS, false);
+		Trace.RUNTIME_TARGET = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_RUNTIME_TARGET, false);
+		Trace.PERFORMANCE = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_PERFORMANCE, false);
+		Trace.PUBLISHING = options.getBooleanOption(ServerPlugin.PLUGIN_ID + Trace.STRING_PUBLISHING, false);
+	}
+
+	/**
+	 * Trace the given message.
+	 * 
+	 * @param level
+	 *            The tracing level.
+	 * @param s
+	 *            The message to trace
+	 */
+	public static void trace(final String level, String s) {
+		Trace.trace(level, s, null);
 	}
 
 	/**
 	 * Trace the given message and exception.
-	 *
-	 * @param level a trace level
-	 * @param s a message
-	 * @param t a throwable
+	 * 
+	 * @param level
+	 *            The tracing level.
+	 * @param s
+	 *            The message to trace
+	 * @param t
+	 *            A {@link Throwable} to trace
 	 */
-	public static void trace(int level, String s, Throwable t) {
-		if (s == null)
+	public static void trace(final String level, String s, Throwable t) {
+		if (s == null) {
 			return;
-		
-		if (level == SEVERE) {
+		}
+		if (Trace.STRING_SEVERE.equals(level)) {
 			if (!logged.contains(s)) {
 				ServerPlugin.log(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, s, t));
 				logged.add(s);
 			}
 		}
-		
-		if (!ServerPlugin.getInstance().isDebugging())
-			return;
-		
-		StringBuffer sb = new StringBuffer(ServerPlugin.PLUGIN_ID);
-		sb.append(" ");
-		sb.append(levelNames[level]);
-		sb.append(" ");
-		sb.append(sdf.format(new Date()));
-		sb.append(" ");
-		sb.append(s);
-		//Platform.getDebugOption(ServerCore.PLUGIN_ID + "/" + "resources");
-
-		System.out.println(sb.toString());
-		if (t != null)
-			t.printStackTrace();
+		if (ServerPlugin.getInstance().isDebugging()) {
+			final StringBuffer sb = new StringBuffer(ServerPlugin.PLUGIN_ID);
+			sb.append(" "); //$NON-NLS-1$
+			sb.append(level);
+			sb.append(" "); //$NON-NLS-1$
+			sb.append(sdf.format(new Date()));
+			sb.append(" "); //$NON-NLS-1$
+			sb.append(s);
+			System.out.println(sb.toString());
+			if (t != null) {
+				t.printStackTrace();
+			}
+		}
 	}
+
+	
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/WorkingCopyHelper.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/WorkingCopyHelper.java
index d5de0ca..104f079 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/WorkingCopyHelper.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/WorkingCopyHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -158,11 +158,16 @@
 					PropertyChangeListener listener = (PropertyChangeListener) iterator.next();
 					listener.propertyChange(event);
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error firing property change event", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"Error firing property change event", e);
+					}
 				}
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error in property event", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error in property event", e);
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/XMLMemento.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/XMLMemento.java
index 0fdad67..caaefc4 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/XMLMemento.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/XMLMemento.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/FacetMappingUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/FacetMappingUtil.java
index 019784c..e75f5be 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/FacetMappingUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/FacetMappingUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,7 +79,9 @@
 	private static synchronized void loadRuntimeComponentProviders() {
 		if (runtimeComponentProviders != null)
 			return;
-		Trace.trace(Trace.CONFIG, "->- Loading .runtimeFacetComponentProviders extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .runtimeFacetComponentProviders extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerPlugin.PLUGIN_ID, "runtimeFacetComponentProviders");
 		
@@ -88,9 +90,15 @@
 		for (IConfigurationElement ce : cf) {
 			try {
 				list.add(new RuntimeComponentProviderWrapper(ce));
-				Trace.trace(Trace.CONFIG, "  Loaded runtimeFacetComponentProvider: " + ce.getAttribute("id"));
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG, "  Loaded runtimeFacetComponentProvider: " + ce.getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load runtimeFacetComponentProvider: " + ce.getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"  Could not load runtimeFacetComponentProvider: "
+									+ ce.getAttribute("id"), t);
+				}
 			}
 		}
 		
@@ -100,14 +108,22 @@
 		for (IConfigurationElement ce : cf) {
 			try {
 				list.add(new RuntimeComponentProviderWrapper(ce));
-				Trace.trace(Trace.CONFIG, "  Loaded runtimeFacetComponentProvider: " + ce.getAttribute("id"));
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG, "  Loaded runtimeFacetComponentProvider: " + ce.getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load runtimeFacetComponentProvider: " + ce.getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"  Could not load runtimeFacetComponentProvider: "
+									+ ce.getAttribute("id"), t);
+				}
 			}
 		}
 		runtimeComponentProviders = list;
 		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .runtimeFacetComponentProviders extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .runtimeFacetComponentProviders extension point -<-");
+		}
 	}
 
 	/**
@@ -116,7 +132,9 @@
 	private static synchronized void loadRuntimeFacetMapping() {
 		if (runtimeFacetMappings != null)
 			return;
-		Trace.trace(Trace.CONFIG, "->- Loading .runtimeFacetMapping extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .runtimeFacetMapping extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor("org.eclipse.jst.server.core.runtimeFacetMappings");
 		
@@ -124,13 +142,23 @@
 		for (IConfigurationElement ce : cf) {
 			try {
 				list.add(new RuntimeFacetMapping(ce));
-				Trace.trace(Trace.CONFIG, "  Loaded runtimeFacetMapping: " + ce.getAttribute("runtimeTypeId"));
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG,
+							"  Loaded runtimeFacetMapping: " + ce.getAttribute("runtimeTypeId"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load runtimeFacetMapping: " + ce.getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(
+							Trace.STRING_SEVERE,
+							"  Could not load runtimeFacetMapping: "
+									+ ce.getAttribute("id"), t);
+				}
 			}
 		}
 		runtimeFacetMappings = list;
 		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .runtimeFacetMapping extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .runtimeFacetMapping extension point -<-");
+		}
 	}	
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/FacetUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/FacetUtil.java
index f2cc6bf..1558a25 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/FacetUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/FacetUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -162,7 +162,10 @@
 				}
 			}
 		} catch (Throwable t) {
-			Trace.trace(Trace.WARNING, "Could not determine if runtime is in use", t);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Could not determine if runtime is in use", t);
+			}
 		}
 		return false;
 	}
@@ -193,7 +196,10 @@
 		} catch (CoreException ce) {
 			throw ce;
 		} catch (Throwable t) {
-			Trace.trace(Trace.WARNING, "Could not remove runtime target", t);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING,
+						"Could not remove runtime target", t);
+			}
 		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/RuntimeComponentProviderWrapper.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/RuntimeComponentProviderWrapper.java
index bad8bf8..5909e61 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/RuntimeComponentProviderWrapper.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/facets/RuntimeComponentProviderWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,9 @@
 			list.toArray(s);
 			return s;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not parse runtime type ids: " + element);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not parse runtime type ids: " + element);
+			}
 			return null;
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/tar/TarInputStream.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/tar/TarInputStream.java
index afd4155..edbdd1f 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/tar/TarInputStream.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/internal/tar/TarInputStream.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IURLProvider2.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IURLProvider2.java
new file mode 100644
index 0000000..3c11d61
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IURLProvider2.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.core.model;
+
+import java.net.URL;
+
+/**
+ * An interface for providing URLs for a module published
+ * to the server.
+ * 
+ * @since 1.0
+ */
+public interface IURLProvider2 extends IURLProvider {
+
+	/**
+	 * Returns a URL (e.g. "http://localhost:8080/myProject/myServlet") that can be used to launch
+	 * a browser pointing to a specific resource inside a module.    
+	 * @return
+	 */
+	public URL getLaunchableURL();
+
+}
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java
index 1b45df9..74dc3b4 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/PublishOperation.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2005 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java
index e980bb5..5bc8234 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
index dad47aa..2621b50 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -899,7 +899,9 @@
 	 * @return the publish status
 	 */
 	public IStatus publish(int kind, IProgressMonitor monitor) {
-		Trace.trace(Trace.FINEST, "-->-- Publishing to server: " + getServer().toString() + " -->--");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "-->-- Publishing to server: " + getServer().toString() + " -->--");
+		}
 		
 		if (getServer().getServerType().hasRuntime() && getServer().getRuntime() == null)
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishNoRuntime, null);
@@ -911,7 +913,8 @@
 		int size = 2000 + 3500 * moduleList.size() + 500 * tasks.length;
 		
 		monitor = ProgressUtil.getMonitorFor(monitor);
-		monitor.beginTask(NLS.bind(Messages.publishing, getServer().getName()), size);
+		String mainTaskMsg = NLS.bind(Messages.publishing, getServer().getName());
+		monitor.beginTask(mainTaskMsg, size);
 		
 		MultiStatus tempMulti = new MultiStatus(ServerPlugin.PLUGIN_ID, 0, "", null);
 		
@@ -919,7 +922,9 @@
 			return Status.CANCEL_STATUS;
 		
 		try {
-			Trace.trace(Trace.FINEST, "Starting publish");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Starting publish");
+			}
 			publishStart(ProgressUtil.getSubMonitorFor(monitor, 1000));
 			
 			if (monitor.isCanceled())
@@ -927,11 +932,13 @@
 			
 			// execute tasks
 			MultiStatus taskStatus = performTasks(tasks, monitor);
+			monitor.setTaskName(mainTaskMsg);
 			if (taskStatus != null && !taskStatus.isOK())
 				tempMulti.addAll(taskStatus);
 			
 			// execute publishers
 			taskStatus = executePublishers(kind, moduleList, deltaKindList, monitor, info2);
+			monitor.setTaskName(mainTaskMsg);
 			if (taskStatus != null && !taskStatus.isOK())
 				tempMulti.addAll(taskStatus);
 			
@@ -940,6 +947,7 @@
 			
 			// publish the server
 			publishServer(kind, ProgressUtil.getSubMonitorFor(monitor, 1000));
+			monitor.setTaskName(mainTaskMsg);
 			
 			if (monitor.isCanceled())
 				return Status.CANCEL_STATUS;
@@ -952,25 +960,39 @@
 			
 			monitor.done();
 		} catch (CoreException ce) {
-			Trace.trace(Trace.INFO, "CoreException publishing to " + toString(), ce);
+			if (Trace.INFO) {
+				Trace.trace(Trace.STRING_INFO, "CoreException publishing to "
+						+ toString(), ce);
+			}
 			return ce.getStatus();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error publishing  to " + toString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error publishing  to "
+						+ toString(), e);
+			}
 			tempMulti.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e));
 		} finally {
 			// end the publishing
 			try {
 				publishFinish(ProgressUtil.getSubMonitorFor(monitor, 500));
 			} catch (CoreException ce) {
-				Trace.trace(Trace.INFO, "CoreException publishing to " + toString(), ce);
+				if (Trace.INFO) {
+					Trace.trace(Trace.STRING_INFO,
+							"CoreException publishing to " + toString(), ce);
+				}
 				tempMulti.add(ce.getStatus());
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error stopping publish to " + toString(), e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Error stopping publish to " + toString(), e);
+				}
 				tempMulti.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e));
 			}
 		}
 		
-		Trace.trace(Trace.FINEST, "--<-- Done publishing --<--");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "--<-- Done publishing --<--");
+		}
 		
 		if (tempMulti.getChildren().length == 1)
 			return tempMulti.getChildren()[0];
@@ -1014,11 +1036,15 @@
 	 * @return the status
 	 */
 	protected IStatus publishModule(int kind, IModule[] module, int deltaKind, IProgressMonitor monitor) {
-		Trace.trace(Trace.FINEST, "-->-- Publishing module");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "-->-- Publishing module");
+		}
 		
 		int size = module.length;
 		IModule m = module[size - 1];
-		Trace.trace(Trace.FINEST, "Module: "+m);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Module: " + m);
+		}
 		monitor.beginTask(NLS.bind(Messages.publishingModule, m.getName()), 1000);
 		
 		try {
@@ -1030,7 +1056,9 @@
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e);
 		} finally {
 			monitor.done();
-			Trace.trace(Trace.FINEST, "--<-- Done publishing module");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "--<-- Done publishing module");
+			}
 		}
 	}
 
@@ -1094,10 +1122,10 @@
 			if (monitor.isCanceled())
 				return;
 			
-			// skip closed projects
+			// should skip this publish
 			IModule[] module = (IModule[]) modules.get(i);
 			IModule m = module[module.length - 1];
-			if (m.getProject() != null && !m.getProject().isAccessible())
+			if(shouldIgnorePublishRequest(m))
 				continue;
 			
 			int kind2 = kind;
@@ -1119,6 +1147,15 @@
 	}
 
 	/**
+	 * Returns whether this module should be ignore during the publish
+	 * @param m
+	 * @return
+	 */
+	protected boolean shouldIgnorePublishRequest(IModule m) {
+		return (m.getProject() != null && !m.getProject().isAccessible());
+	}
+	
+	/**
 	 * Returns the publish tasks that have been targeted to this server.
 	 * These tasks should be run during publishing.
 	 * 
@@ -1175,7 +1212,9 @@
 	protected MultiStatus executePublishers(int kind, List<IModule[]> modules, List<Integer> deltaKinds, IProgressMonitor monitor, IAdaptable info) throws CoreException {
 		Publisher[] publishers = ((Server)getServer()).getEnabledPublishers();
 		int size = publishers.length;
-		Trace.trace(Trace.FINEST, "Executing publishers: " + size);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Executing publishers: " + size);
+		}
 		
 		if (size == 0)
 			return null;
@@ -1202,7 +1241,9 @@
 				}
 				multi.add(pubStatus);
 			} catch (CoreException ce) {
-				Trace.trace(Trace.SEVERE, "Publisher failed", ce);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Publisher failed", ce);
+				}
 				throw ce;
 			}
 			
@@ -1214,6 +1255,7 @@
 			// re-create the delta list as at least one publisher has changed the contents of the published modules.
 			deltaKinds = this.computeDelta(modules);
 		}
+		monitor.subTask("");
 		return multi;
 	}
 
@@ -1237,7 +1279,9 @@
 	 */
 	protected MultiStatus performTasks(PublishOperation[] tasks, IProgressMonitor monitor) {
 		int size = tasks.length;
-		Trace.trace(Trace.FINEST, "Performing tasks: " + size);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Performing tasks: " + size);
+		}
 		
 		if (size == 0)
 			return null;
@@ -1250,7 +1294,9 @@
 			try {
 				task.execute(ProgressUtil.getSubMonitorFor(monitor, 500), null);
 			} catch (CoreException ce) {
-				Trace.trace(Trace.SEVERE, "Task failed", ce);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Task failed", ce);
+				}
 				multi.add(ce.getStatus());
 			}
 			
@@ -1259,6 +1305,7 @@
 				return multi;
 		}
 		
+		monitor.subTask("");
 		return multi;
 	}
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/HttpLaunchable.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/HttpLaunchable.java
index 3cf6531..b1a1214 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/HttpLaunchable.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/HttpLaunchable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,9 @@
 package org.eclipse.wst.server.core.util;
 
 import java.net.URL;
+
+import org.eclipse.wst.server.core.IModule;
+import org.eclipse.wst.server.core.model.IURLProvider2;
 /**
  * An HTTP launchable object. Encapsulates a launch of a URL for the Run on Server
  * support.
@@ -18,30 +21,40 @@
  * @since 1.0
  */
 public class HttpLaunchable {
-	private URL url;
+	private IURLProvider2 urlProvider;
 
 	/**
 	 * Create a reference to something accessible via HTTP.
 	 * 
 	 * @param url the URL to the object
 	 */
-	public HttpLaunchable(URL url) {
-		this.url = url;
+	public HttpLaunchable(final URL url) {
+		this.urlProvider = new IURLProvider2() {
+			public URL getModuleRootURL(IModule module){
+				return url;
+			}
+			public URL getLaunchableURL() {
+				return getModuleRootURL(null);
+			}
+		};
 	}
 
+	public HttpLaunchable(IURLProvider2 urlProvider){
+		this.urlProvider = urlProvider;
+	}
 	/**
 	 * Return the URL to the object.
 	 * 
 	 * @return the URL to the object
 	 */
 	public URL getURL() {
-		return url;
+		return urlProvider.getLaunchableURL();
 	}
 
 	/**
 	 * @see Object#toString()
 	 */
 	public String toString() {
-		return "HttpLaunchable[url=" + url + "]";
+		return "HttpLaunchable[urlProvider=" + urlProvider + "]";
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ModuleFile.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ModuleFile.java
index 25cb2df..beb56c6 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ModuleFile.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ModuleFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ModuleFolder.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ModuleFolder.java
index 9874138..918e932 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ModuleFolder.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ModuleFolder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
index d338f0a..7477e9e 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModuleFactoryDelegate.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -63,7 +63,9 @@
 				return m;
 			}
 		} catch (Throwable t) {
-			Trace.trace(Trace.SEVERE, "Error creating module", t);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error creating module", t);
+			}
 		}
 		return new IModule[0];
 	}
@@ -92,13 +94,19 @@
 							if (modules2 != null)
 								modules.put(projects[i], modules2);
 						} catch (Throwable t) {
-							Trace.trace(Trace.SEVERE, "Error creating module for " + projects[i].getName(), t);
+							if (Trace.SEVERE) {
+								Trace.trace(Trace.STRING_SEVERE,
+										"Error creating module for "
+												+ projects[i].getName(), t);
+							}
 						}
 					}
 				}
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error caching modules", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error caching modules", e);
+			}
 		}
 	}
 
@@ -283,7 +291,10 @@
 				}
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.FINER, "Could not find " + id + ". Reverting to default behaviour", e);
+			if (Trace.FINER) {
+				Trace.trace(Trace.STRING_FINER, "Could not find " + id
+						+ ". Reverting to default behaviour", e);
+			}
 		}
 
 		// otherwise default to searching all modules
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishHelper.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishHelper.java
index 7bf137f..10785c2 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishHelper.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -98,7 +98,11 @@
 			throw e;
 		} catch (Exception e) {
 			IPath path = mf.getModuleRelativePath().append(mf.getName());
-			Trace.trace(Trace.SEVERE, "Error copying file: " + path.toOSString() + " to " + to.toOSString(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE,
+						"Error copying file: " + path.toOSString() + " to "
+								+ to.toOSString(), e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCopyingFile, path.toOSString(), e.getLocalizedMessage()), null));
 		} finally {
 			if (tempFile != null && tempFile.exists())
@@ -161,7 +165,10 @@
 				status.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorDeleting, dir.getAbsolutePath()), null));
 			monitor.done();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error deleting directory " + dir.getAbsolutePath(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error deleting directory "
+						+ dir.getAbsolutePath(), e);
+			}
 			status.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, e.getLocalizedMessage(), null));
 		}
 		
@@ -469,14 +476,18 @@
 	}
 
 	private static void deleteFile(IPath path, IModuleFile file) throws CoreException {
-		Trace.trace(Trace.PUBLISHING, "Deleting: " + file.getName() + " from " + path.toString());
+		if (Trace.PUBLISHING) {
+			Trace.trace(Trace.STRING_PUBLISHING, "Deleting: " + file.getName() + " from " + path.toString());
+		}
 		IPath path2 = path.append(file.getModuleRelativePath()).append(file.getName());
 		if (path2.toFile().exists() && !path2.toFile().delete())
 			throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorDeleting, path2), null));
 	}
 
 	private void copyFile(IModuleFile mf, IPath path) throws CoreException {
-		Trace.trace(Trace.PUBLISHING, "Copying: " + mf.getName() + " to " + path.toString());
+		if (Trace.PUBLISHING) {
+			Trace.trace(Trace.STRING_PUBLISHING, "Copying: " + mf.getName() + " to " + path.toString());
+		}
 		
 		if(!isCopyFile(mf, path)){
 			return;
@@ -536,7 +547,9 @@
 
 	private IStatus[] copy(IModuleResource resource, IPath path, IProgressMonitor monitor) {
 		String name = resource.getName();
-		Trace.trace(Trace.PUBLISHING, "Copying: " + name + " to " + path.toString());
+		if (Trace.PUBLISHING) {
+			Trace.trace(Trace.STRING_PUBLISHING, "Copying: " + name + " to " + path.toString());
+		}
 		List<IStatus> status = new ArrayList<IStatus>(2);
 		if (resource instanceof IModuleFolder) {
 			IModuleFolder folder = (IModuleFolder) resource;
@@ -594,7 +607,9 @@
 		} catch (CoreException e) {
 			return new IStatus[] { e.getStatus() };
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error zipping", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error zipping", e);
+			}
 			return new Status[] { new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCreatingZipFile, path.lastSegment(), e.getLocalizedMessage()), e) };
 		} finally {
 			if (tempFile != null && tempFile.exists())
@@ -766,7 +781,9 @@
 			}
 			return Status.OK_STATUS;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error copying file", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error copying file", e);
+			}
 			return new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCopyingFile, new String[] {to, e.getLocalizedMessage()}), e);
 		} finally {
 			try {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishUtil.java
index 483adfa..f495fe8 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/PublishUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java
index 9fa5996..88c1baa 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/SocketUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -37,7 +37,7 @@
 
 	protected static final Object lock = new Object();
 
-	private static Set<String> localHostCache = new HashSet<String>();
+	protected static Set<String> localHostCache = new HashSet<String>();
 	private static Set<String> notLocalHostCache = new HashSet<String>();
 	private static Map<String, CacheThread> threadMap = new HashMap<String, CacheThread>();
 
@@ -258,7 +258,7 @@
 	 * </p><p>
 	 * On machines where the network configuration of the machine is bad or the
 	 * network has problems, the first call to this method will always return after
-	 * 250ms, even if the caching is not complete. At that point it may return
+	 * 350ms, even if the caching is not complete. At that point it may return
 	 * "false negative" results. (i.e. the method will return <code>false</code>
 	 * even though it may later determine that the host address is a local host)
 	 * </p><p>
@@ -293,7 +293,6 @@
 		try {
 			localHostaddr = InetAddress.getLocalHost();
 			if (host.equals(localHostaddr.getHostName().toLowerCase())
-					|| host.equals(localHostaddr.getCanonicalHostName().toLowerCase())
 					|| host.equals(localHostaddr.getHostAddress().toLowerCase())){
 				synchronized (lock) {
 					localHostCache.add(host);
@@ -301,7 +300,43 @@
 				return true;
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Localhost caching failure", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Localhost caching failure",
+						e);
+			}
+		}
+		
+		// Bug 337763 - the InetAddress's getCanonicalHostName was removed from the simple case
+		// to be called in its own separate thread. This was due to the call being platform
+		// dependent and in some cases, taking up to 10 seconds to return. 
+		// 
+		// The cached thread may perform operations that are expensive. Therefore, to handle
+		// the case where the canonical host name returns quickly, a thread that terminates 
+		// after 100ms is used.
+		try {
+			final String hostFinal = host;
+			final InetAddress localHostaddrFinal = localHostaddr;
+			Thread compareCanonicalHostNameThread = new Thread(){
+				public void run(){
+					boolean isLocal = 
+						hostFinal.equals(localHostaddrFinal.getCanonicalHostName().toLowerCase());					
+					if (isLocal){
+						synchronized (lock) {
+							localHostCache.add(hostFinal);
+						}
+					}
+				}
+			};
+			compareCanonicalHostNameThread.start();
+			compareCanonicalHostNameThread.join(100);
+			// Check cache again
+			if (localHostCache.contains(host)){
+				return true;
+			}
+		} catch (Exception e){
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Comparing host with local host conical host name failed", e);
+			}			
 		}
 		
 		// check for current thread and wait if necessary
@@ -316,7 +351,10 @@
 				t.join(30);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Localhost caching failure", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Localhost caching failure",
+						e);
+			}
 		}
 		
 		// check if cache is still ok
@@ -363,7 +401,10 @@
 				cacheThread.join(200);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Localhost caching failure", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Localhost caching failure",
+						e);
+			}
 		}
 		
 		synchronized (lock) {
@@ -391,7 +432,10 @@
 						return true;
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not find localhost", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING,
+							"Could not find localhost", e);
+				}
 			}
 		}
 		synchronized (lock) {
diff --git a/plugins/org.eclipse.wst.server.ui/.options b/plugins/org.eclipse.wst.server.ui/.options
index 295c5ce..dbaab94 100644
--- a/plugins/org.eclipse.wst.server.ui/.options
+++ b/plugins/org.eclipse.wst.server.ui/.options
@@ -3,6 +3,14 @@
 # Turn on general debugging
 org.eclipse.wst.server.ui/debug=true
 
+# Tracing options
+org.eclipse.wst.server.ui/config=false
+org.eclipse.wst.server.ui/info=false
+org.eclipse.wst.server.ui/warning=false
+org.eclipse.wst.server.ui/severe=false
+org.eclipse.wst.server.ui/finest=false
+org.eclipse.wst.server.ui/finer=false
+
 # Loading of extension points
 org.eclipse.wst.server.ui/extension_point=false
 
diff --git a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
index a160a40..64f94fd 100644
--- a/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.server.ui; singleton:=true
-Bundle-Version: 1.1.206.qualifier
+Bundle-Version: 1.1.209.qualifier
 Bundle-Activator: org.eclipse.wst.server.ui.internal.ServerUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -39,6 +39,6 @@
  org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.103,2.0.0)",
  org.eclipse.jface.text;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.wst.common.project.facet.ui;bundle-version="[1.1.0,2.0.0)";resolution:=optional,
- org.eclipse.ui.navigator;bundle-version="3.3.100"
+ org.eclipse.ui.navigator;bundle-version="[3.3.100,4.0.0)"
 Bundle-ActivationPolicy: lazy;exclude:="org.eclipse.wst.server.ui.internal.webbrowser"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.wst.server.ui/plugin.properties b/plugins/org.eclipse.wst.server.ui/plugin.properties
index c876eda..35ecb73 100644
--- a/plugins/org.eclipse.wst.server.ui/plugin.properties
+++ b/plugins/org.eclipse.wst.server.ui/plugin.properties
@@ -76,8 +76,6 @@
 
 # --------------- Audio ---------------
 
-extensionPointAudio=Audio
-
 audioPreferenceTitle=Audio
 preferenceAudioKeywords=sound volume
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/IServerModule.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/IServerModule.java
index 5f04206..10dec46 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/IServerModule.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/IServerModule.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java
index b995481..cdb8896 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/actions/RunOnServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/actions/RunOnServerAction.java
index 5633299..e940092 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/actions/RunOnServerAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/actions/RunOnServerAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.actions;
 
+import java.util.HashMap;
+
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.viewers.StructuredSelection;
@@ -30,6 +32,7 @@
 public class RunOnServerAction extends Action {
 	protected RunOnServerActionDelegate delegate;
 
+	protected HashMap<String,Object> actionProperties;
 	/**
 	 * Create a new Run on Server action for run mode.
 	 * 
@@ -38,6 +41,17 @@
 	public RunOnServerAction(Object object) {
 		this(object, ILaunchManager.RUN_MODE);
 	}
+	
+	/**
+	 * Create a new Run on Server action for run mode.
+	 * 
+	 * @param object the object to attempt to run
+	 */
+	public RunOnServerAction(Object object, HashMap<String,Object> actionProperties) {		
+		this(object, ILaunchManager.RUN_MODE);
+		this.actionProperties = actionProperties;
+		delegate.setActionProperties(actionProperties);
+	}
 
 	/**
 	 * Create a new Run on Server action.
@@ -48,6 +62,10 @@
 	public RunOnServerAction(Object object, String launchMode) {
 		super();
 		
+		if (actionProperties == null){
+			actionProperties = new HashMap<String, Object>();
+		}
+		
 		if (ILaunchManager.DEBUG_MODE.equals(launchMode)) {
 			setText(Messages.actionDebugOnServer);
 			setDisabledImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_DTOOL_DEBUG_ON_SERVER));
@@ -65,7 +83,7 @@
 			setImageDescriptor(ImageResource.getImageDescriptor(ImageResource.IMG_ETOOL_RUN_ON_SERVER));
 		}
 		
-		delegate = new RunOnServerActionDelegate();
+		delegate = new RunOnServerActionDelegate(actionProperties);
 		delegate.setLaunchMode(launchMode);
 		if (object != null) {
 			StructuredSelection sel = new StructuredSelection(object);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
index bb8fa61..c43804e 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,6 +23,7 @@
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.part.EditorPart;
 import org.eclipse.wst.server.core.IServerWorkingCopy;
+import org.eclipse.wst.server.ui.internal.Trace;
 import org.eclipse.wst.server.ui.internal.editor.*;
 /**
  * An abstract server editor which implements the most common methods
@@ -303,7 +304,13 @@
 		Iterator iterator = getSections(id).iterator();
 		while (iterator.hasNext()) {
 			ServerEditorSection section = (ServerEditorSection) iterator.next();
-			section.createSection(parent);
+			try {
+				section.createSection(parent);
+			} catch (RuntimeException e) {
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Failed to insert editor section: " + id + "\n" + e.getLocalizedMessage(), e);
+				}
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java
index 88824d8..33f060e 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultMonitorDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultMonitorDelegate.java
index 279ddbb..9efbd0f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultMonitorDelegate.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultMonitorDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -96,7 +96,9 @@
 			monitors.put(port, monitor);
 			return mport;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not start monitoring", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not start monitoring", e);
+			}
 			throw new CoreException(new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorStartingMonitor, e.getLocalizedMessage()), null));
 		}
 	}
@@ -110,7 +112,9 @@
 			if (monitor != null)
 				monitor.stop();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not stop monitoring", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not stop monitoring", e);
+			}
 		}
 	}
 }
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultServerLabelDecorator.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultServerLabelDecorator.java
index c9671eb..b74ebff 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultServerLabelDecorator.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DefaultServerLabelDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -85,7 +85,9 @@
 				image.dispose();
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not dispose images", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not dispose images", e);
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java
index 645e865..648edfc 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/DeleteServerDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -112,23 +112,27 @@
 		// prompt for stopping running servers
 		int size = runningServersList.size();
 		if (size > 0) {
-			checkDeleteRunning = new Button(composite, SWT.CHECK);
-			checkDeleteRunning.setText(Messages.deleteServerDialogRunningServer);
-			checkDeleteRunning.setSelection(true);
+			if (servers.length > 1) {
+				checkDeleteRunning = new Button(composite, SWT.CHECK);
+				checkDeleteRunning.setText(Messages.deleteServerDialogRunningServer);
+				checkDeleteRunning.setSelection(true);
+			}
 			
 			if (runningServerCanStop) {
 				checkDeleteRunningStop = new Button(composite, SWT.CHECK);
 				checkDeleteRunningStop.setText(Messages.deleteServerDialogRunningServerStop);
 				checkDeleteRunningStop.setSelection(true);
 				GridData data = new GridData();
-				data.horizontalIndent = 15;
-				checkDeleteRunningStop.setLayoutData(data);
-				
-				checkDeleteRunning.addSelectionListener(new SelectionAdapter() {
-					public void widgetSelected(SelectionEvent e) {
-						checkDeleteRunningStop.setEnabled(checkDeleteRunning.getSelection());
-					}
-				});
+				if (checkDeleteRunning != null) {
+					// Only indent the checkbox if the delete running servers checkbox is available.
+					data.horizontalIndent = 15;
+					checkDeleteRunning.addSelectionListener(new SelectionAdapter() {
+						public void widgetSelected(SelectionEvent e) {
+							checkDeleteRunningStop.setEnabled(checkDeleteRunning.getSelection());
+						}
+					});
+				}
+				checkDeleteRunningStop.setLayoutData(data);				
 			}
 		}
 		
@@ -140,7 +144,7 @@
 	protected void buttonPressed(int buttonId) {
 		if (buttonId == OK) {
 			final boolean checked = (checkDeleteConfigs != null && checkDeleteConfigs.getSelection());
-			final boolean deleteRunning = (checkDeleteRunning != null && checkDeleteRunning.getSelection());
+			final boolean deleteRunning = (checkDeleteRunning == null || checkDeleteRunning.getSelection());
 			final boolean deleteRunningStop = (checkDeleteRunningStop != null && checkDeleteRunningStop.getSelection());
 			
 			Thread t = new Thread("Delete servers") {
@@ -173,7 +177,9 @@
 										configs[i].delete(true, true, monitor);
 								}
 							} catch (Exception e) {
-								Trace.trace(Trace.SEVERE, "Error while deleting resources", e);
+								if (Trace.SEVERE) {
+									Trace.trace(Trace.STRING_SEVERE, "Error while deleting resources", e);
+								}
 								return new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, e.getMessage(), e); 
 							}
 							
@@ -243,7 +249,9 @@
 						Thread.sleep(200);
 					}
 				} catch (InterruptedException e) {
-					Trace.trace(Trace.WARNING, "Interrupted while waiting for servers stop");
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING, "Interrupted while waiting for servers stop");
+					}
 				}
 			}
 		}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/EclipseUtil.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/EclipseUtil.java
index dcdabd9..53328a4 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/EclipseUtil.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/EclipseUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -70,10 +70,14 @@
 			
 			return Status.OK_STATUS;
 		} catch (CoreException ce) {
-			Trace.trace(Trace.SEVERE, "Could not create server project named " + name, ce);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not create server project named " + name, ce);
+			}
 			return new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCouldNotCreateServerProjectStatus, ce.getMessage()), ce);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not create server project (2) named " + name, e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not create server project (2) named " + name, e);
+			}
 			return new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, Messages.errorCouldNotCreateServerProject, e);
 		} finally {
 			monitor.done();
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java
index ba037d9..330696c 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ImageResource.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,7 +44,9 @@
 			String pathSuffix = "icons/";
 			ICON_BASE_URL = ServerUIPlugin.getInstance().getBundle().getEntry(pathSuffix);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not set icon base URL", e);
+			if(Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not set icon base URL", e);
+			}
 		}
 	}
 
@@ -333,7 +335,9 @@
 			imageRegistry.put(key, id);
 			imageDescriptors.put(key, id);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error registering image " + key + " from " + partialURL, e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error registering image " + key + " from " + partialURL, e);
+			}
 		}
 	}
 
@@ -341,11 +345,15 @@
 	 * Load the server images.
 	 */
 	private static void loadServerImages() {
-		Trace.trace(Trace.CONFIG, "->- Loading .serverImages extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .serverImages extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		loadServerImages(registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, ServerUIPlugin.EXTENSION_SERVER_IMAGES));
 		ServerUIPlugin.addRegistryListener();
-		Trace.trace(Trace.CONFIG, "-<- Done loading .serverImages extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .serverImages extension point -<-");
+		}
 	}
 
 	/**
@@ -369,9 +377,13 @@
 						imageDescriptors.put(typeIds[j], imageDescriptor);
 					}
 				}
-				Trace.trace(Trace.CONFIG, "  Loaded serverImage: " + cf[i].getAttribute("id"));
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG, "  Loaded serverImage: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load serverImage: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "  Could not load serverImage: " + cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java
index e231a3f..d312641 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/LaunchClientJob.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,7 +41,9 @@
 	 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
 	 */
 	protected IStatus run(IProgressMonitor monitor) {
-		Trace.trace(Trace.FINER, "LaunchClient job");
+		if (Trace.FINER) {
+			Trace.trace(Trace.STRING_FINER, "LaunchClient job");
+		}
 
 		// wait for up to 5 minutes
 		final Server server = (Server) getServer();
@@ -60,7 +62,9 @@
 			state = server.getModuleState(module);
 		}
 		
-		Trace.trace(Trace.FINER, "LaunchClient job 2 " + state);
+		if (Trace.FINER) {
+			Trace.trace(Trace.STRING_FINER, "LaunchClient job 2 " + state);
+		}
 		
 		if (monitor.isCanceled())
 			return Status.CANCEL_STATUS;
@@ -68,25 +72,48 @@
 		if (state == IServer.STATE_STARTING)
 			return Status.OK_STATUS;
 		
-		Trace.trace(Trace.FINER, "LaunchClient job 3");
-		
-		// display client on UI thread
-		Display.getDefault().asyncExec(new Runnable() {
-			public void run() {
-				Trace.trace(Trace.FINEST, "Attempting to load client: " + client.getId());
-				try {
-					Object launchable = launchableAdapter.getLaunchable(server, moduleArtifact);
-					IStatus status = client.launch(server, launchable, launchMode, server.getLaunch());
-					if (status != null && status.getSeverity() == IStatus.ERROR)
-						EclipseUtil.openError(null, status);
-				} catch (CoreException ce) {
-					EclipseUtil.openError(null, ce.getStatus());
-				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Server client failed", e);
+		if (Trace.FINER) {
+			Trace.trace(Trace.STRING_FINER, "LaunchClient job 3");
+		}
+
+		// job return status
+		final IStatus[] resultingStatus = new IStatus[] { Status.OK_STATUS };
+
+		// acquire the launchable object.
+		final Object[] launchable = new Object[1];
+		try {
+			launchable[0] = launchableAdapter.getLaunchable(server, moduleArtifact);
+		}
+		catch (CoreException ce) {
+			resultingStatus[0] = ce.getStatus();
+			EclipseUtil.openError(null, resultingStatus[0]);
+		}
+		if (monitor.isCanceled()) {
+			return Status.CANCEL_STATUS;
+		}
+		// display client on UI thread if launchable exists.
+		if (launchable[0] != null) {
+			Display.getDefault().asyncExec(new Runnable() {
+				public void run() {
+					if (Trace.FINEST) {
+						Trace.trace(Trace.STRING_FINEST, "Attempting to load client: " + client.getId());
+					}
+					try {
+						resultingStatus[0] = client.launch(server, launchable[0], launchMode, server.getLaunch());
+						if (resultingStatus[0] != null && resultingStatus[0].getSeverity() == IStatus.ERROR)
+							EclipseUtil.openError(null, resultingStatus[0]);
+					}
+					catch (Exception e) {
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Server client failed", e);
+						}
+					}
 				}
-			}
-		});
-		Trace.trace(Trace.FINER, "LaunchClient job 4");
-		return Status.OK_STATUS;
+			});
+		}
+		if (Trace.FINER) {
+			Trace.trace(Trace.STRING_FINER, "LaunchClient job 4");
+		}
+		return resultingStatus[0];
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
index f4dbcec..2665029 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -195,6 +195,7 @@
 	public static String wizNewServerSelect;
 	public static String wizNewServerManual;
 	public static String wizCheckRemoteSupport;
+	public static String wizEmptyHostName;
 	public static String wizSelectServerPreferred;
 	public static String wizNewServerExisting;
 	public static String wizNewServerRuntime;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
index 0614651..fae6d5e 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Messages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2004, 2010 IBM Corporation and others.
+# Copyright (c) 2004, 2011 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -22,6 +22,7 @@
 wizNewServerRuntime=Server &runtime environment:
 wizNewServerRuntimeCreate=Create a new runtime environment
 wizCheckRemoteSupport=The currently selected server type does not support remote hosts
+wizEmptyHostName=Server's host name must be set.
 
 wizNewServerSelect=How do you want to select the server?
 wizNewServerExisting=Choose an e&xisting server
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java
index e815b37..b947f0a 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ProjectPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -168,7 +168,9 @@
 			
 			return composite;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error creating project property page", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error creating project property page", e);
+			}
 			return null;
 		}
 	}
@@ -217,7 +219,9 @@
 			try {
 				ServerCore.setDefaultServer(module, server, null);
 			} catch (CoreException e) {
-				Trace.trace(Trace.SEVERE, "Error setting preferred server", e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Error setting preferred server", e);
+				}
 				EclipseUtil.openError(Messages.errorCouldNotSavePreference, e.getStatus());
 				return false;
 			}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
index 3e020e1..16b86f3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/RuntimePreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,12 +14,7 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.*;
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -34,11 +29,7 @@
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.*;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.PlatformUI;
@@ -54,17 +45,18 @@
 /**
  * The preference page that holds server runtimes.
  */
-public class RuntimePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+public class RuntimePreferencePage extends PreferencePage implements IWorkbenchPreferencePage, IRuntimeLifecycleListener {
 	protected Button edit;
 	protected Button remove;
 	protected Label pathLabel;
-
+	RuntimeComposite runtimeComp;
 	/**
 	 * RuntimePreferencesPage constructor comment.
 	 */
 	public RuntimePreferencePage() {
 		super();
 		noDefaultAndApplyButton();
+		ServerCore.addRuntimeLifecycleListener(this);
 	}
 	
 	/**
@@ -101,7 +93,7 @@
 		label.setLayoutData(data);
 		label.setText(Messages.preferenceRuntimesTable);
 		
-		final RuntimeComposite runtimeComp = new RuntimeComposite(composite, SWT.NONE, new RuntimeComposite.RuntimeSelectionListener() {
+		runtimeComp = new RuntimeComposite(composite, SWT.NONE, new RuntimeComposite.RuntimeSelectionListener() {
 			public void runtimeSelected(IRuntime runtime) {
 				if (runtime == null) {
 					edit.setEnabled(false);
@@ -146,11 +138,12 @@
 		buttonComp.setLayoutData(data);
 		
 		Button add = SWTUtil.createButton(buttonComp, Messages.add);
+		final RuntimeComposite runtimeComp2 = runtimeComp;
 		add.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				if (showWizard(null) == Window.CANCEL)
 					return;
-				runtimeComp.refresh();
+				runtimeComp2.refresh();
 			}
 		});
 		
@@ -158,12 +151,12 @@
 		edit.setEnabled(false);
 		edit.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
-				IRuntime runtime = runtimeComp.getSelectedRuntime();
+				IRuntime runtime = runtimeComp2.getSelectedRuntime();
 				if (runtime != null) {
 					IRuntimeWorkingCopy runtimeWorkingCopy = runtime.createWorkingCopy();
 					if (showWizard(runtimeWorkingCopy) != Window.CANCEL) {
 						try {
-							runtimeComp.refresh(runtime);
+							runtimeComp2.refresh(runtime);
 						} catch (Exception ex) {
 							// ignore
 						}
@@ -178,7 +171,7 @@
 			public void widgetSelected(SelectionEvent e) {
 				IRuntime runtime = runtimeComp.getSelectedRuntime();
 				if (removeRuntime(runtime))
-					runtimeComp.remove(runtime);
+					runtimeComp2.remove(runtime);
 			}
 		});
 		
@@ -227,15 +220,22 @@
 									try {
 										locators[i].searchForRuntimes(path, listener, monitor2);
 									} catch (CoreException ce) {
-										Trace.trace(Trace.WARNING, "Error locating runtimes: " + locators[i].getId(), ce);
+										if (Trace.WARNING) {
+											Trace.trace(Trace.STRING_WARNING,
+													"Error locating runtimes: " + locators[i].getId(), ce);
+										}
 									}
 							}
-							Trace.trace(Trace.INFO, "Done search");
+							if (Trace.INFO) {
+								Trace.trace(Trace.STRING_INFO, "Done search");
+							}
 						}
 					};
 					dialog.run(true, true, runnable);
 					
-					Trace.trace(Trace.FINER, "Found runtimes: " + list.size());
+					if (Trace.FINER) {
+						Trace.trace(Trace.STRING_FINER, "Found runtimes: " + list.size());
+					}
 					
 					if (!monitor.isCanceled()) {
 						if (list.isEmpty()) {
@@ -243,8 +243,9 @@
 							return;
 						}
 						monitor.worked(5);
-						// remove duplicates from list (based on location)
-						Trace.trace(Trace.FINER, "Removing duplicates");
+						if (Trace.FINER) {
+							Trace.trace(Trace.STRING_FINER, "Removing duplicates");
+						}
 						List<IRuntime> good = new ArrayList<IRuntime>();
 						Iterator iterator2 = list.iterator();
 						while (iterator2.hasNext()) {
@@ -264,8 +265,9 @@
 						}
 						monitor.worked(5);
 						
-						// add to list
-						Trace.trace(Trace.FINER, "Adding runtimes: " + good.size());
+						if (Trace.FINER) {
+							Trace.trace(Trace.STRING_FINER, "Adding runtimes: " + good.size());
+						}
 						Iterator iterator = good.iterator();
 						while (iterator.hasNext()) {
 							IRuntimeWorkingCopy wc = (IRuntimeWorkingCopy) iterator.next();
@@ -275,7 +277,9 @@
 					}
 					dialog.close();
 				} catch (Exception ex) {
-					Trace.trace(Trace.SEVERE, "Error finding runtimes", ex);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error finding runtimes", ex);
+					}
 				}
 				runtimeComp.refresh();
 			}
@@ -323,7 +327,9 @@
 						IServer server = (IServer) iter.next();
 						server.delete();
 					} catch (Exception e) {
-						Trace.trace(Trace.SEVERE, "Error deleting server", e);
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Error deleting server", e);
+						}
 					}
 				}
 			}
@@ -339,7 +345,9 @@
 		try {
 			runtime.delete();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error deleting runtime", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error deleting runtime", e);
+			}
 		}
 		return true;
 	}
@@ -406,4 +414,36 @@
 		if (visible)
 			setTitle(Messages.preferenceRuntimesTitleLong);
 	}
+	
+	@Override
+	public void dispose() {
+		ServerCore.removeRuntimeLifecycleListener(this);
+		super.dispose();
+	}
+
+	public void runtimeChanged(final IRuntime runtime) {
+		final RuntimeComposite runtimeComp2 = this.runtimeComp;
+		Display.getDefault().asyncExec(new Runnable(){
+			public void run(){
+				runtimeComp2.refresh(runtime);
+			}
+		});
+	}
+
+	public void runtimeAdded(final IRuntime runtime) {
+		final RuntimeComposite runtimeComp2 = this.runtimeComp;
+		Display.getDefault().asyncExec(new Runnable(){
+			public void run(){
+				runtimeComp2.add(runtime);
+			}
+		});
+	}
+	public void runtimeRemoved(final IRuntime runtime) {
+		final RuntimeComposite runtimeComp2 = this.runtimeComp;
+		Display.getDefault().asyncExec(new Runnable(){
+			public void run(){
+				runtimeComp2.remove(runtime);
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java
index d526149..875a17d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerAdapterFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 IBM Corporation and others.
+ * Copyright (c) 2004, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLabelProvider.java
index f78e219..e295e81 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLabelProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -77,7 +77,9 @@
 			try {
 				srl[i].labelProviderChanged(event);
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "  Error firing label change event to " + srl[i], e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "  Error firing label change event to " + srl[i], e);
+				}
 			}
 		}
 	}
@@ -138,7 +140,9 @@
 				return ((IWorkbenchAdapter) element).getImageDescriptor(null);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not get image descriptor", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not get image descriptor", e);
+			}
 		}
 		return null;
 	}
@@ -202,7 +206,9 @@
 				return decorate(getModuleImage(mt.getId()), ms);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not get image descriptor", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not get image descriptor", e);
+			}
 		}
 		return null;
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyPage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyPage.java
index 53a7147..9aeb954 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyPage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -129,7 +129,9 @@
 					try {
 						Server.switchLocation(svr, null);
 					} catch (CoreException ce) {
-						Trace.trace(Trace.SEVERE, "Error switching server location", ce);
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Error switching server location", ce);
+						}
 					}
 					if (svr.getFile() != null)
 						serverLocation.setText(svr.getFile().getFullPath().toPortableString());
@@ -142,7 +144,9 @@
 			
 			return composite;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error creating property page", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error creating property page", e);
+			}
 			return null;
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerToolTip.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerToolTip.java
index b1237ff..0e5024d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerToolTip.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerToolTip.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -233,7 +233,9 @@
 	}
 
 	private void loadExtensions() {
-		Trace.trace(Trace.EXTENSION_POINT, "->- Loading serverToolTip extension point ->-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "->- Loading serverToolTip extension point ->-");
+		}
 		
 		// search for extension points 
 		IExtensionRegistry reg = Platform.getExtensionRegistry();
@@ -257,15 +259,22 @@
 						
 						listOfProviders.add(exTooltip);
 						toolTipProviders.put(serverType.getId(), listOfProviders);
-						Trace.trace(Trace.EXTENSION_POINT, "  Loaded serverToolTip: " + exElement.getAttribute("id")
-								+ " for server type: " + serverType.getId());
+						if (Trace.EXTENSION_POINT) {
+							Trace.trace(Trace.STRING_EXTENSION_POINT,
+									"  Loaded serverToolTip: " + exElement.getAttribute("id") + " for server type: "
+											+ serverType.getId());
+						}
 					}
 				}
 			} catch (CoreException e) {
-				Trace.trace(Trace.SEVERE, "Tooltip failed to load" + exElement.toString(), e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Tooltip failed to load" + exElement.toString(), e);
+				}
 			}
 		}
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading serverToolTip extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading serverToolTip extension point -<-");
+		}
 	}
 
 //  read the createFocusedTooltip method for information on why this is commented out
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
index 40b12c1..6326ce3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,6 +20,8 @@
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.osgi.service.debug.DebugOptions;
+import org.eclipse.osgi.service.debug.DebugOptionsListener;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
@@ -44,6 +46,7 @@
 import org.eclipse.wst.server.ui.wizard.ServerCreationWizardPageExtension;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 import org.osgi.framework.BundleContext;
+
 /**
  * The server UI plugin class.
  */
@@ -215,7 +218,9 @@
 	 * @see Plugin#start(org.osgi.framework.BundleContext)
 	 */
 	public void start(BundleContext context) throws Exception {
-		Trace.trace(Trace.CONFIG, "----->----- Server UI plugin start ----->-----");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "----->----- Server UI plugin start ----->-----");
+		}
 		super.start(context);
 		
 		ServerCore.addServerLifecycleListener(serverLifecycleListener);
@@ -225,13 +230,20 @@
 		
 		InitializeJob job = new InitializeJob();
 		job.schedule();
+
+		// register the debug options listener
+		final Hashtable<String, String> props = new Hashtable<String, String>(4);
+		props.put(DebugOptions.LISTENER_SYMBOLICNAME, ServerUIPlugin.PLUGIN_ID);
+		context.registerService(DebugOptionsListener.class.getName(), new Trace(), props);
 	}
 
 	/**
 	 * @see Plugin#stop(org.osgi.framework.BundleContext)
 	 */
 	public void stop(BundleContext context) throws Exception {
-		Trace.trace(Trace.CONFIG, "-----<----- Server UI plugin stop -----<-----");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-----<----- Server UI plugin stop -----<-----");
+		}
 		super.stop(context);
 		
 		if (registryListener != null) {
@@ -424,7 +436,9 @@
 			IServerEditorInput input = new ServerEditorInput(serverId);
 			page.openEditor(input, IServerEditorInput.EDITOR_ID);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error opening server editor", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error opening server editor", e);
+			}
 		}
 	}
 
@@ -487,7 +501,9 @@
 					IWorkbench workbench = ServerUIPlugin.getInstance().getWorkbench();
 					IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow();
 					if (workbenchWindow == null) {
-						Trace.trace(Trace.FINER, "No active workbench window");
+						if (Trace.FINER) {
+							Trace.trace(Trace.STRING_FINER, "No active workbench window");
+						}
 						return;
 					}
 					
@@ -503,10 +519,11 @@
 								view2.getSite().getAdapter(IWorkbenchSiteProgressService.class);
 							wsps.warnOfContentChange();
 						}
-					} else
-						page.showView(VIEW_ID);
+					}
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error opening Servers view", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error opening Servers view", e);
+					}
 				}
 			}
 		});
@@ -676,7 +693,9 @@
 	private static synchronized void loadWizardFragments() {
 		if (wizardFragments != null)
 			return;
-		Trace.trace(Trace.CONFIG, "->- Loading .wizardFragments extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .wizardFragments extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, EXTENSION_WIZARD_FRAGMENTS);
 		
@@ -685,7 +704,9 @@
 		addRegistryListener();
 		wizardFragments = map;
 		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .wizardFragments extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .wizardFragments extension point -<-");
+		}
 	}
 
 	/**
@@ -699,9 +720,13 @@
 				int size = ids.length;
 				for (int j = 0; j < size; j++)
 					map.put(ids[j], new WizardFragmentData(id, cf[i]));
-				Trace.trace(Trace.CONFIG, "  Loaded wizardFragment: " + id);
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG, "  Loaded wizardFragment: " + id);
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load wizardFragment: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "  Could not load wizardFragment: " + cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 	}
@@ -768,7 +793,9 @@
 		if (serverCreationWizardPageExtensions != null)
 			return;
 		
-		Trace.trace(Trace.CONFIG, "->- Loading .serverCreationWizardPageExtension extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .serverCreationWizardPageExtension extension point ->-");
+		}
 		serverCreationWizardPageExtensions = new ArrayList<ServerCreationWizardPageExtension>();
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "serverCreationWizardPageExtension");
@@ -778,16 +805,25 @@
 				// Create the class here already since the usage of the server wizard page will need to use all the extensions
 				// in all the calls.  Therefore, there is no need for lazy loading here.
 				ServerCreationWizardPageExtension curExtension = (ServerCreationWizardPageExtension)curConfigElement.createExecutableExtension("class");
-				Trace.trace(Trace.CONFIG, "  Loaded .serverCreationWizardPageExtension: " + cf[0].getAttribute("id") + ", loaded class=" + curExtension);
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG,
+							"  Loaded .serverCreationWizardPageExtension: " + cf[0].getAttribute("id")
+									+ ", loaded class=" + curExtension);
+				}
 				if (curExtension != null)
 					serverCreationWizardPageExtensions.add(curExtension);
 
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load .serverCreationWizardPageExtension: " + cf[0].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"  Could not load .serverCreationWizardPageExtension: " + cf[0].getAttribute("id"), t);
+				}
 			}
 		}
 		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .serverCreationWizardPageExtension extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .serverCreationWizardPageExtension extension point -<-");
+		}
 	}
 
 	/**
@@ -797,7 +833,9 @@
 		if (serverEditorOverviewPageModifier != null)
 			return;
 		
-		Trace.trace(Trace.CONFIG, "->- Loading .serverEditorOverviewPageModifier extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .serverEditorOverviewPageModifier extension point ->-");
+		}
 		serverEditorOverviewPageModifier = new ArrayList<ServerEditorOverviewPageModifier>();
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "serverEditorOverviewPageModifier");
@@ -805,16 +843,25 @@
 		for (IConfigurationElement curConfigElement: cf) {
 			try {
 				ServerEditorOverviewPageModifier curExtension = (ServerEditorOverviewPageModifier)curConfigElement.createExecutableExtension("class");
-				Trace.trace(Trace.CONFIG, "  Loaded .serverEditorOverviewPageModifier: " + cf[0].getAttribute("id") + ", loaded class=" + curExtension);
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG,
+							"  Loaded .serverEditorOverviewPageModifier: " + cf[0].getAttribute("id")
+									+ ", loaded class=" + curExtension);
+				}
 				if (curExtension != null)
 					serverEditorOverviewPageModifier.add(curExtension);
 
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load .serverEditorOverviewPageModifier: " + cf[0].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"  Could not load .serverEditorOverviewPageModifier: " + cf[0].getAttribute("id"), t);
+				}
 			}
 		}
 		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .serverEditorOverviewPageModifier extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .serverEditorOverviewPageModifier extension point -<-");
+		}
 	}
 	
 	/**
@@ -825,7 +872,9 @@
 		if (serverLabelProviders != null)
 			return;
 		
-		Trace.trace(Trace.CONFIG, "->- Loading .serverLabelProvider extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .serverLabelProvider extension point ->-");
+		}
 		serverLabelProviders = new HashMap<String,AbstractServerLabelProvider>();
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "serverLabelProvider");
@@ -836,22 +885,31 @@
 			for (String exServerType : exServerTypes) {
 				try {
 					if (serverLabelProviders.containsKey(exServerType)){
-						// if a key is already bound for the same serverType, it means that more than one adopters is providing
-						// a ServerLabelProvider, since we don't know which one to use. We will default back to the WTP behaviour
-						Trace.trace(Trace.WARNING, "More that one .serverLabelProvider found - ignoring");
+						if (Trace.WARNING) {
+							Trace.trace(Trace.STRING_WARNING, "More that one .serverLabelProvider found - ignoring");
+						}
 						serverLabelProviders.put(exServerType, defaultServerLabelProvider);
 					}
 					else{
 						AbstractServerLabelProvider exClass = (AbstractServerLabelProvider)curConfigElement.createExecutableExtension("class");
-						Trace.trace(Trace.CONFIG, "  Loaded .serverLabelProvider: " + curConfigElement.getAttribute("id") + ", loaded class=" + exClass);
+						if (Trace.CONFIG) {
+							Trace.trace(Trace.STRING_CONFIG,
+									"  Loaded .serverLabelProvider: " + curConfigElement.getAttribute("id")
+											+ ", loaded class=" + exClass);
+						}
 						serverLabelProviders.put(exServerType, exClass); 
 					}
 				} catch (Throwable t) {
-					Trace.trace(Trace.SEVERE, "  Could not load .serverLabelProvider: " + curConfigElement.getAttribute("id"), t);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE,
+								"  Could not load .serverLabelProvider: " + curConfigElement.getAttribute("id"), t);
+					}
 				}
 			}
 		}		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .serverLabelProvider extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .serverLabelProvider extension point -<-");
+		}
 	}	
 	
 	/**
@@ -861,26 +919,38 @@
 		if (selectionProvider != null)
 			return;
 		
-		Trace.trace(Trace.CONFIG, "->- Loading .initialSelectionProvider extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .initialSelectionProvider extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "initialSelectionProvider");
 		
 		if (cf.length == 1) {
 			try {
 				selectionProvider = (InitialSelectionProvider) cf[0].createExecutableExtension("class");
-				Trace.trace(Trace.CONFIG, "  Loaded initialSelectionProvider: " + cf[0].getAttribute("id"));
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG, "  Loaded initialSelectionProvider: " + cf[0].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load initialSelectionProvider: " + cf[0].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"  Could not load initialSelectionProvider: " + cf[0].getAttribute("id"), t);
+				}
 			}
 		} else if (cf.length > 1)
-			Trace.trace(Trace.WARNING, "More that one initial selection provider found - ignoring");
-		else
-			Trace.trace(Trace.CONFIG, "No initial selection provider found");
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "More that one initial selection provider found - ignoring");
+			}
+		else if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "No initial selection provider found");
+		}
 		
 		if (selectionProvider == null)
 			selectionProvider = new InitialSelectionProvider();
 		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .initialSelectionProvider extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .initialSelectionProvider extension point -<-");
+		}
 	}
 
 	protected static WizardFragment getWizardFragment(WizardFragmentData fragment) {
@@ -891,9 +961,16 @@
 			try {
 				long time = System.currentTimeMillis();
 				fragment.fragment = (WizardFragment) fragment.ce.createExecutableExtension("class");
-				Trace.trace(Trace.PERFORMANCE, "ServerUIPlugin.getWizardFragment(): <" + (System.currentTimeMillis() - time) + "> " + fragment.ce.getAttribute("id"));
+				if (Trace.PERFORMANCE) {
+					Trace.trace(Trace.STRING_PERFORMANCE,
+							"ServerUIPlugin.getWizardFragment(): <" + (System.currentTimeMillis() - time) + "> "
+									+ fragment.ce.getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create wizardFragment: " + fragment.ce.getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"Could not create wizardFragment: " + fragment.ce.getAttribute("id"), t);
+				}
 			}
 		}
 		return fragment.fragment;
@@ -992,7 +1069,9 @@
 		if (clients != null) {
 			int size = clients.length;
 			for (int i = 0; i < size; i++) {
-				Trace.trace(Trace.FINEST, "client= " + clients[i]);
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "client= " + clients[i]);
+				}
 				if (clients[i].supports(server, launchable, launchMode))
 					list.add(clients[i]);
 			}
@@ -1012,13 +1091,17 @@
 				ILaunchableAdapter adapter = adapters[j];
 				try {
 					Object launchable2 = adapter.getLaunchable(server, moduleArtifact);
-					Trace.trace(Trace.FINEST, "adapter= " + adapter + ", launchable= " + launchable2);
+					if (Trace.FINEST) {
+						Trace.trace(Trace.STRING_FINEST, "adapter= " + adapter + ", launchable= " + launchable2);
+					}
 					if (launchable2 != null)
 						return new Object[] { adapter, launchable2 };
 				} catch (CoreException ce) {
 					lastStatus = ce.getStatus();
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error in launchable adapter", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error in launchable adapter", e);
+					}
 				}
 			}
 			if (lastStatus != null)
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPreferences.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPreferences.java
index 485bc49..8f28696 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPreferences.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/ServerUIPreferences.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java
index 066ada6..0cf1af2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Startup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,7 +25,9 @@
 	 * @see org.eclipse.wst.server.core.internal.IStartup#startup()
 	 */
 	public void startup() {
-		Trace.trace(Trace.FINEST, "Audio startup");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Audio startup");
+		}
 
 		final IPublishListener publishListener = new PublishAdapter() {
 			public void publishFinished(IServer server, IStatus status) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Timer.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Timer.java
new file mode 100644
index 0000000..f6b1024
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Timer.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * Manages a single timer that will run and notify an ActionListener when the
+ * timer expires. The dispose() method should be called before the timer object
+ * is taken down in order to safely bring down the executor and any associated threads.
+ */
+public class Timer {
+
+	private ExecutorService executor = Executors.newSingleThreadExecutor();
+	private TimerRunnable timerRunnable = new TimerRunnable();
+	protected ActionListener listener = null;
+	private long delay;
+
+	public Timer(long delay, ActionListener curListener) {
+		super();
+		this.delay = delay;
+		listener = curListener;
+	}
+
+	/**
+	 * Runs the timer if it is stopped or updates the stop time directly
+	 * to effectively restart the timer.
+	 * only one command should be executed at a time. 
+	 */
+	public void runTimer(){
+		timerRunnable.setStopTime(System.currentTimeMillis() + delay);
+
+		if(!timerRunnable.isRunning() && !timerRunnable.isScheduled()){
+			timerRunnable.setIsScheduled(true);
+			executor.execute(timerRunnable);
+		}
+	}
+
+	/**
+	 * Cancels the timer and then kills the executor which brings down the thread.
+	 */
+	public void dispose(){
+		if(timerRunnable.isRunning()) {
+			timerRunnable.setIsCancelled(true);
+		}
+		killExecutor();
+	}
+
+	public void killExecutor(){
+		executor.shutdown();
+	}
+
+	public boolean isRunning(){
+		return timerRunnable.isRunning();
+	}
+
+	public boolean isScheduled(){
+		return timerRunnable.isScheduled();
+	}
+
+	/**
+	 * This is the Runnable that is called by the executor each time we want to
+	 * run the timer.
+	 */
+	class TimerRunnable implements Runnable {
+
+		private boolean isScheduled = false;
+		private boolean isRunning = false;
+		private boolean isCancelled = false;
+		private long stopTime = 0;
+		// default is 50 ms
+		private long waitTime = 50;
+
+		public void run() {
+			isRunning = true;
+			isScheduled = false;
+			try {
+				while (stopTime - System.currentTimeMillis() > 0 && isRunning && !isCancelled) {
+					try {
+						synchronized (this) {
+							wait(waitTime);
+						}
+						if (Thread.interrupted())
+							throw new InterruptedException();
+					} catch (InterruptedException e) {
+						// Do nothing
+					}
+				}
+				if (!isCancelled) {
+					if (listener != null) {
+						listener.actionPerformed(new ActionEvent(Timer.this, 0, "", System.currentTimeMillis(), 0));
+					}
+				} else {
+					setIsCancelled(false);
+				}
+			} finally {
+				isRunning = false;
+			}
+		}
+
+		public synchronized boolean isRunning() {
+			return isRunning;
+		}
+
+		public synchronized void setRunning(boolean setting) {
+			isRunning = setting;
+		}
+
+		public synchronized long getStopTime() {
+			return stopTime;
+		}
+
+		public synchronized void setStopTime(long time) {
+			stopTime = time;
+		}
+
+		public synchronized long getWaitTime() {
+			return waitTime;
+		}
+
+		public synchronized void setIsCancelled(boolean cancelled) {
+			isCancelled = cancelled;
+		}
+
+		public boolean isScheduled() {
+			return isScheduled;
+		}
+
+		public void setIsScheduled(boolean isScheduled) {
+			this.isScheduled = isScheduled;
+		}
+	}
+}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Trace.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Trace.java
index c8513f7..2a4f5e8 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Trace.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Trace.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,73 +17,108 @@
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.osgi.service.debug.DebugOptions;
+import org.eclipse.osgi.service.debug.DebugOptionsListener;
+
 /**
  * Helper class to route trace output.
  */
-public class Trace {
-	public static final byte CONFIG = 0;
-	public static final byte INFO = 1;
-	public static final byte WARNING = 2;
-	public static final byte SEVERE = 3;
-	public static final byte FINEST = 4;
-	public static final byte FINER = 5;
-	public static final byte PERFORMANCE = 6;
-	public static final byte EXTENSION_POINT = 7;
+public class Trace implements DebugOptionsListener {
 
-	private static final String[] levelNames = new String[] {
-		"CONFIG ", "INFO   ", "WARNING", "SEVERE ", "FINER  ", "FINEST ", "PERF   ", "EXTENSION"};
+	public static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy HH:mm.ss.SSS"); //$NON-NLS-1$
 
-	private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy HH:mm.ss.SSS");
+	public static Set<String> logged = new HashSet<String>();
 
-	private static Set<String> logged = new HashSet<String>();
+	// tracing enablement flags
+	public static boolean CONFIG = false;
+	public static boolean INFO = false;
+	public static boolean WARNING = false;
+	public static boolean SEVERE = false;
+	public static boolean FINEST = false;
+	public static boolean FINER = false;
+	public static boolean PERFORMANCE = false;
+	public static boolean EXTENSION_POINT = false;
 
+	// tracing levels. One most exist for each debug option
+	public final static String STRING_CONFIG = "/config"; //$NON-NLS-1$
+	public final static String STRING_INFO = "/info"; //$NON-NLS-1$
+	public final static String STRING_WARNING = "/warning"; //$NON-NLS-1$
+	public final static String STRING_SEVERE = "/severe"; //$NON-NLS-1$
+	public final static String STRING_FINEST = "/finest"; //$NON-NLS-1$
+	public final static String STRING_FINER = "/finer"; //$NON-NLS-1$
+	public final static String STRING_EXTENSION_POINT = "/extension_point"; //$NON-NLS-1$
+	public final static String STRING_PERFORMANCE = "/performance"; //$NON-NLS-1$
+	
 	/**
-	 * Trace constructor comment.
+	 * Trace constructor. This should never be explicitly called by clients and is used to register this class with the
+	 * {@link DebugOptions} service.
 	 */
-	private Trace() {
+	public Trace() {
 		super();
 	}
 
-	/**
-	 * Trace the given text.
-	 *
-	 * @param level a trace level
-	 * @param s a message
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osgi.service.debug.DebugOptionsListener#optionsChanged(org.eclipse.osgi.service.debug.DebugOptions)
 	 */
-	public static void trace(byte level, String s) {
-		trace(level, s, null);
+	public void optionsChanged(DebugOptions options) {
+		Trace.CONFIG = options.getBooleanOption(ServerUIPlugin.PLUGIN_ID + Trace.STRING_CONFIG, false);
+		Trace.INFO = options.getBooleanOption(ServerUIPlugin.PLUGIN_ID + Trace.STRING_INFO, false);
+		Trace.WARNING = options.getBooleanOption(ServerUIPlugin.PLUGIN_ID + Trace.STRING_WARNING, false);
+		Trace.SEVERE = options.getBooleanOption(ServerUIPlugin.PLUGIN_ID + Trace.STRING_SEVERE, false);
+		Trace.FINER = options.getBooleanOption(ServerUIPlugin.PLUGIN_ID + Trace.STRING_FINER, false);
+		Trace.FINEST = options.getBooleanOption(ServerUIPlugin.PLUGIN_ID + Trace.STRING_FINEST, false);
+		Trace.EXTENSION_POINT = options
+				.getBooleanOption(ServerUIPlugin.PLUGIN_ID + Trace.STRING_EXTENSION_POINT, false);
+		Trace.PERFORMANCE = options.getBooleanOption(ServerUIPlugin.PLUGIN_ID + Trace.STRING_PERFORMANCE, false);
+	}
+
+	/**
+	 * Trace the given message.
+	 * 
+	 * @param level
+	 *            The tracing level.
+	 * @param s
+	 *            The message to trace
+	 */
+	public static void trace(final String level, final String s) {
+		Trace.trace(level, s, null);
 	}
 
 	/**
 	 * Trace the given message and exception.
-	 *
-	 * @param level a trace level
-	 * @param s a message
-	 * @param t a throwable
+	 * 
+	 * @param level
+	 *            The tracing level.
+	 * @param s
+	 *            The message to trace
+	 * @param t
+	 *            A {@link Throwable} to trace
 	 */
-	public static void trace(byte level, String s, Throwable t) {
-		if (s == null)
+	public static void trace(final String level, final String s, final Throwable t) {
+		if (s == null) {
 			return;
-		
-		if (level == SEVERE) {
+		}
+		if (Trace.STRING_SEVERE.equals(level)) {
 			if (!logged.contains(s)) {
 				ServerUIPlugin.getInstance().getLog().log(new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, s, t));
 				logged.add(s);
 			}
 		}
-		
-		if (!ServerUIPlugin.getInstance().isDebugging())
-			return;
-		
-		StringBuffer sb = new StringBuffer(ServerUIPlugin.PLUGIN_ID);
-		sb.append(" ");
-		sb.append(levelNames[level]);
-		sb.append(" ");
-		sb.append(sdf.format(new Date()));
-		sb.append(" ");
-		sb.append(s);
-		System.out.println(sb.toString());
-		if (t != null)
-			t.printStackTrace();
+		if (ServerUIPlugin.getInstance().isDebugging()) {
+			StringBuffer sb = new StringBuffer(ServerUIPlugin.PLUGIN_ID);
+			sb.append(" "); //$NON-NLS-1$
+			sb.append(level);
+			sb.append(" "); //$NON-NLS-1$
+			sb.append(sdf.format(new Date()));
+			sb.append(" "); //$NON-NLS-1$
+			sb.append(s);
+			System.out.println(sb.toString());
+			if (t != null) {
+				t.printStackTrace();
+			}
+		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/WebLaunchableClient.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/WebLaunchableClient.java
index fb694d0..3bb05a7 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/WebLaunchableClient.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/WebLaunchableClient.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,9 @@
 			IWebBrowser browser = browserSupport.createBrowser(IWorkbenchBrowserSupport.LOCATION_BAR | IWorkbenchBrowserSupport.NAVIGATION_BAR, null, null, null);
 			browser.openURL(http.getURL());
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error opening browser", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error opening browser", e);
+			}
 		}
 		return null;
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerAction.java
index 67642d3..d516a92 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.actions;
 
+import java.util.HashMap;
+
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.wst.server.ui.internal.ImageResource;
@@ -23,6 +25,7 @@
 public class RunOnServerAction extends Action {
 	protected RunOnServerActionDelegate delegate;
 
+	protected HashMap<String,Object> map;
 	/**
 	 * Run on server action.
 	 * 
@@ -42,6 +45,11 @@
 		} else
 			delegate.selectionChanged(this, null);
 	}
+	
+	public RunOnServerAction(Object object, HashMap<String,Object> map){		
+		this(object);
+		delegate.setMap(map);
+	}
 
 	/**
 	 * Implementation of method defined on <code>IAction</code>.
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
index 5beb83c..db388b4 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,10 +10,7 @@
  **********************************************************************/
 package org.eclipse.wst.server.ui.internal.actions;
 
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
@@ -28,20 +25,19 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.window.Window;
 import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.wst.server.core.*;
-import org.eclipse.wst.server.core.internal.IClient;
-import org.eclipse.wst.server.core.internal.ILaunchableAdapter;
-import org.eclipse.wst.server.core.internal.ServerPlugin;
-import org.eclipse.wst.server.ui.internal.Trace;
-import org.eclipse.wst.server.core.model.ModuleArtifactDelegate;
-import org.eclipse.wst.server.ui.internal.*;
-import org.eclipse.wst.server.ui.internal.viewers.ModuleArtifactComposite;
-import org.eclipse.wst.server.ui.internal.wizard.*;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.wst.server.core.*;
+import org.eclipse.wst.server.core.internal.IClient;
+import org.eclipse.wst.server.core.internal.ILaunchableAdapter;
+import org.eclipse.wst.server.core.internal.ServerPlugin;
+import org.eclipse.wst.server.core.model.ModuleArtifactDelegate;
+import org.eclipse.wst.server.ui.internal.*;
+import org.eclipse.wst.server.ui.internal.viewers.ModuleArtifactComposite;
+import org.eclipse.wst.server.ui.internal.wizard.RunOnServerWizard;
 /**
  * Support for starting/stopping server and clients for resources running on a server.
  */
@@ -49,6 +45,9 @@
 	protected static final String[] launchModes = {
 		ILaunchManager.RUN_MODE, ILaunchManager.DEBUG_MODE, ILaunchManager.PROFILE_MODE };
 
+	public static String ROS_CLIENT = "ros_client";
+	public static String ROS_LAUNCHABLE = "ros_launchable";
+	
 	protected Object selection;
 
 	protected IWorkbenchWindow window;
@@ -59,6 +58,8 @@
 	protected String launchMode = ILaunchManager.RUN_MODE;
 
 	protected boolean tasksAndClientShown;
+	
+	protected HashMap<String, Object> wiz_properties; 
 
 	protected ILaunchableAdapter launchableAdapter;
 	protected IClient client;
@@ -69,6 +70,17 @@
 	public RunOnServerActionDelegate() {
 		super();
 	}
+	
+	/**
+	 * RunOnServerActionDelegate constructor comment.
+	 */
+	public RunOnServerActionDelegate(HashMap<String, Object>properties) {
+		this.wiz_properties = properties;
+	}
+	
+	public void setActionProperties(HashMap<String,Object>properties){
+		this.wiz_properties = properties;
+	}
 
 	/**
 	 * Disposes this action delegate.  The implementor should unhook any references
@@ -100,7 +112,9 @@
 				ServerUtil.modifyModules(wc, new IModule[] { module }, new IModule[0], monitor);
 				wc.save(false, monitor);
 			} catch (CoreException ce) {
-				Trace.trace(Trace.SEVERE, "Could not add module to server", ce);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Could not add module to server", ce);
+				}
 				server = null;
 			}
 		}
@@ -112,9 +126,11 @@
 			shell = ServerUIPlugin.getInstance().getWorkbench().getActiveWorkbenchWindow().getShell();
 		
 		if (server == null) {
-			// try the full wizard
-			Trace.trace(Trace.FINEST, "Launching wizard");
-			RunOnServerWizard wizard = new RunOnServerWizard(module, launchMode, moduleArtifact);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Launching wizard");
+			}
+			RunOnServerWizard wizard = new RunOnServerWizard(module, launchMode, moduleArtifact, wiz_properties);
+
 			WizardDialog dialog = new WizardDialog(shell, wizard);
 			if (dialog.open() == Window.CANCEL) {
 				if (monitor != null)
@@ -125,13 +141,17 @@
 			try {
 				Job.getJobManager().join("org.eclipse.wst.server.ui.family", null);
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Error waiting for job", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "Error waiting for job", e);
+				}
 			}
 			server = wizard.getServer();
 			boolean preferred = wizard.isPreferredServer();
 			tasksAndClientShown = true;
-			client = wizard.getSelectedClient();
-			launchableAdapter = wizard.getLaunchableAdapter();
+			if (client == null || launchableAdapter == null){
+				client = wizard.getSelectedClient();
+				launchableAdapter = wizard.getLaunchableAdapter();
+			}
 			
 			// set preferred server if requested
 			if (server != null && preferred) {
@@ -147,7 +167,9 @@
 		try {
 			Job.getJobManager().join("org.eclipse.wst.server.ui.family", new NullProgressMonitor());
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Error waiting for job", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Error waiting for job", e);
+			}
 		}
 		
 		return server;
@@ -160,7 +182,9 @@
 		final IModuleArtifact[] moduleArtifacts = ServerPlugin.getModuleArtifacts(selection);
 		if (moduleArtifacts == null || moduleArtifacts.length == 0 || moduleArtifacts[0] == null) {
 			EclipseUtil.openError(Messages.errorNoArtifact);
-			Trace.trace(Trace.FINEST, "No module artifact found");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "No module artifact found");
+			}
 			return;
 		}
 		
@@ -185,7 +209,7 @@
 			}
 		};
 		
-		// get a valid ModuleArtifact that we can use for launching
+		// If there is more than 1 moduleArtifact, get a valid ModuleArtifact that we can use for launching
 		// TODO The ModuleArtifactComposite should be part of the RunOnServerWizard
 		final IModuleArtifact moduleArtifact;
 		if (moduleArtifacts.length > 1) {
@@ -199,7 +223,9 @@
 		
 		if (moduleArtifact.getModule() == null) { // 149425
 			EclipseUtil.openError(Messages.errorNoModules);
-			Trace.trace(Trace.FINEST, "Module artifact not contained in a module");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Module artifact not contained in a module");
+			}
 			return;
 		}
 		final IModule module = moduleArtifact.getModule();
@@ -238,18 +264,22 @@
 			}
 			if (!found) {
 				EclipseUtil.openError(Messages.errorNoServer);
-				Trace.trace(Trace.FINEST, "No server for start mode");
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "No server for start mode");
+				}
 				return;
 			}
 		}
 		
 		if (!ServerUIPlugin.saveEditors())
 			return;
-		
+
 		tasksAndClientShown = false;
 		IServer server2 = null;
-		client = null;
-		launchableAdapter = null;
+		// initialize its value using the predefined value if one has been given
+		client = (IClient)getOverwriteValue(ROS_CLIENT);
+		launchableAdapter = (ILaunchableAdapter) getOverwriteValue(ROS_LAUNCHABLE);
+		
 		try {
 			IProgressMonitor monitor = new NullProgressMonitor();
 			server2 = getServer(module, moduleArtifact, monitor);
@@ -269,19 +299,24 @@
 		//if (monitor.isCanceled())
 		//	return;
 		
-		Trace.trace(Trace.FINEST, "Server: " + server);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Server: " + server);
+		}
 		
 		if (server == null) {
 			EclipseUtil.openError(Messages.errorNoServer);
-			Trace.trace(Trace.SEVERE, "No server found");
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "No server found");
+			}
 			return;
 		}
 		
 		if (!ServerUIPlugin.promptIfDirty(shell, server))
 			return;
 		
+		// We need to check if the client and launchable were pre-populated
 		if (!tasksAndClientShown) {
-			RunOnServerWizard wizard = new RunOnServerWizard(server, launchMode, moduleArtifact);
+			RunOnServerWizard wizard = new RunOnServerWizard(server, launchMode, moduleArtifact, wiz_properties);
 			if (wizard.shouldAppear()) {
 				WizardDialog dialog = new WizardDialog(shell, wizard);
 				if (dialog.open() == Window.CANCEL)
@@ -324,7 +359,10 @@
 				if (c.newInstance() != null)
 					canLoad = true;
 			} catch (Throwable t) {
-				Trace.trace(Trace.WARNING, "Could not load module artifact delegate class, switching to backup");
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING,
+							"Could not load module artifact delegate class, switching to backup");
+				}
 			}
 			if (canLoad) {
 				try {
@@ -332,7 +370,9 @@
 					ILaunchConfiguration config = getLaunchConfiguration(server, (ModuleArtifactDelegate) moduleArtifact, launchableAdapter, client, monitor);
 					config.launch(launchMode, monitor);
 				} catch (CoreException ce) {
-					Trace.trace(Trace.SEVERE, "Could not launch Run on Server", ce);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Could not launch Run on Server", ce);
+					}
 				}
 				return;
 			}
@@ -340,7 +380,9 @@
 		
 		Thread thread = new Thread("Run on Server") {
 			public void run() {
-				Trace.trace(Trace.FINEST, "Ready to launch");
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "Ready to launch");
+				}
 				
 				// start server if it's not already started
 				// and cue the client to start
@@ -486,7 +528,9 @@
 			IProject project = moduleArtifact.getModule().getProject();
 			config.setMappedResources(new IResource[] { project });
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not associate launch with a project", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not associate launch with a project", e);
+			}
 		}
 	}
 
@@ -515,13 +559,17 @@
 								try {
 									return wc.doSave();
 								} catch (CoreException ce) {
-									Trace.trace(Trace.SEVERE, "Error configuring launch", ce);
+									if (Trace.SEVERE) {
+										Trace.trace(Trace.STRING_SEVERE, "Error configuring launch", ce);
+									}
 								}
 							}
 							return launchConfigs[i];
 						}
 					} catch (CoreException e) {
-						Trace.trace(Trace.SEVERE, "Error configuring launch", e);
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Error configuring launch", e);
+						}
 					}
 				}
 			}
@@ -684,11 +732,15 @@
 	 * portion of the plugin action
 	 */
 	public void run(IAction action) {
-		Trace.trace(Trace.FINEST, "Running on Server...");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Running on Server...");
+		}
 		try {
 			run();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Run on Server Error", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Run on Server Error", e);
+			}
 		}
 	}
 
@@ -726,7 +778,9 @@
 	 * @param sel current selection in the desktop
 	 */
 	public void selectionChanged(IAction action, ISelection sel) {
-		Trace.trace(Trace.FINEST, "> selectionChanged");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "> selectionChanged");
+		}
 		selection = null;
 		long time = System.currentTimeMillis();
 		if (sel == null || sel.isEmpty() || !(sel instanceof IStructuredSelection)) {
@@ -747,9 +801,13 @@
 		}
 		
 		if (selection != globalSelection) {
-			Trace.trace(Trace.FINEST, "Selection: " + selection);
-			if (selection != null)	
-				Trace.trace(Trace.FINEST, "Selection type: " + selection.getClass().getName());
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Selection: " + selection);
+			}
+			if (selection != null)
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "Selection type: " + selection.getClass().getName());
+				}
 			globalSelection = selection;
 			globalLaunchMode = new HashMap<String, Boolean>();
 			if (!ServerPlugin.hasModuleArtifact(globalSelection)) {
@@ -757,7 +815,9 @@
 				return;
 			}
 			
-			Trace.trace(Trace.FINEST, "checking for module artifact");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "checking for module artifact");
+			}
 			// TODO - multiple module artifacts
 			IModuleArtifact[] moduleArtifacts = ServerPlugin.getModuleArtifacts(globalSelection);
 			IModuleArtifact moduleArtifact = null;
@@ -767,7 +827,9 @@
 			IModule module = null;
 			if (moduleArtifact != null)
 				module = moduleArtifact.getModule();
-			Trace.trace(Trace.FINEST, "moduleArtifact= " + moduleArtifact + ", module= " + module);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "moduleArtifact= " + moduleArtifact + ", module= " + module);
+			}
 			if (module != null)
 				findGlobalLaunchModes(module);
 			else {
@@ -778,7 +840,9 @@
 		}
 		
 		action.setEnabled(isEnabled());
-		Trace.trace(Trace.FINEST, "< selectionChanged " + (System.currentTimeMillis() - time));
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "< selectionChanged " + (System.currentTimeMillis() - time));
+		}
 	}
 
 	/**
@@ -814,4 +878,23 @@
 		}
 		return true;
 	}
+	
+	protected void setMap(HashMap<String,Object> map){
+		this.wiz_properties = map;
+	}
+	
+	/**
+	 * Returns the value from the hashmap provided in the constructor of this class
+	 *  
+	 * @param key  
+	 * @param obj the type of object to be returned
+	 * @return
+	 */
+	protected Object getOverwriteValue(String key){
+		if (wiz_properties != null){ 
+			Object o = wiz_properties.get(key);
+			return o;	
+		}
+		return null;
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerLaunchConfigurationDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerLaunchConfigurationDelegate.java
index 9423704..76f8228 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerLaunchConfigurationDelegate.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerLaunchConfigurationDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2009 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,7 +73,9 @@
 			moduleArtifact.deserialize(moduleArt);
 			module = moduleArtifact.getModule();
 		} catch (Throwable t) {
-			Trace.trace(Trace.WARNING, "Could not load module artifact delegate class");
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not load module artifact delegate class");
+			}
 		}
 		
 		if (moduleArtifact == null)
@@ -128,7 +130,9 @@
 			};
 		}
 		
-		Trace.trace(Trace.FINEST, "Ready to launch");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Ready to launch");
+		}
 		launch2.addProcess(new RunOnServerProcess(launch2));
 		
 		// start server if it's not already started
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioCore.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioCore.java
index dd4e082..42d137b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioCore.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioCore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -104,7 +104,9 @@
 			clip.open(audioInputStream);
 			return clip;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not get clip: " + url, e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not get clip: " + url, e);
+			}
 		}
 		return null;
 	}
@@ -140,7 +142,9 @@
 			}
 			return sound;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not verify audio status", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not verify audio status", e);
+			}
 		}
 		return true;
 	}
@@ -231,7 +235,9 @@
 			if (path != null)
 				return path;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not get sound URL: " + id, e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not get sound URL: " + id, e);
+			}
 		}
 		return null;
 	}
@@ -319,7 +325,9 @@
 	
 					disabledCategories.add(id);
 				} catch (Exception ex) {
-					Trace.trace(Trace.SEVERE, "Error reading URL map ", ex);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error reading URL map ", ex);
+					}
 				}
 			}
 	
@@ -334,7 +342,9 @@
 	
 					disabledSounds.add(id);
 				} catch (Exception ex) {
-					Trace.trace(Trace.SEVERE, "Error reading URL map ", ex);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error reading URL map ", ex);
+					}
 				}
 			}
 		} catch (Exception e) {
@@ -384,7 +394,9 @@
 					sounds.put(id, sound);
 				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not load audio: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Could not load audio: " + cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 	}
@@ -413,7 +425,9 @@
 	
 					userSoundMap.put(id, path);
 				} catch (Exception ex) {
-					Trace.trace(Trace.SEVERE, "Error reading URL map ", ex);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error reading URL map ", ex);
+					}
 				}
 			}
 		} catch (Exception e) {
@@ -457,7 +471,9 @@
 	
 			playSound(url, getVolume());
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error playing audio: " + id, e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error playing audio: " + id, e);
+			}
 		}
 	}
 
@@ -468,7 +484,9 @@
 	 */
 	protected static void playSound(URL url, final int volume) {
 		try {
-			Trace.trace(Trace.FINEST, "playSound");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "playSound");
+			}
 			if (url == null || volume <= 0)
 				return;
 	
@@ -476,7 +494,9 @@
 			if (clip == null)
 				return;
 				
-			Trace.trace(Trace.FINEST, "playing");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "playing");
+			}
 	
 			Thread t = new Thread("Sound Thread") {
 				public void run() {
@@ -486,7 +506,9 @@
 					float dB = (float) (Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0);
 					gainControl.setValue(dB);
 	
-					Trace.trace(Trace.FINEST, "start");
+					if (Trace.FINEST) {
+						Trace.trace(Trace.STRING_FINEST, "start");
+					}
 					clip.start();
 					try {
 						sleep(99);
@@ -503,13 +525,17 @@
 					}
 					clip.stop();
 					clip.close();
-					Trace.trace(Trace.FINEST, "stop");
+					if (Trace.FINEST) {
+						Trace.trace(Trace.STRING_FINEST, "stop");
+					}
 				}
 			};
 			t.setDaemon(true);
 			t.start();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error playing audio: " + url, e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error playing audio: " + url, e);
+			}
 		}
 	}
 
@@ -542,7 +568,9 @@
 			fout = new FileOutputStream(filename);
 			memento.save(fout);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save disabled information", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not save disabled information", e);
+			}
 		} finally {
 			if (fout != null) {
 				try {
@@ -576,7 +604,9 @@
 			fout = new FileOutputStream(filename);
 			memento.save(fout);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save URL map information", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not save URL map information", e);
+			}
 		} finally {
 			if (fout != null) {
 				try {
@@ -666,7 +696,9 @@
 			userSoundMap.put(id, path);
 			saveSoundMap();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not get sound URL: " + id, e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not get sound URL: " + id, e);
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioPreferencePage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioPreferencePage.java
index fa4ea35..3f4442a 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioPreferencePage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/audio/AudioPreferencePage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -245,7 +245,9 @@
 						resetButton.setEnabled(false);
 					}
 				} catch (Exception ex) {
-					Trace.trace(Trace.SEVERE, "Error in table selection", ex);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error in table selection", ex);
+					}
 				}
 			}
 		});
@@ -259,7 +261,9 @@
 						Sound sound = (Sound) table.getItem(sel).getData();
 						AudioCore.playSound(getSoundURL(sound.getId()), volume.getSelection());
 					} catch (Exception ex) {
-						Trace.trace(Trace.SEVERE, "Error in table selection", ex);
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Error in table selection", ex);
+						}
 					}
 				}
 			});
@@ -278,7 +282,9 @@
 						playButton.setEnabled(true);
 					}
 				} catch (Exception ex) {
-					Trace.trace(Trace.SEVERE, "Error browsing", ex);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error browsing", ex);
+					}
 				}
 			}
 		});
@@ -292,7 +298,9 @@
 					viewer.refresh(sound);
 					//playButton.setEnabled(true);
 				} catch (Exception ex) {
-					Trace.trace(Trace.SEVERE, "Error reseting sound", ex);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error reseting sound", ex);
+					}
 				}
 			}
 		});
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/CompositeServerImageDescriptor.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/CompositeServerImageDescriptor.java
index ca25589..e7bcfc0 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/CompositeServerImageDescriptor.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/CompositeServerImageDescriptor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 IBM Corporation and others.
+ * Copyright (c) 2010, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,7 +39,9 @@
 	public CompositeServerImageDescriptor(final IServer server, Image overlay) {
 		setBaseImage(ImageResource.getImage(server.getServerType().getId()));
 		if (overlay == null){
-			Trace.trace(Trace.FINEST, "Invalid overlay icon");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Invalid overlay icon");
+			}
 		}
 		this.overlay = overlay;
 	}
@@ -54,7 +56,9 @@
 	public CompositeServerImageDescriptor(final Image baseImage, Image overlay) {
 		setBaseImage(baseImage);
 		if (overlay == null){
-			Trace.trace(Trace.FINEST, "Invalid overlay icon");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Invalid overlay icon");
+			}
 		}
 		this.overlay = overlay;
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerActionProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerActionProvider.java
index 6709f6a..f19ee36 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerActionProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerActionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,9 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.cnf;
 
+import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.jface.action.*;
@@ -89,7 +91,9 @@
 					IServer server = (IServer) data;
 					ServerUIPlugin.editServer(server);
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Could not open server", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Could not open server", e);
+					}
 				}
 			}
 		});
@@ -145,10 +149,19 @@
 		actionBars.setGlobalActionHandler(ActionFactory.RENAME.getId(), renameAction);
 		
 		IContributionManager cm = actionBars.getToolBarManager();
-		cm.removeAll();
+	    IContributionItem[] cis = cm.getItems();
+	    List<IAction> existingActions = new ArrayList<IAction>();
+	    for (IContributionItem ci : cis) {
+	        if (ci instanceof ActionContributionItem) {
+	            ActionContributionItem aci = (ActionContributionItem) ci;
+	            existingActions.add(aci.getAction());
+	        }
+	    }
 
-		for (int i = 0; i < actions.length - 1; i++)
-			cm.add(actions[i]);
+	    for (int i = 0; i < actions.length - 1; i++)
+	        if (!existingActions.contains(actions[i]))
+	            cm.add(actions[i]);
+
 	}
 	
 	public void fillContextMenu(IMenuManager menu) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerDecoratorsHandler.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerDecoratorsHandler.java
new file mode 100644
index 0000000..d5b2d2b
--- /dev/null
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServerDecoratorsHandler.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (c) 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.server.ui.internal.cnf;
+
+import java.util.ArrayList;
+
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IDecoratorManager;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.CommonViewer;
+
+/**
+ * 
+ * The purpose of this class is proportionate a way to register those UI Decorators that 
+ * needs to be updated after a Server has been modified. Basically this handler is a list
+ * of IDs of UI Decorators. 
+ * 
+ * @author israelgd@mx1.ibm.com
+ */
+public class ServerDecoratorsHandler {
+	
+	final static String NAVIGATOR_DECORATOR_ID = "org.eclipse.wst.server.ui.navigatorDecorator";
+	
+	protected static ArrayList <String> UIDecoratorsIDs = new ArrayList<String>();
+	
+	static {
+		UIDecoratorsIDs.add(NAVIGATOR_DECORATOR_ID);
+	}
+	protected static IDecoratorManager decoratorManager = null;
+	
+	protected static IDecoratorManager getDecoratorManager(){
+		if (decoratorManager == null){
+			decoratorManager = PlatformUI.getWorkbench().getDecoratorManager();
+		}
+		return decoratorManager;
+	}
+	/**
+	 * Used to refresh the Server Decorators previously added and set selection after that. 
+	 * Triggers the decoration event of each Decorator.
+	 * */
+	public static void refresh(final CommonViewer tableViewer) {
+		Display.getDefault().asyncExec(new Runnable() {
+			public void run() {		
+				IDecoratorManager dm = PlatformUI.getWorkbench().getDecoratorManager();
+				ArrayList<String> UIDecoratorsIDsClone = (ArrayList<String>)UIDecoratorsIDs.clone();
+				for (String decoratorId: UIDecoratorsIDsClone) {
+					dm.update(decoratorId);
+				}
+				if (tableViewer != null){
+					tableViewer.setSelection(tableViewer.getSelection());
+				}
+			}
+		});
+	}
+	
+	/**
+	 * Used to refresh the Server Decorators previously added.
+	 * @param server
+	 * */
+	public static void refresh() {
+		refresh(null);
+	}
+	
+	/**
+	 * Remove a UI Decorator from the Decorator Handler.
+	 * @param decoratorID
+	 */
+	public static void removeUIDecoratorsID(String decoratorID) {
+		synchronized (UIDecoratorsIDs) {
+			UIDecoratorsIDs.remove(decoratorID);
+		}
+	}
+
+	/**
+	 * Adds a new UI Decorator from the Decorator Handler.
+	 * @param decoratorID
+	 */
+	public static void addUIDecoratorsIDs(String decoratorID) {
+		synchronized (UIDecoratorsIDs) {
+			if(!UIDecoratorsIDs.contains(decoratorID)){
+				UIDecoratorsIDs.add(decoratorID);
+			}
+		}
+	}
+}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
index 977311b..f563b65 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008,2010 IBM Corporation and others.
+ * Copyright (c) 2008,2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,8 +23,6 @@
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IDecoratorManager;
-import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.contexts.IContextService;
 import org.eclipse.ui.navigator.CommonNavigator;
 import org.eclipse.ui.navigator.CommonViewer;
@@ -146,18 +144,16 @@
 	 * @param server
 	 */
 	protected void refreshServer(final IServer server){
-		Trace.trace(Trace.FINEST, "Refreshing UI for server="+server);
-		Display.getDefault().asyncExec(new Runnable() {
-			public void run() {		
-				IDecoratorManager dm = PlatformUI.getWorkbench().getDecoratorManager();
-				dm.update("org.eclipse.wst.server.ui.navigatorDecorator");
-				tableViewer.setSelection(tableViewer.getSelection());
-			}
-		});
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Refreshing UI for server=" + server);
+		}
+		ServerDecoratorsHandler.refresh(tableViewer);
 	}
 	
 	protected void refreshServerContent(final IServer server){
-		Trace.trace(Trace.FINEST, "Refreshing Content for server="+server);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Refreshing Content for server=" + server);
+		}
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
 				if(!tableViewer.getTree().isDisposed())
@@ -167,14 +163,10 @@
 	}
 	
 	protected void refreshServerState(final IServer server){
-		Trace.trace(Trace.FINEST, "Refreshing UI for server="+server);
-		Display.getDefault().asyncExec(new Runnable() {
-			public void run() {		
-				IDecoratorManager dm = PlatformUI.getWorkbench().getDecoratorManager();
-				dm.update("org.eclipse.wst.server.ui.navigatorDecorator");
-				tableViewer.setSelection(tableViewer.getSelection());
-			}
-		});
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Refreshing UI for server=" + server);
+		}
+		ServerDecoratorsHandler.refresh(tableViewer);
 	}
 	
 	protected void addListener(){
@@ -244,10 +236,14 @@
 						}
 						refreshServerState(server);
 						refreshServerContent(server);
-					} 
+					}
+					else if ((eventKind & ServerEvent.PUBLISH_STATE_CHANGE) != 0 || (eventKind & ServerEvent.STATUS_CHANGE) != 0) {
+						refreshServerState(server);
+					}
 				} else if ((eventKind & ServerEvent.MODULE_CHANGE) != 0) {
 					// module change event
-					if ((eventKind & ServerEvent.STATE_CHANGE) != 0 || (eventKind & ServerEvent.PUBLISH_STATE_CHANGE) != 0) {
+					if ((eventKind & ServerEvent.STATE_CHANGE) != 0 || (eventKind & ServerEvent.PUBLISH_STATE_CHANGE) != 0 ||
+							(eventKind & ServerEvent.STATUS_CHANGE) != 0) {
 						refreshServerContent(server);
 					}
 				}
@@ -332,7 +328,9 @@
 							}
 						}
 					} catch (Exception e) {
-						Trace.trace(Trace.FINEST, "Error in Servers view animation", e);
+						if (Trace.FINEST) {
+							Trace.trace(Trace.STRING_FINEST, "Error in Servers view animation", e);
+						}
 					}
 					display.timerExec(SLEEP, animator[0]);
 				}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersViewDropAdapterAssistant.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersViewDropAdapterAssistant.java
index 80c905a..1a8d55e 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersViewDropAdapterAssistant.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersViewDropAdapterAssistant.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@
 import org.eclipse.wst.server.ui.internal.EclipseUtil;
 import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
 import org.eclipse.wst.server.ui.internal.actions.RunOnServerActionDelegate;
+import org.eclipse.wst.server.ui.internal.view.servers.PublishAction;
 
 public class ServersViewDropAdapterAssistant extends CommonDropAdapterAssistant {
 
@@ -109,20 +110,20 @@
 	}
 
 	protected IStatus internalHandleDrop(Object target, List elements) {
-		boolean b = false;
+		boolean success = false;
 		if (target instanceof IServer) {
-			b = true;
+			success = true;
 			if (dndElementList != null) {
 				Iterator iterator = elements.iterator();
 				while (iterator.hasNext()) {
 					Object data2 = iterator.next();
 					if (!doRunOnServerAction((IServer) target, data2))
-						b = false;
+						success = false;
 				}
 			}
 		}
 		clear();
-		return b ? Status.OK_STATUS : Status.CANCEL_STATUS;
+		return success ? Status.OK_STATUS : Status.CANCEL_STATUS;
 	}
 
 	private void clear() {
@@ -142,13 +143,16 @@
 					if (parents == null || parents.length == 0)
 						return false;
 
-					if (ServerUtil.containsModule(server, parents[0], null))
+					if (ServerUtil.containsModule(server, parents[0], null)){
+						PublishAction.publish(server, getShell());
 						return false;
+					}
 
 					IModule[] add = new IModule[] { parents[0] };
 					if (wc.canModifyModules(add, null, null).getSeverity() != IStatus.ERROR) {
 						wc.modifyModules(modules, null, null);
 						wc.save(false, null);
+						PublishAction.publish(server, getShell());
 						return true;
 					}
 				} catch (final CoreException ce) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishDefaultCommand.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishDefaultCommand.java
index 298928e..f953ac3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishDefaultCommand.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishDefaultCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishTimeCommand.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishTimeCommand.java
index ab949f4..b11f672 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishTimeCommand.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishTimeCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java
index f238256..1b7092a 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/GlobalCommandManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -146,7 +146,9 @@
 	 * @param id an id
 	 */
 	public void getCommandManager(String id) {
-		Trace.trace(Trace.FINEST, "Getting command manager for " + id);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Getting command manager for " + id);
+		}
 		try {
 			CommandManagerInfo info = commandManagers.get(id);
 			if (info != null) {
@@ -154,9 +156,13 @@
 				return;
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not find existing command manager", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not find existing command manager", e);
+			}
 		}
-		Trace.trace(Trace.FINEST, "Creating new command manager for " + id);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Creating new command manager for " + id);
+		}
 		try {
 			CommandManagerInfo info = new CommandManagerInfo();
 			info.count = 1;
@@ -171,7 +177,9 @@
 			commandManagers.put(id, info);
 			updateTimestamps(id);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not obtain command manager", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not obtain command manager", e);
+			}
 		}
 		return;
 	}
@@ -182,7 +190,9 @@
 	 * @param id an id
 	 */
 	public void releaseCommandManager(String id) {
-		Trace.trace(Trace.FINEST, "Releasing command manager for " + id);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Releasing command manager for " + id);
+		}
 		try {
 			CommandManagerInfo info = commandManagers.get(id);
 			if (info != null) {
@@ -194,7 +204,9 @@
 				}
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not release command manager", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not release command manager", e);
+			}
 		}
 	}
 
@@ -220,7 +232,9 @@
 			setDirtyState(id, false);
 			updateTimestamps(id);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not release command manager", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not release command manager", e);
+			}
 		}
 	}
 
@@ -231,7 +245,9 @@
 		try {
 			return commandManagers.get(id);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not find existing command manager info");
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not find existing command manager info");
+			}
 		}
 		return null;
 	}
@@ -287,7 +303,9 @@
 			
 			return d.getActiveShell();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not get shell", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not get shell", e);
+			}
 			return null;
 		}
 	}
@@ -328,7 +346,9 @@
 			if (status != null && !status.isOK())
 				MessageDialog.openError(shell, Messages.editorServerEditor, status.getMessage());
 		} catch (ExecutionException ce) {
-			Trace.trace(Trace.SEVERE, "Error executing command", ce);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error executing command", ce);
+			}
 			return;
 		}
 		
@@ -586,7 +606,9 @@
 			if (status != null && !status.isOK())
 				MessageDialog.openError(shell, Messages.editorServerEditor, status.getMessage());
 		} catch (ExecutionException ce) {
-			Trace.trace(Trace.SEVERE, "Error executing command", ce);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error executing command", ce);
+			}
 			return;
 		}
 		redoList.remove(src);
@@ -628,7 +650,9 @@
 			list.toArray(files);
 			return files;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "getReadOnlyFiles", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "getReadOnlyFiles", e);
+			}
 		}
 		return null;
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
index 2a59fa3..18ca55d 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/OverviewEditorPart.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -587,7 +587,9 @@
 								// TODO: use correct launch group
 								DebugUITools.openLaunchConfigurationPropertiesDialog(link.getShell(), launchConfig, "org.eclipse.debug.ui.launchGroup.run");
 							} catch (CoreException ce) {
-								Trace.trace(Trace.SEVERE, "Could not create launch configuration", ce);
+								if (Trace.SEVERE) {
+									Trace.trace(Trace.STRING_SEVERE, "Could not create launch configuration", ce);
+								}
 							}
 						}
 					});
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditor.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditor.java
index 7038047..5f38ef9 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditor.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,7 +95,7 @@
 			// do nothing
 		}
 		public void serverRemoved(IServer oldServer) {
-			if (oldServer.equals(server) && !isDirty())
+			if (oldServer.equals(server.getOriginal()) && !isDirty())
 				closeEditor();
 		}
 	}
@@ -227,7 +227,9 @@
 			while (iterator.hasNext()) {
 				IServerEditorPartFactory factory = (IServerEditorPartFactory) iterator.next();
 				if (factory.supportsType(serverTypeId) && factory.shouldCreatePage(server)) {
-					Trace.trace(Trace.FINEST, "Adding page: " + factory.getId() + " " + editorPartInput);
+					if (Trace.FINEST) {
+						Trace.trace(Trace.STRING_FINEST, "Adding page: " + factory.getId() + " " + editorPartInput);
+					}
 					try {
 						IEditorPart page = factory.createPage();
 						if (page != null) {
@@ -240,7 +242,9 @@
 							pageCount ++;
 						}
 					} catch (Exception e) {
-						Trace.trace(Trace.SEVERE, "Could not display editor page " + factory.getId(), e);
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Could not display editor page " + factory.getId(), e);
+						}
 					}
 				}
 			}
@@ -256,7 +260,9 @@
 			}
 			updateActions();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error creating server editor pages", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error creating server editor pages", e);
+			}
 		}
 	}
 
@@ -282,7 +288,9 @@
 					try {
 						((ServerWorkingCopy)server).renameFiles(null);
 					} catch (Exception e) {
-						Trace.trace(Trace.SEVERE, "Error renaming server", e);
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Error renaming server", e);
+						}
 					}
 			}
 		}
@@ -378,7 +386,9 @@
 				setPartName(labelProvider.getText(server));
 			labelProvider.dispose();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error saving server editor", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error saving server editor", e);
+			}
 			
 			monitor.setCanceled(true);
 			
@@ -876,7 +886,9 @@
 			try {
 				part.init(part.getEditorSite(), editorPartInput);
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error refresh()ing editor part", e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Error refresh()ing editor part", e);
+				}
 			}
 		}	
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorActionBarContributor.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorActionBarContributor.java
index ae4c948..0729a26 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorActionBarContributor.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorActionBarContributor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -69,7 +69,9 @@
 
 		if (targetEditor instanceof ServerEditor) {
 			editor = (ServerEditor) targetEditor;
-			Trace.trace(Trace.FINEST, "Editor action bar contributor for: " + editor);
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Editor action bar contributor for: " + editor);
+			}
 			editor.updateUndoAction();
 			editor.updateRedoAction();
 			
@@ -93,9 +95,13 @@
 			boolean modified = false;
 			if (actions != null) {
 				int size = actions.length;
-				Trace.trace(Trace.FINEST, "Attempting to add editor actions: " + size);
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "Attempting to add editor actions: " + size);
+				}
 				for (int i = 0; i < size; i++) {
-					Trace.trace(Trace.FINEST, "action: " + actions[i]);
+					if (Trace.FINEST) {
+						Trace.trace(Trace.STRING_FINEST, "action: " + actions[i]);
+					}
 					tbm.appendToGroup(SERVER_EDITOR_SEPARATOR, actions[i]);
 					modified = true;
 				}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorActionFactory.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorActionFactory.java
index 1b17896..80d976a 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorActionFactory.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorActionFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -132,7 +132,9 @@
 			try {
 				delegate = (ServerEditorActionFactoryDelegate) element.createExecutableExtension("class");
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "Could not create server action factory delegate", t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Could not create server action factory delegate", t);
+				}
 			}
 		}
 		return delegate;
@@ -145,7 +147,9 @@
 		try {
 			return getDelegate().shouldDisplay(server);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate", e);
+			}
 			return false;
 		}
 	}
@@ -157,7 +161,9 @@
 		try {
 			return getDelegate().createAction(site, input);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate", e);
+			}
 			return null;
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorCore.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorCore.java
index 9cf30ce..8972f73 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorCore.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorCore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,14 +54,18 @@
 	 * Load the editor page factory extension point.
 	 */
 	private static void loadEditorPageFactories() {
-		Trace.trace(Trace.CONFIG, "->- Loading .editorPages extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .editorPages extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, ServerUIPlugin.EXTENSION_EDITOR_PAGES);
 		List<ServerEditorPartFactory> list = new ArrayList<ServerEditorPartFactory>(cf.length);
 		loadEditorPageFactories(cf, list);
 		editorPageFactories = list;
 		ServerUIPlugin.addRegistryListener();
-		Trace.trace(Trace.CONFIG, "-<- Done loading .editorPages extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .editorPages extension point -<-");
+		}
 	}
 
 	/**
@@ -72,9 +76,13 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new ServerEditorPartFactory(cf[i]));
-				Trace.trace(Trace.CONFIG, "  Loaded editorPage: " + cf[i].getAttribute("id"));
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG, "  Loaded editorPage: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load editorPage: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "  Could not load editorPage: " + cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		
@@ -112,14 +120,18 @@
 	 * Load the editor page section factory extension point.
 	 */
 	private static void loadEditorPageSectionFactories() {
-		Trace.trace(Trace.CONFIG, "->- Loading .editorPageSections extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .editorPageSections extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, ServerUIPlugin.EXTENSION_EDITOR_PAGE_SECTIONS);
 		List<ServerEditorPageSectionFactory> list = new ArrayList<ServerEditorPageSectionFactory>(cf.length);
 		loadEditorPageSectionFactories(cf, list);
 		editorPageSectionFactories = list;
 		ServerUIPlugin.addRegistryListener();
-		Trace.trace(Trace.CONFIG, "-<- Done loading .editorPageSections extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .editorPageSections extension point -<-");
+		}
 	}
 
 	/**
@@ -130,9 +142,14 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new ServerEditorPageSectionFactory(cf[i]));
-				Trace.trace(Trace.CONFIG, "  Loaded editorPageSection: " + cf[i].getAttribute("id"));
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG, "  Loaded editorPageSection: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load editorPageSection: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "  Could not load editorPageSection: " + cf[i].getAttribute("id"),
+							t);
+				}
 			}
 		}
 		
@@ -181,7 +198,9 @@
 	 * Load the editor action factories extension point.
 	 */
 	private static void loadEditorActionFactories() {
-		Trace.trace(Trace.CONFIG, "->- Loading .editorActions extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .editorActions extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(ServerUIPlugin.PLUGIN_ID, "editorActions");
 
@@ -190,9 +209,13 @@
 		for (int i = 0; i < size; i++) {
 			try {
 				list.add(new ServerEditorActionFactory(cf[i]));
-				Trace.trace(Trace.CONFIG, "  Loaded editorAction: " + cf[i].getAttribute("id"));
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG, "  Loaded editorAction: " + cf[i].getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load editorAction: " + cf[i].getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "  Could not load editorAction: " + cf[i].getAttribute("id"), t);
+				}
 			}
 		}
 		
@@ -200,7 +223,9 @@
 		sortOrderedList(list);
 		editorActionFactories = list;
 		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .editorActions extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .editorActions extension point -<-");
+		}
 	}
 	
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPageSectionFactory.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPageSectionFactory.java
index b5cc2f4..65ccbb2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPageSectionFactory.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPageSectionFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -130,7 +130,9 @@
 		try {
 			return isEnabled(server);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate", e);
+			}
 			return false;
 		}
 	}
@@ -142,7 +144,9 @@
 		try {
 			return (ServerEditorSection) element.createExecutableExtension("class");
 		} catch (Throwable t) {
-			Trace.trace(Trace.SEVERE, "Could not create server editor section", t);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not create server editor section", t);
+			}
 			return null;
 		}
 	}
@@ -195,6 +199,7 @@
 		if (getContextualLaunchEnablementExpression() == null)
 			return true;
 		IEvaluationContext context = new EvaluationContext(null, obj);
+		context.setAllowPluginActivation(true);
 		context.addVariable("server", obj);
 		return evalEnablementExpression(context, getContextualLaunchEnablementExpression());
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java
index 680cc22..f14536b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/ServerEditorPartFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -172,7 +172,9 @@
 		try {
 			return isEnabled(server);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate", e);
+			}
 			return false;
 		}
 	}
@@ -184,7 +186,9 @@
 		try {
 			return (IEditorPart) element.createExecutableExtension("class");
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error calling delegate", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error calling delegate", e);
+			}
 			return null;
 		}
 	}
@@ -237,6 +241,7 @@
 		if (getContextualLaunchEnablementExpression() == null)
 			return true;
 		IEvaluationContext context = new EvaluationContext(null, obj);
+		context.setAllowPluginActivation(true);
 		context.addVariable("server", obj);
 		return evalEnablementExpression(context, getContextualLaunchEnablementExpression());
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/TextAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/TextAction.java
index 458b5bf..fad8660 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/TextAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/editor/TextAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -240,7 +240,9 @@
 				setEnabled(newText != null && newText.length() > 0);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error updating text action", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error updating text action", e);
+			}
 		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/provisional/UIDecorator.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/provisional/UIDecorator.java
index f4dc21d..35e7e05 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/provisional/UIDecorator.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/provisional/UIDecorator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005,2008 IBM Corporation and others.
+ * Copyright (c) 2005, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/AbstractServerAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/AbstractServerAction.java
index 1899f54..06fd708 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/AbstractServerAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/AbstractServerAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,6 +53,10 @@
 
 	public void run() {
 		Iterator iterator = getStructuredSelection().iterator();
+		
+		if (!iterator.hasNext())
+			return;		
+		
 		Object obj = iterator.next();
 		if (obj instanceof IServer) {
 			IServer server = (IServer) obj;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerPortAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerPortAction.java
index d63b630..63eb4b8 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerPortAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/MonitorServerPortAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2005 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -66,7 +66,9 @@
 			try {
 				smm.startMonitor(monitoredPort);
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Could not monitor", e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Could not monitor", e);
+				}
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/OpenAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/OpenAction.java
index a1155f2..b0314b8 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/OpenAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/OpenAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,9 @@
 		try {
 			ServerUIPlugin.editServer(server);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error editing element", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error editing element", e);
+			}
 		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PasteAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PasteAction.java
index 5f31880..4afc64c 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PasteAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PasteAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007,2008 IBM Corporation and others.
+ * Copyright (c) 2007,2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -79,7 +79,9 @@
 				ServerUtil.setServerDefaultName(wc);
 				wc.save(false, null);
 			} catch (CoreException ce) {
-				Trace.trace(Trace.SEVERE, "Failure to copy server", ce);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Failure to copy server", ce);
+				}
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java
index 5ed16ee..1f87566 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/PublishAction.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RemoveModuleAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RemoveModuleAction.java
index 1cb5e5c..9ec06b6 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RemoveModuleAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/RemoveModuleAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2010 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -75,9 +75,14 @@
 								return;
 							}
 							server = wc.save(true, monitor);
-							Trace.trace(Trace.INFO, "Done save server configuration in RemoveModuleAction.");
+							if (Trace.INFO) {
+								Trace.trace(Trace.STRING_INFO, "Done save server configuration in RemoveModuleAction.");
+							}
 						} catch (CoreException e) {
-							Trace.trace(Trace.WARNING, "Failed to save server configuration. Could not remove module", e);
+							if (Trace.WARNING) {
+								Trace.trace(Trace.STRING_WARNING,
+										"Failed to save server configuration. Could not remove module", e);
+							}
 							saveServerException = e;
 						}
 					}
@@ -101,7 +106,9 @@
 					server.publish(IServer.PUBLISH_INCREMENTAL, null, info, null);
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not remove module", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "Could not remove module", e);
+				}
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
index b38eb94..0571f87 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTableViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -168,7 +168,9 @@
 								updateAnimation(server);
 						}
 					} catch (Exception e) {
-						Trace.trace(Trace.FINEST, "Error in Servers view animation", e);
+						if (Trace.FINEST) {
+							Trace.trace(Trace.STRING_FINEST, "Error in Servers view animation", e);
+						}
 					}
 					display.timerExec(SLEEP, animator[0]);
 				}
@@ -618,7 +620,9 @@
 			item.setText(1, labelProvider.getColumnText(server, 1));
 			item.setImage(1, labelProvider.getColumnImage(server, 1));
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Error in optimized animation", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Error in optimized animation", e);
+			}
 		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTransfer.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTransfer.java
index 1f43dc0..64ccc06 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTransfer.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServerTransfer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java
index fa61166..7dd16ac 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersView.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -171,7 +171,9 @@
 					IServer server = (IServer) data;
 					ServerUIPlugin.editServer(server);
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Could not open server", e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Could not open server", e);
+					}
 				}
 			}
 		});
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java
index 27b3491..c8a04a4 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ServersViewDropAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -154,7 +154,9 @@
 		//if (!ServerUIPlugin.hasModuleArtifact(target))
 		//	return false;
 		
-		Trace.trace(Trace.FINER, "Drop target: " + target + " " + operation + " " + transferType);
+		if (Trace.FINER) {
+			Trace.trace(Trace.STRING_FINER, "Drop target: " + target + " " + operation + " " + transferType);
+		}
 		
 		if (FileTransfer.getInstance().isSupportedType(transferType))
 			return true;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ShowInConsoleAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ShowInConsoleAction.java
index 9e05af5..62e3eae 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ShowInConsoleAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ShowInConsoleAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -50,7 +50,9 @@
 			ILaunch launch = server.getLaunch();
 			selectProcess(launch.getProcesses()[0]);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error opening console", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error opening console", e);
+			}
 		}
 	}
 
@@ -82,7 +84,9 @@
 					try {
 						part = page.showView(IConsoleConstants.ID_CONSOLE_VIEW);
 					} catch (PartInitException e) {
-						Trace.trace(Trace.SEVERE, "Could not open console view");
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Could not open console view");
+						}
 					}
 				}
 				if (part != null) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ShowInDebugAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ShowInDebugAction.java
index a542cb5..415bf50 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ShowInDebugAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/ShowInDebugAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2008 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -53,7 +53,9 @@
 			ILaunch launch = server.getLaunch();
 			selectProcess(launch.getProcesses()[0]);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error showing in debug", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error showing in debug", e);
+			}
 		}
 	}
 
@@ -67,7 +69,9 @@
 					try {
 						part = page.showView(IDebugUIConstants.ID_DEBUG_VIEW);
 					} catch (PartInitException e) {
-						Trace.trace(Trace.SEVERE, "Could not open debug view");
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Could not open debug view");
+						}
 					}
 				}
 				if (part != null) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java
index 2fb7f39..2dc5453 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/view/servers/StartAction.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -175,7 +175,9 @@
 					launchMode2 = server.getMode();
 				server.restart(launchMode2, (IOperationListener) null);
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error restarting server", e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Error restarting server", e);
+				}
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTableComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTableComposite.java
index 7f0362c..720f43c 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTableComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTableComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -76,4 +76,8 @@
 	public void remove(Object obj) {
 		tableViewer.remove(obj);
 	}
+	
+	public void add(Object obj) {
+		tableViewer.add(obj);
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java
index 784fafa..e65cbca 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java
index 3e5e096..ff3bd43 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/BaseCellLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/BaseCellLabelProvider.java
index 4d89f63..51957d0 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/BaseCellLabelProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/BaseCellLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/BaseLabelProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/BaseLabelProvider.java
index 8dbb6dd..bd4c2e3 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/BaseLabelProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/BaseLabelProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -100,7 +100,9 @@
 			try {
 				srl[i].labelProviderChanged(event);
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "  Error firing label change event to " + srl[i], e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "  Error firing label change event to " + srl[i], e);
+				}
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java
index 248fad9..1951b5f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/InitialSelectionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -117,7 +117,9 @@
 					}
 				}
 				catch (CoreException ce){
-					Trace.trace(Trace.WARNING,"Could not create a faceted project",ce);
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING, "Could not create a faceted project", ce);
+					}
 				}
 			}
 		return rval;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeContentProvider.java
index 1054a5c..b123258 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTreeContentProvider.java
index b35adfa..f7bf887 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTreeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTreeContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,7 +41,9 @@
 					ele.contents.add(runtimes[i]);
 					elementToParentMap.put(runtimes[i], ele);
 				} catch (Exception e) {
-					Trace.trace(Trace.WARNING, "Error in runtime content provider", e);
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING, "Error in runtime content provider", e);
+					}
 				}
 			}
 		}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java
index e341a68..4c42f30 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeTypeComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java
index 2588b10..ce73bbe 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java
index d6a100b..8d4e0ba 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java
index 86cf3e4..70085d4 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/ServerTypeTreeContentProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -58,7 +58,9 @@
 						ele.contents.add(serverType);
 						elementToParentMap.put(serverType, ele);
 					} catch (Exception e) {
-						Trace.trace(Trace.WARNING, "Error in server configuration content provider", e);
+						if (Trace.WARNING) {
+							Trace.trace(Trace.STRING_WARNING, "Error in server configuration content provider", e);
+						}
 					}
 				}
 			}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/OpenBrowserWorkbenchAction.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/OpenBrowserWorkbenchAction.java
index 4002e20..1e75bef 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/OpenBrowserWorkbenchAction.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/webbrowser/OpenBrowserWorkbenchAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2006 IBM Corporation and others.
+ * Copyright (c) 2004, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -61,7 +61,9 @@
 			IWebBrowser browser = browserSupport.createBrowser(IWorkbenchBrowserSupport.LOCATION_BAR | IWorkbenchBrowserSupport.NAVIGATION_BAR, null, null, null);
 			browser.openURL(null);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error opening browser", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error opening browser", e);
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java
index 7801f41..c74e13f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/RunOnServerWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,28 +10,43 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.wizard;
 
+import java.util.HashMap;
+
 import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.wst.server.core.IModule;
-import org.eclipse.wst.server.core.IModuleArtifact;
-import org.eclipse.wst.server.core.IServer;
-import org.eclipse.wst.server.core.TaskModel;
+import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.IClient;
 import org.eclipse.wst.server.core.internal.ILaunchableAdapter;
 import org.eclipse.wst.server.ui.internal.Messages;
+import org.eclipse.wst.server.ui.internal.actions.RunOnServerActionDelegate;
 import org.eclipse.wst.server.ui.internal.wizard.fragment.RunOnServerWizardFragment;
 /**
  * A wizard used for Run on Server.
  */
 public class RunOnServerWizard extends TaskWizard {
+	
 	/**
 	 * RunOnServerWizard constructor comment.
 	 * 
 	 * @param module a module
 	 * @param launchMode a launch mode
 	 * @param moduleArtifact a module artifact
+	 * 
+	 * @deprecated
 	 */
 	public RunOnServerWizard(IModule module, String launchMode, IModuleArtifact moduleArtifact) {
-		super(Messages.wizRunOnServerTitle, new RunOnServerWizardFragment(module, launchMode, moduleArtifact));
+		this(module, launchMode,moduleArtifact, null);
+	}
+	
+	/**
+	 * RunOnServerWizard constructor comment.
+	 * 
+	 * @param module a module
+	 * @param launchMode a launch mode
+	 * @param moduleArtifact a module artifact
+	 * @param properties a HashMap with the key/value pair that defines the behaviour of the wizard 
+	 */
+	public RunOnServerWizard(IModule module, String launchMode, IModuleArtifact moduleArtifact, HashMap properties) {
+		super(Messages.wizRunOnServerTitle, createRootWizard(module, launchMode, moduleArtifact, properties));
 		
 		setNeedsProgressMonitor(true);
 		if (ILaunchManager.DEBUG_MODE.equals(launchMode))
@@ -41,6 +56,25 @@
 		getTaskModel().putObject(TaskModel.TASK_LAUNCH_MODE, launchMode);
 	}
 
+	private static RunOnServerWizardFragment createRootWizard(IModule module, String launchMode, IModuleArtifact moduleArtifact, HashMap properties){
+		RunOnServerWizardFragment fragment = new RunOnServerWizardFragment(module, launchMode, moduleArtifact);
+		setFragmentProperties(fragment, properties);
+		return fragment;
+	}
+	
+	private static RunOnServerWizardFragment createRootWizard	(IServer server, String launchMode, IModuleArtifact moduleArtifact,HashMap properties) {
+		RunOnServerWizardFragment fragment = new RunOnServerWizardFragment(server, launchMode, moduleArtifact);
+		setFragmentProperties(fragment, properties);		
+		return fragment;
+	}
+	
+	private static void setFragmentProperties(RunOnServerWizardFragment fragment, HashMap properties){
+		if (properties != null){
+			fragment.setClient((IClient)properties.get(RunOnServerActionDelegate.ROS_CLIENT));
+			fragment.setLaunchable((ILaunchableAdapter)properties.get(RunOnServerActionDelegate.ROS_LAUNCHABLE));
+		}
+	}
+	
 	/**
 	 * RunOnServerWizard constructor comment.
 	 * 
@@ -48,8 +82,8 @@
 	 * @param launchMode a launch mode
 	 * @param moduleArtifact a module artifact
 	 */
-	public RunOnServerWizard(IServer server, String launchMode, IModuleArtifact moduleArtifact) {
-		super(Messages.wizRunOnServerTitle, new RunOnServerWizardFragment(server, launchMode, moduleArtifact));
+	public RunOnServerWizard(IServer server, String launchMode, IModuleArtifact moduleArtifact,HashMap properties) {
+		super(Messages.wizRunOnServerTitle, createRootWizard(server,launchMode,moduleArtifact, properties));
 		
 		setNeedsProgressMonitor(true);
 		if (ILaunchManager.DEBUG_MODE.equals(launchMode))
@@ -103,6 +137,14 @@
 	}
 
 	/**
+	 * Set the launchable adapter
+	 * @param launch
+	 */
+	public void setLaunchableAdapter(ILaunchableAdapter launch){
+		getTaskModel().putObject(WizardTaskUtil.TASK_LAUNCHABLE_ADAPTER, launch);
+	}
+	
+	/**
 	 * Return the launchable adapter.
 	 * 
 	 * @return the adapter
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java
index 03a4cef..d5b7117 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizard.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -145,7 +145,9 @@
 		} catch (Exception e) {
 			t = e;
 		}
-		Trace.trace(Trace.SEVERE, "Error cancelling task wizard", t);
+		if (Trace.SEVERE) {
+			Trace.trace(Trace.STRING_SEVERE, "Error cancelling task wizard", t);
+		}
 		
 		if (t instanceof CoreException) {
 			EclipseUtil.openError(t.getLocalizedMessage(), ((CoreException)t).getStatus());
@@ -177,7 +179,9 @@
 							}
 						});
 					} catch (Exception e) {
-						Trace.trace(Trace.WARNING, "Could not enter/exit page", e);
+						if (Trace.WARNING) {
+							Trace.trace(Trace.STRING_WARNING, "Could not enter/exit page", e);
+						}
 					}
 				}
 				
@@ -197,7 +201,9 @@
 								while (iterator.hasNext())
 									executeTask((WizardFragment) iterator.next(), FINISH, monitor2);
 							} catch (CoreException ce) {
-								Trace.trace(Trace.SEVERE, "Error finishing wizard job", ce);
+								if (Trace.SEVERE) {
+									Trace.trace(Trace.STRING_SEVERE, "Error finishing wizard job", ce);
+								}
 								return new Status(IStatus.ERROR, ServerUIPlugin.PLUGIN_ID, 0, ce.getLocalizedMessage(), null);
 							}
 							return Status.OK_STATUS;
@@ -223,21 +229,26 @@
 				runnable.run(new NullProgressMonitor());
 			return true;
 		} catch (InvocationTargetException te) {
-			Trace.trace(Trace.SEVERE, "Error finishing task wizard", te);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error finishing task wizard", te);
+			}
 			t = te.getCause();
 		} catch(InterruptedException interruptedEx) {
-			// the dialog was canceled - do nothing.
-			Trace.trace(Trace.INFO, "The task wizard was cancelled.", interruptedEx);
+			if (Trace.INFO) {
+				Trace.trace(Trace.STRING_INFO, "The task wizard was cancelled.", interruptedEx);
+			}
 			return false; // return false since the request was canceled
 		}
 		catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error finishing task wizard 2", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error finishing task wizard 2", e);
+			}
 			t = e;
 		}
 		
-		// TODO: show better error dialog, e.g. when Tomcat config is corrupt while doing Add/Remove
-		// it currently displays the error message twice
-		Trace.trace(Trace.WARNING, "Error completing wizard", t);
+		if (Trace.WARNING) {
+			Trace.trace(Trace.STRING_WARNING, "Error completing wizard", t);
+		}
 		if (t instanceof CoreException) {
 			EclipseUtil.openError(t.getLocalizedMessage(), ((CoreException)t).getStatus());
 		} else if (t instanceof NullPointerException)
@@ -348,7 +359,9 @@
 				}
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error adding fragments to wizard", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error adding fragments to wizard", e);
+			}
 		} finally {
 			addingPages = false;
 		}
@@ -369,7 +382,9 @@
 			if (page != null)
 				return page;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error getting fragment data", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error getting fragment data", e);
+			}
 		}
 		
 		return null;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java
index dd2a2ab..0c9c9bb 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/TaskWizardPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,9 @@
 		try {
 			comp = fragment.createComposite(parentComp, this);
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not create wizard page composite", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not create wizard page composite", e);
+			}
 		}
 		if (comp == null) {
 			comp = new Composite(parentComp, SWT.NONE);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java
index a473ed2..5af8336 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/WizardTaskUtil.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -168,7 +168,9 @@
 			if (parents != null && parents.length > 0)
 				parentModule = parents[0];
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not find parent module", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not find parent module", e);
+			}
 		}
 		
 		if (parentModule == null) {
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java
index fa2c8ce..b497684 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/ModifyModulesWizardFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -112,7 +112,9 @@
 					moduleList.add(new IModule[] { module });
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not find parent module", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "Could not find parent module", e);
+				}
 			}
 			
 			taskModel.putObject(TaskModel.TASK_MODULES, moduleList);
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
index 3bc210e..5747e58 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/NewServerWizardFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,6 +17,7 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.ServerWorkingCopy;
@@ -159,9 +160,16 @@
 		if(comp != null){
 			Composite composite = comp.getNewManualServerComposite();
 			if(composite != null && composite instanceof NewManualServerComposite){
-				NewManualServerComposite manualComp = (NewManualServerComposite)composite;
-
-				if(!supportsRemote && !SocketUtil.isLocalhost(manualComp.getCurrentHostname())){
+				NewManualServerComposite manualComp = (NewManualServerComposite) composite;
+				if (manualComp.isTimerRunning() || manualComp.isTimerScheduled()) {
+					return false;
+				}
+				
+				if (manualComp.getCurrentHostname().trim().length() == 0){
+					isComplete = false;
+				} else if(!supportsRemote && !SocketUtil.isLocalhost(manualComp.getCurrentHostname())){
+					isComplete = false;
+				} else if (!manualComp.canSupportModule() ){
 					isComplete = false;
 				}
 				else
@@ -178,4 +186,18 @@
 			return null;
 		}
 	}
+	
+	public void performCancel(IProgressMonitor monitor) throws CoreException {
+		if(comp != null) {
+			comp.getNewManualServerComposite().dispose();
+		}
+		super.performCancel(monitor);
+	}
+	
+	public void performFinish(IProgressMonitor monitor) throws CoreException {
+		if(comp != null) {
+			comp.getNewManualServerComposite().dispose();
+		}
+		super.performFinish(monitor);
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/OptionalClientWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/OptionalClientWizardFragment.java
index 9595265..091177f 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/OptionalClientWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/OptionalClientWizardFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/RunOnServerWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/RunOnServerWizardFragment.java
index b2fcf7a..11ea6c6 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/RunOnServerWizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/RunOnServerWizardFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007 IBM Corporation and others.
+ * Copyright (c) 2007, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,8 @@
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IModuleArtifact;
 import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.internal.IClient;
+import org.eclipse.wst.server.core.internal.ILaunchableAdapter;
 import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
 import org.eclipse.wst.server.ui.wizard.WizardFragment;
 /**
@@ -24,6 +26,9 @@
 	protected IServer server;
 	protected IModule module;
 	protected IModuleArtifact moduleArtifact;
+	
+	protected IClient client;
+	protected ILaunchableAdapter launchable;
 
 	/**
 	 * Create the Run on Server wizard with all pages.
@@ -67,7 +72,16 @@
 		list.add(WizardTaskUtil.SaveServerFragment);
 		if (server == null)
 			list.add(WizardTaskUtil.SaveHostnameFragment);
-		
-		list.add(new OptionalClientWizardFragment(moduleArtifact));
+		if (client == null || launchable == null){
+			list.add(new OptionalClientWizardFragment(moduleArtifact));
+		}
+	}
+
+	public void setClient(IClient client) {
+		this.client = client;			
+	}
+
+	public void setLaunchable(ILaunchableAdapter launchable) {
+		this.launchable = launchable;	
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ModifyModulesComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ModifyModulesComposite.java
index d06dc07..806c076 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ModifyModulesComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/ModifyModulesComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -307,11 +307,13 @@
 				else
 					requiredModules = new IModule[] { requiredModule };
 			} catch (CoreException ce) {
-				// ignore
-				//errorMap.put(newModule, ce.getStatus());
-				Trace.trace(Trace.INFO, "A possible server implementation error", ce);
+				if (Trace.INFO) {
+					Trace.trace(Trace.STRING_INFO, "A possible server implementation error", ce);
+				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not find root module", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "Could not find root module", e);
+				}
 			}
 		}
 		if (requiredModules != null && !deployed.contains(requiredModules[0]))
@@ -765,7 +767,9 @@
 							break;
 						}
 					} catch (Exception e) {
-						Trace.trace(Trace.INFO,"Unable to handle error map for module:" + module); 
+						if (Trace.INFO) {
+							Trace.trace(Trace.STRING_INFO, "Unable to handle error map for module:" + module);
+						} 
 					}
 				}
 			}
@@ -790,7 +794,8 @@
 							wizard.setMessage(NLS.bind(Messages.wizModuleRequiredModule, module.getName()), IMessageProvider.ERROR);
 							enabled = false;
 							break;
-						}
+						} else
+							enabled = true;
 					}
 					else 
 						enabled = true;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
index baf9b34..ac97410 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewManualServerComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2010 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.wst.server.ui.internal.wizard.page;
 
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.beans.PropertyChangeEvent;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
@@ -33,22 +35,17 @@
 import org.eclipse.swt.events.*;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
-import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.*;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.dialogs.PreferencesUtil;
 import org.eclipse.ui.help.IWorkbenchHelpSystem;
 import org.eclipse.wst.server.core.*;
 import org.eclipse.wst.server.core.internal.ServerWorkingCopy;
 import org.eclipse.wst.server.core.util.SocketUtil;
-import org.eclipse.wst.server.ui.*;
-import org.eclipse.wst.server.ui.internal.*;
+import org.eclipse.wst.server.ui.AbstractUIControl;
 import org.eclipse.wst.server.ui.AbstractUIControl.IUIControlListener;
 import org.eclipse.wst.server.ui.AbstractUIControl.UIControlEntry;
+import org.eclipse.wst.server.ui.internal.*;
 import org.eclipse.wst.server.ui.internal.viewers.ServerTypeComposite;
 import org.eclipse.wst.server.ui.internal.wizard.TaskWizard;
 import org.eclipse.wst.server.ui.internal.wizard.WizardTaskUtil;
@@ -98,7 +95,6 @@
 	protected String serverTypeId;
 	protected boolean includeIncompatible;
 	
-	protected String lastHostname;
 	protected HostnameComposite manualHostComp;
 	IHostnameSelectionListener hostnameListener;
 	protected Label hostnameLabel;
@@ -108,6 +104,11 @@
 	protected ServerCreationCache cache = new ServerCreationCache();
 	
 	private IServerType oldServerType;
+	
+	HostnameChangedAction hostnameChangeAction;
+	Timer timer = null;
+	
+	private boolean canSupportModule=true;
 
 	/**
 	 * Creates a new server and server configuration.  If the initial
@@ -179,7 +180,6 @@
 		
 		hostnameListener = 	new IHostnameSelectionListener() {
 			public void hostnameSelected(String selectedHostname) {
-				lastHostname = selectedHostname;
 				setHost(selectedHostname);
 			}
 	    };		
@@ -195,7 +195,7 @@
 		
 		hostname.addModifyListener(new ModifyListener() {
 			public void modifyText(ModifyEvent e) {
-				hostnameChanged(hostname.getText());
+				setHostnameChangeTimer(hostname.getText());
 			}
 		});
 		
@@ -347,7 +347,9 @@
 			IRuntimeWorkingCopy runtimeWorkingCopy = runtimeType.createRuntime(null, null);
 			taskModel.putObject(TaskModel.TASK_RUNTIME, runtimeWorkingCopy);
 		} catch (CoreException ce) {
-			Trace.trace(Trace.SEVERE, "Error creating runtime", ce);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error creating runtime", ce);
+			}
 			return Window.CANCEL;
 		}
 		fragment = new WizardFragment() {
@@ -390,7 +392,9 @@
 	protected void handleHostnameChange(IServerType serverType) {
 
 		wizard.setMessage(null, IMessageProvider.NONE);
-		checkHostAndServerType(serverType);
+		if (!checkHostAndServerType(serverType)) {
+			return;// Host name validation failed, so there is no need to continue handling hostname change event			
+		}
 		loadServerImpl(serverType);
 		
 		if (serverName != null && !serverNameModified) {
@@ -414,14 +418,28 @@
 		}
 	}
 
-	protected void checkHostAndServerType(IServerType selectedServerType){
-		if(selectedServerType != null){
-			boolean supportsRemote = selectedServerType.supportsRemoteHosts();
-			if(!supportsRemote && !SocketUtil.isLocalhost(hostname.getText()))
-				wizard.setMessage(NLS.bind(Messages.wizCheckRemoteSupport, new Object[0]), IMessageProvider.ERROR);
-			else 
-				wizard.setMessage(null, IMessageProvider.NONE);
+	/**
+	 * Validates the server's host name<br/>
+	 * @param selectedServerType
+	 * @return The results of validation: <br/>
+	 * <b>false</b> in case when the selected server type does not support remote host and the field "hostname" is not recognized as localhost one.  This method will also return false on an invalid server type.<br/> 
+	 * <b>true</b> in any other case   
+	 */
+	protected boolean checkHostAndServerType(IServerType selectedServerType){
+		if(selectedServerType == null){
+			return false;
 		}
+		boolean supportsRemote = selectedServerType.supportsRemoteHosts();
+		if (hostname.getText().trim().length() == 0){
+			wizard.setMessage(NLS.bind(Messages.wizEmptyHostName, new Object[0]), IMessageProvider.ERROR);
+			return false;
+		}
+		if(!supportsRemote && !SocketUtil.isLocalhost(hostname.getText())) {
+			wizard.setMessage(NLS.bind(Messages.wizCheckRemoteSupport, new Object[0]), IMessageProvider.ERROR);
+			return false;
+		}
+		
+		return true;
 	}
 	
 	/**
@@ -470,7 +488,9 @@
 				fireServerWorkingCopyChanged();
 			}
 		} catch (CoreException ce) {
-			Trace.trace(Trace.SEVERE, "Error creating server", ce);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error creating server", ce);
+			}
 			server = null;
 			runtime = null;
 			wizard.setMessage(ce.getLocalizedMessage(), IMessageProvider.ERROR);
@@ -528,7 +548,9 @@
 			runtimes[0] = runtimeWC;
 			newRuntime = runtimeWC;
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Couldn't create runtime", e); //$NON-NLS-1$
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Couldn't create runtime", e);
+			}
 		}
 	}
 
@@ -577,7 +599,7 @@
 				}
 				
 				runtimeCombo.select(sel);
-				setRuntime(runtimes[0]);
+				setRuntime(runtimes[sel]);
 			}
 			
 			IRuntimeType runtimeType = serverType.getRuntimeType();
@@ -603,8 +625,28 @@
 				serverName.setText(server.getName());
 				updatingServerName = false;
 			}
+			else {
+				server.setName(serverName.getText());
+			}
+			// Validate if selected module is supported with the selected runtime
+			wizard.setMessage(null, IMessageProvider.NONE);
+			if( module!=null ){
+				canSupportModule=true;
+				IStatus status = NewServerComposite.isSupportedModule(server, module);
+				if (status != null) {
+					if (status.getSeverity() == IStatus.ERROR){
+						wizard.setMessage(status.getMessage(), IMessageProvider.ERROR);
+						canSupportModule=false;
+					}
+					else if (status.getSeverity() == IStatus.WARNING)
+						wizard.setMessage(status.getMessage(), IMessageProvider.WARNING);
+					else if (status.getSeverity() == IStatus.INFO)
+						wizard.setMessage(status.getMessage(), IMessageProvider.INFORMATION);
+				}
+			}
 		}
 		listener.runtimeSelected(runtime);
+
 	}
 	
 	protected void fireServerWorkingCopyChanged() {
@@ -649,7 +691,6 @@
 						wizard.setMessage(status.getMessage(), IMessageProvider.WARNING);
 					else if (status.getSeverity() == IStatus.INFO)
 						wizard.setMessage(status.getMessage(), IMessageProvider.INFORMATION);
-					server = null;
 				}
 			}
 		}
@@ -724,8 +765,13 @@
 	protected void hostnameChanged(String newHost) {
 		if (newHost == null)
 			return;
-		if (newHost.equals(host))
-			return;
+		/*
+		 * Bug 349434, with the fix in Timer.runTimer, the chance that a new 
+		 * host name is the same as the host name will be very rare. In some  
+		 * cases, it still needs to go through processes such as loadServerImpl. 
+		 * It doesn't worth to handle it differently. Therefore, we are not checking 
+		 * for the same host name in here.
+		 */			
 
 		host = newHost;
 		hostnameListener.hostnameSelected(host);
@@ -758,10 +804,82 @@
 			}
 		}
 	}
-	
-	public String getCurrentHostname(){
-		if(hostname != null)
+
+	public String getCurrentHostname() {
+		if (hostname != null)
 			return hostname.getText();
 		return null;
-	}	
+	}
+
+	public boolean canSupportModule() {
+		return canSupportModule;
+	}
+
+	void setHostnameChangeTimer(String hostName) {
+		if (hostnameChangeAction == null) {
+			hostnameChangeAction = new HostnameChangedAction(hostName);
+		} else {
+			hostnameChangeAction.setHostName(hostName);
+		}
+
+		if (timer == null) {
+			timer = new Timer(300, hostnameChangeAction);
+		}
+		/*
+		 * Kick off the timer and then call setMessage if the Timer wasn't
+		 * previously running because we want to trigger the isComplete on the page
+		 * so that it stops the user from proceeding to the next page while the
+		 * timer is running.
+		 */
+		if (!timer.isRunning()) {
+			timer.runTimer();
+			wizard.setMessage(null, IMessageProvider.NONE);
+		} else {
+			timer.runTimer();
+		}
+	}
+
+	public boolean isTimerRunning() {
+		if (timer == null) {
+			return false;
+		}
+		return timer.isRunning();
+	}
+
+	public boolean isTimerScheduled() {
+		if (timer == null) {
+			return false;
+		}
+		return timer.isScheduled();
+	}
+
+	/**
+	 * Disposes the timer when the wizard is disposed.
+	 */
+	public void dispose() {
+		if (timer != null) {
+			timer.dispose();
+		}
+	}
+
+	private class HostnameChangedAction implements ActionListener {
+
+		String hostName;
+
+		public HostnameChangedAction(String name) {
+			hostName = name;
+		}
+
+		public void actionPerformed(ActionEvent a) {
+			Display.getDefault().asyncExec(new Runnable() {
+				public void run() {
+						hostnameChanged(hostName);
+				}
+			});
+		}
+
+		void setHostName(String host) {
+			hostName = host;
+		}
+	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
index 2251d77..5962e97 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewRuntimeComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -179,7 +179,9 @@
 				return server;
 			}
 		} catch (CoreException ce) {
-			Trace.trace(Trace.SEVERE, "Error creating server", ce);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error creating server", ce);
+			}
 		}
 		
 		return null;
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewServerComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewServerComposite.java
index 95716bb..62a3190 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewServerComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/NewServerComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2009 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -395,7 +395,9 @@
 			} catch (CoreException ce) {
 				return ce.getStatus();
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not find root module", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "Could not find root module", e);
+				}
 			}
 			if (rootModules != null) {
 				if (rootModules.length == 0)
@@ -411,7 +413,9 @@
 						if (status != null && status.isOK())
 							found = true;
 					} catch (Exception e) {
-						Trace.trace(Trace.WARNING, "Could not find root module", e);
+						if (Trace.WARNING) {
+							Trace.trace(Trace.STRING_WARNING, "Could not find root module", e);
+						}
 					}
 				}
 				if (!found && status != null)
@@ -483,7 +487,7 @@
 
 		GridData data = new GridData(GridData.FILL_BOTH);
 		data.horizontalSpan = 3;
-		data.heightHint = 325;
+		data.heightHint = 360;
 		manualComp.setLayoutData(data);
 	}
 	
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksComposite.java
index ef81b4f..9637469 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/page/TasksComposite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2008 IBM Corporation and others.
+ * Copyright (c) 2003, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -128,7 +128,9 @@
 		}
 		
 		if (size == 0)
-			Trace.trace(Trace.SEVERE, "Task composite appeared with no tasks!");
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Task composite appeared with no tasks!");
+			}
 		
 		Dialog.applyDialogFont(this);
 		
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java
index 130f8e9..7ffbf05 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/WizardFragment.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2008 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at