diff --git a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
index 86c0638..2a4588b 100644
--- a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
+++ b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntCorePreferences.java
@@ -606,7 +606,7 @@
 		String eclipseRuntime = element.getAttribute(AntCorePlugin.ECLIPSE_RUNTIME);
 		boolean eclipseRuntimeRequired = true;
 		if (eclipseRuntime != null) {
-			eclipseRuntimeRequired = Boolean.valueOf(eclipseRuntime).booleanValue();
+			eclipseRuntimeRequired = Boolean.parseBoolean(eclipseRuntime);
 		}
 		Iterator<AntClasspathEntry> itr = extraClasspathURLs.iterator();
 		while (itr.hasNext()) {
@@ -683,7 +683,7 @@
 	private boolean configureAntObject(IConfigurationElement element, AntObject antObject, String objectName, String errorMessage) {
 		String runtime = element.getAttribute(AntCorePlugin.ECLIPSE_RUNTIME);
 		if (runtime != null) {
-			antObject.setEclipseRuntimeRequired(Boolean.valueOf(runtime).booleanValue());
+			antObject.setEclipseRuntimeRequired(Boolean.parseBoolean(runtime));
 		}
 
 		String uri = element.getAttribute(AntCorePlugin.URI);
@@ -774,7 +774,7 @@
 		if (runningHeadless) {
 			String headless = element.getAttribute(AntCorePlugin.HEADLESS);
 			if (headless != null) {
-				boolean headlessProperty = Boolean.valueOf(headless).booleanValue();
+				boolean headlessProperty = Boolean.parseBoolean(headless);
 				if (!headlessProperty) {
 					return false;
 				}
@@ -817,7 +817,7 @@
 			defaultProperties.add(property);
 			String runtime = element.getAttribute(AntCorePlugin.ECLIPSE_RUNTIME);
 			if (runtime != null) {
-				property.setEclipseRuntimeRequired(Boolean.valueOf(runtime).booleanValue());
+				property.setEclipseRuntimeRequired(Boolean.parseBoolean(runtime));
 			}
 		}
 	}
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
index cd49a48..7c0ac87 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
@@ -672,7 +672,7 @@
 		}
 
 		if (AntEditorPreferenceConstants.EDITOR_MARK_OCCURRENCES.equals(property)) {
-			boolean newBooleanValue = Boolean.valueOf(event.getNewValue().toString()).booleanValue();
+			boolean newBooleanValue = Boolean.parseBoolean(event.getNewValue().toString());
 			if (newBooleanValue != fMarkOccurrenceAnnotations) {
 				fMarkOccurrenceAnnotations = newBooleanValue;
 				if (fMarkOccurrenceAnnotations) {
@@ -684,7 +684,7 @@
 			return;
 		}
 		if (AntEditorPreferenceConstants.EDITOR_STICKY_OCCURRENCES.equals(property)) {
-			boolean newBooleanValue = Boolean.valueOf(event.getNewValue().toString()).booleanValue();
+			boolean newBooleanValue = Boolean.parseBoolean(event.getNewValue().toString());
 			fStickyOccurrenceAnnotations = newBooleanValue;
 			return;
 		}
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleAutoReconcileAction.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleAutoReconcileAction.java
index d65561a..ce779f7 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleAutoReconcileAction.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleAutoReconcileAction.java
@@ -95,7 +95,7 @@
 	@Override
 	public void propertyChange(PropertyChangeEvent event) {
 		if (event.getProperty().equals(AntEditorPreferenceConstants.EDITOR_RECONCILE)) {
-			setChecked(Boolean.valueOf(event.getNewValue().toString()).booleanValue());
+			setChecked(Boolean.parseBoolean(event.getNewValue().toString()));
 		}
 	}
 }
\ No newline at end of file
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleMarkOccurrencesAction.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleMarkOccurrencesAction.java
index c59876f..33d626f 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleMarkOccurrencesAction.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleMarkOccurrencesAction.java
@@ -88,6 +88,6 @@
 	@Override
 	public void propertyChange(PropertyChangeEvent event) {
 		if (event.getProperty().equals(AntEditorPreferenceConstants.EDITOR_MARK_OCCURRENCES))
-			setChecked(Boolean.valueOf(event.getNewValue().toString()).booleanValue());
+			setChecked(Boolean.parseBoolean(event.getNewValue().toString()));
 	}
 }
\ No newline at end of file
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
index 84e6ca4..ef62faf 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
@@ -494,7 +494,7 @@
 			restoreViewerInput(memento);
 			IMemento child = memento.getChild(TAG_FILTER_INTERNAL_TARGETS);
 			if (child != null) {
-				filterInternalTargets = Boolean.valueOf(child.getString(KEY_VALUE)).booleanValue();
+				filterInternalTargets = Boolean.parseBoolean(child.getString(KEY_VALUE));
 			}
 		}
 	}
@@ -535,9 +535,9 @@
 				nameString = IAntCoreConstants.EMPTY_STRING;
 			}
 			project = new AntProjectNodeProxy(nameString, pathString);
-			if (errorString != null && Boolean.valueOf(errorString).booleanValue()) {
+			if (errorString != null && Boolean.parseBoolean(errorString)) {
 				project.setProblemSeverity(AntModelProblem.SEVERITY_ERROR);
-			} else if (warningString != null && Boolean.valueOf(warningString).booleanValue()) {
+			} else if (warningString != null && Boolean.parseBoolean(warningString)) {
 				project.setProblemSeverity(AntModelProblem.SEVERITY_WARNING);
 			}
 			if (defaultTarget != null) {
