diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/CatalinaPropertiesUtil.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/CatalinaPropertiesUtil.java
index 9876742..4c96c47 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/CatalinaPropertiesUtil.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/CatalinaPropertiesUtil.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
@@ -110,7 +110,7 @@
             loaderProperty = propAndValue[1];
         }
 
-        Set classpath = new LinkedHashSet();
+        Set<String> classpath = new LinkedHashSet<String>();
 
         StringTokenizer st = new StringTokenizer(loaderProperty, ",");
         while (st.hasMoreTokens()) {
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
index 0b0c7b3..ed5dbb4 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishOperation2.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,7 @@
 	 * @see PublishOperation#execute(IProgressMonitor, IAdaptable)
 	 */
 	public void execute(IProgressMonitor monitor, IAdaptable info) throws CoreException {
-		List status = new ArrayList();
+		List<IStatus> status = new ArrayList<IStatus>();
 		// If parent web module
 		if (module.length == 1) {
 			publishDir(module[0], status, monitor);
@@ -110,7 +110,7 @@
 		server.setModulePublishState2(module, IServer.PUBLISH_STATE_NONE);
 	}
 
-	private void publishDir(IModule module2, List status, IProgressMonitor monitor) throws CoreException {
+	private void publishDir(IModule module2, List<IStatus> status, IProgressMonitor monitor) throws CoreException {
 		IPath path = server.getModuleDeployDirectory(module2);
 		
 		// Remove if requested or if previously published and are now serving without publishing
@@ -143,7 +143,7 @@
 		}
 	}
 
-	private void publishJar(String jarURI, Properties p, List status, IProgressMonitor monitor) throws CoreException {
+	private void publishJar(String jarURI, Properties p, List<IStatus> status, IProgressMonitor monitor) throws CoreException {
 		IPath path = server.getModuleDeployDirectory(module[0]);
 		boolean moving = false;
 		// Get URI used for previous publish, if known
@@ -196,7 +196,7 @@
 		p.put(module[1].getId(), jarURI);
 	}
 
-	private void publishArchiveModule(String jarURI, Properties p, List status, IProgressMonitor monitor) {
+	private void publishArchiveModule(String jarURI, Properties p, List<IStatus> status, IProgressMonitor monitor) {
 		IPath path = server.getModuleDeployDirectory(module[0]);
 		boolean moving = false;
 		// Get URI used for previous publish, if known
@@ -257,12 +257,12 @@
 	 * @param status a List containing error and warning IStatus
 	 * @throws CoreException
 	 */
-	protected static void throwException(List status) throws CoreException {
+	protected static void throwException(List<IStatus> status) throws CoreException {
 		if (status == null || status.size() == 0)
 			return;
 		
 		if (status.size() == 1) {
-			IStatus status2 = (IStatus) status.get(0);
+			IStatus status2 = status.get(0);
 			throw new CoreException(status2);
 		}
 		IStatus[] children = new IStatus[status.size()];
@@ -272,7 +272,7 @@
 		throw new CoreException(status2);
 	}
 
-	protected static void addArrayToList(List list, IStatus[] a) {
+	protected static void addArrayToList(List<IStatus> list, IStatus[] a) {
 		if (list == null || a == null || a.length == 0)
 			return;
 		
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java
index 4b3d556..194a6ad 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/PublishTask.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
@@ -26,7 +26,7 @@
 		if (!tomcatServer.getTomcatServer().isTestEnvironment())
 			return null;
 		
-		List tasks = new ArrayList();
+		List<PublishOperation> tasks = new ArrayList<PublishOperation>();
 		int size = modules.size();
 		for (int i = 0; i < size; i++) {
 			IModule[] module = (IModule[]) modules.get(i);
@@ -34,6 +34,6 @@
 			tasks.add(new PublishOperation2(tomcatServer, kind, module, in.intValue()));
 		}
 		
-		return (PublishOperation[]) tasks.toArray(new PublishOperation[tasks.size()]);
+		return tasks.toArray(new PublishOperation[tasks.size()]);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java
index ca05108..b18e1dc 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Configuration.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
@@ -108,7 +108,7 @@
 	 * @return java.util.List
 	 */
 	public List getServerPorts() {
-		List ports = new ArrayList();
+		List<ServerPort> ports = new ArrayList<ServerPort>();
 	
 		try {
 			Connector [] connectors = serverInstance.getConnectors();
@@ -173,7 +173,7 @@
 	 * @return java.util.List
 	 */
 	public List getWebModules() {
-		List list = new ArrayList();
+		List<WebModule> list = new ArrayList<WebModule>();
 	
 		try {
 			Context [] contexts = serverInstance.getContexts();
@@ -503,7 +503,7 @@
 			// If not deploying to "webapps", context docBase attributes need updating
 			boolean deployingToWebapps = "webapps".equals(server2.getDeployDirectory());
 			
-			Map pathMap = new HashMap();
+			Map<String, String> pathMap = new HashMap<String, String>();
 			
 			MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, 
 					NLS.bind(Messages.errorPublishServer, server2.getServer().getName()), null);
@@ -532,7 +532,7 @@
 							pathMap.put(lcPath, origPath);
 						}
 						else {
-							String otherPath = (String)pathMap.get(lcPath);
+							String otherPath = pathMap.get(lcPath);
 							IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID,
 									origPath.equals(otherPath) ? NLS.bind(Messages.errorPublishPathDup, origPath) 
 											: NLS.bind(Messages.errorPublishPathConflict, origPath, otherPath));
@@ -694,7 +694,7 @@
 				ServerInstance oldInstance = new ServerInstance(oldServer);
 				
 				// Collect paths of old web modules managed by WTP
-				Set oldPaths = new HashSet();
+				Set<String> oldPaths = new HashSet<String>();
 				Context [] contexts = oldInstance.getContexts();
 				if (contexts != null) {
 					for (int i = 0; i < contexts.length; i++) {
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
index bf8b227..76fd28a 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat32Handler.java
@@ -17,6 +17,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.wst.server.core.IModule;
 /**
@@ -41,7 +42,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath, IPath)
 	 */
 	public List getRuntimeClasspath(IPath installPath, IPath configPath) {
-		List cp = new ArrayList();
+		List<IRuntimeClasspathEntry> cp = new ArrayList<IRuntimeClasspathEntry>();
 		// add all jars from the Tomcat lib directory
 		File libDir = installPath.append("lib").toFile();
 		if (libDir.exists()) {
@@ -61,7 +62,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
 	 */
 	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		if (configPath != null) {
 			list.add("-f \"" + configPath.append("conf").append("server.xml").toOSString() + "\"");
 		}
@@ -85,7 +86,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, IPath, boolean)
 	 */
 	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, IPath deployPath, boolean isTestEnv) {
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		list.add("-Dtomcat.home=\"" + installPath.toOSString() + "\"");
 		// Include a system property for the configurable deploy location
 		list.add("-Dwtp.deploy=\"" + deployPath.toOSString() + "\"");
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java
index 18009d9..a12fa1b 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Configuration.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
@@ -98,7 +98,7 @@
 	 * @return java.util.List
 	 */
 	public List getServerPorts() {
-		List ports = new ArrayList();
+		List<ServerPort> ports = new ArrayList<ServerPort>();
 	
 		// first add server port
 		try {
@@ -168,7 +168,7 @@
 	 * @return java.util.List
 	 */
 	public List getWebModules() {
-		List list = new ArrayList();
+		List<WebModule> list = new ArrayList<WebModule>();
 	
 		try {
 			Context [] contexts = serverInstance.getContexts();
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
index 352376e..f153168 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat40Handler.java
@@ -16,6 +16,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.wst.server.core.IModule;
 /**
@@ -40,7 +41,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath, IPath)
 	 */
 	public List getRuntimeClasspath(IPath installPath, IPath configPath) {
-		List cp = new ArrayList();
+		List<IRuntimeClasspathEntry> cp = new ArrayList<IRuntimeClasspathEntry>();
 		
 		// 4.0 - add bootstrap.jar from the Tomcat bin directory
 		IPath binPath = installPath.append("bin");
@@ -56,7 +57,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
 	 */
 	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		
 		if (debug)
 			list.add("-debug");
@@ -85,7 +86,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeVMArguments(IPath, IPath, IPath, boolean)
 	 */
 	public String[] getRuntimeVMArguments(IPath installPath, IPath configPath, IPath deployPath, boolean isTestEnv) {
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		if (isTestEnv)
 			list.add("-Dcatalina.base=\"" + configPath.toOSString() + "\"");
 		else 
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java
index ef0ebf2..67ed8c5 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Configuration.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
@@ -100,7 +100,7 @@
 	 * @return java.util.List
 	 */
 	public List getServerPorts() {
-		List ports = new ArrayList();
+		List<ServerPort> ports = new ArrayList<ServerPort>();
 	
 		// first add server port
 		try {
@@ -175,7 +175,7 @@
 	 * @return java.util.List
 	 */
 	public List getWebModules() {
-		List list = new ArrayList();
+		List<WebModule> list = new ArrayList<WebModule>();
 	
 		try {
 			Context [] contexts = serverInstance.getContexts();
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
index 0a3e3f8..6e6db23 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat41Handler.java
@@ -16,6 +16,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.wst.server.core.IModule;
 /**
@@ -45,7 +46,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath, IPath)
 	 */
 	public List getRuntimeClasspath(IPath installPath, IPath configPath) {
-		List cp = new ArrayList();
+		List<IRuntimeClasspathEntry> cp = new ArrayList<IRuntimeClasspathEntry>();
 		
 		// 4.1 - add bootstrap.jar from the Tomcat bin directory
 		IPath binPath = installPath.append("bin");
@@ -61,7 +62,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
 	 */
 	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		
 		if (debug)
 			list.add("-debug");
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
index 0d48d4f..6be6a44 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Configuration.java
@@ -59,7 +59,7 @@
 
 	protected String propertiesFile;
 	
-	protected static final Map protocolHandlerMap = new HashMap();
+	protected static final Map<String, String> protocolHandlerMap = new HashMap<String, String>();
 	static {
 		protocolHandlerMap.put("org.apache.coyote.http11.Http11Protocol", "HTTP/1.1");
 		protocolHandlerMap.put("org.apache.jk.server.JkCoyoteHandler", "AJP/1.3");
@@ -103,7 +103,7 @@
 	 * @return java.util.List
 	 */
 	public List getServerPorts() {
-		List ports = new ArrayList();
+		List<ServerPort> ports = new ArrayList<ServerPort>();
 	
 		// first add server port
 		try {
@@ -143,7 +143,7 @@
 						}
 						else {
 							// Get Tomcat equivalent name if protocol handler class specified
-							name = (String)protocolHandlerMap.get(protocol);
+							name = protocolHandlerMap.get(protocol);
 							if (name != null) {
 								// Prepare simple protocol string for ServerPort protocol
 								int index = name.indexOf('/');
@@ -186,7 +186,7 @@
 	 * @return java.util.List
 	 */
 	public List getWebModules() {
-		List list = new ArrayList();
+		List<WebModule> list = new ArrayList<WebModule>();
 	
 		try {
 			Context [] contexts = serverInstance.getContexts();
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java
index 8a39552..a08dd26 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat50Handler.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
@@ -16,6 +16,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.wst.server.core.IModule;
 /**
@@ -45,7 +46,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath, IPath)
 	 */
 	public List getRuntimeClasspath(IPath installPath, IPath configPath) {
-		List cp = new ArrayList();
+		List<IRuntimeClasspathEntry> cp = new ArrayList<IRuntimeClasspathEntry>();
 		
 		// 5.0 - add bootstrap.jar from the Tomcat bin directory
 		IPath binPath = installPath.append("bin");
@@ -61,7 +62,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
 	 */
 	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		
 		if (debug)
 			list.add("-debug");
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
index 8dfadfa..994327d 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat55Configuration.java
@@ -61,7 +61,7 @@
 
 	protected String propertiesFile;
 
-	protected static final Map protocolHandlerMap = new HashMap();
+	protected static final Map<String, String> protocolHandlerMap = new HashMap<String, String>();
 	static {
 		protocolHandlerMap.put("org.apache.coyote.http11.Http11Protocol", "HTTP/1.1");
 		protocolHandlerMap.put("org.apache.coyote.http11.Http11AprProtocol", "HTTP/1.1");
@@ -107,7 +107,7 @@
 	 * @return java.util.List
 	 */
 	public List getServerPorts() {
-		List ports = new ArrayList();
+		List<ServerPort> ports = new ArrayList<ServerPort>();
 	
 		// first add server port
 		try {
@@ -147,7 +147,7 @@
 						}
 						else {
 							// Get Tomcat equivalent name if protocol handler class specified
-							name = (String)protocolHandlerMap.get(protocol);
+							name = protocolHandlerMap.get(protocol);
 							if (name != null) {
 								// Prepare simple protocol string for ServerPort protocol
 								int index = name.indexOf('/');
@@ -190,7 +190,7 @@
 	 * @return java.util.List
 	 */
 	public List getWebModules() {
-		List list = new ArrayList();
+		List<WebModule> list = new ArrayList<WebModule>();
 	
 		try {
 			Context [] contexts = serverInstance.getContexts();
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Configuration.java
index 89550ba..098a4e7 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Configuration.java
@@ -62,7 +62,7 @@
 
 	protected String propertiesFile;
 	
-	protected static final Map protocolHandlerMap = new HashMap();
+	protected static final Map<String, String> protocolHandlerMap = new HashMap<String, String>();
 	static {
 		protocolHandlerMap.put("org.apache.coyote.http11.Http11Protocol", "HTTP/1.1");
 		protocolHandlerMap.put("org.apache.coyote.http11.Http11NioProtocol", "HTTP/1.1");
@@ -109,7 +109,7 @@
 	 * @return java.util.List
 	 */
 	public List getServerPorts() {
-		List ports = new ArrayList();
+		List<ServerPort> ports = new ArrayList<ServerPort>();
 	
 		// first add server port
 		try {
@@ -149,7 +149,7 @@
 						}
 						else {
 							// Get Tomcat equivalent name if protocol handler class specified
-							name = (String)protocolHandlerMap.get(protocol);
+							name = protocolHandlerMap.get(protocol);
 							if (name != null) {
 								// Prepare simple protocol string for ServerPort protocol
 								int index = name.indexOf('/');
@@ -192,7 +192,7 @@
 	 * @return java.util.List
 	 */
 	public List getWebModules() {
-		List list = new ArrayList();
+		List<WebModule> list = new ArrayList<WebModule>();
 	
 		try {
 			Context [] contexts = serverInstance.getContexts();
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java
index 1b1e807..4135611 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat60Handler.java
@@ -16,6 +16,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.wst.server.core.IModule;
 /**
@@ -45,7 +46,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath, IPath)
 	 */
 	public List getRuntimeClasspath(IPath installPath, IPath configPath) {
-		List cp = new ArrayList();
+		List<IRuntimeClasspathEntry> cp = new ArrayList<IRuntimeClasspathEntry>();
 		
 		// 6.0 - add bootstrap.jar from the Tomcat bin directory
 		IPath binPath = installPath.append("bin");
@@ -61,7 +62,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
 	 */
 	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 
 		if (starting)
 			list.add("start");
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat70Configuration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat70Configuration.java
index a0af5f1..dc37b1d 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat70Configuration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat70Configuration.java
@@ -62,7 +62,7 @@
 
 	protected String propertiesFile;
 	
-	protected static final Map protocolHandlerMap = new HashMap();
+	protected static final Map<String, String> protocolHandlerMap = new HashMap<String, String>();
 	static {
 		protocolHandlerMap.put("org.apache.coyote.http11.Http11Protocol", "HTTP/1.1");
 		protocolHandlerMap.put("org.apache.coyote.http11.Http11NioProtocol", "HTTP/1.1");
@@ -109,7 +109,7 @@
 	 * @return java.util.List
 	 */
 	public List getServerPorts() {
-		List ports = new ArrayList();
+		List<ServerPort> ports = new ArrayList<ServerPort>();
 	
 		// first add server port
 		try {
@@ -149,7 +149,7 @@
 						}
 						else {
 							// Get Tomcat equivalent name if protocol handler class specified
-							name = (String)protocolHandlerMap.get(protocol);
+							name = protocolHandlerMap.get(protocol);
 							if (name != null) {
 								// Prepare simple protocol string for ServerPort protocol
 								int index = name.indexOf('/');
@@ -192,7 +192,7 @@
 	 * @return java.util.List
 	 */
 	public List getWebModules() {
-		List list = new ArrayList();
+		List<WebModule> list = new ArrayList<WebModule>();
 	
 		try {
 			Context [] contexts = serverInstance.getContexts();
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat70Handler.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat70Handler.java
index d803bf4..98bcb32 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat70Handler.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/Tomcat70Handler.java
@@ -16,6 +16,7 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.wst.server.core.IModule;
 /**
@@ -45,7 +46,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeClasspath(IPath, IPath)
 	 */
 	public List getRuntimeClasspath(IPath installPath, IPath configPath) {
-		List cp = new ArrayList();
+		List<IRuntimeClasspathEntry> cp = new ArrayList<IRuntimeClasspathEntry>();
 		
 		// 7.0 - add bootstrap.jar and tomcat-juli.jar from the Tomcat bin directory
 		IPath binPath = installPath.append("bin");
@@ -73,7 +74,7 @@
 	 * @see ITomcatVersionHandler#getRuntimeProgramArguments(IPath, boolean, boolean)
 	 */
 	public String[] getRuntimeProgramArguments(IPath configPath, boolean debug, boolean starting) {
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 
 		if (starting)
 			list.add("start");
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
index 37816d8..c905841 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatConfiguration.java
@@ -46,7 +46,7 @@
 	protected IFolder configPath;
 
 	// property change listeners
-	private transient List propertyListeners;
+	private transient List<PropertyChangeListener> propertyListeners;
 
 	/**
 	 * TomcatConfiguration constructor.
@@ -300,7 +300,7 @@
 	 */
 	public void addPropertyChangeListener(PropertyChangeListener listener) {
 		if (propertyListeners == null)
-			propertyListeners = new ArrayList();
+			propertyListeners = new ArrayList<PropertyChangeListener>();
 		propertyListeners.add(listener);
 	}
 
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java
index 1df80c0..814d90b 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPlugin.java
@@ -185,7 +185,7 @@
 			verify.replace('/', File.separatorChar);
 
 			StringTokenizer st = new StringTokenizer(verify, ",");
-			List list = new ArrayList();
+			List<VerifyResourceSpec> list = new ArrayList<VerifyResourceSpec>();
 			while (st.hasMoreTokens())
 				list.add(new VerifyResourceSpec(st.nextToken()));
 			Trace.trace(Trace.FINEST, "Verify32: " + list.toString());
@@ -201,7 +201,7 @@
 			verify.replace('/', File.separatorChar);
 
 			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
+			list = new ArrayList<VerifyResourceSpec>();
 			while (st.hasMoreTokens())
 				list.add(new VerifyResourceSpec(st.nextToken()));
 			Trace.trace(Trace.FINEST, "Verify40: " + list.toString());
@@ -217,7 +217,7 @@
 			verify.replace('/', File.separatorChar);
 
 			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
+			list = new ArrayList<VerifyResourceSpec>();
 			while (st.hasMoreTokens())
 				list.add(new VerifyResourceSpec(st.nextToken()));
 			Trace.trace(Trace.FINEST, "Verify41: " + list.toString());
@@ -233,7 +233,7 @@
 			verify.replace('/', File.separatorChar);
 
 			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
+			list = new ArrayList<VerifyResourceSpec>();
 			while (st.hasMoreTokens())
 				list.add(new VerifyResourceSpec(st.nextToken()));
 			Trace.trace(Trace.FINEST, "Verify50: " + list.toString());
@@ -249,7 +249,7 @@
 			verify.replace('/', File.separatorChar);
 
 			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
+			list = new ArrayList<VerifyResourceSpec>();
 			while (st.hasMoreTokens())
 				list.add(new VerifyResourceSpec(st.nextToken()));
 			Trace.trace(Trace.FINEST, "Verify55: " + list.toString());
@@ -265,7 +265,7 @@
 			verify.replace('/', File.separatorChar);
 
 			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
+			list = new ArrayList<VerifyResourceSpec>();
 			while (st.hasMoreTokens())
 				list.add(new VerifyResourceSpec(st.nextToken()));
 			Trace.trace(Trace.FINEST, "Verify60: " + list.toString());
@@ -281,7 +281,7 @@
 			verify.replace('/', File.separatorChar);
 
 			st = new StringTokenizer(verify, ",");
-			list = new ArrayList();
+			list = new ArrayList<VerifyResourceSpec>();
 			while (st.hasMoreTokens())
 				list.add(new VerifyResourceSpec(st.nextToken()));
 			Trace.trace(Trace.FINEST, "Verify70: " + list.toString());
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPublishModuleVisitor.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPublishModuleVisitor.java
index 8774f85..4e161cf 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPublishModuleVisitor.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatPublishModuleVisitor.java
@@ -78,19 +78,19 @@
     /**
      * Classpath entries added by ear configurations.
      */
-    protected final List earCommonResources = new ArrayList();
+    protected final List<String> earCommonResources = new ArrayList<String>();
 
     /**
      * List of classpath elements that will be used by the custom tomcat loader.
      * This set should include any class dir from referenced project.
      */
-    protected Set virtualClassClasspathElements = new LinkedHashSet();
-    protected Set virtualJarClasspathElements = new LinkedHashSet();
+    protected Set<String> virtualClassClasspathElements = new LinkedHashSet<String>();
+    protected Set<String> virtualJarClasspathElements = new LinkedHashSet<String>();
 
     /**
      * Map of resources found in "META-INF/resources" folder of dependent projects
      */
-    protected Map virtualDependentResources = new LinkedHashMap();
+    protected Map<String, List<String>> virtualDependentResources = new LinkedHashMap<String, List<String>>();
 
     /**
      * Instantiate a new TomcatPublishModuleVisitor
@@ -171,7 +171,7 @@
             try {
                 CatalinaPropertiesUtil.addGlobalClasspath(baseDir.append(
                 		"conf/catalina.properties").toFile(), sharedLoader,
-                		(String[]) earCommonResources.toArray(new String[earCommonResources.size()]));
+                		earCommonResources.toArray(new String[earCommonResources.size()]));
             } catch (IOException e) {
                 Trace.trace(Trace.WARNING, "Unable to add ear path entries to catalina.properties", e);
             } finally {
@@ -309,10 +309,10 @@
         virtualClassClasspathElements.clear();
         virtualJarClasspathElements.clear();
 
-		Set rtPathsProcessed = new HashSet();
-		Set locationsIncluded = new HashSet();
+		Set<String> rtPathsProcessed = new HashSet<String>();
+		Set<String> locationsIncluded = new HashSet<String>();
 		locationsIncluded.add(docBase);
-		Map retryLocations = new HashMap();
+		Map<String, String> retryLocations = new HashMap<String, String>();
 		IVirtualResource [] virtualResources = component.getRootFolder().getResources("");
 		// Loop over the module's resources
 		for (int i = 0; i < virtualResources.length; i++) {
@@ -533,9 +533,9 @@
     
     private void addContentResource(IPath runtimePath, IPath workspacePath) {
     	String rtPath = runtimePath.toString(); 
-    	List locations = (List)virtualDependentResources.get(rtPath);
+    	List<String> locations = virtualDependentResources.get(rtPath);
     	if (locations == null) {
-    		locations = new ArrayList();
+    		locations = new ArrayList<String>();
     		virtualDependentResources.put(rtPath, locations);
     	}
     	locations.add(workspacePath.toOSString());
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java
index d579f8c..5d40935 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntime.java
@@ -39,7 +39,7 @@
 	protected static final String PROP_VM_INSTALL_TYPE_ID = "vm-install-type-id";
 	protected static final String PROP_VM_INSTALL_ID = "vm-install-id";
 	
-	protected static Map sdkMap = new HashMap(2);
+	protected static Map<File, Boolean> sdkMap = new HashMap<File, Boolean>(2);
 
 	public TomcatRuntime() {
 		// do nothing
@@ -224,7 +224,7 @@
 		// first try the cache
 		File javaHome = getVMInstall().getInstallLocation();
 		try {
-			Boolean b = (Boolean) sdkMap.get(javaHome);
+			Boolean b = sdkMap.get(javaHome);
 			return b.booleanValue();
 		} catch (Exception e) {
 			// ignore
@@ -278,14 +278,14 @@
 		}
 		
 		// log error that we were unable to check for the compiler
-		TomcatPlugin.log(MessageFormat.format("Failed compiler check for {0}", new String[] { javaHome.getAbsolutePath() }));
+		TomcatPlugin.log(MessageFormat.format("Failed compiler check for {0}", (Object []) new String[] { javaHome.getAbsolutePath() }));
 		return false;
 	}
 
-	private static Map javaVersionMap = new ConcurrentHashMap();
+	private static Map<String, Integer> javaVersionMap = new ConcurrentHashMap<String, Integer>();
 
 	private boolean isVMMinimumVersion(String javaVersion, int minimumVersion) {
-		Integer version = (Integer)javaVersionMap.get(javaVersion);
+		Integer version = javaVersionMap.get(javaVersion);
 		if (version == null) {
 			int index = javaVersion.indexOf('.');
 			if (index > 0) {
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeClasspathProvider.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeClasspathProvider.java
index 6983d64..7f55952 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeClasspathProvider.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatRuntimeClasspathProvider.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
@@ -32,7 +32,7 @@
 		if (installPath == null)
 			return new IClasspathEntry[0];
 		
-		List list = new ArrayList();
+		List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
 		String runtimeId = runtime.getRuntimeType().getId();
 		if (runtimeId.indexOf("32") > 0) {
 			IPath path = installPath.append("lib");
@@ -48,6 +48,6 @@
 			addLibraryEntries(list, path.append("lib").toFile(), true);
 			addLibraryEntries(list, path.append("endorsed").toFile(), true);
 		}
-		return (IClasspathEntry[])list.toArray(new IClasspathEntry[list.size()]);
+		return list.toArray(new IClasspathEntry[list.size()]);
 	}
 }
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
index 6df586e..665e6f2 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServer.java
@@ -423,7 +423,8 @@
 			return new ServerPort[0];
 		
 		try {
-			List list = getTomcatConfiguration().getServerPorts();
+			@SuppressWarnings("unchecked")
+			List<ServerPort> list = getTomcatConfiguration().getServerPorts();
 			ServerPort[] sp = new ServerPort[list.size()];
 			list.toArray(sp);
 			return sp;
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java
index 0fefc98..e6e8102 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatServerBehaviour.java
@@ -305,7 +305,7 @@
 	 * @throws CoreException
 	 */
 	private void publishDir(int deltaKind, Properties p, IModule module[], PublishHelper helper, IProgressMonitor monitor) throws CoreException {
-		List status = new ArrayList();
+		List<IStatus> status = new ArrayList<IStatus>();
 		// Remove if requested or if previously published and are now serving without publishing
 		if (deltaKind == REMOVED || getTomcatServer().isServeModulesWithoutPublish()) {
 			String publishPath = (String) p.get(module[0].getId());
@@ -394,7 +394,7 @@
 			
 			IModuleResource[] mr = getResources(module);
 			IStatus[] stat = helper.publishZip(mr, jarPath, monitor);
-			List status = new ArrayList();
+			List<IStatus> status = new ArrayList<IStatus>();
 			PublishOperation2.addArrayToList(status, stat);
 			PublishOperation2.throwException(status);
 			p.put(module[1].getId(), jarPath.toOSString());
@@ -414,7 +414,7 @@
 				throw new CoreException(new Status(IStatus.WARNING, TomcatPlugin.PLUGIN_ID, 0, "Could not remove archive module", e));
 			}
 		} else {
-			List status = new ArrayList();
+			List<IStatus> status = new ArrayList<IStatus>();
 			IPath path = getModuleDeployDirectory(module[0]);
 			if (jarURI == null) {
 				jarURI = "WEB-INF/lib" + module[1].getName();
@@ -497,7 +497,7 @@
 		
 		// check that ports are free
 		Iterator iterator = configuration.getServerPorts().iterator();
-		List usedPorts = new ArrayList();
+		List<ServerPort> usedPorts = new ArrayList<ServerPort>();
 		while (iterator.hasNext()) {
 			ServerPort sp = (ServerPort) iterator.next();
 			if (sp.getPort() < 0)
@@ -507,7 +507,7 @@
 			}
 		}
 		if (usedPorts.size() == 1) {
-			ServerPort port = (ServerPort) usedPorts.get(0);
+			ServerPort port = usedPorts.get(0);
 			throw new CoreException(new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID, 0, NLS.bind(Messages.errorPortInUse, new String[] {port.getPort() + "", getServer().getName()}), null));
 		} else if (usedPorts.size() > 1) {
 			String portStr = "";
@@ -525,7 +525,7 @@
 		
 		// check that there is only one app for each context root
 		iterator = configuration.getWebModules().iterator();
-		List contextRoots = new ArrayList();
+		List<String> contextRoots = new ArrayList<String>();
 		while (iterator.hasNext()) {
 			WebModule module = (WebModule) iterator.next();
 			String contextRoot = module.getPath();
@@ -796,10 +796,10 @@
 	 * @param cp
 	 * @param entry
 	 */
-	public static void replaceJREContainer(List cp, IRuntimeClasspathEntry entry) {
+	public static void replaceJREContainer(List<IRuntimeClasspathEntry> cp, IRuntimeClasspathEntry entry) {
 		int size = cp.size();
 		for (int i = 0; i < size; i++) {
-			IRuntimeClasspathEntry entry2 = (IRuntimeClasspathEntry) cp.get(i);
+			IRuntimeClasspathEntry entry2 = cp.get(i);
 			if (entry2.getPath().uptoSegment(2).isPrefixOf(entry.getPath())) {
 				cp.set(i, entry);
 				return;
@@ -815,7 +815,7 @@
 	 * @param cp
 	 * @param entry
 	 */
-	public static void mergeClasspath(List cp, IRuntimeClasspathEntry entry) {
+	public static void mergeClasspath(List<IRuntimeClasspathEntry> cp, IRuntimeClasspathEntry entry) {
 		Iterator iterator = cp.iterator();
 		while (iterator.hasNext()) {
 			IRuntimeClasspathEntry entry2 = (IRuntimeClasspathEntry) iterator.next();
@@ -893,7 +893,7 @@
 		// update classpath
 		IRuntimeClasspathEntry[] originalClasspath = JavaRuntime.computeUnresolvedRuntimeClasspath(workingCopy);
 		int size = originalClasspath.length;
-		List oldCp = new ArrayList(originalClasspath.length + 2);
+		List<IRuntimeClasspathEntry> oldCp = new ArrayList<IRuntimeClasspathEntry>(originalClasspath.length + 2);
 		for (int i = 0; i < size; i++)
 			oldCp.add(originalClasspath[i]);
 		
@@ -920,7 +920,7 @@
 					// Search for index to any existing tools.jar entry
 					int toolsIndex;
 					for (toolsIndex = 0; toolsIndex < oldCp.size(); toolsIndex++ ) {
-						IRuntimeClasspathEntry entry = (IRuntimeClasspathEntry) oldCp.get(toolsIndex);
+						IRuntimeClasspathEntry entry = oldCp.get(toolsIndex);
 						if (entry.getType() == IRuntimeClasspathEntry.ARCHIVE
 								&& entry.getPath().lastSegment().equals("tools.jar")) {
 							break;
@@ -936,7 +936,7 @@
 		}
 		
 		iterator = oldCp.iterator();
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		while (iterator.hasNext()) {
 			IRuntimeClasspathEntry entry = (IRuntimeClasspathEntry) iterator.next();
 			try {
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java
index d0ec269..585b6bd 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatSourcePathComputerDelegate.java
@@ -65,7 +65,7 @@
 		/**
 		 * List<IRuntimeClasspathEntry> of unresolved IRuntimeClasspathEntries
 		 */
-		List runtimeClasspath = new ArrayList();
+		List<IRuntimeClasspathEntry> runtimeClasspath = new ArrayList<IRuntimeClasspathEntry>();
 
 		SourcePathComputerVisitor(ILaunchConfiguration configuration) {
 			this.configuration = configuration;
@@ -157,7 +157,7 @@
 		ISourceContainer[] getSourceContainers() throws CoreException {
 			runtimeClasspath.addAll(Arrays.asList(JavaRuntime
 					.computeUnresolvedSourceLookupPath(configuration)));
-			IRuntimeClasspathEntry[] entries = (IRuntimeClasspathEntry[]) runtimeClasspath
+			IRuntimeClasspathEntry[] entries = runtimeClasspath
 					.toArray(new IRuntimeClasspathEntry[runtimeClasspath.size()]);
 			IRuntimeClasspathEntry[] resolved = JavaRuntime
 					.resolveSourceLookupPath(entries, configuration);
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java
index 3fda44e..0675afa 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/TomcatVersionHelper.java
@@ -98,7 +98,7 @@
 	/**
 	 * Map of server type ID to expected version string fragment for version checking.
 	 */
-	private static final Map versionStringMap = new HashMap();
+	private static final Map<String, String> versionStringMap = new HashMap<String, String>();
 	
 	static {
 		versionStringMap.put(TomcatPlugin.TOMCAT_41, "4.1.");
@@ -175,7 +175,7 @@
 	 * @return array of strings containing VM arguments
 	 */
 	public static String[] getCatalinaVMArguments(IPath installPath, IPath instancePath, IPath deployPath, String endorsedDirs, boolean isTestEnv) {
-		List list = new ArrayList();
+		List<String> list = new ArrayList<String>();
 		if (isTestEnv)
 			list.add("-Dcatalina.base=\"" + instancePath.toOSString() + "\"");
 		else 
@@ -217,7 +217,7 @@
 			IPath contextPath = serverInstance.getContextXmlDirectory(serverXml.removeLastSegments(1));
 			File contextDir = contextPath.toFile();
 			if (contextDir.exists()) {
-				Map projectContexts = new HashMap();
+				Map<File, Context> projectContexts = new HashMap<File, Context>();
 				loadSeparateContextFiles(contextPath.toFile(), factory, projectContexts);
 				
 				// add any separately saved contexts
@@ -246,7 +246,7 @@
 	 * @param keptContextsMap Map to receive kept contexts mapped by path
 	 */
 	public static void getRemovedKeptCatalinaContexts(ServerInstance oldServerInstance,
-			List modules, Map removedContextsMap, Map keptContextsMap) {
+			List modules, Map<String, Context> removedContextsMap, Map<String, Context> keptContextsMap) {
 		// Collect paths of old web modules managed by WTP
 		Context [] contexts = oldServerInstance.getContexts();
 		if (contexts != null) {
@@ -262,7 +262,7 @@
 		int size = modules.size();
 		for (int i = 0; i < size; i++) {
 			WebModule module = (WebModule) modules.get(i);
-			Context context = (Context)removedContextsMap.remove(module.getPath());
+			Context context = removedContextsMap.remove(module.getPath());
 			if (context != null)
 				keptContextsMap.put(context.getPath(), context);
 		}
@@ -294,8 +294,8 @@
 			IPath serverXml = baseDir.append("conf").append("server.xml");
 			ServerInstance oldInstance = TomcatVersionHelper.getCatalinaServerInstance(serverXml, null, null);
 			if (oldInstance != null) {
-				Map removedContextsMap = new HashMap();
-				Map keptContextsMap = new HashMap();
+				Map<String, Context> removedContextsMap = new HashMap<String, Context>();
+				Map<String, Context> keptContextsMap = new HashMap<String, Context>();
 				TomcatVersionHelper.getRemovedKeptCatalinaContexts(oldInstance, modules, removedContextsMap, keptContextsMap);
 				monitor.worked(100);
 				if (removedContextsMap.size() > 0) {
@@ -306,7 +306,7 @@
 					Iterator iter = removedContextsMap.keySet().iterator();
 					while (iter.hasNext()) {
 						String oldPath = (String)iter.next();
-						Context ctx = (Context)removedContextsMap.get(oldPath);
+						Context ctx = removedContextsMap.get(oldPath);
 						
 						// Delete the corresponding context file, if it exists
 						IPath ctxFilePath = oldInstance.getContextFilePath(baseDir, ctx);
@@ -362,7 +362,7 @@
 					Iterator iter = keptContextsMap.keySet().iterator();
 					while (iter.hasNext()) {
 						String keptPath = (String)iter.next();
-						Context ctx = (Context)keptContextsMap.get(keptPath);
+						Context ctx = keptContextsMap.get(keptPath);
 						
 						// Delete the corresponding context file, if it exists
 						IPath ctxFilePath = oldInstance.getContextFilePath(baseDir, ctx);
@@ -652,7 +652,7 @@
 			// TODO Improve to compare with appBase value instead of hardcoded "webapps"
 			boolean deployingToAppBase = "webapps".equals(server.getDeployDirectory());
 			
-			Map pathMap = new HashMap();
+			Map<String, String> pathMap = new HashMap<String, String>();
 			
 			MultiStatus ms = new MultiStatus(TomcatPlugin.PLUGIN_ID, 0, 
 					NLS.bind(Messages.errorPublishServer, server.getServer().getName()), null);
@@ -680,7 +680,7 @@
 							pathMap.put(lcPath, origPath);
 						}
 						else {
-							String otherPath = (String)pathMap.get(lcPath);
+							String otherPath = pathMap.get(lcPath);
 							IStatus s = new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID,
 									origPath.equals(otherPath) ? NLS.bind(Messages.errorPublishPathDup, origPath) 
 											: NLS.bind(Messages.errorPublishPathConflict, origPath, otherPath));
@@ -1035,7 +1035,7 @@
 		return Status.OK_STATUS;
 	}
 	
-	private static void loadSeparateContextFiles(File contextDir, Factory factory, Map projectContexts) {
+	private static void loadSeparateContextFiles(File contextDir, Factory factory, Map<File, Context> projectContexts) {
 		File[] contextFiles = contextDir.listFiles(new FilenameFilter() {
 			public boolean accept(File dir, String name) {
 				return name.toLowerCase().endsWith(".xml");
@@ -1202,7 +1202,7 @@
 			if (versionSubString != null) {
 				// If we have an actual version, test the version
 				if (versionSubString.length() > 0) {
-					String versionTest = (String)versionStringMap.get(serverType);
+					String versionTest = versionStringMap.get(serverType);
 					if (versionTest != null && !versionSubString.startsWith(versionTest)) {
 						return new Status(IStatus.ERROR, TomcatPlugin.PLUGIN_ID,
 								NLS.bind(Messages.errorInstallDirWrongVersion2,
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.java
index 97aea27..40c5098 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/WebAppDocument.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
@@ -79,7 +79,7 @@
 	 * @return java.util.List
 	 */
 	public List getMimeMappings() {
-		List map = new ArrayList();
+		List<MimeMapping> map = new ArrayList<MimeMapping>();
 		
 		Element root = webAppDocument.getDocumentElement();
 		Iterator iterator = XMLUtil.getNodeIterator(root, "mime-mapping");
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/wst/ModuleTraverser.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/wst/ModuleTraverser.java
index 2fc4467..9c1366d 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/wst/ModuleTraverser.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/wst/ModuleTraverser.java
@@ -51,6 +51,7 @@
 /**
  * Temporary solution for https://bugs.eclipse.org/bugs/show_bug.cgi?id=103888
  */
+@SuppressWarnings("restriction")
 public class ModuleTraverser {
 
 	/**
@@ -413,7 +414,7 @@
 
 		// get the raw entries
 		final Map referencedRawEntries = getRawComponentClasspathDependencies(javaProject);
-		final Map validRawEntries = new HashMap();
+		final Map<IClasspathEntry, IClasspathAttribute> validRawEntries = new HashMap<IClasspathEntry, IClasspathAttribute>();
 
 		// filter out non-valid referenced raw entries
 		final Iterator i = referencedRawEntries.keySet().iterator();
@@ -439,14 +440,14 @@
 		
 		// retrieve the resolved classpath
 		final IClasspathEntry[] entries = javaProject.getResolvedClasspath(true);
-		final Map pathToResolvedEntry = new HashMap();
+		final Map<IPath, IClasspathEntry> pathToResolvedEntry = new HashMap<IPath, IClasspathEntry>();
 		
 		// store in a map from path to entry
 		for (int j = 0; j < entries.length; j++) {
 			pathToResolvedEntry.put(entries[j].getPath(), entries[j]);
 		}
 
-		final Map referencedEntries = new LinkedHashMap();
+		final Map<IClasspathEntry, IClasspathAttribute> referencedEntries = new LinkedHashMap<IClasspathEntry, IClasspathAttribute>();
 		
 		// grab all IPackageFragmentRoots
 		final IPackageFragmentRoot[] roots = javaProject.getPackageFragmentRoots();
@@ -455,13 +456,13 @@
 			final IClasspathEntry rawEntry = root.getRawClasspathEntry();
 			
 			// is the raw entry valid?
-			IClasspathAttribute attrib = (IClasspathAttribute) validRawEntries.get(rawEntry);
+			IClasspathAttribute attrib = validRawEntries.get(rawEntry);
 			if (attrib == null) {
 				continue;
 			}
 			
 			final IPath pkgFragPath = root.getPath();
-			final IClasspathEntry resolvedEntry = (IClasspathEntry) pathToResolvedEntry.get(pkgFragPath);
+			final IClasspathEntry resolvedEntry = pathToResolvedEntry.get(pkgFragPath);
 			final IClasspathAttribute resolvedAttrib = checkForComponentDependencyAttribute(resolvedEntry,
 					DEPENDECYATTRIBUTETYPE_DEPENDENCY_OR_NONDEPENDENCY);
 			// attribute for the resolved entry must either be unspecified or it must be the
@@ -488,7 +489,7 @@
 		if (javaProject == null) {
 			return Collections.EMPTY_MAP;
 		}
-		final Map referencedRawEntries = new HashMap();
+		final Map<IClasspathEntry, IClasspathAttribute> referencedRawEntries = new HashMap<IClasspathEntry, IClasspathAttribute>();
 		final IClasspathEntry[] entries = javaProject.getRawClasspath();
         for (int i = 0; i < entries.length; i++) {
             final IClasspathEntry entry = entries[i];
@@ -591,9 +592,8 @@
     	if (attrib == null || attrib.getValue()== null || attrib.getValue().length() == 0) {
     		if (isWebApp) {
     			return isClassFolder ? "/WEB_INF/classes" : "WEB-INF/lib";
-    		} else {
-    			return isClassFolder ? "/" : "../";
     		}
+			return isClassFolder ? "/" : "../";
     	}
     	return attrib.getValue();
 	}
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLElement.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLElement.java
index 12fb15a..cb5eff9 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLElement.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLElement.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
@@ -78,7 +78,7 @@
 	}
 	
 	public Map getAttributes() {
-		Map attributes = new LinkedHashMap();
+		Map<String, String> attributes = new LinkedHashMap<String, String>();
 		NamedNodeMap attrs = xmlElement.getAttributes();
 		if (null != attrs) {
 			for (int i = 0; i < attrs.getLength(); i++) {
diff --git a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLUtil.java b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLUtil.java
index f9ca6ac..140eb9d 100644
--- a/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLUtil.java
+++ b/plugins/org.eclipse.jst.server.tomcat.core/tomcatcore/org/eclipse/jst/server/tomcat/core/internal/xml/XMLUtil.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
@@ -154,7 +154,7 @@
 	 * @param name java.lang.String
 	 */
 	public static Iterator getNodeIterator(Element element, String name) {
-		List list = new ArrayList();
+		List<Node> list = new ArrayList<Node>();
 		NodeList nodeList = element.getElementsByTagName(name);
 	
 		int length = nodeList.getLength();
