diff --git a/tests/org.eclipse.jst.server.core.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.server.core.tests/META-INF/MANIFEST.MF
index ae88ce6..b35b661 100644
--- a/tests/org.eclipse.jst.server.core.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.jst.server.core.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.jst.server.core.tests
 Bundle-SymbolicName: org.eclipse.jst.server.core.tests
-Bundle-Version: 1.0.202.qualifier
+Bundle-Version: 1.0.302.qualifier
 Bundle-ClassPath: tests.jar
 Bundle-Activator: org.eclipse.jst.server.core.tests.TestsPlugin
 Bundle-Vendor: Eclipse.org
diff --git a/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/OrderedTestSuite.java b/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/OrderedTestSuite.java
index f2864eb..53b4eac 100644
--- a/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/OrderedTestSuite.java
+++ b/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/OrderedTestSuite.java
@@ -21,9 +21,9 @@
 	}
 
 	public Enumeration tests() {
-		Enumeration enum2 = super.tests();
+		Enumeration<TestCase> enum2 = super.tests();
 		
-		Vector list = new Vector();
+		Vector<TestCase> list = new Vector<TestCase>();
 		while (enum2.hasMoreElements()) {
 			list.add(enum2.nextElement());
 		}
@@ -31,10 +31,10 @@
 		int size = list.size();
 		for (int i = 0; i < size - 1; i++) {
 			for (int j = i + 1; j < size; j++) {
-				TestCase t1 = (TestCase) list.get(i);
-				TestCase t2 = (TestCase) list.get(j);
+				TestCase t1 = list.get(i);
+				TestCase t2 = list.get(j);
 				if (t1.getName().compareTo(t2.getName()) > 0) {
-					Object obj = list.get(i);
+					TestCase obj = list.get(i);
 					list.set(i, list.get(j));
 					list.set(j, obj);
 				}
diff --git a/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/impl/TestRuntimeClasspathProviderDelegate.java b/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/impl/TestRuntimeClasspathProviderDelegate.java
index a7f1077..113c3f9 100644
--- a/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/impl/TestRuntimeClasspathProviderDelegate.java
+++ b/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/impl/TestRuntimeClasspathProviderDelegate.java
@@ -27,7 +27,7 @@
 	}
 
 	public void testAddMethods() {
-		List list = new ArrayList();
+		List<IClasspathEntry> list = new ArrayList<IClasspathEntry>();
 		try {
 			addLibraryEntries(list, null, false);
 		} catch (Exception e) {
diff --git a/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/BinaryTestCase.java b/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/BinaryTestCase.java
index f0cfb76..294d6d8 100644
--- a/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/BinaryTestCase.java
+++ b/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/BinaryTestCase.java
@@ -111,7 +111,7 @@
 	public void test029EAR() throws Exception {
 		IModule[] modules = ent.getModules();
 		int size = modules.length;
-		List list = new ArrayList(size);
+		List<String> list = new ArrayList<String>(size);
 		for (int i = 0; i < size; i++) {
 			list.add(modules[i].getName());
 		}
diff --git a/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/ModuleTestCase.java b/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/ModuleTestCase.java
index cd0daf1..2227f6e 100644
--- a/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/ModuleTestCase.java
+++ b/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/ModuleTestCase.java
@@ -134,7 +134,7 @@
 	public void _test030EAR() throws Exception {
 		IModule[] modules = ent.getModules();
 		int size = modules.length;
-		List list = new ArrayList(size);
+		List<String> list = new ArrayList<String>(size);
 		for (int i = 0; i < size; i++) {
 			System.out.println(modules[i].getName());
 			list.add(modules[i].getName());
diff --git a/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/NoSourceTestCase.java b/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/NoSourceTestCase.java
index eb64900..37b4e4d 100644
--- a/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/NoSourceTestCase.java
+++ b/tests/org.eclipse.jst.server.core.tests/src/org/eclipse/jst/server/core/tests/j2ee/NoSourceTestCase.java
@@ -108,7 +108,7 @@
 	public void test029EAR() throws Exception {
 		IModule[] modules = ent.getModules();
 		int size = modules.length;
-		List list = new ArrayList(size);
+		List<String> list = new ArrayList<String>(size);
 		for (int i = 0; i < size; i++)
 			list.add(modules[i].getName());
 		
diff --git a/tests/org.eclipse.jst.server.ui.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jst.server.ui.tests/META-INF/MANIFEST.MF
index f958f8a..cf15ea1 100644
--- a/tests/org.eclipse.jst.server.ui.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.jst.server.ui.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.jst.server.ui.tests
 Bundle-SymbolicName: org.eclipse.jst.server.ui.tests
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-ClassPath: tests.jar
 Bundle-Activator: org.eclipse.jst.server.ui.tests.TestsPlugin
 Bundle-Vendor: Eclipse.org
diff --git a/tests/org.eclipse.jst.server.ui.tests/src/org/eclipse/jst/server/ui/tests/OrderedTestSuite.java b/tests/org.eclipse.jst.server.ui.tests/src/org/eclipse/jst/server/ui/tests/OrderedTestSuite.java
index ac76751..f622711 100644
--- a/tests/org.eclipse.jst.server.ui.tests/src/org/eclipse/jst/server/ui/tests/OrderedTestSuite.java
+++ b/tests/org.eclipse.jst.server.ui.tests/src/org/eclipse/jst/server/ui/tests/OrderedTestSuite.java
@@ -21,9 +21,9 @@
 	}
 
 	public Enumeration tests() {
-		Enumeration enum2 = super.tests();
+		Enumeration<TestCase> enum2 = super.tests();
 		
-		Vector list = new Vector();
+		Vector<TestCase> list = new Vector<TestCase>();
 		while (enum2.hasMoreElements()) {
 			list.add(enum2.nextElement());
 		}
@@ -31,10 +31,10 @@
 		int size = list.size();
 		for (int i = 0; i < size - 1; i++) {
 			for (int j = i + 1; j < size; j++) {
-				TestCase t1 = (TestCase) list.get(i);
-				TestCase t2 = (TestCase) list.get(j);
+				TestCase t1 = list.get(i);
+				TestCase t2 = list.get(j);
 				if (t1.getName().compareTo(t2.getName()) > 0) {
-					Object obj = list.get(i);
+					TestCase obj = list.get(i);
 					list.set(i, list.get(j));
 					list.set(j, obj);
 				}
diff --git a/tests/org.eclipse.wst.internet.monitor.core.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.internet.monitor.core.tests/META-INF/MANIFEST.MF
index f14c7f2..db3f4d9 100644
--- a/tests/org.eclipse.wst.internet.monitor.core.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.internet.monitor.core.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.wst.internet.monitor.core.tests
 Bundle-SymbolicName: org.eclipse.wst.internet.monitor.core.tests
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-ClassPath: monitortests.jar
 Bundle-Activator: org.eclipse.wst.internet.monitor.core.tests.TestsPlugin
 Bundle-Vendor: Eclipse.org
diff --git a/tests/org.eclipse.wst.internet.monitor.core.tests/src/org/eclipse/wst/internet/monitor/core/tests/OrderedTestSuite.java b/tests/org.eclipse.wst.internet.monitor.core.tests/src/org/eclipse/wst/internet/monitor/core/tests/OrderedTestSuite.java
index 150a08e..6f11617 100644
--- a/tests/org.eclipse.wst.internet.monitor.core.tests/src/org/eclipse/wst/internet/monitor/core/tests/OrderedTestSuite.java
+++ b/tests/org.eclipse.wst.internet.monitor.core.tests/src/org/eclipse/wst/internet/monitor/core/tests/OrderedTestSuite.java
@@ -21,9 +21,9 @@
 	}
 
 	public Enumeration tests() {
-		Enumeration enum2 = super.tests();
+		Enumeration<TestCase> enum2 = super.tests();
 		
-		Vector list = new Vector();
+		Vector<TestCase> list = new Vector<TestCase>();
 		while (enum2.hasMoreElements()) {
 			list.add(enum2.nextElement());
 		}
@@ -31,10 +31,10 @@
 		int size = list.size();
 		for (int i = 0; i < size - 1; i++) {
 			for (int j = i + 1; j < size; j++) {
-				TestCase t1 = (TestCase) list.get(i);
-				TestCase t2 = (TestCase) list.get(j);
+				TestCase t1 = list.get(i);
+				TestCase t2 = list.get(j);
 				if (t1.getName().compareTo(t2.getName()) > 0) {
-					Object obj = list.get(i);
+					TestCase obj = list.get(i);
 					list.set(i, list.get(j));
 					list.set(j, obj);
 				}
diff --git a/tests/org.eclipse.wst.internet.monitor.ui.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.internet.monitor.ui.tests/META-INF/MANIFEST.MF
index 376e6ce..87d5318 100644
--- a/tests/org.eclipse.wst.internet.monitor.ui.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.internet.monitor.ui.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.wst.internet.monitor.ui.tests
 Bundle-SymbolicName: org.eclipse.wst.internet.monitor.ui.tests
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-ClassPath: monitortests.jar
 Bundle-Activator: org.eclipse.wst.internet.monitor.ui.tests.TestsPlugin
 Bundle-Vendor: Eclipse.org
diff --git a/tests/org.eclipse.wst.internet.monitor.ui.tests/src/org/eclipse/wst/internet/monitor/ui/tests/OrderedTestSuite.java b/tests/org.eclipse.wst.internet.monitor.ui.tests/src/org/eclipse/wst/internet/monitor/ui/tests/OrderedTestSuite.java
index f737515..9520728 100644
--- a/tests/org.eclipse.wst.internet.monitor.ui.tests/src/org/eclipse/wst/internet/monitor/ui/tests/OrderedTestSuite.java
+++ b/tests/org.eclipse.wst.internet.monitor.ui.tests/src/org/eclipse/wst/internet/monitor/ui/tests/OrderedTestSuite.java
@@ -21,9 +21,9 @@
 	}
 
 	public Enumeration tests() {
-		Enumeration enum2 = super.tests();
+		Enumeration<TestCase> enum2 = super.tests();
 		
-		Vector list = new Vector();
+		Vector<TestCase> list = new Vector<TestCase>();
 		while (enum2.hasMoreElements()) {
 			list.add(enum2.nextElement());
 		}
@@ -31,10 +31,10 @@
 		int size = list.size();
 		for (int i = 0; i < size - 1; i++) {
 			for (int j = i + 1; j < size; j++) {
-				TestCase t1 = (TestCase) list.get(i);
-				TestCase t2 = (TestCase) list.get(j);
+				TestCase t1 = list.get(i);
+				TestCase t2 = list.get(j);
 				if (t1.getName().compareTo(t2.getName()) > 0) {
-					Object obj = list.get(i);
+					TestCase obj = list.get(i);
 					list.set(i, list.get(j));
 					list.set(j, obj);
 				}
diff --git a/tests/org.eclipse.wst.server.core.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.server.core.tests/META-INF/MANIFEST.MF
index 1d39e7b..b7bc113 100644
--- a/tests/org.eclipse.wst.server.core.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.server.core.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.wst.server.core.tests
 Bundle-SymbolicName: org.eclipse.wst.server.core.tests
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-ClassPath: servertests.jar
 Bundle-Activator: org.eclipse.wst.server.core.tests.TestsPlugin
 Bundle-Vendor: Eclipse.org
diff --git a/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/OrderedTestSuite.java b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/OrderedTestSuite.java
index cf492ae..17aecd5 100644
--- a/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/OrderedTestSuite.java
+++ b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/OrderedTestSuite.java
@@ -21,9 +21,9 @@
 	}
 
 	public Enumeration tests() {
-		Enumeration enum2 = super.tests();
+		Enumeration<TestCase> enum2 = super.tests();
 		
-		Vector list = new Vector();
+		Vector<TestCase> list = new Vector<TestCase>();
 		while (enum2.hasMoreElements()) {
 			list.add(enum2.nextElement());
 		}
@@ -31,10 +31,10 @@
 		int size = list.size();
 		for (int i = 0; i < size - 1; i++) {
 			for (int j = i + 1; j < size; j++) {
-				TestCase t1 = (TestCase) list.get(i);
-				TestCase t2 = (TestCase) list.get(j);
+				TestCase t1 = list.get(i);
+				TestCase t2 = list.get(j);
 				if (t1.getName().compareTo(t2.getName()) > 0) {
-					Object obj = list.get(i);
+					TestCase obj = list.get(i);
 					list.set(i, list.get(j));
 					list.set(j, obj);
 				}
diff --git a/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/impl/TestRuntimeDelegate.java b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/impl/TestRuntimeDelegate.java
index a319aae..b3a31d3 100644
--- a/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/impl/TestRuntimeDelegate.java
+++ b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/impl/TestRuntimeDelegate.java
@@ -31,7 +31,7 @@
 		}
 		
 		try {
-		getAttribute("test", new ArrayList());
+		getAttribute("test", new ArrayList<String>());
 		} catch (Exception e) {
 			// ignore
 		}
@@ -61,7 +61,7 @@
 		}
 		
 		try {
-			setAttribute("test", new ArrayList());
+			setAttribute("test", new ArrayList<String>());
 		} catch (Exception e) {
 			// ignore
 		}
diff --git a/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/impl/TestServerDelegate.java b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/impl/TestServerDelegate.java
index c522955..92d0115 100644
--- a/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/impl/TestServerDelegate.java
+++ b/tests/org.eclipse.wst.server.core.tests/src/org/eclipse/wst/server/core/tests/impl/TestServerDelegate.java
@@ -51,7 +51,7 @@
 		}
 		
 		try {
-			getAttribute("test", new ArrayList());
+			getAttribute("test", new ArrayList<String>());
 		} catch (Exception e) {
 			// ignore
 		}
@@ -81,7 +81,7 @@
 		}
 		
 		try {
-			setAttribute("test", new ArrayList());
+			setAttribute("test", new ArrayList<String>());
 		} catch (Exception e) {
 			// ignore
 		}
diff --git a/tests/org.eclipse.wst.server.http.core.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.server.http.core.tests/META-INF/MANIFEST.MF
index 7627539..de2017e 100644
--- a/tests/org.eclipse.wst.server.http.core.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.server.http.core.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.wst.server.http.core.tests
 Bundle-SymbolicName: org.eclipse.wst.server.http.core.tests
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.0.100.qualifier
 Bundle-ClassPath: tests.jar
 Bundle-Activator: org.eclipse.wst.server.http.core.tests.TestsPlugin
 Bundle-Vendor: Eclipse.org
diff --git a/tests/org.eclipse.wst.server.http.core.tests/src/org/eclipse/wst/server/http/core/tests/OrderedTestSuite.java b/tests/org.eclipse.wst.server.http.core.tests/src/org/eclipse/wst/server/http/core/tests/OrderedTestSuite.java
index 80fae08..c599110 100644
--- a/tests/org.eclipse.wst.server.http.core.tests/src/org/eclipse/wst/server/http/core/tests/OrderedTestSuite.java
+++ b/tests/org.eclipse.wst.server.http.core.tests/src/org/eclipse/wst/server/http/core/tests/OrderedTestSuite.java
@@ -21,9 +21,9 @@
 	}
 
 	public Enumeration tests() {
-		Enumeration enum2 = super.tests();
+		Enumeration<TestCase> enum2 = super.tests();
 		
-		Vector list = new Vector();
+		Vector<TestCase> list = new Vector<TestCase>();
 		while (enum2.hasMoreElements()) {
 			list.add(enum2.nextElement());
 		}
@@ -31,10 +31,10 @@
 		int size = list.size();
 		for (int i = 0; i < size - 1; i++) {
 			for (int j = i + 1; j < size; j++) {
-				TestCase t1 = (TestCase) list.get(i);
-				TestCase t2 = (TestCase) list.get(j);
+				TestCase t1 = list.get(i);
+				TestCase t2 = list.get(j);
 				if (t1.getName().compareTo(t2.getName()) > 0) {
-					Object obj = list.get(i);
+					TestCase obj = list.get(i);
 					list.set(i, list.get(j));
 					list.set(j, obj);
 				}
diff --git a/tests/org.eclipse.wst.server.tests.performance/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.server.tests.performance/META-INF/MANIFEST.MF
index 5bac9c3..fb37be9 100644
--- a/tests/org.eclipse.wst.server.tests.performance/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.server.tests.performance/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.wst.server.tests.performance
 Bundle-SymbolicName: org.eclipse.wst.server.tests.performance
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-ClassPath: performance.jar
 Bundle-Activator: org.eclipse.wst.server.tests.performance.TestsPlugin
 Bundle-Vendor: Eclipse.org
diff --git a/tests/org.eclipse.wst.server.ui.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.wst.server.ui.tests/META-INF/MANIFEST.MF
index 37d35e8..4e9dc0d 100644
--- a/tests/org.eclipse.wst.server.ui.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.wst.server.ui.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: org.eclipse.wst.server.ui.tests
 Bundle-SymbolicName: org.eclipse.wst.server.ui.tests
-Bundle-Version: 1.0.200.qualifier
+Bundle-Version: 1.0.300.qualifier
 Bundle-ClassPath: tests.jar
 Bundle-Activator: org.eclipse.wst.server.ui.tests.TestsPlugin
 Bundle-Vendor: Eclipse.org
diff --git a/tests/org.eclipse.wst.server.ui.tests/src/org/eclipse/wst/server/ui/tests/OrderedTestSuite.java b/tests/org.eclipse.wst.server.ui.tests/src/org/eclipse/wst/server/ui/tests/OrderedTestSuite.java
index 0282b76..90df62e 100644
--- a/tests/org.eclipse.wst.server.ui.tests/src/org/eclipse/wst/server/ui/tests/OrderedTestSuite.java
+++ b/tests/org.eclipse.wst.server.ui.tests/src/org/eclipse/wst/server/ui/tests/OrderedTestSuite.java
@@ -21,9 +21,9 @@
 	}
 
 	public Enumeration tests() {
-		Enumeration enum2 = super.tests();
+		Enumeration<TestCase> enum2 = super.tests();
 		
-		Vector list = new Vector();
+		Vector<TestCase> list = new Vector<TestCase>();
 		while (enum2.hasMoreElements()) {
 			list.add(enum2.nextElement());
 		}
@@ -31,10 +31,10 @@
 		int size = list.size();
 		for (int i = 0; i < size - 1; i++) {
 			for (int j = i + 1; j < size; j++) {
-				TestCase t1 = (TestCase) list.get(i);
-				TestCase t2 = (TestCase) list.get(j);
+				TestCase t1 = list.get(i);
+				TestCase t2 = list.get(j);
 				if (t1.getName().compareTo(t2.getName()) > 0) {
-					Object obj = list.get(i);
+					TestCase obj = list.get(i);
 					list.set(i, list.get(j));
 					list.set(j, obj);
 				}
