Bug 397475
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/reconcile/DirtyRegionProcessor.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/reconcile/DirtyRegionProcessor.java
index d361d51..7eb51ff 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/reconcile/DirtyRegionProcessor.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/reconcile/DirtyRegionProcessor.java
@@ -521,6 +521,9 @@
 	 */
 	private synchronized DirtyRegion[] getRequests() {
 		synchronized (fDirtyRegionQueue) {
+			if (0 == fDirtyRegionQueue.size()) {
+				return null;
+			}
 			DirtyRegion[] toRefresh = (DirtyRegion[]) fDirtyRegionQueue.toArray(new DirtyRegion[fDirtyRegionQueue.size()]);
 			flushDirtyRegionQueue();
 			return toRefresh;
@@ -678,15 +681,15 @@
 				boolean processed = false;
 				try {
 					DirtyRegion[] toRefresh = getRequests();
-					if (toRefresh.length > 0) {
+					if (toRefresh != null && toRefresh.length > 0) {
 						processed = true;
 						beginProcessing();
-					}
-	
-					for (int i = 0; i < toRefresh.length && fDocument != null; i++) {
-						if (fIsCanceled)
-							return;
-						process(toRefresh[i]);
+
+						for (int i = 0; i < toRefresh.length && fDocument != null; i++) {
+							if (fIsCanceled)
+								return;
+							process(toRefresh[i]);
+						}
 					}
 				}
 				finally {