[337907] Reduce the amount of Strings created when tracing is disabled
diff --git a/plugins/org.eclipse.jst.server.core/.options b/plugins/org.eclipse.jst.server.core/.options
index c0ef0b3..d770e73 100644
--- a/plugins/org.eclipse.jst.server.core/.options
+++ b/plugins/org.eclipse.jst.server.core/.options
@@ -1,7 +1,11 @@
 # Debugging options for the org.eclipse.jst.server.core plugin
 
-# Turn on general debugging
+# Turn on general tracing
 org.eclipse.jst.server.core/debug=true
 
-# Turn on general debugging
+# Tracing options
+org.eclipse.jst.server.core/config=false
+org.eclipse.jst.server.core/finest=false
+org.eclipse.jst.server.core/warning=false
+org.eclipse.jst.server.core/severe=false
 org.eclipse.jst.server.core/publishing=false
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
index b1721ca..7f78b8f 100644
--- a/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.server.core; singleton:=true
-Bundle-Version: 1.2.101.qualifier
+Bundle-Version: 1.2.202.qualifier
 Bundle-Activator: org.eclipse.jst.server.core.internal.JavaServerPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/EJBBean.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/EJBBean.java
index 2916732..7e67faa 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/EJBBean.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/EJBBean.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
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/IJavaRuntimeWorkingCopy.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/IJavaRuntimeWorkingCopy.java
index 3fe5075..ec15ccc 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/IJavaRuntimeWorkingCopy.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/IJavaRuntimeWorkingCopy.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
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/IWebModule.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/IWebModule.java
index 959ef2f..a98c859 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/IWebModule.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/IWebModule.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
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/PublishUtil.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/PublishUtil.java
index 794a15b..12f2899 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/PublishUtil.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/PublishUtil.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
@@ -67,7 +67,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, JavaServerPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorCopyingFile, new String[] {to, e.getLocalizedMessage()}), e);
 		} finally {
 			try {
@@ -123,7 +125,9 @@
 	 * @deprecated does not fail or return status if delete doesn't work
 	 */
 	protected static void deleteFile(IPath path, IModuleFile file) {
-		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());
 		path2.toFile().delete();
 	}
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
index 4b19407..bdae750 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/RuntimeClasspathProviderDelegate.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
@@ -165,7 +165,9 @@
 			Integer previousEntries = previousClasspath.get(key);
 			
 			if ((previousEntries == null) || (previousEntries.intValue() != entries.length)) {
-				Trace.trace(Trace.FINEST, "Classpath update: " + key + " " + entries);
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "Classpath update: " + key + " " + entries);
+				}
 				previousClasspath.put(key, new Integer(entries.length));
 				
 				IPath path = new Path(RuntimeClasspathContainer.SERVER_CONTAINER);
@@ -175,7 +177,9 @@
 					JavaCore.setClasspathContainer(path, new IJavaProject[] { javaProject },
 							new IClasspathContainer[] { null }, new NullProgressMonitor());
 				} catch (Exception e) {
-					Trace.trace(Trace.WARNING, "Error updating classpath", e);
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING, "Error updating classpath", e);
+					}
 				}
 			}
 		}
@@ -312,11 +316,15 @@
 					}
 					srcAttachments.add(sau);
 				} catch (Exception e) {
-					Trace.trace(Trace.WARNING, "Could not load source attachment: " + e);
+					if (Trace.WARNING) {
+						Trace.trace(Trace.STRING_WARNING, "Could not load source attachment: " + e);
+					}
 				}
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Could not load source path info", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Could not load source path info", e);
+			}
 		}
 		sourceAttachments = srcAttachments;
 	}
@@ -355,7 +363,9 @@
 			
 			memento.saveToFile(filename);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error saving source path info", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error saving source path info", e);
+			}
 		}
 	}
 	
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/J2EELaunchableClient.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/J2EELaunchableClient.java
index a3fa50b..cd6f908 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/J2EELaunchableClient.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/J2EELaunchableClient.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
@@ -30,7 +30,9 @@
 	 * @see ClientDelegate#launch(ILaunchable)
 	 */
 	public IStatus launch(IServer server, Object launchable, String launchMode, ILaunch launch) {
-		Trace.trace(Trace.FINEST, "JNDI client launched");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "JNDI client launched");
+		}
 		return null;
 	}
 }
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/JavaServerPlugin.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/JavaServerPlugin.java
index b170ebb..51ba745 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/JavaServerPlugin.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/JavaServerPlugin.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
@@ -11,6 +11,7 @@
 package org.eclipse.jst.server.core.internal;
 
 import java.util.ArrayList;
+import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.List;
 
@@ -25,6 +26,8 @@
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.VMRunnerConfiguration;
+import org.eclipse.osgi.service.debug.DebugOptions;
+import org.eclipse.osgi.service.debug.DebugOptionsListener;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.server.core.IRuntime;
 import org.eclipse.wst.server.core.IRuntimeLifecycleListener;
@@ -32,6 +35,7 @@
 import org.eclipse.wst.server.core.ServerCore;
 import org.eclipse.wst.server.core.ServerUtil;
 import org.osgi.framework.BundleContext;
+
 /**
  * The main server tooling plugin class.
  */
@@ -91,6 +95,11 @@
 		};
 		
 		ServerCore.addRuntimeLifecycleListener(runtimeListener);
+
+    	// register the debug options listener
+		final Hashtable<String, String> props = new Hashtable<String, String>(4);
+		props.put(DebugOptions.LISTENER_SYMBOLICNAME, JavaServerPlugin.PLUGIN_ID);
+		context.registerService(DebugOptionsListener.class.getName(), new Trace(), props);
 	}
 
 	/**
@@ -110,7 +119,9 @@
 		if (runtime == null)
 			throw new IllegalArgumentException();
 		
-		Trace.trace(Trace.FINEST, "Possible runtime change: " + runtime);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Possible runtime change: " + runtime);
+		}
 		
 		if (runtime.getRuntimeType() == null)
 			return;
@@ -149,7 +160,9 @@
 										}
 									}
 									
-									Trace.trace(Trace.FINEST, "Classpath change on: " + project + " " + found);
+									if (Trace.FINEST) {
+										Trace.trace(Trace.STRING_FINEST, "Classpath change on: " + project + " " + found);
+									}
 									
 									if (found) {
 										IRuntime runtime2 = runtime;
@@ -161,7 +174,9 @@
 												new IClasspathContainer[] {container}, null);
 									}
 								} catch (Exception e) {
-									Trace.trace(Trace.SEVERE, "Could not update classpath container", e);
+									if (Trace.SEVERE) {
+										Trace.trace(Trace.STRING_SEVERE, "Could not update classpath container", e);
+									}
 								}
 							}
 						}
@@ -293,7 +308,9 @@
 	private static synchronized void loadRuntimeClasspathProviders() {
 		if (runtimeClasspathProviders != null)
 			return;
-		Trace.trace(Trace.CONFIG, "->- Loading .runtimeClasspathProviders extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .runtimeClasspathProviders extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(JavaServerPlugin.PLUGIN_ID, "runtimeClasspathProviders");
 		
@@ -301,14 +318,21 @@
 		for (IConfigurationElement ce : cf) {
 			try {
 				list.add(new RuntimeClasspathProviderWrapper(ce));
-				Trace.trace(Trace.CONFIG, "  Loaded runtimeClasspathProviders: " + ce.getAttribute("id"));
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG, "  Loaded runtimeClasspathProviders: " + ce.getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load runtimeClasspathProviders: " + ce.getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE,
+							"  Could not load runtimeClasspathProviders: " + ce.getAttribute("id"), t);
+				}
 			}
 		}
 		runtimeClasspathProviders = list;
 		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .runtimeClasspathProviders extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .runtimeClasspathProviders extension point -<-");
+		}
 	}
 
 	/**
@@ -335,7 +359,9 @@
 	private static synchronized void loadServerProfilers() {
 		if (serverProfilers != null)
 			return;
-		Trace.trace(Trace.CONFIG, "->- Loading .serverProfilers extension point ->-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "->- Loading .serverProfilers extension point ->-");
+		}
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(JavaServerPlugin.PLUGIN_ID, "serverProfilers");
 		
@@ -343,14 +369,20 @@
 		for (IConfigurationElement ce : cf) {
 			try {
 				list.add(new ServerProfiler(ce));
-				Trace.trace(Trace.CONFIG, "  Loaded serverProfiler: " + ce.getAttribute("id"));
+				if (Trace.CONFIG) {
+					Trace.trace(Trace.STRING_CONFIG, "  Loaded serverProfiler: " + ce.getAttribute("id"));
+				}
 			} catch (Throwable t) {
-				Trace.trace(Trace.SEVERE, "  Could not load serverProfiler: " + ce.getAttribute("id"), t);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "  Could not load serverProfiler: " + ce.getAttribute("id"), t);
+				}
 			}
 		}
 		serverProfilers = list;
 		
-		Trace.trace(Trace.CONFIG, "-<- Done loading .serverProfilers extension point -<-");
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "-<- Done loading .serverProfilers extension point -<-");
+		}
 	}
 
 	public static void configureProfiling(ILaunch launch, IVMInstall vmInstall, VMRunnerConfiguration vmConfig, IProgressMonitor monitor) throws CoreException {
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/ProfilerPreferences.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/ProfilerPreferences.java
index 32ee2fe..5ec2786 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/ProfilerPreferences.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/ProfilerPreferences.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
@@ -58,7 +58,9 @@
 		try {
 			node.flush();			
 		} catch (BackingStoreException e) {
-			Trace.trace(Trace.SEVERE, "Could not save server profiler preference", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not save server profiler preference", e);
+			}
 		}
 	}
 	
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java
index e76f687..bd0c9bc 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathContainer.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
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathContainerInitializer.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathContainerInitializer.java
index 4d17ce5..c7b9a13 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathContainerInitializer.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathContainerInitializer.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
@@ -115,12 +115,16 @@
 									}
 								}
 								
-								Trace.trace(Trace.FINEST, "Classpath change on: " + project + " " + found);
+								if (Trace.FINEST) {
+									Trace.trace(Trace.STRING_FINEST, "Classpath change on: " + project + " " + found);
+								}
 								
 								if (found)
 									list.add(javaProject);
 							} catch (Exception e) {
-								Trace.trace(Trace.SEVERE, "Could not update classpath container", e);
+								if (Trace.SEVERE) {
+									Trace.trace(Trace.STRING_SEVERE, "Could not update classpath container", e);
+								}
 							}
 						}
 					}
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathProvider.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathProvider.java
index f4c67be..c581153 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathProvider.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathProvider.java
@@ -1,5 +1,5 @@
 /******************************************************************************
- * Copyright (c) 2005, 2007 BEA Systems, Inc.
+ * Copyright (c) 2005, 2011 BEA Systems, Inc.
  * All rights reserved. This program and 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.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathProviderWrapper.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathProviderWrapper.java
index 5256ffb..c992736 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathProviderWrapper.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeClasspathProviderWrapper.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
@@ -76,7 +76,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.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeComponentProviderWrapper.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeComponentProviderWrapper.java
index 522eafb..edb13aa 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeComponentProviderWrapper.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/RuntimeComponentProviderWrapper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 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 @@
 			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.jst.server.core/src/org/eclipse/jst/server/core/internal/ServerProfiler.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/ServerProfiler.java
index 7ab3003..1f0a3c3 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/ServerProfiler.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/ServerProfiler.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
@@ -60,7 +60,9 @@
 			try {
 				delegate = (ServerProfilerDelegate) 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;
@@ -80,7 +82,9 @@
 			if (del != null)
 				del.process(launch, vmInstall, vmConfig, monitor);
 		} catch (CoreException ce) {
-			Trace.trace(Trace.SEVERE, "Could not create delegate " + toString(), ce);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not create delegate " + toString(), ce);
+			}
 			throw ce;
 		}
 	}
diff --git a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/Trace.java b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/Trace.java
index fd470af..ef97d15 100644
--- a/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/Trace.java
+++ b/plugins/org.eclipse.jst.server.core/src/org/eclipse/jst/server/core/internal/Trace.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
@@ -15,71 +15,92 @@
 
 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 {
-	/**
-	 * Config tracing
-	 */
-	public static final byte CONFIG = 0;
-	/**
-	 * Warning tracing
-	 */
-	public static final byte WARNING = 1;
-	/**
-	 * Severe tracing
-	 */
-	public static final byte SEVERE = 2;
-	/**
-	 * Finest tracing
-	 */
-	public static final byte FINEST = 3;
-
-	public static final byte PUBLISHING = 4;
+public class Trace implements DebugOptionsListener {
 
 	private static Set<String> logged = new HashSet<String>();
+	
+	// tracing enablement flags
+	public static boolean CONFIG = false;
+	public static boolean WARNING = false;
+	public static boolean SEVERE = false;
+	public static boolean FINEST = 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_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$
+	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 trace level
-	 * @param s String
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.osgi.service.debug.DebugOptionsListener#optionsChanged(org.eclipse.osgi.service.debug.DebugOptions)
 	 */
-	public static void trace(byte level, String s) {
+	public void optionsChanged(DebugOptions options) {
+
+		Trace.CONFIG = options.getBooleanOption(JavaServerPlugin.PLUGIN_ID + Trace.STRING_CONFIG, false);
+		Trace.WARNING = options.getBooleanOption(JavaServerPlugin.PLUGIN_ID + Trace.STRING_WARNING, false);
+		Trace.SEVERE = options.getBooleanOption(JavaServerPlugin.PLUGIN_ID + Trace.STRING_SEVERE, false);
+		Trace.FINEST = options.getBooleanOption(JavaServerPlugin.PLUGIN_ID + Trace.STRING_FINEST, false);
+		Trace.PUBLISHING = options.getBooleanOption(JavaServerPlugin.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, final String s) {
 		Trace.trace(level, s, null);
 	}
 
 	/**
 	 * Trace the given message and exception.
-	 *
-	 * @param level trace level
-	 * @param s String
-	 * @param t 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)) {
-				JavaServerPlugin.getInstance().getLog().log(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, s, t));
+				JavaServerPlugin.getInstance().getLog()
+						.log(new Status(IStatus.ERROR, JavaServerPlugin.PLUGIN_ID, s, t));
 				logged.add(s);
 			}
 		}
-		
-		if (!JavaServerPlugin.getInstance().isDebugging())
-			return;
-		
-		System.out.println(JavaServerPlugin.PLUGIN_ID + " " + s);
-		if (t != null)
-			t.printStackTrace();
+		if (JavaServerPlugin.getInstance().isDebugging()) {
+			System.out.println(JavaServerPlugin.PLUGIN_ID + " " + level + " " + s);
+			if (t != null) {
+				t.printStackTrace();
+			}
+		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/.options b/plugins/org.eclipse.jst.server.ui/.options
index a747d69..045d38c 100644
--- a/plugins/org.eclipse.jst.server.ui/.options
+++ b/plugins/org.eclipse.jst.server.ui/.options
@@ -1,4 +1,10 @@
 # Debugging options for the org.eclipse.jst.server.ui plugin
 
-# Turn on general debugging
+# Turn on general tracing
 org.eclipse.jst.server.ui/debug=true
+
+# Tracing options
+org.eclipse.jst.server.ui/config=false
+org.eclipse.jst.server.ui/finest=false
+org.eclipse.jst.server.ui/warning=false
+org.eclipse.jst.server.ui/severe=false
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
index 418151d..c72c58b 100644
--- a/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.server.ui; singleton:=true
-Bundle-Version: 1.1.201.qualifier
+Bundle-Version: 1.1.202.qualifier
 Bundle-Activator: org.eclipse.jst.server.ui.internal.JavaServerUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/ImageResource.java b/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/ImageResource.java
index 684357d..861e500 100644
--- a/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/ImageResource.java
+++ b/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/ImageResource.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
@@ -35,7 +35,9 @@
 			String pathSuffix = "icons/";
 			ICON_BASE_URL = JavaServerUIPlugin.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);
+			}
 		}
 	}
 
@@ -96,7 +98,9 @@
 			imageRegistry.put(key, id);
 			imageDescriptors.put(key, id);
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Error registering image " + key + " from " + partialURL, e);
+			if(Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Error registering image " + key + " from " + partialURL, e);
+			}
 		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/JavaServerUIPlugin.java b/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/JavaServerUIPlugin.java
index 6eaf765..dbb47b8 100644
--- a/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/JavaServerUIPlugin.java
+++ b/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/JavaServerUIPlugin.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,12 +10,17 @@
  *******************************************************************************/
 package org.eclipse.jst.server.ui.internal;
 
+import java.util.Hashtable;
+
 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.swt.widgets.Shell;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
 /**
  * The main server tooling plugin class.
  */
@@ -77,4 +82,14 @@
 			return null;
 		return workBench.getActiveWorkbenchWindow();
 	}
-}
+
+    public void start(BundleContext context) throws Exception {
+
+    	super.start(context);
+
+    	// register the debug options listener
+		final Hashtable<String, String> props = new Hashtable<String, String>(4);
+		props.put(DebugOptions.LISTENER_SYMBOLICNAME, JavaServerUIPlugin.PLUGIN_ID);
+		context.registerService(DebugOptionsListener.class.getName(), new Trace(), props);
+    }
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/RuntimeLabelProvider.java b/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/RuntimeLabelProvider.java
index f5be1c1..16ccb5d 100644
--- a/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/RuntimeLabelProvider.java
+++ b/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/RuntimeLabelProvider.java
@@ -1,5 +1,5 @@
 /******************************************************************************
- * Copyright (c) 2005 BEA Systems, Inc.
+ * Copyright (c) 2005, 2011 BEA Systems, Inc.
  * All rights reserved. This program and 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.jst.server.ui/src/org/eclipse/jst/server/ui/internal/Trace.java b/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/Trace.java
index 0f54f82..9ea245b 100644
--- a/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/Trace.java
+++ b/plugins/org.eclipse.jst.server.ui/src/org/eclipse/jst/server/ui/internal/Trace.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
@@ -12,48 +12,80 @@
 
 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 WARNING = 1;
-	public static final byte SEVERE = 2;
-	public static final byte FINEST = 3;
+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 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) {
+	public void optionsChanged(DebugOptions options) {
+		Trace.CONFIG = options.getBooleanOption(JavaServerUIPlugin.PLUGIN_ID + Trace.STRING_CONFIG, false);
+		Trace.WARNING = options.getBooleanOption(JavaServerUIPlugin.PLUGIN_ID + Trace.STRING_WARNING, false);
+		Trace.SEVERE = options.getBooleanOption(JavaServerUIPlugin.PLUGIN_ID + Trace.STRING_SEVERE, false);
+		Trace.FINEST = options.getBooleanOption(JavaServerUIPlugin.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.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 (level == SEVERE)
-			JavaServerUIPlugin.getInstance().getLog().log(new Status(IStatus.ERROR, JavaServerUIPlugin.PLUGIN_ID, s, t));
-		
-		if (!JavaServerUIPlugin.getInstance().isDebugging())
-			return;
-		
-		System.out.println(JavaServerUIPlugin.PLUGIN_ID + " " + s);
-		if (t != null)
-			t.printStackTrace();
-	}
+	public static void trace(final String level, final String s, final Throwable t) {
+
+		if (Trace.STRING_SEVERE.equals(level)) {
+			JavaServerUIPlugin.getInstance().getLog()
+					.log(new Status(IStatus.ERROR, JavaServerUIPlugin.PLUGIN_ID, s, t));
+		}
+		if (JavaServerUIPlugin.getInstance().isDebugging()) {
+			System.out.println(JavaServerUIPlugin.PLUGIN_ID + " " + level + " " + s);
+			if (t != null) {
+				t.printStackTrace();
+			}
+		}
+	}	
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/.options b/plugins/org.eclipse.wst.internet.monitor.core/.options
index 47070ee..43d4ccb 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/.options
+++ b/plugins/org.eclipse.wst.internet.monitor.core/.options
@@ -1,6 +1,11 @@
 # Debugging options for the org.eclipse.wst.internet.monitor.core plugin
 
-# Turn on general debugging
+# Turn on general tracing
 org.eclipse.wst.internet.monitor.core/debug=true
 
-org.eclipse.wst.internet.monitor.core/parsing=false
+# Tracing options
+org.eclipse.wst.internet.monitor.core/config=false
+org.eclipse.wst.internet.monitor.core/finest=false
+org.eclipse.wst.internet.monitor.core/warning=false
+org.eclipse.wst.internet.monitor.core/severe=false
+org.eclipse.wst.internet.monitor.core/parsing=false
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF
index 3962bb5..0ec2883 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.internet.monitor.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.internet.monitor.core; singleton:=true
-Bundle-Version: 1.0.404.qualifier
+Bundle-Version: 1.0.505.qualifier
 Bundle-Activator: org.eclipse.wst.internet.monitor.core.internal.MonitorPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/AcceptThread.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/AcceptThread.java
index 69111aa..63f2f23 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/AcceptThread.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/AcceptThread.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
@@ -40,10 +40,14 @@
 			try {
 				serverSocket = new ServerSocket(monitor.getLocalPort());
 				serverSocket.setSoTimeout(2000);
-				Trace.trace(Trace.FINEST, "Monitoring localhost:" + monitor.getLocalPort() + " -> " + monitor.getRemoteHost()
-						+ ":" + monitor.getRemotePort());
+				if (Trace.FINEST) {
+					Trace.trace(Trace.STRING_FINEST, "Monitoring localhost:" + monitor.getLocalPort() + " -> "
+							+ monitor.getRemoteHost() + ":" + monitor.getRemotePort());
+				}
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Could not start monitoring");
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Could not start monitoring");
+				}
 				return;
 			}
 			
@@ -79,7 +83,9 @@
 					// do nothing
 				} catch (Exception e) {
 					if (alive)
-						Trace.trace(Trace.SEVERE, "Error while monitoring", e);
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Error while monitoring", e);
+						}
 				}
 			}
 		}
@@ -144,7 +150,9 @@
 			if (serverSocket != null)
 				serverSocket.close();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error stopping server", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error stopping server", e);
+			}
 		}
 	}
 	
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Connection.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Connection.java
index 086fb38..b2379d3 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Connection.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Connection.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
@@ -33,7 +33,9 @@
 	 * Close the connection.
 	 */
 	public void close() {
-		Trace.trace(Trace.FINEST, "Closing connection");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Closing connection");
+		}
 		try {
 			in.getOutputStream().flush();
 			in.shutdownInput();
@@ -42,9 +44,13 @@
 			out.getOutputStream().flush();
 			out.shutdownInput();
 			out.shutdownOutput();
-			Trace.trace(Trace.FINEST, "Connection closed");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Connection closed");
+			}
 		} catch (Exception ex) {
-			Trace.trace(Trace.WARNING, "Error closing connection " + this, ex);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Error closing connection " + this, ex);
+			}
 		}
 	}
 }
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ContentFilter.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ContentFilter.java
index 1ea64cc..fae452d 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ContentFilter.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ContentFilter.java
@@ -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
@@ -70,7 +70,9 @@
 			try {
 				delegate = (ContentFilterDelegate) element.createExecutableExtension("class");
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Could not create content filter delegate: " + getId(), e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Could not create content filter delegate: " + getId(), e);
+				}
 				return new byte[0];
 			}
 		}
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Monitor.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Monitor.java
index e4dbc03..cec9a5a 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Monitor.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Monitor.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
@@ -295,7 +295,9 @@
 			if (localHostaddr.getHostName().equals(host))
 				return true;
 		} catch (Exception e) {
-			Trace.trace(Trace.WARNING, "Error checking for localhost", e);
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "Error checking for localhost", e);
+			}
 		}
 		return false;
 	}
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorManager.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorManager.java
index ba5c55f..a3d2a92 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorManager.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorManager.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
@@ -201,7 +201,9 @@
 	}
 
 	protected synchronized void loadMonitors() {
-		Trace.trace(Trace.FINEST, "Loading monitors");
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Loading monitors");
+		}
 		
 		monitors = new ArrayList<IMonitor>();
 		Preferences prefs = MonitorPlugin.getInstance().getPluginPreferences();
@@ -221,7 +223,9 @@
 					}
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.WARNING, "Could not load monitors", e);
+				if (Trace.WARNING) {
+					Trace.trace(Trace.STRING_WARNING, "Could not load monitors", e);
+				}
 			}
 		}
 	}
@@ -243,7 +247,9 @@
 			prefs.setValue("monitors", xmlString);
 			MonitorPlugin.getInstance().savePluginPreferences();
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not save browsers", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not save browsers", e);
+			}
 		}
 		ignorePreferenceChanges = false;
 	}
@@ -311,7 +317,9 @@
 				try {
 					monitor.start();
 				} catch (CoreException e) {
-					Trace.trace(Trace.SEVERE, "Failed to start monitor:" + monitor.toString(), e);
+					if (Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Failed to start monitor:" + monitor.toString(), e);
+					}
 				}
 		}
 	}
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorPlugin.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorPlugin.java
index 5f79b19..63ceeb6 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorPlugin.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/MonitorPlugin.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,6 +13,9 @@
 import java.util.*;
 
 import org.eclipse.core.runtime.*;
+import org.eclipse.osgi.service.debug.DebugOptions;
+import org.eclipse.osgi.service.debug.DebugOptionsListener;
+import org.osgi.framework.BundleContext;
 /**
  * The monitor core plugin.
  */
@@ -125,7 +128,9 @@
 	protected synchronized void loadProtocolAdapters() {
 		if (protocolAdapters != null)
 			return;
-		Trace.trace(Trace.CONFIG, "Loading protocol adapters"); 
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "Loading protocol adapters");
+		} 
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(MonitorPlugin.PLUGIN_ID, "internalProtocolAdapters");
 
@@ -133,7 +138,9 @@
 		Map<String, ProtocolAdapter> map = new HashMap<String, ProtocolAdapter>(size);
 		for (int i = 0; i < size; i++) {
 			String id = cf[i].getAttribute("id");
-			Trace.trace(Trace.CONFIG, "Loading adapter: " + id);
+			if (Trace.CONFIG) {
+				Trace.trace(Trace.STRING_CONFIG, "Loading adapter: " + id);
+			}
 			map.put(id, new ProtocolAdapter(cf[i]));
 		}
 		protocolAdapters = map;
@@ -142,7 +149,9 @@
 	protected synchronized void loadContentFilters() {
 		if (contentFilters != null)
 			return;
-		Trace.trace(Trace.CONFIG, "Loading content filters"); 
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "Loading content filters");
+		} 
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(MonitorPlugin.PLUGIN_ID, "internalContentFilters");
 
@@ -150,7 +159,9 @@
 		Map<String, IContentFilter> map = new HashMap<String, IContentFilter>(size);
 		for (int i = 0; i < size; i++) {
 			String id = cf[i].getAttribute("id");
-			Trace.trace(Trace.CONFIG, "Loading filter: " + id);
+			if (Trace.CONFIG) {
+				Trace.trace(Trace.STRING_CONFIG, "Loading filter: " + id);
+			}
 			map.put(id, new ContentFilter(cf[i]));
 		}
 		contentFilters = map;
@@ -160,24 +171,42 @@
 		if (startupsLoaded)
 			return;
 		
-		Trace.trace(Trace.CONFIG, "Loading startups"); 
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "Loading startups");
+		} 
 		IExtensionRegistry registry = Platform.getExtensionRegistry();
 		IConfigurationElement[] cf = registry.getConfigurationElementsFor(MonitorPlugin.PLUGIN_ID, "internalStartup");
 		
 		int size = cf.length;
 		for (int i = 0; i < size; i++) {
 			String id = cf[i].getAttribute("id");
-			Trace.trace(Trace.CONFIG, "Loading startup: " + id);
+			if (Trace.CONFIG) {
+				Trace.trace(Trace.STRING_CONFIG, "Loading startup: " + id);
+			}
 			try {
 				IStartup startup = (IStartup) cf[i].createExecutableExtension("class");
 				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);
+					}
 				}
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Could not create startup: " + id, e);
+				if (Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Could not create startup: " + id, e);
+				}
 			}
 		}
 	}
-}
+
+	public void start(BundleContext context) throws Exception {
+
+		super.start(context);
+		
+		// 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);
+	}
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapter.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapter.java
index 44f8c0e..7253d1f 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapter.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/ProtocolAdapter.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
@@ -46,7 +46,9 @@
 		try {
 			delegate = (ProtocolAdapterDelegate) element.createExecutableExtension("class");
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not create protocol adapter delegate: " + getId(), e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not create protocol adapter delegate: " + getId(), e);
+			}
 		}
 		return delegate;
 	}
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/TCPIPThread.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/TCPIPThread.java
index 234de85..9a61818 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/TCPIPThread.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/TCPIPThread.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
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Trace.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Trace.java
index e48ab96..c506497 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Trace.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/Trace.java
@@ -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
@@ -12,68 +12,83 @@
 
 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 {
-	/**
-	 * Config trace event.
-	 */
-	public static final byte CONFIG = 0;
-	
-	/**
-	 * Warning trace event.
-	 */
-	public static final byte WARNING = 1;
-	
-	/**
-	 * Severe trace event.
-	 */
-	public static final byte SEVERE = 2;
-	
-	/**
-	 * Finest trace event.
-	 */
-	public static final byte FINEST = 3;
-	
-	/**
-	 * Parsing trace event.
-	 */
-	public static final byte PARSING = 4;
+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;
+	public static boolean PARSING = 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$
+	public final static String STRING_PARSING = "/parsing"; //$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 the 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(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.PARSING = options.getBooleanOption(MonitorPlugin.PLUGIN_ID + Trace.STRING_PARSING, 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 the 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 (level == SEVERE)
+	public static void trace(final String level, final String s, final Throwable t) {
+		if (Trace.STRING_SEVERE.equals(level)) {
 			MonitorPlugin.getInstance().getLog().log(new Status(IStatus.ERROR, MonitorPlugin.PLUGIN_ID, s, t));
-		
-		if (!MonitorPlugin.getInstance().isDebugging())
-			return;
-		
-		System.out.println(MonitorPlugin.PLUGIN_ID + " " + System.currentTimeMillis() + " thread=["+Thread.currentThread().getId() +"]" + s);
-		if (t != null)
-			t.printStackTrace();
+		}
+		if (MonitorPlugin.getInstance().isDebugging()) {
+			System.out.println(" " + 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.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPConnection.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPConnection.java
index 02cb85d..19176b3 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPConnection.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPConnection.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
@@ -38,7 +38,9 @@
 	public HTTPConnection(IMonitor monitor) {
 		super();
 		this.monitor = monitor;
-		Trace.trace(Trace.PARSING, "TCP/IP monitor connection opened " + monitor);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "TCP/IP monitor connection opened " + monitor);
+		}
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
index 8e61092..76342a4 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/http/HTTPThread.java
@@ -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
@@ -97,7 +97,9 @@
 		setPriority(Thread.NORM_PRIORITY + 1);
 		setDaemon(true);
 		
-		Trace.trace(Trace.PARSING, "Started: " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Started: " + this);
+		}
 	}
 	
 	/**
@@ -189,7 +191,9 @@
 	 * @throws IOException
 	 */
 	public void parseBody() throws IOException {
-		Trace.trace(Trace.PARSING, "Parsing body for: " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Parsing body for: " + this);
+		}
 		
 		if (responseType != null && ("204".equals(responseType) || "304".equals(responseType))) {
 			setHTTPBody(new byte[0]);
@@ -208,7 +212,9 @@
 					b2Index += b.length;
 				}
 				int bytesLeft = contentLength - b.length;
-				Trace.trace(Trace.PARSING, "[Request] bytesLeft: "+ bytesLeft);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "[Request] bytesLeft: " + bytesLeft);
+				}
 				out.write(b);
 				
 				int n = 0;
@@ -220,7 +226,9 @@
 						b2Index += n;
 					}
 					out.write(readBuffer, 0, n);					
-					Trace.trace(Trace.PARSING, "[Request] bytes read: "+ n + " bytesLeft: "+ bytesLeft);
+					if (Trace.PARSING) {
+						Trace.trace(Trace.STRING_PARSING, "[Request] bytes read: " + n + " bytesLeft: " + bytesLeft);
+					}
 				}
 				
 				// restore the byte array for display
@@ -233,18 +241,24 @@
 				parseChunk();
 			}
 			
-			Trace.trace(Trace.PARSING, "Done parsing request body for: " + this);
+			if (Trace.PARSING) {
+				Trace.trace(Trace.STRING_PARSING, "Done parsing request body for: " + this);
+			}
 			return;
 		}
 		
 		// just return body for HTTP 1.0 responses
 		if (!isRequest && !connectionKeepAlive && contentLength == -1 && transferEncoding == -1) {
-			Trace.trace(Trace.PARSING, "Assuming HTTP 1.0 for: " + this);
+			if (Trace.PARSING) {
+				Trace.trace(Trace.STRING_PARSING, "Assuming HTTP 1.0 for: " + this);
+			}
 			int n = buffer.length - bufferIndex;
 			byte[] b = readBytes(n);
 			byte[] body = new byte[0];
 			while (n >= 0) {
-				Trace.trace(Trace.PARSING, "Bytes read: " + n + " " + this);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "Bytes read: " + n + " " + this);
+				}
 				if (b != null && n > 0) {
 					byte[] x = null;
 					if (n == b.length)
@@ -295,7 +309,9 @@
 				b2Index += b.length;
 			}
 			int bytesLeft = contentLength - b.length;
-			Trace.trace(Trace.PARSING,"bytesLeft: "+ bytesLeft);
+			if (Trace.PARSING) {
+				Trace.trace(Trace.STRING_PARSING, "bytesLeft: " + bytesLeft);
+			}
 			out.write(b);
 			
 			int n = 0;
@@ -306,7 +322,9 @@
 					System.arraycopy(readBuffer, 0, b2, b2Index, n);
 					b2Index += n;
 				}
-				Trace.trace(Trace.PARSING,"bytes read: "+n + " bytesLeft: "+ bytesLeft);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "bytes read: " + n + " bytesLeft: " + bytesLeft);
+				}
 				out.write(readBuffer, 0, n);
 			}
 						
@@ -324,7 +342,9 @@
 		
 		// spec 4.4.4 (?)
 		
-		Trace.trace(Trace.PARSING, "Unknown body for: " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Unknown body for: " + this);
+		}
 	}
 
 	// Use this method to dump the content of a byte array
@@ -347,7 +367,9 @@
 	 * @throws IOException
 	 */
 	public void parseChunk() throws IOException {
-		Trace.trace(Trace.PARSING, "Parsing chunk for: " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Parsing chunk for: " + this);
+		}
 		boolean done = false;
 		byte[] body = new byte[0];
 	
@@ -356,7 +378,9 @@
 			byte[] b = readLine();
 	
 			String s = new String(b);
-			Trace.trace(Trace.PARSING, "Chunk-length: "+s);
+			if (Trace.PARSING) {
+				Trace.trace(Trace.STRING_PARSING, "Chunk-length: " + s);
+			}
 			int index = s.indexOf(" ");
 			int length = -1;
 			try {
@@ -364,7 +388,9 @@
 					s = s.substring(0, index);
 				length = Integer.parseInt(s.trim(), 16);
 			} catch (Exception e) {
-				Trace.trace(Trace.PARSING, "Error chunk for: " + this, e);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "Error chunk for: " + this, e);
+				}
 			}
 	
 			// output bytes
@@ -402,7 +428,9 @@
 	 * @throws IOException
 	 */
 	public void parseHeader() throws IOException {
-		Trace.trace(Trace.PARSING, "Parsing header for: " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Parsing header for: " + this);
+		}
 	
 		// read until first blank line
 		boolean isFirstLine = true;
@@ -410,7 +438,9 @@
 	
 		byte[] b = readLine();
 		while (b.length > 5) {
-			Trace.trace(Trace.PARSING, "Parsing header line: '" + new String(b) + "'");
+			if (Trace.PARSING) {
+				Trace.trace(Trace.STRING_PARSING, "Parsing header line: '" + new String(b) + "'");
+			}
 			
 			if (isFirstLine) {
 				String s = new String(b);
@@ -425,9 +455,13 @@
 	
 					try {
 						responseType = s.substring(index1 + 1, index2).trim();
-						Trace.trace(Trace.PARSING, "Response Type: " + this + " " + responseType);
+						if (Trace.PARSING) {
+							Trace.trace(Trace.STRING_PARSING, "Response Type: " + this + " " + responseType);
+						}
 					} catch (Exception e) {
-						Trace.trace(Trace.PARSING, "Error parsing response type for: " + this, e);
+						if (Trace.PARSING) {
+							Trace.trace(Trace.STRING_PARSING, "Error parsing response type for: " + this, e);
+						}
 					}
 					if (responseType != null && responseType.equals("100")) {
 						outputBytes(b, isNew);
@@ -443,9 +477,13 @@
 
 						try {
 							responseType = s.substring(index1 + 1, index2).trim();
-							Trace.trace(Trace.PARSING, "Response Type: " + this + " " + responseType);
+							if (Trace.PARSING) {
+								Trace.trace(Trace.STRING_PARSING, "Response Type: " + this + " " + responseType);
+							}
 						} catch (Exception e) {
-							Trace.trace(Trace.PARSING, "Error parsing response type for: " + this, e);
+							if (Trace.PARSING) {
+								Trace.trace(Trace.STRING_PARSING, "Error parsing response type for: " + this, e);
+							}
 						}
 					}
 				}
@@ -461,12 +499,16 @@
 			b = readLine();
 		}
 		
-		Trace.trace(Trace.PARSING, "Parsing final header line: '" + new String(b) + "'");
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Parsing final header line: '" + new String(b) + "'");
+		}
 		
 		outputBytes(b, false);
 		
 		Request rr = conn.getRequestResponse(isRequest);
-		Trace.trace(Trace.PARSING, "Setting header length: " + rr.getRequest(Request.ALL).length);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Setting header length: " + rr.getRequest(Request.ALL).length);
+		}
 		
 		setHTTPHeader(rr);
 	}
@@ -476,7 +518,9 @@
 	 * @return byte[]
 	 */
 	protected byte[] readBytes(int n) throws IOException {
-		Trace.trace(Trace.PARSING, "readBytes() " + n + " for: " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "readBytes() " + n + " for: " + this);
+		}
 		while (buffer.length - bufferIndex < n)
 			fillBuffer();
 		
@@ -489,7 +533,9 @@
 	 * @return byte[]
 	 */
 	protected byte[] readLine() throws IOException {
-		Trace.trace(Trace.PARSING, "readLine() for: " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "readLine() for: " + this);
+		}
 		
 		int n = getFirstCRLF();
 		while (n < 0) {
@@ -547,7 +593,9 @@
 					//Request r = conn.getRequestResponse(true);
 					//r.fireChangedEvent();
 					
-					Trace.trace(Trace.PARSING, "Done HTTP request for " + this + " " + connectionKeepAlive);
+					if (Trace.PARSING) {
+						Trace.trace(Trace.STRING_PARSING, "Done HTTP request for " + this + " " + connectionKeepAlive);
+					}
 					if (!isRequest && (!request.connectionKeepAlive || connectionClose)) {
 						conn2.close();
 						if (request.connectionKeepAlive && connectionClose)
@@ -562,15 +610,18 @@
 					Thread.yield();
 				}
 			} catch (IOException e) {
-				// reached end of input
-				Trace.trace(Trace.PARSING, "End of buffer for: " + this, e);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "End of buffer for: " + this, e);
+				}
 				if (!isRequest) {
 					try {
 						request.connectionKeepAlive = false;
 						request.conn2.close();
 						notifyRequest();
 					} catch (Exception ex) {
-						Trace.trace(Trace.PARSING, "Error closing request in response to error: " + this, e);
+						if (Trace.PARSING) {
+							Trace.trace(Trace.STRING_PARSING, "Error closing request in response to error: " + this, e);
+						}
 					}
 				}
 			}
@@ -579,12 +630,16 @@
 			out.write(buffer, bufferIndex, buffer.length - bufferIndex);
 			out.flush();
 		} catch (Exception e) {
-			Trace.trace(Trace.PARSING, "Error in: " + this, e);
+			if (Trace.PARSING) {
+				Trace.trace(Trace.STRING_PARSING, "Error in: " + this, e);
+			}
 		}
 		//if (!isRequest)
 		//	conn2.close();
 		
-		Trace.trace(Trace.PARSING, "Closing thread " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Closing thread " + this);
+		}
 	}
 
 	/**
@@ -624,9 +679,13 @@
 		} else if (s.toLowerCase().startsWith("content-length: ")) {
 			try {
 				contentLength = Integer.parseInt(s.substring(16).trim());
-				Trace.trace(Trace.PARSING, "Content length: " + this + " " + contentLength);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "Content length: " + this + " " + contentLength);
+				}
 			} catch (Exception e) {
-				Trace.trace(Trace.PARSING, "Content length error", e);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "Content length error", e);
+				}
 			}
 		} else if (s.toLowerCase().startsWith("connection: ")) {
 			try {
@@ -641,9 +700,13 @@
 				// so we have to let it alone
 				if (t.equalsIgnoreCase("close"))
 					connectionClose = true;
-				Trace.trace(Trace.PARSING, "Keep alive: " + connectionKeepAlive);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "Keep alive: " + connectionKeepAlive);
+				}
 			} catch (Exception e) {
-				Trace.trace(Trace.PARSING, "Error getting Connection: from header", e);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "Error getting Connection: from header", e);
+				}
 			}
 		} else if (s.toLowerCase().startsWith("transfer-encoding: ")) {
 			String t = s.substring(19).trim();
@@ -651,7 +714,9 @@
 			for (int i = 0; i < size; i++) {
 				if (ENCODING_STRING[i].equalsIgnoreCase(t)) {
 					transferEncoding = (byte) i;
-					Trace.trace(Trace.PARSING, "Transfer encoding: " + ENCODING_STRING[i]);
+					if (Trace.PARSING) {
+						Trace.trace(Trace.STRING_PARSING, "Transfer encoding: " + ENCODING_STRING[i]);
+					}
 				}
 			}
 		}
@@ -661,31 +726,45 @@
 	
 	protected void close() {
 		try {
-			Trace.trace(Trace.PARSING, "Closing: " + this);
+			if (Trace.PARSING) {
+				Trace.trace(Trace.STRING_PARSING, "Closing: " + this);
+			}
 			out.close();
 		} catch (Exception e) {
-			Trace.trace(Trace.PARSING, "Error closing connection " + this, e);
+			if (Trace.PARSING) {
+				Trace.trace(Trace.STRING_PARSING, "Error closing connection " + this, e);
+			}
 		}
 	}
 
 	protected void waitForResponse() {
-		Trace.trace(Trace.PARSING, "Waiting for response " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Waiting for response " + this);
+		}
 		synchronized (this) {
 			try {
 				isWaiting = true;
 				wait();
 			} catch (Exception e) {
-				Trace.trace(Trace.PARSING, "Error in waitForResponse() " + this, e);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "Error in waitForResponse() " + this, e);
+				}
 			}
 			isWaiting = false;
 		}
-		Trace.trace(Trace.PARSING, "Done waiting for response " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Done waiting for response " + this);
+		}
 	}
 
 	protected void notifyRequest() {
-		Trace.trace(Trace.PARSING, "Notifying request " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Notifying request " + this);
+		}
 		while (request.connectionKeepAlive && !request.isWaiting) {
-			Trace.trace(Trace.PARSING, "Waiting for request " + this);
+			if (Trace.PARSING) {
+				Trace.trace(Trace.STRING_PARSING, "Waiting for request " + this);
+			}
 			try {
 				Thread.sleep(100);
 			} catch (Exception e) {
@@ -696,10 +775,14 @@
 			try {
 				request.notify();
 			} catch (Exception e) {
-				Trace.trace(Trace.PARSING, "Error in notifyRequest() " + this, e);
+				if (Trace.PARSING) {
+					Trace.trace(Trace.STRING_PARSING, "Error in notifyRequest() " + this, e);
+				}
 			}
 		}
-		Trace.trace(Trace.PARSING, "Done notifying request " + this);
+		if (Trace.PARSING) {
+			Trace.trace(Trace.STRING_PARSING, "Done notifying request " + this);
+		}
 	}
 
 	protected void setHTTPHeader(Request rr) {
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitor.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitor.java
index 107f138..a69144b 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitor.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 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
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorWorkingCopy.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorWorkingCopy.java
index 1b74058..15df7ae 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorWorkingCopy.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/IMonitorWorkingCopy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2007 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
diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/Request.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/Request.java
index 06ebd2e..06353b5 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/Request.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/internal/provisional/Request.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
@@ -226,7 +226,9 @@
 			if (value != null)
 				properties.put(key, value);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not add property", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not add property", e);
+			}
 		}
 		monitor.requestChanged(this);
 	}
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/.options b/plugins/org.eclipse.wst.internet.monitor.ui/.options
index 08412ea..6f0e9ee 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/.options
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/.options
@@ -1,4 +1,10 @@
 # Debugging options for the org.eclipse.wst.internet.monitor.ui plugin
 
-# Turn on general debugging
+# 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/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
index a7c24dc..a8f92b6 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.internet.monitor.ui; singleton:=true
-Bundle-Version: 1.0.405.qualifier
+Bundle-Version: 1.0.506.qualifier
 Bundle-Activator: org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java
index ed3cf28..d292295 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/MonitorUIPlugin.java
@@ -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
@@ -19,6 +19,8 @@
 
 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.*;
@@ -192,7 +194,9 @@
 			registry.put(key, id);
 			imageDescriptors.put(key, id);
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error registering image", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error registering image", e);
+			}
 		}
 	}
 
@@ -212,6 +216,11 @@
 			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);
 	}
 
 	/**
@@ -286,7 +295,9 @@
 			}
 			return t;
 		} catch (Exception e) {
-			Trace.trace(Trace.FINEST, "Could not unzip byte array");
+			if (Trace.FINEST) {
+				Trace.trace(Trace.STRING_FINEST, "Could not unzip byte array");
+			}
 			return b;
 		}
 	}
@@ -315,7 +326,9 @@
 					sb.append(lineSeparator);
 			}
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Error parsing input", e);
+			if (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Error parsing input", e);
+			}
 		}
 		
 		return sb.toString();
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java
index 587ac3b..8d91945 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/Trace.java
@@ -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
@@ -12,50 +12,80 @@
 
 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 {
-	public static final byte CONFIG = 0;
-	public static final byte WARNING = 1;
-	public static final byte SEVERE = 2;
-	public static final byte FINEST = 3;
+public 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 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 the 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) {
+	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 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 (level == SEVERE)
-			MonitorPlugin.getInstance().getLog().log(new Status(IStatus.ERROR, MonitorPlugin.PLUGIN_ID, s, t));
-		
-		if (!MonitorUIPlugin.getInstance().isDebugging())
-			return;
-		
-		System.out.println(MonitorUIPlugin.PLUGIN_ID + " " + s);
-		if (t != null)
-			t.printStackTrace();
+	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/view/MonitorView.java b/plugins/org.eclipse.wst.internet.monitor.ui/monitorui/org/eclipse/wst/internet/monitor/ui/internal/view/MonitorView.java
index 5b38850..10fd28b 100644
--- 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
@@ -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
@@ -548,7 +548,9 @@
 					if (view != null && !MonitorUIPlugin.getPinViewPreference())
 						view.setSelection(request);
 				} catch (Exception e) {
-					Trace.trace(Trace.SEVERE, "Error opening TCP/IP view", e);
+					if(Trace.SEVERE) {
+						Trace.trace(Trace.STRING_SEVERE, "Error opening TCP/IP view", e);
+					}
 				}
 			}
 		});
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
index 748f938..00e313f 100644
--- 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
@@ -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
@@ -49,7 +49,9 @@
 		try {
 			return (ContentViewer) element.createExecutableExtension("class");
 		} catch (Exception e) {
-			Trace.trace(Trace.SEVERE, "Could not create viewer" + toString(), e);
+			if(Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "Could not create viewer" + toString(), e);
+			}
 			return null;
 		}
 	}
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
index 0394414..974faa5 100644
--- 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
@@ -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
@@ -217,7 +217,9 @@
 			try {
 				b = filter.filter(request, false, b);
 			} catch (Exception e) {
-				Trace.trace(Trace.SEVERE, "Error while filtering with " + filter.getId(), e);
+				if(Trace.SEVERE) {
+					Trace.trace(Trace.STRING_SEVERE, "Error while filtering with " + filter.getId(), e);
+				}
 			}
 		}
 		return b;
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
index 36bce7f..5a17ff4 100644
--- 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
@@ -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
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/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..2251e86 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, 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
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 2832b75..1747637 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
@@ -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,13 @@
 			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 +227,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 +238,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 +251,13 @@
 			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);
+				}
 			}
 		}
 	}
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..7dcb50a 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
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 d01415b..20de532 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
@@ -332,7 +332,9 @@
 						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)
@@ -356,7 +358,9 @@
 						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)
@@ -688,7 +692,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..bc3a2f9 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, 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
@@ -252,7 +252,9 @@
 			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 +372,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 +400,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..3276fe1 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, 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
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..4a703e3 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,9 @@
 			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 +103,9 @@
 		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 +117,9 @@
 		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..bd2a0e9 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, 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
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..f80fd35 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, 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
@@ -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,9 @@
 		} 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 +240,9 @@
 		} 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 +283,9 @@
 				}
 			}
 		} 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..0b20c7a 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,9 @@
 			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 +77,9 @@
 		} 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..8f648e8 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, 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
@@ -115,9 +115,14 @@
 					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 +139,9 @@
 		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 +193,9 @@
 		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..4caf02e 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,9 @@
 			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 +182,9 @@
 		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 9b97904..2667707 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
@@ -95,9 +95,14 @@
 				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;
@@ -120,7 +125,9 @@
 				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];
 		}
 	}
@@ -135,7 +142,9 @@
 				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];
 		}
 	}
@@ -184,7 +193,9 @@
 			
 			return evalEnablementExpression(context, getContextualLaunchEnablementExpression());
 		} 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 false;
 		}
 	}
@@ -204,7 +215,9 @@
 			
 			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;
 		}
 	}
@@ -235,8 +248,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..950e084 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, 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
@@ -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,9 @@
 			
 			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 +169,10 @@
 	}
 
 	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,9 @@
 			}
 			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 +295,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 +336,15 @@
 			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 +356,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 +387,9 @@
 			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 +414,9 @@
 		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 +443,9 @@
 		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..0293c1b 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,19 @@
 			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..6fbaa48 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,9 @@
 			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..c3749c4 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,14 @@
 			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 +81,14 @@
 
 	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..c0518a5 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,9 @@
 				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 +180,9 @@
 			
 			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..a9c29b3 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,14 @@
 			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 +75,16 @@
 	 */
 	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 +94,16 @@
 	 */
 	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..712b82a 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,14 @@
 			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 +136,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 +149,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 +159,47 @@
 		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 +210,9 @@
 		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 160d886..70d6f7d 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
@@ -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,15 @@
 					}
 				});
 			} 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 +150,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 +173,9 @@
 						}
 					});
 				} 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 +193,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 +206,21 @@
 				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 +264,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 +289,9 @@
 	 * 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 +303,9 @@
 							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 +313,9 @@
 				}
 			}, 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 +339,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 +366,9 @@
 					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 +382,9 @@
 					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 {
@@ -381,7 +414,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);
@@ -392,7 +427,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);
@@ -403,7 +440,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);
@@ -414,7 +453,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);
@@ -430,7 +471,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);
@@ -446,7 +489,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();
 		
@@ -459,7 +504,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;
@@ -467,7 +514,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);
@@ -476,17 +525,23 @@
 				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;
@@ -494,7 +549,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);
@@ -503,10 +560,14 @@
 				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() {
@@ -527,7 +588,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;
 	}
@@ -550,12 +613,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");
 		
@@ -574,13 +641,17 @@
 					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 {
@@ -595,7 +666,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);
+			}
 		}
 	}
 
@@ -763,7 +836,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;
@@ -789,7 +864,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");
+					}
 				}
 			}
 		}
@@ -811,7 +888,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);
 		
@@ -826,7 +905,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);
+				}
 			}
 		}
 		
@@ -843,7 +924,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);
 		
@@ -907,7 +990,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;
@@ -916,15 +1001,21 @@
 		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;
@@ -938,7 +1029,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) {
@@ -946,7 +1039,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;
 	}
 
@@ -968,7 +1063,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)
@@ -983,7 +1080,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;
@@ -993,7 +1092,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){		
@@ -1094,7 +1195,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);
@@ -1114,7 +1217,9 @@
 		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);
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..ea197a9 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, 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,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..cfa14c3 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, 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
@@ -52,7 +52,9 @@
 			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 +72,9 @@
 				}
 			}, 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..30797e2 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, 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
@@ -194,9 +194,14 @@
 					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 +257,9 @@
 			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 89bc8bc..58de85d 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
@@ -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;
@@ -683,7 +703,10 @@
 	 * 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 +720,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 +737,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;
@@ -725,7 +754,10 @@
 	 * 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 +771,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;
@@ -813,7 +848,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 +874,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 +907,9 @@
 			}
 		}
 		
-		Trace.trace(Trace.FINEST, "< isModuleDeployed() deployed="+deployed);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "< isModuleDeployed() deployed=" + deployed);
+		}
 		return deployed;
 	}
 
@@ -970,7 +1013,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 +1032,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 +1044,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 +1056,21 @@
 		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 +1079,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 +1091,30 @@
 		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 +1128,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 +1595,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 +1605,9 @@
 		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 +1656,9 @@
 									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 +1668,9 @@
 							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 +1682,9 @@
 						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 +1805,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();
@@ -1856,7 +1935,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;
 		
@@ -1866,7 +1947,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;
 		}
 		
@@ -1877,8 +1960,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);
 				}
@@ -1903,7 +1988,9 @@
 		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;
@@ -1937,7 +2024,10 @@
 					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.");
+						}
 						if (opListener != null)
 							opListener.done(Status.OK_STATUS);
 					}
@@ -1960,7 +2050,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;
 		}
 		
@@ -1971,8 +2063,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);
 				}
@@ -1983,7 +2077,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);
+			}
 		}
 	}
 
@@ -2064,7 +2160,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);
+			}
 		}
 	}
 
@@ -2518,11 +2616,15 @@
 							// 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);
+									}
 								}
 							}
 						}
@@ -2558,7 +2660,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();
 							}
@@ -2567,7 +2671,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;
@@ -2575,14 +2681,18 @@
 						}
 					}
 				} 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 {
@@ -2598,7 +2708,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) {
@@ -2608,7 +2720,9 @@
 					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;
 		}
@@ -2646,7 +2760,10 @@
 						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()));
 						}
 					}
@@ -2685,7 +2802,9 @@
 						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()));
 						}
 					}
@@ -2724,7 +2843,10 @@
 						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()));
 						}
 					}
@@ -2887,8 +3009,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();
 		
@@ -2901,7 +3028,9 @@
 			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();
 			}
 			
@@ -2921,16 +3050,23 @@
 			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 {
@@ -2940,7 +3076,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();
 				}
 			}
@@ -2950,7 +3088,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;
@@ -2977,11 +3117,15 @@
 						// 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);
+								}
 							}
 						}
 					}
@@ -3017,7 +3161,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();
 							}
@@ -3026,7 +3172,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;
@@ -3034,14 +3182,18 @@
 						}
 					}
 				} 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 {
@@ -3057,7 +3209,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) {
@@ -3067,7 +3221,9 @@
 					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;
 		}
@@ -3081,7 +3237,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;
 	}
 	
@@ -3101,11 +3259,15 @@
 						// 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);
+								}
 							}
 						}
 					}
@@ -3141,7 +3303,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();
 							}
@@ -3150,7 +3314,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;
@@ -3158,14 +3324,18 @@
 						}
 					}
 				} 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 {
@@ -3181,7 +3351,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) {
@@ -3191,7 +3363,9 @@
 					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;
 		}
@@ -3205,12 +3379,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);
@@ -3230,9 +3408,13 @@
 				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;
 		}
 	}
@@ -3253,7 +3435,9 @@
 							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);
+								}
 							}
 						}
 					}
@@ -3278,12 +3462,16 @@
 							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);
+						}
 					}
 				}
 			};
@@ -3301,7 +3489,9 @@
 						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);
@@ -3322,15 +3512,21 @@
 		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..ce56ae5 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,9 @@
 			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 +90,9 @@
 		} 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 +107,9 @@
 		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..3bda33e 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,9 @@
 					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 +259,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 +344,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 +367,15 @@
 					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..7f24187 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;
@@ -104,17 +111,29 @@
 			boolean isKindMatch = (mask & eventKind ^ ServerEvent.SERVER_CHANGE ^ ServerEvent.MODULE_CHANGE) != 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 +151,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 4b787ea..80c2c6d 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,12 +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.BundleContext;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.BundleListener;
+import org.osgi.framework.*;
+
 /**
  * The main server plugin class.
  */
@@ -218,7 +219,9 @@
 				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);
+			}
 		}
 	}
 
@@ -232,7 +235,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();
 		
@@ -260,7 +265,9 @@
 				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);
+			}
 		}
 	}
 
@@ -302,7 +309,9 @@
 	
 			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);
+			}
 		}
 	}
 
@@ -310,7 +319,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;
 		
@@ -327,6 +338,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) {
@@ -358,7 +374,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)
@@ -370,7 +388,9 @@
 		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);
 	}
@@ -385,8 +405,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) {
@@ -475,16 +500,25 @@
 			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);
+				}
 			}
 		}
 	}
@@ -566,7 +600,9 @@
 			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);
+			}
 		}
 	}
 	
@@ -608,7 +644,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");
 
@@ -617,9 +655,14 @@
 		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);
+				}
 			}
 		}
 		
@@ -636,7 +679,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 -<-");
+		}
 	}
 
 	/**
@@ -645,7 +690,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");
 		
@@ -654,9 +701,13 @@
 		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);
+				}
 			}
 		}
 		
@@ -674,7 +725,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 -<-");
+		}
 	}
 
 	/**
@@ -699,7 +752,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");
 		
@@ -708,14 +763,20 @@
 		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 -<-");
+		}
 	}
 
 	/**
@@ -766,7 +827,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");
 		
@@ -775,14 +838,20 @@
 		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 -<-");
+		}
 	}
 	
 	/**
@@ -807,7 +876,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");
 		
@@ -816,14 +887,22 @@
 		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 -<-");
+		}
 	}
 	
 
@@ -928,7 +1007,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");
 		
@@ -937,9 +1018,13 @@
 		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);
+				}
 			}
 		}
 		
@@ -956,7 +1041,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 -<-");
+		}
 	}
 
 	/**
@@ -981,7 +1068,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");
 
@@ -990,14 +1079,20 @@
 		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 -<-");
+		}
 	}
 
 	/**
@@ -1022,7 +1117,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");
 
@@ -1031,14 +1128,20 @@
 		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 -<-");
+		}
 	}
 
 	/**
@@ -1061,7 +1164,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");
 
@@ -1070,9 +1175,15 @@
 		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);
+				}
 			}
 		}
 		
@@ -1090,7 +1201,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 -<-");
+		}
 	}
 
 	/**
@@ -1101,30 +1214,45 @@
 	 * @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);
+					}
 				}
 			}
 		}
@@ -1139,7 +1267,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;
@@ -1154,7 +1284,9 @@
 						}*/
 					}
 				} 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);
+					}
 				}
 			}
 		}
@@ -1223,9 +1355,9 @@
 	 * and is now supported through the p2 repository lookup APIs
 	 */
 	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");
@@ -1240,14 +1372,22 @@
 						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) {
@@ -1282,7 +1422,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;
@@ -1329,7 +1471,9 @@
 	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");
@@ -1337,15 +1481,24 @@
 		int size = cf.length;
 		try{
 			saveEditorPrompter = (SaveEditorPrompter)cf[0].createExecutableExtension("class");
-			Trace.trace(Trace.EXTENSION_POINT, "  Loaded saveEditorPrompter: " + cf[0].getAttribute("id"));
+			if (Trace.EXTENSION_POINT) {
+				Trace.trace(Trace.STRING_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 (Trace.SEVERE) {
+				Trace.trace(Trace.STRING_SEVERE, "  Could not load saveEditorPrompter: " + cf[0].getAttribute("id"), ce);
+			}			
 		}
 		if (size < 1) {
-			Trace.trace(Trace.WARNING, "  More than one .saveEditorPrompter found, only one loaded =>"+ cf[0].getAttribute("id"));
+			if (Trace.WARNING) {
+				Trace.trace(Trace.STRING_WARNING, "  More than one .saveEditorPrompter found, only one loaded =>"
+						+ cf[0].getAttribute("id"));
+			}
 		}
 		
-		Trace.trace(Trace.EXTENSION_POINT, "-<- Done loading .saveEditorPrompter extension point -<-");
+		if (Trace.EXTENSION_POINT) {
+			Trace.trace(Trace.STRING_EXTENSION_POINT, "-<- Done loading .saveEditorPrompter extension point -<-");
+		}
 		
 	}
 	
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..15bdf9f 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, 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
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..fe36104 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,17 @@
 					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 +296,9 @@
 					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 +308,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 +330,9 @@
 				}
 			}
 		} 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..9ea581a 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, 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
@@ -243,7 +243,9 @@
 				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..02455b8 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,15 @@
 					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);
+					}
 				}
 			}
 		}
@@ -593,7 +599,9 @@
 		} 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 +664,9 @@
 			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 +776,9 @@
 		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 +795,15 @@
 		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..cfaefc8 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, 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,81 +17,122 @@
 
 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..9d60d38 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,15 @@
 					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..dd6d9a9 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, 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
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..5e87cfd 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, 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 @@
 	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,14 @@
 		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 +107,21 @@
 		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 +130,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 +140,21 @@
 		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..c00eafa 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, 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
@@ -162,7 +162,9 @@
 				}
 			}
 		} 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 +195,9 @@
 		} 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..f0d53df 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, 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
@@ -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..1faa3bd 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, 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
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..67d5c1c 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, 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
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..852afc8 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, 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
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 965ab16..e1b258e 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
@@ -898,7 +898,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);
@@ -919,7 +921,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())
@@ -955,25 +959,35 @@
 			
 			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];
@@ -1017,11 +1031,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 {
@@ -1033,7 +1051,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");
+			}
 		}
 	}
 
@@ -1187,7 +1207,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;
@@ -1214,7 +1236,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;
 			}
 			
@@ -1250,7 +1274,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;
@@ -1263,7 +1289,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());
 			}
 			
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..cb3a40e 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, 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
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..3d03363 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, 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
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..0b5c111 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,18 @@
 							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 +290,9 @@
 				}
 			}
 		} 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..77c4601 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,10 @@
 			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 +164,9 @@
 				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 +474,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 +545,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 +605,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 +779,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..e21873b 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, 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
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..e50f3b1 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
@@ -301,7 +301,9 @@
 				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);
+			}
 		}
 		
 		// check for current thread and wait if necessary
@@ -316,7 +318,9 @@
 				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 +367,9 @@
 				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 +397,9 @@
 						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/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..d3a29b6 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, 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
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..577c4b9 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, 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
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..42d6d45 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
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..0b70aad 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, 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
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..e57f9b8 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
@@ -173,7 +173,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 +245,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 e4adfe9..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
@@ -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,7 +72,9 @@
 		if (state == IServer.STATE_STARTING)
 			return Status.OK_STATUS;
 		
-		Trace.trace(Trace.FINER, "LaunchClient job 3");
+		if (Trace.FINER) {
+			Trace.trace(Trace.STRING_FINER, "LaunchClient job 3");
+		}
 
 		// job return status
 		final IStatus[] resultingStatus = new IStatus[] { Status.OK_STATUS };
@@ -89,19 +95,25 @@
 		if (launchable[0] != null) {
 			Display.getDefault().asyncExec(new Runnable() {
 				public void run() {
-					Trace.trace(Trace.FINEST, "Attempting to load client: " + client.getId());
+					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) {
-						Trace.trace(Trace.SEVERE, "Server client failed", e);
+						if (Trace.SEVERE) {
+							Trace.trace(Trace.STRING_SEVERE, "Server client failed", e);
+						}
 					}
 				}
 			});
 		}
-		Trace.trace(Trace.FINER, "LaunchClient job 4");
+		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/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 dce54ff..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
@@ -220,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()) {
@@ -236,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()) {
@@ -257,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();
@@ -268,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();
 			}
@@ -316,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);
+						}
 					}
 				}
 			}
@@ -332,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;
 	}
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..f8f5906 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, 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
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..1c45212 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, 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
@@ -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 0c727ba..c67db9c 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,8 +218,12 @@
 	 * @see Plugin#start(org.osgi.framework.BundleContext)
 	 */
 	public void start(BundleContext context) throws Exception {
-		Trace.trace(Trace.CONFIG, "----->----- Server UI plugin start ----->-----");
+
 		super.start(context);
+
+		if (Trace.CONFIG) {
+			Trace.trace(Trace.STRING_CONFIG, "----->----- Server UI plugin start ----->-----");
+		}
 		
 		ServerCore.addServerLifecycleListener(serverLifecycleListener);
 
@@ -225,13 +232,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 +438,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 +503,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;
 					}
 					
@@ -505,7 +523,9 @@
 						}
 					}
 				} 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);
+					}
 				}
 			}
 		});
@@ -675,7 +695,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);
 		
@@ -684,7 +706,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 -<-");
+		}
 	}
 
 	/**
@@ -698,9 +722,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);
+				}
 			}
 		}
 	}
@@ -767,7 +795,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");
@@ -777,16 +807,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 -<-");
+		}
 	}
 
 	/**
@@ -796,7 +835,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");
@@ -804,16 +845,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 -<-");
+		}
 	}
 	
 	/**
@@ -824,7 +874,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");
@@ -835,22 +887,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 -<-");
+		}
 	}	
 	
 	/**
@@ -860,26 +921,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) {
@@ -890,9 +963,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;
@@ -991,7 +1071,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]);
 			}
@@ -1011,13 +1093,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..85e3910 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, 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
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/Trace.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/Trace.java
index c8513f7..ef590bd 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, 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,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/RunOnServerActionDelegate.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/actions/RunOnServerActionDelegate.java
index c07ccec..6800feb 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
@@ -113,7 +113,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;
 			}
 		}
@@ -126,7 +128,9 @@
 		
 		if (server == null) {
 			// try the full wizard
-			Trace.trace(Trace.FINEST, "Launching wizard");
+			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);
@@ -139,7 +143,9 @@
 			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();
@@ -163,7 +169,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;
@@ -176,7 +184,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;
 		}
 		
@@ -215,7 +225,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();
@@ -254,7 +266,9 @@
 			}
 			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;
 			}
 		}
@@ -287,11 +301,15 @@
 		//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;
 		}
 		
@@ -343,7 +361,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 {
@@ -351,7 +372,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;
 			}
@@ -359,7 +382,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
@@ -505,7 +530,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);
+			}
 		}
 	}
 
@@ -534,13 +561,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);
+						}
 					}
 				}
 			}
@@ -703,11 +734,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);
+			}
 		}
 	}
 
@@ -745,7 +780,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)) {
@@ -766,9 +803,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)) {
@@ -776,7 +817,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;
@@ -786,7 +829,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 {
@@ -797,7 +842,9 @@
 		}
 		
 		action.setEnabled(isEnabled());
-		Trace.trace(Trace.FINEST, "< selectionChanged " + (System.currentTimeMillis() - time));
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "< selectionChanged " + (System.currentTimeMillis() - time));
+		}
 	}
 
 	/**
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 e3a9e14..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
@@ -91,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);
+					}
 				}
 			}
 		});
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 93014fe..b1006c0 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
@@ -144,12 +144,16 @@
 	 * @param server
 	 */
 	protected void refreshServer(final IServer server){
-		Trace.trace(Trace.FINEST, "Refreshing UI for server="+server);
+		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())
@@ -159,7 +163,9 @@
 	}
 	
 	protected void refreshServerState(final IServer server){
-		Trace.trace(Trace.FINEST, "Refreshing UI for server="+server);
+		if (Trace.FINEST) {
+			Trace.trace(Trace.STRING_FINEST, "Refreshing UI for server=" + server);
+		}
 		ServerDecoratorsHandler.refresh(tableViewer);
 	}
 	
@@ -321,7 +327,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/command/SetServerAutoPublishDefaultCommand.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/command/SetServerAutoPublishDefaultCommand.java
index 298928e..04a744d 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, 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
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..e2586ab 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, 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
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 dcae3e6..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
@@ -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 e4f5b5a..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
@@ -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;
 		}
 	}
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 bd46cf1..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
@@ -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;
 		}
 	}
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..6698388 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, 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
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..e05186d 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, 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
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..d767685 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, 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 @@
 								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..da684aa 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, 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
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/AbstractTreeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/AbstractTreeComposite.java
index 784fafa..755d025 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, 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
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..3133d01 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, 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
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..abdea4b 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, 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
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..c0c3f06 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, 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
@@ -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..fa7b16e 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, 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
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..74c72bb 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, 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
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..a18b56e 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, 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
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..ff2c1ec 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, 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
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/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/OptionalClientWizardFragment.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/wizard/fragment/OptionalClientWizardFragment.java
index 9595265..90c1fe1 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, 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
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..424b697 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);
+						} 
 					}
 				}
 			}
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 bc078ce..4d575af 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
@@ -344,7 +344,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() {
@@ -465,7 +467,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);
@@ -523,7 +527,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);
+			}
 		}
 	}
 
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..670ba91 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)
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..3c7e505 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, 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