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 e1b258e..352faf3 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, 2011 IBM Corporation and others.
+ * Copyright (c) 2005, 2012 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -920,11 +920,32 @@
 		if (monitor.isCanceled())
 			return Status.CANCEL_STATUS;
 		
+		/**
+		 * Trace time for when publishing begins.
+		 */
+		long publishStartTime = 0;
+		/**
+		 * Trace time of the previous publishing action.
+		 */
+		long previousPublishActionTime = publishStartTime;
+		if(Trace.PERFORMANCE) {
+			publishStartTime = System.currentTimeMillis();
+			previousPublishActionTime = publishStartTime;
+		}
 		try {
+			if(Trace.PERFORMANCE) {
+				Trace.trace(Trace.STRING_PERFORMANCE, "ServerBehaviourDelegate.publish(): start");
+			}
 			if (Trace.FINEST) {
 				Trace.trace(Trace.STRING_FINEST, "Starting publish");
 			}
 			publishStart(ProgressUtil.getSubMonitorFor(monitor, 1000));
+			long currentTime = 0;
+			if(Trace.PERFORMANCE) {
+				currentTime = System.currentTimeMillis();
+				Trace.trace(Trace.STRING_PERFORMANCE, "ServerBehaviourDelegate.publish(): publish start <" + (currentTime - previousPublishActionTime) + "> " + getServer().getServerType().getId());
+				previousPublishActionTime = currentTime;
+			}
 			
 			if (monitor.isCanceled())
 				return Status.CANCEL_STATUS;
@@ -937,6 +958,12 @@
 			
 			// execute publishers
 			taskStatus = executePublishers(kind, moduleList, deltaKindList, monitor, info2);
+			if(Trace.PERFORMANCE) {
+				currentTime = System.currentTimeMillis();
+				Trace.trace(Trace.STRING_PERFORMANCE, "ServerBehaviourDelegate.publish(): run publishers <" + (currentTime - previousPublishActionTime) + "> " + getServer().getServerType().getId());
+				previousPublishActionTime = currentTime;
+			}
+			
 			monitor.setTaskName(mainTaskMsg);
 			if (taskStatus != null && !taskStatus.isOK())
 				tempMulti.addAll(taskStatus);
@@ -947,12 +974,22 @@
 			// publish the server
 			publishServer(kind, ProgressUtil.getSubMonitorFor(monitor, 1000));
 			monitor.setTaskName(mainTaskMsg);
+			if(Trace.PERFORMANCE) {
+				currentTime = System.currentTimeMillis();
+				Trace.trace(Trace.STRING_PERFORMANCE, "ServerBehaviourDelegate.publish(): publisher server <" + (currentTime - previousPublishActionTime) + "> " + getServer().getServerType().getId());
+				previousPublishActionTime = currentTime;
+			}
 			
 			if (monitor.isCanceled())
 				return Status.CANCEL_STATUS;
 			
 			// publish modules
 			publishModules(kind, moduleList, deltaKindList, tempMulti, monitor);
+			if(Trace.PERFORMANCE) {
+				currentTime = System.currentTimeMillis();
+				Trace.trace(Trace.STRING_PERFORMANCE, "ServerBehaviourDelegate.publish(): publish modules <" + (currentTime - previousPublishActionTime) + "> " + getServer().getServerType().getId());
+				previousPublishActionTime = currentTime;
+			}
 			
 			if (monitor.isCanceled())
 				return Status.CANCEL_STATUS;
@@ -972,6 +1009,11 @@
 			// end the publishing
 			try {
 				publishFinish(ProgressUtil.getSubMonitorFor(monitor, 500));
+				if(Trace.PERFORMANCE) {
+					long currentTime = System.currentTimeMillis();
+					Trace.trace(Trace.STRING_PERFORMANCE, "ServerBehaviourDelegate.publish(): publish finish <" + (currentTime - previousPublishActionTime) + "> " + getServer().getServerType().getId());
+					previousPublishActionTime = currentTime;
+				}
 			} catch (CoreException ce) {
 				if (Trace.INFO) {
 					Trace.trace(Trace.STRING_INFO, "CoreException publishing to " + toString(), ce);
@@ -983,6 +1025,9 @@
 				}
 				tempMulti.add(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, Messages.errorPublishing, e));
 			}
+			if(Trace.PERFORMANCE) {
+				Trace.trace(Trace.STRING_PERFORMANCE, "ServerBehaviourDelegate.publish(): <" + (previousPublishActionTime - publishStartTime) + "> " + getServer().getServerType().getId());
+			}
 		}
 		
 		if (Trace.FINEST) {
