[249044] Web module's jar modules from another project are not published for Tomcat.
[292162] isSingleRoot API should allow non Java src folder as output for JCA
[292186] WebLib Quick fixes reverting exclusions
[292079] [parser] Scriptlet in <script> attribute tags can cause the region to not be block text
[292081] [translation] Javascript can cause custom tags to not be translated
[292177] [validation] JSPDirectiveValidator#processTaglibDirective should handle URL Taglib Records
[291960] XMLViewer makes (apparently) invalid assumptions about TransformerFactory
[241794] [validation] Errors when using JSP Expressions inside JavaScript code
[292079] [parser] Scriptlet in <script> attribute tags can cause the region to not be block text
[292088] DirtyRegionProcessor Job may not be canceled when the editor closes
[289745] [document] StructuredDocumentRegionUtil not compensating for StructuredDocumentRegionProxy
[292469] [parser] XMLSourceParser#regionMatches should compensate for offset
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java
index c48c306..0976c43 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/java/XMLJSPRegionHelper.java
@@ -185,6 +185,11 @@
 				fTagname = null;
 			}
 			else if (isJSPStartRegion(sdRegion)) {
+				int illegalContent = hasIllegalContent(sdRegion);
+				// If illegal content was found, start decoding again after the region
+				if (illegalContent >= 0)
+					decodeRemainingRegions(sdRegion, illegalContent + 1);
+
 				String nameStr = getRegionName(sdRegion);
 				if (sdRegion.getFirstRegion().getType() == DOMRegionContext.XML_TAG_OPEN) {
 					if (isPossibleCustomTag(nameStr)) {
@@ -265,6 +270,27 @@
 		}
 	}
 
+	private void decodeRemainingRegions(IStructuredDocumentRegion sdRegion, int start) {
+		ITextRegion region = sdRegion.getRegions().get(start);
+		String text = sdRegion.getFullText();
+		if (region.getStart() <= text.length())
+			fTranslator.decodeScriptBlock(text.substring(region.getStart(), text.length()), 0);
+	}
+
+	private int hasIllegalContent(IStructuredDocumentRegion sdRegion) {
+		ITextRegionList list = sdRegion.getRegions();
+		for (int i = 0; i < list.size(); i++) {
+			ITextRegion region = list.get(i);
+			String type = region.getType();
+			if (type == DOMRegionContext.UNDEFINED)
+				return i;
+			if (type == DOMRegionContext.XML_END_TAG_OPEN || type == DOMRegionContext.XML_EMPTY_TAG_CLOSE || type == DOMJSPRegionContexts.JSP_DIRECTIVE_CLOSE)
+				return -1;
+		}
+		return -1;
+	}
+
+
 	public void resetNodes() {
 		// do nothing
 	}
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/parser/internal/JSPTokenizer.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/parser/internal/JSPTokenizer.java
index 1e70a35..dc9667d 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/parser/internal/JSPTokenizer.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/parser/internal/JSPTokenizer.java
@@ -1,4 +1,4 @@
-/* The following code was generated by JFlex 1.2.2 on 6/3/09 11:14 PM */
+/* The following code was generated by JFlex 1.2.2 on 10/14/09 4:54 PM */
 
 /*******************************************************************************
  * Copyright (c) 2004, 2009 IBM Corporation and others.
@@ -37,8 +37,8 @@
 /**
  * This class is a scanner generated by 
  * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
- * on 6/3/09 11:14 PM from the specification file
- * <tt>file:/E:/wtp-3.0/releng.workspace/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex</tt>
+ * on 10/14/09 4:54 PM from the specification file
+ * <tt>file:/D:/dev/workspaces/wtp3.0.5p/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex</tt>
  */
 public class JSPTokenizer implements BlockTokenizer, DOMJSPRegionContexts {
 
@@ -1328,6 +1328,8 @@
  */
 private final String doScan(String searchString, boolean requireTailSeparator, boolean allowJSP, boolean allowCDATA, String searchContext, int exitState, int immediateFallbackState) throws IOException {
 	boolean stillSearching = true;
+	boolean wasBlockingEnabled = fIsBlockingEnabled;
+	try {
 	// Disable further block (probably)
 	fIsBlockingEnabled = false;
 	int searchStringLength = searchString.length();
@@ -1596,6 +1598,10 @@
 		return UNDEFINED;
 	}
 	return searchContext;
+	}
+	finally {
+		fIsBlockingEnabled = wasBlockingEnabled;
+	}
 }
 /**
  * user method 
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/validation/JSPDirectiveValidator.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/validation/JSPDirectiveValidator.java
index c0890d7..eb927c5 100644
--- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/validation/JSPDirectiveValidator.java
+++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/validation/JSPDirectiveValidator.java
@@ -26,6 +26,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.preferences.DefaultScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
@@ -46,6 +47,7 @@
 import org.eclipse.jst.jsp.core.taglib.ITLDRecord;
 import org.eclipse.jst.jsp.core.taglib.ITagDirRecord;
 import org.eclipse.jst.jsp.core.taglib.ITaglibRecord;
+import org.eclipse.jst.jsp.core.taglib.IURLRecord;
 import org.eclipse.jst.jsp.core.taglib.TaglibIndex;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.wst.html.core.internal.contentmodel.JSP20Namespace;
@@ -390,6 +392,35 @@
 								}
 							}
 								break;
+							case (ITaglibRecord.URL) : {
+								IURLRecord record = (IURLRecord) reference;
+								String baseLocation = record.getBaseLocation();
+								if (baseLocation != null && baseLocation.indexOf("://") < 0) {
+									IResource found = ResourcesPlugin.getWorkspace().getRoot().findMember(baseLocation, false);
+									if (found != null) {
+										try {
+											found.accept(new IResourceVisitor() {
+												public boolean visit(IResource resource) throws CoreException {
+													if (resource.getType() == IResource.FILE) {
+														addDependsOn(resource);
+													}
+													return true;
+												}
+											});
+										}
+										catch (CoreException e) {
+											Logger.logException(e);
+										}
+									}
+									else {
+										IFile externalJar = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(baseLocation));
+										if (externalJar != null) {
+											addDependsOn(externalJar);
+										}
+									}
+								}
+							}
+								break;
 						}
 					}
 					if (reference == null && fSeverityTaglibUnresolvableURI != ValidationMessage.IGNORE) {
diff --git a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/javascript/JsTranslator.java b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/javascript/JsTranslator.java
index ffb7c08..a38bfa6 100644
--- a/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/javascript/JsTranslator.java
+++ b/bundles/org.eclipse.wst.jsdt.web.core/src/org/eclipse/wst/jsdt/web/core/javascript/JsTranslator.java
@@ -77,8 +77,7 @@
 	private static final String XML_COMMENT_START = "<!--"; //$NON-NLS-1$
 //	private static final String XML_COMMENT_END = "-->"; //$NON-NLS-1$
 	private static final boolean REPLACE_INNER_BLOCK_SECTIONS_WITH_SPACE = false;
-	private static final Pattern fClientSideTagPattern = Pattern.compile("<[^)>]+/?>"); //$NON-NLS-1$
-	private static final Pattern fServerSideTagPattern = Pattern.compile("<%([^%]|%[^>])*%>"); //$NON-NLS-1$
+	private static final Pattern fClientSideTagPattern = Pattern.compile("<[^<)>%]+/?>"); //$NON-NLS-1$
 	
 	
 	static {
@@ -510,19 +509,43 @@
 //				}
 				else {
 					// fix for https://bugs.eclipse.org/bugs/show_bug.cgi?id=284774
-					int index = -1;
-					int end = 0;
+					// last offset of content that was skipped
+					int validStart = 0;
+					// start of content to skip
+					int validEnd = 0;
+					
 					Matcher matcher = fClientSideTagPattern.matcher(regionText);
 					StringBuffer contents = new StringBuffer();
 					// find any instance of tags in the region text
-					if (!fServerSideTagPattern.matcher(regionText).matches()) {
-						while (index < regionText.length() && matcher.find(index + 1)) { //$NON-NLS-1$
-							index = matcher.start();
-							if (index > end)
-								contents.append(regionText.substring(end, index));
-							end = matcher.end();
-							// change the tag name to a valid variable name
-							int startOffset = container.getStartOffset(region) + index;
+					int serverSideStart = regionText.indexOf("<%");
+					int clientMatchStart = matcher.find() ? matcher.start() : -1;
+					// contains server-side script
+					while (serverSideStart > -1 || clientMatchStart > -1) { //$NON-NLS-1$
+						validEnd = validStart;
+						boolean biasClient = false;
+						boolean biasServer = false;
+						// update the start of content to skip
+						if (clientMatchStart > -1 && serverSideStart > -1) {
+							validEnd = Math.min(clientMatchStart, serverSideStart);
+							biasClient = validEnd == clientMatchStart;
+							biasServer = validEnd == serverSideStart;
+						}
+						else if (clientMatchStart > -1 && serverSideStart < 0) {
+							validEnd = clientMatchStart;
+							biasClient = true;
+						}
+						else if (clientMatchStart < 0 && serverSideStart > -1) {
+							validEnd = serverSideStart;
+							biasServer = true;
+						}
+						
+						// append if there's something we want to include
+						if (-1 < validStart && -1 < validEnd) {
+							// append what we want to include
+							contents.append(regionText.substring(validStart, validEnd));
+							
+							// change the skipped content to a valid variable name and append it as a placeholder
+							int startOffset = container.getStartOffset(region) + validEnd;
 							int line = container.getParentDocument().getLineOfOffset(startOffset);
 							int column;
 							try {
@@ -533,25 +556,50 @@
 							}
 							if (line >= 0 && column >= 0) {
 								// if the column looks wrong, note any leading tabs would make it non-obvious
-								contents.append("__tag_" + (line+1) + "$" + column); //$NON-NLS-1$ //$NON-NLS-2$
+								contents.append("__tag_" + (line+1) + "$" + column + "_"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 							}
 							else {
-								contents.append("__tag_" + startOffset); //$NON-NLS-1$ //$NON-NLS-2$
+								contents.append("__tag_" + startOffset + "_"); //$NON-NLS-1$ //$NON-NLS-2$
 							}
+
+							int serverSideEnd = (regionLength > validEnd + 2) ? regionText.indexOf("%>", validEnd + 2) : -1;
+							if (serverSideEnd > -1)
+								serverSideEnd += 2;
+							int clientMatchEnd = matcher.find(validEnd) ? matcher.end() : -1;
+							// update end of what we skipped
+							validStart = -1;
+							if (clientMatchEnd > validEnd && serverSideEnd > validEnd) {
+								if (biasClient)
+									validStart = clientMatchEnd;
+								else if (biasServer)
+									validStart = serverSideEnd;
+								else
+									validStart = Math.min(clientMatchEnd, serverSideEnd);
+							}
+							if (clientMatchEnd >= validEnd && serverSideEnd < 0)
+								validStart = matcher.end();
+							if (clientMatchEnd < 0 && serverSideEnd >= validEnd)
+								validStart = serverSideEnd;
 						}
-						if (end > 0) {
-							contents.append(regionText.substring(end));
-						}
-						if (contents.length() != 0) {
-							fScriptText.append(contents.toString());
+						// set up to end while if no end for valid
+						if (validStart > 0) {
+							serverSideStart = validStart < regionLength - 2 ? regionText.indexOf("<%", validStart) : -1;
+							clientMatchStart = validStart < regionLength ? (matcher.find(validStart + 1) ? matcher.start() : -1) : -1;
 						}
 						else {
-							fScriptText.append(regionText);
+							serverSideStart = clientMatchStart = -1;
 						}
 					}
-					else {
-						fScriptText.append(Util.getPad(regionLength));
+					if (validStart >= 0) {
+						contents.append(regionText.substring(validStart));
 					}
+					if (contents.length() != 0) {
+						fScriptText.append(contents.toString());
+					}
+					else {
+						fScriptText.append(regionText);
+					}
+
 					Position inHtml = new Position(scriptStart, scriptTextLength);
 					scriptLocationInHtml.add(inHtml);
 				}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex
index 05dbb88..7bf4094 100644
--- a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex
@@ -431,6 +431,8 @@
  */

 private final String doScan(String searchString, boolean requireTailSeparator, boolean allowJSP, boolean allowCDATA, String searchContext, int exitState, int immediateFallbackState) throws IOException {

 	boolean stillSearching = true;

+	boolean wasBlockingEnabled = fIsBlockingEnabled;

+	try {

 	// Disable further block (probably)

 	fIsBlockingEnabled = false;

 	int searchStringLength = searchString.length();

@@ -699,6 +701,10 @@
 		return UNDEFINED;

 	}

 	return searchContext;

+	}

+	finally {

+		fIsBlockingEnabled = wasBlockingEnabled;

+	}

 }

 /**

  * user method 

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 e000a06..0a182a9 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
@@ -266,6 +266,7 @@
 
 	/** The job should be reset because of document changes */
 	private boolean fReset = false;
+	private boolean fIsCanceled = false;
 	private Object LOCK = new Object();
 
 	/**
@@ -641,10 +642,15 @@
 					return status;
 				}
 			}
-			processed = true;
-			beginProcessing();
+			if (fIsCanceled)
+				return status;
 
 			DirtyRegion[] toRefresh = getRequests();
+			if (toRefresh.length > 0) {
+				processed = true;
+				beginProcessing();
+			}
+
 			for (int i = 0; i < toRefresh.length; i++) {
 				if (monitor.isCanceled())
 					throw new OperationCanceledException();
@@ -664,7 +670,8 @@
 		finally {
 			if (processed)
 				endProcessing();
-			schedule(getDelay());
+			if (!fIsCanceled)
+				schedule(getDelay());
 			monitor.done();
 		}
 		return status;
@@ -771,6 +778,8 @@
 			// removes widget listener
 			getTextViewer().removeTextInputListener(fTextInputListener);
 			setInstalled(false);
+			cancel();
+			fIsCanceled = true;
 		}
 		setDocument(null);
 	}
diff --git a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/document/StructuredDocumentRegionUtil.java b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/document/StructuredDocumentRegionUtil.java
index 4bd9b81..84a378b 100644
--- a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/document/StructuredDocumentRegionUtil.java
+++ b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/document/StructuredDocumentRegionUtil.java
@@ -75,6 +75,9 @@
 	 * Returns the first region.
 	 */
 	static ITextRegion getFirstRegion(IStructuredDocumentRegion flatNode) {
+		if(flatNode instanceof StructuredDocumentRegionProxy) {
+			flatNode = ((StructuredDocumentRegionProxy)flatNode).getStructuredDocumentRegion();
+		}
 		if (flatNode == null)
 			return null;
 		ITextRegionList regions = flatNode.getRegions();
@@ -87,6 +90,9 @@
 	 * Returns the type of the first region.
 	 */
 	static String getFirstRegionType(IStructuredDocumentRegion flatNode) {
+		if(flatNode instanceof StructuredDocumentRegionProxy) {
+			flatNode = ((StructuredDocumentRegionProxy)flatNode).getStructuredDocumentRegion();
+		}
 		if (flatNode == null)
 			return DOMRegionContext.UNDEFINED;
 		ITextRegionList regions = flatNode.getRegions();
@@ -114,6 +120,9 @@
 	 * Returns the last region.
 	 */
 	static ITextRegion getLastRegion(IStructuredDocumentRegion flatNode) {
+		if(flatNode instanceof StructuredDocumentRegionProxy) {
+			flatNode = ((StructuredDocumentRegionProxy)flatNode).getStructuredDocumentRegion();
+		}
 		if (flatNode == null)
 			return null;
 		ITextRegionList regions = flatNode.getRegions();
@@ -126,6 +135,9 @@
 	 * Returns the type of the first region.
 	 */
 	static String getLastRegionType(IStructuredDocumentRegion flatNode) {
+		if(flatNode instanceof StructuredDocumentRegionProxy) {
+			flatNode = ((StructuredDocumentRegionProxy)flatNode).getStructuredDocumentRegion();
+		}
 		if (flatNode == null)
 			return DOMRegionContext.UNDEFINED;
 		ITextRegionList regions = flatNode.getRegions();
diff --git a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/parser/XMLSourceParser.java b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/parser/XMLSourceParser.java
index 0ada81c..deb0b1b 100644
--- a/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/parser/XMLSourceParser.java
+++ b/bundles/org.eclipse.wst.xml.core/src/org/eclipse/wst/xml/core/internal/parser/XMLSourceParser.java
@@ -120,16 +120,16 @@
 		 * 
 		 * Protect the user's data above everything.
 		 */
-		try {
-			if (fCurrentNode != null && fStructuredDocumentRegionHandlers != null) {
-				for (int i = 0; i < fStructuredDocumentRegionHandlers.size(); i++) {
+		if (fCurrentNode != null && fStructuredDocumentRegionHandlers != null) {
+			for (int i = 0; i < fStructuredDocumentRegionHandlers.size(); i++) {
+				try {
 					((StructuredDocumentRegionHandler) fStructuredDocumentRegionHandlers.get(i)).nodeParsed(fCurrentNode);
 				}
+				catch (Exception e) {
+					Logger.log(Logger.ERROR, "Error occurred while firing Node Parsed event", e); //$NON-NLS-1$
+				}
 			}
 		}
-		catch (Exception e) {
-		    Logger.log(Logger.ERROR, "Error occurred while firing Node Parsed event", e); //$NON-NLS-1$
-		}
 	}
 
 	public BlockMarker getBlockMarker(String tagName) {
@@ -483,18 +483,19 @@
 		if (stringToCompare == null)
 			return false;
 
+		int ajustedOffset = fOffset + offset;
 		boolean result = false;
 		if (fCharSequenceSource != null && fCharSequenceSource instanceof IRegionComparible) {
-			result = ((IRegionComparible) fCharSequenceSource).regionMatches(offset, length, stringToCompare);
+			result = ((IRegionComparible) fCharSequenceSource).regionMatches(ajustedOffset, length, stringToCompare);
 		}
 		else {
 			// old fashioned ways
 			String test = null;
 			if (fCharSequenceSource != null) {
-				test = fCharSequenceSource.subSequence(offset, offset + length).toString();
+				test = fCharSequenceSource.subSequence(ajustedOffset, ajustedOffset + length).toString();
 			}
 			else if (fStringInput != null) {
-				test = fStringInput.substring(offset, offset + length);
+				test = fStringInput.substring(ajustedOffset, ajustedOffset + length);
 			}
 			result = stringToCompare.equals(test);
 		}
@@ -506,18 +507,19 @@
 		if (stringToCompare == null)
 			return false;
 
+		int ajustedOffset = fOffset + offset;
 		boolean result = false;
 		if (fCharSequenceSource != null && fCharSequenceSource instanceof IRegionComparible) {
-			result = ((IRegionComparible) fCharSequenceSource).regionMatchesIgnoreCase(offset, length, stringToCompare);
+			result = ((IRegionComparible) fCharSequenceSource).regionMatchesIgnoreCase(ajustedOffset, length, stringToCompare);
 		}
 		else {
 			// old fashioned ways
 			String test = null;
 			if (fCharSequenceSource != null) {
-				test = fCharSequenceSource.subSequence(offset, offset + length).toString();
+				test = fCharSequenceSource.subSequence(ajustedOffset, ajustedOffset + length).toString();
 			}
 			else if (fStringInput != null) {
-				test = fStringInput.substring(offset, offset + length);
+				test = fStringInput.substring(ajustedOffset, ajustedOffset + length);
 			}
 			result = stringToCompare.equalsIgnoreCase(test);
 		}
diff --git a/features/org.eclipse.wst.xml_core.feature.patch/buildnotes_org.eclipse.wst.xml_core.feature.patch.html b/features/org.eclipse.wst.xml_core.feature.patch/buildnotes_org.eclipse.wst.xml_core.feature.patch.html
index dbba418..f4f1545 100644
--- a/features/org.eclipse.wst.xml_core.feature.patch/buildnotes_org.eclipse.wst.xml_core.feature.patch.html
+++ b/features/org.eclipse.wst.xml_core.feature.patch/buildnotes_org.eclipse.wst.xml_core.feature.patch.html
@@ -18,5 +18,8 @@
 <p>Bug <a href="https://bugs.eclipse.org/289464">289464</a>. IExecutionDelegate should be using ISafeRunnable</p>
 <p>Bug <a href="https://bugs.eclipse.org/290454">290454</a>. DTD Content Model is missing IDREFS data type name</p>
 <p>Bug <a href="https://bugs.eclipse.org/290966">290966</a>. JSP include directives do not handle non-JSP content types</p>
+<p>Bug <a href='https://bugs.eclipse.org/292079'>292079</a>. [parser] Scriptlet in <script> attribute tags can cause the region to not be block text</p>
+<p>Bug <a href='https://bugs.eclipse.org/289745'>289745</a>. [document] StructuredDocumentRegionUtil not compensating for StructuredDocumentRegionProxy</p>
+<p>Bug <a href='https://bugs.eclipse.org/292469'>292469</a>. [parser] XMLSourceParser#regionMatches should compensate for offset</p>
 </body>
 </head>
\ No newline at end of file
diff --git a/features/org.eclipse.wst.xml_core.feature.patch/feature.properties b/features/org.eclipse.wst.xml_core.feature.patch/feature.properties
index ae65e22..16f70b3 100644
--- a/features/org.eclipse.wst.xml_core.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.xml_core.feature.patch/feature.properties
@@ -36,6 +36,9 @@
 Bug https://bugs.eclipse.org/289464 IExecutionDelegate should be using ISafeRunnable\n\
 Bug https://bugs.eclipse.org/290454 DTD Content Model is missing IDREFS data type name\n\
 Bug https://bugs.eclipse.org/290966 JSP include directives do not handle non-JSP content types\n\
+Bug https://bugs.eclipse.org/292079 [parser] Scriptlet in <script> attribute tags can cause the region to not be block text\n\
+Bug https://bugs.eclipse.org/289745 [document] StructuredDocumentRegionUtil not compensating for StructuredDocumentRegionProxy\n\
+Bug https://bugs.eclipse.org/292469 [parser] XMLSourceParser#regionMatches should compensate for offset\n\
 \n\
 
 # "copyright" property - text of the "Feature Update Copyright"
diff --git a/features/org.eclipse.wst.xml_ui.feature.patch/buildnotes_org.eclipse.wst.xml_ui.feature.patch.html b/features/org.eclipse.wst.xml_ui.feature.patch/buildnotes_org.eclipse.wst.xml_ui.feature.patch.html
index cc0c738..c64e633 100644
--- a/features/org.eclipse.wst.xml_ui.feature.patch/buildnotes_org.eclipse.wst.xml_ui.feature.patch.html
+++ b/features/org.eclipse.wst.xml_ui.feature.patch/buildnotes_org.eclipse.wst.xml_ui.feature.patch.html
@@ -17,6 +17,7 @@
 <p>Bug <a href='https://bugs.eclipse.org/285284'>285284</a>. Removing comment end tag and adding it back leaves validation errors</p>
 <p>Bug <a href="https://bugs.eclipse.org/289464">289464</a>. IExecutionDelegate should be using ISafeRunnable</p>
 <p>Bug <a href='https://bugs.eclipse.org/290322'>290322</a>. [reconciling] DirtyRegionProcessor cancels and schedules a Job for every keystroke</p>
+<p>Bug <a href='https://bugs.eclipse.org/292088'>292088</a>. DirtyRegionProcessor Job may not be canceled when the editor closes</p>
 
 </body>
 </html>
diff --git a/features/org.eclipse.wst.xml_ui.feature.patch/feature.properties b/features/org.eclipse.wst.xml_ui.feature.patch/feature.properties
index 0781fde..1ca8e76 100644
--- a/features/org.eclipse.wst.xml_ui.feature.patch/feature.properties
+++ b/features/org.eclipse.wst.xml_ui.feature.patch/feature.properties
@@ -31,6 +31,7 @@
 Bug https://bugs.eclipse.org/285284 Removing comment end tag and adding it back leaves validation errors\n\
 Bug https://bugs.eclipse.org/289464 IExecutionDelegate should be using ISafeRunnable\n\
 Bug https://bugs.eclipse.org/290322 [reconciling] DirtyRegionProcessor cancels and schedules a Job for every keystroke\n\
+Bug https://bugs.eclipse.org/292088 DirtyRegionProcessor Job may not be canceled when the editor closes\n\
 \n\
 
 # "copyright" property - text of the "Feature Update Copyright"