diff --git a/bundles/org.eclipse.wst.xsl.ui/plugin.xml b/bundles/org.eclipse.wst.xsl.ui/plugin.xml
index 234f132..af6abd6 100644
--- a/bundles/org.eclipse.wst.xsl.ui/plugin.xml
+++ b/bundles/org.eclipse.wst.xsl.ui/plugin.xml
@@ -283,5 +283,37 @@
 			<contentType id="org.eclipse.wst.xml.core.xslsource" />
 		</adapterFactoryDescription>
 	</extension>
+ <extension
+       point="org.eclipse.wst.sse.ui.semanticHighlighting">
+    <highlighting
+          class="org.eclipse.wst.xsl.ui.internal.style.XSLTagNameSemanticHighlighting"
+          target="org.eclipse.core.runtime.xml, org.eclipse.wst.xml.core.xslsource"
+          styleStringKey="xsltagName">
+    </highlighting>
+ </extension>
+ <extension
+       point="org.eclipse.wst.sse.ui.semanticHighlighting">
+    <highlighting
+          class="org.eclipse.wst.xsl.ui.internal.style.XSLAttrNameSemanticHighlighting"
+          target="org.eclipse.core.runtime.xml, org.eclipse.wst.xml.core.xslsource"
+          styleStringKey="xsltagAttributeName">
+    </highlighting>
+ </extension>
+<extension
+       point="org.eclipse.wst.sse.ui.semanticHighlighting">
+    <highlighting
+          class="org.eclipse.wst.xsl.ui.internal.style.XSLAttrValueSemanticHighlighting"
+          target="org.eclipse.core.runtime.xml, org.eclipse.wst.xml.core.xslsource"
+          styleStringKey="xsltagAttributeValue">
+    </highlighting>
+ </extension>
+ <extension
+       point="org.eclipse.wst.sse.ui.semanticHighlighting">
+    <highlighting
+          class="org.eclipse.wst.xsl.ui.internal.style.XSLTagDelimsSemanticHighlighting"
+          target="org.eclipse.core.runtime.xml, org.eclipse.wst.xml.core.xslsource"
+          styleStringKey="xsltagBorder">
+    </highlighting>
+ </extension>
   
 </plugin>
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/StructuredTextViewerConfigurationXSL.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/StructuredTextViewerConfigurationXSL.java
index ccbd41b..5ba9168 100644
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/StructuredTextViewerConfigurationXSL.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/StructuredTextViewerConfigurationXSL.java
@@ -107,15 +107,15 @@
 		return fConfiguredContentTypes;
 	}
 
-	@Override
-	public LineStyleProvider[] getLineStyleProviders(
-			ISourceViewer sourceViewer, String partitionType) {
-		LineStyleProvider[] providers = null;
-        if (isXMLPartition(partitionType)) {
-    		providers = new LineStyleProvider[] {getLineStyleProviderForXSL()};
-		}
-		return providers;
-	}
+//	@Override
+//	public LineStyleProvider[] getLineStyleProviders(
+//			ISourceViewer sourceViewer, String partitionType) {
+//		LineStyleProvider[] providers = null;
+//        if (isXMLPartition(partitionType)) {
+//    		providers = new LineStyleProvider[] {getLineStyleProviderForXSL()};
+//		}
+//		return providers;
+//	}
 
 	private boolean isXMLPartition(String partitionType) {
 		return partitionType.equals(IXMLPartitions.XML_DEFAULT)
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/preferences/XSLUIPreferenceInitializer.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/preferences/XSLUIPreferenceInitializer.java
index 63694ce..cf76b08 100755
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/preferences/XSLUIPreferenceInitializer.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/preferences/XSLUIPreferenceInitializer.java
@@ -22,7 +22,7 @@
 import org.eclipse.wst.xsl.ui.internal.style.IStyleConstantsXSL;
 
 /**
- * Sets default values for XML UI preferences
+ * Sets default values for XSL UI preferences
  */
 public class XSLUIPreferenceInitializer extends AbstractPreferenceInitializer {
 
@@ -52,5 +52,18 @@
 		styleValue = ColorHelper.findRGBString(registry, IStyleConstantsXSL.TAG_NAME, 63, 127, 127) + BOLD;
 		store.setDefault(IStyleConstantsXSL.TAG_NAME, styleValue);
 		
+		store.setDefault("xsl.ui.highlighting.tag.bold", true); //$NON-NLS-1$
+		store.setDefault("xsl.ui.highlighting.tag.italic", false); //$NON-NLS-1$
+		store.setDefault("xsl.ui.highlighting.tag.strikethrough", false); //$NON-NLS-1$
+		store.setDefault("xsl.ui.highlighting.tag.underline", false); //$NON-NLS-1$
+		store.setDefault("xsl.ui.highlighting.tag.enabled", true); //$NON-NLS-1$
+		store.setDefault("xsl.ui.highlighting.tag.color", "#FF00FF"); //$NON-NLS-1$ //$NON-NLS-2$
+		
+		store.setDefault("xsl.ui.highlighting.attr.bold", true); //$NON-NLS-1$
+		store.setDefault("xsl.ui.highlighting.attr.italic", false); //$NON-NLS-1$
+		store.setDefault("xsl.ui.highlighting.attr.strikethrough", false); //$NON-NLS-1$
+		store.setDefault("xsl.ui.highlighting.attr.underline", false); //$NON-NLS-1$
+		store.setDefault("xsl.ui.highlighting.attr.enabled", true); //$NON-NLS-1$
+		store.setDefault("xsl.ui.highlighting.attr.color", "#FF00FF"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 }
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/AbstractXSLSemanticHighlighting.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/AbstractXSLSemanticHighlighting.java
new file mode 100644
index 0000000..7430e0f
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/AbstractXSLSemanticHighlighting.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Intalio, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     David Carver (Intalio) - bug 256339 - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsl.ui.internal.style;
+
+import java.util.ArrayList;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.Position;
+import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList;
+import org.eclipse.wst.sse.ui.ISemanticHighlighting;
+import org.eclipse.wst.sse.ui.ISemanticHighlightingExtension;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+import org.eclipse.wst.xsl.core.XSLCore;
+import org.eclipse.wst.xsl.ui.internal.XSLUIPlugin;
+
+public abstract class AbstractXSLSemanticHighlighting implements
+		ISemanticHighlightingExtension, ISemanticHighlighting {
+
+	public abstract String getStylePreferenceKey();
+
+	public String getBoldPreferenceKey() {
+		return null;
+	}
+
+	public String getUnderlinePreferenceKey() {
+		return null;
+	}
+
+	public String getStrikethroughPreferenceKey() {
+		return null;
+	}
+
+	public String getItalicPreferenceKey() {
+		return null;
+	}
+
+	public String getColorPreferenceKey() {
+		return null;
+	}
+
+	public IPreferenceStore getPreferenceStore() {
+		return XSLUIPlugin.getDefault().getPreferenceStore();
+	}
+
+	public String getEnabledPreferenceKey() {
+		return null;
+	}
+
+	public String getDisplayName() {
+		return null;
+	}
+
+	public abstract Position[] consumes(IStructuredDocumentRegion region);
+
+	protected Position[] createSemanticPositions(IStructuredDocumentRegion region, String regionType) {
+		if (region == null) {
+			return null;
+		}
+		
+		if (!region.getType().equals(DOMRegionContext.XML_TAG_NAME)) {
+			return null;
+		}
+	
+		Position p[] = null;
+		ITextRegionList regionList = region.getRegions();
+		ITextRegion tagRegion = regionList.get(1);
+		
+		ArrayList arrpos = new ArrayList();
+		for (int i = 0; i < regionList.size(); i++) {
+			ITextRegion textRegion = regionList.get(i);
+			if (textRegion.getType().equals(regionType)) {
+				Position pos = new Position(region
+						.getStartOffset(textRegion), textRegion.getLength());
+				arrpos.add(pos);
+			}
+		}
+		p = new Position[arrpos.size()];
+		arrpos.toArray(p);
+		return p;
+	}
+
+	public Position[] consumes(IStructuredDocumentRegion documentRegion, IndexedRegion indexedRegion) {
+		if (indexedRegion != null && indexedRegion instanceof IDOMNode) {
+			IDOMNode node = (IDOMNode)indexedRegion;
+			if (XSLCore.isXSLNamespace(node)) {
+				return consumes(documentRegion);
+			}
+		}
+		return null;
+	}
+	
+}
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/LineStyleProviderForXSL.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/LineStyleProviderForXSL.java
index ca234c8..3099d46 100755
--- a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/LineStyleProviderForXSL.java
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/LineStyleProviderForXSL.java
@@ -45,8 +45,9 @@
  * 
  * @author David Carver
  * @since 1.0
- * 
+ * @deprecated Use AbstractXSLSemanticHighlighting and the SemanticHighlighting extension point
  */
+@Deprecated
 public class LineStyleProviderForXSL extends AbstractLineStyleProvider implements LineStyleProvider {
 
 	protected IStructuredDocument structuredDocument;
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrNameSemanticHighlighting.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrNameSemanticHighlighting.java
new file mode 100644
index 0000000..cc39c52
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrNameSemanticHighlighting.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Intalio, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     David Carver (Intalio) - bug 256339 - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsl.ui.internal.style;
+
+
+import org.eclipse.jface.text.Position;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.ui.ISemanticHighlighting;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+
+public class XSLAttrNameSemanticHighlighting extends
+		AbstractXSLSemanticHighlighting implements ISemanticHighlighting {
+
+	public XSLAttrNameSemanticHighlighting() {
+	}
+
+	public String getStylePreferenceKey() {
+		return IStyleConstantsXSL.TAG_ATTRIBUTE_VALUE;
+	}
+
+	@Override
+	public String getEnabledPreferenceKey() {
+		return "xsl.ui.highlighting.tag.enabled"; //$NON-NLS-1$
+	}
+
+	public Position[] consumes(IStructuredDocumentRegion region) {
+		return createSemanticPositions(region,
+				DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE);
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrValueSemanticHighlighting.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrValueSemanticHighlighting.java
new file mode 100644
index 0000000..a577a8b
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLAttrValueSemanticHighlighting.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Intalio, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     David Carver (Intalio) - bug 256339 - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsl.ui.internal.style;
+
+
+import org.eclipse.jface.text.Position;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.ui.ISemanticHighlighting;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+
+public class XSLAttrValueSemanticHighlighting extends
+		AbstractXSLSemanticHighlighting implements ISemanticHighlighting {
+
+	public XSLAttrValueSemanticHighlighting() {
+	}
+
+	public String getStylePreferenceKey() {
+		return IStyleConstantsXSL.TAG_ATTRIBUTE_VALUE;
+	}
+
+	@Override
+	public String getEnabledPreferenceKey() {
+		return "xsl.ui.highlighting.tag.enabled"; //$NON-NLS-1$
+	}
+
+	public Position[] consumes(IStructuredDocumentRegion region) {
+		return createSemanticPositions(region,
+				DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE);
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagDelimsSemanticHighlighting.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagDelimsSemanticHighlighting.java
new file mode 100644
index 0000000..bbdc681
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagDelimsSemanticHighlighting.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Intalio, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     David Carver (Intalio) - bug 256339 - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsl.ui.internal.style;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.eclipse.jface.text.Position;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList;
+import org.eclipse.wst.sse.ui.ISemanticHighlighting;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+
+public class XSLTagDelimsSemanticHighlighting extends
+		AbstractXSLSemanticHighlighting implements ISemanticHighlighting {
+
+	public XSLTagDelimsSemanticHighlighting() {
+	}
+
+	public String getStylePreferenceKey() {
+		return IStyleConstantsXSL.TAG_BORDER;
+	}
+
+	@Override
+	public String getEnabledPreferenceKey() {
+		return "xsl.ui.highlighting.tag.enabled"; //$NON-NLS-1$
+	}
+
+	public Position[] consumes(IStructuredDocumentRegion region) {
+		
+		Position[] openPos = createSemanticPositions(region.getFirstRegion(), region, DOMRegionContext.XML_TAG_OPEN);
+		Position[] endOpenPos = createSemanticPositions(region.getFirstRegion(), region, DOMRegionContext.XML_END_TAG_OPEN);
+		Position[] emptyTagClose = createSemanticPositions(region, DOMRegionContext.XML_EMPTY_TAG_CLOSE);
+		Position[] closePos = createSemanticPositions(region,	DOMRegionContext.XML_TAG_CLOSE);
+		ArrayList arrpos = new ArrayList();
+		arrpos.addAll(Arrays.asList(openPos));
+		arrpos.addAll(Arrays.asList(closePos));
+		arrpos.addAll(Arrays.asList(endOpenPos));
+		arrpos.addAll(Arrays.asList(emptyTagClose));
+		Position[] allPos = new Position[arrpos.size()];
+		arrpos.toArray(allPos);
+		return allPos;
+	}
+	
+	protected Position[] createSemanticPositions(ITextRegion textRegion, IStructuredDocumentRegion region, String regionType) {
+		if (textRegion == null) {
+			return null;
+		}
+		
+		Position p[] = null;
+	
+		ArrayList arrpos = new ArrayList();
+		if (textRegion.getType().equals(regionType)) {
+			Position pos = new Position(region
+					.getStartOffset(textRegion), textRegion.getLength());
+			arrpos.add(pos);
+		}
+		p = new Position[arrpos.size()];
+		arrpos.toArray(p);
+		return p;
+	}
+
+}
diff --git a/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagNameSemanticHighlighting.java b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagNameSemanticHighlighting.java
new file mode 100644
index 0000000..fc029b5
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsl.ui/src/org/eclipse/wst/xsl/ui/internal/style/XSLTagNameSemanticHighlighting.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Intalio, Inc. and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     David Carver (Intalio) - bug 256339 - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.xsl.ui.internal.style;
+
+import org.eclipse.jface.text.Position;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.ui.ISemanticHighlighting;
+import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext;
+
+public class XSLTagNameSemanticHighlighting extends AbstractXSLSemanticHighlighting implements ISemanticHighlighting {
+
+	public XSLTagNameSemanticHighlighting() {
+	}
+
+	public String getStylePreferenceKey() {
+		return IStyleConstantsXSL.TAG_NAME;
+	}
+	
+	@Override
+	public String getEnabledPreferenceKey() {
+		return "xsl.ui.highlighting.tag.enabled"; //$NON-NLS-1$
+	}
+
+	public Position[] consumes(IStructuredDocumentRegion region) {
+		return createSemanticPositions(region, DOMRegionContext.XML_TAG_NAME);
+	}
+}
