diff --git a/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html b/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
index e9540d9..2766708 100644
--- a/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
+++ b/features/org.eclipse.wst.server_core.feature.patch/buildnotes_org.eclipse.wst.server_core.feature.patch.html
@@ -17,6 +17,8 @@
 <p>Bug <a href='https://bugs.eclipse.org/364482'>364482</a>. A race condition could occur in Server code</p>
 <p>Bug <a href='https://bugs.eclipse.org/370832'>370832</a>. Auto publish will not triggered for structure changes</p>
 <p>Bug <a href='https://bugs.eclipse.org/370992'>370992</a>. Extensible Server Start Jobs</p>
+<p>Bug <a href='https://bugs.eclipse.org/377566'>377566</a>. The server timeout timer begins at the incorrect time</p>
+<p>Bug <a href='https://bugs.eclipse.org/377835'>377835</a>. The JavaDoc and implementation isn't consistent for utility method ServerUtil.setRuntimeDefaultName() - Port to WTP 3.2.5 patches</p>
 
 
 </body></html>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.server_core.feature.patch/feature.properties b/features/org.eclipse.wst.server_core.feature.patch/feature.properties
index ebad37a..3282694 100644
--- a/features/org.eclipse.wst.server_core.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.server_core.feature.patch/feature.properties
@@ -30,6 +30,8 @@
 Bug https://bugs.eclipse.org/364482 A race condition could occur in Server code\n\
 Bug https://bugs.eclipse.org/370832 Auto publish will not triggered for structure changes\n\
 Bug https://bugs.eclipse.org/370992 Extensible Server Start Jobs\n\
+Bug https://bugs.eclipse.org/377566 The server timeout timer begins at the incorrect time\n\
+Bug https://bugs.eclipse.org/377835 The JavaDoc and implementation isn't consistent for utility method ServerUtil.setRuntimeDefaultName() - Port to WTP 3.2.5 patches\n\
 \n\
 # "copyright" property - text of the "Feature Update Copyright"
 copyright=\
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 30bc068..8e243a0 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerUtil.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * Copyright (c) 2003, 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
@@ -394,7 +394,8 @@
 	 * @param suffix
 	 *          the numbering to start at for the suffix, if suffix is -1, then the no suffix name will be tried first.
 	 * @return the suffix it found no name conflicts at and is using as part of
-	 *         the default name
+	 *         the default name. If suffix passed in was -1 and the no suffix name 
+	 *         does not conflict, the suffix returned is -1
 	 */
 	public static int setRuntimeDefaultName(IRuntimeWorkingCopy runtime, int suffix) {
 		String typeName = runtime.getRuntimeType().getName();
@@ -402,16 +403,26 @@
 		String name = null;
 		if (suffix == -1) {
 			name = NLS.bind(Messages.defaultRuntimeName, typeName);
-			// Start next suffix from 2 to preserve the original behaviour before this change.
-			suffix = 2;
 		} else {
 			name = NLS.bind(Messages.defaultRuntimeName2, new String[] { typeName, suffix + "" });
 		}
 
-		while (ServerPlugin.isNameInUse(runtime.getOriginal(), name)) {
+		if (ServerPlugin.isNameInUse(runtime.getOriginal(), name)){
+			if (suffix == -1){
+				// If the no suffix name is in use, the next suffix to try is 2
+				suffix = 2;
+			}
+			else {
+				suffix++;
+			}
+			
 			name = NLS.bind(Messages.defaultRuntimeName2, new String[] { typeName, suffix + "" });
-			suffix++;
+			while (ServerPlugin.isNameInUse(runtime.getOriginal(), name)) {
+				suffix++;
+				name = NLS.bind(Messages.defaultRuntimeName2, new String[] { typeName, suffix + "" });
+			}
 		}
+		
 		runtime.setName(name);
 		return suffix;
 	}
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 bfec066..1bdaf42 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
@@ -3290,8 +3290,6 @@
 				}
 			}
 		};
-		thread.setDaemon(true);
-		thread.start();
 		
 		if (Trace.FINEST) {
 			Trace.trace(Trace.STRING_FINEST, "synchronousRestart 2");
@@ -3300,6 +3298,9 @@
 		// call the delegate restart
 		try {
 			getBehaviourDelegate(null).restart(launchMode);
+			
+			thread.setDaemon(true);
+			thread.start();
 		} catch (CoreException e) {
 			removeServerListener(listener);
 			timer.alreadyDone = true;
@@ -3435,8 +3436,6 @@
 				}
 			}
 		};
-		thread.setDaemon(true);
-		thread.start();
 	
 		if (Trace.FINEST) {
 			Trace.trace(Trace.STRING_FINEST, "synchronousStart 2");
@@ -3445,9 +3444,11 @@
 		// start the server
 		try {
 			startImpl2(launchMode, monitor);
+			
+			thread.setDaemon(true);
+			thread.start();			
 		} catch (CoreException e) {
 			removeServerListener(listener);
-			timer.alreadyDone = true;
 			return e.getStatus();
 		}
 		if (monitor.isCanceled()) {
@@ -3561,11 +3562,23 @@
 		final Timer timer = new Timer();
 		
 		final int serverTimeout = getStopTimeout() * 1000;
+		Thread thread = null;
 		if (serverTimeout > 0) {
-			Thread thread = new Thread("Server Stop Timeout") {
+			thread = new Thread("Server Stop Timeout") {
 				public void run() {
-					try {
-						Thread.sleep(serverTimeout);
+					try {					
+						int totalTimeout = serverTimeout;
+						if (totalTimeout < 0)
+							totalTimeout = 1;
+						
+						int retryPeriod = 1000;						
+						
+						while (totalTimeout > 0 && !timer.alreadyDone){
+							Thread.sleep(retryPeriod);
+							if (serverTimeout > 0)
+								totalTimeout -= retryPeriod;
+						}
+
 						if (!timer.alreadyDone) {
 							timer.timeout = true;
 							// notify waiter
@@ -3584,13 +3597,16 @@
 					}
 				}
 			};
-			thread.setDaemon(true);
-			thread.start();
 		}
 		
 		// stop the server
 		stopImpl2(force);
 		
+		if (thread != null){
+			thread.setDaemon(true);
+			thread.start();
+		}
+		
 		// wait for it! wait for it!
 		synchronized (mutex) {
 			try {
@@ -3603,6 +3619,7 @@
 							"Error waiting for server stop", e);
 				}
 			}
+			timer.alreadyDone = true;
 		}
 		removeServerListener(listener);
 		
