diff --git a/bonsai_scxml_engine/src/main/resources/scxml-schema/scxml.xsd b/bonsai_scxml_engine/src/main/resources/scxml-schema/scxml.xsd
index 14b53128..145c645d 100644
--- a/bonsai_scxml_engine/src/main/resources/scxml-schema/scxml.xsd
+++ b/bonsai_scxml_engine/src/main/resources/scxml-schema/scxml.xsd
@@ -252,10 +252,17 @@
     <!-- state -->
     <xsd:attributeGroup name="scxml.state.attlist">
         <xsd:attribute name="id" type="bonsai.scxml.id"/>
+        <xsd:attribute name="src" type="bonsai.scxml.id"/>
         <xsd:attribute name="initial" type="xsd:IDREFS"/>
         <xsd:attributeGroup ref="scxml.extra.attribs"/>
     </xsd:attributeGroup>
 
+    <xsd:simpleType name="bonsai.scxml.id.nuq" id="ID.nuq">
+        <xsd:restriction base="xsd:string">
+            <xsd:pattern value="^#?( [a-zA-Z_$][a-zA-Z\d_$]*&period;)*[a-zA-Z_$][a-zA-Z\d_$]*" id="NCName.pattern.nuq">
+            </xsd:pattern>
+        </xsd:restriction>
+    </xsd:simpleType>
 
     <xsd:simpleType name="bonsai.scxml.id" id="ID">
         <xsd:restriction base="bonsai.scxml.NCNAME"/>
@@ -263,7 +270,7 @@
 
     <xsd:simpleType name="bonsai.scxml.NCNAME" id="NCName">
         <xsd:restriction base="xsd:Name">
-            <xsd:pattern value="([a-zA-Z_$][a-zA-Z\d_$]*\.)*[a-zA-Z_$][a-zA-Z\d_$]*" id="NCName.pattern">
+            <xsd:pattern value="^#?( [a-zA-Z_$][a-zA-Z\d_$]*&period;)*[a-zA-Z_$][a-zA-Z\d_$]*" id="NCName.pattern">
             </xsd:pattern>
         </xsd:restriction>
     </xsd:simpleType>
@@ -318,6 +325,7 @@
     <xsd:group name="scxml.onentry.content">
         <xsd:sequence>
             <xsd:group maxOccurs="unbounded" minOccurs="0" ref="scxml.core.executablecontent"/>
+            <xsd:element name="assign" type="scxml.assign.type"/>
         </xsd:sequence>
     </xsd:group>
     <xsd:complexType name="scxml.onentry.type">
@@ -325,6 +333,7 @@
         <xsd:attributeGroup ref="scxml.onentry.attlist"/>
     </xsd:complexType>
     <xsd:element name="onentry" type="scxml.onentry.type"/>
+
     <!-- onexit -->
     <xsd:attributeGroup name="scxml.onexit.attlist">
         <xsd:attributeGroup ref="scxml.extra.attribs"/>
@@ -603,7 +612,7 @@
     <xsd:element name="datamodel" type="scxml.datamodel.type"/>
     <!-- data -->
     <xsd:attributeGroup name="scxml.data.attlist">
-        <xsd:attribute name="id" type="xsd:ID" use="required"/>
+        <xsd:attribute name="id" type="bonsai.scxml.id.nuq" use="required"/>
         <xsd:attribute name="src" type="URI.datatype"/>
         <xsd:attribute name="expr" type="ValueLang.datatype"/>
         <xsd:attributeGroup ref="scxml.extra.attribs"/>
@@ -637,10 +646,12 @@
     <xsd:element name="param" type="scxml.param.type"/>
     <!--  assign  -->
     <xsd:attributeGroup name="scxml.assign.attlist">
-        <xsd:attribute name="location" type="LocLang.datatype" use="required"/>
+
+        <xsd:attribute name="location" type="LocLang.datatype"/>
         <xsd:attribute name="expr" type="ValueLang.datatype"/>
         <xsd:attribute default="replacechildren" name="type" type="AssignType.datatype"/>
         <xsd:attribute name="attr" type="xsd:NMTOKEN"/>
+        <xsd:attribute name="name" type="xsd:NCName"/>
         <xsd:attributeGroup ref="scxml.extra.attribs"/>
     </xsd:attributeGroup>
     <xsd:group name="scxml.assign.content">