diff --git a/org.eclipse.help.base/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.help.base/.settings/org.eclipse.jdt.core.prefs
index c79077d..34d2b77 100644
--- a/org.eclipse.help.base/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.help.base/.settings/org.eclipse.jdt.core.prefs
@@ -1,5 +1,12 @@
 eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=1.5
@@ -17,6 +24,7 @@
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -30,7 +38,9 @@
 org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
 org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
@@ -39,12 +49,18 @@
 org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=ignore
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
 org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
@@ -54,19 +70,22 @@
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
@@ -76,6 +95,7 @@
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
 org.eclipse.jdt.core.compiler.source=1.5
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpApplication.java b/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpApplication.java
index 0aed640..2fc0671 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpApplication.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/base/HelpApplication.java
@@ -116,7 +116,7 @@
 	 * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object)
 	 */
 	public void setInitializationData(IConfigurationElement configElement, String propertyName, Object data) {
-		String value = (String)((Map)data).get("mode"); //$NON-NLS-1$
+		String value = (String)((Map<?, ?>)data).get("mode"); //$NON-NLS-1$
 		if ("infocenter".equalsIgnoreCase(value)) { //$NON-NLS-1$
 			BaseHelpSystem.setMode(BaseHelpSystem.MODE_INFOCENTER);
 		}
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIndexProvider.java b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIndexProvider.java
index 6cd5c62..95d7e32 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIndexProvider.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/base/remote/RemoteIndexProvider.java
@@ -96,7 +96,7 @@
 					}
 				}
 			}
-			return (IIndexContribution[])contributions.toArray(new IIndexContribution[contributions.size()]);
+			return contributions.toArray(new IIndexContribution[contributions.size()]);
 		}
 		return new IIndexContribution[0];
 	}
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/browser/MozillaFactory.java b/org.eclipse.help.base/src/org/eclipse/help/internal/browser/MozillaFactory.java
index d0d9c66..15aee4c 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/browser/MozillaFactory.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/browser/MozillaFactory.java
@@ -106,7 +106,7 @@
 	public void setInitializationData(IConfigurationElement config,
 			String propertyName, Object data) throws CoreException {
 		try {
-			Hashtable params = (Hashtable) data;
+			Hashtable<?, ?> params = (Hashtable<?, ?>) data;
 			executable = (String) params.get("executable"); //$NON-NLS-1$
 			executableName = (String) params.get("executableName"); //$NON-NLS-1$
 			osList = (String) params.get("os"); //$NON-NLS-1$
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java b/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
index 62caddf..4fee8b2 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/protocols/HelpURLConnection.java
@@ -185,7 +185,9 @@
 				if (existing == null)
 					arguments.put(arg, val);
 				else if (existing instanceof Vector) {
-					((Vector<String>) existing).add(val);
+					@SuppressWarnings("unchecked")
+					Vector<String> vector = (Vector<String>) existing;
+					vector.add(val);
 					arguments.put(arg, existing);
 				} else {
 					Vector<Object> v = new Vector<Object>(2);
@@ -234,11 +236,14 @@
 	/**
 	 *
 	 */
-	public Vector getMultiValue(String name) {
+	public Vector<String> getMultiValue(String name) {
 		if (arguments != null) {
 			Object value = arguments.get(name);
-			if (value instanceof Vector)
-				return (Vector) value;
+			if (value instanceof Vector) {
+				@SuppressWarnings("unchecked")
+				Vector<String> vector = (Vector<String>) value;
+				return vector;
+			}
 			return null;
 		}
 		return null;
@@ -254,9 +259,11 @@
 		String stringValue = null;
 		if (value instanceof String)
 			stringValue = (String) value;
-		else if (value instanceof Vector)
-			stringValue = (String) ((Vector) value).firstElement();
-		else
+		else if (value instanceof Vector) {
+			@SuppressWarnings("unchecked")
+			Vector<String> vector = (Vector<String>) value;
+			stringValue = vector.firstElement();
+		} else
 			return null;
 		try {
 			return URLCoder.decode(stringValue);
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/AnalyzerDescriptor.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/AnalyzerDescriptor.java
index 36124dc..19a0a2e 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/AnalyzerDescriptor.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/AnalyzerDescriptor.java
@@ -110,7 +110,7 @@
 				else
 					continue;
 				String pluginId = configElements[i].getContributor().getName();
-				String pluginVersion = (String) Platform.getBundle(pluginId).getHeaders()
+				String pluginVersion = Platform.getBundle(pluginId).getHeaders()
 						.get(Constants.BUNDLE_VERSION);
 				this.id = pluginId + "#" + pluginVersion + "?locale=" + locale; //$NON-NLS-1$ //$NON-NLS-2$
 				this.lang = locale;
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLSearchParticipant.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLSearchParticipant.java
index 34c3d69..f3180d4 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLSearchParticipant.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/HTMLSearchParticipant.java
@@ -49,7 +49,7 @@
 			if (participant == null) {
 				participant = getXhtmlParticipant();
 			}
-			return participant.addDocument((IHelpSearchIndex) index, pluginId, name, url, id, doc);
+			return participant.addDocument(index, pluginId, name, url, id, doc);
 		}
 		// otherwise, treat it as HTML
 		else {
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/IndexingOperation.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/IndexingOperation.java
index 457b277..92cb191 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/IndexingOperation.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/IndexingOperation.java
@@ -439,7 +439,7 @@
 		// get the list of indexed docs. This is a hashtable (url, plugin)
 		HelpProperties indexedDocs = index.getIndexedDocs();
 		Set<URL> removedDocs = new HashSet<URL>(indexedDocs.size());
-		for (Iterator docs = indexedDocs.keySet().iterator(); docs.hasNext();) {
+		for (Iterator<?> docs = indexedDocs.keySet().iterator(); docs.hasNext();) {
 			String doc = (String) docs.next();
 			// Assume the url is /pluginID/path_to_topic.html
 			int i = doc.indexOf('/', 1);
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/LocalSearchManager.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/LocalSearchManager.java
index e928591..238ec02 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/LocalSearchManager.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/LocalSearchManager.java
@@ -465,7 +465,7 @@
 					continue;
 				//ArrayList participants = (ArrayList) entry;
 				for (int j = 0; j < participants.size(); j++) {
-					ParticipantDescriptor desc = (ParticipantDescriptor) participants.get(j);
+					ParticipantDescriptor desc = participants.get(j);
 					if (desc.contains(refEl)) {
 						// found the matching descriptor - add it to the list
 						if (list == null)
@@ -538,7 +538,7 @@
 		}
 		if (result == PARTICIPANTS_NOT_FOUND)
 			return null;
-		return (ArrayList<ParticipantDescriptor>) result;
+		return result;
 	}
 
 	public void search(ISearchQuery searchQuery, ISearchHitCollector collector, IProgressMonitor pm)
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginVersionInfo.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginVersionInfo.java
index 6f7e95d..e8cc493 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginVersionInfo.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/PluginVersionInfo.java
@@ -78,7 +78,7 @@
 			}
 			StringBuffer pluginVersionAndFragments = new StringBuffer();
 			appendBundleInformation(pluginVersionAndFragments, bundleId,
-					(String) pluginBundle.getHeaders().get(
+					pluginBundle.getHeaders().get(
 							Constants.BUNDLE_VERSION));
 			Bundle[] fragmentBundles = Platform.getFragments(pluginBundle);
 			if (fragmentBundles != null) {
@@ -88,7 +88,7 @@
 						continue;
 					appendBundleInformation(pluginVersionAndFragments,
 							fragmentBundles[f].getSymbolicName(),
-							(String) fragmentBundles[f].getHeaders().get(
+							fragmentBundles[f].getHeaders().get(
 									Constants.BUNDLE_VERSION));
 				}
 			}
@@ -136,7 +136,7 @@
 				}
 			}
 		}
-		for (Enumeration keysEnum = oldContrs.keys(); keysEnum
+		for (Enumeration<?> keysEnum = oldContrs.keys(); keysEnum
 				.hasMoreElements();) {
 			String oneContr = (String) keysEnum.nextElement();
 			if (!this.containsKey(oneContr)) {
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
index 9cc690e..08cf58a 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/QueryBuilder.java
@@ -245,7 +245,7 @@
 		Reader reader = new StringReader(text);
 		TokenStream tStream = analyzer.tokenStream(fieldName, reader);
 
-		CharTermAttribute termAttribute = (CharTermAttribute) tStream.getAttribute(CharTermAttribute.class);
+		CharTermAttribute termAttribute = tStream.getAttribute(CharTermAttribute.class);
 		try {
 			while (tStream.incrementToken()) {
 				String term = termAttribute.toString();
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchHit.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchHit.java
index dc3f880..f18dc82 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchHit.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchHit.java
@@ -57,8 +57,8 @@
 		if (o == this) {
 			return 0;
 		}
-		float s1 = ((SearchHit)this).getScore();
-		float s2 = ((SearchHit)o).getScore();
+		float s1 = this.getScore();
+		float s2 = o.getScore();
 		return (s1 < s2 ? 1 : s1 > s2 ? -1 : 0);
 	}
 
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
index 33c9476..67963a5 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchIndex.java
@@ -479,8 +479,8 @@
 
 				HelpProperties prebuiltDocs = new HelpProperties(INDEXED_DOCS_FILE, new File(indexPath));
 				prebuiltDocs.restore();
-				Set prebuiltHrefs = prebuiltDocs.keySet();
-				for (Iterator it = prebuiltHrefs.iterator(); it.hasNext();) {
+				Set<?> prebuiltHrefs = prebuiltDocs.keySet();
+				for (Iterator<?> it = prebuiltHrefs.iterator(); it.hasNext();) {
 					String href = (String) it.next();
 					if (i == 0) {
 						// optimization for first prebuilt index of a plug-in
@@ -725,7 +725,7 @@
 		String luceneVersionString = ""; //$NON-NLS-1$
 		Bundle luceneBundle = Platform.getBundle(LUCENE_BUNDLE_ID);
 		if (luceneBundle != null) {
-			luceneVersionString += (String) luceneBundle.getHeaders()
+			luceneVersionString += luceneBundle.getHeaders()
 					.get(Constants.BUNDLE_VERSION);
 		}
 		Version luceneVersion = new Version(luceneVersionString);
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResults.java b/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResults.java
index d0cd0fd..1b7d1fa 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResults.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/search/SearchResults.java
@@ -94,9 +94,9 @@
 					// topic outside of scope
 					continue;
 				} else if ((scope instanceof AdaptableToc) || (scope instanceof AdaptableSelectedToc)) {
-					toc = (IToc) scope.getAdapter(IToc.class);
+					toc = scope.getAdapter(IToc.class);
 				} else if((scope instanceof AdaptableTopic) || (scope instanceof AdaptableSelectedTopic)){ // scope is AdaptableTopic or AdaptableSelectedTopic
-					toc = (IToc) scope.getParent().getAdapter(IToc.class);
+					toc = scope.getParent().getAdapter(IToc.class);
 				}
 			}
 
@@ -192,8 +192,8 @@
 			return null;
 		}
         String href = scope.getHref();
-		if(scope.getAdapter(IToc.class) instanceof IToc){
-			IToc toc=(IToc)scope.getAdapter(IToc.class);
+        IToc toc=scope.getAdapter(IToc.class);
+		if (toc != null){
 			href=toc.getTopic(null).getHref();
 		}
 
@@ -205,7 +205,7 @@
 				for (int i = 0; i < childrenScopes.length; i++) {
 					// To find the target toc recursively because scope.getHref
 					// may be null.
-					IToc toc = getTocForScope(childrenScopes[i], locale);
+					toc = getTocForScope(childrenScopes[i], locale);
 					if (toc != null)
 						return toc;
 				}
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java b/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java
index 66b63ed..b15feed 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/server/JettyHelpServer.java
@@ -58,7 +58,7 @@
 
 		public void run() {
 			try {
-				final Dictionary<String, Comparable> d = new Hashtable<String, Comparable>();
+				final Dictionary<String, Object> d = new Hashtable<String, Object>();
 				final int SESSION_TIMEOUT_INTERVAL_IN_SECONDS = 30*60;  // 30 minutes
 				configurePort();
 				d.put("http.port", new Integer(getPortParameter())); //$NON-NLS-1$
@@ -126,7 +126,7 @@
 		}
 		if (port == -1) {
 			// Jetty selected a port number for us
-			ServiceReference[] reference = bundle.getBundleContext().getServiceReferences("org.osgi.service.http.HttpService", "(other.info=" + getOtherInfo() + ')'); //$NON-NLS-1$ //$NON-NLS-2$
+			ServiceReference<?>[] reference = bundle.getBundleContext().getServiceReferences("org.osgi.service.http.HttpService", "(other.info=" + getOtherInfo() + ')'); //$NON-NLS-1$ //$NON-NLS-2$
 			Object assignedPort = reference[0].getProperty("http.port"); //$NON-NLS-1$
 			port = Integer.parseInt((String)assignedPort);
 		}
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/Eclipse.java b/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/Eclipse.java
index 4eb3bab..eb4add8 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/Eclipse.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/standalone/Eclipse.java
@@ -57,11 +57,11 @@
 		cmdarray[1] = "-vm"; //$NON-NLS-1$
 		cmdarray[2] = Options.getVm();
 		for (int i = 0; i < eclipseArgs.size(); i++) {
-			cmdarray[3 + i] = (String) eclipseArgs.get(i);
+			cmdarray[3 + i] = eclipseArgs.get(i);
 		}
 		cmdarray[3 + eclipseArgs.size()] = "-vmargs"; //$NON-NLS-1$
 		for (int i = 0; i < vmArgs.size(); i++) {
-			cmdarray[4 + eclipseArgs.size() + i] = (String) vmArgs.get(i);
+			cmdarray[4 + eclipseArgs.size() + i] = vmArgs.get(i);
 		}
 	}
 	private void prepareJavaCommand() throws Exception {
@@ -70,13 +70,13 @@
 		cmdarray = new String[1 + vmArgs.size() + 3 + eclipseArgs.size()];
 		cmdarray[0] = Options.getVm();
 		for (int i = 0; i < vmArgs.size(); i++) {
-			cmdarray[1 + i] = (String) vmArgs.get(i);
+			cmdarray[1 + i] = vmArgs.get(i);
 		}
 		cmdarray[1 + vmArgs.size()] = "-cp"; //$NON-NLS-1$
 		cmdarray[2 + vmArgs.size()] = getStartupJar();
 		cmdarray[3 + vmArgs.size()] = "org.eclipse.core.launcher.Main"; //$NON-NLS-1$
 		for (int i = 0; i < eclipseArgs.size(); i++) {
-			cmdarray[4 + vmArgs.size() + i] = (String) eclipseArgs.get(i);
+			cmdarray[4 + vmArgs.size() + i] = eclipseArgs.get(i);
 		}
 	}
 	/**
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/AdaptableTocsArray.java b/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/AdaptableTocsArray.java
index 4ead08e..3e3f861 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/AdaptableTocsArray.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/AdaptableTocsArray.java
@@ -63,7 +63,7 @@
 			for (int i = 0; i < children.length; i++)
 				map.put(children[i].getHref(), children[i]);
 		}
-		return (AdaptableToc) map.get(href);
+		return map.get(href);
 	}
 
 	IToc[] asArray() {
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/WorkingSetComparator.java b/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/WorkingSetComparator.java
index dbff356..09de0ab 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/WorkingSetComparator.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/WorkingSetComparator.java
@@ -28,11 +28,11 @@
 		String name1 = null;
 		String name2 = null;
 
-		if (o1 instanceof WorkingSet)
-			name1 = ((WorkingSet) o1).getName();
+		if (o1 != null)
+			name1 = o1.getName();
 
-		if (o2 instanceof WorkingSet)
-			name2 = ((WorkingSet) o2).getName();
+		if (o2 != null)
+			name2 = o2.getName();
 
 		if (name1 == null || name2 == null)
 			return -1;
diff --git a/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/WorkingSetManager.java b/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/WorkingSetManager.java
index 4966e49..47dba60 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/WorkingSetManager.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/internal/workingset/WorkingSetManager.java
@@ -68,7 +68,7 @@
 
 	private AdaptableTocsArray root;
 
-	private Map allCriteriaValues;
+	private Map<String, Set<String>> allCriteriaValues;
 
 	private static final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
 			.newInstance();
@@ -492,7 +492,7 @@
 		}
 		List<String> valueIds = new ArrayList<String>();
 		if(null != criterionName && null != allCriteriaValues) {
-			Set<String> criterionValues = (Set<String>)allCriteriaValues.get(criterionName);
+			Set<String> criterionValues = allCriteriaValues.get(criterionName);
 			if(null != criterionValues && !criterionValues.isEmpty()) {
 				valueIds.addAll(criterionValues);
 				Collections.sort(valueIds);
diff --git a/org.eclipse.help.base/src/org/eclipse/help/search/HelpIndexBuilder.java b/org.eclipse.help.base/src/org/eclipse/help/search/HelpIndexBuilder.java
index 4320f54..43cfddd 100644
--- a/org.eclipse.help.base/src/org/eclipse/help/search/HelpIndexBuilder.java
+++ b/org.eclipse.help.base/src/org/eclipse/help/search/HelpIndexBuilder.java
@@ -19,7 +19,6 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Dictionary;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Locale;
@@ -690,7 +689,7 @@
 			try {
 				Manifest OSGiManifest = new Manifest(new FileInputStream(
 						OSGiFile));
-				Dictionary headers = manifestToProperties(OSGiManifest
+				Properties headers = manifestToProperties(OSGiManifest
 						.getMainAttributes());
 				String value = headers.get(Constants.BUNDLE_SYMBOLICNAME)
 						.toString();
@@ -768,7 +767,7 @@
 	}
 
 	private Properties manifestToProperties(Attributes d) {
-		Iterator iter = d.keySet().iterator();
+		Iterator<Object> iter = d.keySet().iterator();
 		Properties result = new Properties();
 		while (iter.hasNext()) {
 			Attributes.Name key = (Attributes.Name) iter.next();
diff --git a/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/Entities.java b/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/Entities.java
index 348df1c..cec2528 100644
--- a/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/Entities.java
+++ b/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/Entities.java
@@ -19,7 +19,7 @@
 import java.util.*;
 
 public class Entities {
-  static final Hashtable decoder = new Hashtable(300);
+  static final Hashtable<String, String> decoder = new Hashtable<String, String>(300);
   static final String[]  encoder = new String[0x100];
 
   static final String decode(String entity) {
@@ -36,7 +36,7 @@
 	new Character((char)Integer.parseInt(entity.substring(start), radix));
       return c.toString();
     } else {
-      String s = (String)decoder.get(entity);
+      String s = decoder.get(entity);
       if (s != null)
 	return s;
       else return ""; //$NON-NLS-1$
@@ -48,7 +48,7 @@
     StringBuffer buffer = new StringBuffer(length * 2);
     for (int i = 0; i < length; i++) {
       char c = s.charAt(i);
-      int j = (int)c;
+      int j = c;
       if (j < 0x100 && encoder[j] != null) {
 	buffer.append(encoder[j]);		  // have a named encoding
 	buffer.append(';');
diff --git a/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParser.java b/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParser.java
index 16a51c6..73aa9f4 100644
--- a/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParser.java
+++ b/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParser.java
@@ -622,7 +622,7 @@
       return (jj_ntk = jj_nt.kind);
   }
 
-  private java.util.Vector jj_expentries = new java.util.Vector();
+  private java.util.Vector<int[]> jj_expentries = new java.util.Vector<int[]>();
   private int[] jj_expentry;
   private int jj_kind = -1;
   private int[] jj_lasttokens = new int[100];
@@ -638,8 +638,8 @@
         jj_expentry[i] = jj_lasttokens[i];
       }
       boolean exists = false;
-      for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {
-        int[] oldentry = (int[])(e.nextElement());
+      for (java.util.Enumeration<int[]> e = jj_expentries.elements(); e.hasMoreElements();) {
+        int[] oldentry = e.nextElement();
         if (oldentry.length == jj_expentry.length) {
           exists = true;
           for (int i = 0; i < jj_expentry.length; i++) {
@@ -687,7 +687,7 @@
     jj_add_error_token(0, 0);
     int[][] exptokseq = new int[jj_expentries.size()][];
     for (int i = 0; i < jj_expentries.size(); i++) {
-      exptokseq[i] = (int[])jj_expentries.elementAt(i);
+      exptokseq[i] = jj_expentries.elementAt(i);
     }
     return new ParseException(token, exptokseq, tokenImage);
   }
diff --git a/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParserTokenManager.java b/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParserTokenManager.java
index ceb0818..7a9a0f7 100644
--- a/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParserTokenManager.java
+++ b/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/HTMLParserTokenManager.java
@@ -511,7 +511,7 @@
       }
       else
       {
-         int hiByte = (int)(curChar >> 8);
+         int hiByte = curChar >> 8;
          int i1 = hiByte >> 6;
          long l1 = 1L << (hiByte & 077);
          int i2 = (curChar & 0xff) >> 6;
@@ -615,7 +615,7 @@
       }
       else
       {
-         int hiByte = (int)(curChar >> 8);
+         int hiByte = curChar >> 8;
          int i1 = hiByte >> 6;
          long l1 = 1L << (hiByte & 077);
          int i2 = (curChar & 0xff) >> 6;
@@ -703,7 +703,7 @@
       }
       else
       {
-         int hiByte = (int)(curChar >> 8);
+         int hiByte = curChar >> 8;
          int i1 = hiByte >> 6;
          long l1 = 1L << (hiByte & 077);
          int i2 = (curChar & 0xff) >> 6;
@@ -798,7 +798,7 @@
       }
       else
       {
-         int hiByte = (int)(curChar >> 8);
+         int hiByte = curChar >> 8;
          int i1 = hiByte >> 6;
          long l1 = 1L << (hiByte & 077);
          int i2 = (curChar & 0xff) >> 6;
@@ -940,7 +940,7 @@
       }
       else
       {
-         int hiByte = (int)(curChar >> 8);
+         int hiByte = curChar >> 8;
          int i1 = hiByte >> 6;
          long l1 = 1L << (hiByte & 077);
          int i2 = (curChar & 0xff) >> 6;
@@ -1108,7 +1108,7 @@
       }
       else
       {
-         int hiByte = (int)(curChar >> 8);
+         int hiByte = curChar >> 8;
          int i1 = hiByte >> 6;
          long l1 = 1L << (hiByte & 077);
          int i2 = (curChar & 0xff) >> 6;
@@ -1251,7 +1251,7 @@
       }
       else
       {
-         int hiByte = (int)(curChar >> 8);
+         int hiByte = curChar >> 8;
          int i1 = hiByte >> 6;
          long l1 = 1L << (hiByte & 077);
          int i2 = (curChar & 0xff) >> 6;
@@ -1423,7 +1423,7 @@
       }
       else
       {
-         int hiByte = (int)(curChar >> 8);
+         int hiByte = curChar >> 8;
          int i1 = hiByte >> 6;
          long l1 = 1L << (hiByte & 077);
          int i2 = (curChar & 0xff) >> 6;
diff --git a/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/Tags.java b/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/Tags.java
index aa37df0..c0d8324 100644
--- a/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/Tags.java
+++ b/org.eclipse.help.base/src_demo/org/apache/lucene/demo/html/Tags.java
@@ -26,7 +26,7 @@
   /**
    * contains all tags for which whitespaces have to be inserted for proper tokenization
    */
-  public static final Set WS_ELEMS = Collections.synchronizedSet(new HashSet());
+  public static final Set<String> WS_ELEMS = Collections.synchronizedSet(new HashSet<String>());
 
   static{
     WS_ELEMS.add("<hr"); //$NON-NLS-1$
