merging refs/heads/vex-dev into HEAD
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/emf/dom1.ecore b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/emf/dom1.ecore
index 18bf3ff..b388c31 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/emf/dom1.ecore
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/emf/dom1.ecore
@@ -1,229 +1,231 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ecore:EPackage xmi:version="2.0"
-    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="dom"
-    nsURI="http:///org/eclipse/wst/xml/vex/core/internal/provisional/dom.ecore" nsPrefix="org.eclipse.wst.xml.vex.core.internal.provisional.dom">
-  <eClassifiers xsi:type="ecore:EClass" name="Content">
-    <eOperations name="createPosition" eType="#//Position">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="insertString">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="s" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eOperations name="remove">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="getString" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Position">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="VEXAttribute" eSuperTypes="#//VEXNode">
-    <eOperations name="setNamespace">
-      <eParameters name="prefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="namespaceURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="document" eType="#//VEXDocument"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//VEXElement"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="localName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="namespacePrefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="namespaceURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="attribute" eType="#//DOMAttr"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="VEXComment" eSuperTypes="#//VEXNode">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="comment" eType="#//DOMComment"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="VEXDocument">
-    <eOperations name="canInsertFragment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="fragment" eType="#//VEXDocumentFragment"/>
-    </eOperations>
-    <eOperations name="canInsertText" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="createPosition" eType="#//Position">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="delete" eExceptions="#//DocumentValidationException">
-      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="findCommonElement" eType="#//VEXElement">
-      <eParameters name="offset1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="offset2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="getCharacterAt" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EChar">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="getElementAt" eType="#//VEXElement">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="getFragment" eType="#//VEXDocumentFragment">
-      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="getNodeNames" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="getNodes" upperBound="-1" eType="#//VEXNode">
-      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="getRawText" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="getText" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="insertElement" eExceptions="#//DocumentValidationException">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="defaults" eType="#//VEXElement"/>
-    </eOperations>
-    <eOperations name="insertFragment" eExceptions="#//DocumentValidationException">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="fragment" eType="#//VEXDocumentFragment"/>
-    </eOperations>
-    <eOperations name="insertText" eExceptions="#//DocumentValidationException">
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="encoding" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="rootElement" eType="#//VEXElement"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="validator" eType="#//Validator"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="publicID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="systemID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="document" eType="#//DOMDocument"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="VEXDocumentFragment">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="content" eType="#//Content"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"
-        eType="#//VEXElement"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeNames" upperBound="-1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="nodes" upperBound="-1"
-        eType="#//VEXNode"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="VEXElement" eSuperTypes="#//VEXNode">
-    <eOperations name="addChild">
-      <eParameters name="child" eType="#//VEXElement"/>
-    </eOperations>
-    <eOperations name="clone" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>
-    <eOperations name="getAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">
-      <eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eOperations name="removeAttribute" eExceptions="#//DocumentValidationException">
-      <eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eOperations name="setAttribute" eExceptions="#//DocumentValidationException">
-      <eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eOperations name="setContent">
-      <eParameters name="content" eType="#//Content"/>
-      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="i" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    </eOperations>
-    <eOperations name="insertChild">
-      <eParameters name="index" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-      <eParameters name="child" eType="#//VEXElement"/>
-    </eOperations>
-    <eOperations name="setNamespace">
-      <eParameters name="prefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="namespaceURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="attributeNames" upperBound="-1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="childElements" upperBound="-1"
-        eType="#//VEXElement"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="childNodes" upperBound="-1"
-        eType="#//VEXNode"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="document" eType="#//VEXDocument"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="empty" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//VEXElement"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="namespacePrefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="namespaceURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" eType="#//DOMElement"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="VEXNode">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="content" eType="#//Content"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="endPosition" eType="#//Position"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="startPosition" eType="#//Position"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="VEXProcessingInstruction" eSuperTypes="#//VEXNode">
-    <eOperations name="removeAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
-      <eParameters name="attributeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eOperations name="setAttribute">
-      <eParameters name="attributeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="attributes" upperBound="-1"
-        eType="#//VEXAttribute"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="processingInstruction"
-        eType="#//DOMProcessingInstruction"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Validator" eSuperTypes="#//Serializable">
-    <eOperations name="getAttributeDefinition" eType="#//AttributeDefinition">
-      <eParameters name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="attribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eOperations name="getAttributeDefinitions" upperBound="-1" eType="#//AttributeDefinition">
-      <eParameters name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eOperations name="getValidItems">
-      <eGenericType eClassifier="#//Set">
-        <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      </eGenericType>
-      <eParameters name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    </eOperations>
-    <eOperations name="isValidSequence" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
-      <eParameters name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="nodes" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="partial" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    </eOperations>
-    <eOperations name="isValidSequence" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
-      <eParameters name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="seq1" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="seq2" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="seq3" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      <eParameters name="partial" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
-    </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="validRootElements">
-      <eGenericType eClassifier="#//Set">
-        <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-      </eGenericType>
-    </eStructuralFeatures>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Serializable" instanceClassName="java.io.Serializable"
-      abstract="true" interface="true"/>
-  <eClassifiers xsi:type="ecore:EDataType" name="DocumentValidationException" instanceClassName="org.eclipse.wst.xml.vex.core.internal.dom.DocumentValidationException"/>
-  <eClassifiers xsi:type="ecore:EDataType" name="AttributeDefinition" instanceClassName="org.eclipse.wst.xml.vex.core.internal.validator.AttributeDefinition"/>
-  <eClassifiers xsi:type="ecore:EDataType" name="Set" instanceClassName="java.util.Set">
-    <eTypeParameters name="T"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Document" instanceClassName="org.w3c.dom.Document"
-      abstract="true" interface="true"/>
-  <eClassifiers xsi:type="ecore:EDataType" name="DOMDocument" instanceClassName="org.w3c.dom.Document"/>
-  <eClassifiers xsi:type="ecore:EDataType" name="DOMElement" instanceClassName="org.w3c.dom.Element"/>
-  <eClassifiers xsi:type="ecore:EDataType" name="DOMAttr" instanceClassName="org.w3c.dom.Attr"/>
-  <eClassifiers xsi:type="ecore:EDataType" name="DOMComment" instanceClassName="org.w3c.dom.Comment"/>
-  <eClassifiers xsi:type="ecore:EDataType" name="DOMProcessingInstruction" instanceClassName="org.w3c.dom.ProcessingInstruction"/>
-</ecore:EPackage>
+<?xml version="1.0" encoding="UTF-8"?>

+<ecore:EPackage xmi:version="2.0"

+    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="dom"

+    nsURI="http:///org/eclipse/wst/xml/vex/core/internal/provisional/dom.ecore" nsPrefix="org.eclipse.wst.xml.vex.core.internal.provisional.dom">

+  <eClassifiers xsi:type="ecore:EClass" name="Content">

+    <eOperations name="createPosition" eType="#//Position">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="insertString">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="s" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eOperations name="remove">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="getString" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Position">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="VEXAttribute" eSuperTypes="#//VEXNode">

+    <eOperations name="setNamespace">

+      <eParameters name="prefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="namespaceURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="document" eType="#//VEXDocument"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//VEXElement"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="localName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="namespacePrefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="namespaceURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="attribute" eType="#//DOMAttr"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="VEXComment" eSuperTypes="#//VEXNode">

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="comment" eType="#//DOMComment"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="VEXDocument" eSuperTypes="#//VEXNode">

+    <eOperations name="canInsertFragment" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="fragment" eType="#//VEXDocumentFragment"/>

+    </eOperations>

+    <eOperations name="canInsertText" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="createPosition" eType="#//Position">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="delete" eExceptions="#//DocumentValidationException">

+      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="findCommonElement" eType="#//VEXElement">

+      <eParameters name="offset1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="offset2" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="getCharacterAt" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EChar">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="getElementAt" eType="#//VEXElement">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="getFragment" eType="#//VEXDocumentFragment">

+      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="getNodeNames" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">

+      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="getNodes" upperBound="-1" eType="#//VEXNode">

+      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="getRawText" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">

+      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="getText" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">

+      <eParameters name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="insertElement" eExceptions="#//DocumentValidationException">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="defaults" eType="#//VEXElement"/>

+    </eOperations>

+    <eOperations name="insertFragment" eExceptions="#//DocumentValidationException">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="fragment" eType="#//VEXDocumentFragment"/>

+    </eOperations>

+    <eOperations name="insertText" eExceptions="#//DocumentValidationException">

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="encoding" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="rootElement" eType="#//VEXElement"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="validator" eType="#//Validator"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="publicID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="systemID" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="document" eType="#//DOMDocument"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="documentURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="VEXDocumentFragment">

+    <eStructuralFeatures xsi:type="ecore:EReference" name="content" eType="#//Content"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="length" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"

+        eType="#//VEXElement"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeNames" upperBound="-1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="nodes" upperBound="-1"

+        eType="#//VEXNode"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="VEXElement" eSuperTypes="#//VEXNode">

+    <eOperations name="addChild">

+      <eParameters name="child" eType="#//VEXElement"/>

+    </eOperations>

+    <eOperations name="clone" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject"/>

+    <eOperations name="getAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString">

+      <eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eOperations name="removeAttribute" eExceptions="#//DocumentValidationException">

+      <eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eOperations name="setAttribute" eExceptions="#//DocumentValidationException">

+      <eParameters name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eOperations name="setContent">

+      <eParameters name="content" eType="#//Content"/>

+      <eParameters name="offset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="i" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    </eOperations>

+    <eOperations name="insertChild">

+      <eParameters name="index" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+      <eParameters name="child" eType="#//VEXElement"/>

+    </eOperations>

+    <eOperations name="setNamespace">

+      <eParameters name="prefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="namespaceURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="attributeNames" upperBound="-1"

+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="childElements" upperBound="-1"

+        eType="#//VEXElement"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="childNodes" upperBound="-1"

+        eType="#//VEXNode"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="document" eType="#//VEXDocument"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="empty" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//VEXElement"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="namespacePrefix" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="namespaceURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="element" eType="#//DOMElement"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="VEXNode">

+    <eOperations name="getBaseURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="content" eType="#//Content"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="endOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="endPosition" eType="#//Position"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="startOffset" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="startPosition" eType="#//Position"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="text" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="VEXProcessingInstruction" eSuperTypes="#//VEXNode">

+    <eOperations name="removeAttribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">

+      <eParameters name="attributeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eOperations name="setAttribute">

+      <eParameters name="attributeName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="value" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eStructuralFeatures xsi:type="ecore:EReference" name="attributes" upperBound="-1"

+        eType="#//VEXAttribute"/>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="processingInstruction"

+        eType="#//DOMProcessingInstruction"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Validator" eSuperTypes="#//Serializable">

+    <eOperations name="getAttributeDefinition" eType="#//AttributeDefinition">

+      <eParameters name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="attribute" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eOperations name="getAttributeDefinitions" upperBound="-1" eType="#//AttributeDefinition">

+      <eParameters name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eOperations name="getValidItems">

+      <eGenericType eClassifier="#//Set">

+        <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      </eGenericType>

+      <eParameters name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+    </eOperations>

+    <eOperations name="isValidSequence" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">

+      <eParameters name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="nodes" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="partial" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>

+    </eOperations>

+    <eOperations name="isValidSequence" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">

+      <eParameters name="element" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="seq1" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="seq2" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="seq3" upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      <eParameters name="partial" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>

+    </eOperations>

+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="validRootElements">

+      <eGenericType eClassifier="#//Set">

+        <eTypeArguments eClassifier="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

+      </eGenericType>

+    </eStructuralFeatures>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Serializable" instanceClassName="java.io.Serializable"

+      abstract="true" interface="true"/>

+  <eClassifiers xsi:type="ecore:EDataType" name="DocumentValidationException" instanceClassName="org.eclipse.wst.xml.vex.core.internal.dom.DocumentValidationException"/>

+  <eClassifiers xsi:type="ecore:EDataType" name="AttributeDefinition" instanceClassName="org.eclipse.wst.xml.vex.core.internal.validator.AttributeDefinition"/>

+  <eClassifiers xsi:type="ecore:EDataType" name="Set" instanceClassName="java.util.Set">

+    <eTypeParameters name="T"/>

+  </eClassifiers>

+  <eClassifiers xsi:type="ecore:EClass" name="Document" instanceClassName="org.w3c.dom.Document"

+      abstract="true" interface="true"/>

+  <eClassifiers xsi:type="ecore:EDataType" name="DOMDocument" instanceClassName="org.w3c.dom.Document"/>

+  <eClassifiers xsi:type="ecore:EDataType" name="DOMElement" instanceClassName="org.w3c.dom.Element"/>

+  <eClassifiers xsi:type="ecore:EDataType" name="DOMAttr" instanceClassName="org.w3c.dom.Attr"/>

+  <eClassifiers xsi:type="ecore:EDataType" name="DOMComment" instanceClassName="org.w3c.dom.Comment"/>

+  <eClassifiers xsi:type="ecore:EDataType" name="DOMProcessingInstruction" instanceClassName="org.w3c.dom.ProcessingInstruction"/>

+</ecore:EPackage>

diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/DomEMFPackage.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/DomEMFPackage.java
index cda2f9b..8dabf28 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/DomEMFPackage.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/DomEMFPackage.java
@@ -458,13 +458,76 @@
 	int VEX_DOCUMENT = 4;
 
 	/**
+	 * The feature id for the '<em><b>Content</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VEX_DOCUMENT__CONTENT = VEX_NODE__CONTENT;
+
+	/**
+	 * The feature id for the '<em><b>End Offset</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VEX_DOCUMENT__END_OFFSET = VEX_NODE__END_OFFSET;
+
+	/**
+	 * The feature id for the '<em><b>End Position</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VEX_DOCUMENT__END_POSITION = VEX_NODE__END_POSITION;
+
+	/**
+	 * The feature id for the '<em><b>Start Offset</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VEX_DOCUMENT__START_OFFSET = VEX_NODE__START_OFFSET;
+
+	/**
+	 * The feature id for the '<em><b>Start Position</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VEX_DOCUMENT__START_POSITION = VEX_NODE__START_POSITION;
+
+	/**
+	 * The feature id for the '<em><b>Text</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VEX_DOCUMENT__TEXT = VEX_NODE__TEXT;
+
+	/**
+	 * The feature id for the '<em><b>Node Type</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VEX_DOCUMENT__NODE_TYPE = VEX_NODE__NODE_TYPE;
+
+	/**
 	 * The feature id for the '<em><b>Encoding</b></em>' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-	int VEX_DOCUMENT__ENCODING = 0;
+	int VEX_DOCUMENT__ENCODING = VEX_NODE_FEATURE_COUNT + 0;
 
 	/**
 	 * The feature id for the '<em><b>Length</b></em>' attribute.
@@ -473,7 +536,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int VEX_DOCUMENT__LENGTH = 1;
+	int VEX_DOCUMENT__LENGTH = VEX_NODE_FEATURE_COUNT + 1;
 
 	/**
 	 * The feature id for the '<em><b>Root Element</b></em>' reference.
@@ -482,7 +545,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int VEX_DOCUMENT__ROOT_ELEMENT = 2;
+	int VEX_DOCUMENT__ROOT_ELEMENT = VEX_NODE_FEATURE_COUNT + 2;
 
 	/**
 	 * The feature id for the '<em><b>Validator</b></em>' reference.
@@ -491,7 +554,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int VEX_DOCUMENT__VALIDATOR = 3;
+	int VEX_DOCUMENT__VALIDATOR = VEX_NODE_FEATURE_COUNT + 3;
 
 	/**
 	 * The feature id for the '<em><b>Public ID</b></em>' attribute.
@@ -500,7 +563,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int VEX_DOCUMENT__PUBLIC_ID = 4;
+	int VEX_DOCUMENT__PUBLIC_ID = VEX_NODE_FEATURE_COUNT + 4;
 
 	/**
 	 * The feature id for the '<em><b>System ID</b></em>' attribute.
@@ -509,7 +572,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int VEX_DOCUMENT__SYSTEM_ID = 5;
+	int VEX_DOCUMENT__SYSTEM_ID = VEX_NODE_FEATURE_COUNT + 5;
 
 	/**
 	 * The feature id for the '<em><b>Document</b></em>' attribute.
@@ -518,7 +581,16 @@
 	 * @generated
 	 * @ordered
 	 */
-	int VEX_DOCUMENT__DOCUMENT = 6;
+	int VEX_DOCUMENT__DOCUMENT = VEX_NODE_FEATURE_COUNT + 6;
+
+	/**
+	 * The feature id for the '<em><b>Document URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int VEX_DOCUMENT__DOCUMENT_URI = VEX_NODE_FEATURE_COUNT + 7;
 
 	/**
 	 * The number of structural features of the '<em>VEX Document</em>' class.
@@ -527,7 +599,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int VEX_DOCUMENT_FEATURE_COUNT = 7;
+	int VEX_DOCUMENT_FEATURE_COUNT = VEX_NODE_FEATURE_COUNT + 8;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.impl.VEXDocumentFragmentImpl <em>VEX Document Fragment</em>}' class.
@@ -1262,6 +1334,17 @@
 	EAttribute getVEXDocument_Document();
 
 	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument#getDocumentURI <em>Document URI</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Document URI</em>'.
+	 * @see org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument#getDocumentURI()
+	 * @see #getVEXDocument()
+	 * @generated
+	 */
+	EAttribute getVEXDocument_DocumentURI();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocumentFragment <em>VEX Document Fragment</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1913,6 +1996,14 @@
 		EAttribute VEX_DOCUMENT__DOCUMENT = eINSTANCE.getVEXDocument_Document();
 
 		/**
+		 * The meta object literal for the '<em><b>Document URI</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @generated
+		 */
+		EAttribute VEX_DOCUMENT__DOCUMENT_URI = eINSTANCE.getVEXDocument_DocumentURI();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.impl.VEXDocumentFragmentImpl <em>VEX Document Fragment</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/I/VEXDocument.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/I/VEXDocument.java
index f7cf199..0a6d6fc 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/I/VEXDocument.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/I/VEXDocument.java
@@ -11,9 +11,6 @@
 package org.eclipse.wst.xml.vex.core.internal.provisional.dom.I;
 
 import org.eclipse.emf.common.util.EList;
-
-import org.eclipse.emf.ecore.EObject;
-
 import org.eclipse.wst.xml.vex.core.internal.dom.DocumentValidationException;
 import org.w3c.dom.Document;
 
@@ -32,6 +29,7 @@
  *   <li>{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument#getPublicID <em>Public ID</em>}</li>
  *   <li>{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument#getSystemID <em>System ID</em>}</li>
  *   <li>{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument#getDocument <em>Document</em>}</li>
+ *   <li>{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument#getDocumentURI <em>Document URI</em>}</li>
  * </ul>
  * </p>
  *
@@ -39,7 +37,7 @@
  * @model
  * @generated
  */
-public interface VEXDocument extends EObject {
+public interface VEXDocument extends VEXNode {
 	/**
 	 * Returns the value of the '<em><b>Encoding</b></em>' attribute.
 	 * <!-- begin-user-doc -->
@@ -223,6 +221,32 @@
 	void setDocument(Document value);
 
 	/**
+	 * Returns the value of the '<em><b>Document URI</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <p>
+	 * If the meaning of the '<em>Document URI</em>' attribute isn't clear,
+	 * there really should be more of a description here...
+	 * </p>
+	 * <!-- end-user-doc -->
+	 * @return the value of the '<em>Document URI</em>' attribute.
+	 * @see #setDocumentURI(String)
+	 * @see org.eclipse.wst.xml.vex.core.internal.provisional.dom.DomEMFPackage#getVEXDocument_DocumentURI()
+	 * @model
+	 * @generated
+	 */
+	String getDocumentURI();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument#getDocumentURI <em>Document URI</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Document URI</em>' attribute.
+	 * @see #getDocumentURI()
+	 * @generated
+	 */
+	void setDocumentURI(String value);
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @model
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/I/VEXNode.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/I/VEXNode.java
index d8a3aa4..5671ffe 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/I/VEXNode.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/I/VEXNode.java
@@ -217,4 +217,12 @@
 	 */
 	void setNodeType(String value);
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	String getBaseURI();
+
 } // VEXNode
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/DomEMFFactoryImpl.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/DomEMFFactoryImpl.java
index 2cd0592..3e242c6 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/DomEMFFactoryImpl.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/DomEMFFactoryImpl.java
@@ -16,18 +16,21 @@
 import org.eclipse.emf.ecore.EDataType;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
-
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
-
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
-
 import org.eclipse.wst.xml.vex.core.internal.dom.DocumentValidationException;
-
 import org.eclipse.wst.xml.vex.core.internal.provisional.dom.DomEMFFactory;
 import org.eclipse.wst.xml.vex.core.internal.provisional.dom.DomEMFPackage;
-
-import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.*;
-
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.Content;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.Position;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXAttribute;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXComment;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocumentFragment;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXNode;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXProcessingInstruction;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.Validator;
 import org.eclipse.wst.xml.vex.core.internal.validator.AttributeDefinition;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Comment;
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/DomEMFPackageImpl.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/DomEMFPackageImpl.java
index f123d64..7c9710b 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/DomEMFPackageImpl.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/DomEMFPackageImpl.java
@@ -461,6 +461,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EAttribute getVEXDocument_DocumentURI() {
+		return (EAttribute)vexDocumentEClass.getEStructuralFeatures().get(7);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getVEXDocumentFragment() {
 		return vexDocumentFragmentEClass;
 	}
@@ -871,6 +880,7 @@
 		createEAttribute(vexDocumentEClass, VEX_DOCUMENT__PUBLIC_ID);
 		createEAttribute(vexDocumentEClass, VEX_DOCUMENT__SYSTEM_ID);
 		createEAttribute(vexDocumentEClass, VEX_DOCUMENT__DOCUMENT);
+		createEAttribute(vexDocumentEClass, VEX_DOCUMENT__DOCUMENT_URI);
 
 		vexDocumentFragmentEClass = createEClass(VEX_DOCUMENT_FRAGMENT);
 		createEReference(vexDocumentFragmentEClass, VEX_DOCUMENT_FRAGMENT__CONTENT);
@@ -953,6 +963,7 @@
 		// Add supertypes to classes
 		vexAttributeEClass.getESuperTypes().add(this.getVEXNode());
 		vexCommentEClass.getESuperTypes().add(this.getVEXNode());
+		vexDocumentEClass.getESuperTypes().add(this.getVEXNode());
 		vexElementEClass.getESuperTypes().add(this.getVEXNode());
 		vexProcessingInstructionEClass.getESuperTypes().add(this.getVEXNode());
 		validatorEClass.getESuperTypes().add(this.getSerializable());
@@ -1004,6 +1015,7 @@
 		initEAttribute(getVEXDocument_PublicID(), ecorePackage.getEString(), "publicID", null, 0, 1, VEXDocument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getVEXDocument_SystemID(), ecorePackage.getEString(), "systemID", null, 0, 1, VEXDocument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getVEXDocument_Document(), this.getDOMDocument(), "document", null, 0, 1, VEXDocument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getVEXDocument_DocumentURI(), ecorePackage.getEString(), "documentURI", null, 0, 1, VEXDocument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		op = addEOperation(vexDocumentEClass, ecorePackage.getEBoolean(), "canInsertFragment", 0, 1, IS_UNIQUE, IS_ORDERED);
 		addEParameter(op, ecorePackage.getEInt(), "offset", 0, 1, IS_UNIQUE, IS_ORDERED);
@@ -1123,6 +1135,8 @@
 		initEAttribute(getVEXNode_Text(), ecorePackage.getEString(), "text", null, 0, 1, VEXNode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getVEXNode_NodeType(), ecorePackage.getEString(), "nodeType", null, 0, 1, VEXNode.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		addEOperation(vexNodeEClass, ecorePackage.getEString(), "getBaseURI", 0, 1, IS_UNIQUE, IS_ORDERED);
+
 		initEClass(vexProcessingInstructionEClass, VEXProcessingInstruction.class, "VEXProcessingInstruction", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getVEXProcessingInstruction_Attributes(), this.getVEXAttribute(), null, "attributes", null, 0, -1, VEXProcessingInstruction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getVEXProcessingInstruction_ProcessingInstruction(), this.getDOMProcessingInstruction(), "processingInstruction", null, 0, 1, VEXProcessingInstruction.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXAttributeImpl.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXAttributeImpl.java
index 4ac721e..2300381 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXAttributeImpl.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXAttributeImpl.java
@@ -524,4 +524,10 @@
 		return "Attribute";
 	}
 
+	@Override
+	public String getBaseURI() {
+		if (getParent() != null)
+			return getParent().getBaseURI();
+		return null;
+	}
 } //VEXAttributeImpl
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXDocumentImpl.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXDocumentImpl.java
index dff9374..0c42d96 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXDocumentImpl.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXDocumentImpl.java
@@ -15,7 +15,6 @@
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.EObjectImpl;
 import org.eclipse.wst.xml.vex.core.internal.dom.DocumentValidationException;
 import org.eclipse.wst.xml.vex.core.internal.provisional.dom.DomEMFPackage;
 import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.Content;
@@ -41,12 +40,13 @@
  *   <li>{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.impl.VEXDocumentImpl#getPublicID <em>Public ID</em>}</li>
  *   <li>{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.impl.VEXDocumentImpl#getSystemID <em>System ID</em>}</li>
  *   <li>{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.impl.VEXDocumentImpl#getDocument <em>Document</em>}</li>
+ *   <li>{@link org.eclipse.wst.xml.vex.core.internal.provisional.dom.impl.VEXDocumentImpl#getDocumentURI <em>Document URI</em>}</li>
  * </ul>
  * </p>
  *
  * @generated
  */
-public class VEXDocumentImpl extends EObjectImpl implements VEXDocument {
+public class VEXDocumentImpl extends VEXNodeImpl implements VEXDocument {
 	/**
 	 * The default value of the '{@link #getEncoding() <em>Encoding</em>}' attribute.
 	 * <!-- begin-user-doc -->
@@ -167,6 +167,26 @@
 	 */
 	protected Document document = DOCUMENT_EDEFAULT;
 
+	/**
+	 * The default value of the '{@link #getDocumentURI() <em>Document URI</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDocumentURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String DOCUMENT_URI_EDEFAULT = null;
+
+	/**
+	 * The cached value of the '{@link #getDocumentURI() <em>Document URI</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see #getDocumentURI()
+	 * @generated
+	 * @ordered
+	 */
+	protected String documentURI = DOCUMENT_URI_EDEFAULT;
+
 	protected Content content;
 
 
@@ -380,6 +400,27 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public String getDocumentURI() {
+		return documentURI;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public void setDocumentURI(String newDocumentURI) {
+		String oldDocumentURI = documentURI;
+		documentURI = newDocumentURI;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, DomEMFPackage.VEX_DOCUMENT__DOCUMENT_URI, oldDocumentURI, documentURI));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public boolean canInsertFragment(int offset, VEXDocumentFragment fragment) {
 		// TODO: implement this method
 		// Ensure that you remove @generated or mark it @generated NOT
@@ -564,6 +605,8 @@
 				return getSystemID();
 			case DomEMFPackage.VEX_DOCUMENT__DOCUMENT:
 				return getDocument();
+			case DomEMFPackage.VEX_DOCUMENT__DOCUMENT_URI:
+				return getDocumentURI();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -597,6 +640,9 @@
 			case DomEMFPackage.VEX_DOCUMENT__DOCUMENT:
 				setDocument((Document)newValue);
 				return;
+			case DomEMFPackage.VEX_DOCUMENT__DOCUMENT_URI:
+				setDocumentURI((String)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -630,6 +676,9 @@
 			case DomEMFPackage.VEX_DOCUMENT__DOCUMENT:
 				setDocument(DOCUMENT_EDEFAULT);
 				return;
+			case DomEMFPackage.VEX_DOCUMENT__DOCUMENT_URI:
+				setDocumentURI(DOCUMENT_URI_EDEFAULT);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -656,6 +705,8 @@
 				return SYSTEM_ID_EDEFAULT == null ? systemID != null : !SYSTEM_ID_EDEFAULT.equals(systemID);
 			case DomEMFPackage.VEX_DOCUMENT__DOCUMENT:
 				return DOCUMENT_EDEFAULT == null ? document != null : !DOCUMENT_EDEFAULT.equals(document);
+			case DomEMFPackage.VEX_DOCUMENT__DOCUMENT_URI:
+				return DOCUMENT_URI_EDEFAULT == null ? documentURI != null : !DOCUMENT_URI_EDEFAULT.equals(documentURI);
 		}
 		return super.eIsSet(featureID);
 	}
@@ -680,6 +731,8 @@
 		result.append(systemID);
 		result.append(", document: ");
 		result.append(document);
+		result.append(", documentURI: ");
+		result.append(documentURI);
 		result.append(')');
 		return result.toString();
 	}
@@ -692,7 +745,10 @@
 	public void setDOMDocument(Document domDocument) {
 		
 	}
-	
-	
 
+	@Override
+	public String getBaseURI() {
+		return getDocumentURI();
+	}
+	
 } //VEXDocumentImpl
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXElementImpl.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXElementImpl.java
index 477f1a3..cedd301 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXElementImpl.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXElementImpl.java
@@ -715,5 +715,17 @@
 	public String getNodeType() {
 		return "Element";
 	}
+	
+	@Override
+	public String getBaseURI() {
+		final String baseAttributeValue = getAttribute("xml:base");
+		if (baseAttributeValue != null)
+			return baseAttributeValue;
+		if (getParent() != null)
+			return getParent().getBaseURI();
+		if (getDocument() != null)
+			return getDocument().getBaseURI();
+		return null;
+	}
 
 } //VEXElementImpl
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXNodeImpl.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXNodeImpl.java
index 131facc..f759647 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXNodeImpl.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/VEXNodeImpl.java
@@ -378,6 +378,17 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public String getBaseURI() {
+		// TODO: implement this method
+		// Ensure that you remove @generated or mark it @generated NOT
+		throw new UnsupportedOperationException();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	@Override
 	public Object eGet(int featureID, boolean resolve, boolean coreType) {
 		switch (featureID) {
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/ValidatorImpl.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/ValidatorImpl.java
index d043f88..348f4fc 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/ValidatorImpl.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/impl/ValidatorImpl.java
@@ -42,6 +42,12 @@
  */
 public class ValidatorImpl extends EObjectImpl implements Validator {
 	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private static final long serialVersionUID = 1L;
+	/**
 	 * The cached value of the '{@link #getValidRootElements() <em>Valid Root Elements</em>}' attribute.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/util/DomEMFSwitch.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/util/DomEMFSwitch.java
index e5c6176..71a4edf 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/util/DomEMFSwitch.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src-emf/org/eclipse/wst/xml/vex/core/internal/provisional/dom/util/DomEMFSwitch.java
@@ -125,6 +125,7 @@
 			case DomEMFPackage.VEX_DOCUMENT: {
 				VEXDocument vexDocument = (VEXDocument)theEObject;
 				T result = caseVEXDocument(vexDocument);
+				if (result == null) result = caseVEXNode(vexDocument);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/VEXCorePlugin.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/VEXCorePlugin.java
index 899009b..0b7de0c 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/VEXCorePlugin.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/VEXCorePlugin.java
@@ -16,18 +16,16 @@
 
 public class VEXCorePlugin extends AbstractUIPlugin {
 
+	public static final String ID = "org.eclipse.wst.xml.vex.core"; //$NON-NLS-1$
+
 	private static VEXCorePlugin instance;
 
 	public VEXCorePlugin() {
-        if(instance != null) {
-        	throw new IllegalStateException("This plug-in must be a singleton.");
-        }
-        instance = this;
+		if (instance != null)
+			throw new IllegalStateException("This plug-in must be a singleton."); //$NON-NLS-1$
+		instance = this;
 	}
 
-	/**
-	 * Returns the shared instance.
-	 */
 	public static VEXCorePlugin getInstance() {
 		return instance;
 	}
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/core/Graphics.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/core/Graphics.java
index d8adabd..4e64962 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/core/Graphics.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/core/Graphics.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 John Krasnay and others.
+ * Copyright (c) 2004, 2010 John Krasnay 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
@@ -7,9 +7,12 @@
  * 
  * Contributors:
  *     John Krasnay - initial API and implementation
+ *     Mohamadou Nassourou - Bug 298912 - rudimentary support for images 
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.core;
 
+import java.net.URL;
+
 /**
  * Interface through which Vex performs graphics operations. Implemented by
  * adapters to the java.awt.Graphics and org.eclipse.swt.graphics.GC classes.
@@ -48,6 +51,8 @@
 
 	public void drawRect(int x, int y, int width, int height);
 
+	public void drawImage(Image image, int x, int y, int width, int height); 
+	
 	public void fillOval(int x, int y, int width, int height);
 
 	public void fillRect(int x, int y, int width, int height);
@@ -65,6 +70,8 @@
 	public ColorResource getSystemColor(int id);
 
 	public FontMetrics getFontMetrics();
+	
+	public Image getImage(URL url);
 
 	public boolean isAntiAliased();
 
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/core/Image.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/core/Image.java
new file mode 100644
index 0000000..f9622eb
--- /dev/null
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/core/Image.java
@@ -0,0 +1,19 @@
+/*******************************************************************************

+ * Copyright (c) 2010 Florian Thienel 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:

+ * 		Florian Thienel - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.wst.xml.vex.core.internal.core;

+

+/**

+ * @author Florian Thienel

+ */

+public interface Image {

+	int getHeight();

+	int getWidth();

+}

diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BackgroundImageProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BackgroundImageProperty.java
new file mode 100644
index 0000000..7bb3801
--- /dev/null
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BackgroundImageProperty.java
@@ -0,0 +1,48 @@
+/*******************************************************************************

+ * Copyright (c) 2010  Mohamadou Nassourou 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:

+ * 		 Mohamadou Nassourou - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.wst.xml.vex.core.internal.css;

+

+import java.text.MessageFormat;

+

+import org.eclipse.core.runtime.IStatus;

+import org.eclipse.core.runtime.Status;

+import org.eclipse.wst.xml.vex.core.internal.VEXCorePlugin;

+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;

+import org.w3c.css.sac.LexicalUnit;

+

+/**

+ * @author Mohamadou Nassourou

+ */

+public class BackgroundImageProperty extends AbstractProperty {

+

+	public static final String DEFAULT = null;

+	

+	public BackgroundImageProperty() {

+		super(CSS.BACKGROUND_IMAGE);

+	}

+

+	public Object calculate(final LexicalUnit lexicalUnit, final Styles parentStyles, final Styles styles, VEXElement element) {

+		if (lexicalUnit == null)

+			return DEFAULT;

+		switch (lexicalUnit.getLexicalUnitType()) {

+		case LexicalUnit.SAC_STRING_VALUE:

+			return lexicalUnit.getStringValue();

+		case LexicalUnit.SAC_ATTR:

+			final String attributeValue = element.getAttribute(lexicalUnit.getStringValue());

+			if (attributeValue != null)

+				return attributeValue;

+			return DEFAULT;

+		default:

+			VEXCorePlugin.getInstance().getLog().log(new Status(IStatus.WARNING, VEXCorePlugin.ID, MessageFormat.format("Unsupported lexical unit type in ''background-image: {0}'' (type: {1})", lexicalUnit.toString(), lexicalUnit.getLexicalUnitType())));

+			return DEFAULT;

+		}

+	}

+}

diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderSpacingProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderSpacingProperty.java
index 7ec3f35..ff3b3a3 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderSpacingProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderSpacingProperty.java
@@ -11,6 +11,7 @@
 package org.eclipse.wst.xml.vex.core.internal.css;
 
 import org.eclipse.wst.xml.vex.core.internal.core.DisplayDevice;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -56,7 +57,7 @@
 		super(CSS.BORDER_SPACING);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 
 		int horizontal = 0;
 		int vertical = 0;
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderStyleProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderStyleProperty.java
index 2ecdcca..68e34ea 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderStyleProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderStyleProperty.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -48,7 +49,7 @@
 		return false;
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		if (isBorderStyle(lu)) {
 			return lu.getStringValue();
 		} else if (isInherit(lu) && parentStyles != null) {
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderWidthProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderWidthProperty.java
index 1a9f1a3..de3031b 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderWidthProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/BorderWidthProperty.java
@@ -11,6 +11,7 @@
 package org.eclipse.wst.xml.vex.core.internal.css;
 
 import org.eclipse.wst.xml.vex.core.internal.core.DisplayDevice;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -60,7 +61,7 @@
 		}
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		return Integer.valueOf(calculateInternal(lu, parentStyles, styles));
 	}
 
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/ColorProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/ColorProperty.java
index 90f2459..12a1f0b 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/ColorProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/ColorProperty.java
@@ -14,6 +14,7 @@
 import java.util.Map;
 
 import org.eclipse.wst.xml.vex.core.internal.core.Color;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -66,7 +67,7 @@
 		super(name);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 
 		boolean inherit = isInherit(lu) || this.getName().equals(CSS.COLOR);
 
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/DisplayProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/DisplayProperty.java
index 9fdc2dc..8cf433e 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/DisplayProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/DisplayProperty.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -24,7 +25,7 @@
 		super(CSS.DISPLAY);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 
 		if (isDisplay(lu)) {
 			return lu.getStringValue();
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontFamilyProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontFamilyProperty.java
index 53e487c..96e7601 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontFamilyProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontFamilyProperty.java
@@ -15,6 +15,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -29,7 +30,7 @@
 		super(CSS.FONT_FAMILY);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		if (isFontFamily(lu)) {
 			return getFontFamilies(lu);
 		} else {
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontSizeProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontSizeProperty.java
index 7c64a97..4537d10 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontSizeProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontSizeProperty.java
@@ -11,6 +11,7 @@
 package org.eclipse.wst.xml.vex.core.internal.css;
 
 import org.eclipse.wst.xml.vex.core.internal.core.DisplayDevice;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -27,7 +28,7 @@
 		super(CSS.FONT_SIZE);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		return new Float(this.calculateInternal(lu, parentStyles, styles));
 	}
 
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontStyleProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontStyleProperty.java
index 6966518..3aa1052 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontStyleProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontStyleProperty.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -24,7 +25,7 @@
 		super(CSS.FONT_STYLE);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		if (isFontStyle(lu)) {
 			return lu.getStringValue();
 		} else {
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontVariantProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontVariantProperty.java
index 613f0e1..0acf4cc 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontVariantProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontVariantProperty.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -24,7 +25,7 @@
 		super(CSS.FONT_VARIANT);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		if (isFontVariant(lu)) {
 			return lu.getStringValue();
 		} else {
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontWeightProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontWeightProperty.java
index 0be3fe0..b358c64 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontWeightProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/FontWeightProperty.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -27,7 +28,7 @@
 		super(CSS.FONT_WEIGHT);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		return Integer.valueOf(calculateInternal(lu, parentStyles, styles));
 	}
 
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/HeightProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/HeightProperty.java
new file mode 100644
index 0000000..bba7bc2
--- /dev/null
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/HeightProperty.java
@@ -0,0 +1,29 @@
+/*******************************************************************************

+ * Copyright (c) 2010 Mohamadou Nassourou 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:

+ *     Mohamadou Nassourou - Bug 298912 - rudimentary support for images 

+ *******************************************************************************/

+package org.eclipse.wst.xml.vex.core.internal.css;

+

+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;

+import org.w3c.css.sac.LexicalUnit;

+

+public class HeightProperty extends AbstractProperty {

+

+	public static final float DEFAULT = 50.0f;

+

+	public HeightProperty() {

+		super(CSS.HEIGHT);

+	}

+

+	public Object calculate(final LexicalUnit lexicalUnit, final Styles parentStyles, final Styles styles, VEXElement element) {

+		if (lexicalUnit != null)

+			return new Float(Math.max(DEFAULT, lexicalUnit.getFloatValue()));

+		return DEFAULT;

+	}

+}
\ No newline at end of file
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/IProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/IProperty.java
index 5eaa60d..0cd936a 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/IProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/IProperty.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -40,7 +41,9 @@
 	 *            Styles currently in effect. Often, the calculated value
 	 *            depends on previously calculated styles such as font size and
 	 *            color.
+	 * @param element
+	 *            The current element for which this property is calculated. May be null.
 	 */
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles);
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element);
 
 }
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/LengthProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/LengthProperty.java
index 8802136..54da078 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/LengthProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/LengthProperty.java
@@ -11,6 +11,7 @@
 package org.eclipse.wst.xml.vex.core.internal.css;
 
 import org.eclipse.wst.xml.vex.core.internal.core.DisplayDevice;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -23,7 +24,7 @@
 		this.axis = axis;
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 
 		DisplayDevice device = DisplayDevice.getCurrent();
 		int ppi = this.axis == AXIS_HORIZONTAL ? device.getHorizontalPPI()
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/LineHeightProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/LineHeightProperty.java
index d348751..8280838 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/LineHeightProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/LineHeightProperty.java
@@ -11,6 +11,7 @@
 package org.eclipse.wst.xml.vex.core.internal.css;
 
 import org.eclipse.wst.xml.vex.core.internal.core.DisplayDevice;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -31,7 +32,7 @@
 	 * Calculates the value of the property given a LexicalUnit. Returns a
 	 * RelativeLength that is relative to the current font size.
 	 */
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 
 		int ppi = DisplayDevice.getCurrent().getVerticalPPI();
 
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/ListStyleTypeProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/ListStyleTypeProperty.java
index 25d5820..85cf682 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/ListStyleTypeProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/ListStyleTypeProperty.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -21,7 +22,7 @@
 		super(CSS.LIST_STYLE_TYPE);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		if (isListStyleType(lu)) {
 			return lu.getStringValue();
 		} else {
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/StyleSheet.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/StyleSheet.java
index b29623b..ce46837 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/StyleSheet.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/StyleSheet.java
@@ -13,6 +13,7 @@
  *     Travis Haagen - bug 260806 - enhanced support for 'content' CSS property
  *     Florian Thienel - bug 306639 - remove serializability from StyleSheet
  *                       and dependend classes
+ *     Mohamadou Nassourou - Bug 298912 - rudimentary support for images 
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
@@ -34,7 +35,6 @@
  * Represents a CSS style sheet.
  */
 public class StyleSheet {
-
 	private static final Comparator<PropertyDecl> PROPERTY_CASCADE_ORDERING =
 		new Comparator<PropertyDecl>() {
 		public int compare(PropertyDecl propertyDecl1,
@@ -93,7 +93,11 @@
 			new BorderWidthProperty(CSS.BORDER_RIGHT_WIDTH,
 					CSS.BORDER_RIGHT_STYLE, IProperty.AXIS_HORIZONTAL),
 			new BorderWidthProperty(CSS.BORDER_TOP_WIDTH, CSS.BORDER_TOP_STYLE,
-					IProperty.AXIS_VERTICAL), new BorderSpacingProperty(), };
+					IProperty.AXIS_VERTICAL), new BorderSpacingProperty(), 
+			new HeightProperty(),
+			new WidthProperty(),
+			new BackgroundImageProperty()
+		};
 
 	/**
 	 * The rules that comprise the stylesheet.
@@ -220,25 +224,22 @@
 		// first, since most of the time it'll be empty and we'll return null.
 		if (element instanceof PseudoElement) {
 			lu = decls.get(CSS.CONTENT);
-			if (lu == null) {
+			if (lu == null)
 				return null;
-			}
 
 			List<String> content = new ArrayList<String>();
 			while (lu != null) {
-				switch (lu.getLexicalUnitType())
-				{
+				switch (lu.getLexicalUnitType()) {
 				case LexicalUnit.SAC_STRING_VALUE :
 					// content: "A String"
 					content.add(lu.getStringValue());
 					break;
 				case LexicalUnit.SAC_ATTR :
 					// content: attr(attributeName)
-					String attributeValue = 
-						element.getParent().getAttribute(lu.getStringValue());
-					if (attributeValue != null) {
+					final String attributeValue = element.getParent().getAttribute(lu.getStringValue());
+					if (attributeValue != null)
 						content.add(attributeValue);
-					}
+					break;
 				}
 				lu = lu.getNextLexicalUnit();
 			}
@@ -247,7 +248,7 @@
 
 		for (final IProperty property : CSS_PROPERTIES) {
 			lu = decls.get(property.getName());
-			Object value = property.calculate(lu, parentStyles, styles);
+			Object value = property.calculate(lu, parentStyles, styles, element);
 			styles.put(property.getName(), value);
 		}
 
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/Styles.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/Styles.java
index abe4d5f..7b9b681 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/Styles.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/Styles.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 John Krasnay and others.
+ * Copyright (c) 2004, 2010 John Krasnay 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
@@ -8,6 +8,7 @@
  * Contributors:
  *     John Krasnay - initial API and implementation
  *     Dave Holroyd - Implement text decoration
+ *     Mohamadou Nassourou - Bug 298912 - rudimentary support for images 
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
@@ -255,6 +256,31 @@
 		this.font = font;
 	}
 
+	public float getElementWidth() {
+		final Float value = (Float) this.values.get(CSS.WIDTH);
+		if (value == null) 
+			return WidthProperty.DEFAULT;
+		return value.floatValue();
+	}
+
+	public float getElementHeight() {
+		final Float value = (Float) this.values.get(CSS.HEIGHT);
+		if (value == null) 
+			return HeightProperty.DEFAULT;
+		return value.floatValue();
+	}
+	
+	public boolean hasBackgroundImage() {
+		return this.values.get(CSS.BACKGROUND_IMAGE) != null;
+	}
+	
+	public String getBackgroundImage() {
+		final Object value = this.values.get(CSS.BACKGROUND_IMAGE);
+		if (value == null) 
+			return BackgroundImageProperty.DEFAULT;
+		return value.toString();
+	}
+	
 	/**
 	 * @return the value of border-bottom-width
 	 */
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/TextAlignProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/TextAlignProperty.java
index 7cc1dbc..af57f6c 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/TextAlignProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/TextAlignProperty.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -24,7 +25,7 @@
 		super(CSS.TEXT_ALIGN);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		if (TextAlignProperty.isTextAlign(lu)) {
 			return lu.getStringValue();
 		} else {
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/TextDecorationProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/TextDecorationProperty.java
index 8e40cda..d083658 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/TextDecorationProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/TextDecorationProperty.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -24,7 +25,7 @@
 		super(CSS.TEXT_DECORATION);
 	}
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		if (isTextDecoration(lu)) {
 			return lu.getStringValue();
 		} else {
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/WhiteSpaceProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/WhiteSpaceProperty.java
index 5929c48..a8821b9 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/WhiteSpaceProperty.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/WhiteSpaceProperty.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.css;
 
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 /**
@@ -28,7 +29,7 @@
      *
      */
 
-	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles) {
+	public Object calculate(LexicalUnit lu, Styles parentStyles, Styles styles, VEXElement element) {
 		if (isWhiteSpace(lu)) {
 			return lu.getStringValue();
 		} else {
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/WidthProperty.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/WidthProperty.java
new file mode 100644
index 0000000..c9dfa9f
--- /dev/null
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/css/WidthProperty.java
@@ -0,0 +1,29 @@
+/*******************************************************************************

+ * Copyright (c) 2010 Mohamadou Nassourou 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:

+ *     Mohamadou Nassourou - Bug 298912 - rudimentary support for images 

+ *******************************************************************************/

+package org.eclipse.wst.xml.vex.core.internal.css;

+

+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;

+import org.w3c.css.sac.LexicalUnit;

+

+public class WidthProperty extends AbstractProperty {

+

+	public static final float DEFAULT = 50.0f;

+

+	public WidthProperty() {

+		super(CSS.WIDTH);

+	}

+

+	public Object calculate(final LexicalUnit lexicalUnit, final Styles parentStyles, final Styles styles, VEXElement element) {

+		if (lexicalUnit != null)

+			return new Float(Math.max(DEFAULT, lexicalUnit.getFloatValue()));

+		return DEFAULT;

+	}

+}
\ No newline at end of file
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/dom/DOMDocumentReader.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/dom/DOMDocumentReader.java
index 4d1f096..4f8627d 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/dom/DOMDocumentReader.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/dom/DOMDocumentReader.java
@@ -17,6 +17,9 @@
 
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
 import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument;
 import org.xml.sax.InputSource;
@@ -36,8 +39,12 @@
 	 */
 	public VEXDocument read(IDOMDocument domDocument) throws IOException,
 			ParserConfigurationException, SAXException {
-		Reader reader = new StringReader(domDocument.getSource());
-		return read(new InputSource(new BufferedReader(reader)));
+		final IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(domDocument.getModel().getBaseLocation()));
+		final Reader reader = new StringReader(domDocument.getSource());
+		final InputSource inputSource = new InputSource(new BufferedReader(reader));
+		inputSource.setSystemId(file.getLocationURI().toString());
+		final VEXDocument result = read(inputSource);
+		return result;
 	}
 
 }
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/dom/DocumentReader.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/dom/DocumentReader.java
index 8492b3e..f970013 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/dom/DocumentReader.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/dom/DocumentReader.java
@@ -128,7 +128,10 @@
 			xmlReader.setEntityResolver(this.getEntityResolver());
 		}
 		xmlReader.parse(is);
-		return builder.getDocument();
+		final VEXDocument result = builder.getDocument();
+		result.setDocumentURI(is.getSystemId());
+		result.setSystemID(is.getSystemId());
+		return result;
 	}
 
 	/**
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/layout/BlockElementBox.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/layout/BlockElementBox.java
index e364099..e34ecc2 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/layout/BlockElementBox.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/layout/BlockElementBox.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 John Krasnay and others.
+ * Copyright (c) 2004, 2010 John Krasnay 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
@@ -8,15 +8,18 @@
  * Contributors:
  *     John Krasnay - initial API and implementation
  *     Igor Jacy Lino Campista - Java 5 warnings fixed (bug 311325)
+ *     Mohamadou Nassourou - Bug 298912 - rudimentary support for images 
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.layout;
 
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.wst.xml.vex.core.internal.VEXCorePlugin;
 import org.eclipse.wst.xml.vex.core.internal.core.Drawable;
 import org.eclipse.wst.xml.vex.core.internal.core.Graphics;
+import org.eclipse.wst.xml.vex.core.internal.core.Image;
 import org.eclipse.wst.xml.vex.core.internal.core.Rectangle;
 import org.eclipse.wst.xml.vex.core.internal.css.CSS;
 import org.eclipse.wst.xml.vex.core.internal.css.StyleSheet;
@@ -179,7 +182,7 @@
 			childList.add(afterBlock);
 		}
 
-		Styles styles = context.getStyleSheet().getStyles(this.getElement());
+		final Styles styles = context.getStyleSheet().getStyles(this.getElement());
 		if (styles.getDisplay().equals(CSS.LIST_ITEM)
 				&& !styles.getListStyleType().equals(CSS.NONE)) {
 			this.createListMarker(context);
@@ -194,9 +197,47 @@
 			}
 		}
 
+		if (styles.hasBackgroundImage() && !styles.getDisplay().equalsIgnoreCase(CSS.NONE)) {
+			ParagraphBox imageBox = createImageParagraphBox(getElement(), context);
+			if (imageBox != null)
+				childList.add(imageBox);
+		}
+		
 		return childList;
 	}
 
+	private static ParagraphBox createImageParagraphBox(final VEXElement element, final LayoutContext context) {
+		final InlineBox inlineBox = createImageInlineBox(element, context);
+		if (inlineBox == null)
+			return null;
+		return ParagraphBox.create(context, element,
+				new InlineBox[] { inlineBox }, Integer.MAX_VALUE);
+	}
+	private static InlineBox createImageInlineBox(final VEXElement element, final LayoutContext context) {
+		if (element == null)
+			return null;
+		final URL imageUrl = context.resolveUrl(element.getBaseURI(), context.getStyleSheet().getStyles(element).getBackgroundImage());
+		if (imageUrl == null)
+			return null;
+		
+		final Image image = context.getGraphics().getImage(imageUrl);
+		final int width = image.getWidth();
+		final int height = image.getHeight();
+		final int offset = 5;
+
+		final Drawable drawable = new Drawable() {
+			public Rectangle getBounds() {
+				return new Rectangle(0, 0, width, height);
+			}
+
+			public void draw(final Graphics g, final int x, final int y) {
+				g.drawImage(image, g.getClipBounds().getX() + offset, g
+						.getClipBounds().getY() - height, width, height);
+			}
+		};
+		return new DrawableBox(drawable, element);
+	}
+		
 	/**
 	 * Creates a marker box for this primary box and puts it in the beforeMarker
 	 * field.
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/layout/LayoutContext.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/layout/LayoutContext.java
index ca0204a..231d61d 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/layout/LayoutContext.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.core/src/org/eclipse/wst/xml/vex/core/internal/layout/LayoutContext.java
@@ -10,6 +10,13 @@
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.layout;
 
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.wst.xml.vex.core.internal.VEXCorePlugin;
 import org.eclipse.wst.xml.vex.core.internal.core.Graphics;
 import org.eclipse.wst.xml.vex.core.internal.css.StyleSheet;
 import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument;
@@ -155,5 +162,16 @@
 	public void setSelectionStart(int i) {
 		selectionStart = i;
 	}
-
+	
+	public URL resolveUrl(final String baseUri, final String urlSpecification) {
+		try {
+			if (baseUri == null)
+				return new URL(urlSpecification);
+			else
+				return new URL(new URL(baseUri), urlSpecification);
+		} catch (MalformedURLException e) {
+			VEXCorePlugin.getInstance().getLog().log(new Status(IStatus.ERROR, VEXCorePlugin.ID, MessageFormat.format("Cannot resolve image url: {0}", urlSpecification), e));
+			return null;
+		}
+	}
 }
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.ui/src/org/eclipse/wst/xml/vex/ui/internal/swt/SwtGraphics.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.ui/src/org/eclipse/wst/xml/vex/ui/internal/swt/SwtGraphics.java
index 7a07ba0..09c264f 100644
--- a/sourceediting/plugins/org.eclipse.wst.xml.vex.ui/src/org/eclipse/wst/xml/vex/ui/internal/swt/SwtGraphics.java
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.ui/src/org/eclipse/wst/xml/vex/ui/internal/swt/SwtGraphics.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 John Krasnay and others.
+ * Copyright (c) 2004, 2010 John Krasnay 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
@@ -7,9 +7,18 @@
  * 
  * Contributors:
  *     John Krasnay - initial API and implementation
+ *     Mohamadou Nassourou - Bug 298912 - rudimentary support for images 
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.ui.internal.swt;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.FontData;
 import org.eclipse.swt.graphics.GC;
@@ -20,7 +29,9 @@
 import org.eclipse.wst.xml.vex.core.internal.core.FontResource;
 import org.eclipse.wst.xml.vex.core.internal.core.FontSpec;
 import org.eclipse.wst.xml.vex.core.internal.core.Graphics;
+import org.eclipse.wst.xml.vex.core.internal.core.Image;
 import org.eclipse.wst.xml.vex.core.internal.core.Rectangle;
+import org.eclipse.wst.xml.vex.ui.internal.VexPlugin;
 
 /**
  * Implementation of the Vex Graphics interface, mapping it to a
@@ -37,7 +48,7 @@
  */
 public class SwtGraphics implements Graphics {
 
-	private GC gc;
+	private final GC gc;
 	private int originX;
 	private int originY;
 
@@ -47,158 +58,166 @@
 	 * @param gc
 	 *            SWT GC to which we are drawing.
 	 */
-	public SwtGraphics(GC gc) {
+	public SwtGraphics(final GC gc) {
 		this.gc = gc;
 	}
 
 	public void dispose() {
-		this.gc.dispose();
+		gc.dispose();
 	}
 
-	public void drawChars(char[] chars, int offset, int length, int x, int y) {
-		this.drawString(new String(chars, offset, length), x, y);
+	public void drawChars(final char[] chars, final int offset, final int length, final int x, final int y) {
+		drawString(new String(chars, offset, length), x, y);
 
 	}
 
-	public void drawLine(int x1, int y1, int x2, int y2) {
-		this.gc
-				.drawLine(x1 + originX, y1 + originY, x2 + originX, y2
-						+ originY);
+	public void drawLine(final int x1, final int y1, final int x2, final int y2) {
+		gc.drawLine(x1 + originX, y1 + originY, x2 + originX, y2 + originY);
 	}
 
-	public void drawOval(int x, int y, int width, int height) {
-		this.gc.drawOval(x + originX, y + originY, width, height);
+	public void drawOval(final int x, final int y, final int width, final int height) {
+		gc.drawOval(x + originX, y + originY, width, height);
 	}
 
-	public void drawRect(int x, int y, int width, int height) {
-		this.gc.drawRectangle(x + originX, y + originY, width, height);
+	public void drawRect(final int x, final int y, final int width, final int height) {
+		gc.drawRectangle(x + originX, y + originY, width, height);
 	}
 
-	public void drawString(String s, int x, int y) {
-		this.gc.drawString(s, x + originX, y + originY, true);
+	public void drawString(final String s, final int x, final int y) {
+		gc.drawString(s, x + originX, y + originY, true);
+	}
+
+	public void drawImage(final Image image, final int x, final int y, final int width, final int height) {
+		Assert.isTrue(image instanceof SwtImage);
+		// TODO scale image to widht and height
+		gc.drawImage(((SwtImage) image).image, x + originX, y + originY);
 	}
 
 	/**
 	 * Fills the given oval with the <em>foreground</em> color. This overrides
 	 * the default SWT behaviour to be more like Swing.
 	 */
-	public void fillOval(int x, int y, int width, int height) {
-		this.gc.fillOval(x + originX, y + originY, width, height);
+	public void fillOval(final int x, final int y, final int width, final int height) {
+		gc.fillOval(x + originX, y + originY, width, height);
 	}
 
 	/**
 	 * Fills the given rectangle with the <em>foreground</em> color. This
 	 * overrides the default SWT behaviour to be more like Swing.
 	 */
-	public void fillRect(int x, int y, int width, int height) {
-		this.gc.fillRectangle(x + originX, y + originY, width, height);
+	public void fillRect(final int x, final int y, final int width, final int height) {
+		gc.fillRectangle(x + originX, y + originY, width, height);
 	}
 
 	public Rectangle getClipBounds() {
-		org.eclipse.swt.graphics.Rectangle r = this.gc.getClipping();
-		return new Rectangle(r.x - this.originX, r.y - this.originY, r.width,
-				r.height);
+		final org.eclipse.swt.graphics.Rectangle r = gc.getClipping();
+		return new Rectangle(r.x - originX, r.y - originY, r.width, r.height);
 	}
 
 	public ColorResource getColor() {
-		return new SwtColor(this.gc.getForeground());
+		return new SwtColor(gc.getForeground());
 	}
 
 	public FontResource getFont() {
-		return new SwtFont(this.gc.getFont());
+		return new SwtFont(gc.getFont());
 	}
 
 	public FontMetrics getFontMetrics() {
-		return new SwtFontMetrics(this.gc.getFontMetrics());
+		return new SwtFontMetrics(gc.getFontMetrics());
 	}
 
 	public int getLineStyle() {
-		return this.lineStyle;
+		return lineStyle;
 	}
 
 	public int getLineWidth() {
-		return this.gc.getLineWidth();
+		return gc.getLineWidth();
+	}
+
+	public Image getImage(final URL url) {
+		// TODO optimize like hell: cache image instances, dispose loaded images
+		final InputStream in;
+		try {
+			in = url.openStream();
+		} catch (final IOException e) {
+			VexPlugin.getInstance().getLog().log(new Status(IStatus.ERROR, VexPlugin.ID, MessageFormat.format("Cannot load image from url: {0}", url), e));
+			return new SwtImage(Display.getDefault().getSystemImage(SWT.ICON_ERROR));
+		}
+		return new SwtImage(new org.eclipse.swt.graphics.Image(gc.getDevice(), in));
 	}
 
 	public boolean isAntiAliased() {
 		return false;
 	}
 
-	public void setAntiAliased(boolean antiAliased) {
+	public void setAntiAliased(final boolean antiAliased) {
 	}
 
-	public ColorResource setColor(ColorResource color) {
-		ColorResource oldColor = this.getColor();
-		this.gc.setForeground(((SwtColor) color).getSwtColor());
-		this.gc.setBackground(((SwtColor) color).getSwtColor());
+	public ColorResource setColor(final ColorResource color) {
+		final ColorResource oldColor = getColor();
+		gc.setForeground(((SwtColor) color).getSwtColor());
+		gc.setBackground(((SwtColor) color).getSwtColor());
 		return oldColor;
 	}
 
-	public FontResource setFont(FontResource font) {
-		FontResource oldFont = this.getFont();
-		this.gc.setFont(((SwtFont) font).getSwtFont());
+	public FontResource setFont(final FontResource font) {
+		final FontResource oldFont = getFont();
+		gc.setFont(((SwtFont) font).getSwtFont());
 		return oldFont;
 	}
 
-	public void setLineStyle(int lineStyle) {
+	public void setLineStyle(final int lineStyle) {
 		this.lineStyle = lineStyle;
 		switch (lineStyle) {
 		case LINE_DASH:
-			this.gc.setLineStyle(SWT.LINE_DASH);
+			gc.setLineStyle(SWT.LINE_DASH);
 			break;
 		case LINE_DOT:
-			this.gc.setLineStyle(SWT.LINE_DOT);
+			gc.setLineStyle(SWT.LINE_DOT);
 			break;
 		default:
-			this.gc.setLineStyle(SWT.LINE_SOLID);
+			gc.setLineStyle(SWT.LINE_SOLID);
 			break;
 		}
 	}
 
-	public void setLineWidth(int lineWidth) {
-		this.gc.setLineWidth(lineWidth);
+	public void setLineWidth(final int lineWidth) {
+		gc.setLineWidth(lineWidth);
 	}
 
-	public int charsWidth(char[] data, int offset, int length) {
-		return this.stringWidth(new String(data, offset, length));
+	public int charsWidth(final char[] data, final int offset, final int length) {
+		return stringWidth(new String(data, offset, length));
 	}
 
-	public ColorResource createColor(Color rgb) {
-		return new SwtColor(new org.eclipse.swt.graphics.Color(null, rgb
-				.getRed(), rgb.getGreen(), rgb.getBlue()));
+	public ColorResource createColor(final Color rgb) {
+		return new SwtColor(new org.eclipse.swt.graphics.Color(null, rgb.getRed(), rgb.getGreen(), rgb.getBlue()));
 	}
 
-	public FontResource createFont(FontSpec fontSpec) {
+	public FontResource createFont(final FontSpec fontSpec) {
 		int style = SWT.NORMAL;
-		if ((fontSpec.getStyle() & FontSpec.BOLD) > 0) {
+		if ((fontSpec.getStyle() & FontSpec.BOLD) > 0)
 			style |= SWT.BOLD;
-		}
-		if ((fontSpec.getStyle() & FontSpec.ITALIC) > 0) {
+		if ((fontSpec.getStyle() & FontSpec.ITALIC) > 0)
 			style |= SWT.ITALIC;
-		}
-		int size = Math.round(fontSpec.getSize() * 72 / 90); // TODO: fix. SWT
-																// uses pts, AWT
-																// uses device
-																// units
-		String[] names = fontSpec.getNames();
-		FontData[] fd = new FontData[names.length];
-		for (int i = 0; i < names.length; i++) {
+		final int size = Math.round(fontSpec.getSize() * 72 / 90); // TODO: fix. SWT
+																	// uses pts, AWT
+																	// uses device
+																	// units
+		final String[] names = fontSpec.getNames();
+		final FontData[] fd = new FontData[names.length];
+		for (int i = 0; i < names.length; i++)
 			fd[i] = new FontData(names[i], size, style);
-		}
 		return new SwtFont(new org.eclipse.swt.graphics.Font(null, fd));
 	}
 
-	public ColorResource getSystemColor(int id) {
+	public ColorResource getSystemColor(final int id) {
 
-		if (id == ColorResource.SELECTION_BACKGROUND) {
-			return new SwtColor(Display.getCurrent().getSystemColor(
-					SWT.COLOR_LIST_SELECTION));
-		} else if (id == ColorResource.SELECTION_FOREGROUND) {
-			return new SwtColor(Display.getCurrent().getSystemColor(
-					SWT.COLOR_LIST_SELECTION_TEXT));
-		} else {
+		if (id == ColorResource.SELECTION_BACKGROUND)
+			return new SwtColor(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_SELECTION));
+		else if (id == ColorResource.SELECTION_FOREGROUND)
+			return new SwtColor(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
+		else
 			return new SwtColor(Display.getCurrent().getSystemColor(-1));
-		}
 	}
 
 	/**
@@ -210,13 +229,13 @@
 	 * @param y
 	 *            y-coordinate of the origin, relative to the viewport.
 	 */
-	public void setOrigin(int x, int y) {
-		this.originX = x;
-		this.originY = y;
+	public void setOrigin(final int x, final int y) {
+		originX = x;
+		originY = y;
 	}
 
-	public int stringWidth(String s) {
-		return this.gc.stringExtent(s).x;
+	public int stringWidth(final String s) {
+		return gc.stringExtent(s).x;
 	}
 
 	// ========================================================== PRIVATE
diff --git a/sourceediting/plugins/org.eclipse.wst.xml.vex.ui/src/org/eclipse/wst/xml/vex/ui/internal/swt/SwtImage.java b/sourceediting/plugins/org.eclipse.wst.xml.vex.ui/src/org/eclipse/wst/xml/vex/ui/internal/swt/SwtImage.java
new file mode 100644
index 0000000..99d2b6b
--- /dev/null
+++ b/sourceediting/plugins/org.eclipse.wst.xml.vex.ui/src/org/eclipse/wst/xml/vex/ui/internal/swt/SwtImage.java
@@ -0,0 +1,33 @@
+/*******************************************************************************

+ * Copyright (c) 2010 Florian Thienel 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:

+ * 		Florian Thienel - initial API and implementation

+ *******************************************************************************/

+package org.eclipse.wst.xml.vex.ui.internal.swt;

+

+import org.eclipse.wst.xml.vex.core.internal.core.Image;

+

+/**

+ * @author Florian Thienel

+ */

+public class SwtImage implements Image {

+

+	public final org.eclipse.swt.graphics.Image image;

+

+	public SwtImage(org.eclipse.swt.graphics.Image image) {

+		this.image = image;

+	}

+

+	public int getHeight() {

+		return image.getBounds().height;

+	}

+

+	public int getWidth() {

+		return image.getBounds().width;

+	}

+}

diff --git a/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/css/MockLU.java b/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/css/MockLU.java
index cff6c74..213816d 100644
--- a/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/css/MockLU.java
+++ b/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/css/MockLU.java
@@ -40,6 +40,12 @@
 		lu.setStringValue(s);
 		return lu;
 	}
+	
+	public static LexicalUnit createAttr(final String attributeName) {
+		final MockLU result = new MockLU(LexicalUnit.SAC_ATTR);
+		result.setStringValue(attributeName);
+		return result;
+	}
 
 	public String getDimensionUnitText() {
 		return this.dimensionUnitText;
diff --git a/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/css/PropertyTest.java b/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/css/PropertyTest.java
index 1d36385..e47bbfc 100644
--- a/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/css/PropertyTest.java
+++ b/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/css/PropertyTest.java
@@ -16,6 +16,9 @@
 import org.eclipse.wst.xml.vex.core.internal.css.CSS;
 import org.eclipse.wst.xml.vex.core.internal.css.IProperty;
 import org.eclipse.wst.xml.vex.core.internal.css.Styles;
+import org.eclipse.wst.xml.vex.core.internal.dom.DocumentReader;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXDocument;
+import org.eclipse.wst.xml.vex.core.internal.provisional.dom.I.VEXElement;
 import org.w3c.css.sac.LexicalUnit;
 
 import junit.framework.TestCase;
@@ -32,39 +35,39 @@
 
 		// Inheritance
 		parentStyles.put(CSS.BORDER_TOP_STYLE, CSS.DASHED);
-		assertEquals(CSS.NONE, prop.calculate(null, parentStyles, styles));
+		assertEquals(CSS.NONE, prop.calculate(null, parentStyles, styles, null));
 		assertEquals(CSS.DASHED, prop.calculate(MockLU.INHERIT, parentStyles,
-				styles)); // not inherited
+				styles, null)); // not inherited
 
 		// Regular values
 		assertEquals(CSS.NONE, prop.calculate(MockLU.createIdent(CSS.NONE),
-				parentStyles, styles));
+				parentStyles, styles, null));
 		assertEquals(CSS.HIDDEN, prop.calculate(MockLU.createIdent(CSS.HIDDEN),
-				parentStyles, styles));
+				parentStyles, styles, null));
 		assertEquals(CSS.DOTTED, prop.calculate(MockLU.createIdent(CSS.DOTTED),
-				parentStyles, styles));
+				parentStyles, styles, null));
 		assertEquals(CSS.DASHED, prop.calculate(MockLU.createIdent(CSS.DASHED),
-				parentStyles, styles));
+				parentStyles, styles, null));
 		assertEquals(CSS.SOLID, prop.calculate(MockLU.createIdent(CSS.SOLID),
-				parentStyles, styles));
+				parentStyles, styles, null));
 		assertEquals(CSS.DOUBLE, prop.calculate(MockLU.createIdent(CSS.DOUBLE),
-				parentStyles, styles));
+				parentStyles, styles, null));
 		assertEquals(CSS.GROOVE, prop.calculate(MockLU.createIdent(CSS.GROOVE),
-				parentStyles, styles));
+				parentStyles, styles, null));
 		assertEquals(CSS.RIDGE, prop.calculate(MockLU.createIdent(CSS.RIDGE),
-				parentStyles, styles));
+				parentStyles, styles, null));
 		assertEquals(CSS.INSET, prop.calculate(MockLU.createIdent(CSS.INSET),
-				parentStyles, styles));
+				parentStyles, styles, null));
 		assertEquals(CSS.OUTSET, prop.calculate(MockLU.createIdent(CSS.OUTSET),
-				parentStyles, styles));
+				parentStyles, styles, null));
 
 		// Invalid token
 		assertEquals(CSS.NONE, prop.calculate(MockLU.createIdent(CSS.BOLD),
-				parentStyles, styles));
+				parentStyles, styles, null));
 
 		// Wrong type
 		assertEquals(CSS.NONE, prop.calculate(MockLU.createString(CSS.HIDDEN),
-				parentStyles, styles));
+				parentStyles, styles, null));
 	}
 
 	/**
@@ -83,36 +86,36 @@
 
 		// Inheritance
 		parentStyles.put(CSS.BORDER_TOP_WIDTH, new Integer(27));
-		assertEquals(new Integer(3), prop.calculate(null, parentStyles, styles));
+		assertEquals(new Integer(3), prop.calculate(null, parentStyles, styles, null));
 		assertEquals(new Integer(27), prop.calculate(MockLU.INHERIT,
-				parentStyles, styles)); // not inherited
+				parentStyles, styles, null)); // not inherited
 
 		// Regular values
 		assertEquals(new Integer(20), prop.calculate(MockLU.createFloat(
-				LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles));
+				LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles, null));
 
 		// Invalid token
 		assertEquals(new Integer(3), prop.calculate(MockLU
-				.createIdent(CSS.BOLD), parentStyles, styles));
+				.createIdent(CSS.BOLD), parentStyles, styles, null));
 
 		// Wrong type
 		assertEquals(new Integer(3), prop.calculate(MockLU
-				.createString(CSS.HIDDEN), parentStyles, styles));
+				.createString(CSS.HIDDEN), parentStyles, styles, null));
 
 		// Corresponding style is "none" or "hidden"
 		styles.put(CSS.BORDER_TOP_STYLE, CSS.NONE);
 		assertEquals(new Integer(0), prop.calculate(MockLU.createFloat(
-				LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles));
+				LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles, null));
 		styles.put(CSS.BORDER_TOP_STYLE, CSS.HIDDEN);
 		assertEquals(new Integer(0), prop.calculate(MockLU.createFloat(
-				LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles));
+				LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles, null));
 
 		// check that we use the proper PPI
 		styles.put(CSS.BORDER_LEFT_STYLE, CSS.SOLID);
 		prop = new BorderWidthProperty(CSS.BORDER_LEFT_WIDTH,
 				CSS.BORDER_LEFT_STYLE, IProperty.AXIS_HORIZONTAL);
 		assertEquals(Integer.valueOf(10), prop.calculate(MockLU.createFloat(
-				LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles));
+				LexicalUnit.SAC_INCH, 0.2f), parentStyles, styles, null));
 	}
 
 	/**
@@ -122,8 +125,29 @@
 	public void testColorProperty() throws Exception {
 	}
 
+	public void testStringBackgroundImage() throws Exception {
+		final Styles styles = new Styles();
+		final Styles parentStyles = new Styles();
+		final BackgroundImageProperty property = new BackgroundImageProperty();
+		assertEquals("http://www.eclipse.org", property.calculate(MockLU.createString("http://www.eclipse.org"), parentStyles, styles, null));
+	}
+	
+	public void testAttrBackgroundImage() throws Exception {
+		final LexicalUnit attrSrc = MockLU.createAttr("src");
+		final Styles styles = new Styles();
+		final Styles parentStyles = new Styles();
+		final VEXDocument document = new DocumentReader().read("<root><image/><image src=\"image.jpg\"/><image src=\"\"/></root>");
+		final VEXElement noAttribute = document.getRootElement().getChildElements().get(0);
+		final VEXElement setAttribute = document.getRootElement().getChildElements().get(1);
+		final VEXElement emptyAttribute = document.getRootElement().getChildElements().get(2);
+		final BackgroundImageProperty property = new BackgroundImageProperty();
+		
+		assertNull(property.calculate(attrSrc, parentStyles, styles, noAttribute));
+		assertEquals("image.jpg", property.calculate(attrSrc, parentStyles, styles, setAttribute));
+		assertEquals("", property.calculate(attrSrc, parentStyles, styles, emptyAttribute));
+	}
+	
 	private static class DummyDisplayDevice extends DisplayDevice {
-
 		public DummyDisplayDevice(int horizontalPPI, int verticalPPI) {
 			this.horizontalPPI = horizontalPPI;
 			this.verticalPPI = verticalPPI;
diff --git a/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/dom/DomTest.java b/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/dom/DomTest.java
index 20b788c..00c03ef 100644
--- a/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/dom/DomTest.java
+++ b/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/dom/DomTest.java
@@ -31,58 +31,58 @@
  * Test the <code>org.eclipse.wst.vex.core.internal.dom</code> package.
  */
 public class DomTest extends TestCase {
-	
+
 	public void testWTPStructuredDocumentRetrieval() throws Exception {
-		IDOMModel model = initDOM();
-		IDOMDocument domDocument = model.getDocument();
-		
+		final IDOMModel model = initDOM();
+		final IDOMDocument domDocument = model.getDocument();
+
 		assertNotNull("Structured Document NULL.", domDocument.getStructuredDocument());
 	}
 
 	private IDOMModel initDOM() {
-		IDOMModel model = new DOMModelImpl();
-		IModelManager modelManager = StructuredModelManager.getModelManager();
-		IStructuredDocument structuredDocument = modelManager.createStructuredDocumentFor(ContentTypeIdForXML.ContentTypeID_XML);
+		final IDOMModel model = new DOMModelImpl();
+		final IModelManager modelManager = StructuredModelManager.getModelManager();
+		final IStructuredDocument structuredDocument = modelManager.createStructuredDocumentFor(ContentTypeIdForXML.ContentTypeID_XML);
 		model.setStructuredDocument(structuredDocument);
 		return model;
 	}
-	
+
 	public void testWTPStructruedDocument() throws Exception {
-		IModelManager modelManager = StructuredModelManager.getModelManager();
-		
-		IStructuredDocument structuredDocument = modelManager.createStructuredDocumentFor(ContentTypeIdForXML.ContentTypeID_XML);
+		final IModelManager modelManager = StructuredModelManager.getModelManager();
+
+		final IStructuredDocument structuredDocument = modelManager.createStructuredDocumentFor(ContentTypeIdForXML.ContentTypeID_XML);
 		assertNotNull("Structured Document NULL.", structuredDocument);
-		
+
 	}
-	
+
 	public void testWTPDOMRetrieval() throws Exception {
-		IDOMModel model = initDOM();
-		IDOMDocument domDocument =  model.getDocument();
-		
-		Element root = new Element("article");
+		final IDOMModel model = initDOM();
+		final IDOMDocument domDocument = model.getDocument();
+
+		final Element root = new Element("article");
 		root.setElement(domDocument.createElement("article"));
 		domDocument.appendChild(root.getElement());
-		VEXDocument doc = new Document(root);
-		
-		org.w3c.dom.Element domElement = doc.getRootElement().getElement();
+		final VEXDocument doc = new Document(root);
+
+		final org.w3c.dom.Element domElement = doc.getRootElement().getElement();
 		assertEquals("Incorrect element name.", "article", domElement.getNodeName());
 	}
-	
+
 	public void testWTPDOMOwnerDocumentElement() throws Exception {
-		IDOMModel model = initDOM();
-		IDOMDocument domDocument =  model.getDocument();
-		
-		Element root = new Element("article");
-		VEXDocument doc = new Document(root);
+		final IDOMModel model = initDOM();
+		final IDOMDocument domDocument = model.getDocument();
+
+		final Element root = new Element("article");
+		final VEXDocument doc = new Document(root);
 		root.setElement(domDocument.createElement(root.getName()));
 		domDocument.appendChild(root.getElement());
 		doc.setDocument(domDocument);
-		
-		VEXElement subelement = new Element("b");
+
+		final VEXElement subelement = new Element("b");
 		root.addChild(subelement);
 		subelement.setElement(domDocument.createElement("b"));
 		root.getElement().appendChild(subelement.getElement());
-		
+
 		assertEquals("Incorrect WTP Owner Document Element", "article", subelement.getElement().getOwnerDocument().getDocumentElement().getNodeName());
 	}
 
@@ -91,8 +91,8 @@
 		//
 		// Document initialisation
 		//
-		Element root = new Element("article");
-		VEXDocument doc = new Document(root);
+		final Element root = new Element("article");
+		final VEXDocument doc = new Document(root);
 		List<VEXNode> content;
 
 		// root
@@ -106,7 +106,7 @@
 
 		content = root.getChildNodes();
 		assertEquals(0, content.size());
-		List<VEXElement> children = root.getChildElements();
+		final List<VEXElement> children = root.getChildElements();
 		assertEquals(0, children.size());
 
 		// root
@@ -116,13 +116,13 @@
 		try {
 			doc.insertText(0, "ac");
 			fail("Expected IllegalArgumentException");
-		} catch (IllegalArgumentException ex) {
+		} catch (final IllegalArgumentException ex) {
 		}
 
 		try {
 			doc.insertText(2, "ac");
 			fail("Expected IllegalArgumentException");
-		} catch (IllegalArgumentException ex) {
+		} catch (final IllegalArgumentException ex) {
 		}
 
 		doc.insertText(1, "ac");
@@ -138,18 +138,18 @@
 		//
 		// Try inserting at illegal offset
 		//
-		Element element = new Element("b");
+		final Element element = new Element("b");
 
 		try {
 			doc.insertElement(0, element);
 			fail("Expected IllegalArgumentException");
-		} catch (IllegalArgumentException ex) {
+		} catch (final IllegalArgumentException ex) {
 		}
 
 		try {
 			doc.insertElement(4, element);
 			fail("Expected IllegalArgumentException");
-		} catch (IllegalArgumentException ex) {
+		} catch (final IllegalArgumentException ex) {
 		}
 
 		// root
@@ -163,7 +163,7 @@
 		assertEquals(root, element.getParent());
 		assertEquals(6, doc.getLength());
 
-		Element element2 = new Element("x");
+		final Element element2 = new Element("x");
 		doc.insertElement(2, element2);
 
 		content = root.getChildNodes();
@@ -188,19 +188,19 @@
 		try {
 			doc.getFragment(2, 2);
 			fail();
-		} catch (IllegalArgumentException ex) {
+		} catch (final IllegalArgumentException ex) {
 		}
 
 		try {
 			doc.getFragment(-1, 0);
 			fail();
-		} catch (IllegalArgumentException ex) {
+		} catch (final IllegalArgumentException ex) {
 		}
 
 		try {
 			doc.getFragment(4, 5);
 			fail();
-		} catch (IllegalArgumentException ex) {
+		} catch (final IllegalArgumentException ex) {
 		}
 
 		VEXDocumentFragment frag = doc.getFragment(2, 3);
@@ -208,7 +208,7 @@
 		assertEquals(0, frag.getElements().size());
 		List<VEXNode> nodes = frag.getNodes();
 		assertEquals(1, nodes.size());
-		this.assertIsText(nodes.get(0), "b", 0, 1);
+		assertIsText(nodes.get(0), "b", 0, 1);
 
 		// Case 2: single element, no children
 		//        
@@ -230,16 +230,16 @@
 		doc.insertText(3, "b");
 
 		frag = doc.getFragment(1, 6);
-		
-		List<VEXElement> elements = frag.getElements();
+
+		final List<VEXElement> elements = frag.getElements();
 		assertEquals(1, elements.size());
-		this.assertIsElement(elements.get(0), "z", null, 1, 3);
+		assertIsElement(elements.get(0), "z", null, 1, 3);
 		nodes = frag.getNodes();
 		assertEquals(3, nodes.size());
 		assertIsText(nodes.get(0), "a", 0, 1);
 		assertIsElement(nodes.get(1), "z", null, 1, 3);
 		assertIsText(nodes.get(2), "c", 4, 5);
-		List<VEXNode> childNodes = elements.get(0).getChildNodes();
+		final List<VEXNode> childNodes = elements.get(0).getChildNodes();
 		assertEquals(1, childNodes.size());
 		assertIsText(childNodes.get(0), "b", 2, 3);
 
@@ -265,84 +265,82 @@
 		doc.insertElement(9, new Element("y"));
 		doc.insertText(10, "f");
 
-        // 3a
-        expect_a_bc_d_e_f_gh_i_(doc);
+		// 3a
+		expect_a_bc_d_e_f_gh_i_(doc);
 
-        // 3b: remove and re-insert fragment "c*d*e*f*g"
-        frag = doc.getFragment(4, 13);
-        doc.delete(4, 13);
-        doc.insertFragment(4, frag);
-        expect_a_bc_d_e_f_gh_i_(doc);
+		// 3b: remove and re-insert fragment "c*d*e*f*g"
+		frag = doc.getFragment(4, 13);
+		doc.delete(4, 13);
+		doc.insertFragment(4, frag);
+		expect_a_bc_d_e_f_gh_i_(doc);
 
-        // 3c: remove and re-insert fragment "*bc*d*e*f*gh*"
-        frag = doc.getFragment(2, 15);
-        doc.delete(2, 15);
-        doc.insertFragment(2, frag);
-        expect_a_bc_d_e_f_gh_i_(doc);
-    }
+		// 3c: remove and re-insert fragment "*bc*d*e*f*gh*"
+		frag = doc.getFragment(2, 15);
+		doc.delete(2, 15);
+		doc.insertFragment(2, frag);
+		expect_a_bc_d_e_f_gh_i_(doc);
+	}
 
-    private void expect_a_bc_d_e_f_gh_i_(VEXDocument doc) {
+	private void expect_a_bc_d_e_f_gh_i_(final VEXDocument doc) {
 
-        VEXElement root = doc.getRootElement();
-        assertIsElement(root, "root", null, 0, 16);
-        List<VEXNode> childNodes = root.getChildNodes();
-        assertEquals(3, childNodes.size());
-        assertIsText(childNodes.get(0), "a", 1, 2);
-        assertIsElement(childNodes.get(1), "z", doc.getRootElement(), 2, 14);
-        assertIsText(childNodes.get(2), "i", 15, 16);
+		final VEXElement root = doc.getRootElement();
+		assertIsElement(root, "root", null, 0, 16);
+		List<VEXNode> childNodes = root.getChildNodes();
+		assertEquals(3, childNodes.size());
+		assertIsText(childNodes.get(0), "a", 1, 2);
+		assertIsElement(childNodes.get(1), "z", doc.getRootElement(), 2, 14);
+		assertIsText(childNodes.get(2), "i", 15, 16);
 
-        VEXDocumentFragment frag = doc.getFragment(4, 13);
-        // | x | | y |
-        // c * d * e * f * g
-        // 0 1 2 3 4 5 6 7 8 9
-        assertEquals(9, frag.getContent().getLength());
+		VEXDocumentFragment frag = doc.getFragment(4, 13);
+		// | x | | y |
+		// c * d * e * f * g
+		// 0 1 2 3 4 5 6 7 8 9
+		assertEquals(9, frag.getContent().getLength());
 
-        List<VEXElement> elements = frag.getElements();
-        assertEquals(2, elements.size());
-        assertIsElement(elements.get(0), "x", null, 1, 3);
-        assertIsElement(elements.get(1), "y", null, 5, 7);
+		List<VEXElement> elements = frag.getElements();
+		assertEquals(2, elements.size());
+		assertIsElement(elements.get(0), "x", null, 1, 3);
+		assertIsElement(elements.get(1), "y", null, 5, 7);
 
-        List<VEXNode> nodes = frag.getNodes();
-        assertEquals(5, nodes.size());
-        assertIsText(nodes.get(0), "c", 0, 1);
-        assertIsElement(nodes.get(1), "x", null, 1, 3);
-        assertIsText(nodes.get(2), "e", 4, 5);
-        assertIsElement(nodes.get(3), "y", null, 5, 7);
-        assertIsText(nodes.get(4), "g", 8, 9);
+		List<VEXNode> nodes = frag.getNodes();
+		assertEquals(5, nodes.size());
+		assertIsText(nodes.get(0), "c", 0, 1);
+		assertIsElement(nodes.get(1), "x", null, 1, 3);
+		assertIsText(nodes.get(2), "e", 4, 5);
+		assertIsElement(nodes.get(3), "y", null, 5, 7);
+		assertIsText(nodes.get(4), "g", 8, 9);
 
-        frag = doc.getFragment(2, 15);
-        // z
-        // | |
-        // | | x | | y | |
-        // * b c * d * e * f * g h *
-        // 0 1 2 3 4 5 6 7 8 9 0 1 2 3
-        assertEquals(13, frag.getContent().getLength());
-        elements = frag.getElements();
-        VEXElement z = elements.get(0);
-        childNodes = z.getChildNodes();
+		frag = doc.getFragment(2, 15);
+		// z
+		// | |
+		// | | x | | y | |
+		// * b c * d * e * f * g h *
+		// 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+		assertEquals(13, frag.getContent().getLength());
+		elements = frag.getElements();
+		final VEXElement z = elements.get(0);
+		childNodes = z.getChildNodes();
 
-        assertEquals(5, childNodes.size());
-        assertIsText(childNodes.get(0), "bc", 1, 3);
-        assertIsElement(childNodes.get(1), "x", z, 3, 5);
-        assertIsText(childNodes.get(2), "e", 6, 7);
-        assertIsElement(childNodes.get(3), "y", z, 7, 9);
-        assertIsText(childNodes.get(4), "gh", 10, 12);
+		assertEquals(5, childNodes.size());
+		assertIsText(childNodes.get(0), "bc", 1, 3);
+		assertIsElement(childNodes.get(1), "x", z, 3, 5);
+		assertIsText(childNodes.get(2), "e", 6, 7);
+		assertIsElement(childNodes.get(3), "y", z, 7, 9);
+		assertIsText(childNodes.get(4), "gh", 10, 12);
 
-        VEXElement x = (VEXElement) childNodes.get(1);
-        VEXElement y = (VEXElement) childNodes.get(3);
-        childNodes = x.getChildNodes();
+		final VEXElement x = (VEXElement) childNodes.get(1);
+		final VEXElement y = (VEXElement) childNodes.get(3);
+		childNodes = x.getChildNodes();
 
-        nodes = frag.getNodes();
-        assertEquals(1, nodes.size());
-        assertIsText(childNodes.get(0), "d", 4, 5);
-        childNodes = y.getChildNodes();
-        assertEquals(1, nodes.size());
-        assertIsText(childNodes.get(0), "f", 8, 9);
-    }
+		nodes = frag.getNodes();
+		assertEquals(1, nodes.size());
+		assertIsText(childNodes.get(0), "d", 4, 5);
+		childNodes = y.getChildNodes();
+		assertEquals(1, nodes.size());
+		assertIsText(childNodes.get(0), "f", 8, 9);
+	}
 
-	public void assertIsElement(VEXNode node, String name, VEXElement parent,
-			int startOffset, int endOffset) {
-
+	private static void assertIsElement(final VEXNode node, final String name, final VEXElement parent, final int startOffset, final int endOffset) {
 		assertTrue(node instanceof Element);
 		assertEquals(name, ((VEXElement) node).getName());
 		assertEquals(parent, ((VEXElement) node).getParent());
@@ -350,12 +348,25 @@
 		assertEquals(endOffset, node.getEndOffset());
 	}
 
-	public void assertIsText(VEXNode node, String text, int startOffset,
-			int endOffset) {
-
+	private static void assertIsText(final VEXNode node, final String text, final int startOffset, final int endOffset) {
 		assertTrue(node instanceof Text);
 		assertEquals(text, node.getText());
 		assertEquals(startOffset, node.getStartOffset());
 		assertEquals(endOffset, node.getEndOffset());
 	}
+
+	public void testBaseUri() throws Exception {
+		// according to http://www.w3.org/TR/DOM-Level-3-Core/core.html#baseURIs-Considerations 
+		final DocumentReader reader = new DocumentReader();
+		final VEXDocument document = reader.read("<root><node/><node xml:base=\"http://www.eclipse.org/test.xml\"/></root>");
+		assertNull(document.getBaseURI());
+		assertNull(document.getRootElement().getBaseURI());
+		assertEquals("http://www.eclipse.org/test.xml", document.getRootElement().getChildElements().get(1).getBaseURI());
+
+		document.setDocumentURI("file:/tmp/test.xml");
+		assertEquals("file:/tmp/test.xml", document.getBaseURI());
+		assertEquals("file:/tmp/test.xml", document.getRootElement().getBaseURI());
+		assertEquals("file:/tmp/test.xml", document.getRootElement().getChildElements().get(0).getBaseURI());
+		assertEquals("http://www.eclipse.org/test.xml", document.getRootElement().getChildElements().get(1).getBaseURI());
+	}
 }
diff --git a/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/layout/FakeGraphics.java b/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/layout/FakeGraphics.java
index 2044115..ba4e44c 100644
--- a/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/layout/FakeGraphics.java
+++ b/sourceediting/tests/org.eclipse.wst.xml.vex.core.tests/src/org/eclipse/wst/xml/vex/core/internal/layout/FakeGraphics.java
@@ -1,15 +1,19 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2008 John Krasnay and others.
+ * Copyright (c) 2004, 2010 John Krasnay 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:
  *     John Krasnay - initial API and implementation
+ *     Mohamadou Nassourou - Bug 298912 - rudimentary support for images
  *******************************************************************************/
 package org.eclipse.wst.xml.vex.core.internal.layout;
 
+import java.net.URL;
+
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.wst.xml.vex.core.internal.core.Color;
 import org.eclipse.wst.xml.vex.core.internal.core.ColorResource;
 import org.eclipse.wst.xml.vex.core.internal.core.DisplayDevice;
@@ -17,6 +21,7 @@
 import org.eclipse.wst.xml.vex.core.internal.core.FontResource;
 import org.eclipse.wst.xml.vex.core.internal.core.FontSpec;
 import org.eclipse.wst.xml.vex.core.internal.core.Graphics;
+import org.eclipse.wst.xml.vex.core.internal.core.Image;
 import org.eclipse.wst.xml.vex.core.internal.core.Rectangle;
 
 /**
@@ -26,6 +31,8 @@
 
 	private int charWidth = 6;
 
+	private URL lastDrawnImageUrl = null;
+
 	public FakeGraphics() {
 		DisplayDevice.setCurrent(new DisplayDevice() {
 			public int getHorizontalPPI() {
@@ -56,6 +63,30 @@
 		}
 	};
 
+	private static class FakeImage implements Image {
+		public final URL url;
+		private int height;
+		private int width;
+
+		public FakeImage(final URL url) {
+			this(url, 0, 0);
+		}
+
+		public FakeImage(final URL url, final int width, final int height) {
+			this.url = url;
+			this.height = height;
+			this.width = width;
+		}
+
+		public int getHeight() {
+			return height;
+		}
+
+		public int getWidth() {
+			return width;
+		}
+	}
+
 	public int charsWidth(char[] data, int offset, int length) {
 		return length * charWidth;
 	}
@@ -92,6 +123,15 @@
 	public void drawRect(int x, int y, int width, int height) {
 	}
 
+	public void drawImage(final Image image, final int x, final int y, final int width, final int height) {
+		Assert.isTrue(image instanceof FakeImage);
+		lastDrawnImageUrl = ((FakeImage) image).url;
+	}
+
+	public URL getLastDrawnImageUrl() {
+		return lastDrawnImageUrl;
+	}
+
 	public void fillOval(int x, int y, int width, int height) {
 	}
 
@@ -130,6 +170,10 @@
 		return this.fontMetrics;
 	}
 
+	public Image getImage(URL url) {
+		return new FakeImage(url);
+	}
+
 	public boolean isAntiAliased() {
 		return false;
 	}
@@ -164,7 +208,5 @@
 	}
 
 	public void setXORMode(boolean xorMode) {
-		// TODO Auto-generated method stub
-
 	}
 }