diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
index fd2d496..3f477ca 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/AntModel.java
@@ -120,6 +120,9 @@
     private Map fTaskNameToDefiningNode;
     private Map fCurrentNodeIdentifiers;
 	
+	private boolean fReportingProblemsCurrent= false;
+	private boolean fDoNotReportProblems= false;
+	
 	public AntModel(IDocument document, IProblemRequestor problemRequestor, LocationProvider locationProvider) {
 		init(document, problemRequestor, locationProvider);
 		
@@ -153,6 +156,7 @@
 				} else if (property.equals(AntEditorPreferenceConstants.CODEASSIST_USER_DEFINED_TASKS)) {
 					reconcileForPropertyChange(false);
 				} else if (property.equals(AntEditorPreferenceConstants.BUILDFILE_NAMES_TO_IGNORE) || property.equals(AntEditorPreferenceConstants.BUILDFILE_IGNORE_ALL)) {
+					fReportingProblemsCurrent= false;
 					reconcileForPropertyChange(false);
 				}
 			}
@@ -520,6 +524,9 @@
 		}
 	}
 
+	/**
+	 * method assumes sendor has checked whether to report problems
+	 */
     private void checkMissingDependencies(AntElementNode node, AntElementNode originalNode) {
         String missing= ((AntTargetNode)node).checkDependencies();
         if (missing != null) {
@@ -535,26 +542,36 @@
     }
 
     private boolean doNotReportProblems() {
+		if (fReportingProblemsCurrent) {
+			return fDoNotReportProblems;
+		}
+		
+		fReportingProblemsCurrent= true;
+		fDoNotReportProblems= false;
+		
 		if (AntUIPlugin.getDefault().getCombinedPreferenceStore().getBoolean(AntEditorPreferenceConstants.BUILDFILE_IGNORE_ALL)) {
-			return true;
+			fDoNotReportProblems= true;
+			return fDoNotReportProblems;
 		}
 		String buildFileNames= AntUIPlugin.getDefault().getCombinedPreferenceStore().getString(AntEditorPreferenceConstants.BUILDFILE_NAMES_TO_IGNORE);
-		if (buildFileNames.length() == 0) {
-			//the user has not specified any names to not report problems for
-			return false;
-		}
-		String[] names= AntUtil.parseString(buildFileNames, ","); //$NON-NLS-1$
-		for (int i = 0; i < names.length; i++) {
-			String string = names[i];
-			File editedFile= getEditedFile();
-			if (string.equals(editedFile.getName())) {
-				return true;
+		if (buildFileNames.length() > 0) {
+			String[] names= AntUtil.parseString(buildFileNames, ","); //$NON-NLS-1$
+			String editedFileName= getEditedFile().getName();
+			for (int i = 0; i < names.length; i++) {
+				String string = names[i];
+				if	(string.trim().equals(editedFileName)) {
+					fDoNotReportProblems= true;
+					return fDoNotReportProblems;
+				}
 			}
 		}
 		
-		return false;
+		return fDoNotReportProblems;
 	}
 
+	/**
+	 * method assumes sendor has checked whether to report problems
+	 */
 	private void checkCircularDependencies(AntElementNode node) {
         Target target= ((AntTargetNode)node).getTarget();
         String name= target.getName();
@@ -645,6 +662,9 @@
     }
 
 	private void markHierarchy(AntElementNode openElement, int severity, String message) {
+		if (doNotReportProblems()) {
+			return;
+		}
 		while (openElement != null) {
 			openElement.setProblemSeverity(severity);
 			openElement.setProblemMessage(message);
@@ -1102,9 +1122,6 @@
 			return;
 		}
 		computeEndLocationForErrorNode(node, start, count);
-		if (doNotReportProblems()) {
-			return;
-		}
 		notifyProblemRequestor(exception, start, count, AntModelProblem.SEVERITY_ERROR);
 		markHierarchy(fLastNode, AntModelProblem.SEVERITY_ERROR, exception.getMessage());
 	} 
@@ -1121,9 +1138,6 @@
 			}
 		}
 		computeEndLocationForErrorNode(node, lineNumber, column);
-		if (doNotReportProblems()) {
-			return;
-		}
 		notifyProblemRequestor(exception, node, AntModelProblem.SEVERITY_ERROR);
 		markHierarchy(node, AntModelProblem.SEVERITY_ERROR, exception.getMessage());
 	}
@@ -1554,9 +1568,6 @@
     	fIsDirty= true;
     	reconcile();
     	AntModelCore.getDefault().notifyAntModelListeners(new AntModelChangeEvent(this, true));
-		if (doNotReportProblems()) {
-			return;
-		}
     	fMarkerUpdater.updateMarkers();
     }
 
