diff --git a/bundles/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/CloseableURLClassLoader.java b/bundles/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/CloseableURLClassLoader.java
index 4a30310..09b46ff 100644
--- a/bundles/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/CloseableURLClassLoader.java
+++ b/bundles/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/CloseableURLClassLoader.java
@@ -271,9 +271,9 @@
 	@Override
 	protected Class<?> findClass(final String name) throws ClassNotFoundException {
 		try {
-			Class<?> clazz = (Class<?>) AccessController.doPrivileged(new PrivilegedExceptionAction() {
+			Class<?> clazz = AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>() {
 				@Override
-				public Object run() throws ClassNotFoundException {
+				public Class<?> run() throws ClassNotFoundException {
 					String resourcePath = name.replace('.', '/') + DOT_CLASS;
 					CloseableJarFileLoader loader = null;
 					URL resourceURL = null;
@@ -382,9 +382,9 @@
 
 	@Override
 	public URL findResource(final String name) {
-		URL url = (URL) AccessController.doPrivileged(new PrivilegedAction() {
+		URL url = AccessController.doPrivileged(new PrivilegedAction<URL>() {
 			@Override
-			public Object run() {
+			public URL run() {
 				synchronized (loaders) {
 					if (closed)
 						return null;
@@ -406,7 +406,7 @@
 	@Override
 	public Enumeration<URL> findResources(final String name) throws IOException {
 		final List<URL> resources = new ArrayList<>();
-		AccessController.doPrivileged(new PrivilegedAction() {
+		AccessController.doPrivileged(new PrivilegedAction<Object>() {
 			@Override
 			public Object run() {
 				synchronized (loaders) {
diff --git a/bundles/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/FrameworkLauncher.java b/bundles/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/FrameworkLauncher.java
index 65555cd..4b6a0c9 100644
--- a/bundles/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/FrameworkLauncher.java
+++ b/bundles/org.eclipse.equinox.servletbridge/src/org/eclipse/equinox/servletbridge/FrameworkLauncher.java
@@ -559,6 +559,7 @@
 	 * The value '@null' will set the map value to null.
 	 * @return a map containing the initial properties
 	 */
+	@SuppressWarnings("rawtypes")
 	protected Map<String, String> buildInitialPropertyMap() {
 		Map<String, String> initialPropertyMap = new HashMap<>();
 		Properties launchProperties = loadProperties(resourceBase + LAUNCH_INI);
@@ -670,7 +671,8 @@
 	 * clearPrefixedSystemProperties clears System Properties by writing null properties in the targetPropertyMap that match a prefix
 	 */
 	private static void clearPrefixedSystemProperties(String prefix, Map<String, String> targetPropertyMap) {
-		for (Iterator it = System.getProperties().keySet().iterator(); it.hasNext();) {
+		for (@SuppressWarnings("rawtypes")
+		Iterator it = System.getProperties().keySet().iterator(); it.hasNext();) {
 			String propertyName = (String) it.next();
 			if (propertyName.startsWith(prefix) && !targetPropertyMap.containsKey(propertyName)) {
 				targetPropertyMap.put(propertyName, null);
